Язык разметки замочной скважины (KML) является диалектом XML для форматирования 2D и 3-D геоданных для отображения в "Наземных браузерах", таких как сервис отображения Google Earth™, сервис отображения Google Maps™, услуга беспроводной связи Google Mobile™ и НАСА WorldWind. Другие приложения веб-браузера, такие как Yahoo! ® Трубопроводы, также поддерживают KML или путем рендеринга или генерации файлов. Файл KML задает набор функций (placemarks, изображения, многоугольники, 3-D модели, текстовые описания, и т.д.) и как они должны быть отображены в браузерах и приложениях.
Каждое место должно, по крайней мере, иметь адрес или долготу и широту. Места могут также иметь текстовые описания, включая гиперссылки. Файлы KML могут также задать стили отображения для маркеров, линий и многоугольников и параметров "поля зрения камеры", таких как наклон, заголовок и высота. Можно сгенерировать placemarks в файлах KML для отдельных точек и наборов точек, которые включают атрибуты в табличную форму. Можно включать разметки HTML в эти таблицы, с или без гиперссылок, но вы не можете в настоящее время управлять полем зрения камеры placemark. (Однако пользователи Наземного браузера могут обычно управлять своими представлениями его).
В этом примере показано, как сгенерировать placemark использование kmlwritepoint путем определения широты и долготы, которая идентифицирует местоположение. Этот пример также задает значок, используемый в placemark и тексте, который появляется в воздушном шаре, сопоставленном с placemark.
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 не включает координаты места в placemarks. Это вызвано тем, что для пользователей легко считать, где placemark mousing по нему или путем просмотра его диалогового окна Properties.В этом примере показано, как сгенерировать использование placemark конкретные адреса или более общие адреса, такие как индексы, город, состояние или названия страны, вместо информации о широте и долготе. Если приложение просмотра способно к поиску адресов, такой placemarks может быть отображен в соответствующем, несмотря на то, что возможно неточный, местоположениях. (Обратите внимание на то, что сервис Google Maps не делает основанного на адресе поддержки placemarks.)
Когда вы используете адреса, kmlwrite создает <address> элемент для каждого placemark, а не <point> элементы, содержащие <coordinates> элементы. Например, вот код для kmlwrite это генерирует основанный на адресе placemarks для трех городов в Австралии от массива ячеек:
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, который идентифицирует все или выбранные атрибуты, которые можно затем просмотреть в наземном браузере, таком как Google Earth. Это также показывает, как настроить placemark значки и варьироваться их согласно значениям атрибута.
Файлы форм цунами Mapping Toolbox™ содержат базу данных 162 цунами (приливная волна) события, о которых сообщают между 1 950 и 2006, описанный как местоположения точки с 21 переменной (включая 18 атрибутов). Можно вывести файл метаданных tsunamis.txt видеть определения всех полей данных. Шаги ниже выбирают некоторые из них из файлов форм и отображают их как таблицы в экспортируемом KML placemarks.
Считайте файлы форм цунами, выбрав определенные атрибуты.
Существует несколько способов выбрать атрибуты из файлов форм. Нужно передать shaperead массив ячеек названий атрибута в параметре Атрибутов. Например, вы можете только хотеть сопоставить максимальную высоту волны, подозреваемую причину, и также показать год, местоположение и страну для каждого события. Настройте массив ячеек с соответствующими именами полей атрибута можно следующим образом, помня, что имена полей являются чувствительными к регистру.
attrs = {'Max_Height','Cause','Year','Location','Country'};
Поскольку файл данных использует координаты широты и долготы, необходимо задать 'UseGeoCoords',true гарантировать тот shaperead возвращает геоstruct (имеющий Lat и Lon поля .
tsunamis = shaperead('tsunamis.shp','useGeoCoords',true,...
'Attributes',attrs);
Посмотрите на первую запись в tsunamis геоstruct возвращен 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 выходные параметры все данные об атрибуте в геоstruct к KML отформатировали файл как HTML-таблицу, содержащую нестилизованный текст. Когда вы просматриваете его, программа Google Earth предоставляет маркер по умолчанию.
kmlfilename = 'tsunami1.kml'; kmlwritepoint(kmlfilename,tsunamis(1).Lat,tsunamis(1).Lon);
Просмотрите placemarks в наземном браузере. Например, можно просмотреть файлы 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 геоstruct и смотрит его.
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 использовать вместо символа канцелярской кнопки по умолчанию. Черно-белый значок мишени, используемый здесь, задан как URL для значка в библиотеке Google KML.
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 размер высотой цунами
Чтобы варьироваться размер 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);