Многие 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>