2008-10-06 4 views
7

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

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

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

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

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

ответ

0

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

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

+0

Да, это, конечно, мое мышление с наложением, но то, что я специально надеюсь, это серверная сторона, которая будет генерировать наложение на основе KML, центра lat/lon и уровня масштабирования. – theraccoonbear 2008-10-06 14:49:21

4

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

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

+0

Это интересно, я посмотрю, будут ли они работать для наших целей. – theraccoonbear 2008-10-06 15:08:49

+1

Мы будем демонстративно смотреть в GeoServer и GeoWebCache! – Adrian 2009-03-03 15:02:21

+4

Определенно? «Просто постарайтесь остановить нас!» ;) – DanM 2010-01-21 16:53:04

1

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

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

0

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

2

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

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

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

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

Смежные вопросы