PostGIS - एक रेखा या बहुभुज के अंदर एक बिंदु प्राप्त करें


10

मुझे markerअपने ऐप के लिए एक लाइन या बहुभुज का केंद्र बिंदु प्राप्त करने की आवश्यकता है । ताकि जब आप किसी मार्कर पर क्लिक करें तो ज्यामिति दिखाई दे (लाइन या बहुभुज)। मैं ST_Centroidइसे काम करता था।

नतीजा यह है कि मुझे उम्मीद थी कि कुछ बहुभुज या लाइनें जो सेंट्रोइड्स ज्यामिति से बाहर हैं। मैं उन पंक्तियों या बहुभुजों के लिए क्या चाहूंगा "सबसे केंद्र बिंदु" प्राप्त करना है लेकिन ज्यामिति के अंदर।

मैं यह कैसे कर सकता हूँ? क्या कोई हल है?

जवाबों:


9

डॉक्टर से: ST_PointOnSurface - सतह पर झूठ बोलने के लिए एक गारंटी देता है।


4
कुछ अंशों के साथ ST_LineInterpolatePoint 0.5 के लिए एकदम सही पोस्टगिस.नेट
docs/

ST_PointOnSurface () लाइनों के साथ काम करता है! (THX PostGIS)
वाली WKT-

हाँ! आप सही हैं @ user30184 क्योंकि ऐसा लगता है कि लाइनों के लिए ST_PointOnSurface () एक बिंदु को मनमाना लगता है, मुझे यकीन नहीं है लेकिन डॉक्टर उदाहरण में एक लाइनस्ट्रीमिंग के पहले बिंदु को लेता है।
जोस हरमोसिला रोड्रिगो

7

मेरे मामले में मेरे पास प्रत्येक ज्योमेट्री को अव्यवस्थित तालिकाओं में है। मैंने जो किया वह था:

  1. लाइनों के लिए -> ST_LineInterpolatePoint()0.5 कारक के साथ।
  2. बहुभुज के लिए -> परीक्षण अगर ST_Centroid()इसकी ज्यामिति के अंदर है। यदि हां, तो ST_Centroid()सबसे अच्छा विकल्प है, यदि मैं नहीं चुनता हूं PointOnSurface()

यहाँ प्रश्न है:

SELECT
    CASE WHEN (SELECT the_geom FROM points WHERE gid = d.gid) IS NOT NULL
    THEN (SELECT the_geom FROM points WHERE gid = d.gid)
    WHEN (SELECT the_geom FROM lines WHERE gid = d.gid) IS NOT NULL
    THEN ST_LineInterpolatePoint((SELECT the_geom FROM lines WHERE gid = d.gid), 0.5)
    WHEN (SELECT the_geom FROM polygons WHERE gid = d.gid AND ST_Intersects(ST_Centroid(the_geom),the_geom)) IS NOT NULL
    THEN ST_Centroid((SELECT the_geom FROM polygons WHERE gid = d.gid))
    ELSE ST_PointOnSurface((SELECT the_geom FROM polygons WHERE gid = d.gid))
    END AS center
FROM someTable d

5
&& ऑपरेटर केवल bbox की जाँच करता है। आप ST_intersects () का उपयोग करना चाह सकते हैं।
WKT

आप सही हे। मैं गलत था। मैं अपना जवाब अपडेट करूंगा। धन्यवाद!
जोस हरमोसिला रोड्रिगो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.