Режимы высоты

Многие KML-компоненты содержат координату или элемент <altitude>, который определяет высоту этого компонента относительно поверхности земли, уровня моря или морского дна. Значение высоты также может содержаться в элементах <AbstractView>.

Если указывается значение высоты, следует добавить и элемент <altitudeMode>, который требуется для правильной интерпретации этого значения. Способы определения высоты:

  • от поверхности земли (relativeToGround);
  • от уровня моря (absolute);
  • от дна основных водоемов (relativeToSeaFloor).

В режимах clampToGround и clampToSeaFloor значение высоты игнорируется.

Режимы высоты, привязанные к морскому дну, и пространство имен расширений KML

Режимы высоты, привязанные к морскому дну, задаются с помощью расширений стандартного KML-кода. Для этого служит префикс gx. Чтобы использовать их, добавьте в открывающий тег <kml> KML-файла нужный URI пространства имен:

<kml xmlns="http://www.opengis.net/kml/2.2"
     xmlns:gx="http://www.google.com/kml/ext/2.2">

Затем замените элемент <gx:altitudeMode> на <altitudeMode>, чтобы использовать режим clampToSeaFloor или relativeToSeaFloor.

Обратите внимание на то, что некоторые геобраузеры не поддерживают пространства имен с префиксом gx (в Google Планета Земля 5.0 их поддержка предусмотрена).

Определение режима высоты

absolute

В режиме абсолютной высоты (absolute) расстояние до компонента измеряется от уровня моря независимо от рельефа суши. Таким образом, компонент можно расположить под землей целиком или частично (второй вариант показан в примере ниже). В режиме абсолютной высоты допустимы отрицательные значения, позволяющие размещать компоненты под уровнем моря.

Это режим следует использовать, когда известно точное значение высоты. В частности, это позволяет отображать GPS-траектории полета или ныряния.

Пример

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
 
<GroundOverlay>
  <name>Пример absolute</name>
  <Icon>
    <href>rectangle.jpg</href>
    <viewBoundScale>0.75</viewBoundScale>
  </Icon>
  <altitude>2744.0</altitude>
  <altitudeMode>absolute</altitudeMode>
  <LatLonBox>
    <north>48.783</north>
    <south>48.751</south>
    <east>-121.75</east>
    <west>-121.89</west
    <rotation>-30</rotation>
  </LatLonBox>
</GroundOverlay>

</kml>

clampToGround

В этом режиме все значения высоты игнорируются, а KML-компоненты закрепляются на поверхности земли в соответствии с ее рельефом. Это позволяет, например, "накрыть" поверхность земли элементом GroundOverlay. Компонент, расположенный над одним из основных водоемов, будет закреплен на уровне моря.

Если режим высоты для KML-компонента не указан, по умолчанию используется clampToGround.

Пример

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <GroundOverlay> <name>Пример clampToGround</name> <Icon> <href>rectangle.jpg</href> <viewBoundScale>0.75</viewBoundScale> </Icon> <altitude>2744.0</altitude> <altitudeMode>clampToGround</altitudeMode> <LatLonBox> <north>48.783</north> <south>48.751</south> <east>-121.75</east> <west>-121.89</west> <rotation>-30</rotation> </LatLonBox> </GroundOverlay> </kml>

clampToSeaFloor

Этот режим включен в пространство имен расширений. Дополнительную информацию можно найти в разделе Режимы высоты, привязанные к морскому дну, и пространство имен расширений KML.

Как и в режиме clampToGround, значение высоты игнорируется. Компонент закрепляется на дне одного из основных водоемов, а если такого водоема нет поблизости, то на поверхности земли.

Пример

<?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">   <!-- обязательно при использовании элементов с префиксом gx -->
 
<Placemark>
  <name>Пример clampToSeaFloor</name>		
  <Polygon>
    <tessellate>1</tessellate>
    <gx:altitudeMode>clampToSeaFloor</gx:altitudeMode>
    <outerBoundaryIs>
      <LinearRing>
        <coordinates>
          146.793,12.213,0
          146.803,12.202,0 
          146.829,12.218,0 
          146.807,12.226,0 
          146.793,12.213,0 
        </coordinates>
      </LinearRing>
    </outerBoundaryIs>
  </Polygon>
</Placemark>

</kml>

relativeToGround

В этом режиме высота измеряется от точки на поверхности земли, находящейся непосредственно под компонентом.

Режим relativeToGround подходит, например, для правильного размещения верхушек опор ЛЭП в холмистой местности. Если высота всех опор одинакова и составляет 20 метров, их верхушки будут располагаться выше или ниже в зависимости от рельефа.

Пример

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Placemark> <name>Пример relativeToGround</name> <LineString> <extrude>1</extrude> <altitudeMode>relativeToGround</altitudeMode> <coordinates> -121.835,48.754,700 -121.828,48.764,700 -121.818,48.776,700 -121.794,48.787,700 -121.778,48.781,700 -121.766,48.771,700 -121.768,48.757,700 -121.773,48.747,700 </coordinates> </LineString> </Placemark> </kml>

relativeToSeaFloor

Этот режим включен в пространство имен расширений. Дополнительную информацию можно найти в разделе Режимы высоты, привязанные к морскому дну, и пространство имен расширений 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">   <!-- обязательно при использовании элементов с префиксом gx -->

<Placemark>
  <name>Пример relativeToSeaFloor</name> 
  <LineString>
    <extrude>1</extrude>
    <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
    <coordinates>
      146.825,12.233,400
      146.820,12.222,400
      146.812,12.212,400
      146.796,12.209,400
      146.788,12.205,400
    </coordinates>
  </LineString>
</Placemark>

</kml>