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

Javascript 如何在传单中自动缩放到多边形?,javascript,jquery,json,leaflet,Javascript,Jquery,Json,Leaflet,我的geoJson格式如下: statesData.features.push({ "type":"Feature", "id":"AFG", "properties":{ "name":"Afghanistan" }, "geometry":{ "type":"Polygon", "coordinates":[ [ [ 61.2108

我的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);
:

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

但我在控制台中得到了这个错误

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

更新

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


您正在传递一个数组数组数组作为参数。
coordsToLatLng
不需要这样做。它只需要一个数组,即坐标:

因此,您的代码实际上必须是:

var coord = statesData.features[0].geometry.coordinates[0][0];
lalo = L.GeoJSON.coordsToLatLng(coord);
map.setView(lalo, 18);
这将获得双数组中第一个点的坐标。顺便说一句,我很确定双数组不是您真正想要的。

多亏了我的答案,解决方案才得以使用

这就是我所使用的,基于他们的代码和我得到的另一个答案,这对我来说是有效的。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());
  }
});
geojson=L.geojson(statesData{
风格:风格,
onEachFeature:onEachFeature
}).addTo(地图);
geojson.eachLayer(函数(层){
如果(layer.feature.properties.name==“”){
//缩放到该层。
map.fitBounds(layer.getBounds());
}
});

坐标是一个坐标数组,在一个数组中,在一个数组中。这不是至少有一个数组太多了吗?
setView()
可以处理多个坐标吗?@JJJ我正在尝试自动缩放到一个多边形。还有一个函数(注意复数“s”)可以处理
坐标数组(
[[],[],[],[],[],[],[],[],[],[],[],[],[],…]
)。
coordsToLatLng()
将只转换一个坐标。您必须在
坐标中选择一个lat/lng对
setView()
也将只使用一个坐标(lat/lng)实际上,我并不是在向一个国家动态添加一个多边形,当我加载页面时,我试图放大该多边形,我尝试了各种各样的地方,我无法动脑,直到我走到这一步,但没有工作:(@rob.m是的,但是,这个数组是从哪里来的?这是一个三维数组,有点出乎意料。如果你是手动创建这个数组,那么你肯定是做错了。你在做
坐标:[[x,y],[x,y],[x,y]]]
当它应该是
坐标:[[x,y],[x,y]]
这是geoJson而不是JSON,它是多边形的格式,定义见():/@rob.m是的,让我们看看经验丰富的用户是否能带来一些启发。