Накладки на Google Карты

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

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

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

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

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

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

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

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

Если это применимо, процедура будет следующей:

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

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

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

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

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

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

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