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

SQL Server 2008 geografi LineString-størrelsesbegrænsninger

Jeg har ikke hørt om nogen størrelsesbegrænsninger på LINESTRING (bestemt ikke så kort som 567 point).

Jeg har lige prøvet et eksempel

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

hvilket fungerede fint (opretter LINESTRING og tæller 1.122 point).

Mislykkes dit eksempel med NOGEN 567 point - eller bare et bestemt sæt point (kan du dele dem med os?). Jeg gætter på, om dit 568. punkt gør din GEOGRAPHY-instans større end en halvkugle? For eksempel, hvis jeg ændrer mit eksempel ved at tilføje endnu et punkt (0,0), hvilket tvinger GEOGRAFI til at være for stort:

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

Jeg får ArgumentException 24205:Det angivne input repræsenterer ikke en gyldig geografiforekomst, fordi den overskrider en enkelt halvkugle. Hver geografiforekomst skal passe inde i en enkelt halvkugle. En almindelig årsag til denne fejl er, at en polygon har den forkerte ringretning. hvilket åbenbart ikke er nøjagtig samme fejl som dig - men jeg tænkte, at jeg ville hæve det alligevel [Spring til OPDATERING til sidst for en bedre idé]

Mit andet spørgsmål til dig er:virker det med GEOMETRY-datatypen? For eksempel. hvis jeg ændrer mit "brud" eksempel ovenfor til at bruge GEOMETRY så fungerer det fint:

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

Hvis du kan skrive nogle flere detaljer om dit specifikke problem, kan det tyde på det underliggende problem. Kan du også tilføje, om du indtaster punkterne i SQL Management Studio eller via kode (er det C# og SQL datatyper assembly)? Hvad er den fulde tekst af den fejlmeddelelse, du modtager (hvis der er mere end det, du citerede ovenfor - se min fejl).

Men det korte svar er "Jeg tror ikke, der er en grænse på 567 point".

OPDATERING: Eds indlæg indeholder den nøjagtige fejl du får (System.ArgumentException:24200) - så hvis du i stedet kan få dine data til at fungere i GEOMETRY, kan dette være et forsøg værd:



  1. Initialiseringsafsnit af pakken

  2. Hvad er forskellen mellem en midlertidig tabel og tabelvariabel i SQL Server?

  3. Håndter NULL-værdien i UNPIVOT

  4. Eksport af en tabel fra Amazon RDS til en CSV-fil