使用LEaflet将多个geoJSon文件查看到视图中

时间:2014-09-05 16:21:45

标签: javascript leaflet

我创建了一个javascript模板,用于将GEOJson文件加载到传单地图上。文件可以是ploygons,multypolygons,marker,icons等。我的问题是我如何能够fitBounds所有这些文件?当我调用fitBounds时,现在只使用第一个文件而忽略其余文件。

我基本上做的是在我的主HTML / JavaScript文件中,我只需要提供一个文件名和一个名称,我想成为叠加层,并且可能有一个或多个。在我的模板javascript中,我使用

加载所有这些文件
    var myStuff = L.geoJson(data,
              {
                style:mystyle},
              OnEachFeature, pointToLoayer
              //more complex but just to give a better understanding...
               });
                myStuff.addTo(map);
                map.fitBounds(myStuff);

除了fitBounds部分之外,我尝试做的所有事情都有效。 "数据"是我加载的文件,但fitBounds只影响第一个。有人有主意吗?

如果有人感到困惑,我可以提供更多细节......

1 个答案:

答案 0 :(得分:1)

首先,代码中存在错误: fitBounds 需要L.LatLngBounds个参数

所以你的代码应该是:

map.fitBounds(myStuff.getBounds());

如果您想使用 fitBounds ,您只能拥有一个GeoJSON图层

但是,您可以向图层添加数据

var myStuff = L.geoJson(data1);
myStuff.addData(data2);
myStuff.addData(data3);

myStuff.addTo(map);
map.fitBounds(myStuff.getBounds());

如果您想要保留多个图层,则必须自己计算边界矩形。

var myStuff1 = L.geoJson(data1);
var bounds1 = myStuff1.getBounds();
var myStuff2 = L.geoJson(data2);
var bounds2 = myStuff2.getBounds();

myStuff.addTo(map);
map.fitBounds(bestBounds(bounds1, bounds2));

function bestBounds(bounds1, bounds2) {
// clever computation to get west,east,north,south
}