Яндекс.Карты — используем совместно http-геокодер и Static API

В этой заметке я хочу Вам рассказать как можно совместно использовать 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).'&amp;key=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ==';

мы формируем запрос к http-геокодеру, кодируя введеный адрес функцией urlencode — она все не алфавитно-числовые символы (кроме -_.) заменяет на знак процентов (%) с последующими двумя 16-ричными цифрами и пробелами, кодированными как знаки плюс (+).

Далее мы обрабатываем ответ геокодера, извлекая значения координат.

После этого мы выводим изображение Яндекс.Карты с помощью тега img, у которого в src передаем набор необходимых параметров.

Я сделал специальную версию данного примера, по адресу , которую Вы можете загрузить в браузере мобильного устройства http://webmap-blog.ru/examples/stat-4.php.

  • Гость: Исправьте, пожалуйста: html-геокодер -&gt; http-геокодер
  • Гость: Пример почему то больше не работает(