另一位开发人员创建了原始地图,但我的任务是进行一些更改。其中之一是确保激活的标记在点击时被带到前面(它与其他标记部分重叠)。
开发人员使用了mapbox 2.2.2。
我查看过leafletjs的文档,已经按照其他发布解决方案的一些说明(例如solution one和solution two)。这些都没有任何区别。
检查Chrome控制台中的标记我可以看到options.zIndexOffset的值正在设置(在我的测试用例中为10000)。我甚至将_zIndex设置为人为的高值,并且可以看到标记的数据结构中反映出来的情况。但在视觉上没有任何变化。
这是最初设置地图的方式。所有功能都来自单个geojson Feed:
L.mapbox.accessToken = '<access token here>';
var map = L.mapbox.map('map', 'map.id', {
}).setView([37.8, -96], 3);
var jsonFeed, jsonFeedURL;
var featureLayer = L.mapbox.featureLayer()
.addTo(map)
.setFilter(function (f) {
return false;
});
$.getJSON(jsonFeedURL, function (json) {
jsonFeed = json;
jsonFeedOld = json;
// Load all the map features from our json file
featureLayer.setGeoJSON(jsonFeed);
}).done(function(e) {
// Once the json feed has loaded via AJAX, check to see if
// we should show a default view
mapControl.activateInitialItem();
});
下面是我尝试设置值来更改z-index的片段。单击featureLayer上的可视标记时,将调用“activateMarker”:
featureLayer.on('click', function (e) {
mapControl.activateMarker(e);
});
GEOjson Feed有图标显示的网址,活动标记图标切换到替代版本(也更大)。当活动特征是单个点时,我试图设置标记的值(注释掉的行,我试过的各种东西!)
activateMarker: function (e) {
var marker = e.layer;
var feature = e.layer.feature;
this.resetMarkers();
if (feature.properties.hasOwnProperty('icon')) {
feature.properties.icon['oldIcon'] = feature.properties.icon['iconUrl'];
feature.properties.icon['iconUrl'] = feature.properties.icon['iconActive'];
feature.properties.icon['oldIconSize'] = feature.properties.icon['iconSize'];
feature.properties.icon['iconSize'] = feature.properties.icon['iconSizeActive'];
}
if (feature.geometry.type == 'Point') {
marker.setZIndexOffset(10001);
marker.addTo(featureLayer);
}
//featureLayer.setGeoJSON(jsonFeed);
}
任何建议都将不胜感激!我正处于不知道还有什么可以尝试的地方(那是在说些什么)。
答案 0 :(得分:0)
可能发生的情况是,您只需在最后一次调用.setGeoJSON()
时刷新标记:
如果图层已具有功能,则会将其替换为新功能。
您正确调整了与图标相关的GeoJSON数据,以便在重新创建时,featureLayer
可以使用新值来显示新图标(具体取决于您配置featureLayer
的方式)。
但是,您在标记上直接更改的内容将丢失,因为标记将被删除并替换为新标记,并从GeoJSON数据重新构建。
“最干净”的方式可能是避免在每次点击时重新创建所有功能。
另一种方法可能是更改GeoJSON数据中的其他内容,告诉featureLayer
使用不同的pointToLayer
选项构建新标记(通过zIndexOffset
选项)。