OpenLayers地图包装。重复的地图区域给出无效的坐标

时间:2015-07-24 12:31:54

标签: javascript maps openlayers-3

我正在使用OpenLayers在我的网站上显示世界地图。地图包裹在任何一侧,并且在重复的部分中,坐标是疯狂的。

Wrapping world map

可以移动地图上的图钉。如果我们将它们移动到重复的部分,而不是在地球上获得该点的实际坐标,我们会得到一个无效的坐标集,使该指针完全从地图中消失。

这是我用于地图的代码:

Dim Rng As Range
If Category = Range("S2") Then
CellReference = 10
'Set your range
Set Rng = Range("A1:B2")
ElseIf Category = Range("S3") Then
CellReference = 14
'Set your range
Set Rng = Range("C1:D2")
ElseIf Category = Range("S4") Then
CellReference = 18
'Set your range
Set Rng = Range("F1:G2")
ElseIf Category = Range("S5") Then
 CellReference = 16
'Set your range
Set Rng = Range("H1:J2")
End If

For Each mCell In ThisWorkbook.Sheets("YourSheetName").Range(Rng).SpecialCells(xlCellTypeVisible)
'Get cell address
mAddr = mCell.Address
'Get the address of the cell on the column you need
NewCellAddr = mCell.Offset(0, ColumnsOffset).Address
'Do everything you need
Next mCell

您可以看到我已尝试将 this.maps.vectorSource = new ol.source.Vector({ }); this.maps.vectorLayer = new ol.layer.Vector({ source: self.maps.vectorSource }); this.maps.rasterLayer = new ol.layer.Tile({ source: new ol.source.OSM({wrapDateLine: false}) }); this.maps.map = new ol.Map({ target: 'map', interactions: ol.interaction.defaults({mouseWheelZoom:false}), layers: [self.maps.rasterLayer, self.maps.vectorLayer], view: new ol.View({ center: ol.proj.transform([-98.583333, 37.833333], 'EPSG:4326', 'EPSG:3857'), zoom: 4 }) }); 选项设置为wrapDateLine,但这不会产生任何效果。

我想通过阻止地图重复或确保重复部分报告正确的坐标来解决这个问题。在这一点上,我不在乎哪个。我有什么想法可以实现这两个结果中的一个?

2 个答案:

答案 0 :(得分:1)

根据您的OpenLayers版本,您可能需要使用不同的选项来禁用水平重复。尝试将以下选项添加到OSM源:

wrapX: false,
noWrap: true

我已经使用稍微修改过的代码版本制作了一个jsFiddle来说明: https://jsfiddle.net/fg1oxpu0/

答案 1 :(得分:1)

安东尼让我按照他的回答朝着正确的方向前进。我们使用的是不支持wrapX的OL 3.1.1。我更新到3.2.0并且能够关闭包装。但是,这会产生一个UX问题(地图现在在任何一方结束,用户需要手动移回另一侧)和UI问题(我们广泛的地图显示区域现在大部分都是空的。)

我尝试升级到最新版本(3.7.0),我注意到,它开始包装矢量图层。 (矢量包装在移动到OL 3时丢失了,但后来又恢复了。)这使我能够将地图包裹回来,并在地图的每次重复上绘制引脚。它现在甚至在重复的地图上报告正确的坐标。