Язык разметки замочной скважины (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);