В этой заметке я хочу Вам рассказать как можно совместно использовать http-геокодер и Static API Яндекс.Карт.
Static API позволяет размещать статические изображения Яндекс.Карт на страницах сайтов, не прибегая к программированию на JavaScript или использованию динамической загрузки страниц.
Это особенно полезно при создании картографических сервисов для мобильных устройств.
Подробную информацию по Static API Яндекс.Карт можно прочитать в руководстве разработчика по адресу http://api.yandex.ru/maps/staticapi/doc/dg/concepts/input_params.xml, а также на страницах этого блога «Использование Static API Яндекс.Карт».
Опишу работу примера:
На странице имеется форма для ввода адреса для поиска и уровня отображения масштаба карты.
После ввода параметров в форму мы нажимаем кнопку Искать, с помощью http-геокодера определяются координаты и мы получаем статическое изображение Яндекс.Карты с меткой на искомом объекте.
Рассмотрим код нашего примера подробнее.
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Static API Яндекс.Карт и http-геокодер</title> </head> <body> <form action="<?=$_SERVER['PHP_SELF']?>" method="POST"> Адрес: <input type="text" name="address" style="width:525px;" /> <br /> Уровень масштаба: <input type="text" name="zoom" style="width:20px;" /><br /> <input type="submit" value="Искать" /> </form><br /><br /> <?php if(isset($_POST['address'])){ $addr = $_POST['address']; $zoom = $_POST['zoom']; if(!isset($zoom)){ $zoom = 15; } $lng="0.0"; $lat="0.0"; $url = 'http://geocode-maps.yandex.ru/1.x/?geocode='.urlencode($addr).'&key=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ=='; $results = file($url); if($results && is_array($results) && count($results)) { $data=implode("", $results); if(preg_match("#<pos>([0-9\.]*) ([0-9\.]*)</pos>#i", $data, $out)) { $lng=floatval(trim($out[1])); $lat=floatval(trim($out[2])); if($lng>0 && $lat>0) { echo '<img alt="" border="0" hspace="10" align="" valign="" src="http://static-maps.yandex.ru/1.x/?ll=', $lng, ',', $lat, '&size=600,400&z=', $zoom, '&l=map&pt=', $lng, ',', $lat, ',', 'pmblm&key=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ==">'; } else { $returncode="-1"; } } else { $returncode="-2"; } } else { $returncode="-3"; } if($returncode != -1 OR $returncode != -2 OR $returncode != -3) {echo '<p>Ошибка геокодирования</p>';} } ?> </body> </html> |
В начале размещен код формы для ввода параметров.
<form action="<?=$_SERVER[‘PHP_SELF’]?>" method="POST">
Адрес: <input type="text" name="address" style="width:525px;" /> <br />
Уровень масштаба: <input type="text" name="zoom" style="width:20px;" /><br />
<input type="submit" value="Искать" />
</form>
После идет php-скрипт обработки введенных значений.
Строкой
$url = 'http://geocode-maps.yandex.ru/1.x/?geocode='.urlencode($addr).'&key=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ=='; |
мы формируем запрос к http-геокодеру, кодируя введеный адрес функцией urlencode — она все не алфавитно-числовые символы (кроме -_.) заменяет на знак процентов (%) с последующими двумя 16-ричными цифрами и пробелами, кодированными как знаки плюс (+).
Далее мы обрабатываем ответ геокодера, извлекая значения координат.
После этого мы выводим изображение Яндекс.Карты с помощью тега img, у которого в src передаем набор необходимых параметров.
Я сделал специальную версию данного примера, по адресу , которую Вы можете загрузить в браузере мобильного устройства https://webmap-blog.ru/examples/stat-4.php.
Исправьте, пожалуйста: html-геокодер -> http-геокодер
Пример почему то больше не работает(