我需要缩放我的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]的海洋中被抛弃。我在这里做错了什么?
答案 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使用。