다음은 내가하려는 일에 대한 간략한 요약입니다. Postgres에 3 개의 테이블 'a'와 'b'가 있고 각각에 다각형 열이 있고 'c'에 점 열이 있습니다. 내가 여기서하려고하는 것은 'a', 'b'와 'c'사이의 기하학 교차점을 가져 와서 그러한 기하학을 OpenLayers 벡터 레이어에 표시하는 것입니다.
OpenLayers의 String에서 모든 종류의 지오메트리를 표시하는 방법을 이미 알고 있지만 PostGIS의 ST_Intersection 함수에 문제가 있습니다.
SELECT ST_Intersection(a.geom, b.geom) as inter from a, b;
여기서 a.geom과 b.geom은 형상 열 이며이 오류 메시지가 나타납니다.
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!
또한 ST_AsText를 사용하여 결과 지오메트리를 텍스트로 표현하려고했습니다.
SELECT ST_AsText(ST_Intersection(a.geom, b.geom)) as inter from a, b;
그러나 그것은 나 에게이 오류 메시지를 보냅니다 :
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
내가 뭘 잘못하고 있는지 모르겠다. OpenLayers에 Polygons의 WKT가 표시되도록하고 싶습니다 .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);
업데이트 : 다음을 시도했습니다.
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';
하지만 다음 오류 메시지가 나타납니다.
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.
유효한 다각형 만 평가되고 있는지 확인하기 위해 isvalid를 추가했지만 오류가 ST_Intersection (a, b)에 있음을 알리고 있습니다 .a, b 및 c는 동일한 SRID를 가지고 있으므로 혼란 스럽습니다. 미안합니다. 너무 많이 묻지 만 PostGIS에 익숙하지 않아서 많이 귀찮게하지 않기를 바랍니다. 감사.
SELECT PostGIS_Full_Version();
반환합니까?