Saya sedang mengerjakan sistem yang menyimpan informasi lintang / bujur dari alamat dalam tabel PostGIS. Untuk menyimpan Lat / Long dalam tipe data geometri, saya menggunakan fungsi ST_GeometryFromText.
Misalnya panggilan fungsi berikut mendapatkan nilai geometris terhadap posisi Long / Lat yang ditentukan:
myPointGeo = ST_GeometryFromText('POINT(40.758871 -73.985114)');
Demikian pula, saya mengubah Polygon menjadi representasi geometris sebagai berikut:
myPolygonGeo = ST_GeometryFromText('POLYGON ((40.7566484549725 -73.9878561496734, 40.7556894646734 -73.9853026866913, 40.7545841705587 -73.9860537052154, 40.7548036054111 -73.9881458282471, 40.7559820394514 -73.9887895584106, 40.7566484549725 -73.9878561496734 ))')
Saya ingin mencari tahu apakah posisi lat / long di atas berada dalam Polygon ini atau tidak. Untuk ini saya menggunakan fungsi ST_Within. Tetapi meskipun 'myPointGeo' sebenarnya berada di dalam Polygon, ST_Within kembali palsu. Saya menggunakan ST_Within dengan cara ini:
St_Within(myPointGeo,myPolygonGeo)
Apa yang saya lakukan salah di sini? Haruskah saya menggunakan beberapa fungsi lain untuk tujuan ini?
Jawaban:
Saya pikir ST_Intersects akan bekerja lebih baik, ia mengembalikan benar atau salah pada apakah dua geometri berpotongan. Jadi, Anda ingin melakukan sesuatu seperti:
atau kamu bisa melakukan:
sumber