【问题标题】:OpenLayers display all markers on screenOpenLayers 在屏幕上显示所有标记
【发布时间】:2013-04-09 19:37:15
【问题描述】:

如何获取地图上的所有标记,以便用户可以看到所有标记?

我有一些标记。我在地图上显示它们。 我从所有标记的 lon 和 lat 的最高和最低数字的平均值中得到的中心 LonLat。

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

map.setCenter(centerLonLat, 8);

8 只是一个随机缩放级别。有什么方法可以计算出完美的缩放级别,以便所有标记都显示在地图中?

【问题讨论】:

    标签: javascript openlayers openstreetmap


    【解决方案1】:

    OpenLayers getDataExtent() function here 给出了类似的避免循环的方法。您需要将它应用到包含标记的图层上:

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

    【讨论】:

    • 你也可以使用它。但是由于我已经在循环我的标记,所以最好在那个循环中进行。
    【解决方案2】:

    这是一个旧线程,但随着 OpenLayers 的更改,我想我会发布一个新的解决方案。如果您使用ol.source.Vector 作为图层源,那么您可以调用以下行来使地图视图适合您的数据。

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

    这同时使地图居中并设置缩放,以便您的所有数据一次可见。

    【讨论】:

      【解决方案3】:

      使用zoomToExtent() 让它工作

      var newBound = OpenLayers.Bounds();
      

      对于每个标记 lonlat:

      newBound.extend(lonLat);
      

      然后将其传递给函数:

      map.zoomToExtent(newBound);
      

      【讨论】:

      • 应该是:var newBound = new OpenLayers.Bounds();
      • 我使用了您的解决方案,但由于标记上的 lonLat 为空,因此无法正常工作。但我使用getCoords() 并像这样工作:bounds.extend(new OpenLayers.Geometry.Point(marker.getCoords().lon, marker.getCoords().lat).transform(fromProjection, toProjection));
      • 这是ol2的吗? ol3 解决方案是什么?
      猜你喜欢
      • 1970-01-01
      • 2021-08-09
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多