Keyhole Markup Language (KML) - XML-диалект для форматирования 2-D и 3-D геоданных для отображения в «браузерах Земли», таких как картографический сервис Google Earth™, картографический сервис Google Maps™, беспроводной сервис Google Mobile™ и NASA WorldWind. Другие приложения веб-браузера, такие как Yahoo! ® Pipes, также поддерживают KML путем визуализации или создания файлов. Файл KML определяет набор функций (метки, изображения, полигоны, модели 3-D, текстовые описания и т.д.) и способ их отображения в браузерах и приложениях.
Каждое место должно иметь, по крайней мере, адрес или долготу и широту. Места также могут иметь текстовые описания, включая гиперссылки. Файлы KML также могут задавать стили отображения для маркеров, линий и полигонов, а также параметры «просмотра камеры», такие как наклон, курс и высота. В файлах KML можно создавать метки для отдельных точек и наборов точек, содержащих атрибуты в табличной форме. В эти таблицы можно включить HTML-пометки с гиперссылками или без них, но в настоящее время невозможно управлять видом метки. (Однако пользователи браузера Земли, как правило, могут управлять своим видом на него).
В этом примере показано, как создать метку с помощью kmlwritepoint путем указания широты и долготы, определяющих местоположение. В этом примере также указывается значок, используемый для метки, и текст, который отображается в номере позиции, связанном с меткой.
lat = 42.299827;
lon = -71.350273;
description = sprintf('%s<br>%s</b><br>%s</b>', ...
'3 Apple Hill Drive', 'Natick, MA. 01760', ...
'https://www.mathworks.com');
name = 'The MathWorks, Inc.';
iconFilename = ...
'https://www.mathworks.com/products/product_listing/images/ml_icon.gif';
iconScale = 1.0;
filename = 'MathWorks.kml';
kmlwritepoint(filename, lat, lon, ...
'Description', description, 'Name', name, ...
'Icon', iconFilename, 'IconScale', iconScale);Этот код создает следующий KML-файл.
<?xml version="1.0" encoding="utf-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>MathWorks</name>
<Placemark>
<Snippet maxLines="0"> </Snippet>
<description>3 Apple Hill Drive<br>Natick, MA. 01760</b>;
<br>https://www.mathworks.com</b>;
</description>
<name>The MathWorks, Inc.</name>
<Style>
<IconStyle>
<Icon>
<href>
https://www.mathworks.com/products/product_listing/images/ml_icon.gif
</href>
</Icon>
<scale>1</scale>
</IconStyle>
</Style>
<Point>
<coordinates>-71.350273,42.299827,0.0</coordinates>
</Point>
</Placemark>
</Document>
</kml>kmlwritepoint не включает координаты местоположения в знаки размещения. Это связано с тем, что пользователи легко считывают, где находится метка, перетягивая ее или просматривая ее диалоговое окно «Свойства».В этом примере показано, как создать информационный знак с использованием уличных адресов или более общих адресов, таких как почтовые индексы, названия городов, штатов или стран, вместо информации о широте и долготе. Если приложение просмотра способно искать адреса, такие информационные метки могут отображаться в соответствующих, хотя и возможно неточных местоположениях. (Обратите внимание, что сервис Google Maps не поддерживает адресные метки.)
При использовании адресов kmlwrite создает <address> элемент для каждого индикатора, а не <point> элементы, содержащие <coordinates> элементы. Например, вот код для kmlwrite который генерирует адресные метки для трех городов Австралии из массива ячеек:
address = {'Perth, Australia', ...
'Melbourne, Australia', ...
'Sydney, Australia'};
filename = 'Australian_Cities.kml';
kmlwrite(filename, address, 'Name', address);
<?xml version="1.0" encoding="utf-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Australian_Cities</name>
<Placemark>
<Snippet maxLines="0"> </Snippet>
<description> </description>
<name>Perth, Australia</name>
<address>Perth, Australia</address>
</Placemark>
<Placemark>
<Snippet maxLines="0"> </Snippet>
<description> </description>
<name>Melbourne, Australia</name>
<address>Melbourne, Australia</address>
</Placemark>
<Placemark>
<Snippet maxLines="0"> </Snippet>
<description> </description>
<name>Sydney, Australia</name>
<address>Sydney, Australia</address>
</Placemark>
</Document>
</kml>В этом примере показано, как считывать данные из файлов формы и создавать KML-файл, который идентифицирует все или выбранные атрибуты, которые затем можно просмотреть в браузере earth, таком как Google Earth. В нем также показано, как настраивать значки метки и изменять их в соответствии со значениями атрибутов.
Отображение цунами Toolbox™ shapefiles содержат базу данных 162 цунами (приливная волна) события, сообщило между 1950 и 2006, описанным как местоположения пункта с 21 переменной (включая 18 признаков). Можно ввести файл метаданных tsunamis.txt для просмотра определений всех полей данных. На следующих шагах некоторые из них выбираются из файлов формы и отображаются в виде таблиц в экспортированных метках-шаблонах KML.
Прочитайте файлы формы цунами, выбрав определенные атрибуты.
Существует несколько способов выбора атрибутов из файлов формы. Один - пройти shaperead массив ячеек имен атрибутов в параметре Attributes. Например, можно просто отобразить максимальную высоту волны, предполагаемую причину, а также показать год, местоположение и страну для каждого события. Настройте массив ячеек с соответствующими именами полей атрибутов следующим образом, памятуя, что имена полей чувствительны к регистру.
attrs = {'Max_Height','Cause','Year','Location','Country'};
Поскольку в файле данных используются координаты широты и долготы, необходимо указать 'UseGeoCoords',true обеспечить, чтобы shaperead возвращает геострукт (имеющий Lat и Lon поля).
tsunamis = shaperead('tsunamis.shp','useGeoCoords',true,...
'Attributes',attrs);
Посмотрите на первую запись в tsunamis геострукт, возвращенный shaperead.
tsunamis(1)
Geometry: 'Point'
Lon: 128.3000
Lat: -3.8000
Max_Height: 2.8000
Cause: 'Earthquake'
Year: 1950
Location: 'JAVA TRENCH, INDONESIA'
Country: 'INDONESIA'Экспорт данных цунами в файл KML с помощью kmlwrite
По умолчанию kmlwrite выводит все данные атрибутов в геострукте в файл в формате KML в виде HTML-таблицы, содержащей нестилированный текст. При просмотре программа Google Earth предоставляет маркер по умолчанию.
kmlfilename = 'tsunami1.kml'; kmlwritepoint(kmlfilename,tsunamis(1).Lat,tsunamis(1).Lon);
Просмотрите метки в браузере заземления. Например, файлы KML можно просматривать с помощью браузера Google Earth, который должен быть установлен на компьютере.
Для Windows используйте winopen функция:
winopen(filename)
Для Linux, если имя файла является частичным путем, используйте следующие команды:
cmd = 'googleearth ';
fullfilename = fullfile(pwd, filename);
system([cmd fullfilename])
Для Mac, если имя файла является частичным путем, используйте следующие команды:
cmd = 'open -a Google\ Earth '
fullfilename = fullfile(pwd, filename);
system([cmd fullfilename])
Настройка содержимого placemark
Чтобы настроить таблицу HTML в метке placemark, используйте makeattribspec функция. Создание спецификации атрибута для tsunamis геострукт и осмотреть его.
attribspec = makeattribspec(tsunamis)
attribspec =
Max_Height: [1x1 struct]
Cause: [1x1 struct]
Year: [1x1 struct]
Location: [1x1 struct]
Country: [1x1 struct]Max_Height полужирный текст, укажите единицы информации о Max_Height, а также установите другие метки атрибутов полужирным шрифтом.attribspec.Max_Height.AttributeLabel = '<b>Maximum Height</b>'; attribspec.Max_Height.Format = '%.1f Meters'; attribspec.Cause.AttributeLabel = '<b>Cause</b>'; attribspec.Year.AttributeLabel = '<b>Year</b>'; attribspec.Year.Format = '%.0f'; attribspec.Location.AttributeLabel = '<b>Location</b>'; attribspec.Country.AttributeLabel = '<b>Country</b>';
kmlwrite если вы не удалите их из спецификации вручную (например, с rmfield).Настройка значка placemark
Можно указать собственный значок с помощью kmlwrite используется вместо символа кнопки по умолчанию. Используемый здесь значок «черно-белый бычий глаз» указан в библиотеке Google KML в качестве URL-адреса значка.
iconname = ...
'http://maps.google.com/mapfiles/kml/shapes/placemark_circle.png';
kmlwritepoint(kmlfilename,tsunamis(1).Lat,tsunamis(1).Lon, ...
'Description',attribspec,'Name',{tsunamis(1).Location}, ...
'Icon',iconname,'IconScale',2);
Варьировать размер placemark в зависимости от высоты цунами
Чтобы изменить размер значков метки, укажите файл значка и коэффициент масштабирования для каждого наблюдения в качестве векторов имен (все равно) и коэффициентов масштабирования (все вычисляются индивидуально) при записи файла KML. Масштабировать ширину и высоту маркеров по журналу Max_Height. Коэффициенты масштабирования для значков точек зависят от данных и могут использовать некоторые эксперименты, чтобы получить правильный результат.
% Create vector with log2 exponents of |Max_Height| values
[loghgtx loghgte] = log2([tsunamis.Max_Height]);
% Create a vector replicating the icon URL
iconnames = cellstr(repmat(iconname,numel(tsunamis),1));
kmlwritepoint(kmlfilename,tsunamis(1).Lat,tsunamis(1).Lon,
'Description',attribspec,...
'Name',{tsunamis(1).Location},'Icon',iconname,...
'IconScale',loghgte);