2013-01-24 13 views
6

'dan ek bilgi içeren bir sorunla karşılaştı. geojson'dan ek bilgileri bir broşür işaretçisini açılan pencereye bağlamak istiyorum. broşür belgelerinden birkaç şey baktı ama işe yaramıyor.Leaflet Popup, 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); 

Umarım bana yardımcı olabilirsiniz.

Saygılarımızla.

+0

Eğer bunu yapmak istediğinizi net biraz yapabilir miyim? Hizmetten yüklenen geoJson'u kendiniz oluşturduğunuz çokgenle birleştirmek ister misiniz? – flup

cevap

12

Servis döndürme verilerinin çokgenle benzer özelliklere sahip olduğunu varsayarak, bunları bir ve aynı katmana ekleyebilirsiniz.

geojsonMD farklı özellik özelliklere sahipse (ı URL'yi yok indirilen veri olmadan)

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/, iki GeoJSON katmanları ekleyerek yanlış bir şey yok. Hizmetten aldığınız verilerden biri ve bir tanesi çokgen.

1

olarak Broşürü belgelerinde açıklandığı, size GeoJSON her özelliği istenen bilgileri içeren bir açılır pencere takmak için "onEachFeature" kullanmalıdır:

onEachFeature seçeneği her biri üzerinde çağrılan bir fonksiyondur Bir GeoJSON katmanına eklemeden önce özelliği. Popup içeriğini gösterecektir Bu örnekte

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

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

: onlar

tıklandığında Bu seçeneği kullanmak için Genel sebep Sen bu şekilde kullanabilirsiniz özelliklere için bir açılır pencere takmak için özellik her bir tıklatılan özellik için "ad"

+0

Ama istediği bu değil. Json'a dinamik olarak fazladan veri eklemek istiyor. Bence. – flup

1

Şimdi çalışıyor. Broşürden otomatik olarak coordur ve özellik bilgileri alıp haritaya ekledim. Yardımlarınız için çalışma kodu ve teşekkür şu

=)

<?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);