У меня есть 5000 + точек LatLng, и для каждого из них я хотел бы узнать, с какой функцией (областью) они принадлежат. Характеристики идут от a kmz layer by Philippe Ivaldi, преобразованных в GeoJSON.Лучший способ разделить много точек на несколько функций?
В настоящее время я делаю это с turfjs в двойном цикле for
. Как и ожидалось, расчет замораживает браузер в течение десяти минут, что не очень удобно.
Вот мой код:
function countCeaByLayer(geoJsonLayer){
jQuery.getJSON('http://localhost/server/retrieveData.php', function(data){
var turfPoints = [];
for(var i = 0; i < data.length; i++){
turfPoints.push(turf.point([data[i].longitudeWGS84, data[i].latitudeWGS84]));
}
var features = geoJsonLayer.toGeoJSON().features;
for(var i = 0; i < features.length; i++){
var turfPointsNew = [];
for(var j = 0; j < turfPoints.length; j++){
var isInside = turf.inside(turfPoints[j], features[i]);
if(!isInside) turfPointsNew.push(turfPoints[j]);
}
turfPoints = turfPointsNew;
}
console.log("done");
});
}
Что я могу сделать, чтобы избежать замораживания браузера?
- Сделать его асинхронным?
- Выполняют ли расчеты с
node
иturfjs
на сервере? - Или развернуть
leafletjs
на сервере сnode
иleaflet-headless
?
... или я должен только справиться с этим?
Спасибо!
* арахис * действительно.Я просто понял, что мой поставщик геокодирования дает мне LatLngs в 'string', который, по-видимому, замедляет турфьи значительно без предупреждения! Приведение их к 'float' делает расчет за несколько секунд. ** head slam ** Тем не менее, я вернусь к вам, как только я попробую ваш алгоритм, который действительно должен обеспечить хороший прирост скорости. Благодаря! –
Это быстрее. Отличная работа. –