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

Dlatego mam tabelę, która zawiera 3 pola (nazwa, szerokość i długość) w mojej bazie danych (przestrzenne). Chcę utworzyć kolumnę geometrii / geografii na podstawie tych pól (Lat i Długi), ale niestety bez sukcesu.

Moje pytanie brzmi: Jak mogę to zrobić?

Komentarze

Odpowiedź

Możesz dodać taką kolumnę obliczeniową

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ż zapisuję długie i długie jako liczby.

Komentarze

  • Dziękuję za odpowiedzi, udało mi się aby rozwiązać mój problem za pomocą tego wiersza: UPDATE yourdatabase SET geometry_column = geometry :: P oint ([ColX], [ColY], SRID)
  • Czy jest możliwe utworzenie wyzwalacza? Tak jak wtedy, gdy wypełnisz swoje pola (kolumny X i Y) informacjami, wspomniany skrypt zostanie uruchomiony.

Odpowiedź

Wygląda na to, że chcesz STGeomFromText() lub STPointFromText() Metoda 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 Geometry lub Geography, a następnie użyj języka SQL, aby wypełnić to pole przy użyciu wartości lat / lon.

Komentarze

  • Jaka byłaby różnica w zastosowaniu zamiast tego następującej metody … DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
  • @awesomo – Tak, właściwie możesz go użyć, jeśli chcesz.

Odpowiedź

SQL Server 2012

Możesz to zrobić w ten sposób,

SELECT geography::Point(lat, long, 4326) 

Aby uzyskać więcej informacji, zobacz mój post dotyczący administratorów baz danych, „SQL Server Konstruktor punktów czy wersja ST_Point (x, y)? „

Komentarze

  • Jeśli konstruktor dla Point przyjmuje argumenty x, y, więc będziesz chciał zmienić kolejność w następujący sposób: geography::Point(long, lat, 4326). Długość geograficzna to x, a szerokość to y.

Odpowiedź

Jeśli zaokrąglenie oryginalnych wartości Long / Lat występuje podczas używania instrukcji CONVERT(VARCHAR,.

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) 

Komentarze

  • Obawiam się używania tej metody, ponieważ wiąże się to z utratą precyzji lokalizacji.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *