यहां एक त्वरित सारांश है कि मैं क्या करने की कोशिश कर रहा हूं: मेरे पास पोस्टग्रेज में 3 टेबल हैं, 'ए' और 'बी', प्रत्येक में एक पॉलीगॉन कॉलम है, और 'सी' में एक प्वाइंट कॉलम है। मैं यहाँ क्या करने की कोशिश कर रहा हूँ '' ए ',' बी 'और' सी 'के बीच ज्यामितीय चौराहों को पाने के लिए, और एक ओपनलेयर वेक्टर परत पर इस तरह के ज्यामितीयों को प्रदर्शित करने के लिए।
मुझे पहले से ही पता है कि OpenLayers में एक स्ट्रिंग से किसी भी प्रकार की ज्यामिति कैसे प्रदर्शित की जाती है, लेकिन मुझे 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.
मुझे नहीं पता कि मैं क्या गलत कर रहा हूं, मैं सिर्फ पॉलीगन्स डब्ल्यूकेटी को ओपनलेयर्स पर प्रदर्शित करना चाहता हूं, यहां बताया गया है कि मैं डब्ल्यूकेटी से एक ज्यामिति कैसे प्रदर्शित करता हूं:
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.
मैंने यह सत्यापित करने के लिए कि केवल वैध बहुभुज का मूल्यांकन किया जा रहा है, को जोड़ा है, लेकिन यह बता रहा है कि त्रुटि ST_Intersection (a, b) में है, a, b और c दोनों में एक ही SRID है, इसलिए मैं वास्तव में उलझन में हूं, क्षमा करें यदि मैं बहुत अधिक पूछ रहा हूं, लेकिन मैं PostGIS के साथ काफी नया हूं इसलिए मुझे उम्मीद है कि मैं आपको बहुत परेशान नहीं कर रहा हूं। धन्यवाद।
SELECT PostGIS_Full_Version();
लौटाता है?