sql >> Database >  >> RDS >> Sqlserver

Sql Server 2008 geografie LineString groottebeperkingen

Ik heb niets gehoord over maatbeperkingen op LINESTRING (zeker niet zo kort als 567 punten).

Ik heb net een voorbeeld geprobeerd

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

wat prima werkte (creëert de LINESTRING en telt 1122 punten).

Mislukt je voorbeeld met ELKE 567 punten - of alleen een specifieke reeks punten (kun je ze met ons delen?). Ik denk dat ik me afvraag of je 568e punt je GEOGRAFIE-instantie groter maakt dan een halfrond? Als ik bijvoorbeeld mijn voorbeeld verander door nog een punt (0,0) toe te voegen, waardoor de GEOGRAFIE te groot wordt:

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

Ik krijg ArgumentException 24205:de opgegeven invoer vertegenwoordigt geen geldige geografische instantie omdat deze een enkel halfrond overschrijdt. Elke geografische instantie moet binnen één halfrond passen. Een veelvoorkomende reden voor deze fout is dat een polygoon de verkeerde ringoriëntatie heeft. wat duidelijk niet exact dezelfde fout is zoals jij - maar ik dacht dat ik het toch zou verhogen [Ga naar de UPDATE aan het einde voor een beter idee]

Mijn tweede vraag aan u is:werkt het met het datatype GEOMETRY? bijv. als ik mijn "brekende" voorbeeld hierboven verander om GEOMETRY te gebruiken, dan werkt het prima:

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

Als u wat meer details over uw specifieke probleem kunt posten, kan dit het onderliggende probleem suggereren. Zou je ook kunnen toevoegen of je de punten invoert in SQL Management Studio of via code (is het C# en SQL-gegevenstypen assemblage)? Wat is de volledige tekst van de foutmelding die je ontvangt (als er meer is dan wat je hierboven hebt geciteerd - zie mijn fout).

Maar het korte antwoord is:"Ik denk niet dat er een limiet van 567 punten is".

UPDATE: Ed's bericht bevat de exacte fout die u krijgt (System.ArgumentException:24200) - dus als u uw gegevens in plaats daarvan in GEOMETRY kunt laten werken, is dit misschien het proberen waard:



  1. Hoe SQL opvragen met actieve record voor datums tussen gespecificeerde tijden

  2. Vraag kolomnamen op uit een tabel van een andere gebruiker

  3. JQUERY &php post error 500 (interne serverfout)

  4. Verander de achtergrondkleur van de HTML <area> tag