Как упростить (уменьшить количество баллов) в KML? - PullRequest
11 голосов
/ 11 октября 2008

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

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

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

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

Ответы [ 5 ]

13 голосов
/ 11 октября 2008

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

2 голосов
/ 11 октября 2008

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

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

0 голосов
/ 23 октября 2008

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

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

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

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

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

Удачи:)

0 голосов
/ 11 октября 2008

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

...