Đây là một bản tóm tắt nhanh về những gì tôi đang cố gắng thực hiện: Tôi có 3 bảng trong Postgres, 'a' và 'b', mỗi bảng có một cột Đa giác và 'c' có một cột Điểm. Những gì tôi đang cố gắng làm ở đây là để có các giao điểm hình học giữa 'a', 'b' và 'c' và hiển thị các hình học như vậy trên lớp vectơ OpenLayers.
Tôi đã biết cách hiển thị bất kỳ loại hình học nào từ Chuỗi trong OpenLayers, nhưng tôi gặp rắc rối với chức năng ST_Intersection của PostGIS, tôi đang làm điều này:
SELECT ST_Intersection(a.geom, b.geom) as inter from a, b;
trong đó a.geom và b.geom đều là các cột hình học và tôi nhận được thông báo lỗi này:
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!
Ngoài ra, tôi đã cố gắng diễn tả hình học kết quả dưới dạng văn bản bằng ST_AsText như thế này:
SELECT ST_AsText(ST_Intersection(a.geom, b.geom)) as inter from a, b;
nhưng nó gửi cho tôi thông báo lỗi này:
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
Tôi không biết mình đang làm gì sai, tôi chỉ muốn lấy WKT của Đa giác để hiển thị nó trên OpenLayers, đây là cách tôi hiển thị hình học từ 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);
CẬP NHẬT: Tôi đã thử tiếp theo:
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';
nhưng tôi nhận được thông báo lỗi tiếp theo:
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.
Tôi đã thêm isvalid để xác minh chỉ các đa giác hợp lệ đang được đánh giá, nhưng nó báo lỗi là ở ST_Intersection (a, b), cả a, b và c đều có SRID giống nhau nên tôi thực sự bối rối, xin lỗi nếu tôi hỏi quá nhiều, nhưng tôi khá mới với PostGIS vì vậy tôi hy vọng tôi không làm phiền bạn nhiều. Cảm ơn.
SELECT PostGIS_Full_Version();
trở lại?