sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server 2008 geografi LineString storleksbegränsningar

Jag har inte hört talas om några storleksbegränsningar på LINESTRING (absolut inte så kort som 567 poäng).

Jag försökte precis ett exempel

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

vilket fungerade bra (skapar LINESTRING och räknar 1 122 poäng).

Misslyckas ditt exempel med NÅGON 567 poäng - eller bara en specifik uppsättning poäng (kan du dela dem med oss?). Jag antar att jag undrar om din 568:e punkt gör din GEOGRAPHY-instans större än en halvklot? Om jag till exempel ändrar mitt exempel genom att lägga till ytterligare en punkt (0,0) som tvingar GEOGRAFIN att bli för stor:

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

Jag får ArgumentException 24205:Den angivna inmatningen representerar inte en giltig geografiinstans eftersom den överskrider en enskild halvklot. Varje geografiinstans måste passa inuti en enda halvklot. En vanlig orsak till detta fel är att en polygon har fel ringorientering. vilket uppenbarligen inte är exakt samma fel som du - men jag tänkte höja det ändå [Hoppa till UPPDATERING i slutet för en bättre idé]

Min andra fråga till dig är:fungerar det med datatypen GEOMETRY? T.ex. om jag ändrar mitt "brytande" exempel ovan till att använda GEOMETRY så fungerar det bra:

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

Om du kan lägga upp lite mer information om ditt specifika problem kan det tyda på det underliggande problemet. Kan du också lägga till om du anger punkterna i SQL Management Studio eller via kod (är det C# och SQL datatyper montering)? Vad är den fullständiga texten i felmeddelandet du får (om det finns mer än det du citerade ovan - se mitt fel).

Men det korta svaret är "Jag tror inte att det finns en gräns på 567 poäng".

UPPDATERING: Eds inlägg innehåller det exakta felet du får (System.ArgumentException:24200) - så om du istället kan få data att fungera i GEOMETRY kan det här vara värt ett försök:



  1. räkna lördagar före 15 datum som arbetsdagar och hoppa över andra

  2. MySQL-prestanda för frågegörande tillägg av kolumner i where-klausul

  3. Rätt sätt att få användarnamn och lösenord från anslutningssträngen?

  4. Hur förhindrar du SQL-injektion i LAMP-applikationer?