Обновление листовки на месте 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);
}
});
}