如何在单张中显示和居中单个国家多边形?

时间:2017-03-16 12:16:27

标签: javascript jquery json leaflet

我在使用leaflet加载页面时尝试自动缩放到特定的国家/地区名称。当我发布我的页面时,我可以得到一个变量:

you have wrong syntax at rules inside urlManager, it must be like:


            'rules' => array(
                '<controller:\w+>/<id:\d+>' => '<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',),

现在我加载我的json:

var $myCountry = "France";

这是我的geoJson结构:

$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]
      ]
  }
},

我想这样做是为了根据变量中找到的国家/地区名称放大地图,我还检查了另一个SO question,但我没有得到它。

更新

这几乎可行,变量和专有名称之间的比较不是tho,但变量字符串是正确的,并且通过json我们确实有一个具有相同字符串的名称

var $myCoordinates = $myCountry.coordinates

1 个答案:

答案 0 :(得分:1)

我认为我们最初显示您的代码和数据结构以及帖子标题时会被误导。

实际上,您并不是在尝试扫描数组或简单的JSON对象,而是使用具有FeatureCollection和许多功能的GeoJSON对象。

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

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

因此,您应该从GeoJSON数据中构建Leaflet GeoJSON group,然后扫描该组(例如使用eachLayer())以找到具有{{1}的要素表示的图层}。

符合以下内容:

properties.name === "France"

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