दो-लेन सड़कों के लिए एक लेबल (आसम, क्यूजीस, पोस्टगिस)


9

मैंने प्राथमिक सड़कों और सड़कों के प्रतीकों के साथ अपनी ऑसम-लाइनों-परत (पोस्टजीआईएस) को लेबल किया। जबकि प्राथमिक सड़कों के लिए प्रतीकों को अच्छी तरह से रखा गया है - प्रत्येक के बीच पर्याप्त दूरी के साथ - दो-लेन मोटरवे को प्रति लेबल एक लेबल के साथ लेबल किया जाता है (जैसा कि आप छवि में देख सकते हैं)।

क्या यह संभव है, प्रत्येक लेबल से त्रिज्या की तरह कुछ सेट करने के लिए, उसी प्रकार का कोई अन्य लेबल नहीं रखा जा सकता है? या मैं सिर्फ इतना कह सकता हूं: टू-लेन सड़क के एक लेन पर लेबल लगाओ?

मैं qgis का उपयोग कर रहा हूं। OSM- डेटा को osG2pgsql के साथ PostGIS में आयात किया जाता है।

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

संपादित करें: यह नया स्क्रीनशॉट अधिक विवरण दिखाता है:

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

जवाबों:


5

मैं दो लेन वाली सड़क का केवल एक लेन लेबल करने के लिए अभिव्यक्ति का उपयोग कर रहा हूँ:

 angle_at_vertex($geometry,1) <= 180

और इसे फिल्टर के रूप में उपयोग करें। यह काम करता है क्योंकि OSM में प्रत्येक लेन उनकी दिशा में खींची गई है।

नीचे दिए गए उदाहरण में मैं अभिव्यक्ति angle_at_vertex($geometry,1)को लेबल के रूप में उपयोग कर रहा हूं और दूसरी तस्वीर में अभिव्यक्ति angle_at_vertex($geometry,1) <= 180को फिल्टर के रूप में।

इससे पहले:

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

उपरांत:

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

सेटिंग्स :

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


अब यह एक चतुर छोटी चाल है। QML फ़ाइल के लिए +1 भी।
जियोजेलॉट

2

मैं OSM तालिकाओं का स्कीमा नहीं जानता, लेकिन आपने इस तरह से एक प्रश्न पूछा:

DELETE FROM labels WHERE label_id  IN (
    SELECT label_id_2 FROM (
        SELECT a.label_id AS label_id_1, b.label_id AS label_id_2 
        FROM labels AS a, labels AS b WHERE STDWithin(a.the_geom,b.the_geom, 0.001) and a.street = b.street and a.label_id != b.label_id
    )
)

यह काम कर सकता है लेकिन यह बेहतर होगा यदि आपके पास अलग-अलग दिशाओं के लिए एक ही लेबल के लिए एक आईडी है, और फिर यह क्वेरी 100% काम करेगी:

DELETE FROM labels WHERE label_id  IN (
    SELECT label_id_2 FROM (
        SELECT a.label_id AS label_id_1, b.label_id AS label_id_2 
        FROM labels AS a, labels AS b WHERE a.same_road_label_id = b.same_road_label_id;
    )
)

ठीक लगता है, लेकिन Im sql- प्रोग्रामिंग से परिचित नहीं है। तो, क्या आप कृपया बता सकते हैं कि "a.label_id", "a.label_id_1" और इतने पर क्या है? मेरी तालिका में लेबल के लिए एक आईडी (कॉलम osm_id) और एक स्तंभ (रेफरी) है (उदाहरण के लिए "A70")।
एमएपी

मैंने लेबल तालिका को "a" और "b" के रूप में, और लेबल_id कॉलम (osm_id) को "AS" कथन के साथ लेबल_id_1 और label_id_2 के रूप में उपनामित किया है, मुझे इसलिए पड़ा क्योंकि सबसे गहरे उपवर्ग में हमारे पास दो कॉलम (Label_id) और दो तालिकाएँ हैं (लेबल) एक ही नाम के साथ।
फ्रांसिस्को वाल्डेज़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.