Алгоритм определения точек, которые должны быть видны на карте на основе масштабирования - PullRequest
0 голосов
/ 26 марта 2010

Я создаю приложение, похожее на Google Maps, для курса в Uni (не что-то сложное, оно должно загружать, например, карту города, а не всего мира).Карта может иметь много слоев, включая маркеры (рестораны, больницы и т. Д.). Проблема в том, что когда у вас много точек и вы уменьшаете карту, она выглядит неправильно.На этом уровне масштабирования должны быть видны только некоторые точки (и при максимальном размере карты все точки).Вопрос в том, как определить, какие точки должны быть видны для заданного уровня масштабирования?

Поскольку я реализовал PR Quadtree для ускорения рендеринга, я подумал, что могу определить некоторые маркеры с «высоким приоритетом» (которые всегда видны, определены в редакторе карт) и помещают их в очередь.На каждом шаге маркер удаляется из очереди, и все его соседи, которые находятся на расстоянии не менее D единиц (D зависит от уровней масштабирования), выбираются и вставляются в очередь и т. Д.Есть ли лучший способ, чем алгоритм, который я придумал?

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 26 марта 2010

У меня была похожая проблема, и вы не можете избежать наложения значков независимо от способа пометить некоторые значки как приоритетные.

То, что я сделал (это может быть нелегко применить в вашем случае - в моем случае карта отображалась в настольном приложении с гораздо большим контролем над процессом рендеринга) - сортировка по приоритету и рисование только маркеров. которые не перекрываются - также отображается сообщение типа «XXX перекрывающиеся маркеры удалены». Таким образом, пользователь не перегружается информацией и видит самую важную информацию.

Надеюсь, это поможет.

0 голосов
/ 26 марта 2010

У меня есть некоторый опыт разработки картографического приложения с нуля. Я бы рекомендовал вам разделить весь мир на 16 уровней масштабирования. Уровень масштабирования 0 должен отображать весь мир, а уровень масштабирования 15 - данные улиц.

Как правило, вам придется использовать уровни масштабирования от 0 до 3, чтобы иметь границы стран. И каждый уровень масштабирования должен иметь диапазон масштабирования 1/4 от предыдущего диапазона масштабирования. Вы можете увеличить карту до таблицы (при условии, что вы используете базу данных для хранения данных, связанных с пространством). Определив уровни масштабирования и диапазон уровней масштабирования для сопоставления таблиц, вы сможете лучше контролировать запросы данных. И рекомендуется создать индексирование R-Tree для данных вашей карты.

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

Я могу продолжать идти, но если вам нужны конкретные ответы, я могу также обратиться к ним.

0 голосов
/ 26 марта 2010

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

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