В этой заметке я хочу Вам рассказать как можно совместно использовать 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-геокодер
Пример почему то больше не работает(