按选项值查找标记

时间:2017-06-21 17:49:18

标签: javascript leaflet

假设您有一张Leaflet地图,其中包含一组自定义标记,每个标记都有唯一的ID值:

var marker = new L.marker(latlong, {id: id, icon: icon}).addTo(map);

通过“id”值访问标记(具体来说,我想修改标记的类)的推荐方法是什么?

2 个答案:

答案 0 :(得分:3)

迭代所有地图的图层,检查它是否是标记并比较id:

L.Map.include({
    getMarkerById: function (id) {
        var marker = null;
        this.eachLayer(function (layer) {
            if (layer instanceof L.Marker) {
                if (layer.options.id === id) {
                    marker = layer;
                }
            }
        });
        return marker;
    }
});

var map = new L.Map(...);

var marker = new L.Marker(..., {id: 1});

map.getMarkerById(1); // returns marker instance
map.getMarkerById(2); // returns null

答案 1 :(得分:3)

我建议使用ID作为密钥来保留dictionary个标记,而不是循环遍历所有标记,例如:

var markers = {};

markers[id] = new L.marker(latlong, {id: id, icon: icon}).addTo(map);

然后您只需参考marker[id]

一个更复杂的例子:

var markers = {};
var data = [ ['alpha', 0, -80],
             ['beta',  20, 35],
             ['delta', -70, 44],
           ];

data.forEach(function(item){
    var id = item[0];
    var latLng = L.latLng(item[1], item[2]);
    markers[id] = new L.marker(latLng, {id: id, icon: icon}).addTo(map);
});

console.log(markers['delta']); // returns the marker at -70, 44