ST_PointOnSurface की गणना कैसे की जाती है?


21

PostGIS प्रलेखन बताता है कि ST_PointOnSurface"सतह पर झूठ बोलने के लिए एक गारंटी की वापसी"। ऐसा लगता है कि इस फ़ंक्शन को प्रलेखन को संतुष्ट करने वाले परिणाम देने के लिए तुच्छ रूप से लागू किया जा सकता है, लेकिन थोड़ी वास्तविक-विश्व उपयोगिता प्रदान करता है, हालांकि मुझे यकीन है कि PostGIS एक गैर-तुच्छ कार्यान्वयन प्रदान करता है।

PostGIS का यह परिचय इसके ST_Centroidसाथ एक अच्छी तुलना और विपरीतता प्रदान करता है ST_PointOnSurfaceऔर कहता है कि "[ST_PointOnSurface] सेंट्रो ऑपरेशन की तुलना में काफी अधिक कम्प्यूटेशनल रूप से महंगा है"।

क्या ST_PointOnSurfaceगणना कैसे की जाती है, इसकी अधिक गहन व्याख्या है? मैं उपयोग कर रहा हूं ST_Centroid, लेकिन मेरे डेटा में कुछ किनारे के मामलों का सामना करना पड़ा है जहां सेंटीमीटर ज्यामिति के बाहर है। मेरा मानना ​​है कि ST_PointOnSurfaceयह सही विकल्प है, लेकिन फ़ंक्शन का नाम और प्रलेखन अनिश्चितता के लिए जगह छोड़ देता है।

इसके अलावा, ST_PointOnSurfaceअगर सेंटीमीटर पहले से ही ज्यामिति के भीतर झूठ बोलता है, तो भी कम्प्यूटेशनल खर्च होता है?


यह ठीक से मौजूद है क्योंकि गैर-उत्तल बहुभुज का केंद्रक हमेशा इसमें शामिल नहीं होता है। अगर नाम का भ्रामक हिस्सा है तो इसका हाइट और डेम से कोई लेना-देना नहीं है। कार्यान्वयन विवरण कोड में सबसे अच्छे से जांचे जाते हैं, लेकिन मेरा मानना ​​है कि आपको GIS.se पर बेहतर उत्तर मिलेगा।
lynxlynxlynx

GIS.se पर अच्छी बात है। क्या इस प्रश्न को वहां स्थानांतरित करने का कोई तरीका है? मैं समझता हूं कि दोनों कार्य क्यों मौजूद हैं। मुझे यह नाम भ्रमित करने वाला लगता है क्योंकि मैं जिस बहुभुज गोएमेट्रीज़ के साथ काम कर रहा हूँ उसकी सतह पर असीम रूप से कई बिंदु हैं। हालांकि, उन बिंदुओं का केवल एक छोटा सा उपखंड मेरे उद्देश्य को पूरा करता है। मैं जानना चाहता हूं कि मुझे एक बिंदु मिल रहा है जो समझ में आता है कि मैं इसका उपयोग कैसे करना चाहता हूं।

जवाबों:


24

कुछ प्रयोगों के आधार पर, मुझे लगता है कि ST_PointOnSurface()इस तरह मोटे तौर पर काम करता है, अगर ज्यामिति बहुभुज है:

  1. बहुपत्नी के उत्तरी और दक्षिणी विस्तार के बीच आधे रास्ते में एक पूर्व-पश्चिम किरण का पता लगाएं।
  2. बहुभुज को प्रतिच्छेद करने वाली किरण के सबसे लंबे खंड का पता लगाएं।
  3. उस बिंदु को लौटाएं जो उक्त खंड के साथ आधा-अधूरा है।

इसका कोई मतलब नहीं हो सकता है, इसलिए यहां एक बहुभुज का एक रेखाचित्र है जिसमें एक किरण इसे उत्तरी और दक्षिणी भागों में विभाजित करती है:

             _
            / \             <-- northern extent
           /   \
          /     \
         /       \
        /         \      __
       /           \    /  \
      /_ _ _ P _ _ _\  / _ _\  P = point-on-surface
     /               \/      \
    /                         \
   /            C              \   C = centroid
  /                             \
 /                              /
/______________________________/  <-- southern extent

इस प्रकार, ST_PointOnSurface()और ST_Centroid()आमतौर पर उत्तल बहुभुज पर भी अलग-अलग बिंदु होते हैं।

नाम में "सतह" का एकमात्र कारण, मुझे लगता है, यह है कि अगर ज्यामिति में 3 डी लाइनें हैं, तो परिणाम बस शीर्षों में से एक होगा।

मैं इस बात से सहमत हूं कि अधिक स्पष्टीकरण (और बेहतर नामकरण) उपयोगी रहा होगा और आशा है कि GEOS प्रोग्रामर इस मामले पर कुछ और प्रकाश डाल सकता है।


3
परिवाद कोड को देखते हुए , मेरा मानना ​​है कि आप सही हैं। क्षैतिज द्विभाजक पाया जाता है, फिर चौड़े चौराहे के मध्य बिंदु का उपयोग किया जाता है।
मबॉग्रीन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.