Keyhole Markup Language (KML) - диалект XML для форматирования 2-х и 3D геоданных для отображения в «Земных браузерах», таких как обслуживание отображения Google Earth™, обслуживание отображения Google Maps™, служба радио Google Mobile™ и НАСА WorldWind. Другие приложения веб-браузера, такие как Yahoo!® Трубопроводы, также поддерживает KML либо путем визуализации или генерации файлов. Файл KML задает набор функций (плакаты, изображения, многоугольники, 3-D модели, текстовые описания и т.д.) и то, как они должны отображаться в браузерах и приложениях.
Каждое место должно иметь, по крайней мере, адрес или долготу и широту. Места также могут иметь текстовые описания, включая гиперссылки. Файлы KML могут также задавать стили отображения для маркеров, линий и многоугольников, а также такие параметры «поле зрения камеры», как наклон, курс и высота. Можно сгенерировать плацементы в файлах KML для отдельных точек и наборов точек, которые включают атрибуты в таблицу форму. Вы можете включать HTML разметок в эти таблицы, с гиперссылками или без, но в настоящее время вы не можете управлять полем зрения камеры знака размещения. (Однако пользователи Earth-браузера могут в целом управлять своими видами на него).
В этом примере показано, как сгенерировать макетный знак с помощью 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>
В этом примере показано, как считать данные из shapefiles и сгенерировать файл KML, который идентифицирует все или выбранные атрибуты, которые можно затем просмотреть в земном браузере, таком как Google Earth. Это также показывает, как настроить значки плацемента и изменить их в соответствии со значениями атрибутов.
Mapping Toolbox™ tsunamis shapefiles содержат базу данных о 162 событиях цунами (приливная волна), зарегистрированных в период с 1950 по 2006 год, описываемых как местоположения точек с 21 переменной (включая 18 атрибутов). Можно ввести файл метаданных tsunamis.txt
для просмотра определений всех полей данных. На шагах ниже выберите некоторые из них из файлов shapefiles и отобразите их как таблицы в экспортированных надписях KML.
Ознакомьтесь с файлами цунами, выбирая определенные атрибуты.
Существует несколько способов выбрать атрибуты из shapefiles. Один - пройти shaperead
массив ячеек с именами атрибутов в параметре Attributes. Например, вы можете просто захотеть отобразить максимальную высоту волны, предполагаемую причину, а также показать год, местоположение и страну для каждого события. Настройте массив ячеек с соответствующими именами полей атрибутов следующим образом, помня, что имена полей чувствительны к регистру.
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);
Просмотрите метки в обозревателе земли. Например, можно просмотреть файлы 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])
Настройте содержимое макета
Чтобы настроить HTML таблицы в штриховой метке, используйте 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
).Настройте значок макета
Вы можете задать свой собственный значок, используя 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);
Варьируйте размер плаката по высоте цунами
Чтобы варьировать размер значков меток, задайте файл иконки и масштабный коэффициент для каждого наблюдения как векторы имен (все равно) и масштабных коэффициентов (все вычисляются индивидуально) при записи файла 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);