Экспортируйте файлы KML для просмотра в наземных браузерах

Язык разметки замочной скважины (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 использование 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>
Если вы просматриваете это в Наземном Браузере, заметьте, что текст в placemark, "https://www.mathworks.com", был автоматически представлен как гиперссылка. Сервис Google Earth также добавляет ссылку под названием "Направления". kmlwritepoint не включает координаты места в placemarks. Это вызвано тем, что для пользователей легко считать, где placemark mousing по нему или путем просмотра его диалогового окна Properties.

Сгенерируйте Placemarks от адресов

Этот пример показывает, как сгенерировать использование 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);
Сгенерированный файл KML имеет следующую структуру и содержимое:
<?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>

Экспортируйте геоструктуры точки в Placemarks

Этот пример показывает, как считать данные из файлов форм и сгенерировать файл KML, который идентифицирует все или выбранные атрибуты, которые можно затем просмотреть в наземном браузере, таком как Google Earth. Это также показывает, как настроить placemark значки и отличаться их согласно значениям атрибута.

Файлы форм цунами Mapping Toolbox™ содержат базу данных 162 цунами (приливная волна) события, о которых сообщают между 1 950 и 2006, описанный как местоположения точки с 21 переменной (включая 18 атрибутов). Можно вывести файл метаданных tsunamis.txt, чтобы видеть определения всех полей данных. Шаги ниже выбирают некоторые из них из файлов форм и отображают их как таблицы в экспортируемом KML placemarks.

  1. Считайте файлы форм цунами, выбрав определенные атрибуты.

    Существует несколько способов выбрать атрибуты из файлов форм. Нужно передать 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'

  2. Экспортируйте данные о цунами в файл KML с kmlwrite

    По умолчанию kmlwrite выходные параметры все данные об атрибуте в геоstruct к KML отформатировал файл как HTML-таблицу, содержащую нестилизованный текст. Когда вы просматриваете его, программа Google Earth предоставляет маркер по умолчанию.

    kmlfilename = 'tsunami1.kml';
    kmlwritepoint(kmlfilename,tsunamis(1).Lat,tsunamis(1).Lon);
    

  3. Просмотрите 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])
    
  4. Настройте 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>';
    
    Когда вы используете спецификацию атрибута, все атрибуты, которые она перечисляет, включены в placemarks, сгенерированный kmlwrite, если вы не удаляете их из спецификации вручную (например, с rmfield).

  5. Настройте 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);
    

  6. Отличайтесь 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);