Я создал приложение, в котором вы можете выбрать таблицу в базе данных, а затем отобразить данные на карте Leaflet. Данные имеют соответствующую легенду.
Я хочу, чтобы мое приложение принимало различные наборы данных и отображало их на карте с минимальными программными изменениями. Это новое требование, и я изменил свой предыдущий код, но он не оптимален.
Код, который у меня сейчас есть, перебирает набор данных, чтобы назначить цвет определенному значению, но он также перебирает набор данных, чтобы извлечь уникальные значения, чтобы я мог использовать их в легенде.
Это приводит к тому, что мое приложение имеет цикл в цикле, создавая ненужные вычисления. Это не проблема с небольшим набором данных, 19 записей x19 выполнимо, но 8062x8062...
Проблема заключается в цикле for в функции getColor()
. Я пытался переместить цикл for в новую функцию (getColor v2), но всегда терял arrayMetKetens
. Я думаю, что getColor()
запускается до того, как getArray()
сможет вернуть свое значение, но поскольку многие функции начинают работать, как только я выбираю таблицу, я не могу заставить getArray()
вернуть ее быстрее. Или есть?
Код для добавления цвета маркерам/многоугольникам:
window["mapDataLayer"] = L.geoJson(geojson_dataTable, {
pointToLayer: function (feature, latlng) {
var markerStyle = {
fillColor: getColor(feature.properties.Fastfoodketen),
color: "#696969",
fillOpacity: 0.6,
opacity: 0.9,
weight: 1,
radius: 8
};
return L.circleMarker(latlng, markerStyle);
},
style: function (feature){
if(feature.geometry.type === 'MultiPolygon'){
var polygonStyle = {
fillColor: getColor(feature.properties.Naam),
color: "grey",
weight: 5,
opacity: 1
};
}
else{
return null;
}
return polygonStyle;
}
}).addTo(map);
функция getColor:
function getColor(keten) {
checkTable();
var ketens = [];
for(i=0;i<(geojson_dataTable.features).length;i++){
ketens = ketens.concat(Object.byString(geojson_dataTable, 'features['+i+'].properties.'+featureVoorSorteer))
}
console.log(ketens);
arrayMetKetens = (jQuery.unique( ketens ));
var i = arrayMetKetens.indexOf(keten);
if (i !== -1) {
return arrayKleur[ i ];
}
else {
return '#999999';
}
}
getColor v2:
function getArray(){
var ketens = [];
for(i=0;i<(geojson_dataTable.features).length;i++){
ketens = ketens.concat(Object.byString(geojson_dataTable, 'features['+i+'].properties.'+featureVoorSorteer))
console.log(ketens);
}
arrayMetKetens = (jQuery.unique( ketens ));
return arrayMetKetens.
}
function getColor(keten) {
checkTable();
getArray();
yMetKetens.indexOf(keten);
if (i !== -1) {
return arrayKleur[ i ];
}
else {
return '#999999';
}
console.log("hij doet het")
}
console.log()
в разных местах вашего кода, чтобы проверить, соответствует ли порядок выполнения ожидаемому. - person Jieter   schedule 29.06.2016