Saya menggunakan selebaran untuk menggambar jalur yang terkait dengan kendaraan. Setiap jalur kendaraan terdiri dari sebuah layerGroup untuk memungkinkan adanya warna berbeda di jalur tersebut (karena warna bergantung pada suhu). Data diterima dari soket web dalam format berikut (seperti yang ditampilkan oleh konsol debug chromium):
Object {color: "#cc0099", legende: "<someHtmlCode.TheSameForEveryPieceOfData>", data: {lat: 48.77905, lon: -3.44891}, c2a_id: "vehicle_1"}
Masalah saya adalah untuk nilai warna tertentu (nuansa biru berbeda) jalurnya tidak digambar di peta tetapi untuk nilai warna lainnya berfungsi dengan baik. Jika saya mengubah tingkat zoom maka semuanya ditampilkan (setiap warna yang saya gunakan).
Anda dapat melihat bahwa beberapa warna biru telah muncul pada gambar kedua (di jalur sebelumnya), yang seharusnya tenggelam tanpa perlu mengubah tingkat zoom.
Kode saya untuk menambahkan data ke lapisan.
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;
},
[EDIT]
Berikut adalah "contoh minimal, lengkap, dan dapat diverifikasi" (setidaknya saya berharap demikian) yang saya unggah di Github sebuah>. Ini berisi peta di mana ditampilkan beberapa jalur. Saat memuat, jalur yang ditampilkan harus berwarna hijau dan merah muda tetapi jika Anda mengubah tingkat zoom, jalur biru akan muncul. Saya telah mengintegrasikan saran @Jieter dan @snkashis tetapi masalahnya masih ada.
_leaflet_id
s. Itu bukan sesuatu yang seharusnya Anda lakukan, ini mungkin berhasil, tetapi mungkin juga menimbulkan beberapa kesalahan yang sulit dilacak. Apakah Anda mungkin mengalami tabrakan identitas? - person Jieter   schedule 21.06.2016multi_polyline
saya buat untuk kendaraan jika belum ada). Ini dilakukan untuk setiap lapisan kendaraan tetapi tidak pada tingkat sublapisan (yang saya tambahkan kemulti_polyline
). Saya rasa saya tidak mengalami tabrakan id, saya tidak mengalami kesalahan tentang hal seperti itu dan tidak ada gunanya ditambahkan ke jalur yang salah. Harus saya akui, saya tidak tahu bagaimana cara memastikannya. Namun saya akan mencoba mengubah cara saya menangani berbagai lapisan setiap kendaraan, tanpa menugaskan_leaflet_id
- person Sam_H_Cadman   schedule 21.06.2016_leaflet_id
s sebagai kuncinya. Jika Anda memiliki lapisan yang hilang, saya curiga ada sesuatu yang tertimpa karena idnya tidak lagi unik. - person Jieter   schedule 21.06.2016_leaflet_i
d tidak lagi diedit secara langsung. Saya menggunakan beberapa array asosiatif untuk dengan mudah menemukan kembalilayerGroup
yang terkait dengan kendaraan saya. Sayangnya tidak ada yang berubah: sub lapisan 'biru' masih tidak ditampilkan ketika sebuah titik ditambahkan dan hanya muncul ketika tingkat zoom diubah. Hal yang mengganggu adalah masalah hanya terjadi ketika menambahkan titik ke segmen 'biru' pada jalur saya. - person Sam_H_Cadman   schedule 21.06.2016