राउटेबल नेटवर्क को सरल कैसे करें?


24

मेरे पास एक नेटवर्क ग्राफ है जिसे मुझे किनारों की संख्या को कम करने के अर्थ में सरल बनाने की आवश्यकता है । यह विचार नोड्स को मर्ज करना होगा जो एक साथ करीब स्थित हैं और कनेक्टिंग शॉर्ट किनारों को हटा दें।

यह PostGIS या GRASS में कैसे प्राप्त किया जा सकता है? या क्या इस तरह के नेटवर्क को सरल बनाने के लिए कोई बेहतर तरीका है?

मैंने पहले ही ST_SnapToGrid फ़ंक्शन की कोशिश की है, लेकिन मैं परिणामों से खुश नहीं हूं (ग्रे = मूल, काला = तड़क):

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


1
क्या आप नेटवर्क-आधारित विश्लेषण को सरल बनाने के लिए या प्रदर्शन उद्देश्यों के लिए ऐसा कर रहे हैं? यदि यह पूर्व है, तो क्या विश्लेषण किया जाएगा?
whuber

यह सबसे छोटे रास्ते के विश्लेषण के लिए है।
अंडरडार्क

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

क्या आप किनारों की ज्यामिति (जैसे घटता) बनाए रखना चाहते हैं या सिर्फ टोपोलॉजी + नोड XY पर्याप्त बनाए रख रहे हैं? इसके अलावा, क्या आपको अलग-अलग Z (उदाहरण के लिए फ्लाईओवर) पर नोड्स सुनिश्चित करने की आवश्यकता नहीं है?
अंसरजीस

टोपोलॉजी कुंजी है। ज्यामिति थोड़ी बदल सकती है। Z आदेश को बरकरार रहना होगा।
अंडरडार्क

जवाबों:


7

मैं अब तक सबसे करीब आया हूं, यह है:

v.clean input=roads output=snap5rmline tool=snap,rmline thresh=5 

यह 5 मीटर की सहनशीलता के साथ सड़कों पर तड़क रहा है और सभी शून्य-लंबाई लाइनों को हटा रहा है। यह एक इष्टतम समाधान नहीं है क्योंकि यह कुछ शीर्ष पर बेतरतीब ढंग से स्नैप करने के लिए लगता है।

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


वास्तव में, परिणाम शायद सटीक नहीं है, लेकिन v.clean का उपयोग दिलचस्प है, साझा करने के लिए धन्यवाद
simo

क्या वह छवि घास में बनाई गई है?
NetConstructor.com 10

छवि QGIS में देखे गए GRASS v.clean के परिणामों को दिखाती है।
UnderDark

"अजीब चौराहों" या ग्रेड अलग सड़कों को बनाए रखने के साथ कोई समस्या?
dassouki

V.clean के बाद ST_SnapToGrid के प्रसंस्करण के बारे में कैसे?
kttii

5

क्या आपने GRASS v.generalize की कोशिश की है ?

v.generalizeआप के साथ सामान्यीकरण एल्गोरिथ्म का चयन करने की अनुमति देता है विधि विशेषता के । एक गुच्छा है: डगलस, डगलस_ट्रक्शन, लैंग, रिडक्शन, राउमन, बॉयल, स्लाइडिंग_एवरेजिंग, डिस्टेंस_वेटिंग, चाइकेन, हेर्माइट, सांप, नेटवर्क, विस्थापन

और अतिरिक्त मापदंडों के रूप में threshold में degree_thresh, angle_thresh(चुने हुए एल्गोरिथ्म पर निर्भर करता है) आपको एक सटीक परिणाम प्राप्त करने में मदद कर सकता है।

यहाँ एक ट्यूटोरियल आता है ।


लिंक के लिए आपको धन्यवाद। मैं इसे एक कोशिश दे रहा हूं, हालांकि मुझे वास्तव में यह नहीं मिल रहा है कि विधि और थ्रेसहोल्ड मूल्यों का कौन सा संयोजन मुझे वह परिणाम देगा जिसकी मुझे तलाश है।
UnderDark

मैं वास्तव में एक v.generalize विधि नहीं ढूँढ सकता जो मैं चाहता हूँ।
UnderDark

2
यह अफ़सोस की बात है, कमांड कई एल्गोरिदम से समृद्ध है, लेकिन जैसा कि आपने पहले कहा था, यह अपेक्षित परिणाम प्राप्त करने के लिए स्थापित करने के लिए संभवतः काफी जटिल है। शायद एक सामान्यीकरण algoritms गुरु, यहाँ? क्या आपने भी सांप विधि की कोशिश की है ?
सिमो

यहाँ एक एलो-गुरू नहीं है, लेकिन मुझे लगता है कि मैं अपने अतीत में किए गए कुछ v। जन्मों के रन के लिए सांपों को सबसे अच्छा तरीका बताता हूं।
मैनिंग

1
रिकॉर्ड के लिए, GRASS SVN में आज की तरह मापदंडों को सरल बनाया गया है। GRASS 6.4.2 का हिस्सा बनने के लिए।
मार्कस

4

मैंने ऐसा नहीं किया है लेकिन मुझे लगता है कि मैं एक दिशा सुझा सकता हूं।

  1. अपने ग्राफ के लिए PostGIS के साथ एक टोपोलॉजी बनाएं।
  2. केवल दो किनारों के साथ सभी नोड्स ढूंढें।
  3. किनारों को गर्म करें।

ST_ModEdgeHeal एक किनारे को दूसरे में मिलाएगा। ST_NewEdgeHeal दोनों को एक नए किनारे से बदल देगा।

PostGIS टोपोलॉजी मैनुअल


धन्यवाद @ सीन। क्या यह दो किनारों को मर्ज करने के अलावा और कुछ नहीं करेगा? छोटे किनारों को हटाने और उनके नोड्स को एक साथ स्नैप करने के बारे में कोई विचार?
UnderDark

@Underdark, मुझे कुछ भी सरल नहीं दिख रहा है। आप यह सब पीएल / एसक्यूएल में कर सकते हैं लेकिन यह संभवत: मदद नहीं करता है। क्या आप पहले ST_SnapToGrid चला सकते हैं?
शॉन

1

@underdark, मैं देखता हूं कि आपने लाइनों को घनीभूत करने के लिए एक उपकरण लिखा है । इसलिए मैं निम्नलिखित बिंदुओं का सुझाव देता हूं कि आपके बिंदुओं में से एक को "यादृच्छिक" से बचने के लिए।

उन पंक्ति खंडों का चयन करें जिन्हें आप उनकी लंबाई के आधार पर मुक्त करना चाहते हैं।

उन खंडों में से प्रत्येक के लिए, मध्य बिंदु पर एक बिंदु बनाएं

छोटे खंड को हटाएँ

अब आप PostGIS में ST_Snap का उपयोग कर सकते हैं ( यहाँ उदाहरण देखें )

संपादित करें: ध्यान दें कि आपके मामले में, आप छद्म नोड्स (केवल दो लाइनों को जोड़ने वाले नोड) को हटाने के लिए पहले v.net का उपयोग कर सकते हैं )


कृपया विस्तृत करें कि छद्म नोड्स को हटाने के लिए v.net का उपयोग कैसे किया जा सकता है। धन्यवाद
ओसमजीत

0

अग्रेषण कैसे Michaël Michaud ने OpenJUMP डेवलपर सूची में इसका विश्लेषण किया:

> Interesting question. There has been so much research works about
> generalization that it is surely not a simple task. I have tested the
> following approach with mitigated results :
> - make the layer planar with the noder plugin
> - detect small cycles with the graph plugin
> - merge adjacent cycles
> - create a point inside each cycles surface
> - remove network segments along these cycles (query + DE-9IM)
> - detect roads touching the cycles
> - project the center points of cycles to the road endpoints ==> replace small roundabout by simple nodes
> 
> Possible improvements (probably need a dedicated plugin)
> - make it work on non planar graph (or just remove bridges/tunnels from the graph)
> - replace small edges between two nodes with degree 3+ by a single node,    not only small cycles
> - process iteratively starting with smallest edges/cycles

इस उत्तर को पोस्ट करने के लिए धन्यवाद। मैं थोड़ा उलझन में हूं कि आप ग्राफ को प्लानर के लिए मजबूर क्यों करेंगे। आखिरकार, स्ट्रीट नेटवर्क प्लानेर ग्राफ (पुल, सुरंग) नहीं हैं।
UnderDark

केवल इसलिए कि माइकेल ने मौजूदा ग्राफ टूल्स के साथ एक तेज परीक्षण किया, जो उन्होंने ओपन जेएमपीपी के लिए लिखा है और वे इस समय गैर-प्लानर ग्राफ का समर्थन नहीं करते हैं। पहले चरण को छोड़ दें यदि QGIS और GRASS में समान उपकरण हैं जो गैर-प्लानर ग्राफ़ का समर्थन करते हैं।
user30184

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