Использование YMapsML

YMapsML является открытым, документированным и простым XML-языком описания географических данных. JavaScript API Яндекс.Карт предоставляют средства для автоматической загрузки информации из YMapsML-файлов и отображения их на карте.

Проекты Яндекса, связанные с картографическим сервисами, обмениваются между собой данными именно в этом формате. Сервис геокодирования Яндекс.Карт допускает обращение по HTTP-протоколу и возвращает ответ в виде YMapsML.

Приведённая информация позволяет обозначить основные способы применения YMapsML:

  1. Формирование YMapsML-файла и отображение содержащейся в нём информации средствами Javascript API.

    Создать YMapsML-файл очень просто — достаточно взять любой текстовый редактор и ввести необходимую информацию в соответствии со спецификацией языка. Получить представление о том, как выглядят YMapsML-файлы, можно из примеров, приведённых в данном руководстве. Эти примеры удобно использовать в качестве основы для собственных экспериментов.

    Ручное редактирование YMapsML-файлов используется, конечно, довольно редко. Обычно файлы генерируются автоматически, например, на основе информации, содержащейся в базе данных. YMapsML является XML-форматом. Практически все современные языки программирования и среды разработки содержат инструменты для представления данных в XML. Таким образом, автоматическое формирование YMapsML-файлов не является сложной задачей.

    В настоящее время большое количество географических данных представляется в XML-форматах. Проиллюстрировать это утверждение можно множеством языков, являющихся прикладными схемами или профилями GML. Не составляет большого труда отобразить такие данные на Яндекс.Картах — достаточно преобразовать их в формат YMapsML (например, с помощью, XSLT).

    На странице с примерами размещён пример отображения на Яндекс.Картах информации о землетрясениях, данные о которых изначально представлены в формате GeoRSS. YMapsML используется в качестве промежуточного формата, в который легко преобразуется GeoRSS-лента.

  2. Получение информации от сервиса геокодирования с помощью HTTP-запроса.

    Сервис геокодирования позволяет определять координаты географического объекта и получать сведения о нём по его названию или адресу. И наоборот, можно определить адрес объекта на карте по его координатам — обратное геокодирование.

    Результат возвращается в формате YMapsML. Это позволяет сразу разместить найденные объекты на Яндекс.Картах. Кроме того, полученные данные легко проанализировать визуально или извлечь с помощью программных средств.

  3. Отображение географических данных, представленных в виде YMapsML, сторонними геоинформационными сервисами.

    Поскольку YMapsML является стандартной прикладной схемой GML, данные в этом формате могут быть отображены и обработаны с помощью программных средств, поддерживающий GML третьей версии — таких, как Mapserver, OpenLayers.

  4. Использование YMapsML в качестве формата хранения географических данных.

    YMapsML можно использовать в том случае, когда географические данные необходимо представить в удобном для использования и хранения виде. Географические данные часто хранятся в базах данных, либо во внутреннем представлении различных программ.

    При необходимости резервного копирования или передачи данных «внешним» программам возникает задача выбора формата представления информации. В этом случае YMapsML может быть хорошим решением. Данные в этом формате легко анализируются визуально, обрабатываются средствами API Яндекс.Карт и программными средствами, поддерживающими GML 3.x.

В качестве примера рассмотрим простой YMapsML-файл с названием intro.xml:
<?xml version="1.0" encoding="UTF-8"?>
<ymaps:ymaps xmlns:ymaps="http://maps.yandex.ru/ymaps/1.x" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maps.yandex.ru/schemas/ymaps/1.x/ymaps.xsd">
    <ymaps:GeoObjectCollection>
        <gml:name>Мастер и Маргарита на Яндекс.Картах</gml:name>
        <gml:featureMembers>
            <ymaps:GeoObject>
                <gml:name>Патриаршие пруды</gml:name>
                <gml:description>Однажды весною, в час небывало жаркого заката, в Москве, на Патриарших прудах, появились два гражданина.</gml:description>
                <gml:Point>
                    <gml:pos>55.763969 37.592111 </gml:pos>
                </gml:Point>
            </ymaps:GeoObject>
        </gml:featureMembers>
    </ymaps:GeoObjectCollection>
</ymaps:ymaps>

В файле содержится информация о географическом объекте, с которого начинается действие романа М. А. Булгакова. Местоположение объекта обозначено на карте точкой с заданными географическими координатами.

Для отображения информации воспользуемся JavaScript API, содержащим встроенные средства отображения YMapsML-файлов. Для этого создадим следующую HTML-страницу:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Примеры YMapsML. Отображение простого объекта на карте.</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <script src="http://api-maps.yandex.ru/2.1/?lang=ru-RU" type="text/javascript"></script>
    <script type="text/javascript">
        ymaps.ready(init);

        function init () {
        var myMap = new ymaps.Map('map', {
                center: [55.76, 37.64],
                zoom: 8
            }),
            url = "intro.xml";
            // После того, как данные YmapsMl-файла загрузятся, вызывается callback-функция.
            ymaps.geoXml.load(url)
                .then(function (res) {
                    // Добавляем коллекцию геообъектов на карту.
                    myMap.geoObjects.add(res.geoObjects);
                });
         }
    </script>
</head>
<body>
<div id="map" style="width:600px;height:400px"></div>
</body>
</html>

Для загрузки YMapsMl-файла используется метод load. После того, как данные загрузятся, метод load преобразует их в объект GeoObjectCollection и передает ссылку на этот объект функции-обработчику.

При просмотре в браузере данная страница будет выглядеть следующим образом: