Клуб API Карт

Вживить геокодер в CMS.

Пост в архиве.

Есть самописная CMS.

В ней контент-менеджер иногда забивает адреса фирм. Надо сделать так чтобы эти адреса генерили координаты этого адреса.

Т.е. девочка вводит в нужное поле адрес фирмы нажимает "сохранить", при этом по введённому адресу надо найти его координаты и записать в базу.

Проблема в том, что эта CMS подключена ко множеству сайтов и "зайти" в неё можно так: www.mysite.ru/mycms т.е. находится она на том же домене что и сайт.

Как решить проблему без "заказывания" множества API-ключей для каждого из сатов?

Может мне вообще не API Яндекс карт нужен?

 

8 комментариев
Если все CMS обособлены, то боюсь, что не избежать получения ключа для всех сайтов (которые хотят пользоваться геокодером). Однако, получить ключ несложно (нужно заполнить одно поле, поставить флажок и нажать кнопку). Может быть после обновления попросить контент-менеджера самому получить ключ?

Если CMS могут обращаться к централизованному серверу, то можно настроить на нем http-геокодер. CMS будут слать на него запросы с адресами и получать координаты в ответ.

Если все CMS обособлены


CMS такая, что она лежит "почти" отдельно (от сайтов) на нашем сервере. 
На сервере в "папке сайта" (где физически лежат все файлы данного сата) есть symlink на папку с CMS, т.е. фактически CMS "одна на всех". 


получить ключ несложно


это так, но сайтов уж очень много 



Может быть после обновления попросить контент-менеджера самому получить ключ?


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


Если CMS могут обращаться к централизованному серверу, то можно настроить на нем http-геокодер. CMS будут слать на него запросы с адресами и получать координаты в ответ


я правильно понял что на наш сервер можно поставить такую штуку, котрая сама, не хуже яндекса (или с привлечением оного), будет выдавать координаты по адресу?

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

API-ключ нужно получить один раз, а потом будете использовать геокодер и контент-менеджеру не нужно будет ходить на яндекс за координатами.

я правильно понял что на наш сервер можно поставить такую штуку, котрая  сама, не хуже яндекса (или с привлечением оного), будет выдавать  координаты по адресу?

Если одна CMS на всех. То сделайте у себе "ручку":
http://mymainserver.ru/geocode/?text=Москва
Скрипт в этой ручки будет получать с помощью http-геокодера координаты и выдавать их в json, либо в ymapsml.

Минус решения в том, что все запросы будут проходить через один сервер и на один api-ключ. Можно превысить порог 25000 запросов в сутки.
Если одна CMS на всех. То сделайте у себе "ручку":
http://mymainserver.ru/geocode/?text=Москва
Скрипт в этой ручки будет получать с помощью http-геокодера координаты и выдавать их в json, либо в ymapsml.

Я правильно понял, что когда мы нажимаем на кнопку "сохранить" в CMS и хотим, таким образом, получить "координаты адреса" то будет запускаться скрипт котрый полезет на http://mymainserver.ru/geocode/?text=Москва (котрый, в свою очередь, полезет на яндекс) и вернёт в CMS координаты.
Ага. Это как вариант решения ;)

Напишите скрипт, который достает из базы адреса, затем http-геокодером получает координаты для этих адресов (для которых еще нет координат, полученных ранее) и сохраняет в базу. И на крон его.


 


http://ymapsapi.ya.ru/replies.xml?item_no=81


 


Пример получения координат по адресу и сохранение в переменную.


 

$geocode = file_get_contents('http://geocode-maps.yandex.ru/1.x/?geocode='. urlencode('Москва') .'&key=_ваш_ключ_');
$xml = new SimpleXMLElement($geocode);

$xml->registerXPathNamespace('ymaps', 'http://maps.yandex.ru/ymaps/1.x');
$xml->registerXPathNamespace('gml', 'http://www.opengis.net/gml');

$result = $xml->xpath('/ymaps:ymaps/ymaps:GeoObjectCollection/gml:featureMember/ymaps:GeoObject/gml:Point/gml:pos');

echo($result[0]);
?>

 


Напишите скрипт, который достает из базы адреса, затем http-геокодером получает координаты для этих адресов ... и сохраняет в базу


Да, такой скрипт я напишу.  Он решит проблему конвертирования уже существующих адресов в координаты. 
Проблема в том, что мне надо геокодировать по мере написания новых адресов (офисов) в CMS которая подключается ко множеству доменов.
А сайты потом пусть с вашего сервера CMS дергают координаты.