Lagi

Permintaan Spasial SQL Server

Permintaan Spasial SQL Server


Saya mencari cara untuk mempelajari kueri untuk SQL Server Spatial (2008/2012). Saya memiliki tabel yang dibuat dari Shape2SQL dan telah mencoba menjalankan kueri persimpangan sederhana untuk mendapatkan hasil dari tabel yang termasuk dalam poligon yang saya buat.

Saya mendapatkan sejauh:

deklarasikan @poly geometri = 'POLYGON((-9372539.231 4862367.224, -9370110.628 4925510.907, -9457540.343 4926118.058, -945571889 4840509.795, -9372539.231 4862367.224))'

Saya belum menemukan cara untuk mengambil geometri dari tabel shapefile yang saya impor dan mendapatkan poin yang termasuk dalam geometri poligon. Opsi yang saya temukan online tampaknya mengambil WKT dari bidang di tabel untuk menjalankan persimpangan.

Saya mencari sumber daya yang berlaku untuk jenis kueri ini, atau saran lain yang dapat membantu saya selama ini. Saya mengambil salinan Memulai Spasial dengan SQL Server 2008 tapi belum sempat baca.

Akhirnya, tujuan saya adalah untuk dapat menghasilkan kueri berdasarkan tingkat peta dan fitur kueri yang termasuk dalam batas itu.

Sunting

Saya mencari kueri untuk memungkinkan saya melakukan persimpangan di atas. Sumber daya tambahan apa pun akan bagus tetapi bukan jawaban untuk saya.

Sejauh ini, saya telah menemukan cara untuk mengambilgeomcatatan dan mengubahnya menjadi WKT.

PILIH [geom].STAsText() DARI [Table] WHERE [geom] TIDAK NULL

Apa yang saya coba lakukan adalah mengambil kumpulan data itu, saat ini saya memasukkannya ke dalam tabel sementara, tetapi saya rasa itu tidak perlu. Yang ingin saya lakukan adalah mencari tahu catatan mana dari kumpulan data itu yang termasuk dalam poligon umum (@poli) saya sedang menyiapkan.

Saya berpikir jika saya mengambil hasil WKT dan memasukkannya ke dalamKOLEKSI GEOMETRI, saya bisa meneruskannya menjadi sesuatu sepertiPILIH @myWKTResults.STIntersection(@poly).ToString(). Saya hanya tidak tahu/tidak dapat menemukan contoh yang baik untuk langkah selanjutnya.

Hasil

Berangkat dari komentar mapBaker, saya dapat mengatur ini agar berfungsi. Permintaan saya akhirnya menjadi:

mendeklarasikan @poli geometri = 'POLYGON((-9486683.581 4810152.256, -9282073.762 4821688.121, -9262037.786 4625578.413, -9477576.319 4628614.167, -9486683.581 4810152.256))' SELECT * FROM [TABLE] WHERE @poly.STgeomsects ) <> 0;

Satu-satunya hal yang saya benar-benar sesuaikan dengan menambahkan.STAsText()ke dalam kueri karena berjalan tanpa tidak macet, tetapi saya juga mendapatkan 0 baris kembali.


Jika Anda memiliki poligon yang ingin Anda gunakan sebagai variabel yang dideklarasikan dan memotongnya dengan tabel yang berisi geometri yang ada, kueri Anda (termasuk deklarasi variabel poligon Anda) akan terlihat seperti ini:

(Sintaks MSSQL Server)

mendeklarasikan geometri @polygon = 'POLYGON((-9486683.581 4810152.256, -9282073.762 4821688.121, -9262037.786 4625578.413, -9477576.319 4628614.167, -9486683.581 4810152.256))' pilih * dari tablename dimana tablename.geom.STIntersects(@polygon) = 1(@polygon.

Tonton videonya: Transform the schema of SQL Server spatial data