टोपोलॉजी को संरक्षित करने वाले लाइन नेटवर्क को कैसे सरल बनाया जाए?


9

मेरे पास लगभग 250.000 सेगमेंट के साथ एक शेपफाइल (यूरोपीय प्रमुख सड़कों से मिलकर) है जो मुझे तीखा करने के लिए सरल करना है। लेकिन मुझे ठीक से ऐसा करने का कोई तरीका नहीं मिल रहा है।

यह है जो ऐसा लग रहा है:

http://i.stack.imgur.com/qJ2OJ.png

और ऐसा ही होना चाहिए:

http://i.stack.imgur.com/FN4Z6.png

मुझे किसी तरह लाइनों के हर बिंदु को हटाना है जो शेष बिंदुओं के बीच सामयिक कनेक्शनों को संरक्षित करते हुए 3 लाइनों (एक चौराहा नहीं) से कम से जुड़ा हुआ है। अगर किसी के पास एक विचार है, तो इसकी बहुत सराहना की जाएगी!

सादर

EDIT: मैंने @dkastl के विचार को लागू करने का प्रयास किया और केवल अपने कोड से नीचे दिए गए कोड के साथ अपने नेटवर्क से केवल अप्राकृतिक नोड्स (केवल 2 आसन्न linestrings) नोड्स प्राप्त करने में कामयाब रहा (नेटवर्क पीढ़ी अंडरडार्क के ब्लॉग http://underdark.wordpress.com से लिया गया) / २०११ / ०२ / ० 2011 / ए-बिगिनर्स-गाइड-टू-पीग्राउटिंग / ):

SELECT * FROM
   (SELECT tmp.id as gid, node.the_geom FROM 
     (SELECT id, count(*) FROM network 
     JOIN node 
     ON (start_id = id OR end_id = id) AND (end_id = id OR start_id = id)
     GROUP BY id ORDER BY id) as tmp
   JOIN node ON (tmp.id = node.id)
   WHERE tmp.count = 2) as unn_node;

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


1
आपको pgRout के लिए ऐसा क्यों करना होगा? यदि आपके पास पहले से ही स्रोत / लक्ष्य आईडी है, तो आप एक नया ज्यामिति बना सकते हैं जिसमें लिनेस्ट्रिंग्स केवल स्रोत और लक्ष्य आईडी होते हैं। जो आपकी दूसरी छवि की तरह दिखना चाहिए।
dkastl

समस्या यह है कि लाइनों को खंडित किया जाता है (यदि आप मेरे द्वारा पोस्ट की गई पहली छवि को देखते हैं, तो आप जो भी बिंदु देखते हैं / एक नया खंड शुरू करते हैं), आपका दृष्टिकोण ज्यामिति को सरल करता है (जो अच्छा है) लेकिन टोपोलॉजी नहीं।
क्रिसिक

1
मुझे नहीं लगता कि यह आपकी छवि से स्पष्ट है कि प्रत्येक बिंदु एक नया लिनेस्ट्रिंग ज्यामिति शुरू करता है। क्या आपने पहले से ही स्रोत / लक्ष्य स्तंभों को भरने के लिए pgRouting के असाइन_वर्क्स_एड फ़ंक्शन को चलाया था? उस स्थिति में आप बाद में स्रोत / लक्ष्य आईडी की पहचान करने के लिए कुछ क्वेरी कर सकते हैं जो केवल दो बार मौजूद है, जिसका अर्थ है कि आपको इस बिंदु पर दो लाइन सेगमेंट को मर्ज करने में सक्षम होना चाहिए। मामले में स्रोत / लक्ष्य आईडी अधिक मौजूद है कि दो बार यह एक चौराहा होना चाहिए।
dkastl

@dkastl: एक बहुत अच्छा विचार! मैंने अपने सवाल को अपडेट किया कि मैं इससे कितना दूर हूं।
क्रिसिकिक

जवाबों:


4

आपको निश्चित रूप से अपनी लाइनों के लिए एक रेमर-डौला-प्यूकर फ़िल्टर लागू करना चाहिए । यह PostGIS में ST_Simplify फ़ंक्शन के रूप में उपलब्ध है । टोपोलॉजी संरक्षण वाला संस्करण आपके मामले के लिए रुचि का हो सकता है। सौभाग्य!

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