2009-04-29 3 views
8

В следующем примере маркеры загружаются из JSON.Карты Google - Тысячи маркеров - JSON

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

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

http://gmaps-utility-library.googlecode.com/svn/trunk/markermanager/release/examples/weather_map.html

ответ

0

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

  • построить JSON на ServerSide, в зависимости от zoomlevel (CON: потребности перезагружать после увеличения, про: только небольшие amouts данных необходимо быть загружено)
  • Включите информацию о том, как маркер доступен в данных JSON (про: должен быть загружен, жулик только один данные времени: перебирать данные с JavaScript)
  • Вычислить видимые маркеры в JavaScript (про: очень динамично, CON: тяжелый расчет нагрузки)
8

Там в понятие «ограничивающего прямоугольника» для просмотра карты. Карта api поставляет это вам как две пары координат lat/long - одна для угла SW и одна для угла NE.

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

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

1

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

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

1

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

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

6

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

alt text http://gmaps-samples.googlecode.com/svn/trunk/images/screenshot_clusterereffect.jpg

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

+7

Что-нибудь более чем 2000 маркеров с MarkerClusterer становится слишком медленным для меня (это в Firefox - Chrome и Safari 4 хороши примерно до 8 000). Хотя это зависит от того, насколько плотны маркеры. Я согласен с тем, что было бы лучше импортировать данные одновременно, а не отправлять куски при изменении масштаба. –

+1

У вас есть реальные данные. Продвинутый комментарий. –