Как упростить (уменьшить количество точек) в KML?

У меня аналогичная проблема с этот пост. Мне нужно отобразить до 1000 полигонов на встроенной карте Google. Полигоны находятся в базе данных SQL, и я могу отображать каждый из них как один файл KML на лету, используя пользовательский HttpHandler (в ASP.NET), вот такhttp://alpha.foresttransparency.org/concession.1.kml .

даже на моей (очень быстрой) машине разработки требуется некоторое время, чтобы загрузить даже пару десятков форм. Итак, два вопроса, действительно:

  1. Что было бы хорошей стратегией для рендеринга их в качестве маркеров вместо наложений, как только я выйду за определенный уровень масштабирования?

  2. есть ли общедоступный алгоритм для упрощения полигона (уменьшения количества точек), чтобы я не показывал больше точек, чем имеет смысл на определенном уровне масштабирования?

5 ответов


для вашего второго вопроса: вам нужно Алгоритм Обобщения Дугласа-Пекера


для вашего первого вопроса, не могли бы вы рассчитать площадь конкретного многоугольника и связать каждый уровень масштабирования с определенной минимальной площадью, так как вы увеличиваете или уменьшаете масштаб многоугольника, и маркеры появляются в зависимости от уровня масштабирования.

для второго вопроса я бы использовал предложение Марка Бесси.


Я не знаю много AOBUT KML, но я думаю, что обычное решение вопроса № 2 включает итерацию по точкам и удаление любых сегментов линии под определенным размером. Это вызовет некоторые "неудачные" эффекты в некоторых случаях, но это относительно быстро и легко сделать.


Я бы рекомендовал 2 вещи: - Рассчитать и объединить полигоны, которые касаются. Это требует много обработки и жесткой математики, но я сделал это, чтобы знать, что это возможно. - Создайте свой собственный оверлей вместо использования KML в формате PNG, в то время как вы объединяете их в предыдущем предложении. Вам придется создать много PNG, но он быстро пылает на клиенте.

удачи :)


мне нужно было решение вашего вопроса #2 немного назад, и после просмотра нескольких доступных алгоритмов упрощения строк я создал свой собственный.

процесс прост и, кажется, работает хорошо, хотя он может быть немного медленным, если вы не реализуете его правильно:

P[0..n] - это массив точек Пусть T[n] определяется как треугольник, образованный точками P[n-1], P[n], P[n+1] Max is количество точек, на которое вы пытаетесь уменьшить эту линию.

  1. вычислить площадь каждого возможного треугольника T[1..n-1] в наборе.
  2. выберите треугольник T[i] с наименьшей площадью
  3. удалить точки P[i] существенно сгладить треугольник
  4. пересчитать площадь затронутых треугольников T[n-1], T[n+1]
  5. перейти к Шагу #2, если количество точек > Max