Google Maps - тысячи маркеров - JSON - PullRequest
8 голосов
/ 29 апреля 2009

В следующем примере маркеры загружаются из JSON.

Если есть 20 000 маркеров, JSON будет довольно большим.

Есть ли способ отправить разные файлы JSON в соответствии с уровнем масштабирования вместо отправки одного огромного массива?

http://gmaps -utility-library.googlecode.com / SVN / багажник / markermanager / выпуск / примеры / weather_map.html

Ответы [ 5 ]

8 голосов
/ 29 апреля 2009

Для представления карты существует понятие "ограничивающего прямоугольника". API карты предоставляет вам это как две пары координат широта / длинна - одна для угла SW, а другая для угла NE.

Таким образом, если у вас есть пользовательская служба данных, которая возвращает точки JSON, вам нужно будет принять эти координаты в качестве входных данных и соответствующим образом скорректировать возвращаемый набор данных (скорее всего, как предложение WHERE в вашем операторе SELECT).

У меня нет деталей для запоминания этого ограничительного прямоугольника, но это то, для чего API документы предназначены.

6 голосов
/ 30 апреля 2009

Существует новая библиотека с именем MarketClustered , которая поможет вам

alt text
(источник: googlecode.com )

Даже если данные слишком велики, я думаю, что лучше будет подать на карту все данные, и пусть это сделает свое дело.

1 голос
/ 30 апреля 2009

При изменении масштаба отправьте новый уровень масштабирования в службу JSON и верните маркеры, которые должны быть видны на этом уровне. Используйте addMarkers () , чтобы добавить результаты в MarkerManager и сделать их видимыми только при текущем уровне масштабирования.

Другие ответы здесь предлагали возвращать только маркеры в текущем представлении, но вы также можете просто вернуть все маркеры на этом уровне масштабирования. Это зависит от того, сколько вы знаете о том, какие маркеры вы хотите показывать на каждом уровне.

1 голос
/ 29 апреля 2009

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

Поэтому вместо вызова AJAX в базу данных мы отправили координаты ограничительного прямоугольника (широта, долгота) области карты, а затем вернули только те точки, которые мы видим. Из-за характера приложения пользовательская кнопка для «извлечения данных» была вполне приемлемой, но, очевидно, существует множество других вариантов, которые можно воспроизвести на теме - как только вы передадите ограничивающие координаты на стороне сервера, вы сможете решить, что именно сделать там - например, вернуть только подмножество, если уровень масштабирования слишком высок. Вы должны быть в состоянии поймать событие рисования карты и действовать автоматически.

0 голосов
/ 29 апреля 2009

Возможные способы решения этой проблемы:

  • Построить JSON на стороне сервера, в зависимости от уровня масштабирования (con: требуется перезагрузка после масштабирования, pro: требуется загрузка только небольших объемов данных)
  • Включите информацию о том, как маркер доступен в данных JSON (pro: требуется загрузить только один раз, констатируйте данные с JavaScript)
  • Рассчитать видимые маркеры в JavaScript (pro: очень динамичный, con: большая вычислительная нагрузка)
...