2017-03-16 63 views
0

我试图在使用leaflet加载页面时自动缩放到特定的国家/地区名称。当我发表我的网页,我可以得到这样一个变量:如何在单张中显示和居中一个国家的多边形?

var $myCountry = "France"; 

现在我打开我的JSON,如:

$json = file_get_contents("/world.json"); 
$data = json_decode($json, true); 

这是我的GeoJSON的结构:

{ 
    "type":"Feature", 
    "id":"AFG", 
    "properties":{"name":"France"}, 
    "geometry":{ 
    "type":"Polygon", 
    "coordinates":[ 
     [ 
     [61.210817,35.650072], 
     [62.230651,35.270664] 
     ] 
    } 
}, 

基本上我想检查我的变量名是否等于geoJson中的名称,如果是这样,我想获取它的坐标,沿着这些线。

var $myCoordinates = $myCountry.coordinates 

我想这样做是为了放大到基于变量中找到的国名的地图,我还检查这个其他SO question,但我没有得到它。

UPDATE

这几乎工程,变量和礼名不寿,但将变量字符串之间的比较是正确的,wihtin的JSON我们确实有一个名字以相同的字符串

var $country = "<?php echo $region; ?>"; 

$.ajax({ 
    type: 'GET', 
    url: '/world.json', 
    data: { get_param: 'value' }, 
    dataType: 'json', 
    success: function (data) { 
    $.each(data, function(index, element) { 
     if (element.properties.name == $country) { 
      alert("ciao"); 
     } 
    }); 
    } 
}); 
+0

将要检查总是包含在'obj.properties.name'你想要的价值? –

+0

是,整个GeoJSON的对所有国家按照我在这个问题 –

+0

写在这种情况下,请参阅我打上了一个解决方案 –

回答

1

我想我们被你最初展示你的代码和数据结构以及你的帖子标题所误导。

实际上,您并不是试图扫描一个数组或简单的JSON对象,而是使用FeatureCollection和大量特征来扫描一个GeoJSON对象。

因此,您必须遍历该FeatureCollection的Feature,并扫描每个Feature的properties.name

但即使如此,您仍然无法执行缩放到相应Leaflet图层的目标:GeoJSON对象未链接到您的Leaflet图层,反之亦然。

因此,您应该改为从您的GeoJSON数据中创建Leaflet GeoJSON group,然后扫描该组(例如使用eachLayer())以找到与properties.name === "France"一起表示特征的图层。

在东西线:

$.getJSON('/world.json', function (geoJSONdata) { 
    var geoJSONgroup = L.geoJSON(geoJSONdata).addTo(map); 

    geoJSONgroup.eachLayer(function (layer) { 
     if (layer.feature.properties.name === "France") { 
     // Zoom to that layer. 
     map.fitBounds(layer.getBounds()); 
     } 
    }); 
}); 

演示:https://plnkr.co/edit/SVJfLf8gR0VysrFVkwsS?p=preview

+0

哦,男人非常感谢这么多,认真。在Centroid_of_polygon中,疯了,所有这些只是因为我不知道这个功能。 –

相关问题