26.10.2009 10:11

KML - Объекты мультигеометрии


При помощи тегов описывается множество объектов представляющих единое целое.
Рассмотрим использование этого тега для создания модели здания с различными уровнями по высоте.

Для примера возьмем Детский комбинат №194 по адресу: г. Киров Строителей, проспект  46/1. Это двухэтажное здание с одноэтажным пристроем.



Для начала разберемся с синтаксисом...


Контейнер MultiGeometry интегрируется в контейнер Placemark

<MultiGeometry id="ID">
<!-- Описывает объекты входящие в контейнер MultiGeometry -->
<!-- Может содержать 0 или более геометрических объектов -->
</MultiGeometry>

может содержать в себе объекты следующих типов:


LinearRing - многоугольники описываемые внутри тегов
пример вставки:
<Polygon id="ID"> <!-- Контейнер вставляемого площадного объекта -->
<outerBoundaryIs>
<LinearRing>
<coordinates>
49.593455390393,58.5935921018836,3 49.5934519650358,58.5937802617008,3
49.5936267245767,58.593779839025,3 49.5936275039076,58.5937861327648,3
49.5936190764572,58.5937861303646,3 49.59361621843459,58.5938787611207,3
49.5936258637265,58.593878417688,3 49.5936263496601,58.59388345117529,3
49.5935090598955,58.59388324554361,3 49.59350898279521,58.59390658978311,3
49.5934540948042,58.5939071565509,3 49.5934541971604,58.593883184066,3
49.5933718171009,58.5938830908652,3 49.5933718613629,58.5938777040225,3
49.59338200799209,58.5938777252483,3 49.5933831474812,58.5937850756906,3
49.59337334110651,58.5937851479762,3 49.5933733637502,58.5937802996296,3
49.5933952077921,58.59378026925879,3 49.5933958900309,58.59359189985129,3
49.593455390393,58.5935921018836,3</coordinates>
<altitudeMode>relativeToGround</altitudeMode>
</LinearRing>
</outerBoundaryIs>
<altitudeMode>relativeToGround</altitudeMode>
<extrude>1</extrude>
<tessellate>1</tessellate>
</Polygon>

где,

<outerBoundaryIs> - ОБЯЗАТЕЛЬНЫЙ ЭЛЕМЕНТ содержащий элемент

<altitudeMode>- Определяет, каким образом интерпретируются компоненты altitude в элементе .

Возможные значения:

  • clampToGround (по умолчанию). Параметр высоты игнорируется (например, в теге ).
  • relativeToGround. Устанавливает высоту элемента относительно фактической высоты земной поверхности для определенного местоположения. Например, если возвышение земли для местоположения точно совпадает с уровнем моря и для высоты точки установлено значение 9 метров, высота расположения значка, метки, точки в этом режиме будет составлять 9 метров. Однако, если такие же координаты установлены над местоположением, где возвышение земли над уровнем моря составляет 10 метров, высота будет равна 19 метрам. Обычно этот режим используется для телефонных столбов или горнолыжных подъемников.
  • absolute. Устанавливает высоту координат относительно уровня моря независимо от фактического возвышения ландшафта под элементом. Например, если для высоты координаты установлено значение 10 метров в режиме высоты absolute и высота ландшафта также составляет 10 метров над уровнем моря, значок метки точки будет отображаться на уровне поверхности Земли. Если высота ландшафта составляет 3 метра над уровнем моря, метка будет отображаться на 7 метров выше ландшафта. Обычно этот режим используется для размещения авиалиний.


<extrude> - Логическое значение (по умолчанию=0). Определяет, соединен ли геометрический примитив (значок, линия, многоугольник) с поверхностью Земли. Для соединения необходимо, чтобы для элемента <altitudeMode> геометрического объекта было установлено значение relativeToGround или absolute, а также, чтобы в элементе <coordinates> компонент altitude имел значение больше 0 (то есть располагался над поверхностью Земли).

<tessellate> - Логическое значение (по умолчанию=0). Определяет, могут ли линии и пути совпадать с ландшафтом. Этот параметр применяется только к элементам LineString (путям) и LinearRing (многоугольникам), в которых <altitudeMode> имеет значение clampToGround. Для очень длинных линий необходимо включить сегментирование, чтобы они совпадали с изгибами земной поверхности (в противном случае они могут располагаться под Землей и не отображаться).


LineString - сегментированные линии описываемые внутри тегов
пример вставки:
<LineString id="ID">
<coordinates>
49.5929964380966,58.5938978197046,0
49.6935090598955,58.69388324554361,0</coordinates>
<altitudeMode>clampToGround</altitudeMode>
<extrude>1</extrude>
<tessellate>1</tessellate>
</LineString>


Model - Трехмерный объект, описанный в файле COLLADA
пример вставки:
<Model id="KMLe_10">
<Location>
<longitude>49.5934615278339</longitude>
<latitude>58.5941620473617</latitude>
<altitude>0</altitude>
</Location>
<altitudeMode>relativeToGround</altitudeMode>
<Orientation>
<heading>
</heading>
<tilt>
</tilt>
<roll>
</roll>
</Orientation>
<Scale>
<x>1</x>
<y>1</y>
<z>1</z>
</Scale>
<Link>
<refreshMode>
</refreshMode>
<refreshInterval>
</refreshInterval>
<viewRefreshMode>
</viewRefreshMode>
<viewRefreshTime>
</viewRefreshTime>
<href>Путь к файлу модели model.dae</href>
</Link>
</Model>


файл kml для рассматриваемого здания будет содержать два многоугольника и выглядеть так:

<kml xmlns="http://earth.google.com/kml/2.1">
<Document id="Test MultiGeometry">
<name>Тест объекта мультигеометрии</name>
<Placemark>
<description>Детский комбинат №194</description>
<visibility>1</visibility>
<name>г. Киров Строителей, проспект  46/1</name>
<LookAt>
<longitude>49.593035309557</longitude>
<latitude>58.5934185228002</latitude>
<range>0</range>
<tilt>0</tilt>
<heading>0</heading>
<altitudeMode>relativeToGround</altitudeMode>
<altitude>200</altitude>
</LookAt>
<Style>
<BalloonStyle>
<bgColor>FFFFFFFF</bgColor>
<textColor>FF000000</textColor>
</BalloonStyle>
</Style>
<MultiGeometry id="KMLe_47">
<Polygon id="KMLe_48">
<outerBoundaryIs>
<LinearRing>
<coordinates>49.593455390393,58.5935921018836,3 49.5934519650358,58.5937802617008,3 49.5936267245767,58.593779839025,3 49.5936275039076,58.5937861327648,3 49.5936190764572,58.5937861303646,3 49.59361621843459,58.5938787611207,3 49.5936258637265,58.593878417688,3 49.5936263496601,58.59388345117529,3 49.5935090598955,58.59388324554361,3 49.59350898279521,58.59390658978311,3 49.5934540948042,58.5939071565509,3 49.5934541971604,58.593883184066,3 49.5933718171009,58.5938830908652,3 49.5933718613629,58.5938777040225,3 49.59338200799209,58.5938777252483,3 49.5933831474812,58.5937850756906,3 49.59337334110651,58.5937851479762,3 49.5933733637502,58.5937802996296,3 49.5933952077921,58.59378026925879,3 49.5933958900309,58.59359189985129,3 49.593455390393,58.5935921018836,3</coordinates>
<altitudeMode>relativeToGround</altitudeMode>
</LinearRing>
</outerBoundaryIs>
<altitudeMode>relativeToGround</altitudeMode>
<extrude>1</extrude>
<tessellate>1</tessellate>
</Polygon>
<Polygon id="KMLe_49">
<outerBoundaryIs>
<LinearRing>
<coordinates>49.5930352576533,58.5935268973073,6 49.5932772270823,58.5935273902043,6 49.59327660139331,58.5934187389217,6 49.59350635702491,58.5934192773274,6 49.5935045586175,58.593528351028,6 49.5937446874495,58.59352756586559,6 49.5937457290187,58.5934201898752,6 49.5939680887976,58.5934207363462,6 49.59396869514111,58.5935942148961,6 49.5937549335799,58.5935936726938,6 49.59375817188761,58.5937015444391,6 49.593536601462,58.5937027122394,6 49.5935360434213,58.59359235571959,6 49.593455390393,58.5935921018836,6 49.5933958900309,58.59359189985129,6 49.59323750292261,58.5935915136812,6 49.5932359260223,58.5936993327618,6 49.5930150252467,58.59370095593449,6 49.5930141538508,58.5935898776615,6 49.59280686021721,58.5935910208649,6 49.59280881670059,58.5934181090543,6 49.593035309557,58.5934185228002,6 49.5930352576533,58.5935268973073,6</coordinates>
<altitudeMode>relativeToGround</altitudeMode>
</LinearRing>
</outerBoundaryIs>
<altitudeMode>relativeToGround</altitudeMode>
<extrude>1</extrude>
<tessellate>1</tessellate>
</Polygon>
</MultiGeometry>
</Placemark>
</Document>
</kml>

 

В качестве итога рассмотрим варианты использования объектов мультигеометрии на примере разрабатываемого сборника City_to_KML.

 

В сборнике может быть созданно два слоя трехмерных объектов:

  • первый слой - объекты в черновом качестве (каркасные). Могут быть выполнены и как модели формата COLLADA, так и как совокупность площадных объектов и объектов мультигеометрии.
  • второй слой - фотореалистичные объекты. Могут быть выполнены только как модели формата COLLADA.

 

Так что же может дать использование объектов мультигеометрии?

 

На самом деле очень много! Так для рассматриваемого примера с Детским садом было сделано два варианта, один с моделью COLLADA, а второй как объект мультигеометрии.

При внешней идентичности объектов в Google Earth файл с моделью COLLADA был в 3 раза больше!

А это признайте колосальный выйгрыш!