Стратегия отложенной загрузки маркеров в карту API Google Maps Javascript - PullRequest
5 голосов
/ 01 июля 2010

Я создаю сайт ASP.NET MVC, на котором я хочу иметь карту API Google Maps Javascript, которая показывает маркеры, загруженные из моего бэкэнда через AJAX.

Поскольку я не хочу, чтобы у клиента возникали проблемы с памятью, я хочу отложенно загрузить маркеры и применить их к Fluster2, чтобы поместить их в кластеры . Я думаю, что лучший способ отложенной загрузки маркеров - это добавить прослушиватель событий к событию idle карты, которое происходит после панорамирования или масштабирования карты.


Вот моя текущая стратегия:

  1. Добавление прослушивателя событий к событию idle.
  2. Когда генерируется событие idle, используйте jQuery для вызова AJAX HTTP POST моего бэкэнда с указанием текущего окна / границ карты.
  3. Бэкэнд возвращает все точки внутри области просмотра.
  4. Точки создаются в маркеры и добавляются в Fluster2, который добавляет их на карту. Старые очки НЕ сбрасываются.
  5. Повторите

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

Хотя я думаю, что не очень хорошая идея как-то сообщить бэкэнду в вызове AJAX, что у меня уже есть некоторые маркеры, было бы неплохо реализовать какую-то хеш-таблицу, которая не допускает дублирования .

Таким образом, когда я загружаю точки, я могу сначала попытаться добавить их в хеш-таблицу: если это удастся, я еще не отобразил их, поэтому я могу добавить их в качестве маркеров; если это не удается, они уже на карте.


Это хорошая стратегия? Если так, как я могу реализовать хеш-таблицу, которая не допускает дублирования?

1 Ответ

3 голосов
/ 24 июля 2010

Я недавно реализовал нечто очень похожее;Хотя я лично решил удалить все маркеры и полностью заполнить карты, мне действительно нравится ваша общая стратегия, и я думаю, что она также может сделать пользовательский интерфейс более плавным, поскольку исчезает краткий миг между удалением всех маркеров и добавлением новых.Так что да, я бы сказал, что это хорошая стратегия.

Холостой ход - интересное событие;Я обнаружил, что onZoom и т. Д. Не работают особенно хорошо и остановились на TileLoaded (или аналогичном).Хорошо работает для меня, но выглядит как хак.

По поводу вашего вопроса с хэш-таблицей - есть два возможных места, где вы можете хранить такую ​​карту.

a) Сервер Если вы можете отслеживатьна той странице, на которую вы отправляете координаты, вы можете хранить точечный Hashtable маркеров в своем состоянии сеанса.Это может помешать вам отправлять ненужные координаты клиенту, но более подвержено ошибкам imo

b) Клиент Это, вероятно, то, что вы хотите пойти в любом случае.Здесь нормальный ассоциативный массив Javascript должен быть вашим другом.

var x = {"some key": "some value"};
document.write ("some key" in x); // True
document.write ("some other key" in x); // False

Если вы не найдете хороший способ отображения lat и lng в одно хешируемое значение, вам может потребоваться сохранить массив массивов:

var markers = {lat1: {lng11: 1, lng12: 1, lng13: 1}, lat2: ...}

и затем отметьте как

...
if (checklat in markers)
   if (checklng in markers[checklat])
       return True
return False

Я просто вижу, что это старый вопрос.Ну, слишком поздно, может быть, это все еще помогает.

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