【发布时间】:2012-05-02 00:50:09
【问题描述】:
我有一个 Leaflet.js 地图,上面有来自外部 JSON 文件的点和线串。
如果我添加: map.setView(new L.LatLng(0,0), 10);
它将以纬度和经度 0,0 为中心设置地图。如何设置它以使地图中心和缩放适合 JSON 上的所有点?
【问题讨论】:
标签: javascript geojson
我有一个 Leaflet.js 地图,上面有来自外部 JSON 文件的点和线串。
如果我添加: map.setView(new L.LatLng(0,0), 10);
它将以纬度和经度 0,0 为中心设置地图。如何设置它以使地图中心和缩放适合 JSON 上的所有点?
【问题讨论】:
标签: javascript geojson
您可以将所有图层添加到具有 getBounds 方法的 FeatureGroup。所以你应该可以说myMap.fitBounds(myFeatureGroup.getBounds());
至少目前,L.FeatureGroup 的 getBounds 方法仅在 master 分支中可用(不是最新版本,0.3.1)。
【讨论】:
我的情况类似。我从 GeoJson 数据中绘制了所有 标记。所以我写了这个函数,它在按钮点击时被重复调用。只要符合你的要求就试试吧。
function bestFitZoom()
{
// declaring the group variable
var group = new L.featureGroup;
// map._layers gives all the layers of the map including main container
// so looping in all those layers filtering those having feature
$.each(map._layers, function(ml){
// here we can be more specific to feature for point, line etc.
if(map._layers[].feature)
{
group.addLayer(this)
}
})
map.fitBounds(group.getBounds());
}
编写此函数的最佳用途是即使地图/标记的状态发生变化,它也会获得标记/图层的最新/当前状态。每当调用此方法时,所有图层都将以适度的缩放级别可见。
【讨论】:
在向用户显示从起点到目的地的路线时,我需要这样做。我将我的路线列表存储在一个名为 directionLatLngs 的 L.LatLng 数组中,然后您可以简单地调用
map.fitBounds(directionLatLngs);
这是因为map.fitBounds 需要一个L.LatLngBounds 对象,它只是L.LatLng 的数组
【讨论】: