Ответ 1
Для вашего второго вопроса: вам нужен Алгоритм обобщения Дугласа-Пиккера
У меня аналогичная проблема с этим сообщением. Мне нужно отобразить до 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]
Max