OpenLayers 3:将地图缩放到数组中的坐标

OpenLayers 3: Zoom map to coordinates in array

我需要缩放我的 OpenLayers 地图(它使用 Google Maps baselayer)以适应视图中所有给定的坐标列表。

我将坐标存储在名为 pointsDecimal 的经纬度对数组中,如下所示:

pointsDecimal: Array[50]
  0: 148.77638
  1: -34.491728
  2: 148.77896
  3: -34.492302
  4: 148.778090711323
  ...

偶数索引(0、2、4 等)是经度,奇数索引(1、3、5 等)是纬度。

这是我正在尝试使用的代码:

map.getView().fit(pointsDecimal, map.getSize());

但出于某种原因,这使我在坐标 [0,0] 处处于最大缩放级别 - 在几内亚湾,而不是我想去的新南威尔士州东南部!

我知道如果我使用 OpenLayers 源(例如 source.getExtent())代替我的 pointsDecimal 数组,这会容易得多,但在这种情况下这不是一个选项,原因是我现在不会进入 - 我只能使用数组。

任何人都可以给我任何提示吗?

编辑: 我想我快到了,感谢 Anupam。这就是我现在拥有的:

var extent = [pointsLongMin,pointsLatMin,pointsLongMax,pointsLatMax];
map.getView().fit(extent,map.getSize());

我传递给数组的值如下:

pointsLongMin: 148.771162
pointsLatMin: -34.5029736405108
pointsLongMax: 148.77896
pointsLatMax: -34.491728

但我仍然在 [0,0] 被扔进海里。我在这里做错了什么?

为了使用map.getView().fit(extent,size)。 extent 表示四个点为 [minx, miny, maxx,maxy].

它实际上是一个矩形。尝试

var extent=[148.77638,-34.491728,148.77896,-34.492302];

map.getView().fit(extent,map.getSize());

最可能的原因是您的地图投影在 EPSG:3857 而您的范围 EPSG:4326。因此,您需要将范围转换为地图投影。

var coordMin = ol.proj.fromLonLat([148.77638,-34.491728], 'EPSG:3857');
var coordMax = ol.proj.fromLonLat([148.77896,-34.492302], 'EPSG:3857');
var extent=[coordMin[0],coordMin[1],coordMax[0],coordMax[1]];
map.getView().fit(extent,map.getSize());

您可能会找到更优雅的方式来进行范围变换。除非您提供完整代码,否则我们只能猜测您的地图投影是什么。我只是猜测是 EPSG:3857 因为那是默认的 ol3 使用。