我有这样的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点(如果未指定, coords将被假定为WGS84 - 标准[经度,纬度] 以度为单位的值。
但我在控制台中收到此错误
未捕获错误:无效的LatLng对象:(未定义, 61.210817,35.650072,62.230651,35.270664,62.984662,35.404041 ...
更新
第一个答案是正确的,因为它解决了上面的问题,但是,它将地图缩放到第一组坐标,而我真正想要实现的是能够加载页面,地图自动缩放到polygon(我只加载一个多边形)。
答案 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());
}
});