【发布时间】:2018-01-15 22:42:48
【问题描述】:
我有一个 openlayers 地图,它加载了几个 kml 文件,每个文件包含大约 120 个多边形地标。由于它们太多,无法为每个显示弹出窗口,我不得不创建一个外部地图菜单,以便用户可以单击其中任何一个功能并查看它的信息/位置。
我使用这个函数来创建包含所有功能的外部地图菜单:
vEnergeticos.getSource().on('change', function(evt){
var source = evt.target;
if (source.getState() === 'ready') {
var energeticos = source.getFeatures();
for (var i in energeticos) {
var figura = energeticos[i].getGeometry().getExtent();
var myCenter = ol.extent.getCenter(figura);
$("#containerLeft").append("<a href=javascript:showMenuPopup(" + myCenter + "," + energeticos[i].get('ID') + ")>" + energeticos[i].get('name') + "</a><br>");
}
}
});
然后当用户点击这些选项中的任何一个时,就会调用这个函数:
function showMenuPopup(xx, yy, theID){
var myPixel = map.getPixelFromCoordinate([xx, yy]);
var elNombre = "";
var laDescripcion = "";
map.forEachFeatureAtPixel(myPixel, function(feature, layer) {
if (feature.get('ID') == theID){
elNombre = feature.get('name');
laDescripcion = feature.get('description');
}
});
popupTitle.innerHTML = elNombre;
popupContent.innerHTML = laDescripcion;
overlay.setPosition([xx,yy]);
}
这在某些情况下有效,但是,当所选要素位于当前地图视图之外时,地图会成功重新定位 (overlay.setPosition([xx,yy]);),会显示弹出窗口,但是弹出窗口是空的。如果当用户从左侧菜单中单击时该功能可见,则弹出窗口正确显示。
为了清楚起见,假设您正在查看可以看到欧洲部分地区的地图,然后单击位于加拿大的某个项目(使用地图外菜单),您会看到地图重新定位在加拿大,但显示的弹出窗口是空的。如果您再次单击同一个地图外链接,或在该位置/缩放视图中可见的任何其他功能,则弹出窗口将正确显示。
我尝试使用“moveend (ol.MapEvent)”来解决此问题,因此在重新定位地图后加载了弹出窗口,但它对我不起作用。 moveend 事件是在地图开始移动之前使用 overlay.setPosition([xx,yy]) 调用的,但我找不到其他可以使用的“重定位后”事件。
我已经为此苦苦挣扎了很多天,所以任何帮助都将不胜感激。
问候!!
【问题讨论】:
标签: javascript html openlayers kml