07.08.2009 23:33

KML - Область и как ее использовать.

В предыдущий раз, мы остановились на том что создали некоторое количество меток и создали для них различные стили. Но как Вы наверно заметили метки не исчезают при масштабировании, и при увеличении масштаба весь город скрывается за метками.
Чтобы решить эту проблему, а также снизить нагрузку на компьютер (на загружать объекты видимость которых на определенном масштабе не требуется), в языке разметки KML введено понятие Область - Region.
Работа с Областями (Region) позволяет Вам добавлять в Google Earth очень большие наборы данных, при том что эти данные  будут загружены и отображены в программе только тогда, когда они находятся в пределах взгляда и занимают определенную часть экрана.
Описание любого графического объекта заключенного в теги <Placemark></Placemark> может содержать описание области <Region></Region>.
Параметры области задаются внутри тегов <LatLonAltBox></LatLonAltBox> границами с севера <north>, юга <south>, востока <east> и запада <west>, а если Ваши данные также имеют различные параметры высоты, то в описание области включают также минимальную высоту <minAltitude>, и максимальную высоту <maxAltitude> и в итоге вы получаете область представляющую собой параллелепипед.
Вторым важным понятием Области является понятие уровня детализации который ограничивается тегами <Lod></Lod>.
Уровень детализации характеризуется параметрами <minLodPixels> и <maxLodPixels> которые позволяют Вам определять область экрана (в квадратных пикселах). При этом если заданная Вами область спроектированная на экран будет больше чем <minLodPixels> и меньше чем <maxLodPixels> то графический объект к которому прикреплено описание области станет виден. И наоборот, как только заданная Вами область быйдет за границы указанные в парамерах <minLodPixels> и <maxLodPixels> графический объект скроется.
Особым случаем может быть ситуация при которой Вы хотите чтобы объект после какого то масштаба уже не пропадал при дальнейшем приближении, в данном случае в параметре <maxLodPixels> указывается значение -1.
Дополнительными параметрами уровня детализации являются параметры <minFadeExtent> и <maxFadeExtent> определяющие степень прозрачности графического объекта <minFadeExtent> для полностью прозрачного и  <maxFadeExtent> для абсолютно непрозрачного.


Таким образом типовой формат описания области для меток выглядит так (сборник City_to_KML файла banks.kml):
<Region>
<LatLonAltBox>
<north>58.726528</north>         <!--граница области с севера-->
<south>58.479984</south>        <!--граница области с юга-->
<east>49.820948</east>            <!--граница области с востока-->
<west>49.522871</west>          <!--граница области с запада-->
</LatLonAltBox>
<Lod>
<minLodPixels>1000</minLodPixels>     <!--как только область на экране превышает 1000 кв.пикселей метки становятся видимы-->
<maxLodPixels>-1</maxLodPixels>        <!--метки не исчезают при дальнейшем увеличении-->
<minFadeExtent></minFadeExtent>     <!--не использую-->
<maxFadeExtent></maxFadeExtent>    <!--не использую-->
</Lod>
</Region>


То есть описание метки будет выглядеть так:

<Placemark>
<name>ОАО КБ «Хлынов» г. Киров ул. Урицкого, 40</name>
<description> <![CDATA[ОАО КБ «Хлынов» Головной офис</br>
г. Киров ул. Урицкого, 40.</br>
Председатель Правления ОАО КБ «Хлынов» – Николай Васильевич ПОПОВ</br>
тел.: (8332) 204-104 факс: (8332) 204-504 доп. 1250</br>
<a href="http://www.bank-hlynov.ru">Сайт компании...</a></br>
]]> </description>
<LookAt>
<longitude>49.688876</longitude>
<latitude>58.592121</latitude>
<altitude>0</altitude>
<range>200</range>
<tilt>0</tilt>
<heading>0</heading>
<altitudeMode>relativeToGround</altitudeMode>
</LookAt>
<styleUrl>#msn_hlynov</styleUrl>
<Region>
<LatLonAltBox>
<north>58.726528</north>
<south>58.479984</south>
<east>49.820948</east>
<west>49.522871</west>
</LatLonAltBox>
<Lod>
<minLodPixels>1000</minLodPixels>
<maxLodPixels>-1</maxLodPixels>
</Lod>
</Region>
<Point>
<coordinates>49.688876,58.592121,0</coordinates>
</Point>
</Placemark>

ВАЖНО!

Если все ваши графические объекты в определенном контейнере будь то Документ <Document></Document>, Папка <Folder></Folder> или Cетевая ссылка <NetworkLink></NetworkLink> должны иметь одинаковый уровень детализации, то описание области вам нужно поместить в соответствующий раздел контейнера. Этим Вы уменьшите размеры своих файлов и сэкономите свое время при редактировании.
Также имейте ввиду, что в KML элементы описываются как объекты и дочерние объекты наследуя свойства родительских могут иметь собственные свойства.
Таким образом Вы можете задать уровень детализации для всех объектов в документе и при этом каким то из объектов эти свойства изменить.


Пример - описание уровня детализации вынесено в описание Документа, но для одного из филиалов Банка "Хлынов" заданн свой собственный уровень детализации (Появляется раньше).

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2"
xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>

<!--Начало описания уровня детализации для всех объектов-->
<Region>
<LatLonAltBox>
<north>58.726528</north>         <!--граница области с севера-->
<south>58.479984</south>        <!--граница области с юга-->
<east>49.820948</east>            <!--граница области с востока-->
<west>49.522871</west>          <!--граница области с запада-->
</LatLonAltBox>
<Lod>
<minLodPixels>1000</minLodPixels>       <!--как только область на экране превышает 1000 кв.пикселей метки становятся видимы-->
<maxLodPixels>-1</maxLodPixels>          <!--метки не исчезают при дальнейшем увеличении-->
<minFadeExtent></minFadeExtent>        <!--не использую-->
<maxFadeExtent></maxFadeExtent>      <!--не использую-->
</Lod>
</Region>
<!--Конец описания уровня детализации для всех объектов-->
<name>Банки</name>
<Style id="sn_hlynov">
<IconStyle>
<scale>1.0</scale>
<Icon>
<href>http://maps.google.com/mapfiles/kml/shapes/euro.png</href>
</Icon>
<hotSpot x="0.5" y="0" xunits="fraction" yunits="fraction"/>
</IconStyle>
<LabelStyle>
<color>0</color>                       <!-- Не отображать название метки -->
<scale>1</scale>
</LabelStyle>
<ListStyle>
</ListStyle>
</Style>
<Style id="sh_hlynov">
<IconStyle>
<scale>1.4</scale>
<Icon>
<href>http://maps.google.com/mapfiles/kml/shapes/euro.png</href>
</Icon>
<hotSpot x="0.5" y="0" xunits="fraction" yunits="fraction"/>
</IconStyle>
<LabelStyle>
<color>ffffffff</color>                <!-- Белый цвет -->
<scale>1.2</scale>
</LabelStyle>
<ListStyle>
</ListStyle>
</Style>
<StyleMap id="msn_hlynov">
<Pair>
<key>normal</key>
<styleUrl>#sn_hlynov</styleUrl>
</Pair>
<Pair>
<key>highlight</key>
<styleUrl>#sh_hlynov</styleUrl>
</Pair>
</StyleMap>
<Style id="sn_ubrir">
<IconStyle>
<scale>1.0</scale>
<Icon>
<href>http://maps.google.com/mapfiles/kml/shapes/dollar.png</href>
</Icon>
<hotSpot x="0.5" y="0" xunits="fraction" yunits="fraction"/>
</IconStyle>
<LabelStyle>
<color>0</color>                       <!-- Не отображать название метки -->
<scale>1</scale>
</LabelStyle>
<ListStyle>
</ListStyle>
</Style>
<Style id="sh_ubrir">
<IconStyle>
<scale>1.4</scale>
<Icon>
<href>http://maps.google.com/mapfiles/kml/shapes/dollar.png</href>
</Icon>
<hotSpot x="0.5" y="0" xunits="fraction" yunits="fraction"/>
</IconStyle>
<LabelStyle>
<color>ffffffff</color>                <!-- Белый цвет -->
<scale>1.2</scale>
</LabelStyle>
<ListStyle>
</ListStyle>
</Style>
<StyleMap id="msn_ubrir">
<Pair>
<key>normal</key>
<styleUrl>#sn_ubrir</styleUrl>
</Pair>
<Pair>
<key>highlight</key>
<styleUrl>#sh_ubrir</styleUrl>
</Pair>
</StyleMap>

<Placemark>
<name>ОАО КБ «Хлынов» г. Киров ул. Урицкого, 40</name>
<description>ОАО КБ «Хлынов» Головной офис
г. Киров ул. Урицкого, 40.
Председатель Правления ОАО КБ «Хлынов» – Николай Васильевич ПОПОВ
тел.: (8332) 204-104 факс: (8332) 204-504 доп. 1250</description>
<LookAt>
<longitude>49.688876</longitude>
<latitude>58.592121</latitude>
<altitude>0</altitude>
<range>200</range>
<tilt>0</tilt>
<heading>0</heading>
<altitudeMode>relativeToGround</altitudeMode>
</LookAt>
<styleUrl>#msn_hlynov</styleUrl>
<!--Начало описания собственного уровня детализации-->
<Region>
<LatLonAltBox>
<north>58.726528</north>        <!--граница области с севера-->
<south>58.479984</south>        <!--граница области с юга-->
<east>49.820948</east>            <!--граница области с востока-->
<west>49.522871</west>          <!--граница области с запада-->
</LatLonAltBox>
<Lod>
<minLodPixels>500</minLodPixels>       <!--как только область на экране превышает 500 кв.пикселей метки становятся видимы-->
<maxLodPixels>-1</maxLodPixels>        <!--метки не исчезают при дальнейшем увеличении-->
<minFadeExtent></minFadeExtent>     <!--не использую-->
<maxFadeExtent></maxFadeExtent>    <!--не использую-->
</Lod>
</Region>
<!--Конец описания собственного уровня детализации-->
<Point>
<coordinates>49.688876,58.592121,0</coordinates>
</Point>
</Placemark>
<Placemark>
<name>ОАО КБ «Хлынов» г. Киров ул. Воровского, 115/1</name>
<description>ОАО КБ «Хлынов» Дополнительный офис
г. Киров, ул. Воровского, 115/1.
Управляющий – Шихова Светлана Александровна
тел. 52-21-66, 27-34-96 (факс), 27-84-66</description>
<LookAt>
<longitude>49.61554</longitude>
<latitude>58.597958</latitude>
<altitude>0</altitude>
<range>200</range>
<tilt>0</tilt>
<heading>0</heading>
<altitudeMode>relativeToGround</altitudeMode>
</LookAt>
<styleUrl>#msn_hlynov</styleUrl>
<Point>
<coordinates>49.61554,58.597958,0</coordinates>
</Point>
</Placemark>

<Placemark>
<name>Филиал "Кировский" ОАО "УБРиР" г. Киров, ул. Воровского, 21а</name>
<description>Филиал "Кировский" ОАО "УБРиР"
г. Киров, ул. Воровского, 21а.
Телефон: (8332) 37-17-35
Факс: (8332) 37-17-35
Директор — Козминых Сергей Юрьевич</description>
<LookAt>
<longitude>49.674697</longitude>
<latitude>58.594486</latitude>
<altitude>0</altitude>
<range>200</range>
<tilt>0</tilt>
<heading>0</heading>
<altitudeMode>relativeToGround</altitudeMode>
</LookAt>
<styleUrl>#msn_ubrir</styleUrl>
<Point>
<coordinates>49.674697,58.594486,0</coordinates>
</Point>
</Placemark>
</Document>
</kml>