Учебное пособие по KML

Учебное пособие по KML
На чтение
49 мин.
Просмотров
16
Дата обновления
11.11.2024

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

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

Совет: Чтобы увидеть «код» KML для функции в Google Планета Земля, вы можете просто щелкнуть функцию правой кнопкой мыши в средстве трехмерного просмотра Google Планета Земля и выбрать «Копировать». Затем вставьте содержимое буфера обмена в любой текстовый редактор. Визуальный элемент, отображаемый в Google Планета Земля, преобразуется в текстовый эквивалент KML. Обязательно поэкспериментируйте с этой функцией.

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

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

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

Обсуждение того, как использовать некоторые ключевые функции в KML, см. в Руководстве разработчика.

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

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

Метки

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

Откройте файл образцов KML в Google Планета Земля и разверните подпапку «Метки». В этой папке есть метки трех разных типов: простые , плавающие и выдавленные . Код KML для простой метки выглядит следующим образом:

  Xml version = "1.0" encoding = "UTF-8"?> 

Простая метка
Прикрепляется к земле. Разумно размещается на высоте подстилающего ландшафта.

-122.0822035425683,37.42228990140251,0








Структура этого файла разбита следующим образом:

  • Заголовок XML. Это строка 1 в каждом файле KML. Перед этой строкой нельзя ставить пробелы или другие символы.
  • Объявление пространства имен KML. Это строка 2 в каждом файле KML 2.2.
  • Объект Placemark, содержащий следующие элементы:
    • имя , которое используется в качестве метки для метки.
    • описание , которое появляется во всплывающей подсказке, прикрепленной к метке.
    • A Точка , определяющая положение метки на поверхности Земли ( долгота, широта и, необязательно, высота )

Если вам интересно, где находится метка, она прямо над зданием 41 Google, где мы разработали Google Планета Земля!

Что пользователи обычно думают, что «метка» в Google Планета Земля на самом деле является элементом с дочерним элементом в KML. Точечная метка — это единственный способ нарисовать значок и метку в средстве трехмерного просмотра Google Планета Земля. По умолчанию это знакомая желтая канцелярская кнопка. В KML может содержать один или несколько геометрических элементов, таких как LineString, Polygon или Model. Но только с точкой может иметь значок и метку. Точка используется для размещения значка, но графического представления самой точки нет.

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

В файле образцов KML есть пример почти всего, что вы можете делать с текстом метки. Вы можете добавлять ссылки, размеры шрифтов, стили и цвета, а также указывать выравнивание текста и таблицы. Если вы хотите увидеть полный список, скопируйте и вставьте пример метки «Описательный HTML» (в папке «Стили и разметка») в текстовый редактор.

Google Планета Земля 4.0 имеет функцию автоматической разметки, которая автоматически преобразует текст, например www.google.com , в активные гиперссылки, по которым пользователь может щелкнуть. Текст внутри тега , тега и элемента в автоматически преобразуется в стандартные гиперссылки HTTP. Вам не нужно добавлять теги самостоятельно.

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

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

Учтите разницу между разметкой HTML с тегами CDATA и без CDATA. Во-первых, вот с тегами CDATA:

  Xml version = "1.0" encoding = "UTF-8"?> 
Пример CDATA Теги CDATA полезны!
Текст становится более читаемым и легче писать , если вы можете избежать использования ссылок на сущности. ]]> 102.595626,14.996729

А вот без тегов CDATA , поэтому специальные символы должны использовать ссылки на сущности:

  xml version = "1.0" encoding = "UTF-8"?> 
Пример ссылок на объекты & 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; 102.594411,14.998518

Наземные наложения

Наложение на землю позволяет вам «наложить» изображение на земную поверхность. Элемент содержит ссылку на файл .jpg с наложенным изображением. Вот пример наложения земли в файле образцов KML, который показывает извержение вулкана Этна в 2001 году:

  Xml version = "1.0" encoding = "UTF-8"?> 

Наложения на грунт
Примеры наложения на грунт

Крупномасштабное наложение на местность
Наложение показывает извержение вулкана Этна 13 июля 2001 года.

https://developers.google.com/kml/documentation/images/etna.jpg


37.91904192681665
37.46543388598137
15.35832653742206
14.60128369746704
-0.1556640799496235




















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

В этом примере используется папка (названная «Наземные наложения») в качестве механизма для группировки и маркировки ее содержимого. Обратите внимание, как приложение «Папка» уши на панели «Метки» при загрузке файла образцов KML в Google Планета Земля.

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

Пути

В GoogleEarth можно создать много разных типов путей, и с вашими данными легко проявить творческий подход. В KML путь создается элементом . Взгляните на пример «Absolute Extruded» в папке Paths, и вы увидите, как форма была сгенерирована с помощью следующего кода:

  Xml version = "1.0" encoding = "UTF  -8 "?> 

Пути
Примеры путей. Обратите внимание, что для тега мозаики по умолчанию
установлено значение 0. Если вы хотите создавать мозаичные линии, они должны быть созданы
(или отредактированы) непосредственно в KML..

7f00ffff
4


7f00ff00


Абсолютное выдавливание
Прозрачная зеленая стена с желтыми контурами
#yellowLineGreenPoly

1
1
absolute
-112.2550785337791,36.07954952145647,2357
-112.2549277039738,36.08117083492122,2357
-112.2552505069063,36.08260761307279.08.2357 -112.2580238976449,36.08511401044813,2357
-112.2595218489022,36.08584355239394,2357
-112.2608216347552,36.08612634548589,2357
-112.262073462622019073263261906 2357
-112.26449638 46444,36.08627897945274,2357
-112.2656969554589,36.08649599090644,2357































Обратите внимание, что на самом деле это всего лишь одна линия, нарисованная на высоте над землей. Тег разбивает линию на более мелкие фрагменты, а тег расширяет линию до земли.

Полигоны

Полигоны можно использовать для создания простых зданий и других форм. Примеры можно найти в папке Polygons в файле примеров KML.

Пример Пентагона создается путем рисования простых внутренней и внешней оболочки и последующего выдавливания их до земли. Вот код:

  Xml version = "1.0" encoding = "UTF-8"?> 

Пентагон

1
relativeToGround



-77.05788457660967,38.87253259892824,100
-77.0546597375670 38.87291016281703,100
-77.05315536854791,38.87053267794386,100
-77.05552622493516,38.868757801256,100
-77.05844056290393,38.8699620650 br> -77.05844056290393,38.8699620650 br> \\\\\\\\\\\\\\ br>





-77.05668055019126,38.87154239798456,100
-77.05542625960818,38.87167890344077,100
-77.05485125901024,38.87076535397792,100
-77.05577867741100158 38. 87054446963351,100
-77.05668055019126,38.87154239798456,100
































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

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

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

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

Файл образцов KML содержит несколько общих стилей, каждый из которых определяется идентификатором в начале файла. Обратите внимание, что проще всего, если ваши идентификаторы представляют собой описательные строки, чтобы вы могли легко определить их действие. Вот пример стиля («transBluePoly»), который определяет прозрачный синий цвет для граней многоугольника и ширину линии 1,5 (и белый цвет по умолчанию) для краев многоугольника. Этот стиль используется в Building 41 в примере Google Campus (в папке Polygons):

  Xml version = "1.0" encoding = "UTF-8"?> 




1,5


7dff0000


Building 41
#transBluePoly

1
relativeToGround


-122.0857412771483,37.42227033155257,17
-122.0858169768481,37.42231408832346,172875.0-# br , 37. 42230337469744,17
-122.0858799945639,37.42225686138789,17
-122.0858860101409,37.4222311076138,17
-122.0858069157288,37.422202501738 br> -122.0858069157288,37.4222025017385584072112 -122.0856732640519,37.42208690214408,17
-122.0856022926407,37.42214885429042,17
-122.0855902778436,37.422128290487,17
-122.08554116290487,17
-122.085541166247228457,36785584167228227,367367327327327327327327327327327327327327327327327327327327328167 , 17
-122.0855067264352,37.42214267949824,17
-122.0854430712915,37.42212783846172,17
-122.0850990714904,37.42251282407603,1365 -122.0860162273783,37.42244918858722,17
-122.0857260327004,37.42229239604253,17
-122.0857412771483,37.42227033155257,17
>







































Обратите внимание, что является дочерним элементом (а не геометрии, на которую он влияет).

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

«Выделенный значок» в папке «Стили и разметка» показывает, как создать эффект наведения с помощью KML. Документ определяет два стиля: один для «normalPlacemark» и один для «highlightPlacemark» (отображается, когда курсор наведен на значок). Элемент имеет две пары ключ/значение, которые отображают каждый стиль значка в состояние значка. Есть два состояния значка: нормальный и выделенный .

Основные шаги, показанные здесь, заключаются в следующем:

  1. Определите для обычного значка метки и назначьте ему идентификатор ( здесь «обычная метка»). включает с для фактического использования изображения, как показано ниже.
  2. Определите для значка выделения метки и назначьте ему идентификатор (здесь «highlightPlacemark»).
  3. Создайте элемент и назначьте идентификатор к нему («exampleStyleMap»). Метка будет ссылаться на этот идентификатор.
  4. В элементе укажите «#normalPlacemark» для нормального состояния.
  5. В элементе укажите «#highlightPlacemark» для состояния выделения .
  6. В метку «Метка» добавьте элемент , который ссылается на «#exampleStyleMap».
  xml version = "1.0" encoding = "UTF-8"?> 


выделенный значок
Наведите указатель мыши на значок, чтобы увидеть новый значок



http: //maps.google.com/mapfiles/kml/paddle/red-stars. png






http://maps.google.com/mapfiles/kml/paddle/wht-blank.png





normal
#normalPlacemark


выделить
#highlightPlacemark



Наведите курсор на этот значок
#exampleStyleMap

-122.0856545755255,37.42243077405461,0








































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

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

В качестве примера включите папку «AbsolutePositioning: Top left» в файле образцов KML, и вы увидите экран наложение в левом верхнем углу окна просмотра. Он был создан с помощью следующего кода KML:

  Xml version = "1.0" encoding = "UTF-8"?> 


Абсолютное позиционирование: вверху слева

http://developers.google.com/kml/documentation/images/top_left.jpg


















Позиционирование контролируется путем сопоставления точки на изображении, заданной , с точкой на экране, заданной . В этом случае левый верхний угол изображения (0,1) совпадает с той же точкой на экране.

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

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

Сетевая ссылка содержит элемент с (гипертекстовой ссылкой), загружающей файл. может быть спецификацией локального файла или абсолютным URL. Несмотря на название, не обязательно загружает файлы из сети.

в ссылке указывает расположение любого из следующего:

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

Указанный файл может быть либо локальным файлом, либо файлом на удаленном сервере. В своей простейшей форме сетевые ссылки — это удобный способ разбить один большой файл KML на более мелкие, более управляемые файлы на одном компьютере.

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

CGI Scripting для KML

Помимо указания на файлы, содержащие статические данные, сетевой ссылки может указывать на данные, которые генерируются динамически, например, с помощью сценария CGI, расположенного на сетевом сервере. Имея некоторое представление о языке сценариев, таком как PHP, Python или Perl, вы можете создать сценарий, который доставляет поток (или файл) данных KML по каждой сетевой ссылке.

Для этого необходимы две вещи. доставка KML через сетевой CGI:

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

Ответ должен быть действительным KML. Для сложных приложений очень важна правильная обработка ошибок.

Совет. Простым способом обработки ошибок является анализ ошибки сервера как текста для имени папки. Например, можно заставить сервер возвращать база данных недоступна в виде строки. Это более информативно (и более удобно для пользователя), чем отключение соединения.

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

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

Следующий скрипт Python генерирует случайные целочисленные значения для широты и долготы , а затем вставляет эти значения в элемент . Всякий раз, когда сетевая ссылка обновляется, скрипт Python запускается снова и генерирует KML с новыми значениями широты и долготы.

 #!/usr/bin/pythonimport randomlatitude = random. randrange (-90, 90) longitude = random.randrange (-180, 180) kml = (' xml version = "1.0" encoding = "UTF-8"?>  n' 'n ''   n ''  Случайная метка   n ''   n '' % d,  % d   n ''   n ''   n ''  ')% (долгота, широта) print' Content-Type: application/vnd.google-  earth.kml + xml  n'print kml 

Вот пример файла KML, содержащего сетевую ссылку, которая загружает этот скрипт Python:

  xml version  = "1.0" encoding = "UTF-8"?> 


Сетевые ссылки
0
0
Пример сетевой ссылки 1

Случайная метка
0
0
Простой серверный сценарий, который генерирует новую случайную
метку при каждом вызове
0
0

http:// yourserver.com /cgi-bin/randomPlacemark.py























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

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

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

 GET/path /to/sever/script/query? BBOX = [longitude_west, latitude_south, longitude_east, latitude_north] 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/pythonimport cgiurl = cgi.FieldStorage () bbox = url ['BBOX']. valuebbox = bbox.split (',') west = float (bbox [0  ]) south = float (bbox [1]) east = float (bbox [2]) north = float (bbox [3]) center_lng = ((восток - запад)/2) + westcenter_lat = ((север - юг)/ 2) + southkml = (' Xml version = "1.0" encoding = "UTF-8"?>  N' '  n  ''   n ''  Метка по центру просмотра   n ''   n '' % .6f,%. 6f   n ''   n ''   n ''  ')% (center_lng, center_lat) print' Content-Type: application/vnd.google-earth.kml + xml  n'print kml 

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

  xml version = "1.0" encoding = "UTF-8"?> 


Сетевые ссылки
0
0
Пример сетевой ссылки 2

Метка по центру просмотра
0
0
На основе просмотра refresh позволяет удаленному серверу вычислить
центр экрана и вернуть метку.
0
0

http:// yourserver.com /cgi-bin/viewCenteredPlacemark.py
2
onStop
1


























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

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

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

Google Планета Земля читает файлы KML и KMZ. Тип MIME для файлов KML —

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

Тип MIME для файлов KMZ —

  • application/vnd.google- earth.kmz

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

  • Приложение AddType/vnd.google-earth.kml + xml .kml
  • Приложение AddType/ vnd.google-earth.kmz .kmz

Подробную информацию о настройке типов MIME в IIS Microsoft см. в документации Microsoft.

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

Готовы к большему? Ознакомьтесь с Руководством разработчика , в котором описаны основные функции KML. Кроме того, просмотрите Справочник по KML для получения информации о конкретных элементах.

0 Комментариев
Комментариев на модерации: 0
Оставьте комментарий