Обновление листовки на месте GeoJSON

Я надеялся, что GeoJSON.addData () вернет вновь созданный подслой объекта GeoJSON, но это не так. Зачем мне что-то подобное?

(в настоящее время используется Leaflet 1.0Beta2)

Я использую Leaflet GeoJson, чтобы показать живые данные в GeoJSON (точка, линия, многоугольник). Это интерфейс CRUD (создание, обновление и удаление). Я получаю сообщения WebSocket с данными GeoJSON, каждое с GUID.

Я в случаеСОЗДАЙТЕ Я просто делаю GeoJSon.AddData () для соответствующего слоя.

Но дляОБНОВИТЬ а такжеУДАЛЯТЬ Мне нужен дескриптор для слоя, который был добавлен в GeoJSON, чтобы я мог обновить его местоположение или обновить геометрию. addData не дает мне эту ручку. И это действительно трудно получить из onEachFeature () или из pointToLayer ()

В настоящее время у меня есть способ, который работает, но безобразно. Мне нужно сделать поиск по всему слою с GeoJSon.eachLayer (fn) всякий раз, когда происходит обновление или удаление. Кажется, немного дороже.

{даже если Leaflet действительно не спроектирован для этого реального отображения данных в реальном времени, он работает, и это грустно, если вы не можете использовать его для просмотра большого количества данных датчиков, IoT), как мы делаем.

this.delete = function (layerName, feature) {
    if (!(layerName in self.myLayers)) {
        alert("live.display: Missing Layer: " + layerName);
        return;
    }
    var layerInfo = Live.myLayers[layerName];
    var base = layerInfo.layer;
    var id = feature.properties.objectID;
    this.find(layerName, id, function (layer) {
        this.removeLayer(layer);
        Tools.debug(16, "live.delete:", "killed object: " + id);
    });
}
this.find = function (layerName, id, action) {
    var base = Live.myLayers[layerName].layer;
    base.eachLayer(function (feature) {
        if (!("objectID" in feature.feature.properties)) { return; }
        var objectID = feature.feature.properties.objectID;
        if (objectID == id) {
            action.call(base, feature);
        }
    });
}

Ответы на вопрос(2)

Ваш ответ на вопрос