Javascript 防止在刷新地图时从图层中删除标记

Javascript 防止在刷新地图时从图层中删除标记,javascript,ajax,laravel,leaflet,layer,Javascript,Ajax,Laravel,Leaflet,Layer,我是乞丐,所以我有一个复杂的项目。 我有一个每10秒刷新一次的地图,还有一个按钮,为每个id生成坐标、时间和事件标记。 当我第一次按下该按钮时,为奇数id生成新数据,当我第二次按下该按钮时,为偶数id生成新数据 阿贾克斯: 控制器: public function update(Request $request) { $value =$request->id; $number=Device_new::get()->count(); //while i &

我是乞丐,所以我有一个复杂的项目。 我有一个每10秒刷新一次的地图,还有一个按钮,为每个id生成坐标、时间和事件标记。 当我第一次按下该按钮时,为奇数id生成新数据,当我第二次按下该按钮时,为偶数id生成新数据

阿贾克斯:

控制器:

public function update(Request $request)
{
    $value =$request->id;

    $number=Device_new::get()->count();


    //while i < broj zapisa u tabeli $device_new = Device_new::where('deviceId',1)->update(['x' => $x, 'y' => $y, 'datetime' => $datetime]); prvi put za neparne drugi put za poarne itd
    if($value%2!=0)
    $i=1;
    else
    $i=2; 
    for ($i; $i<=$broj; $i+=2){
        $x = rand(44450000, 45000000) / 1000000;
        $y = rand(16400000, 17900000) / 1000000;
        $event=rand(1,4);
        $datetime = new Carbon('now','Europe/Belgrade');


        $device_new = Device_new::where('deviceId',$i)->update(['x' => $x, 'y' => $y, 'datetime' => $datetime, 'event' => $event]);
    }
    return $number;
}
正如您在callAjax中看到的,有命令markerLayer.clearLayers;移除带有标记的图层,并在循环结束时再次创建图层。这对我来说是个问题,因为它会刷新地图并再次写入新的和旧的标记


我是否可以阻止重写未更改的标记?

您正在将每个新层添加到标记层和地图中。从markerLayer中清除图层不会从地图中清除图层。建议您不要将它们添加到地图中,因此请更改

marker.addTo(markerLayer).addTo(map);


已将markerLayer添加到地图中一次。

在loadMap中,我有“markerLayer=L.featureGroup.addTomap;”,但我不认为这是解决我问题的方法。是否可以只重写更新的标记?
public function update(Request $request)
{
    $value =$request->id;

    $number=Device_new::get()->count();


    //while i < broj zapisa u tabeli $device_new = Device_new::where('deviceId',1)->update(['x' => $x, 'y' => $y, 'datetime' => $datetime]); prvi put za neparne drugi put za poarne itd
    if($value%2!=0)
    $i=1;
    else
    $i=2; 
    for ($i; $i<=$broj; $i+=2){
        $x = rand(44450000, 45000000) / 1000000;
        $y = rand(16400000, 17900000) / 1000000;
        $event=rand(1,4);
        $datetime = new Carbon('now','Europe/Belgrade');


        $device_new = Device_new::where('deviceId',$i)->update(['x' => $x, 'y' => $y, 'datetime' => $datetime, 'event' => $event]);
    }
    return $number;
}
marker.addTo(markerLayer).addTo(map);
marker.addTo(markerLayer);