sql >> Databáze >  >> RDS >> Sqlserver

Sql Server 2008 geografie LineString omezení velikosti

Neslyšel jsem o žádném omezení velikosti LINESTRING (rozhodně ne tak krátkých jako 567 bodů).

Právě jsem zkusil příklad

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

což fungovalo dobře (vytvoří LINESTRING a počítá 1 122 bodů).

Selhal váš příklad s JAKÝKOLIV 567 body – nebo jen s konkrétní sadou bodů (můžete je s námi sdílet?). Myslím, že by mě zajímalo, zda váš 568. bod dělá vaši instanci GEOGRAPHY větší než polokoule? Pokud například změním svůj příklad přidáním dalšího bodu (0,0), což způsobí, že GEOGRAFIE bude příliš velká:

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

Dostávám výjimku ArgumentException 24205:Zadaný vstup nepředstavuje platnou instanci geografie, protože přesahuje jednu hemisféru. Každá instance geografie se musí vejít do jedné hemisféry. Obvyklým důvodem této chyby je, že mnohoúhelník má špatnou orientaci prstence. což zjevně není úplně stejná chyba jako vy – ale myslel jsem, že to stejně zvednu [Přeskočte na AKTUALIZACI na konci pro lepší představu]

Moje druhá otázka na vás je:funguje to s datovým typem GEOMETRY? Např. pokud změním svůj "rozbitný" příklad výše na použití GEOMETRY, pak to funguje dobře:

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

Pokud můžete zveřejnit nějaké další podrobnosti o vašem konkrétním problému, může to naznačovat základní problém. Mohl byste také doplnit, zda zadáváte body v SQL Management Studio nebo pomocí kódu (jedná se o sestavení datových typů C# a SQL)? Jaký je úplný text chybové zprávy, kterou obdržíte (pokud je jich více než to, co jste citovali výše – viz moje chyba).

Ale stručná odpověď je „Nemyslím si, že existuje limit 567 bodů“.

AKTUALIZACE: Edův příspěvek obsahuje přesnou chybu, kterou dostáváte (System.ArgumentException:24200) – takže pokud můžete místo toho zpracovat data v GEOMETRY, mohlo by to stát za vyzkoušení:



  1. 2 způsoby, jak vytvořit tabulku na propojeném serveru pomocí T-SQL

  2. Vrátí RDSdataService execute_statement (BadRequestException)

  3. Více dotazů na sobě závislých

  4. PHP strtotime():datum zobrazující '1970-01-01 ' po konverzi