Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Sql Server 2008 géographie Limites de taille de LineString

Je n'ai entendu parler d'aucune limite de taille sur LINESTRING (certainement pas aussi courte que 567 points).

Je viens d'essayer un exemple

DECLARE @geom GEOGRAPHY
SET @geom = GEOGRAPHY::STGeomFromText(
  'LINESTRING (142.98873903132778 -11.006193013241768
   , 142.9891970000001 -11.005916999999954
   -- SNIP 1,119 points
   , 142.04362479801711 -11.629451936538608 )', 4326)
SELECT @geom, @geom.STNumPoints()

qui a bien fonctionné (crée le LINESTRING et compte 1 122 points).

Votre exemple échoue-t-il avec N'IMPORTE QUEL 567 points - ou juste un ensemble spécifique de points (pouvez-vous les partager avec nous ?). Je suppose que je me demande si votre 568e point rend votre instance GEOGRAPHY plus grande qu'un hémisphère? Par exemple, si je change mon exemple en ajoutant un autre point (0,0) qui force la GEOGRAPHIE à être trop grande :

DECLARE @geom GEOGRAPHY
SET @geom = GEOGRAPHY::STGeomFromText(
  'LINESTRING (142.98873903132778 -11.006193013241768
   , 142.9891970000001 -11.005916999999954
   -- SNIP 1,119 points
   , 142.04362479801711 -11.629451936538608
   , 0 0 )', 4326)         -- ADDED ANOTHER POINT !
SELECT @geom, @geom.STNumPoints()

J'obtiens ArgumentException 24205 :L'entrée spécifiée ne représente pas une instance géographique valide car elle dépasse un seul hémisphère. Chaque instance géographique doit tenir dans un seul hémisphère. Une raison courante de cette erreur est qu'un polygone a une mauvaise orientation d'anneau. ce qui évidemment n'est pas exactement la même erreur comme vous - mais j'ai pensé que je le soulèverais quand même [Passez à la MISE À JOUR à la fin pour une meilleure idée]

Ma deuxième question pour vous est :est-ce que cela fonctionne avec le type de données GEOMETRY ? Par exemple. si je change mon exemple "cassant" ci-dessus pour utiliser GEOMETRY alors ça marche bien :

DECLARE @geom GEOMETRY    -- using GEOMETRY type instead
SET @geom = GEOMETRY::STGeomFromText(
  'LINESTRING (142.98873903132778 -11.006193013241768
   , 142.9891970000001 -11.005916999999954
   -- SNIP 1,119 points
   , 142.04362479801711 -11.629451936538608
   , 0 0 )', 4326)         -- THIS POINT BREAKS GEOGRAPHY but works now!
SELECT @geom, @geom.STNumPoints()

Si vous pouvez publier plus de détails sur votre problème spécifique, cela pourrait suggérer le problème sous-jacent. Pourriez-vous également ajouter si vous entrez les points dans SQL Management Studio ou via le code (est-ce l'assemblage des types de données C# et SQL) ? Quel est le texte complet du message d'erreur que vous recevez (s'il y a plus que ce que vous avez cité ci-dessus - voir mon erreur).

Mais la réponse courte est "Je ne pense pas qu'il y ait une limite de 567 points".

MISE À JOUR : Message d'Ed contient l'erreur exacte que vous obtenez (System.ArgumentException :24200) - donc si vous pouvez faire fonctionner vos données dans GEOMETRY à la place, cela vaut peut-être la peine d'essayer :