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

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

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

Сгенерируйте одну метку заполнения с помощью 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>
Если вы видите это в Earth Browser, заметьте, что текст внутри макета, «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>

Экспорт геоструктов точек в плацементы

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

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

  1. Ознакомьтесь с файлами цунами, выбирая определенные атрибуты.

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

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

    По умолчанию, kmlwrite Выходы все данные атрибутов в геоstruct в форматированный файл 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. Настройте содержимое макета

    Чтобы настроить 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).

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

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

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