Berikut ini ringkasan singkat tentang apa yang saya coba lakukan: Saya memiliki 3 tabel di Postgres, 'a' dan 'b', masing-masing memiliki kolom Polygon, dan 'c' memiliki kolom Point. Apa yang saya coba lakukan di sini adalah untuk mendapatkan persimpangan geometri antara 'a', 'b' dan 'c', dan untuk menampilkan geometri tersebut pada layer vektor OpenLayers.
Saya sudah tahu cara menampilkan segala bentuk geometri dari String di OpenLayers, tapi saya mengalami masalah dengan fungsi ST_Intersection PostGIS, saya melakukan ini:
SELECT ST_Intersection(a.geom, b.geom) as inter from a, b;
di mana a.geom dan b.geom adalah kolom geometri, dan saya mendapatkan pesan kesalahan ini:
NOTICE: TopologyException: found non-noded intersection between 515172 2.14408e+06, 497067 2.13373e+06 and 501321 2.13546e+06, 471202 2.14843e+06 500621 2.13576e+06
ERROR: GEOS Intersection() threw an error!
Saya juga mencoba untuk mengekspresikan geometri yang dihasilkan sebagai teks menggunakan ST_AsText seperti ini:
SELECT ST_AsText(ST_Intersection(a.geom, b.geom)) as inter from a, b;
tetapi mengirim saya pesan kesalahan ini:
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
Saya tidak tahu apa yang saya lakukan salah, saya hanya ingin agar WKT Poligon ditampilkan di OpenLayers, berikut ini cara saya menampilkan geometri dari WKT:
var in_options = {
'internalProjection': new OpenLayers.Projection("EPSG:4326"),
'externalProjection': new OpenLayers.Projection("EPSG:4326")
};
var fea= new OpenLayers.Format.WKT(in_options).read(data); //data is the string with the WKT
vectorLayer.addFeatures([fea]); //this piece of code works great
map.zoomToExtent(bounds);
PEMBARUAN: Saya mencoba yang berikutnya:
SELECT ST_Intersection(a.geom, b.geom) as intersect_ab FROM a INNER JOIN b ON
ST_Intersection(a,b) WHERE ST_Overlaps(a.geom, b.geom)
AND ST_isvalid(a.geom)='t' AND ST_isvalid(b.geom)='t';
tapi saya mendapatkan pesan kesalahan berikutnya:
ERROR: Function st_intersection(a,b) does not exist.
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
Saya menambahkan isvalid untuk memverifikasi hanya poligon yang valid sedang dievaluasi, tetapi ia mengatakan kesalahan ada di ST_Intersection (a, b), baik a, b dan c memiliki SRID yang sama jadi saya benar-benar bingung, maaf jika saya bertanya terlalu banyak, tapi saya cukup baru dengan PostGIS jadi saya harap saya tidak terlalu mengganggu Anda. Terima kasih.
SELECT PostGIS_Full_Version();
kembali?