एक बिंदु और एक बहुभुज के निकटतम भाग के बीच दूरी और असर कैसे प्राप्त करें?


9

मैं SQL लिखने और PostGIS का उपयोग करने के लिए काफी नया हूं, अगर यह थोड़ा सरल या स्पष्ट लगता है। मेरे पास पोस्टगिस डेटाबेस में बहुभुज सुविधाओं की एक तालिका है और मुझे पूर्वनिर्धारित बिंदु की एक निश्चित दूरी के भीतर सभी विशेषताओं, दूरी और बहुभुज सुविधाओं की दिशा का चयन करने के लिए एक SQL क्वेरी लिखने की आवश्यकता है। मैं सुविधाओं का चयन करने और दूरी (ST_Distance का उपयोग करके) की गणना करने में कामयाब रहा हूं, लेकिन असर प्राप्त करने के तरीके पर काम नहीं कर सकता।

यह वह स्क्रिप्ट है जिसका मैं अब तक उपयोग कर रहा हूं:

SELECT *,
  ST_Distance (Geometry, ST_GeomFromText ('POINT(292596 90785)', 27700))
FROM mytable
WHERE
  ST_DWithin(
    Geometry,
    ST_GeomFromText('POINT(292596 90785)', 27700),
    250) 

मैं सुविधाओं के असर के साथ-साथ दूरी कैसे तय करूं?

जवाबों:


4

आप असर की गणना करने के लिए ST_Azimuth का उपयोग कर सकते हैं, लेकिन यह पैरामीटर के रूप में केवल बिंदु ज्यामिति लेता है, इसलिए आपको यह तय करना होगा कि आपको वास्तव में कौन सा असर चाहिए।

आप छोटी लाइन चुन सकते हैं जैसा कि @Nicklas ने सुझाव दिया है (यह आपके द्वारा पहले से गणना की गई दूरी के साथ एक है), जो समझ में आता है कि यदि आपको बहुभुज तक पहुंचने के लिए सबसे तेज़ "दिशा" की आवश्यकता है। किसी और चीज के लिए, मैं आपको बहुभुज सेंटीरोइड (ST_Centroid) के खिलाफ गणना करने का सुझाव देता हूं, जो मनमाने आकार के लिए बेहतर परिणाम देना चाहिए।


2

उपयोग

ST_Azimuth (ST_Shortestline (geom1, geom2))

संपादित करें

मुझे सिर्फ एहसास हुआ कि ST_Azimuth एक अलस्ट्रिंग नहीं लेते हैं, क्योंकि आप इसे दो अंक देने की आवश्यकता होगी।

यदि ज्यामिति में से एक बिंदु है तो आप सीधे उस का उपयोग कर सकते हैं और बहुभुज पर बिंदु प्राप्त करने के लिए ST_ClosestPoint का उपयोग कर सकते हैं।


1

ST_Azimuth वह फ़ंक्शन है जो आप चाहते हैं। यह उत्तर से रेडियंस में दक्षिणावर्त कोण को वापस करता है । जैसा कि ST_Azimuth()पृष्ठ पर नमूना दिखाता है, बस इसे degrees()फ़ंक्शन में लपेटने से आपको डिग्री में कोण मिलेगा यदि आपको इसकी आवश्यकता है।

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