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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Удачи:)

Ответ 5

Мне нужно решение для вашего вопроса №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]
  • Перейдите к шагу №2, если количество точек > Max