Экспортирование векторных данных к KML

В этом примере показано, как структурировать географическую точку, линию и данные о векторе многоугольника и экспортировать его в файл Языка разметки замочной скважины (KML). KML является основанным на XML языком разметки, спроектированным для визуализации географических данных по Веб-картам или "Наземным браузерам", таким как Google Earth™, Google Maps™, НАСА WorldWind и Проводник ESRI® ArcGIS™.

Следующие функции пишут географические данные в файл KML:

  • kmlwritepoint — Запишите географические точки в файл KML

  • kmlwriteline — Запишите географическую линию в файл KML

  • kmlwritepolygon — Запишите географический многоугольник в файл KML

  • kmlwrite — Запишите географические данные в файл KML

Задайте Выходную папку для файлов KML

Этот пример создает несколько файлов KML и использует переменную kmlFolder обозначить их местоположение. Значение, используемое здесь, определяется выходом tempdir команда, но вы могли легко настроить это.

kmlFolder = tempdir;

Создайте массив ячеек имен файлов KML, используемых в этом примере для того, чтобы опционально удалить их из вашего KML папка выхода, когда пример заканчивается.

kmlFilenames = {};

Создайте указатель на функцию, чтобы открыть наземный браузер

Файл KML может быть открыт во множестве "Наземных браузеров", веб-карт или редактора. Можно настроить следующий указатель анонимной функции, чтобы открыть файл KML. Выполнение этого указателя на функцию запускает браузер Google Earth, который должен быть установлен на вашем компьютере. Можно использовать приложение путем присвоения переменной useApplication к true в вашей рабочей области или присвоении это к true здесь.

useApplication = exist('useApplication','var') && useApplication;
if useApplication
    if ispc
        % On Windows(R) platforms display the KML file with:
        openKML = @(filename) winopen(filename);
    elseif ismac
        % On Mac platforms display the KML file with:
        cmd = 'open -a Google\ Earth ';
        openKML = @(filename) system([cmd filename]);
    else
        % On Linux platforms display the KML file with:
        cmd = 'googleearth ';
        openKML = @(filename) system([cmd filename]);
    end
else
    % No "Earth browser" is installed on the system.
    openKML = @(filename) disp('');
end

Пример 1: запишите одну точку в файл KML

Этот пример пишет одну точку в файл KML.

Присвойте значения широты и долготы для Падерборна, Германия.

lat = 51.715254;
lon = 8.75213;

Используйте kmlwritepoint записать точку в файл KML.

filename = fullfile(kmlFolder,'Paderborn.kml');
kmlwritepoint(filename,lat,lon);

Откройте файл KML.

openKML(filename)

Добавьте filename к kmlFilenames.

kmlFilenames{end+1} = filename;

Пример 2: запишите одну точку в файл KML со значком и описанием

Этот пример пишет одну точку в файл KML. placemark включает значок и описание с разметкой HTML.

Присвойте координаты широты и долготы для точки, которая определяет местоположение главного офиса MathWorks® в Натике, Массачусетс.

lat = 42.299827;
lon = -71.350273;

Создайте описание для placemark. Включайте HTML-тэги в описание, чтобы добавить новые линии для адреса.

description = sprintf('%s<br>%s</br><br>%s</br>', ...
   '3 Apple Hill Drive', 'Natick, MA. 01760', ...
   'https://www.mathworks.com');

Присвойте iconFilename к файлу GIF в сети локальной системы.

iconDir = fullfile(matlabroot,'toolbox','matlab','icons');
iconFilename = fullfile(iconDir,'matlabicon.gif');

Присвойте имя для placemark.

name = 'The MathWorks, Inc.';

Используйте kmlwritepoint записать точку и сопоставленные данные к файлу KML.

filename = fullfile(kmlFolder,'MathWorks.kml');
kmlwritepoint(filename,lat,lon,'Description',description,'Name',name, ...
   'Icon',iconFilename);

Откройте файл KML.

openKML(filename)

Добавьте filename к kmlFilenames.

kmlFilenames{end+1} = filename;

Пример 3: запишите несколько точек в файл KML

Этот пример пишет районы городов во Франции к файлу KML, включая имена городов, и удаляет таблицу описания по умолчанию.

Считайте мировые городские данные из файла форм под названием worldcities.shp в геопространственную таблицу. Создайте подтаблицу, содержащую данные для городов во Франции.

worldcities = readgeotable("worldcities.shp");
n = ["Paris" "Lyon" "Nantes" "Bordeaux" "Marseille"];
rows = ismember(worldcities.Name,n);
cities = worldcities(rows,:);

Напишите данные в подтаблице к файлу KML при помощи kmlwrite. Присвойте имя placemark к имени города. Удалите описание по умолчанию, поскольку данные имеют только один атрибут.

filename = fullfile(kmlFolder,'French_Cities.kml');
kmlwrite(filename,cities,'Name',cities.Name,'Description',{});

Откройте файл KML.

openKML(filename)

Добавьте filename к kmlFilenames.

kmlFilenames{end+1} = filename;

Пример 4: запишите несколько точек в файл KML с модифицированной таблицей атрибутов

Этот пример пишет placemarks в местоположениях цунами (приливная волна) события, сообщил за несколько десятилетий и пометил географически исходным местоположением, к файлу KML.

Считайте данные из файла форм под названием tsunamis.shp как геопространственная таблица.

tsunamis = readgeotable('tsunamis.shp','CoordinateSystemType','geographic');

Создайте спецификацию атрибута.

attribspec = makeattribspec(tsunamis);

Удалите все атрибуты из спецификации, за исключением атрибутов, описывающих максимальную высоту, причину, год, местоположение и страна.

desiredAttributes = {'Max_Height','Cause','Year','Location','Country'};
allAttributes = fieldnames(attribspec);
attributes = setdiff(allAttributes,desiredAttributes);
attribspec = rmfield(attribspec,attributes)
attribspec = struct with fields:
          Year: [1x1 struct]
         Cause: [1x1 struct]
       Country: [1x1 struct]
      Location: [1x1 struct]
    Max_Height: [1x1 struct]

Переименуйте Max_Height припишите Maximum Height и подсветите каждую метку атрибута полужирным шрифт.

attribspec.Max_Height.AttributeLabel = "<b>Maximum Height</b>";
attribspec.Cause.AttributeLabel = "<b>Cause</b>";
attribspec.Year.AttributeLabel = "<b>Year</b>";
attribspec.Location.AttributeLabel = "<b>Location</b>";
attribspec.Country.AttributeLabel = "<b>Country</b>";

Добавьте Meters к формату максимального атрибута высоты. Установите формат атрибута года не включать десятичные разряды.

attribspec.Max_Height.Format = "%.1f Meters";
attribspec.Year.Format = "%.0f";

Экспортируйте выбранные атрибуты и исходные местоположения цунами к файлу KML при помощи kmlwrite функция.

filename = fullfile(kmlFolder,'Tsunami_Events.kml');
name = tsunamis.Location;
kmlwrite(filename,tsunamis,'Description',attribspec,'Name',name)

Откройте файл KML.

openKML(filename)

Добавьте filename к kmlFilenames.

kmlFilenames{end+1} = filename;

Пример 5: запишите одну точку с LookAt виртуальная камера к файлу KML

Этот пример пишет одну точку с LookAt виртуальная камера под Мачу-Пикчу, Перу

Используйте вектор геоточки, чтобы задать LookAt виртуальная камера.

lat = -13.163111;
lon = -72.544945;
lookAt = geopoint(lat,lon);
lookAt.Range = 1500;
lookAt.Heading = 260;
lookAt.Tilt = 67;

Используйте kmlwritepoint записать местоположение точки и информацию о LookAt.

filename = fullfile(kmlFolder, 'Machu_Picchu.kml');
alt = 2430;
name = 'Machu Picchu';
kmlwritepoint(filename,lat,lon,alt,'LookAt',lookAt,'Name',name);

Откройте файл KML.

openKML(filename)

Добавьте filename к kmlFilenames.

kmlFilenames{end+1} = filename;

Пример 6: запишите одну точку с камерой к файлу KML

Этот пример пишет одну точку с полем зрения камеры Вашингтонского Памятника в Вашингтоне D.C к файлу KML. Маркер помещается в наземное местоположение камеры.

Создайте камеру.

camlat = 38.889301;
camlon = -77.039731;
camera = geopoint(camlat,camlon);
camera.Altitude = 500;
camera.Heading = 90;
camera.Tilt = 45;
camera.Roll = 0;

Используйте kmlwritepoint записать местоположение точки и Информацию о камере.

name = 'Camera ground location';
lat = camera.Latitude;
lon = camera.Longitude;
filename = fullfile(kmlFolder,'WashingtonMonument.kml');
kmlwritepoint(filename,lat,lon,'Camera',camera,'Name',name)

Откройте файл KML.

openKML(filename)

Добавьте filename к kmlFilenames.

kmlFilenames{end+1} = filename;

Пример 7: запишите адресные сведения в файл KML

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

Создайте массив ячеек, содержащий имена нескольких достопримечательностей в Бостонской области.

names = {'Boston', ...
    'Massachusetts Institute of Technology', ...
    'Harvard University', ...
    'Fenway Park', ...
    'North End'};

Создайте массив ячеек, содержащий адреса для достопримечательностей в Бостонской области.

addresses = { ...
    'Boston, MA', ...
    '77 Massachusetts Ave, Cambridge, MA 02139', ...
    'Massachusetts Hall, Cambridge MA 02138', ...
    '4 Yawkey Way, Boston, MA', ...
    '134 Salem St, Boston, MA'};

Используйте значок Google Maps для каждого из placemarks.

icon = 'http://maps.google.com/mapfiles/kml/paddle/red-circle.png';

Используйте kmlwrite записать массив ячеек адресов к файлу KML.

filename = fullfile(kmlFolder, 'Places_of_Interest.kml');
kmlwrite(filename,addresses,'Name',names,'Icon',icon,'IconScale',1.5);

Откройте файл KML.

openKML(filename)

Добавьте filename к kmlFilenames.

kmlFilenames{end+1} = filename;

Пример 8: запишите одну строку в файл KML

Этот пример пишет одну строку, соединяющую верхнюю часть Горы Вашингтон в Mount Washington Hotel в Кэрролле, Нью-Гэмпшир, к файлу KML.

Присвойте координатные значения для необходимой области.

lat_Mount_Washington = 44.270489039;
lon_Mount_Washington = -71.303246453;

lat_Mount_Washington_Hotel = 44.258056;
lon_Mount_Washington_Hotel = -71.440278;

lat = [lat_Mount_Washington lat_Mount_Washington_Hotel];
lon = [lon_Mount_Washington lon_Mount_Washington_Hotel];

Установите высоту на 6 футов для аппроксимированной высоты человека.

alt = 6 * unitsratio('meters', 'feet');

Добавьте точку зрения камеры из Mount Washington Hotel.

clat = lat(2);
clon = lon(2);
camera = geopoint(clat,clon,'Altitude',2,'Tilt',90,'Roll',0,'Heading',90);

Используйте kmlwriteline записать массивы в файл KML.

filename = fullfile(kmlFolder, 'Mount_Washington.kml');
name = 'Mount Washington';
kmlwriteline(filename,lat,lon,alt,'Name',name,'Color','k','Width',3, ...
    'Camera',camera,'AltitudeMode','relativeToGround');

Откройте файл KML.

openKML(filename)

Добавьте filename к kmlFilenames.

kmlFilenames{end+1} = filename;

Пример 9: запишите журнал дорожки GPS в файл KML

Этот пример пишет журнал дорожки GPS в файл KML.

Считайте журнал точек дорожки из файла GPX. Данные в журнале были получены из наручных часов GPS, сохраненных при скольжении по горе Мэнсфилд в Вермонте, США, 28 августа 2010.

track = readgeotable('sample_mixed.gpx','Layer','track_points');

Запишите журнал в файл KML при помощи kmlwriteline функция. Значения вертикального изменения, полученные GPS, относительно уровня моря.

filename = fullfile(kmlFolder,'GPS_Track_Log.kml');
lat = track.Shape.Latitude;
lon = track.Shape.Longitude;
alt = track.Elevation;
name = 'GPS Track Log';
kmlwriteline(filename,lat,lon,alt,'Name',name,'Color','k','Width',2, ...
    'AltitudeMode','relativeToSeaLevel');

Откройте файл KML.

openKML(filename)

Добавьте filename к kmlFilenames.

kmlFilenames{end+1} = filename;

Пример 10: запишите круги в файл KML

Этот пример пишет круги как линии вокруг аэропорта Лондон-Сити к файлу KML. Пример включает LookAt виртуальная камера.

Присвойте значения широты и долготы для центра функции.

lat0 = 51.50487;
lon0 = .05235;

Присвойте azimuth к [], чтобы вычислить полный маленький круг. Используйте эллипсоид WGS84.

azimuth = [];
spheroid = wgs84Ellipsoid;

Вычислите маленькие круги 3 000, 2000, и 1 000-метровый радиус. Присвойте значение цвета 'blue', 'green', и 'red' для каждого круга. Присвойте значение вертикального изменения 100 метров (над землей) для каждого круга. Используйте вектор геоформы линии, чтобы содержать данные.

radius = 3000:-1000:1000;
colors = {'blue','green','red'};
elevation = 100;
circles = geoshape(0,0,'Name','','Color','','Elevation',elevation);
for k = 1:length(radius)
    [lat, lon] = scircle1(lat0,lon0,radius(k),azimuth,spheroid);
    circles(k).Latitude = lat;
    circles(k).Longitude = lon;
    circles(k).Name = [num2str(radius(k)) ' Meters'];
    circles(k).Color = colors{k};
    circles(k).Elevation = elevation;
end

Используйте вектор геоточки, чтобы задать LookAt виртуальная камера с точкой зрения с востока аэропорта и выровненный со взлетно-посадочной полосой.

lat = 51.503169;
lon =  0.105478;
range = 3500;
heading = 270;
tilt =  60;
lookAt = geopoint(lat,lon,'Range',range,'Heading',heading,'Tilt',tilt);

Используйте kmlwrite записать вектор геоформы, содержащий круги и сопоставленные данные к файлу KML.

filename = fullfile(kmlFolder,'Small_Circles.kml');
kmlwrite(filename,circles,'AltitudeMode','relativeToGround','Width',2, ...
    'Name',circles.Name,'Color',circles.Color,'LookAt',lookAt);

Откройте файл KML. Используя Google Earth, LookAt точка наблюдения установлена при нажатии на любую 1000 Meters, 2000 Meters, или 3000 Meters строки в списке Мест.

openKML(filename)

Добавьте filename к kmlFilenames.

kmlFilenames{end+1} = filename;

Пример 11: запишите круговые многоугольники в файл KML

Этот пример пишет круговые многоугольники вокруг аэропорта Лондон-Сити к файлу KML. Это включает LookAt виртуальная камера и использование те же данные, вычисленные на шаге 9.

Измените Geometry значение свойства вектора геоформы к 'polygon'. Многоугольники чертятся в том же порядке как вектор геоформы и индексируются от самого большого до самых маленьких радиусов, таким образом каждый многоугольник отобразится в браузере.

circles.Geometry = 'polygon';

Измените вертикальное изменение каждого многоугольника.

circles.Elevation = 1000:1000:3000;

Используйте вектор геоточки, чтобы задать LookAt виртуальная камера с точкой зрения с востока аэропорта, выровненного со взлетно-посадочной полосой, и в целях всех трех многоугольников.

lat = 51.501587;
lon = 0.066147;
range = 13110;
heading = 270;
tilt = 60;
lookAt = geopoint(lat,lon,'Range',range,'Heading',heading,'Tilt',tilt);

Используйте kmlwrite чтобы записать многоугольник геоформируют вектор, содержащий круговые многоугольники и сопоставленные данные к файлу KML. Вытесните многоугольники к земле. Установите цвет обводки многоугольника на черный цвет и присвойте альфа-значение поверхности, чтобы обеспечить видимость в многоугольнике.

filename = fullfile(kmlFolder,'Small_Circle_Polygons.kml');
name = circles.Name;
color = circles.Color;
kmlwrite(filename,circles,'AltitudeMode','relativeToGround','Extrude',true, ...
    'Name',name,'FaceColor',color,'EdgeColor','k','FaceAlpha',.6,'LookAt',lookAt);

Откройте файл KML. Используя Google Earth, LookAt точка наблюдения установлена при нажатии на любую 1000 Meters, 2000 Meters, или 3000 Meters строки в списке Мест.

openKML(filename)

Добавьте filename к kmlFilenames.

kmlFilenames{end+1} = filename;

Пример 12: Запишите Данные о Многоугольнике от Файла форм до файла KML

Этот пример пишет данные о многоугольнике из файла форм под названием usastatelo.shp к файлу KML. Поверхности многоугольника установлены с цветом, подходящим для политических областей. Поверхности многоугольника собираются с альфа-значением обеспечить видимость в многоугольнике.

states = readgeotable('usastatelo.shp');
colors = polcmap(height(states));
name = states.Name;
filename = fullfile(kmlFolder,'usastatelo.kml');
kmlwrite(filename,states,'Name',name,'FaceColor',colors,'FaceAlpha',0.6, ...
    'EdgeColor','k')

Откройте файл KML.

openKML(filename)

Добавьте filename к kmlFilenames.

kmlFilenames{end+1} = filename;

Пример 13: запишите контуры многоугольника в файл KML

Этот пример очерчивает сетку в системе локальной координаты, возвращает контуры в географической системе и пишет контуры многоугольника в файл KML.

Создайте сетку в локальной системе.

X = -150000:10000:150000;
Y =  0:10000:300000;
[xmesh, ymesh] = meshgrid(X/50000, (Y - 150000)/50000);
Z = 8 + peaks(xmesh, ymesh);

Задайте локальный геодезический источник под Франкфуртом, Германия и эллипсоидальной высотой.

lat0 = 50.108;
lon0 = 8.6732;
h0 = 100;

Задайте уровни контура.

levels = 0:2:18;

Очертите сетку и возвратите выходной параметр в векторе геоформы многоугольника.

[~, contourPolygons] = geocontourxy(X,Y,Z,lat0,lon0,h0,'LevelList',levels);

Выведите контуры к файлу KML. Боритесь с альфа-значением. Установите CutPolygons к false поскольку высотные значения не универсальны. Зафиксируйте многоугольники к земле.

colors = parula(length(contourPolygons));
filename = fullfile(kmlFolder,'Contour_Polygons.kml');
kmlwrite(filename,contourPolygons,'FaceColor',colors,'FaceAlpha',.6, ...
    'EdgeColor','k','CutPolygons',false,'AltitudeMode','clampToGround')

Откройте файл KML.

openKML(filename)

Добавьте filename к kmlFilenames.

kmlFilenames{end+1} = filename;

Пример 14: запишите многоугольник с внутренним звонком к файлу KML

Этот пример создает многоугольник с внутренним звонком вокруг Эйфелевой башни и пишет многоугольник в файл KML. Высота многоугольника установлена в 500 метров над землей.

lat0 = 48.858288;
lon0 = 2.294548;
outerRadius = .02;
innerRadius = .01;
[lat1,lon1] = scircle1(lat0,lon0,outerRadius);
[lat2,lon2] = scircle1(lat0,lon0,innerRadius);
[lon2,lat2] = poly2ccw(lon2,lat2);
lat = [lat1; NaN; lat2];
lon = [lon1; NaN; lon2];
alt = 500;
filename = fullfile(kmlFolder,'EiffelTower.kml');

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

kmlwritepolygon(filename,lat,lon,alt,'EdgeColor','k','FaceColor','c', ...
    'FaceAlpha',.5)

Откройте файл KML.

openKML(filename)

Добавьте filename к kmlFilenames.

kmlFilenames{end+1} = filename;

Удалите сгенерированные файлы KML

Опционально, удалите новые файлы KML из своего KML папка выхода.

if ~useApplication
    for k = 1:length(kmlFilenames)
        delete(kmlFilenames{k})
    end
end

Информация о наборе данных

Данные в worldcities.shp из Цифрового Графика Мира (DCW) слой браузера, опубликованный американской Национальной Геопространственной Спецслужбой (NGA), раньше Национальным Агентством по Формированию изображений и Отображению (NIMA). Для получения дополнительной информации о наборе данных, используйте команду type worldcities.txt.

Данные в tsunamis.shp от Глобальной Базы данных Цунами, американского Национального центра картографических данных (NGDC), Национального управления океанических и атмосферных исследований (NOAA). Для получения дополнительной информации о наборе данных, используйте команду type tsunamis.txt.

Данные в usastatelo.shp основан на данных из DataBank II Мира CIA и американского состояния "Сайта Бюро переписи и графства Куикфэктс". Для получения дополнительной информации о наборе данных, используйте команду type usastatelo.txt. Для обновленной ссылки на американское состояние "Сайта Бюро переписи и графство Куикфэктс", см. https://www.census.gov/quickfacts/fact/table/US/PST045219.

Смотрите также

| | |

Для просмотра документации необходимо авторизоваться на сайте