У меня есть 250 полигонов каждый со 100-300 очками. Как проверить, какие полигоны находятся в окне просмотра?Проверьте, есть ли многоугольник в окне просмотра
Логической задачей было бы проверить каждую точку для каждого полигона, если они находятся в окне просмотра, но это кажется чрезвычайно дорогим и глупым. Есть ли у меня какие-либо другие варианты, и если да, то какие варианты?
Мои другие мысли:
- Использование ограничивающего параллелепипеда - недостаток заключается в том, что он имеет только 4 очка, и это может дать ложные негативов
- сделать невидимыми Simplifiled многоугольники с меньшим количеством очков - слишком много дополнительной работы данные, использование ресурсов
После кода перебирает все 250 многоугольник s и 100-300 очков каждого полигона, и проверки в нем отображаются в окне просмотра. Я считаю себя новичком в программировании, но это действительно не очень хорошая идея, особенно если мне нужно, чтобы это происходило каждый раз, когда границы были изменены/карта была перетащена.
google.maps.event.addListener(map, 'bounds_changed', function() {
var viewport = map.getBounds();
var polygons = [array of polygons];
var polygonsCount = polygons.length;
// Polygons
for(a = 0; a < polygonsCount; a++) {
var polygonPoints = polygons[a].getPath(); // Array of points
var inBounds = false;
var pointsCount = polygonPoints.length;
// Points
for(b = 0; b < pointsCount; b++) {
if(viewport.contains(polygonPoints[b])) {
inBounds = true;
return false; // No need to continue loop if we found one
}
}
}
});
Вы можете отслеживать точки полигонов, наиболее близкие к границе границ, но НЕ внутри границ для каждой стороны карты, а затем при изменении границ вам нужно только обновить, какие полигоны находятся внутри карты IFF any из 4 пунктов, которые вы отслеживали, теперь внутри, в отличие от проверки всех 250 * n точек каждый раз, когда обновляется оценка. Сделайте то же самое с ближайшими точками на внутренней стороне, они сжимают границы. –
Вы также можете проверить только 1 точку на каждом полигоне и посмотреть, находится ли она в пределах «n» края границ, где n - это диаметр круга, который ограничивал бы многоугольник, IFF, который верно, затем перебирает все точки, иначе перемещается на следующий полигон –
Эти две тактики должны резко сократить время вычислений, например, 1% от того, что было. Удачи! –