OpenLayers在屏幕上显示所有标记

14

如何让用户在地图上看到所有标记?

我有一些标记。我正在地图上显示它们。 我从所有标记的经纬度中取最高和最低值的平均值来获取中心点。

所以我使用以下代码将地图设置为所有标记的中心点:

map.setCenter(centerLonLat, 8);

8只是一个随机的缩放等级。是否有方法计算出完美的缩放等级,以便在地图上显示所有标记?

3个回答

11

OpenLayers提供了一个避免使用循环的类似方法,可以使用getDataExtent()函数。您需要将其应用于包含标记的图层:

var newBound = map.myLayer.getDataExtent();
map.zoomToExtent(newBound);

1
你也可以使用那个。但是既然我已经在循环我的标记了,最好还是在那个循环中完成它。 - Klaasvaak

10

虽然这是一个旧帖子,但由于OpenLayers的更改,我认为应该发布一个新的解决方案。如果您正在使用ol.source.Vector作为图层源,则可以调用以下代码行来适应地图视图以围绕您的数据。

map.getView().fit(vectorSource.getExtent());

此操作可将地图居中,并设置缩放级别,以便一次性查看所有数据。


5

使用zoomToExtent()方法使其正常工作。

var newBound = OpenLayers.Bounds();

对于每个标记lonlat:

newBound.extend(lonLat);

然后将其传递给函数:
map.zoomToExtent(newBound);

应该是:var newBound = new OpenLayers.Bounds(); - Hayden Thring
我使用了你的解决方案,但是不起作用,因为标记上的lonLat为空。但是我使用了getCoords()并且像这样工作:bounds.extend(new OpenLayers.Geometry.Point(marker.getCoords().lon, marker.getCoords().lat).transform(fromProjection, toProjection)); - IgniteCoders
这是针对ol2的吗?那么ol3的解决方案会是什么? - Ries

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接