Bagi saya ini sepertinya pertanyaan sederhana (dan mungkin memang demikian) namun saya tidak dapat menemukan contoh yang memberi saya jawabannya. Menggunakan PostGIS, saya hanya ingin memilih titik yang berada di luar poligon. Pada akhirnya ini adalah kebalikan dari ST_Intersects, sejauh yang saya bisa melihatnya.
Contoh: Saya memiliki layer taxlot dan layer titik alamat. Saya berasumsi saya harus menggunakan ST_Intersects, tetapi bagaimana saya mengatakannya untuk melakukan seleksi terbalik? Saya pikir mungkin menambahkan pernyataan TIDAK di depan kode di bawah ini, tetapi itu tidak berhasil.
CREATE table t_intersect AS
SELECT
hp.gid,
hp.st_address,
hp.city,
hp.st_num,
hp.the_geom
FROM
public.parcel as par,
public.housepoints as hp
WHERE
ST_Intersects(hp.the_geom,par.the_geom);
postgis
geoprocessing
sql
intersection
Ryan Dalton
sumber
sumber
Jawaban:
Alasan tidak bekerja dengan "tidak berpotongan" adalah bahwa Anda hanya membandingkan geometri berpasangan; akan ada masalah yang sama dengan disjoint. Setiap housepoint akan memisahkan beberapa paket bahkan jika itu memotong satu paket.
saran underdark tidak memiliki masalah itu. Ada juga trik lain yang mungkin akan membuat penggunaan indeks lebih efektif:
Idenya adalah untuk bergabung dengan mereka dengan st_intersects dan mendapatkan baris di mana id paket tidak ada.
Indeks yang diperlukan di sini adalah indeks spasial dan indeks pada gid dalam paket (dengan asumsi bahwa id dalam tabel paket disebut gid juga).
sumber
Anda mungkin mencari ST_Disjoint
sumber
Dalam hal tidak ada fungsi khusus:
sumber
Di sini kami menggunakan
NOT EXISTS
danCREATE TABLE AS SELECT
(CTAS)sumber
Bagaimana dengan ST_Disjoint? - Mengembalikan BENAR jika Geometri tidak "berpotongan spasial" - jika mereka tidak berbagi ruang apa pun bersama-sama.
sumber
Dalam beberapa kasus sangat berguna menggunakan LATERAL GABUNG, bisa sangat cepat Seharusnya terlihat seperti
sumber
Cukup gunakan TIDAK sebelum ST_Intersects melakukan trik:
Ini mendapatkan semua alamat yang tidak berada dalam lingkungan # 62:
Perhatikan urutan kolom geom - poligon pertama, poin kedua, yang dibalik dari penggunaan ST_Intersects yang biasa.
Cepat dan sederhana! Bertanya-tanya bagaimana melakukan ini dengan benar untuk sementara waktu!
sumber
Ini mungkin bukan solusi tercepat ... Tapi saya biasanya hanya menipu dengan menggabungkan semua fitur dari tabel lainnya.
Bagus dan tajam jika tabel not_in_here tidak rumit.
sumber