понедельник, 11 мая 2009 г.

Продолжаем изучать язык YMapsML для Яндекс.Карт

В предыдущей заметке «Начинаем изучать язык YMapsML для Яндекс.Карт» мы начали с Вами изучать язык YMapsML для описания географических данных на картах Яндекса.

В этой заметке мы продолжим его изучение.

Узнаем, как описываются несколько объектов в одном файле, о использовании стилей и задания начальных параметров карты.

Давайте рассмотрим это на конкретном примере файла в формате  YMapsML (загрузить полный код файла).

Часть кода файла prim_YMapsML_2.xml

<?xml  version="1.0" encoding="utf-8"?>

<ymaps xmlns="http://maps.yandex.ru/ymaps/1.x" xmlns:gml="http://www.opengis.net/gml">



<Representation xmlns="http://maps.yandex.ru/representation/1.x">

<View>

<mapType>MAP</mapType>

<gml:boundedBy>

<gml:Envelope>

<gml:upperCorner>44.121546 56.372383</gml:upperCorner>

<gml:lowerCorner>43.799509 56.231518</gml:lowerCorner>

</gml:Envelope>

</gml:boundedBy>

</View>

<Style gml:id="styleCinimaNN">

<iconStyle>

<href>http://www.map.cek.ru/images/stories/kinoteatrs.jpg</href>

<size x="20" y="20"></size>

<offset x="-10" y="-10"></offset>

</iconStyle>

<balloonContentStyle>

<template>#balloonTemplate</template>

</balloonContentStyle>

</Style>

<Template gml:id="balloonTemplate">

<text>

<![CDATA[<div style="text-align:center"><strong>$[name]</strong><br /><img src="http:$[metaDataProperty.AnyMetaData.link]" alt="" width="100" height="62"/><br />$[description]</div>]]>

</text>

</Template>

</Representation>

<GeoObjectCollection>

<gml:name>Кинотеатры Нижнего Новгорода</gml:name>

<style>#styleCinimaNN</style>

<gml:featureMembers>

<GeoObject>

<gml:name>Кинотеатр Импульс</gml:name>

<gml:description>пр. Гагарина, 192</gml:description>

<gml:metaDataProperty>

<AnyMetaData>

<link>//www.map.cek.ru/images/stories/afisha/cinema/imp.jpg</link>

</AnyMetaData>

</gml:metaDataProperty>

<gml:Point>

<gml:pos>43.959184 56.237457</gml:pos>

</gml:Point>

</GeoObject><GeoObject>

<gml:name>Кинотеатр Канавинскийсий</gml:name>

<gml:description>ул. Фильченкова, 7</gml:description>

<gml:metaDataProperty>

<AnyMetaData>

<link>//www.map.cek.ru/images/stories/afisha/cinema/kanaviskiy.jpg</link>

</AnyMetaData>

</gml:metaDataProperty>

<gml:Point>

<gml:pos>43.944335 56.317977</gml:pos>

</gml:Point>

</GeoObject>



<GeoObject>

<gml:name>Кинотеатр Электрон</gml:name>

<gml:description>пр. Гагарина, 98</gml:description>

<gml:metaDataProperty>

<AnyMetaData>

<link>//www.map.cek.ru/images/stories/afisha/cinema/elektron.jpg</link>

</AnyMetaData>

</gml:metaDataProperty>

<gml:Point>

<gml:pos>43.978839 56.274389</gml:pos>

</gml:Point>

</GeoObject>

</gml:featureMembers>

</GeoObjectCollection>



</ymaps>

Если отобразить содержимое этого файла на Яндекс.Карте, мы увидим следующее

Продолжаем изучать язык YMapsML для Яндекс.Карт

Посмотреть работающий пример и исходный код можно здесь.

И так что же здесь интересного.

Первые две строки нам уже известны.

В них задается формат файла XML версии 1.0 и его кодировка utf-8.

Далее идет корневой элемент файла ymaps:ymaps. В его атрибутах описываются пространства имен XML и используемые XSD-схемы.

Элемент ymaps:ymaps содержит внутри себя два контейнера repr:Repsentation и GeoObjectCollection.

Первый  repr:Repsentation содержит в себе правила отображения геообъектов на карте – это элементы View (задает область показа геообъектов) и Style (содержит описание внешнего вида объектов), элемент Template – содержит шаблон для представления html-объектов карты.

Второй  GeoObjectCollection  служит для описания набора геообъектов.

Рассмотрим подробнее назначение и параметры каждого из элементов кода.

Элемент View включает в себя следующие теги:

mapType – задает тип карты, в нашем случае MAP обычная карта.

gml:boundedBy – задет границы области показа на карте, в нашем случае задается прямоугольная область с координатами нижнего левого угла gml:lowerCorner - 43.799509 56.231518 и правого верхнего угла gml:upperCorner - 44.121546 56.372383.

После этого задается стиль для отображения меток кинотеатров iconStyle и для содержимого балуна balloonContentStyle.

В контейнере Template задается шаблон для html-содержания балуна.

Далее в контейнере GeoObjectCollection описывается набор точек.

Задается его наименование gml:name и общий стиль для всех styleCinimaNN.

Каждая точка задается конкретными параметрами:

  • Наименование кинотеатра – name,

  • Описание – description,

  • Ссылка на картинку внутри балуна – link

  • Координаты точки – Point


Продолжение следует …

2 комментария:

  1. Давно интересует вопрос: можно ли по адресу (Город,улица,дом) получить координаты точки на карте где будет метка. Чтобы автоматизировать процесс расстановки меток(например скриптом)

    ОтветитьУдалить
  2. Это возможно с использованием сервиса геокодирования.
    Геокодеру посылается HTTP-запрос по адресу http://geocode-maps.yandex.ru/1.x/? и указываются следующие два параметра: geocode - адрес объекта, который требуется геокодировать и key - API-ключ Яндекс.Карт.
    Ответ представляет подробное описание и координаты географического объекта.
    Пример ответа смотрите здесь http://api.yandex.ru/maps/geocoder/doc/desc/concepts/response_structure.xml.

    ОтветитьУдалить