exponenta event banner

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

Keyhole Markup Language (KML) - XML-диалект для форматирования 2-D и 3-D геоданных для отображения в «браузерах Земли», таких как картографический сервис Google Earth™, картографический сервис Google Maps™, беспроводной сервис Google Mobile™ и NASA WorldWind. Другие приложения веб-браузера, такие как Yahoo! ® Pipes, также поддерживают KML путем визуализации или создания файлов. Файл KML определяет набор функций (метки, изображения, полигоны, модели 3-D, текстовые описания и т.д.) и способ их отображения в браузерах и приложениях.

Каждое место должно иметь, по крайней мере, адрес или долготу и широту. Места также могут иметь текстовые описания, включая гиперссылки. Файлы KML также могут задавать стили отображения для маркеров, линий и полигонов, а также параметры «просмотра камеры», такие как наклон, курс и высота. В файлах KML можно создавать метки для отдельных точек и наборов точек, содержащих атрибуты в табличной форме. В эти таблицы можно включить HTML-пометки с гиперссылками или без них, но в настоящее время невозможно управлять видом метки. (Однако пользователи браузера Земли, как правило, могут управлять своим видом на него).

Создать одиночный меточный знак с помощью kmlwritepoint

В этом примере показано, как создать метку с помощью 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>
Если вы видите это в браузере Земли, обратите внимание, что текст внутри метки «https://www.mathworks.com» был автоматически визуализирован как гиперссылка. Сервис Google Earth также добавляет ссылку под названием «Направления». kmlwritepoint не включает координаты местоположения в знаки размещения. Это связано с тем, что пользователи легко считывают, где находится метка, перетягивая ее или просматривая ее диалоговое окно «Свойства».

Генерировать метки-заполнители из адресов

В этом примере показано, как создать информационный знак с использованием уличных адресов или более общих адресов, таких как почтовые индексы, названия городов, штатов или стран, вместо информации о широте и долготе. Если приложение просмотра способно искать адреса, такие информационные метки могут отображаться в соответствующих, хотя и возможно неточных местоположениях. (Обратите внимание, что сервис Google Maps не поддерживает адресные метки.)

При использовании адресов kmlwrite создает <address> элемент для каждого индикатора, а не <point> элементы, содержащие <coordinates> элементы. Например, вот код для kmlwrite который генерирует адресные метки для трех городов Австралии из массива ячеек:

  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-файл, который идентифицирует все или выбранные атрибуты, которые затем можно просмотреть в браузере earth, таком как Google Earth. В нем также показано, как настраивать значки метки и изменять их в соответствии со значениями атрибутов.

Отображение цунами Toolbox™ shapefiles содержат базу данных 162 цунами (приливная волна) события, сообщило между 1950 и 2006, описанным как местоположения пункта с 21 переменной (включая 18 признаков). Можно ввести файл метаданных tsunamis.txt для просмотра определений всех полей данных. На следующих шагах некоторые из них выбираются из файлов формы и отображаются в виде таблиц в экспортированных метках-шаблонах KML.

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

    Существует несколько способов выбора атрибутов из файлов формы. Один - пройти shaperead массив ячеек имен атрибутов в параметре Attributes. Например, можно просто отобразить максимальную высоту волны, предполагаемую причину, а также показать год, местоположение и страну для каждого события. Настройте массив ячеек с соответствующими именами полей атрибутов следующим образом, памятуя, что имена полей чувствительны к регистру.

    attrs = {'Max_Height','Cause','Year','Location','Country'};
    

    Поскольку в файле данных используются координаты широты и долготы, необходимо указать 'UseGeoCoords',true обеспечить, чтобы shaperead возвращает геострукт (имеющий Lat и Lon поля).

    tsunamis = shaperead('tsunamis.shp','useGeoCoords',true,...
                         'Attributes',attrs);
    

    Посмотрите на первую запись в 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 выводит все данные атрибутов в геострукте в файл в формате KML в виде HTML-таблицы, содержащей нестилированный текст. При просмотре программа Google Earth предоставляет маркер по умолчанию.

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

  3. Просмотрите метки в браузере заземления. Например, файлы 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 геострукт и осмотреть его.

    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).

  5. Настройка значка placemark

    Можно указать собственный значок с помощью kmlwrite используется вместо символа кнопки по умолчанию. Используемый здесь значок «черно-белый бычий глаз» указан в библиотеке Google KML в качестве URL-адреса значка.

    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 в зависимости от высоты цунами

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