Добавление многих маркеров убивает мои карты Google - как мне это сделать? - PullRequest
3 голосов
/ 11 мая 2009

Я снова застрял здесь. У меня есть база данных с более чем 120 000 координат, которые мне нужно отображать на картах Google, встроенных в мое приложение. Дело в том, что, и я обнаружил, что сложный способ, просто перебирая все координаты и создавая отдельный маркер для каждого и добавляя его с помощью функции addOverlay, убивает браузер. Так что это определенно должен быть неправильный способ сделать это - я читал немного о кластеризации или группировании уровней Zoom - я понимаю, что нет смысла рендерить все маркеры, особенно если большинство из них не будет видно не отрендеренные части карты, за исключением того, что я понятия не имею, как заставить это работать.

Как мне это исправить здесь. Пожалуйста, ребята, мне нужна помощь здесь: (

Ответы [ 8 ]

8 голосов
/ 11 мая 2009

Здесь хорошее сравнение различных техник http://www.svennerberg.com/2009/01/handling-large-amounts-of-markers-in-google-maps/

Однако, учитывая ваш объем маркеров, вы определенно хотите использовать технику, которая визуализирует только те маркеры, которые должны быть видны в текущем представлении (при условии, что число является скромным - если нет, в ссылке есть методы для выполнения разумных задач) 1004 *

3 голосов
/ 11 мая 2009

Если у вас действительно более 120 000 элементов, ни один из клиентских кластеров или менеджеров не будет работать. Вам нужно будет обрабатывать маркеры на стороне сервера. Здесь есть хорошее обсуждение здесь с некоторыми опциями, которые могут вам помочь.

Обновление: Я уже писал об этом в SO, но в этом руководстве описывается метод кластеризации на стороне сервера в PHP. Он предназначен для использования с API статических карт, но я построил его так, что он будет возвращать кластерные маркеры всякий раз, когда вид изменяется. Это работает довольно хорошо, хотя существует задержка в переносе маркеров при каждом изменении вида. К сожалению, я не пробовал его с более чем 3000 маркерами - я не знаю, насколько хорошо он справился бы с 120 000. Удачи!

2 голосов
/ 11 мая 2009

Я специально не работал с картами Google, но много месяцев назад я участвовал в проекте, который управлял мобильной рабочей силой для большого оператора связи.

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

При минимальном увеличении было бы множество указателей, делающих карту бесполезной. Мы приняли командное решение ограничить указатели ориентиров меньшим числом (400). Для этого карта была разделена на матрицу 20x20 независимо от уровня масштабирования, что дало нам 400 матричных элементов.

Затем, если ориентир разделяет тот же элемент матрицы, что и другой, приложение объединяет их и генерирует один указатель ориентира с описательным текстом, содержащим текст всех ориентиров в этом элементе матрицы.

Таким образом, никогда не было более 400 ориентиров. По мере приближения миньона указатели ориентиров были восстановлены, и ориентиры могли заканчиваться в разных матричных элементах - в этом случае они больше не объединялись с другими ориентирами.

Аналогичным образом, уменьшение масштаба иногда объединяет два или более ориентира в один указатель ориентира.

Это звучит как то, что вы пытаетесь достичь с помощью "кластеризации или масштабирования по уровням", хотя, как я уже сказал, у меня мало опыта работы с самими Google Maps, поэтому я не уверен, что это возможно. Но, учитывая репутацию Google, я подозреваю, что это так.

1 голос
/ 08 декабря 2010

Это некластерное решение, если вы хотите очень быстро отображать сотни или даже тысячи маркеров. Вы можете использовать комбинацию OverlayView и DocumentFragment.

http://nickjohnson.com/b/google-maps-v3-how-to-quickly-add-many-markers

1 голос
/ 11 мая 2009

Я предлагаю вам использовать класс менеджера маркеров , такой как этот , вместе с существующим кодом. Класс менеджера маркеров позволяет управлять тысячами маркеров и оптимизирует использование памяти. Существует множество менеджеров маркеров (не только один), и я немного советую вам Google.

0 голосов
/ 22 декабря 2012

Существует довольно простое решение - использовать HTML5 canvas, хотя это звучит странно, это самый быстрый способ загрузить до 10 000 маркеров, а также метки, которые, наверняка, ни один браузер не сможет обработать, если это обычный маркер. Не обычные маркеры, но светлые маркеры.

0 голосов
/ 25 августа 2009

Попробуйте это:

http://googlegeodevelopers.blogspot.com/2009/04/markerclusterer-solution-to-too-many.html

Это старый вопрос, на который уже получено много ответов, но Stackoverflow - это скорее справочная информация, надеюсь, это поможет всем, кто ищет ту же проблему.

0 голосов
/ 23 мая 2009

Если только для этого есть что-то более мощное, чем JS ...

Хорошо, достаточно сарказма :).

Использовали ли вы Flash Maps API? Кевин Макдональд успешно использовал его для кластеризации не 120 000 маркеров, а 1 000 000 маркеров. Проверьте карту маркера Million : http://www.spatialdatabox.com/million-marker-map/million-marker-map.html

Реагирование карты в этом решении практически не зависит. Если вы заинтересованы, вы можете связаться с ним здесь: http://www.spatialdatabox.com/sdb-contact-sales.html

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