लाइन सेगमेंट से वोरोनोई आरेख बनाएं


14

मैं बिंदुओं के बजाय लाइन सेगमेंट के आधार पर वोरोनोई आरेख बनाने का एक तरीका ढूंढ रहा हूं। नीचे दिया गया उदाहरण देखें ( इस प्रस्तुति से लिया गया )।

आदर्श रूप से मैं ऐसा कुछ चाहूंगा जिसे मैं पायथन से लिख सकता हूं, लेकिन आर्कगिस या इसी तरह का उपयोग करने वाला एक समाधान भी स्वीकार्य होगा।

लाइन खंडों से वोरोनोई आरेख

ऐसा करने के लिए अब तक का एकमात्र पुस्तकालय ओपनवोरोनोई है , जो आशाजनक लगता है। क्या कोई और हैं?


1
यह संभवतः मदद करेगा: gis.stackexchange.com/questions/53414/…
Dan C

धन्यवाद। निश्चित नहीं कि मेरी खोज में वह प्रश्न क्यों नहीं आया।
स्नोरफॉर्पलागस

जवाबों:


5

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

https://github.com/UNTGeography/VoronoiDiagramsGIS

यह @ radouxju के उत्तर में वर्णित "यूक्लिडियन आवंटन" के समान विधि का उपयोग करता है और परिणामी रेखापुंज से वेक्टर बहुभुज बनाने के लिए प्रवाह दिशा / बेसिन रेखापुंज का उपयोग करता है।


रुचि रखने वालों के लिए महत्वपूर्ण भाग: github.com/UNTGeography/VoronoiDiagramsGIS/blob/master/…
Sancarn

3

वोरोनो को शुरू में अंकों के लिए डिज़ाइन किया गया है। यहां दो तरीके हैं जो मैं आपकी समस्या के लिए कल्पना कर सकता हूं (आर्कजीआईएस टूल का हवाला देते हुए, लेकिन संभवत: आकार के साथ संभव है):

1)

a) रेखाओं के साथ बिंदु बनाएँ (जैसे घनीभूत तब रेखा से कोने तक)

b) थिएसेन बहुभुज बनाएं

c) थिएसेन बहुभुजों को उन पंक्तियों के आधार पर विघटित करते हैं जिन्हें वे काटते हैं

2)

क) स्थानिक विश्लेषक के साथ, लाइनों के लिए यूक्लिडियन आवंटन की गणना करें

b) प्रत्येक ज़ोन को बहुभुज में बदलें


3

कुछ ग्राहकों के लिए कुछ काम करने वाले और मैं 2 जिओप्रोसेसिंग टूल बनाने पर काम कर रहा हूं जो ऐसा करते हैं। जबकि जियोप्रोसेसिंग उपकरण सार्वजनिक रूप से उपलब्ध नहीं हैं, अजगर और सी # हमने उपयोग किया है:

C # और अजगर रैपर दोनों वास्तव में C ++ Boost Voronoi API पर भरोसा करते हैं: http://www.boost.org/doc/libs/1_54_0/libs/polygon/doc/vorenoi_main.htm

ध्यान दें कि एपीआई मेमोरी की बहुत खपत करता है। यदि आप 64 बिट, आर्कगिस प्रो या क्यूजीआईएस के लिए जियोप्रोसेसिंग का उपयोग कर रहे हैं तो यह कोई समस्या नहीं है। यह एक सीमा है यदि आप आर्कजीआईएस डेस्कटॉप पर हैं क्योंकि यह 32 बिट्स है। (40,000 पंक्तियों या अधिक की एक विस्तृत सड़क नेटवर्क मेमोरी सीमा तक पहुंचने के लिए पर्याप्त होना चाहिए)


1
मैंने वास्तव में आर्केप और आर्कगिस प्रो के लिए एक जियोप्रोसेसिंग टूल बनाया है जो पाइरवोनोई लाइब्रेरी पर निर्भर करता है: github.com/fabanc/Boost-Voronoi-For-ArcGIS
Fabien Ancelin

2

ET Geowizards (आर्क के लिए एक प्लगइन) में इसके लिए एक उपकरण है जो पॉलीलाइन को स्वीकार करता है (नीचे स्क्रीनशॉट देखें)। दुर्भाग्य से आपको उपकरण को चलाने के लिए लाइसेंस प्राप्त उत्पाद की आवश्यकता होगी, लेकिन मुझे लगता है कि यह चाल करना चाहिए।

यहाँ छवि विवरण दर्ज करें


0

इसके अलावा PostgreSQL / PostGIS का उपयोग करके अपने कार्य को हल करने का एक और तरीका।

यदि लाइनें छोटी और सरल हैं, तो स्क्रिप्ट चलाएँ:

WITH
tbla AS (SELECT (ST_Dump(geom)).geom geom FROM <line_name_table>),
tblb AS (SELECT (ST_DumpPoints(geom)).geom geom FROM tbla
        UNION
        SELECT ST_Centroid(geom) geom FROM tbla),
tblc AS (SELECT ((ST_Dump(ST_VoronoiPolygons(ST_Collect(geom)))).geom) geom FROM tblb)
SELECT ST_Union(a.geom) geom FROM tblc a JOIN tbla b ON ST_Intersects(a.geom, b.geom) GROUP BY b.geom;

परिणाम देखें।

यदि लाइनें लंबी हैं, तो स्क्रिप्ट चलाएँ:

WITH
tbla AS (SELECT (ST_Dump(geom)).geom geom FROM <line_name_table>),
tblb AS (WITH btbl AS (SELECT (ST_Dump(geom)).geom geom FROM tbla),
intervals AS (SELECT generate_series (0, 9) as steps)
SELECT steps AS stp, ST_LineInterpolatePoint(geom, steps/(SELECT count(steps)::float-1 FROM intervals)) geom FROM btbl, intervals GROUP BY intervals.steps, geom),
tblc AS (SELECT ((ST_Dump(ST_VoronoiPolygons(ST_Collect(geom)))).geom) geom FROM tblb)
SELECT ST_Union(a.geom) geom FROM tblc a JOIN tbla b ON ST_Intersects(a.geom, b.geom) GROUP BY b.geom;

परिणाम देखें।

यदि आवश्यक हो, तर्ज पर बिंदुओं की संख्या को संकुचित करें, मेरे उदाहरण में यह 10 बिंदु है।

मूल समाधान।

इस स्क्रिप्ट को कहा जाता है: ST_VoronoiDiagramsFromLines।


मैंने इसे अभी तक नहीं चलाया है, लेकिन ऐसा लगता है कि यह जियोमेट्री के कोने का उपयोग करके वोरोनी पॉलीगॉन बनाता है फिर उन्हें (एक संघ के साथ) विलय कर देता है यदि वे मूल ज्यामिति को छूते हैं। क्या वो सही है? यदि ऐसा है तो जब तक आपके मूल ज्यामिति में बहुत सारे कोने हों और बिना किसी खंड के लंबे खंड हों, तब तक यह ठीक है।
स्नोरफॉर्पलागस

द्वारा परीक्षण किया गया: PostgreSQL 11.1, PostGIS 2.5 USE_GEOS = 1 USE_PROJ = 1 USE_STATS = 1 ...
सिरिल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.