Руководство по KML

KML – это формат файлов, который используется для отображения географических данных в геобраузерах, таких как Google Планета Земля, Google Карты и Google Карты для мобильных устройств. KML создан на основе стандарта XML и использует основанную на тегах структуру с вложенными элементами и атрибутами. Регистр тегов учитывается, поэтому их необходимо указывать точно в той форме, в какой они приведены в Справке по KML, где также указано, какие теги обязательны, а какие – нет. Теги внутри элемента должны располагаться в том порядке, который приведен в Справке.

Если вы никогда не работали с KML, начните с изучения этой страницы и прилагаемых файлов с примерами (SamplesInEarth и SamplesInMaps), чтобы ознакомиться со структурой KML-файла и основными тегами. В первом разделе описаны компоненты, которые можно создать в пользовательском интерфейсе Google Планеты Земля, включая метки, описания, наложения на земную поверхность, пути и многоугольники. Во втором разделе описаны компоненты, для определения которых потребуется текстовый редактор. Текстовый файл, сохраненный с расширением .kml или .kmz, распознается геобраузерами.

Совет. Чтобы получить KML-код компонента из Google Планеты Земля, нажмите на него правой кнопкой мыши в окне 3D-просмотра и выберите "Копировать", а затем вставьте содержание буфера обмена в любой текстовый редактор. Компонент, отображаемый в геобраузере, будет преобразован в KML-код. Рекомендуем попробовать эту функцию в действии.

Все примеры, которые приводятся на этой странице, можно найти в файле KML_Samples. Прежде чем продолжать, загрузите его, чтобы просматривать примеры в интерфейсе Google Планеты Земля.

Дополнительная информация

В Справке по KML 2.2 формат KML описан более подробно. Если вы уже работали с XML-кодом, рекомендуем ознакомиться со схемой KML 2.2.

Инструкции по применению отдельных компонентов KML можно найти в Руководстве разработчика.

Содержание

  1. Простые KML-документы
    1. Метки
    2. Описательный HTML в метках
    3. Наложения на земную поверхность
    4. Пути
    5. Многоугольники
  2. Расширенные KML-документы
    1. Стили геометрии
    2. Стили выделенных значков
    3. Наложения на экране
    4. Сетевые ссылки
  3. Типы MIME в KML

Простые KML-документы

Самые простые KML-документы можно создавать прямо в интерфейсе Google Планеты Земля; для этого даже не потребуется текстовый редактор. Таким способом можно создавать и изменять метки, наложения на земную поверхность, пути и многоугольники.

Метки

Метка является одним из самых часто используемых компонентов в Google Планете Земля. Она служит для указания положения на земной поверхности и представлена значком булавки желтого цвета. В самом простом варианте метка содержит только элемент <Point>, который определяет ее положение. Вы также можете указать ее название и персонализированный значок или добавить другие элементы.

Откройте файл KML_Samples в Google Планете Земля и перейдите в папку Placemarks. В ней представлены три типа меток: проcтая, плавающая и выдавленная. Ниже показан KML-код простой метки.

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Placemark>
<name>Простая метка</name>
<description>Привязана к земной поверхности. Приспосабливается к рельефу местности.</description>
<Point>
<coordinates>-122.0822035425683,37.42228990140251,0</coordinates>
</Point>
</Placemark> </kml>

Рассмотрим структуру этого файла.

  • Заголовок XML: с него начинается каждый KML-файл. Перед заголовком не должно быть никаких символов или пробелов.
  • Декларация пространства имен KML: вторая строка каждого файла формата KML 2.2.
  • Объект Placemark, содержащий следующие элементы:
    • name – имя, которое используется в качестве ярлыка метки;
    • description – описание, которое отображается во всплывающем окне, привязанном к метке;
    • Point – координаты, определяющие положение метки на земной поверхности (долгота и широта, иногда также высота).

Если вы не можете найти эту метку на карте, подсказываем: она расположена прямо на 41-м корпусе Google – именно там разрабатывалась Google Планета Земля.

То, что пользователи Google Планеты Земля видят как метку, является элементом <Placemark> с дочерним элементом <Point> в формате KML. Это единственный способ отобразить метку с ярлыком в окне 3D-просмотра. По умолчанию метка имеет вид уже знакомой вам желтой булавки. В KML-коде элемент <Placemark> может содержать один или несколько геометрических элементов, таких как ломаные линии (LineString), многоугольники (Polygon) или модели (Model), но только <Placemark> с дочерним элементом <Point> может отображаться как метка с ярлыком. Элемент <Point> служит для правильного размещения метки на карте, но сам не имеет графического представления.

Описательный HTML в метках

В файле KML_Samples приведены исчерпывающие примеры форматирования текста метки, включая добавление ссылок, изменение размера и стиля шрифта, выравнивание и использование таблиц. Чтобы просмотреть полный список возможностей, скопируйте и вставьте в текстовый редактор пример Descriptive HTML (в папке Styles and Markup).

Авторазметка в Google Планете Земля 4.0 и более поздних версий

В Google Планете Земля 4.0 предусмотрена функция авторазметки, которая преобразует текст наподобие www.google.com в активные гиперссылки. Текст, заключенный в теги <description> или <Snippet>, а также в элемент <text> внутри <BalloonStyle>, автоматически преобразуется в стандартные HTTP-ссылки. Добавлять теги <a href= ...> вручную не нужно.

Использование элемента CDATA

Чтобы добавить стандартный HTML-код в тег <description>, его необходимо заключить в тег CDATA. Если этого не сделать, угловые скобки придется записывать в виде ссылок на объекты, иначе HTML-код будет неправильно анализироваться (например, символ > потребуется писать как &gt;, а символ < – как &lt;). Это особенность языка XML в целом, а не только Google Планеты Земля.

Обратите внимание на HTML-разметку с тегами CDATA и без них. Сначала рассмотрим элемент <description> с тегами CDATA.

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <Placemark> <name>Пример с тегами CDATA</name> <description> <![CDATA[ <h1>Теги CDATA имеют смысл!</h1> <p><font color="red">Без ссылок на объекты текст <i>удобнее читать</i> и <b>проще писать</b>.</font></p> ]]> </description> <Point> <coordinates>102.595626,14.996729</coordinates> </Point> </Placemark> </Document> </kml>

Теперь посмотрим, как оформляется <description> без тегов CDATA.

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <Placemark> <name>Пример ссылок на объекты</name> <description> &lt;h1&gt;Ссылки на объекты так неудобно записывать!&lt;/h1&gt; &lt;p&gt;&lt;font color="green"&gt;Без ссылок на объекты текст &lt;i&gt;удобнее читать&lt;/i&gt; и &lt;b&gt;проще писать&lt;/b&gt;.&lt;/font&gt;&lt;/p&gt; </description> <Point> <coordinates>102.594411,14.998518</coordinates> </Point> </Placemark> </Document> </kml>

Наложения на земную поверхность

Наложения на земную поверхность позволяют "накрыть" рельеф местности определенным изображением. Элемент <Icon> содержит ссылку на JPG-файл изображения. Ниже приведен пример из файла KML_Samples, показывающий извержение Этны в 2001 году.

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Folder>
<name>Наложения на земную поверхность</name>
<description>Примеры наложений</description>
<GroundOverlay>
<name>Крупное наложение</name>
<description>Извержение Этны 13 июля 2001 года.</description>
<Icon>
<href>http://developers.google.com/kml/documentation/images/etna.jpg</href>
</Icon>
<LatLonBox>
<north>37.91904192681665</north>
<south>37.46543388598137</south>
<east>15.35832653742206</east>
<west>14.60128369746704</west>
<rotation>-0.1556640799496235</rotation>
</LatLonBox>
</GroundOverlay>
</Folder> </kml>

Обратите внимание на то, что первые две строки файла точно такие же, как в первом примере: XML-заголовок и декларация пространства имен KML.

Для группировки и обозначения содержания в примере используется папка Ground Overlays. Обратите внимание на то, что она появляется в панели "Метки", как только вы загружаете файл KML_Samples в Google Планету Земля.

Расположение наложения определяется с помощью тега <LatLonBox>, в котором указываются крайние значения южной и северной широты, а также восточной и западной долготы. Кроме того, если ось y изображения не направлена строго на север, задается значение поворота. В примере используется JPEG-изображение, но Google Планета Земля также поддерживает графические форматы BMP, GIF, TIFF, TGA и PNG.

Пути

В Google Планете Земля можно создавать пути разных типов, что позволяет подойти к отображению данных творчески. В KML-коде путь представлен элементом <LineString>. Изучите пример Absolute Extruded в папке Paths: линия определена с помощью указанного ниже кода.

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document>
<name>Пути</name>
<description>Примеры путей. Значение тега tessellate по умолчанию
равно 0. Чтобы создать ломаную линию, значение необходимо
изменить непосредственно в KML-коде.</description> <Style id="yellowLineGreenPoly">
<LineStyle>
<color>7f00ffff</color>
<width>4</width>
</LineStyle>
<PolyStyle>
<color>7f00ff00</color>
</PolyStyle>
</Style> <Placemark>
<name>Линия вдоль земной поверхности</name>
<description>Прозрачная зеленая стена с желтыми краями</description>
<styleUrl>#yellowLineGreenPoly</styleUrl>
<LineString>
<extrude>1</extrude>
<tessellate>1</tessellate>
<altitudeMode>absolute</altitudeMode>
<coordinates> -112.2550785337791,36.07954952145647,2357
-112.2549277039738,36.08117083492122,2357
-112.2552505069063,36.08260761307279,2357
-112.2564540158376,36.08395660588506,2357
-112.2580238976449,36.08511401044813,2357
-112.2595218489022,36.08584355239394,2357
-112.2608216347552,36.08612634548589,2357
-112.262073428656,36.08626019085147,2357
-112.2633204928495,36.08621519860091,2357
-112.2644963846444,36.08627897945274,2357
-112.2656969554589,36.08649599090644,2357 </coordinates>
</LineString> </Placemark>
</Document> </kml>

Обратите внимание на то, что это одна и та же линия, отображаемая на определенной высоте над землей. Благодаря тегу <tessellate> линия разбивается на короткие отрезки, а тег <extrude> отвечает за ее выравнивание относительно земной поверхности.

Многоугольники

С помощью многоугольников можно моделировать здания и другие объекты. Примеры можно найти в папке Polygons файла KML_Samples.

Модель здания Пентагона построена так: внутренний и внешний контуры "вытянуты" вниз к земной поверхности. Ниже показан код.

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Placemark>
<name>Пентагон</name>
<Polygon>
<extrude>1</extrude>
<altitudeMode>relativeToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing>
<coordinates>
-77.05788457660967,38.87253259892824,100
-77.05465973756702,38.87291016281703,100
-77.05315536854791,38.87053267794386,100
-77.05552622493516,38.868757801256,100
-77.05844056290393,38.86996206506943,100
-77.05788457660967,38.87253259892824,100
</coordinates>
</LinearRing>
</outerBoundaryIs>
<innerBoundaryIs>
<LinearRing>
<coordinates>
-77.05668055019126,38.87154239798456,100
-77.05542625960818,38.87167890344077,100
-77.05485125901024,38.87076535397792,100
-77.05577677433152,38.87008686581446,100
-77.05691162017543,38.87054446963351,100
-77.05668055019126,38.87154239798456,100
</coordinates>
</LinearRing>
</innerBoundaryIs>
</Polygon>
</Placemark> </kml>

Расширенные KML-документы

В этом разделе представлены некоторые элементы KML, которые можно задать только с помощью текстового редактора, такие как общие стили геометрии, выделенные значки меток и наложения на экране. Написание KML-кода вручную требует больше знаний и опыта, чем создание компонентов в интерфейсе Google Планеты Земля, однако немного попрактиковавшись, вы сможете без труда добавлять эти эффекты в KML-файлы.

Стили геометрии

Вы уже знаете, как создавать компоненты в интерфейсе Google Планеты Земля и как выглядит их KML-код. Наверняка вы обратили внимание на то, что стили играют важную роль при отображении данных. Со временем вам может потребоваться определять собственные стили.

Если определить элемент <Style> в начале KML-документа и присвоить ему идентификатор, этот стиль можно будет применять к геометрическим элементам, меткам и наложениям, определенным в других разделах документа. Так как один и тот же стиль можно применять к нескольким элементам, используется термин общие стили. Достаточно один раз определить <Style>, чтобы затем ссылаться на него с помощью элемента <styleUrl>. Если элемент <Style> определен в том же файле, перед его идентификатором необходимо добавить знак решетки (#). Если же он определен в другом файле, в элементе <styleUrl> необходимо указать полный URL.

В файле KML_Samples представлено несколько общих стилей, которые определены в начале файла и обозначены идентификаторами. Рекомендуем использовать описательные идентификаторы – так вам будет проще отличать стили друг от друга. Ниже показан пример стиля transBluePoly, который определяет для многоугольников прозрачную голубую заливку и белые границы толщиной 1,5 (белый цвет задан по умолчанию). Этот стиль использован в модели 41-го корпуса Google (в папке Polygons).

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Style id="transBluePoly">
<LineStyle>
<width>1.5</width>
</LineStyle>
<PolyStyle>
<color>7dff0000</color>
</PolyStyle>
</Style> <Placemark>
<name>Корпус 41</name>
<styleUrl>#transBluePoly</styleUrl>
<Polygon>
<extrude>1</extrude>
<altitudeMode>relativeToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing>
<coordinates> -122.0857412771483,37.42227033155257,17
-122.0858169768481,37.42231408832346,17
-122.085852582875,37.42230337469744,17
-122.0858799945639,37.42225686138789,17
-122.0858860101409,37.4222311076138,17
-122.0858069157288,37.42220250173855,17
-122.0858379542653,37.42214027058678,17
-122.0856732640519,37.42208690214408,17
-122.0856022926407,37.42214885429042,17
-122.0855902778436,37.422128290487,17
-122.0855841672237,37.42208171967246,17
-122.0854852065741,37.42210455874995,17
-122.0855067264352,37.42214267949824,17
-122.0854430712915,37.42212783846172,17
-122.0850990714904,37.42251282407603,17
-122.0856769818632,37.42281815323651,17
-122.0860162273783,37.42244918858722,17
-122.0857260327004,37.42229239604253,17
-122.0857412771483,37.42227033155257,17 </coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</Document>
</kml>

Обратите внимание на то, что <Style> является дочерним элементом элемента <Placemark>, а не геометрического элемента, к которому он применяется.

Стили выделенных значков

Пример Highlighted Icon в папке Styles and Markup демонстрирует, как задать эффект выделения в KML. В документе необходимо определить два стиля: normalPlacemark (для метки в обычном состоянии) и highlightPlacemark (для выделения метки, на которую наведен указатель мыши). В элементе <StyleMap> содержатся две пары "ключ-значение", определяющие стиль значка в зависимости от его состояния. Состояния может быть два: обычное и выделенное (при наведении мыши).

Чтобы определить стиль значка при наведении мыши, выполните указанные ниже действия.

  1. Создайте элемент <Style> для значка метки в обычном состоянии и присвойте ему идентификатор (в примере это normalPlacemark). <Style> содержит элемент <Icon> со ссылкой <href>, указывающей на используемое изображение, как показано ниже.
  2. Создайте элемент <Style> для значка метки в выделенном состоянии и присвойте ему идентификатор (в примере это highlightPlacemark).
  3. Создайте элемент <StyleMap> и присвойте ему идентификатор (в примере это exampleStyleMap), на который будет ссылаться компонент Placemark.
  4. Определите внутри элемента <StyleMap> ссылку на стиль #normalPlacemark для метки в обычном состоянии (normal).
  5. Определите внутри элемента <StyleMap> ссылку на стиль #highlightPlacemark для выделенной метки (highlight).
  6. Добавьте к компоненту Placemark элемент <styleUrl>, ссылающийся на "#exampleStyleMap.
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Выделенный значок</name>
<description>Наведите указатель мыши на значок, чтобы увидеть, как он выглядит в выделенном состоянии</description>
<Style id="highlightPlacemark">
<IconStyle>
<Icon>
<href>http://maps.google.com/mapfiles/kml/paddle/red-stars.png</href>
</Icon>
</IconStyle>
</Style>
<Style id="normalPlacemark">
<IconStyle>
<Icon>
<href>http://maps.google.com/mapfiles/kml/paddle/wht-blank.png</href>
</Icon>
</IconStyle>
</Style>
<StyleMap id="exampleStyleMap">
<Pair>
<key>normal</key>
<styleUrl>#normalPlacemark</styleUrl>
</Pair>
<Pair>
<key>highlight</key>
<styleUrl>#highlightPlacemark</styleUrl>
</Pair>
</StyleMap>
<Placemark>
<name>Наведите указатель мыши на значок</name>
<styleUrl>#exampleStyleMap</styleUrl>
<Point>
<coordinates>-122.0856545755255,37.42243077405461,0</coordinates>
</Point>
</Placemark>
</Document>
</kml>

Наложения на экране

В отличие от наложений на земную поверхность, наложения на экране нельзя создавать в интерфейсе Google Планеты Земля. Примеры можно найти в папке Screen Overlays файла KML_Samples.

В качестве иллюстрации включите папку Absolute Positioning: Top left файла KML_Samples. В левом верхнем углу окна просмотра появится наложение. Ниже показан его KML-код.

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<ScreenOverlay>
<name>Absolute Positioning: Top left</name>
<Icon>
<href>http://developers.google.com/kml/documentation/images/top_left.jpg</href>
</Icon>
<overlayXY x="0" y="1" xunits="fraction" yunits="fraction"/>
<screenXY x="0" y="1" xunits="fraction" yunits="fraction"/>
<rotationXY x="0" y="0" xunits="fraction" yunits="fraction"/>
<size x="0" y="0" xunits="fraction" yunits="fraction"/>
</ScreenOverlay>
</kml>

Размещение наложения определяется следующим образом: точка изображения, заданная элементом <overlayXY>, привязывается к точке на экране, заданной элементом <screenXY>. В данном случае левый верхний угол изображения (0,1) выравнивается по левому верхнему углу экрана.

Просмотрите другие примеры в папке, чтобы лучше понять принцип определения фиксированных изображений и изображений, размер которых меняется в зависимости от размера экрана. Обратите внимание на то, что для большей точности вместо xunits и yunits можно использовать пиксели. Подробные сведения приведены в Справке по KML 2.2.

Сетевые ссылки

Сетевая ссылка состоит из элемента <Link> с гипертекстовой ссылкой <href>, указывающей на загружаемый файл. Элемент <href> может содержать локальную ссылку или абсолютный URL. Таким образом, <NetworkLink> может служить не только для загрузки файлов из сети.

Элемент <href> может указывать на расположение любого из следующих файлов:

  • файла изображения, который используется в стилях значков, наложениях на земную поверхность или наложениях на экране;
  • файла модели, которая используется в элементе <Model>;
  • KML- или KMZ-файла, загружаемого с помощью сетевой ссылки.

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

До сих пор мы рассматривали только случаи, в которых KML-код передается в Google Планету Земля с локального компьютера. Сетевые ссылки позволяют получать содержание с удаленных серверов и, как правило, используются для предоставления данных большому количеству пользователей. Таким образом, если в содержание необходимо внести изменения, достаточно сделать это в файле источника, и все пользователи автоматически увидят обновленную версию.

CGI-скрипты для KML

Элемент <href> сетевой ссылки может не только указывать на файлы со статическими данными, но и на динамическое содержание, генерируемое, например, CGI-скриптом на сетевом сервере. При наличии базовых навыков программирования программирования на языках PHP, Python или Perl вы сможете написать скрипт для передачи потоковых данных (или файлов) в формате KML по сетевым ссылкам.

Чтобы передавать KML-код с помощью сетевого CGI-скрипта, должны выполняться два условия.

Когда клиент (Google Планета Земля) отправляет запрос на сервер, сервер должен, во-первых, возвратить код ответа HTTP 200, а во-вторых, предоставить содержание типа text/plain или application/vnd.google-earth.kml+xml.

Ответ должен содержать действительный KML-код. Чем сложнее приложение, тем важнее предусмотреть правильную обработку ошибок.

Совет. Самый простой способ обработки ошибок – включение сообщения об ошибке в название папки. Предположим, сервер возвратил строку <Folder><name>database inaccessible</name></Folder>. Такой ответ более информативен и полезен для пользователя (теперь он знает, что база данных недоступна), чем разрыв соединения.

В примерах ниже используется Python, однако то же самое можно написать на любом другом языке.

Создание случайной метки

Ниже показан скрипт на языке Python, генерирующий случайные значения широты (latitude) и долготы (longitude) и добавляющий их в элемент <coordinates> элемента <Point>. При обновлении сетевой ссылки скрипт запускается снова и генерирует KML-код с новыми значениями широты и долготы.

#!/usr/bin/python

import random

latitude = random.randrange(-90, 90)
longitude = random.randrange(-180, 180)
kml = (
   '<?xml version="1.0" encoding="UTF-8"?>\n'
   '<kml xmlns="http://www.opengis.net/kml/2.2">\n'
   '<Placemark>\n'
   '<name>Random Placemark</name>\n'
   '<Point>\n'
   '<coordinates>%d,%d</coordinates>\n'
   '</Point>\n'
   '</Placemark>\n'
   '</kml>'
   ) %(longitude, latitude)
print 'Content-Type: application/vnd.google-earth.kml+xml\n'
print kml

Теперь рассмотрим пример KML-файла с сетевой ссылкой, по которой загружается скрипт Python.

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Folder>
<name>Сетевые ссылки</name>
<visibility>0</visibility>
<open>0</open>
<description>Пример сетевой ссылки 1</description>
<NetworkLink>
<name>Случайная метка</name>
<visibility>0</visibility>
<open>0</open>
<description>Простой скрипт на стороне сервера, генерирующий новую
случайную метку по каждому запросу</description>
<refreshVisibility>0</refreshVisibility>
<flyToView>0</flyToView>
<Link>
<href>http://yourserver.com/cgi-bin/randomPlacemark.py</href>
</Link>
</NetworkLink>
</Folder>
</kml>

Запросы на обновление при просмотре

Стандартная сетевая ссылка работает только в одном направлении: данные поступают с севера в Google Планету Земля. Обновление при просмотре позволяет передавать данные в обоих направлениях, причем Google Планета Земля в определенный момент времени возвращает серверу координаты области просмотра. Это может происходить каждые n секунд, минут или часов либо по истечении определенного времени после того, как область просмотра перестала смещаться. Подробные сведения приведены в разделе <viewRefreshMode> Справки по KML 2.2.

Координаты возвращаются серверу с помощью метода HTTP GET, который добавляет их в следующем виде (показана информация в заданном квадрате поиска):

GET /path/to/sever/script/query?BBOX=[западная_долгота, южная_широта, восточная_долгота, северная_широта] HTTP/1.1

Если запрос выполняется в тот момент, когда пользователь рассматривает область Сан-Франциско, координаты могут выглядеть так:

GET /path/to/server/script/query?BBOX=-122.497790,37.730385,-122.380087,37.812331 HTTP/1.1

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

Определение точки в центре области просмотра

Ниже показан выполняемый на стороне сервера скрипт Python, который анализирует сообщение, возвращаемое Google Планетой Земля, и в ответ размещает метку в центре экрана. Новая метка генерируется при каждом обновлении сетевой ссылки.

#!/usr/bin/python

import cgi

url = cgi.FieldStorage()
bbox = url['BBOX'].value
bbox = bbox.split(',')
west = float(bbox[0])
south = float(bbox[1])
east = float(bbox[2])
north = float(bbox[3])

center_lng = ((east - west) / 2) + west
center_lat = ((north - south) / 2) + south

kml = ( 
   '<?xml version="1.0" encoding="UTF-8"?>\n'
   '<kml xmlns="http://www.opengis.net/kml/2.2">\n'
   '<Placemark>\n'
   '<name>Метка в центре области просмотра</name>\n'
   '<Point>\n'
   '<coordinates>%.6f,%.6f</coordinates>\n'
   '</Point>\n'
   '</Placemark>\n'
   '</kml>'
   ) %(center_lng, center_lat)

print 'Content-Type: application/vnd.google-earth.kml+xml\n'
print kml

А так выглядит KML-код сетевой ссылки, которая загружает показанный выше скрипт:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Folder>
<name>Сетевые ссылки</name>
<visibility>0</visibility>
<open>0</open>
<description>Пример сетевой ссылки 2</description>
<NetworkLink>
<name>Метка в центре области просмотра</name>
<visibility>0</visibility>
<open>0</open>
<description>Обновление по виду позволяет удаленному серверу определить
точку в центре экрана и возвратить метку.</description>
<refreshVisibility>0</refreshVisibility>
<flyToView>0</flyToView>
<Link>
<href>http://yourserver.com/cgi-bin/viewCenteredPlacemark.py</href>
<refreshInterval>2</refreshInterval>
<viewRefreshMode>onStop</viewRefreshMode>
<viewRefreshTime>1</viewRefreshTime>
</Link>
</NetworkLink>
</Folder>
</kml>

Этот принцип можно использовать и для более сложных задач. Например, если у вас есть база данных с географической информацией, можно получить координаты области просмотра, отправить в базу данных запрос на информацию об этой области и в ответ передать в Google Планету Земля KML-код.

Типы MIME в KML

Когда KML-сервер отвечает на запрос Google Планеты Земля (или любого другого геобраузера), должен быть соблюден ряд правил, иначе геобраузер не сможет правильно интерпретировать ответ.

В случае успеха сервер должен возвратить код ответа HTTP 200 и указать для содержания ответа подходящий тип MIME, как описано ниже.

Google Планета Земля поддерживает файлы в форматах KML и KMZ. Для KML-файлов необходимо указать следующий тип MIME:

  • application/vnd.google-earth.kml+xml

Для KMZ-файлов необходимо указать следующий тип MIME:

  • application/vnd.google-earth.kmz

Если используется сервер Apache, добавьте в файл httpd.conf следующие строки:

  • AddType application/vnd.google-earth.kml+xml .kml
  • AddType application/vnd.google-earth.kmz .kmz

Инструкции по настройке типов MIME в службе Microsoft IIS можно найти в документации Microsoft.

Тело ответа должно содержать действительный KML-код, включая декларацию XML (<?xml version="1.0" encoding="UTF-8"?>). Если сервер возвратит недействительный KML-код, передача данных по сетевой ссылке будет прекращена, ссылка будет деактивирована, и будет показано сообщение об ошибке.

Дополнительные ресурсы

Подробные сведения об основных компонентах KML можно найти в Руководстве разработчика, а информацию об отдельных элементах – в Справке по KML.