Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Sql Server 2008 geografia Limitazioni delle dimensioni di LineString

Non ho sentito di alcuna limitazione di dimensione su LINESTRING (di certo non inferiore a 567 punti).

Ho appena provato un esempio

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()

che ha funzionato bene (crea il LINESTRING e conta 1.122 punti).

Il tuo esempio fallisce con QUALSIASI 567 punti o solo un insieme specifico di punti (puoi condividerli con noi?). Immagino che mi chiedo se il tuo 568° punto renda la tua istanza GEOGRAPHY più grande di un emisfero? Ad esempio, se cambio il mio esempio aggiungendo un altro punto (0,0) che costringe la GEOGRAFIA ad essere troppo 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()

Ottengo ArgumentException 24205:l'input specificato non rappresenta un'istanza geografica valida perché supera un singolo emisfero. Ogni istanza di geografia deve rientrare in un singolo emisfero. Un motivo comune per questo errore è che un poligono ha l'orientamento errato dell'anello. che ovviamente non è esattamente lo stesso errore come te - ma ho pensato di sollevarlo comunque [Salta all'AGGIORNAMENTO alla fine per un'idea migliore]

La mia seconda domanda per te è:funziona con il tipo di dati GEOMETRIA? Per esempio. se cambio il mio esempio di "rottura" sopra per usare GEOMETRIA, allora funziona bene:

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()

Se puoi pubblicare qualche dettaglio in più sul tuo problema specifico, potrebbe suggerire il problema sottostante. Potresti anche aggiungere se stai inserendo i punti in SQL Management Studio o tramite codice (è un assembly di tipi di dati C# e SQL)? Qual è il testo completo del messaggio di errore che ricevi (se c'è più di quello che hai citato sopra, vedi il mio errore).

Ma la risposta breve è "Non credo che ci sia un limite di 567 punti".

AGGIORNAMENTO: Post di Ed contiene l'errore esatto che ottieni (System.ArgumentException:24200) - quindi se riesci invece a far funzionare i tuoi dati in GEOMETRY, potrebbe valere la pena provare: