Ini adalah pertanyaan geometri SQL Server yang tampaknya sederhana yang saya pikir akan memiliki solusi out-of-the-box, tapi saya tidak beruntung menemukan satu.
Maksud saya adalah untuk memilih semua rekaman dalam satu tabel yang memiliki poligon yang bersarang (terkandung) dalam poligon yang lebih besar dari tabel lain. Saya memiliki fungsi yang diharapkan STWithin
dan STContains
sebagai solusi yang saya butuhkan, tetapi sayangnya, keduanya hanya mengidentifikasi poligon bagian dalam yang bersarang dalam poligon yang lebih besar, bukan poligon bersarang yang menyentuh batas poligon yang lebih besar. Lihat gambar misalnya.
Pilihan alternatif yang sesuai dengan kebutuhan saya adalah STIntersection
. Masalah dengan fungsi ini, bagaimanapun, adalah hanya mengembalikan kolom geometri! Saya ingin mendapatkan ID rekaman sebagai gantinya. Adakah yang punya saran tentang bagaimana ini bisa dilakukan?
STWithin
:
select a.bg10 from
gis.usa_10_block_group a
join gis.usa_10_mkt_definition b
on a.shape.STWithin(b.shape) = 1
where b.mktname = 'Loop'
STContains
:
select a.bg10 from
gis.usa_10_block_group a
join gis.usa_10_mkt_definition b
on b.shape.STContains(a.shape) = 1
where b.mktname = 'Loop'
STIntersection
:
select a.shape.STIntersection(b.shape)
from gis.usa_10_block_group a
join gis.usa_10_mkt_definition b
on a.shape.STIntersects(b.shape) = 1
where b.mktname = 'Loop'
Edit:
Satu saran adalah untuk menghilangkan STIntersection
dan menggunakan hanya STIntersects
sebagai berikut:
STIntersects
:
select a.bg10
from gis.usa_10_block_group a
join gis.usa_10_mkt_definition b
on a.shape.STIntersects(b.shape) = 1
where b.mktname = 'Loop'
Masalah dengan pendekatan ini, adalah yang STIntersects
muncul untuk memilih semua poligon baik di dalam maupun di luar dan menyentuh poligon yang lebih besar, bukan hanya yang ketat di dalamnya. Lihat gambar misalnya.
STContains
atauSTWithin
. Bukan hack yang bagus, tetapi akan memberi Anda hasil yang Anda inginkan. Pilihan lain adalah melakukan STIntersect dengan perbandingan area titik-temu dan area poligon.