In-Place-Update-Broschüre GeoJSON-Funktion

Ich hatte gehofft, dass GeoJSON.addData () die neu erstellte Unterebene des GeoJSON-Objekts zurückgibt, aber dies ist nicht der Fall. Warum brauche ich so etwas?

(verwendet derzeit Leaflet 1.0Beta2)

Ich verwende Leaflet GeoJson, um Live-Daten in einem GeoJSON (Punkt, Linie, Polygon) anzuzeigen. Es ist eine CRUD-Schnittstelle (Erstellen, Aktualisieren und Löschen). Ich erhalte WebSocket-Nachrichten mit GeoJSON-Daten, jede mit einer GUID.

Ich bin der Fall einesERSTELLE Ich füge der entsprechenden Ebene einfach GeoJSon.AddData () hinzu.

Aber für dasAKTUALISIERE undLÖSCHE Ich möchte ein Handle für den Layer, der zum GeoJSON hinzugefügt wurde, damit ich seine Position oder die Geometrie aktualisieren kann. addData gibt mir diesen Punkt nicht. Und es ist wirklich schwer, es von onEachFeature () oder von pointToLayer () zu bekommen

erzeit habe ich einen Weg, der aber hässlich funktioniert. Ich muss nur die gesamte Ebene mit GeoJSon.eachLayer (fn) durchsuchen, wenn eine Aktualisierung oder Löschung auftritt. Es scheint ein bisschen teuer.

{Auch wenn Leaflet nicht wirklich für diese Live-R / T-Anzeige von Daten entwickelt wurde, funktioniert es, und es ist traurig, wenn Sie es nicht zum Betrachten vieler Sensordaten (IoT) verwenden können, wie wir es tun.

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);
        }
    });
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage