Buat kolom geografi / geometri dari bidang x dan y - SQL Server 2008

26

Saya baru di SQL Server 2008 dan saya harap Anda akan mengerti pertanyaan / kebutuhan saya.

Jadi, saya memiliki tabel yang berisi 3 bidang (Nama, Lat dan Panjang) di basis data saya (spasial). Saya ingin membuat kolom geometri / geografi berdasarkan pada bidang tersebut (Lat dan Panjang) tetapi sayangnya tidak berhasil.

Pertanyaan saya adalah: Bagaimana saya bisa melakukan itu?

Tudor
sumber

Jawaban:

36

Anda dapat menambahkan kolom yang dihitung seperti ini

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

Saya telah menambahkan konversi dari lng atau lat karena saya menyimpan Long dan Lats sebagai angka.

Jamo
sumber
3
Terima kasih atas jawaban Anda, saya berhasil menyelesaikan masalah saya menggunakan baris ini: MEMPERBARUI database Anda SET geometry_column = geometry :: Point ([ColX], [ColY], SRID)
Tudor
3
Apakah mungkin membuat pemicu untuk ini? Seperti ketika Anda mengisi bidang Anda (kolom X dan Y) dengan informasi skrip yang disebutkan di atas akan berjalan.
Tudor
10

Sepertinya Anda menginginkan metode STGeomFromText()atau STPointFromText()SQL:

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

atau

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

Buat bidang Geometryatau Anda Geography, lalu gunakan SQL untuk mengisi bidang itu menggunakan nilai lat / lon Anda.

Chad Cooper
sumber
Apa yang akan menjadi perbedaan dalam menggunakan metode berikut sebagai gantinya ...DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
awesomo
@awesomo - Ya, Anda bisa menggunakan yang itu jika Anda mau, sebenarnya.
Chad Cooper
1

Jika pembulatan nilai Long / Lat asli terjadi saat menggunakan CONVERT(VARCHAR,pernyataan.

Coba gunakan:

GeoData = geometry:: STGeomFromText('POINT(' + CAST(CAST(X AS decimal(13, 2)) AS varchar) + ' '  + CAST(CAST(Y AS decimal(13, 2)) AS varchar) + ')', 4326)
Liz
sumber