Экспортируйте файлы 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);
    

    Посмотрите на первую запись в 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'

  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 функция. Создайте спецификацию атрибута для 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>';
    
    Когда вы используете спецификацию атрибута, все атрибуты, которые она перечисляет, включены в 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);