Задача достаточно простая - есть 500 адресов формата "Санкт-Петербург, Садовая ул., 21", нужно получить для них координаты.
Конечно, можно и стандартным инструментом http://api.yandex.ru/maps/tools/getlonglat/ воспользоваться, но больно долго.
Сам я совершенно ничего не понимаю в xml, YMapsML и вообще толком разобраться с геокодером не получилось.
Подскажите, как бы это по-человечески сделать. Заранее спасибо.
я же говорю, что недостаточно разбираюсь в данном языке.
и по-моему всё дело пахнет одной строчкой, в духе
echo координаты("Санкт-Петербург, Садовая ул., 21");
хочется верить, что найдутся люди, которые подскажут такую строчку и без денег.
Для таких целей лучше воспользоваться http-геокодером и сделать описанные вами действия на серверной стороне. http-геокодер возвращает данные в формате YMapsML (специализированный XML), который может быть обработан богатым арсеналом инструментов по работе с XML.
Написал скрипт на PHP. Для своих целей нужен был. Берет список адресов из текстового файла, $base_a, находит координаты всех объектов в заданной области и посылает их в файл $base_c в формате [адрес]|[долгота]|[широта]. Кодировка всех файлов желательно utf-8 - будет меньше проблем.
ini_set('memory_limit', '500M');
$key='AG8mbUsBAAAAdt5MUAIAhXRcbhY4edtzaIWZem5p4f6-EhwAAAAAAAAAAABUoYEu6xZGFQ1k092bC6S7tsklew=='; // API-ключ $site='http://geocode-maps.yandex.ru/1.x/'; $ll='31.734094,59.82502'; // Центр области поиска $spn='8.371582,3.052674'; // Ширина и высота области поиска - если не нужно - удалить и отредактировать переменную $l_type='house'; // Тип объекта $base_a='adress.txt'; $base_c = 'adress_c.txt';
$mass = file($base_a); // Создаем массив со строками файла адресов
$handle = fopen($base_c, 'a'); // Открываем файл для записи адресов и координат for ($i=1; $i{ $city=$mass[$i];
$city=str_replace (' ', '+', $city); // Заменяем все пробелы на + $url=$site.'?geocode='.$city.'&rspn=1&ll='.$ll.'&spn='.$spn.'&key='.$key;
$text = file_get_contents($url); // Записываем содержимое файла в строку
// Выуживаем из ответа геокодера нужные данные: $pos = explode("", $text); // Начиная элемента '1' в элементе массива $pos[$i] // содержится данные в формате: {долгота широта...} $kind = explode("", $text); // Начиная элемента '1' в элементе массива $kind[$i] // содержится данные в формате: {тип_объекта...} $c_name = explode("", $text); // Начиная элемента '1' в элементе массива $c_name[$i] // содержится данные в формате: // {Адрес_объекта...}
// Далее проходимся по всем найденным объектам // и выуживаем из ответа геокодера нужную информацию for ($k=1; $k{ $mass3 = explode("", $kind[$k]); $type = $mass3['0']; // Тип объекта
// Обнуляем координаты: $lng=''; $lat='';
if($type==$l_type) // Проверяем тип объекта { $mass4 = explode("", $c_name[$k]); $l_name = $mass4['0']; // Адрес по базе Яндекса
// Если объект найден и известны его координаты: if($lng and $lat) { // Формируем строку, которую нужно добавить в файл: $somecontent = "
".$l_name."|".$lng."|".$lat; fwrite($handle, $somecontent); // Пишем в файл // Далее радуемся, что запись добвалена: echo "Запись($somecontent) добавлен в файл ($base_c) "; } } } fclose($handle); // Закрываем файл. ?>
Подкажите пожалуйста, может я что-то неправильно сделал? Пробовал запустить через Denwer. Никакой ошибки не пишет. В файл "adress.txt" добавил одну улицу.