Наложения карт Google

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

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
7
0
3 494
5

Ответы 5

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

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

да, конечно, я думаю о наложении, но я особенно надеюсь на что-то на стороне сервера, которое будет генерировать наложение на основе KML, центральной широты / долготы и уровня масштабирования.

theraccoonbear 06.10.2008 18:49

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

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

Это интересно, посмотрю, подойдут ли они для наших целей.

theraccoonbear 06.10.2008 19:08

Мы демонстративно заглянем в GeoServer и GeoWebCache!

Mesh 03.03.2009 18:02

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

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

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

theraccoonbear 06.10.2008 19:09

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

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

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

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

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

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

theraccoonbear 06.10.2008 19:49

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

Tim Farley 06.10.2008 20:31

Другие вопросы по теме