Язык разметки замочной скважины (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);
Посмотрите на первую запись в геоstruct 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
выходные параметры все данные об атрибуте в гео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
. Создайте спецификацию атрибута для геоstruct 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
, чтобы использовать вместо символа канцелярской кнопки по умолчанию. Черно-белый значок мишени, используемый здесь, задан как 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);