OL3中地图setCenter或zoom后矢量数据层不可见
In OL3, vector data layer not visible after map setCenter or zoom
正在迁移地图以使用 OL3。当我在地图上调用 map.getView().setCenter 或 map.getView().zoom 时,地图运行正常,但我的矢量数据层不再可见。我必须在地图上进行 MouseWheelZoom 交互,然后显示数据层。这类似于在这个未回答的 Whosebug post (How to reload WMTS Tiles after progromattically changing the map center and zoom?) 中发现的问题,只是我的地图图块渲染正确,是我的矢量图层不可见。
我正在创建 WMS 切片图层并使用此进行映射:
div = @get 'element'
layers = [ new (ol.layer.Tile)(
title: 'Imagery'
source: new (ol.source.TileWMS)(
url: WMS_VMAP_MAP_SERVER_URL
name: 'VMAP'
params:
LAYERS: 'basic'
FORMAT: 'image/png'
TRANSPARENT: true)) ]
map = new (ol.Map)(
interactions: ol.interaction.defaults().extend([ new (ol.interaction.Select)(style: selectedIconStyle) ])
controls: ol.control.defaults().extend([ new (ol.control.ScaleLine)(units: 'nautical') ])
layers: layers
target: div
view: new (ol.View)(
projection: 'EPSG:4326'
center: [
0
0
]
zoom: 1
maxResolution: 0.703125))
一个单独的功能是使用这个创建的:
feature = new ol.Feature({
geometry: new ol.geom.Point([lng, lat], 'XY'),
title: 'some title'
latitude: lat
longitude: lng
})
vectorSource.addFeature feature
矢量图层是这样添加的:
vectorLayer = new (ol.layer.Vector)(
source: vectorSource #new (ol.source.Vector)({})
style: circleIconStyle #my defined icon style
id: 'MYDATA'
)
map.addLayer vectorLayer
并且当以下事件触发时...
map.on('singleclick', (e) ->
map.forEachFeatureAtPixel(e.pixel, ((feature, layer) ->
...
)
)
...作为事件处理程序的一部分,我正在这样做:
map.getView().setCenter [
feature.get('longitude')
feature.get('latitude')
]
map.getView().setZoom 3
地图正确居中和缩放,但默认情况下不显示我的矢量图层数据。为了在 setCenter 或缩放视图后刷新数据层,还有什么我没有做或没有调用的吗?还是我的设置方式不正确?
谢谢
已修复。问题是坐标被视为几何的字符串而不是数字。解决方法是确保在设置坐标的位置,将它们明确视为数字以消除等式中的歧义。所以我在地图代码中设置 lat/lon(或 latitude/longitude)的任何地方,我都使用 Number(lat) 和 Number(lon) 代替。
支持 Eric Lemoine 回答位于 http://comments.gmane.org/gmane.comp.gis.openlayers.devel.ol3/4773 的另一个问题,因为我在那里看到了他对标记显示问题的解决方案,并认为它也可能解决我的问题。确实如此。
正在迁移地图以使用 OL3。当我在地图上调用 map.getView().setCenter 或 map.getView().zoom 时,地图运行正常,但我的矢量数据层不再可见。我必须在地图上进行 MouseWheelZoom 交互,然后显示数据层。这类似于在这个未回答的 Whosebug post (How to reload WMTS Tiles after progromattically changing the map center and zoom?) 中发现的问题,只是我的地图图块渲染正确,是我的矢量图层不可见。
我正在创建 WMS 切片图层并使用此进行映射:
div = @get 'element'
layers = [ new (ol.layer.Tile)(
title: 'Imagery'
source: new (ol.source.TileWMS)(
url: WMS_VMAP_MAP_SERVER_URL
name: 'VMAP'
params:
LAYERS: 'basic'
FORMAT: 'image/png'
TRANSPARENT: true)) ]
map = new (ol.Map)(
interactions: ol.interaction.defaults().extend([ new (ol.interaction.Select)(style: selectedIconStyle) ])
controls: ol.control.defaults().extend([ new (ol.control.ScaleLine)(units: 'nautical') ])
layers: layers
target: div
view: new (ol.View)(
projection: 'EPSG:4326'
center: [
0
0
]
zoom: 1
maxResolution: 0.703125))
一个单独的功能是使用这个创建的:
feature = new ol.Feature({
geometry: new ol.geom.Point([lng, lat], 'XY'),
title: 'some title'
latitude: lat
longitude: lng
})
vectorSource.addFeature feature
矢量图层是这样添加的:
vectorLayer = new (ol.layer.Vector)(
source: vectorSource #new (ol.source.Vector)({})
style: circleIconStyle #my defined icon style
id: 'MYDATA'
)
map.addLayer vectorLayer
并且当以下事件触发时...
map.on('singleclick', (e) ->
map.forEachFeatureAtPixel(e.pixel, ((feature, layer) ->
...
)
)
...作为事件处理程序的一部分,我正在这样做:
map.getView().setCenter [
feature.get('longitude')
feature.get('latitude')
]
map.getView().setZoom 3
地图正确居中和缩放,但默认情况下不显示我的矢量图层数据。为了在 setCenter 或缩放视图后刷新数据层,还有什么我没有做或没有调用的吗?还是我的设置方式不正确?
谢谢
已修复。问题是坐标被视为几何的字符串而不是数字。解决方法是确保在设置坐标的位置,将它们明确视为数字以消除等式中的歧义。所以我在地图代码中设置 lat/lon(或 latitude/longitude)的任何地方,我都使用 Number(lat) 和 Number(lon) 代替。
支持 Eric Lemoine 回答位于 http://comments.gmane.org/gmane.comp.gis.openlayers.devel.ol3/4773 的另一个问题,因为我在那里看到了他对标记显示问题的解决方案,并认为它也可能解决我的问题。确实如此。