Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Sql Server 2008 ograniczenia rozmiaru LineStringu geograficznego

Nie słyszałem o żadnych ograniczeniach rozmiaru LINESTRING (z pewnością nie tak krótkich jak 567 punktów).

Właśnie spróbowałem przykładu

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

który działał dobrze (tworzy LINESTRING i liczy 1122 punkty).

Czy Twój przykład zawodzi z DOWOLNYMI 567 punktami - czy tylko określonym zestawem punktów (czy możesz się nimi z nami podzielić?). Myślę, że zastanawiam się, czy twój 568 punkt sprawia, że ​​twoja instancja GEOGRAFII jest większa niż półkula? Na przykład, jeśli zmienię swój przykład, dodając kolejny punkt (0,0), co wymusza zbyt dużą GEOGRAFIĘ:

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

Otrzymuję ArgumentException 24205:Określone dane wejściowe nie reprezentują prawidłowego wystąpienia geograficznego, ponieważ przekraczają jedną półkulę. Każda instancja geografii musi mieścić się na jednej półkuli. Częstą przyczyną tego błędu jest zła orientacja pierścienia wielokąta. co oczywiście nie jest dokładnie tym samym błędem tak jak ty - ale pomyślałem, że i tak to podniosę [Przejdź do UPDATE na końcu, aby uzyskać lepszy pomysł]

Moje drugie pytanie do ciebie brzmi:czy to działa z typem danych GEOMETRIA? Np. jeśli zmienię mój "łamliwy" przykład powyżej, aby użyć GEOMETRII, to działa dobrze:

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

Jeśli możesz opublikować więcej szczegółów na temat konkretnego problemu, może to sugerować przyczynę problemu. Czy możesz również dodać, czy wprowadzasz punkty w SQL Management Studio, czy za pomocą kodu (czy jest to zestaw typów danych C# i SQL)? Jaki jest pełny tekst komunikatu o błędzie, który otrzymasz (jeśli jest więcej niż to, co zacytowałeś powyżej - zobacz mój błąd).

Ale krótka odpowiedź brzmi:„Nie sądzę, że istnieje limit 567 punktów”.

AKTUALIZACJA: Post Eda zawiera dokładny błąd, który otrzymasz (System.ArgumentException:24200) - więc jeśli możesz zamiast tego uzyskać dane działające w GEOMETRII, warto spróbować:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd zapytania geoprzestrzennego SQL-Server 2008 R2 dla Circular String

  2. Jak mogę utworzyć użytkownika w bazie danych SQL Server Express dodanej do mojego projektu?

  3. EAV przez SQL Server

  4. Jak rzutować podciąg SQL na dziesiętny?

  5. W Sql Server, jak obracać dla wielu kolumn