Utwórz kolumnę geografia / geometria z pól xiy - SQL Server 2008


26

Jestem nowy w SQL Server 2008 i mam nadzieję, że zrozumiesz moje pytanie / potrzebę.

Mam więc tabelę, która zawiera 3 pola (nazwa, długość i długość) w mojej bazie danych (przestrzenna). Chcę utworzyć kolumnę geometria / geografia na podstawie tych pól (Lat i Long), ale niestety bez powodzenia.

Moje pytanie brzmi: jak mogę to zrobić?


Odpowiedzi:


36

Możesz dodać obliczoną kolumnę w ten sposób

alter table yourTable add geographyColumn as geography::STGeomFromText('POINT('+convert(varchar(20),Long)+' '+convert(varchar(20),Lat)+')',4326)

Dodałem konwersję z lng lub lat, ponieważ przechowuję Long i Lats jako liczby.


3
Dziękuję za odpowiedzi, udało mi się rozwiązać problem za pomocą tej linii: AKTUALIZUJ swoją bazę danych ZESTAW geometria_kolumna = geometria :: Punkt ([ColX], [ColY], SRID)
Tudor

3
Możliwe jest utworzenie do tego wyzwalacza? Podobnie jak w przypadku wypełnienia pól (kolumny X i Y) informacjami wymienionymi powyżej skrypt zostanie uruchomiony.
Tudor

10

Wygląda na to, że chcesz użyć metody STGeomFromText()lub STPointFromText()SQL:

DECLARE @g geography;
SET @g = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);
SELECT @g.ToString();

lub

DECLARE @g geography;
SET @g = geography::STPointFromText('POINT(-122.34900 47.65100)', 4326);
SELECT @g.ToString();

Utwórz pole Geometrylub Geographypole, a następnie użyj kodu SQL, aby wypełnić to pole za pomocą wartości lat / lon.


Jaka byłaby różnica w stosowaniu zamiast tego następującej metody ...DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
awesomo

@awesomo - Tak, możesz użyć tego, jeśli chcesz.
Chad Cooper


1

Jeśli wystąpi zaokrąglenie oryginalnych wartości Long / Lat podczas korzystania z CONVERT(VARCHAR,instrukcji.

Spróbuj użyć:

GeoData = geometry:: STGeomFromText('POINT(' + CAST(CAST(X AS decimal(13, 2)) AS varchar) + ' '  + CAST(CAST(Y AS decimal(13, 2)) AS varchar) + ')', 4326)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.