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

StackOverflow https://stackoverflow.com/questions/192976

  •  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]
  • Переходите к шагу # 2, если количество очков > <Код> Max
  • Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top