2013-01-24 29 views
6

से अतिरिक्त जानकारी के साथ पत्रक पॉपअप एक समस्या है। मैं geojson से एक पुस्तिका पुस्तिका में पॉपअप के लिए अतिरिक्त जानकारी बांधना चाहता हूँ। पुस्तिका दस्तावेज से कुछ चीजें देखी लेकिन यह काम नहीं करता है।GeoJSON

var map = L.map('map').setView([51.9, 7.6], 11); 
         L.tileLayer('http://{s}.tile.cloudmade.com/5e4495ff4b0d454eb0443225198b7e6c/997/256/{z}/{x}/{y}.png', { 
    attribution: 
     'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://cloudmade.com">CloudMade</a>', 
     maxZoom: 16 
    }).addTo(map); 

var polygon = { 
    "type": "Feature", 
    "properties": { 
     "name":"City BoundingBox", 
     "style": { 
      "color": "#004070", 
      "weight": 4, 
      "opacity": 1 
     } 
    }, 
    "geometry": { 
     "type": "Polygon", 
     "coordinates": [[ 
      [7.5,52.05],     
      [7.7,51.92], 
      [7.6,51.84], 
      [7.4,51.94], 
      [7.5,52.05] 
     ]] 
    } 
}; 

var myLayer = L.geoJson().addTo(map); 
//myLayer.addData(polygon); 

var popup = L.popup(); 

function onMapClick(e) { 
    popup 
     .setLatLng(e.latlng) 
     .setContent("You clicked the map at " + e.latlng.toString()) 
     .openOn(map); 
} 


map.on('click', onMapClick); 

<?php 
    $mdjson = file_get_contents("http://xxx/ows?service=WFS&version=1.0.0&outputFormat=JSON&request=GetFeature&typeName=xx:yy&maxFeatures=50"); 
    echo "var geojsonMD = ".$mdjson.";";  
?> 

myLayer.addData(geojsonMD); 

L.geoJson(geojsonMD, { 
    style: function (feature) { 
     return {color: feature.properties.color}; 
    }, 
    onEachFeature: function (feature, myLayer) { 
     layer.bindPopup(feature.properties.description); 
    } 
}).addTo(map); 

आशा है कि आप मेरी मदद कर सकते हैं।

सर्वश्रेष्ठ संबंध।

+0

आप इसे थोड़ा स्पष्ट है कि आप क्या करना चाहते हैं कर सकते हैं? क्या आप अपनी बनाई गई बहुभुज के साथ सेवा से geoJson donwloaded गठबंधन करना चाहते हैं? – flup

उत्तर

12

सेवा मानते हुए बहुभुज के समान गुणों के साथ डेटा लौटाता है, आप वास्तव में उन्हें एक और एक ही परत में जोड़ सकते हैं।

var myLayer = L.geoJson(geojsonMD, { 
    style: function (feature) { 
     return feature.properties.style; 
    }, 
    onEachFeature: function (feature, layer) { 
     layer.bindPopup(feature.properties.name); 
    } 
}) 

myLayer.addData(polygon); 
myLayer.addTo(map); 

http://jsfiddle.net/Wn5Kh/ (डाउनलोड किए गए डेटा के बिना, के लिए मैं यूआरएल नहीं है)

geojsonMD अलग सुविधा गुण है तो आप दो GeoJSON परतों को जोड़ने के साथ कुछ भी गलत नहीं है। एक सेवा जिसे आप सेवा से पुनर्प्राप्त करते हैं, और बहुभुज के साथ एक।

1

के रूप में पत्रक दस्तावेज में बताया गया है, आप अपने GeoJSON की प्रत्येक सुविधा के लिए वांछित जानकारी के साथ एक पॉपअप संलग्न करने के लिए "onEachFeature" का उपयोग करना चाहिए:

onEachFeature विकल्प के लिए एक समारोह प्रत्येक पर बुलाया जाता है वह यह है कि GeoJSON परत में जोड़ने से पहले सुविधा।

var myLayer = L.geoJson(polygon, { 
    onEachFeature: yourOnEachFeatureFunction 
}).addTo(map); 

function yourOnEachFeatureFunction(feature, layer){ 
    if (feature.properties.name) { 
     layer.bindPopup(feature.properties.name); 
    } 
} 

इस उदाहरण में पॉपअप की सामग्री दिखाएगा: एक आम कारण इस विकल्प का उपयोग करने के लिए आप इसे इस तरह से उपयोग कर सकते हैं ताकि उन पर क्लिक कर रहे हैं

सुविधाओं के लिए एक पॉपअप संलग्न करने के लिए है प्रत्येक क्लिक की गई सुविधा के लिए संपत्ति "नाम"

+0

लेकिन वह वह नहीं चाहता जो वह चाहता है। वह जेसन को गतिशील रूप से कुछ अतिरिक्त डेटा जोड़ना चाहता है। मुझे लगता है। – flup

1

अब यह काम करता है। मैं चाहता था कि पुस्तिकाएं स्वचालित रूप से कॉर्ड और फीचर जानकारी को एक wfs से प्राप्त करें और उन्हें मानचित्र में जोड़ दें।

आपकी मदद के लिए काम कर रहे कोड और धन्यवाद thats =)

<?php 
        echo "var geojsonMD = ".$mdjson.";";  
?> 

myLayer.addData(geojsonMD); 

var myLayer = L.geoJson(geojsonMD, { 
style: function (feature) { 
    return feature.properties.style; 
}, 
onEachFeature: function (feature, layer) { 

     var strtype = ''; 

     if (feature.properties.mdtype == 0) { 
      strtype = 'aaa'; 
     } else if (feature.properties.mdtype == 1) { 
      strtype = 'bbb'; 
     } 


    layer.bindPopup('<b>' + feature.properties.mdname + '</b><br>' 
         + strtype + '<br><br>' 
         + feature.properties.mdadress + '<br>' 
         + feature.properties.mdfon); 
    } 
    }) 
     myLayer.addTo(map); 
संबंधित मुद्दे