ओवरलैपिंग लाइनों का प्रतिपादन


24

मैं एक नक्शा बना रहा हूँ जिसमें सार्वजनिक परिवहन के बारे में जानकारी है: busses, ट्राम, आदि। नक्शा में एक परत होगी, उदाहरण के लिए ट्राम लाइनें। प्रत्येक पंक्ति का अपना रंग होता है, और एक लाइन स्ट्रिंग ज्यामिति द्वारा दर्शाया जाता है।

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

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

मैं अपने स्टैक के रूप में PostGIS / GeoServer / OpenLayers का उपयोग कर रहा हूं, लेकिन कोई भी खुला स्रोत समाधान स्वीकार्य होगा।


मेट्रो लाइनों के साथ एक ही मुद्दा रहा है। क्या आपने एक स्वीकार्य समाधान पाया / कार्यान्वित किया है?
गीर्ट-जान

दुर्भाग्यवश नहीं। ग्राहक ने इसे प्राथमिकता नहीं दी, और ओवरलैपिंग को रोकने के लिए हमने काफी बुरा हैक किया।
लीदमैन 15

जवाबों:


7

यदि आप इस क्षेत्र के बारे में अधिक जानने में रुचि रखते हैं, तो समस्या को कार्टोग्राफिक विस्थापन और कार्टोग्राफिक सामान्यीकरण का एक पहलू माना जाता है

समस्या से निपटने के लिए विस्थापन और दृष्टिकोण पर चर्चा करने वाले कुछ लेख:


"विस्थापन"! वह दूसरा शब्द था जिसे मैं याद रखने की कोशिश कर रहा था। हमारे पास FME में एक उपकरण है (क्षमा करें - खुला स्रोत नहीं) कि "निकर्स विस्थापन एल्गोरिथ्म के एक संस्करण का उपयोग कर सुविधाओं के बीच निकटता का सामना करता है" - तो शायद निकर्सन का एक Google यह देखने के लिए कि क्या आता है?
मार्क आयरलैंड

scholar.google.com/ ... मूल लेख का लिंक (उदासी से दी गई दीवार) और बहुत सारे लोग इसका संदर्भ देते हैं। संबंधित लेखों में से कुछ स्वतंत्र हैं और दिलचस्प लग रहे हैं।
इयान Turton

4

यह समस्या कार्टोग्राफिक सामान्यीकरण में एक बहुत ही विशिष्ट है। उसके लिए स्वचालित विधियां मौजूद हैं, लेकिन अभी तक कोई कार्यान्वयन उपलब्ध नहीं है।

" बीम्स " और " सांप " पर आधारित विधियां नेटवर्क डेटा के इन कार्टोग्राफिक संघर्षों को हल करने के लिए कुशल परिणाम देती हैं (देखें भी scw द्वारा दिए गए संदर्भ )। यहां सड़क डेटा पर बीम एल्गोरिदम के कुछ परिणाम दिए गए हैं:

पहले:

वैकल्पिक शब्द

बाद:

वैकल्पिक शब्द

इस पत्र और इस प्रस्तुति को भी देखें कि यह परिवर्तन कैसे करना है ।

EDIT: मैंने कभी इसका परीक्षण नहीं किया है, लेकिन ऐसा लगता है कि GRASS में सांपों से संबंधित कुछ है। देखें यहाँ


1
क्या यह काम करता है अगर दो लाइन सेगमेंट (बस ट्रैक) में एक ही ज्यामिति होती है?
अंडरकर्क

1
यह बहुत बंद लाइनों के लिए लागू होता है, और लाइनों के लिए इतनी अच्छी तरह से काम नहीं करना चाहिए जो बिल्कुल ओवरलैप करते हैं। एक अनुकूलन की आवश्यकता है।
जुलिएन

1

मुझे समाधान का पता नहीं है, लेकिन मुझे लगता है कि आप जिस शब्द की तलाश कर रहे हैं वह "संघर्ष समाधान" है - मानचित्र सामान्यीकरण का एक विषय। "मानचित्र सामान्यीकरण संघर्ष" पर एक Google खोज कुछ दिलचस्प जानकारी दिखाती है - लेकिन मुझे नहीं पता कि इसका व्यावहारिक उपयोग बहुत है।


1

वर्तमान कार्यान्वयन में, आप अक्सर "ऑफसेट" या "अव्यवस्था" पा सकते हैं। आप वर्तमान स्टैक का उपयोग कर रहे हैं, समानांतर रेखाओं को स्वचालित रूप से प्राप्त करना थोड़ा मुश्किल लगता है:

इसे सम्‍मिलित करने के लिए: सबसे आसान तरीका मुझे पता है कि UMN Mapserver और ऑफसेट मान का उपयोग करना होगा। अपने मेफ़ाइल के लिए उदाहरण शैली:

STYLE
 SYMBOL 7
 OUTLINECOLOR 160 160 160
 SIZE 5
 OFFSET 2 -99 # <-- This will offset the line to the right.
 ANTIALIAS FALSE
END # STYLE

0

यदि आप ओवरलैप करने वाली रेखा परतों को खींच रहे हैं, तो आपके पास दर्शक को सभी लाइनों को देखने की अनुमति देने के लिए कई विकल्प हैं।

  1. चौड़ाई - आप परतों के बीच की रेखा की चौड़ाई को अलग-अलग करते हैं और नीचे की तरफ चौड़ी रेखाएँ डालते हैं।
  2. अपारदर्शिता / पारदर्शिता - आप व्यक्तिगत रूप से परतों को आंशिक रूप से अपारदर्शी बना सकते हैं, इसलिए आप 'व्यक्तिगत परतों' को देख सकते हैं।
  3. ऑफसेट - आप लाइन के वास्तविक ज्यामिति के एक तरफ वास्तविक रेखा विशेषता का प्रतिनिधित्व करने वाले लाइन प्रतीक को ऑफसेट कर सकते हैं। अलग-अलग परतों को अलग-अलग मात्रा में और अलग-अलग दिशाओं में ऑफसेट किया जा सकता है ताकि सभी परतों को देखा जा सके।
  4. लाइनों को प्रतीकों के बीच परिभाषित अंतराल के साथ बिंदु प्रतीकों की एक श्रृंखला द्वारा दर्शाया जा सकता है। अलग-अलग लाइन लेयर्स के बीच सिंबल, सिंबल का कलर, सिंबल साइज और गैप अलग-अलग होने से आपको हर एक इंडिविजुअल लाइन लेयर को अलग-अलग बनाना चाहिए।

मैं GeoServer का उपयोग नहीं करता, लेकिन मुझे पता है कि MapServer में इन सभी चीजों को करने की कार्यक्षमता है। यह संभावना है कि जियो सेवर भी करता है।


ऐसा लगता है कि हम # 3 चाहते हैं, लेकिन केवल अतिव्यापी सुविधाओं के लिए। क्या यह संभव है?
mwalker 16

2
MapServer और अन्य वेब मैप सर्वर और GIS लेबलों के लिए संघर्ष रिज़ॉल्यूशन करते हैं, लेकिन मुझे एक ऐसी सुविधा के बारे में पता नहीं है जो आपको फ़्लाइ पर ऐसा करने की अनुमति देगा। बेशक, यदि आपका डेटा काफी स्थिर था, तो आप यह पहचानने के लिए अपने डेटा को प्री-प्रोसेस कर सकते हैं कि विभिन्न लेयर्स की लाइनें कहाँ से आती हैं (या एक सहिष्णुता के भीतर) और इसके आधार पर डेटा को वर्गीकृत करें। आपका मानचित्र रेंडरिंग इंजन तब आपके डेटा में एक विशेषता के आधार पर 'विस्थापन' सहजीवन लागू कर सकता है।
डेविड एफएफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.