Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Leaflet 如何定期更新geojson标记_Leaflet_Openstreetmap_Geojson_Markers - Fatal编程技术网

Leaflet 如何定期更新geojson标记

Leaflet 如何定期更新geojson标记,leaflet,openstreetmap,geojson,markers,Leaflet,Openstreetmap,Geojson,Markers,我想做的是使用带有OSM地图的传单, 并以GeoJSON格式从PHP加载数据,并定期更新 我可以设法显示地图,加载数据,但不知道如何更新点,而不是仍然添加新点 function update_position() { $.getJSON('link_to_php', function(data) { //get data into object var geojsonFeature = JSON.parse(data);

我想做的是使用带有OSM地图的传单, 并以GeoJSON格式从PHP加载数据,并定期更新

我可以设法显示地图,加载数据,但不知道如何更新点,而不是仍然添加新点

function update_position() {


        $.getJSON('link_to_php', function(data) {

            //get data into object
            var geojsonFeature = JSON.parse(data);

            // how to remove here old markers???


            //add new layer
            var myLayer = L.geoJSON().addTo(mymap);

            //add markers to layet
            myLayer.addData(geojsonFeature);

            setTimeout(update_position, 1000);

        });
    }

    update_position();

已尝试mymap.removeLayer(“myLayer”);但这似乎在函数内部起作用。请帮助
L.geoJSON
扩展自
LayerGroup
,它提供了一个名为
clearLayers
()的函数,因此您可以调用该函数来清除层中的标记

此外,建议将layer变量置于函数外部:

var geoJSONLayer = L.geoJSON().addTo(mymap);

function update_position() {
    $.getJSON('link_to_php', function(data) {   
        //get data into object
        var geojsonFeature = JSON.parse(data);

        geoJSONLayer.clearLayers();

        //add markers to layet
        geoJSONLayer.addData(geojsonFeature);

        setTimeout(update_position, 1000);
    });
}

update_position();

L.geoJSON
扩展自
LayerGroup
,它提供了一个名为
clearLayers
()的函数,因此您可以调用该函数来清除层中的标记

此外,建议将layer变量置于函数外部:

var geoJSONLayer = L.geoJSON().addTo(mymap);

function update_position() {
    $.getJSON('link_to_php', function(data) {   
        //get data into object
        var geojsonFeature = JSON.parse(data);

        geoJSONLayer.clearLayers();

        //add markers to layet
        geoJSONLayer.addData(geojsonFeature);

        setTimeout(update_position, 1000);
    });
}

update_position();

谢谢你能解决我提到的问题。然而,这个解决方案有一个小问题。标记正在“闪烁”。当我处于标记的刷新位置时,即使是完全相同的标记也会在刷新时闪烁(每1000毫秒一次)。你知道怎么绕过它吗?也许更新标记而不是删除并再次绘制?我将感谢任何帮助当然,它看起来像闪烁,因为你先删除它,然后添加它。一旦您的响应返回,您可以检查每个功能,看看它是否存在于地图中,如果不存在,只需添加它即可。在这种情况下,您必须确保功能可以相互区分,例如,每个功能都有一个唯一的id。谢谢您解决了我提到的问题。然而,这个解决方案有一个小问题。标记正在“闪烁”。当我处于标记的刷新位置时,即使是完全相同的标记也会在刷新时闪烁(每1000毫秒一次)。你知道怎么绕过它吗?也许更新标记而不是删除并再次绘制?我将感谢任何帮助当然,它看起来像闪烁,因为你先删除它,然后添加它。一旦您的响应返回,您可以检查每个功能,看看它是否存在于地图中,如果不存在,只需添加它即可。在这种情况下,您必须确保功能可以相互区分,例如,每个功能都有一个唯一的id。