Şu anda müşteri verilerimizin interaktif bir haritasını oluşturmak için Javascript kullanarak ilk gerçek yolculuğum üzerinde çalışıyorum.Leaflet.js ve JSON verileri: optimizasyon ve performans
Şimdiye kadar temel çalışma prensiplerine sahibim, ancak 500 poi'nin üzerinde işaretleyicilerle veya daire işaretçileriyle 10.000'i aşmaya başladığımda performans düşmeye başlar. Zaten var ya da belki json verileri için uygun bir DB gibi bir mongo taşımak veya Node Js ile iş sunucu tarafında yapmak için belki de olabilir miyim?
Herhangi bir tavsiye çok takdir :)
var apiKey = 'BC9A493B41014CAABB98F0471D759707',
styleID = '108219';
// styleID = '997';
// var map = L.map('map').setView([54.550, -4.433], 7);
var southWest = new L.LatLng(61.029031, 4.746094),
northEast = new L.LatLng(48.786962 ,-13.183594),
bounds = new L.LatLngBounds(southWest, northEast);
var mapcenter = new L.LatLng(53.457393,-2.900391);
var map = new L.Map('map',
{
center: mapcenter,
zoom: 7,
// maxBounds: bounds,
zoomControl: false
});
var cloudmadeUrl = generateTileURL(apiKey, styleID),
attribution = 'Map data © OpenStreetMap contributors.',
tileLayer = new L.TileLayer(
cloudmadeUrl,
{
maxZoom: 18,
attribution: attribution,
});
tileLayer.addTo(map);
var zoomControl = new L.Control.Zoom({ position: 'topleft'});
zoomControl.addTo(map);
var scaleControl = new L.Control.Scale({ position: 'bottomleft' });
scaleControl.addTo(map);
geojsonLayer = L.geoJson(geojson, {
pointToLayer: function(feature, latlng) {
return new L.CircleMarker(latlng, {fillColor: feature.properties.MarkerColour, fillOpacity: 0.5, stroke: false, radius: 6});
// return new L.Marker(latlng, {icon: L.AwesomeMarkers.icon({icon: feature.properties.MarkerIcon, color: feature.properties.MarkerColour, iconColor: 'white'}) });
},
onEachFeature: function (feature, layer) {
layer.bindPopup('<strong><b>Customer Data</b></strong><br />' + '<b>Result : </b>' + feature.properties.Result + '<br />' + '<b>Postcode : </b>' + feature.properties.Postcode + '<br />');
}
});
console.log('starting: ' + window.performance.now());
map.addLayer(geojsonLayer);
console.log('ending: ' + window.performance.now());
function generateTileURL(apiKey, styleID) {
return 'http://{s}.tile.cloudmade.com/' + apiKey + '/' + styleID + '/256/{z}/{x}/{y}.png';
}
ve bazı örnek veriler:
render başa yardımcı Leaflet plugins bir çift vardır{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-0.213467,
51.494815
]
},
"properties": {
"DateTime": "1372719435.39",
"Result": "Cable Serviceable",
"MarkerIcon": "ok-sign",
"MarkerColour": "green",
"Postcode": "W14 8UD"
}
},
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-0.389445,
51.512121
]
},
"properties": {
"DateTime": "1372719402.083",
"Result": "Refer for National Serviceability",
"MarkerIcon": "minus-sign",
"MarkerColour": "red",
"Postcode": "UB1 1NJ",
}
},
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-0.411291,
51.508012
]
},
"properties": {
"DateTime": "1372719375.725",
"Result": "Cable Serviceable",
"MarkerIcon": "ok-sign",
"MarkerColour": "green",
"Postcode": "UB3 3JJ"
}
},
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-2.11054,
53.500752
]
},
"properties": {
"DateTime": "1372719299.088",
"Result": "Cable Serviceable",
"MarkerIcon": "ok-sign",
"MarkerColour": "green",
"Postcode": "OL7 9LR",
}
}
Sizin darboğaz bu verileri göstermek için veritabanı değil . Bir bakışta veya 10.000 daire işaretçisinde 500 puan göstermek için gerçek bir düzine mi. Veya sorunuz 10000 çember işaretçileri içeren tanımlı bir bağ içinde veritabanındaki arama anlamına mı geliyor? – Bernhard
Güncel demo sürümleri 500 - 2500 gibi düşük değerlerde çalışıyor ... son versiyonun bir seferde 10.000+ ve daha fazla veri noktası göstermesi gerekecek ... Bunun nedeni bununla ilgili olduğuna inanıyorum tarayıcı tarafında görüntüyü gerçek zamanlı olarak yapmak? Sadece farklı bir yol olup olmadığını merak ediyorum gerçekten sorun çözme sorunu olabilir – Guitaraholic