Google Maps Overlays - PullRequest
       34

Google Maps Overlays

7 голосов
/ 06 октября 2008

Я пытаюсь найти что-то, предпочтительно F / OSS, которое может генерировать наложение Google Maps из данных KML и / или KMZ.

У нас есть сайт для проведения мероприятий, над которым мы работаем, и который должен был вместить ~ 16 000 маркеров мест в прошлом году, и, скорее всего, в этом году его снова будет как минимум. В прошлом году компания, которая создала сайт, просто передала данные KML непосредственно в API gMaps и позволила ему разместить все маркеры на стороне клиента. Очевидно, это стало кошмаром производительности и привело к тому, что старые браузеры «зависали» (или, по крайней мере, выглядели замороженными на несколько минут за раз).

В идеале этот серверный сценарий должен брать KML, центр широты и долготы карты и уровень масштабирования карты и соответствующим образом объединять все видимые маркеры мест в один GIF или PNG-оверлей.

Будем весьма признательны за любые указания или рекомендации по этому вопросу.

ОБНОВЛЕНИЕ 10/8/2008 - Большая часть информации, с которой я столкнулся здесь и в других местах, может показаться, что уменьшение количества точек на карте - это путь (то есть использование один маркер для представления нескольких при просмотре с большей высоты / уровня масштабирования). Хотя это, вероятно, хороший подход в некоторых случаях, он не будет работать здесь. Мы ищем визуальное влияние карты США со многими тысячами маркеров на ней. Одна из опций, которую я исследовал, - это сервис под названием PushPin , который при подаче (предположительно) KML создает на стороне сервера наложение, которое имеет все видимые точки (в зависимости от центра широты / долготы и уровня масштабирования). ) на одно изображение, поэтому вместо выполнения нескольких тысяч манипуляций DOM на стороне клиента мы объединяем все эти маркеры в одну сторону сервера изображений и выполняем одну манипуляцию DOM на стороне клиента. Сервис PushPin очень удобен и определенно будет работать, если бы не связанные с этим расходы. Мы действительно ищем что-то F / OSS, которое мы могли бы запустить на стороне сервера, чтобы сгенерировать это наложение сами.

Ответы [ 5 ]

4 голосов
/ 06 октября 2008

Возможно, вы захотите посмотреть что-то вроде Geoserver или Mapserver . Это клоны карт Google и многое другое.

Вы можете сгенерировать наложение, которое вам нравится, и Geoserver (я думаю, что и mapserver тоже) может предоставить вам KML, PDF, png и другие выходные данные для микширования ваших карт, или вы можете сгенерировать всю карту самостоятельно, но это занимает время.

2 голосов
/ 06 октября 2008

Не уверен, почему вы хотите перейти на оверлей GIF / PNG, вы можете сделать это прямо в KML. Я предполагаю, что большая часть вашей проблемы с производительностью была вызвана точками за пределами текущего представления пользователя, то есть пользователь смотрит на Нью-Йорк, но у вас есть точки в Лос-Анджелесе, которые тратят впустую память, потому что они не видны. Если у вас действительно есть 16 000 очков, которые все видны одновременно для типичного, то да, вам нужно будет придерживаться другой стратегии.

Если вышеизложенное применимо, процедура будет следующей:

  1. Определить центр и протяженность карты
  2. Учитывая, что вы должны быть в состоянии вычислить широту / длину верхнего левого и нижнего правого углов карты.
  3. Итерация по вашей базе данных точек и проверка каждого местоположения по двум углам. Долгота должна быть больше (подписана!), Чем верхняя левая долгота и меньше, чем правая нижняя долгота. Широта должна быть меньше верхней левой широты (подписана!) И больше нижней правой широты. Простые сравнения, здесь не нужно никаких причудливых вычислений.
  4. Вывести совпадающие точки во временный KML для пользователя.
  5. Вы можете подать KML непосредственно в Google Maps и позволить ему отобразить его, или вы можете использовать API карт Javascript для загрузки точек через KML.

Возможно, это не решит вашу точную проблему здесь, но для связанных проблем вы также можете обратиться к Google Static Maps API . Это позволяет вам создать статический файл изображения с метками, которые будут загружаться очень быстро, но не будут иметь интерактивности обычной карты Google. Однако из-за того, как спроектирован API, он также не может обрабатывать около 16 000 точек, поэтому вам все равно придется перейти к просмотру.

1 голос
/ 06 октября 2008

Я не знаю, как вы поживаете с вашим проектом, но, возможно, вы можете взглянуть на GeoDjango ? Этот модифицированный релиз Django включает в себя все виды инструментов для хранения мест; конвертировать координаты и отображать карты, простой способ. Конечно, вам нужен опыт работы с Python и сервер для его запуска, но как только вы освоитесь с Django, он будет работать быстро и хорошо.

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

0 голосов
/ 06 октября 2008

OpenLayers - отличный интерфейс javascript для нескольких картографических служб или ваших собственных картографических серверов. Версия 2.7 была только что выпущена, которая добавляет некоторые довольно удивительные функции и элементы управления.

0 голосов
/ 06 октября 2008

Это сложный вопрос. Вы можете использовать пользовательские наборы плиток с Google Maps , но вам все равно нужен какой-то способ генерации плиток (кроме ручного).

Боюсь, это все, что у меня есть = /

...