2008-12-17 10 views
21

Używam nowej kolumny geograficznej w SQL Server 2008 i funkcji STGeomFromText. Oto mój kod (działa z AdventureWorks2008)Kolumna Geometria: STGeomFromText i SRID (co to jest SRID?)

DECLARE @region geography; 
set @region = geography::STGeomFromText('POLYGON((
     -80.0 50.0, -90.0 50.0, 
     -90.0 25.0, -80.0 25.0, 
     -80.0 50.0))', 4326); 

SELECT @region; 

Moje pytanie dotyczy 4326 w kodzie. Ma to być przestrzenny identyfikator referencyjny. Kiedy idę do MSDN, nie ma na nim zbyt wiele. Jeśli zmienię wartość na 56, pojawia się błąd informujący, że wartość musi znajdować się w tabeli sys.spatial_reference_systems.

Możesz zajrzeć na tej tabeli, wykonując:

select * from sys.spatial_reference_systems 

Jest kolumna well_known_text w tej tabeli, ale nie mów mi dużo. Wartość dla 4326 to:

GEOGCS["WGS 84", DATUM["World Geodetic System 1984", ELLIPSOID["WGS 84", 6378137, 298.257223563]], PRIMEM["Greenwich", 0], UNIT["Degree", 0.0174532925199433]] 

Czy ktoś może mi wyjaśnić tę tajemnicę? Co to jest SRID?

Odpowiedz

15

Więc skończyłem rozmawiać z byłym wojskowym facetem, który był specjalistą od mapowania radarów/map. Zasadniczo dokładnie wiedział, co to jest liczba (4326), skąd pochodzi i dlaczego tam jest.

Jest to branżowy standard obliczania geografii. Problem polega na tym, że Ziemia nie jest idealną sferą (wybrzusza się w środku), a SR32 4326 to wyjaśnia.

Jak już stwierdziłem, tabela sys.spatial_reference_systems wyświetla cały kod i jego zawartość. Ale krótka wersja jest taka, że ​​zamierzasz używać tylko 4326, chyba że masz konkretny powód, aby użyć czegoś innego.

+1

Nie zgadzam się z twoim stwierdzeniem: "Właściwie zamierzasz używać tylko 4326, chyba że masz konkretny powód". Za każdym razem, gdy masz do czynienia z danymi na niewielkim obszarze (państwo myślowe lub hrabstwo, w przeciwieństwie do świata), użyjesz lokalnego, przewidywanego układu współrzędnych. Systemy te zostały zaprojektowane w celu lepszego odwzorowania powierzchni Ziemi na płaszczyźnie 2D, w przeciwieństwie do globusa 3D. Najczęściej kończy się uzyskiwanie danych w projekcji innej niż WGS84, a będziesz musiał dokonać konwersji. Jeśli masz do czynienia tylko z punktami GPS, masz rację zakładając, że dane są w 4326 99% przypadków. – Roy

16

Istnieje wiele systemów mapowania Ziemi. Na przykład chcesz zmapować jakiś stan w USA. Możesz ustawić punkt najbardziej na południowy wschód jako 0,0 i odwzorować wszystkie inne współrzędne przestrzenne zgodnie z tym punktem. Z drugiej strony możesz chcieć zmapować niektóre dane przestrzenne rozciągające się na całej mapie. W każdym razie musisz wybrać jakiś punkt jako 0,0. Dodatkowo musisz wybrać jakąś jednostkę miary: mile/kilometry/stopnie/inne magiczne jednostki, które lepiej pasują do ciebie. Przez lata opracowywano wiele takich systemów. Każdy ma swój własny punkt zerowy, swoje własne współrzędne, własne zasady dotyczące tego, czy ziemia jest płaska, czy nie. SRID lub SRS to id takiego systemu. Za pomocą tego identyfikatora można odwzorować punkt wyrażony w jednym systemie na inny system, chociaż czasami wymaga to dość skomplikowanej matematyki.

I około 4326 SRID. Nazywany również systemem "WGS 84" (http://en.wikipedia.org/wiki/World_Geodetic_System). Jest to najbardziej powszechny system reprezentujący punkt na sferycznej (nie płaskiej) ziemi. Używa stopnia, minuty, drugiego zapisu, a jego współrzędne xiy są zwykle nazywane szerokością i długością geograficzną.

Najczęściej używana niesferyczna projekcja ziemi nazywa się UTM. Możesz przeczytać o tym tutaj: http://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system

Tak długo, jak długo nie przeprowadzasz żadnych przestrzennych konwersji z jednego systemu do drugiego, nie zależy Ci na systemie, którego używasz.

+1

Ta ostatnia linia naprawdę mnie nęka, promując ignorancję, ponieważ * prawdopodobnie to nie ma znaczenia *? – Stijn

2

Znalazłem tę stronę: http://spatialreference.org/ref/epsg/4326/ bardzo pomocne w zrozumieniu SRID, którego zamierzasz używać.Zapewnia poręczną mapę, niektóre informacje o ramkach i inne linki.

Dla innych SRID wystarczy zmienić cyfry na końcu adresu URL na to, czego szukasz.

1

Zwrócona odległość zależy od zdefiniowanego przez Ciebie rodzaju geograficznego.

W poniższym przykładzie użyto domyślnego SRID z 4336, patrz drugi argument STGeomFromText. Oznacza to, że odległość zwrócony jest w metrach, znajdziesz to poprzez wysłanie zapytania do wyświetlania katalogu spatial_reference_systems tj select srs.unit_of_measure from sys.spatial_reference_systems as srs where srs.spatial_reference_id = 4326

Jako alternatywę dla STGeomFromText, można użyć parse który zakłada SRID od 4326 i nie trzeba go określić jednoznacznie .

Podczas obliczania odległości między dwoma punktami należy użyć tego samego SRID dla obu typów geograficznych, w przeciwnym razie wystąpi błąd. Przykład:

DECLARE @address1 GEOGRAPHY 
DECLARE @address2 GEOGRAPHY 
DECLARE @distance float 
SET @address1 = GEOGRAPHY::STGeomFromText ('point(53.046908 -2.991673)',4326) 
SET @address2 = GEOGRAPHY::STGeomFromText ('point(51.500152 -0.126236)',4326) 
SET @distance = @address1.STDistance(@address2) 
SELECT @distance --this is the distance in meters