Mengembalikan true jika dua objek spasial berada dalam jarak tertentu satu sama lain, dan false jika tidak. Berbeda dengan ST_Distance, fungsi ST_DWithin secara otomatis memanfaatkan indeks spasial yang tersedia, sehingga menjadi pilihan standar untuk kueri kedekatan.
Sintaksis
boolean ST_DWithin(geometry g1, geometry g2, double precision distanceOfSrid);
boolean ST_DWithin(geography gg1, geography gg2, double precision distanceMeters);
boolean ST_DWithin(geography gg1, geography gg2, double precision distanceMeters, boolean useSpheroid);Parameter
| Parameter | Type | Description |
|---|---|---|
g1 | geometry | Objek geometry pertama. |
g2 | geometry | Objek geometry kedua. |
distanceOfSrid | double precision | Jarak ambang batas, dalam satuan yang ditentukan oleh sistem referensi spasial (SRS) objek geometry. |
gg1 | geography | Objek geography pertama. |
gg2 | geography | Objek geografi kedua. |
distanceMeters | double precision | Jarak ambang batas, dalam meter. |
useSpheroid | boolean | Menentukan apakah akan menggunakan sistem referensi elipsoid. Jika Anda menggunakan sistem referensi elipsoid, fungsi ini mengembalikan hasil yang lebih akurat tetapi dengan kecepatan sedikit lebih rendah. |
Catatan penggunaan
Jika kedua argumen berupa
geometry, keduanya harus memiliki spatial reference identifier (SRID) yang sama.Jika kedua argumen berupa
geography, jarak diukur dalam meter secara default.Fungsi ini membandingkan kotak pembatas (bounding boxes) dengan memanfaatkan semua indeks spasial yang tersedia, sehingga pemeriksaan kedekatan secara bawaan dipercepat oleh indeks.
Untuk pemeriksaan kedekatan 3D, gunakan ST_3DDWithin sebagai gantinya.
Contoh
Perbedaan antara ST_DWithin dan ST_DFullyWithin
Fungsi ST_DWithin mengembalikan true jika jarak terpendek antara dua objek berada dalam ambang batas. Sebaliknya, ST_DFullyWithin lebih ketat: setiap titik pada kedua objek harus berada dalam ambang batas tersebut.
SELECT ST_DFullyWithin(g1, g2, 2), ST_DWithin(g1, g2, 2)
FROM (
SELECT 'LINESTRING(0 1,1 1)'::geometry AS g1,
'LINESTRING(0 0,0 -1)'::geometry AS g2
) AS test;Output yang diharapkan:
st_dfullywithin | st_dwithin
-----------------+------------
f | t
(1 row)Lanjutan
ST_DFullyWithin: memeriksa apakah semua titik pada dua objek berada dalam jarak tertentu.
ST_3DDWithin: pemeriksaan kedekatan untuk objek 3D dalam sistem koordinat terproyeksi.