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

时间:2016-07-10 11:41:21

标签: javascript openlayers-3

我需要缩放我的OpenLayers地图(使用Google地图底层),以便将所有给定的坐标列表放入视图中。

我已将坐标存储在名为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]的海洋中被抛弃。我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

为了使用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());

答案 1 :(得分:1)

最可行的原因是,您的地图会在您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使用。