Я использую листовку, чтобы нарисовать путь, связанный с транспортными средствами. Каждый путь транспортного средства состоит из LayerGroup, что позволяет иметь различный цвет пути (поскольку цвет зависит от температуры). Данные получены из веб-сокета в следующем формате (как отображается в консоли отладки хрома):
Object {color: "#cc0099", legende: "<someHtmlCode.TheSameForEveryPieceOfData>", data: {lat: 48.77905, lon: -3.44891}, c2a_id: "vehicle_1"}
Моя проблема в том, что для определенных значений цвета (разные оттенки синего) путь не рисуется на карте, но для других он работает правильно. В случае, если я изменяю уровень масштабирования, отображается все (каждый цвет, который я использую).
Вы можете видеть, что на втором изображении появилось немного синего (по сравнению с предыдущими путями), которое должно было быть заглушено без необходимости изменения уровня масштабирования.
Мой код для добавления данных в слой.
var idAllLayers;
if (_data != null && _data['data'] != null) {
current_lon = _data['data']['lon'];
current_lat = _data['data']['lat'];
// checking if there is already a layer associated to the vehicle _id_
if (!(this.layer_group_real_time.hasLayer(id))) {
var multi_polyline = L.layerGroup([]); //create a layer for this vehicle
multi_polyline._leaflet_id = id;
//add a sublayer to this one (for a sub path to have different colors)
multi_polyline.addLayer(this.newLayer(id, _data['color']));
this.layer_group_real_time.addLayer(multi_polyline);
}
// get the differents layers of the layerGroup for the vehicle _id_
idAllLayers = this.layer_group_real_time.getLayer(id).getLayers();
currentLayerLatLng = idAllLayers[idAllLayers.length-1].getLatLngs();
if (current_lat != null && current_lon != null) {
// if previous elements have been stored
if (this.previousDataPoints[id] != null && this.previousColor[id] != null) {
oldDataPoint = this.previousDataPoints[id]['data'];
delta = this.measure(current_lat, current_lon, oldDataPoint['lat'], oldDataPoint['lon']);
if (delta > MAX_DIST || _data['color'] != this.previousColor[id]) {
if (delta < MAX_DIST){ // case where color has changed but we still need to add the point to the previous subpath
currentLayerLatLng.push(L.latLng(current_lat, current_lon));
}
this.layer_group_real_time.getLayer(id).addLayer(this.newLayer(id, _data['color']));
idAllLayers = this.layer_group_real_time.getLayer(id).getLayers();
currentLayerLatLng = idAllLayers[idAllLayers.length - 1].getLatLngs();
}
}
currentLayerLatLng.push(L.latLng(current_lat, current_lon));
idAllLayers[idAllLayers.length - 1].setLatLngs(currentLayerLatLng); // setting up the new coords
this.previousDataPoints[id] = _data;
this.previousColor[id] = _data['color'];
}
}
newLayer: function (_id, _color) {
var nl = L.polyline([],
{
color: _color,
opacity: 0.7,
stroke: true,
weight: 6,
vehicle_id: _id
});
nl.on('click', this.traceOnClick);
return nl;
},
[РЕДАКТИРОВАТЬ]
Вот «минимальный, полный и проверяемый пример» (по крайней мере, я надеюсь, что это так), который я загрузил на Github а>. Он содержит карту, где отображаются некоторые пути. При загрузке отображаемый путь должен быть зеленым и розовым, но если вы измените уровень масштабирования, должен появиться синий путь. Я интегрировал предложения @Jieter и @snkashis, но проблема все еще здесь.
_leaflet_id
s. Это не то, что вы должны делать, это может сработать, но также может привести к некоторым трудным для отслеживания ошибкам. Возможно, у вас есть id-коллизии? - person Jieter   schedule 21.06.2016multi_polyline
, которую я создаю для транспортного средства, если оно еще не существует). Это делается для каждого слоя транспортных средств, но не на уровне подслоя (те, которые я добавляю вmulti_polyline
). Я не думаю, что у меня есть id-коллизии, у меня нет ошибки о чем-то подобном и не добавляется балл за неправильный путь. Должен признаться, я понятия не имею, как быть в этом уверенным. Однако я попытаюсь изменить способ обработки различных слоев каждого транспортного средства, не назначая_leaflet_id
- person Sam_H_Cadman   schedule 21.06.2016_leaflet_id
. Если у вас есть исчезающие слои, я подозреваю, что что-то перезаписывается, потому что идентификатор больше не уникален. - person Jieter   schedule 21.06.2016_leaflet_i
d больше не редактируется напрямую. Я использую некоторый ассоциативный массив, чтобы легко найтиlayerGroup
, связанный с моим автомобилем. К сожалению, ничего не изменилось: «синие» подслои по-прежнему не отображаются при добавлении точки и появляются только при изменении масштаба. Беспокоит то, что проблемы возникают только при добавлении точки в «синий» сегмент моего пути. - person Sam_H_Cadman   schedule 21.06.2016