Использование YMapsML
YMapsML является открытым, документированным и простым XML-языком описания географических данных. JavaScript API Яндекс.Карт предоставляют средства для автоматической загрузки информации из YMapsML-файлов и отображения их на карте.
Проекты Яндекса, связанные с картографическим сервисами, обмениваются между собой данными именно в этом формате. Сервис геокодирования Яндекс.Карт допускает обращение по HTTP-протоколу и возвращает ответ в виде YMapsML.
Приведённая информация позволяет обозначить основные способы применения YMapsML:
-
Формирование YMapsML-файла и отображение содержащейся в нём информации средствами Javascript API.
Создать YMapsML-файл очень просто — достаточно взять любой текстовый редактор и ввести необходимую информацию в соответствии со спецификацией языка. Получить представление о том, как выглядят YMapsML-файлы, можно из примеров, приведённых в данном руководстве. Эти примеры удобно использовать в качестве основы для собственных экспериментов.
Ручное редактирование YMapsML-файлов используется, конечно, довольно редко. Обычно файлы генерируются автоматически, например, на основе информации, содержащейся в базе данных. YMapsML является XML-форматом. Практически все современные языки программирования и среды разработки содержат инструменты для представления данных в XML. Таким образом, автоматическое формирование YMapsML-файлов не является сложной задачей.
В настоящее время большое количество географических данных представляется в XML-форматах. Проиллюстрировать это утверждение можно множеством языков, являющихся прикладными схемами или профилями GML. Не составляет большого труда отобразить такие данные на Яндекс.Картах — достаточно преобразовать их в формат YMapsML (например, с помощью, XSLT).
На странице с примерами размещён пример отображения на Яндекс.Картах информации о землетрясениях, данные о которых изначально представлены в формате GeoRSS. YMapsML используется в качестве промежуточного формата, в который легко преобразуется GeoRSS-лента.
-
Получение информации от сервиса геокодирования с помощью HTTP-запроса.
Сервис геокодирования позволяет определять координаты географического объекта и получать сведения о нём по его названию или адресу. И наоборот, можно определить адрес объекта на карте по его координатам — обратное геокодирование.
Результат возвращается в формате YMapsML. Это позволяет сразу разместить найденные объекты на Яндекс.Картах. Кроме того, полученные данные легко проанализировать визуально или извлечь с помощью программных средств.
-
Отображение географических данных, представленных в виде YMapsML, сторонними геоинформационными сервисами.
Поскольку YMapsML является стандартной прикладной схемой GML, данные в этом формате могут быть отображены и обработаны с помощью программных средств, поддерживающий GML третьей версии — таких, как Mapserver, OpenLayers.
-
Использование 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
и передает ссылку на этот объект функции-обработчику.
При просмотре в браузере данная страница будет выглядеть следующим образом: