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ć?

Tudor
źródło

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.

Jamo
źródło
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.

Chad Cooper
źródło
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)
Liz
źródło