通过onEachFeature中的其他代码防止图层弹出

时间:2019-02-03 16:16:00

标签: leaflet

在第0.7.3版中,我使用layer.bindPopup中的onEachFeature使用geoJson数据的属性构建了自定义弹出窗口。但是,我也尝试在layer._leaflet_id = feature.properties.fid中使用onEachFeature,以便利用一个函数在带有外部控件的功能之间移动。

此功能(下面的代码摘录中的clickOnMapItem)有效,我打算通过地图外部的NEXT和PREVIOUS按钮来使用它。

但是,在layer._leaflet_id = feature.properties.fid中包含onEachFeature之后,将不再显示弹出窗口。如何在onEachFeature内成功完成两项任务?

我在下面提供了代码摘录。

function onEachFeature(feature, layer) {
layer.bindPopup('<b>Location: </b>' + feature.properties.name);
layer.on({
click: getName
});
//including this next line seems to prevent the popups
layer._leaflet_id = feature.properties.fid;
}

function clickOnMapItem(itemId) {
var id = parseInt(itemId);
//get target layer by it's id
var layer = geojson.getLayer(id);
//fire event 'click' on target layer 
layer.fireEvent('click');
}

function getName(e) {
//info.update is a function used to populate an external div
info.update(e.target.feature.properties);
}

2 个答案:

答案 0 :(得分:0)

请勿使用def tf_zero_pad_columns(tensor, columns_list, num_output_columns): assert(tensor.shape.as_list()[1] == len(columns_list)) assert(num_output_columns >= len(columns_list)) tensor = tf.transpose(tensor) columns = tf.constant(np.array([columns_list]).T.astype('int32')) tensor_shape = tf.shape(tensor)[1] scattered = tf.scatter_nd(columns, tensor, shape=(num_output_columns, tensor_shape)) return tf.transpose(scattered)

它是传单的内部内容,您将找不到有关它的任何文档。

对于您要实现的目标,我不会使用_leaflet_id打开弹出窗口。有一种方法fireEvent('click')

答案 1 :(得分:0)

layer._leaflet_id = feature.properties.fid;问题的确切原因仍然未知(正如YaFred指出的那样,它在Leaflet内部,因此没有支持文档),但是我确实发现了一种替代解决方案,希望对其他人有所帮助。 / p>

我使用layer._leaflet_id = feature.properties.fid;代替了layers[feature.properties.fid] = layer;,之前基于this的答案调用过var layers = {};。我已经包括了更新的代码摘录,该代码摘录构建了可用于滚动浏览图层的“下一个”和“上一个”功能。

var currentPhoto;
var layers = {};


function onEachFeature(feature, layer) {
    layer.bindPopup('<b>Location: </b>' + feature.properties.name);
    layer.on(
        "click",function(e){getName(e);
        currentPhoto = parseInt(layer.feature.properties.fid);
    });
    layers[feature.properties.fid] = layer;
}

// call from outside map
function highlightFeature(fid){
    layers[fid].fireEvent('click');
}

$('#prev').click(function() {
    highlightFeature(currentPhoto-1);
});

$('#next').click(function() {
    highlightFeature(currentPhoto+1);
});

function getName(e) {
    //info.update is a function used to populate an external div
    info.update(e.target.feature.properties);
}