Также как у API карт Google (язык – KML) для описания географических данных на картах Яндекса используется специальный язык YMapsML (Yandex Maps Markup Language).
YMapsML – это XML язык с помощью которого возможно в текстовом виде задать участок карты с нанесенными метками и другими объектами, а затем отобразить его в браузере средствами JS API Яндекс.Карт.
Также он используется сервисом геокодирования для описания найденных по запросу географических объектов.
В качестве геометрических объектов можно использовать метку или линию.
Можно задавать стиль отображения объектов и границы области показа.
Давайте для начала рассмотрим простейший пример файла на языке YMapsML и как вывести его содержимое с использованием API Яндекс.Карт.
Привожу код файла примера:
<?xml version=»1.0″ encoding=»utf-8″?>
<ymaps xmlns=»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»>
<GeoObjectCollection>
<gml:name>Объекты карте</gml:name>
<gml:featureMembers>
<GeoObject>
<gml:name>Дворец спорта</gml:name>
<gml:description>Дворец спорта «Нагорный» просп. Гагарина, 29</gml:description>
<gml:Point>
<gml:pos>43.979459 56.291908</gml:pos>
</gml:Point>
</GeoObject>
</gml:featureMembers>
</GeoObjectCollection>
</ymaps>
В этом примере:
В первой строке задается формат файла XML версии 1.0 и его кодировка utf-8.
Далее идет корневой элемент файла ymaps:ymaps. В его атрибутах описываются пространства имен XML и используемые XSD-схемы.
Элемент ymaps:ymaps может содержать в себе несколько тегов, служащих контейнерами для различных данных или групп данных, отображаемых на карте.
Это repr:Repsentation – который содержит в себе правила отображения геообъектов на карте (в нашем примере отсутствует).
И контейнер GeoObjectCollection – содержит в себе описания объектов, помещаемых на карту.
Элемент gml:featureMembers – содержит в себе описание отдельного геообъекта или группы.
В нашем случае это простой элемент метка.
О имеет имя — name Дворец спорта, описание – description Дворец спорта «Нагорный» просп. Гагарина, 29.
Координаты метки задаются следующим кодом:
<gml:Point>
<gml:pos>43.979459 56.291908</gml:pos>
</gml:Point>
Для визуализации данного файла в наш пример вывода Яндекс.Карты (см.первый код в заметке «Добавляем маркер на карту используя API Яндекс.Карт«) необходимо добавить несколько строк в функцию init.
var ml = new YMaps.YMapsML( ‘https://webmap-blog.ru/examples/YMapsML/prim_YMapsML_1.xml’ );
map.addOverlay(ml);
YMaps.Events.observe(ml, ml.Events.Fault, function (error) {
alert(‘Ошибка: ‘ + error);
});
В первой строке мы присваиваем переменной ml путь к файлу с нашим примером prim_YMapsML_1.xml.
И затем добавляем его на нашу карту.
Последние три строки служат для контроля ошибок, возникающих при загрузке YMapsML-документа.
Загружаем пример в браузере и наблюдаем результат.
Посмотреть работающий пример и исходный код можно здесь.
Далее я продолжу описания работы с языком YMapsML
Более подробную информацию Вы можете найти в документации на странице по адресу http://api.yandex.ru/maps/ymapsml/doc/ref/concepts/About.xml
Добрый день. А подскажите, как сделать несколько объектов с name и description в одной метке, если, допустим, несколько объектов на карте имеет одни и тот же адрес и необходимо их отобразить в одном балуне?
Подскажи, плиз, каким EVENT отловить изменение границ карты? У меня карта находится в DHTMLX окне, которое пользователи могут менять в размерах. И точки у меня подгружаются только в видимую область карты по var bnd=mapba.getBounds(),crdl=bnd.getLeftBottom(),crdr=bnd.getRightTop();