GeoJSON बहुभुजों को कैसे लेबल करें?


10

मैं GeoJSON सुविधाओं के साथ संयुक्त पत्रक का उपयोग कर रहा हूं। वहाँ एक तरीका है GeoJSON सुविधाओं लेबल (इस मामले में - बहुभुज)? इससे लेबल मिलने चाहिए

feature.properties.name 

यह मेरा कोड है जहां मुझे लगता है कि मैं लेबल सम्मिलित कर सकता हूं:

function style(feature) {
            return {
                weight: 2,
                opacity: 1,
                color: 'white',
                dashArray: '3',
                fillOpacity: 0.7,
                fillColor: getColor(feature.properties.coloring)
            };
        }

1
यदि आप अभी भी हाथ में है, तो आप बहुभुज को लेबल करने के लिए उपयोग किए जाने वाले समाधान को पोस्ट करने का मन करेंगे?
1

जवाबों:


6

आपको प्रारूप पत्रक का उपयोग करने की अपेक्षा करनी होगी। RFM। उदाहरण: OpenLayers को उम्मीद है कि इस GeoJSON प्रारूप में एक बिंदु बनाया जाएगा और कुछ कस्टम विशेषताएँ दी जाएंगी:

{"type":"FeatureCollection",
    "features":[
        {"type":"Feature",
            "properties":{
                "name":"TRON-02",
                "serial":"TRON002",
                "bearing":0,
                "color":"green",
                "size":15,
                "image":"img/unit_map3.png",
            },
            "geometry":{
                "type":"Point",
                "coordinates":[-50.06542968749966,-23.749149728383717]
            }
        }
    ]
}

जैसा कि आप देख सकते हैं, मैंने एक ज्यामिति (प्वाइंट) बनाई है और इसमें अपनी विशेषताओं को शामिल कर रहा हूं। जब मैं इसे OpenLayers को भेजता हूं, तो मानचित्र में बिंदु को अनुकूलित करने के लिए "रंग" और "नाम" (लेबल के रूप में) का उपयोग करके परिणाम @ आरागॉन के उदाहरण में फिट होगा।

कृपया इस जेजोंसन उदाहरण को http://json.parser.online.fr/ में कॉपी या पेस्ट करें या स्वयं का प्रयास करने और मान्य करने के लिए साइट का उपयोग करें।


बहुभुज के बारे में सवाल नहीं था? प्वाइंट ज्योमेट्री के बारे में एक सवाल कैसे हल किया गया?
a1an

और बहुभुज क्या है? तुम जैसा नाम रखोगे। केवल एक चीज जो बदल जाएगी वह "ज्यामिति" भाग है। न केवल प्रश्न हल किया बल्कि अब तक 5 अप प्राप्त किए।
मैग्नो सी

मुझे फिर से बताने दें: मेरा एक ही सवाल है और एक बहुभुज पर एक लेबल रखना एक बिंदु पर रखने की तुलना में काफी अलग है, इसलिए बहुभुज का मतलब है इस संदर्भ में कई किनारों के साथ एक दो आयामी बंद वस्तु। इसलिए मुझे कुछ विवरण प्राप्त करने में रुचि है, इसलिए मेरी पहली टिप्पणी है। एक "यह इसे हल किया" जवाब इतना उपयोगी नहीं है, लेकिन फिर भी धन्यवाद :-)
a1an

1
बस "गुण" सामान जोड़ें और सब ठीक हो जाएगा। @Aragon जवाब देखें return feature.properties.color;जैसा कि आप देख सकते हैं, propertiesएक featureविशेषता है और colorइसकी विशेषताओं में से एक है। आप इस तरह से इस वस्तु में अपनी इच्छानुसार कुछ भी डाल सकते हैं।
मैग्नो सी

2
RFMके लिए पूरी तरह से बंद है। और एक बिंदु और बहुभुज के बीच का अंतर महत्वपूर्ण है, क्योंकि यह जानने के लिए कि किस ज्यामिति का उपयोग करना है, वास्तव में यहां मुद्दा है
स्टीफन लीड

5

यहां बताया गया है कि मैंने इसे USC Polygons और Labels के साथ कैसे हल किया है, ताकि आपको बहुभुज पर एक फ्लोटिंग लेबल मिल जाए।

मान लीजिए:

  • आपको जसन प्रतिक्रिया मिलती है जिसे चर जसन में डाला जाता है
  • केवल साधारण बहुभुज हैं जिनमें कोई छेद नहीं है
  • बहुभुज शैली आपके स्टाइल फ़ंक्शन द्वारा लौटाई गई शैली विकल्प रखती है
  • लेबल_ परत एक पत्रक परतग्रुप (या सीधे आपके नक्शे) है

फिर:

for ( var i=0; i < json.features.length; i++ ) {
    feat = json.features[i];
    coords = [];
    for ( var j = 0 ; j < feat.geometry.coordinates[0].length - 1; j++ ) {
        coord = feat.geometry.coordinates[0][j];
        point = [];
        point.push( coord[1], coord[0]);
        coords.push( point );
    }
    labels_layer.addLayer(L.polygon( coords, polygon_style ).bindLabel(feat.properties.name))  ;
}

उल्लेखनीय रूप से पर्याप्त रूप से, GeoJson (वास्तव में EPSG: 4326) और USC निर्देशांक क्रम में स्वैप किए गए हैं।


1
१.०++ का उपयोग करने वालों के लिए, L.Label को L.Tooltip के रूप में USC कोर में स्थानांतरित कर दिया गया है और प्लगइन को हटा दिया गया है। आप bindLooltip () के बजाय bindTooltip () का उपयोग करेंगे। github.com/Leaflet/Leaflet.label
aethergy

1

मुझे लगता है कि यह सवाल ओपनर्स के बारे में है। इसलिए, आप लेबलिंग के लिए उपयोग कर सकते हैं;

var style = new OpenLayers.Style({
    weight: 2,
    opacity: 1,
    color: 'white',
    dashArray: '3',
    fillOpacity: 0.7,
    fillColor: "${getColor}",  
    label: "${getLabel}"
  } , {
    context: {
      getColor: function(feature) {
        return feature.properties.color;
      },
      getLabel: function(feature) {
        return feature.properties.name;
      }
    }
  );

मुझे उम्मीद है इससे आपको मदद मिली होगी...


1
यह OpenLayers नहीं है। मैं GeoJSON सुविधाओं के साथ संयुक्त पत्रक का उपयोग कर रहा हूं। तो यह काम नहीं करता है। लेकिन कोशिश करने के लिए धन्यवाद।
खिलाफ

आप fillColor: "${color}"एक समारोह बनाने के बजाय क्यों नहीं ?
मैग्नो C

1
@Magno C आपकी बात में कोई अंतर नहीं है। उनमें से सभी समान हैं। अगर आप यादृच्छिक रंग या कुछ और के रूप में अधिक जटिल कार्य जोड़ना चाहते हैं तो मैंने इसके लिए लिखा है। अभी भी अपनी बात के लिए धन्यवाद।
डेगॉन

आरागॉन समझ गया। नई विधि के लिए धन्यवाद। भविष्य में उपयोगी हो सकता है। थम्स अप !
मैग्नो C

मुझे लगता है कि मेरे द्वारा दिखाए गए प्रारूप से @againstflow बाहर निकलने का कोई रास्ता नहीं है, क्योंकि यहाँ एक विनिर्देश सत्तारूढ़ GeoJSON है: लिंक
मैग्नो C
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.