如何在传单中自动缩放到多边形?

时间:2017-03-16 16:13:03

标签: javascript jquery json leaflet

我有这样的geoJson格式:

statesData.features.push({  
   "type":"Feature",
   "id":"AFG",
   "properties":{  
      "name":"Afghanistan"
   },
   "geometry":{  
      "type":"Polygon",
      "coordinates":[  
         [  
            [  
               61.210817,
               35.650072
            ],
            [  
               62.230651,
               35.270664
            ],
            [  
               62.984662,
               35.404041
            ],

我正在尝试读取这些坐标并将其设置为

        var coord = statesData.features[0].geometry.coordinates;
        lalo = L.GeoJSON.coordsToLatLng(coord);
        map.setView(lalo, 18);

The documentation says

  

coordsToLatLng(coords)将用于的函数   将GeoJSON坐标转换为LatLng点(如果未指定,   coords将被假定为WGS84 - 标准[经度,纬度]   以度为单位的值。

但我在控制台中收到此错误

  

未捕获错误:无效的LatLng对象:(未定义,   61.210817,35.650072,62.230651,35.270664,62.984662,35.404041 ...

更新

第一个答案是正确的,因为它解决了上面的问题,但是,它将地图缩放到第一组坐标,而我真正想要实现的是能够加载页面,地图自动缩放到polygon(我只加载一个多边形)。

This example is the closest i could find

2 个答案:

答案 0 :(得分:0)

您正在传递一组数组数组作为参数(wtf xD)。 coordsToLatLng并不期望这样。它只需要一个数组,即坐标:https://www.dartdocs.org/documentation/leaflet/0.0.1-beta.1/leaflet.layer/GeoJSON/coordsToLatLng.html

所以你的代码必须是:

var coord = statesData.features[0].geometry.coordinates[0][0];
lalo = L.GeoJSON.coordsToLatLng(coord);
map.setView(lalo, 18);

这将获得双阵列中第一个点的坐标。顺便说一句,我很确定双阵列不是你真正想要的。

答案 1 :(得分:0)

由于答案我got from here,解决方法是使用leaflet layerGroup

Following leaflet example因为我正在使用它,根据他们的代码和我得到的其他答案,这对我有用。我根据我的项目使用php位来获取我需要的国家名称。以下获取一个名称,如果geoJson中有一个名称,则比较它,如果是,则将地图居中并缩放到该多边形:

geojson = L.geoJson(statesData, {
  style: style,
  onEachFeature: onEachFeature
}).addTo(map);

<?php 
    $myCountry = usp_get_meta(false, 'usp-custom-3');
    $fixedname = ucfirst($myCountry); 
?>

geojson.eachLayer(function (layer) {
  if (layer.feature.properties.name === "<?php echo $fixedname; ?>") {
    // Zoom to that layer.
    map.fitBounds(layer.getBounds());
  }
});