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 使用。
我需要缩放我的 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 使用。