Как упростить (уменьшить количество баллов) в KML?
-
08-07-2019 - |
Вопрос
У меня похожая проблема с этим постом . Мне нужно отобразить до 1000 полигонов на встроенной карте Google. Полигоны находятся в базе данных SQL, и я могу визуализировать каждый из них в виде отдельного файла KML на лету, используя собственный HttpHandler (в ASP.NET), например http://alpha.foresttransparency.org/concession.1.kml . Р>
Даже на моей (очень быстрой) машине разработки требуется время, чтобы загрузить даже пару десятков фигур. Итак, два вопроса, действительно:
<Ол>Что было бы хорошей стратегией для их рендеринга в виде маркеров, а не наложений, когда я превысил определенный уровень масштабирования?
Существует ли общедоступный алгоритм для упрощения многоугольника (уменьшения количества точек), чтобы я не отображал больше точек, чем имеет смысл при определенном уровне масштабирования?
Решение
Для вашего второго вопроса: вам нужен алгоритм обобщения Дугласа-Пекера
Другие советы
По первому вопросу вы могли бы рассчитать площадь определенного многоугольника и связать каждый уровень масштабирования с определенной минимальной областью, чтобы при увеличении или уменьшении масштаба многоугольник исчезал и появлялись маркеры в зависимости от уровня масштабирования.
Для второго вопроса я бы воспользовался предложением Марка Бесси.
Я не очень хорошо знаю KML, но я думаю, что обычное решение вопроса № 2 включает в себя итерации по точкам и удаление любых отрезков линии под определенным размером. Это приведет к некоторому «неудачному» эффекты в некоторых случаях, но это относительно быстро и легко сделать.
Я бы порекомендовал 2 вещи: - Рассчитать и объединить полигоны, которые касаются. Это включает в себя много обработки и сложную математику, но я сделал это, так что я знаю, что это возможно. - Создайте свой собственный оверлей вместо использования KML в формате PNG, комбинируя их в предыдущем предложении. Вам нужно будет создать МНОГО PNG, но он быстро работает на клиенте. Р>
Удачи:)
Некоторое время назад мне понадобилось решение вашего вопроса №2, и, посмотрев на несколько доступных алгоритмов упрощения строк, я создал свой собственный.
Процесс прост и, кажется, работает хорошо, хотя он может быть немного медленным, если вы не реализуете его правильно:
P [0..n]
- ваш массив точек
Пусть T [n]
определен как треугольник, образованный точками P [n-1], P [n], P [n + 1 ] код>
Max
- это количество пунктов, до которых вы пытаетесь уменьшить эту строку. Р>
<Ол>
T [1..n-1]
в наборе. T [i]
с наименьшей площадью P [i]
, чтобы по существу сгладить треугольник T [n-1], T [n + 1]