Как стать автором
Обновить

Комментарии 53

Я где бы почитать побольше на русском о самом Google Maps как там красивые метки создавать, как там картинки на карте размещать и т.д? Спасибо заранее!
По русский похоже не где. Да и на Google Maps API все вроде понятно, даже без знания английского.
Ну там как-то примитивно, а вот как например сделано на томже МирТесен или Автоточках? Там вообще каике-то DIV накладываются на карту или както так, вообще замудрено сделано (((
Я делал свою карту на основе google maps, узнавал все только из API, получилось не хуже чем мир тесен, с красивыми иконками для маркеров, с картинками и прочее. Там есть все что нужно поверьте...
а глянуть можно?
Гляньте на миртесен. Все открыто.
По поводу своих "облачков" смотрите в сторону Custom Overlays
http://code.google.com/apis/maps/documen…
Я полностью согласен с предыдущим каментом. Справочника по АПИ от гугла достаточно чтобы реализовать любой функционал на карте.
пригодится, спасибо.
многовато букв и кода:(
а не проще бы было:
-начало поста-
Гугл апи юзать так:
http://www.google.com/search?q=google+maps+api+php
http://www.phpinsider.com/php/code/GoogleMapAPI/
http://www.phpriot.com/articles/google-maps-geocoding
http://www.coastrentals.com/tech/2006/09/20/php-geocoding-tutorial-with-the-google-maps-api-part-one/

-конец поста-

:)
ну тогда большая часть всех постов должна представлять собой кучу ссылок, находящихся в неком каталоге и организована по принципу FAQ :-)
Я вверху написал, что большинство кода можно и пропустить, написание геттеров и сеттеров - детский сад.
Однако для тех кто изучает - это может быть полезно
peace :)
Спасибо, отличный материал! +1 к карме!
А меня вот интересует, с помощью этого можно сделать выбор адреса при регистриции, чтобы выбирать сначала страну, потом подгружался выбор области/штата, далее города, улицы?

Возможно существуют другие сервисы, позволяющие это сделать, или какие-нибуть базы данных, которые можно скачать?
в каком-то посте проходила информация о населенных пунктах, кто-то даже собирался выкачивать ее
список городов можно посмотреть на википедии
Посмотреть или взять скриптом, автоматически? Я вот тоже интересуюсь как получить не забивая ручками всю структуру Города-районы-страны. Вроде же часто используемые данные, должен быть где то сервис.
У меня есть mysql база, с такими данными.
~13 mb.
Кому нужно стучитесь в личку!
привет
если можно, скинь пожалуйста ее на termopro сабако гугльмыло ком
Очень буду благодарен: enzonieri [at] gmail.com
данке шён за инфу!
спасибо за статью. а есть в планах написание статьи о хранении всех маркеров в базе данных и отображении их на карте? понятно что загрузить все маркеры на карту можно, но логичнее загружать только те которые рядом с местом просмотра. вот меня это озадачило в свое время.
Ну и как получилось реализовать?
Если да, то дай ссылку
нет, я не разобрался. я просто ковырялся и думал как такое можно реализовать если надо будет сервис делать %)
Да честно говоря, я это реализовал ничего сложного... 1. Сначала подгружаются маркеры, входящие в область видимости:
посылаем ajax запрос с координатами окна (map.getBounds()), который возвращает javascript, который создает маркеры(берет из базы)...Причем javascript ом проверяем, поставили ли уже такой маркер.
2. На изменение зума и на перемещение карты (drag)
вешаем тот же ajax запрос.
Сумбурно как то ответить получилось.. Но это прекрасно работает и без тормозов.
Тогда нужно смотреть в сторону KML — там можно указывать области видимости
так если у вас есть координаты широты и долготы, то близость объектов вы можете вычислить сами
а поиск объектов в БД, у вас сведется к sql-запросу с хитрым условием
"Когда вы используете Google Maps для отображения карт на сайте, самый лёгкий путь использовать JavaScript API, однако это не всегда является оптимальным решением.
Например, если ваше приложение записывает координаты по адресу, который вводит пользователь, данное решение не будет работать для тех пользователей, у которых отключен JavaScript."

Не очень я понял. Как такое может быть? GoogleMaps работает на JS, и как в этом случае у юзера может быть выключен JS?
Тут от google maps используется только геокодинг, а для этого достаточно отправить запрос. Гуглу как-то все равно, кто его ответ будет обрабатывать — javascript или другой язык.
В работе с google maps api я столкнулся со следующими косяками:
1. Не поддерживаются номера русских домов.
По полученному xml нельзя определить, нашли мы дом или улицу.
Accuracy (при поиске дома) выдает 6, хотя должен 8.
2. Мы можем изменять маркер (при наведении мышки), только на изображения того же размера. (нету marker.setIcon())
3. Запросы ajax (getLocations, getLatLng) выполняются асинхронно
(неизвестно в каком порядке, когда выполнится callback).
Все это решается с помощью костылей(кроме 2), но это отражается на скорости работы.

Может тут каждый напишет, какие баги у него возникают при работе с google maps?

Да еще было бы неплохо если бы в google был reverse geocoding (по координатам выдает адрес). Существуют отдельные системы позволяющие его делать, но с Россией работают плохо.
> неплохо если бы в google был reverse geocoding
Он есть (хотя пока и без официального релиза)-- http://solenko.blogspot.com/
Насколько я понимаю, это сторонняя разработка, использующая GDirections.
То есть по сути это костыль.
Reverse Geocoder for Google Maps API, правда, как выше написали это тоже «костыль» основанный на GDirections…
вы знаете, очень странно про номера русских домов
Я очень часто ищу адреса, с помощью maps.google.com, все нормально работает
я очень сомневаюсь, что там другой алгоритм и механизм работы
Вы правы!
Через maps.google.com и просто через maps google api, при поиске дома, указатель корректно на него ставится.
Я же говорю про то что, полученный "placemark"(получается при запросе на google maps api) содержит в себе иерархию страна-область-город-район-улица.
И в нем нет номера дома!!(который по идее должен входить в поле улица). Соответсвенно, со стороный программной логике сложно(но можно, через одно место) определить человек нашел дом или нет.
Возникла еще проблема :( Я формирую html-страницу, где записаны какие-то города (штук 20 пока) и при использование js geocoding (getLatLng, наверно вы про это написали в третьем пункте, я не очень понял) не на все запросы приходят ответы. Пришлось использовать timeinterval в 400ms для каждого запроса (подобрано опытным путем), и если ответ не success то увеличивать интервал += 10. Кто-нибудь сталкивался с этим? Как решали?
Спасибо, добавляю в избранное!
Столкнулся с проблемой, много что перерыл, так и не нашел ответа. Может здесь кто подскажет..
Мне нужно поверх карты америки нарисовать штаты, и выделить их разным цветом.

Я сделал так: написал скриптик на js, который грузит карту, а я просто тыкаю мышкой по ней, выделяя все штаты, а скрипт потом выдает мне координаты всех точек. Но таким образом нельзя получить точных границ, так как количество точек ограничено, иначе я просто замучаюсь с ними, да и отрисовываться будут долго :) Скрипт рисовал каждый штат с помощью GPolygon (вроде так, не помню уже точно), задавая разные цвета.

Вопрос: Как нарисовать все штаты на карте, чтобы можно было каждый штат закрасить своим цветом, и границы были четкие (шли ровно по граница в google maps'e). Желательно чтобы это работало побыстрее как-нибудь :)
Вариант накладывания на карту изображения рассматривал, но там ограничения которые меня не устраивают..
Хэлп =)
http://www.census.gov/geo/www/cob/st2000.html - тут файлы с границами штатов.(Lat, Lon)
формат файла Shapefile ArcView
Если поможет скажи...
потому что тоже с этим бороться предстоит
Боюсь что не поможет.. Я находил подобное... Там файлик со всеми коородинатами в Сжатом виде весит под 1.5 мб... В распакованном под 5 мб =D Мне кажется что пользователи это не потянут =)
Так что скорее всего единственным решением остается накладывание картинки на карту... В принципе не такой плохой вариант, можно отключить возможность zoom'a у юзера, и никто не заметит, что границы штата, почему-то не растягиваются =) Либо взять большую тестуру, и обрабатывать zoom самому =)
Надо еще с прозрачностью поэксперементировать... В общем большое поле для деятельности =) Пока заказчик вроде не требует красоты в карте, так что я еще подожду с апдейтом карты посредством своих текстур )
хттп://econym.googlepages.com/example_states2.htm
Спасибо за ссылку!
140кб, уже намного лучше :) Можно было бы использовать, если бы файл кэшировался при загрузке в карту (я лично этого не заметил), поэтому видимо унивесального решения нет. Можно конечно проредить этот файлик... Но все это компромиссы ИМХО. Пока оставлю текущую версию моего скрипта, в принципе карта там нормальная. Кому интересно: http://localrealestatedeals.com . Это не реклама, сайт не мой, я просто аутсорсер :)
Кто-нибудь может подсказать сервис геокодинга почтовых кодов Великобритании?
Сразу попало в избранное. Отличная статья, огромное спасибо.)
А реально реализовать привязку к картам гугла базы клиентов?
т.е. есть фирма, у неё во внутренней сети стоит сервер, на котором крутится WinServer2003, PHP и MySQL + лаз в интернет. Туда забита информация по клиентам (потенциальным и тех, с которыми уже заключены договора) и sales-менеджерам надо выезжать на встречи (в базе есть адреса, разумеется).
На сколько реально сделать разбивку карты по районам (через почтовые индексы, по-видимому) для оптимизации пути менеджеров?
И "адрес сайта" для для получения ггловского ключа в данном случае - это IP сервера на котором это будет всё работать?
не подскажите в чём может быть проблема. прочитав эту статью.спасибо.решил воспользовать тоже. на одном из моих хостингов нет curl - в итоге я решил делать в ручную. через обычный socket - примерно такого рода.

function CallGoogleService() {
$fp = fsockopen($this->googleHost, $this->googlePort);
if($fp) {
$this->address = urlencode($this->address);
$addr = "/maps/geo?q=".$this->address."&output=xml&key=".$this->googleKey;
echo $addr."";
fputs($fp, "GET ".$addr."\r\n HTTP/1.1\r\n");
$request = fgets($fp);
fclose($fp);

Почему то когдая передаю адрес на русском языке -
$googlegeocode = new GeoCode();
$googlegeocode->address = "город Москва улица Петрозаводская";


то возращается ошибка 602. Беру полечнный резуьтат что передаю в гете и вставляю в броузер - /maps/geo?q=%E3%EE%F0%EE%E4+%CC%EE%F1%EA%E2%E0+%F3%EB%E8%F6%E0+%CF%E5%F2%F0%EE%E7%E0%E2%EE%E4%F1%EA%E0%FF&output=xml&key=/*my key*/
то в броузер возращаются коррдинаты. Не могу понять в чём проблема общения через сокет. :-(
Сразу так сказать сложно, сравните какой запрос шлет curl с тем запросом который формируется у вас
параметр CURLOPT_VERBOSE
проделал тоже самое через curl - аналогичная ситуация. в то время как беру строку с гет параметрами вставляю в броузер эксплорер ответ приходит - в опере тоже- а вот в файерфоксе ситуация аналогична моей проблеме. каким то образовм броузеру отсылают дополнительную информацию в сокет блягодаря чему адрес распознаётся. возможно как то указывается или прелбразуется ти кодировки...
проблема решена - гугл всегда принимает в кодировке utf-8 поэтому пришлось преоразовать адрес.
У меня стоит задача сделать детальную карту города, фоток на который нет в google maps. Реально нарисовать как-то самому это все используя гугловский api?
Вам возвращаются координаты.
Сделайте фотки и привяжите их к их координатам. Потом посмотрите в примерах на гугле как сделаны различные маркеры
не врубаюсь..
есть у меня свой сайт, на котором вставлен гугл мапс, я написал для него mapplet, каким образом и где мне в коде своего сайта указать ург этого маплета, его ессесно видно публично по урлу
ООП все дела, все понятно, но зачем такие сложности?

Все, что необходимо по сути для работы карты, это координаты.
Каждый раз их смысла брать нету, поэтому лучше записать сразу в БД к адресу, далее метку можно любую проставить.
и вот что получилось…

$Address = "Нужный адрес";
$XML_URL = "http://maps.google.com/maps/geo?q=".urlencode($Address)."&output=xml&oe=utf8\&sensor=true&key= ...";
$Point_XML = "";
if (!($fp = @fopen($XML_URL, "r"))) { echo "Error..."; }
while ($data = fread($fp, 4096)) {$Point_XML .= $data;}
$xml = simplexml_load_string($Point_XML);
foreach($xml->Response->Placemark->Point->coordinates as $Point)
{
	list($longitude, $latitude, $elevation) = explode(',', $Point, 3);
	$sql = "записываем в БД, чтобы не делать частых запросов";
}

собственно говоря, на этом всё, примерно 6 функциональных строчек :)
пробегаемся по всем адресам, записываем в БД, и у нас сетка точек, готовая к выводу на карту
пример дальнейшего вывода, без лишнего запроса: Пример
Кто-нибудь знает как реализовать, чтобы, как у гугла, можно было менять маршрут из любой его точки?
Картинки пропали :( Автор, можешь ли восстановить на какой-нить хабрасторадж или хаброэффект? Полезная статья-то!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации