В этом примере показано, как структурировать данные о географических точках, линиях и полигонных векторах и экспортировать их в файл Keyhole Markup Language (KML). KML - язык разметки на основе XML, предназначенный для визуализации географических данных на веб-картах или «земных браузерах», таких как Google Earth™, Google Maps™, NASA WorldWind и ESRI ® ArcGIS™ Explorer.
Следующие функции записывают географические данные в файл KML:
kmlwritepoint Запись географических точек в файл KML
kmlwriteline Запись географической линии в файл KML
kmlwritepolygon Запись географического многоугольника в файл KML
kmlwrite Запись географических данных в файл 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
Этот пример запишет одну точку в файл KML.
Присвойте значения широты и долготы для Paderborn, Германия.
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;
Этот пример запишет одну точку в файл KML. Надпись включает значок и описание с HTML разметки.
Присвойте координаты широты и долготы для точки, которая находится в штаб-квартире MathWorks ® в Натике, Массачусетс.
lat = 42.299827; lon = -71.350273;
Создайте описание для макета. Включите 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');
Присвойте имя для макета.
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;
Этот пример запишет местоположения крупных европейских городов в файл KML, включая имена городов, и удаляет таблицу описания по умолчанию.
Присвойте ограничивающий прямоугольник широты долготы.
latlim = [ 30; 75]; lonlim = [-25; 45];
Считайте данные из worldcities
shapefile в массив геомассивов структур.
cities = shaperead('worldcities.shp','UseGeoCoords',true, ... 'BoundingBox',[lonlim, latlim]);
Преобразуйте в геоточку.
cities = geopoint(cities);
Использование kmlwrite
чтобы записать геоточку в файл KML. Присвойте имя макетного знака наименованию города. Удалите описание по умолчанию, так как данные имеют только один атрибут.
filename = fullfile(kmlFolder,'European_Cities.kml'); kmlwrite(filename,cities,'Name',cities.Name,'Description',{});
Откройте файл KML.
openKML(filename)
Добавить filename
на kmlFilenames
.
kmlFilenames{end+1} = filename;
Этот пример записывает знаки расположения событий цунами (приливной волны), сообщенные в течение нескольких десятилетий и отмеченные географически по местоположению источника, в файл KML.
Считайте данные из файла tsunamis shapefile.
tsunamis = shaperead('tsunamis','UseGeoCoords',true);
Преобразуйте в геоточку.
tsunamis = geopoint(tsunamis);
Отсортируйте атрибуты.
tsunamis = tsunamis(:, sort(fieldnames(tsunamis)));
Создайте спецификацию атрибута.
attribspec = makeattribspec(tsunamis);
Измените спецификацию атрибута следующим образом:
Отобразите Max_Height
, Cause
, Year
, Location
, и Country
признаки
Переименуйте Max_Height
поле к Maximum Height
Выделите каждую метку атрибута полужирного шрифта
Установите так, чтобы нуль количество десятичных знаков, используемых для отображения года
Мы знаем самостоятельно, что модулями измерения высоты являются метры, поэтому добавим это к спецификатору формата Height
desiredAttributes = {'Max_Height','Cause','Year','Location','Country'}; allAttributes = fieldnames(attribspec); attributes = setdiff(allAttributes, desiredAttributes); attribspec = rmfield(attribspec, attributes); 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
чтобы записать геоточку, содержащий выбранные атрибуты и исходные местоположения, в файл KML.
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;
Этот пример запишет одну точку с виртуальной камерой 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;
Этот пример запишет одну точку с полем зрения камеры на памятник Вашингтону в Вашингтоне в файл 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;
Этот пример записывает неструктурированные адресные данные в файл 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 для каждой из надписей.
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;
Этот пример запишет одну линию, соединяющую верхнюю часть горы Вашингтон с отелем Mount Washington в Кэрролле, штат Нью-Гемпшир, в файл 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.
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;
Этот пример записывает журнал отслеживания GPS в файл KML.
Считайте журнал треков из файла GPX. Данные в журнале треков были получены из GPS наручных часов, удерживаемых во время скольжения над горой Мэнсфилд в Вермонте, США, 28 августа 2010 года.
track = gpxread('sample_mixed','FeatureType','track');
Использование kmlwriteline
для записи журнала треков в файл KML. Значения повышения, полученные GPS, относятся к уровню моря.
filename = fullfile(kmlFolder, 'GPS_Track_Log.kml'); lat = track.Latitude; lon = track.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;
Этот пример записывает круги как линии вокруг аэропорта Лондона-Сити в файл KML. Пример включает в себя LookAt
виртуальная камера.
Присвойте значения широты и долготы для центра функции.
lat0 = 51.50487; lon0 = .05235;
Присвоение azimuth
чтобы [] вычислить полный маленький круг. Используйте WGS84 эллипсоид.
azimuth = []; spheroid = wgs84Ellipsoid;
Вычислите маленькие круги радиусом 3000, 2000 и 1000 метров. Присвойте значение цвета 'blue'
, 'green'
, и 'red'
для каждого круга. Присвойте значение повышения 100 метров (над землей) для каждого круга. Используйте вектор линии geoshape, чтобы содержать данные.
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
view point устанавливается при нажатии на любой из 1000 Meters
, 2000 Meters
, или 3000 Meters
строки в списке Places.
openKML(filename)
Добавить filename
на kmlFilenames
.
kmlFilenames{end+1} = filename;
Этот пример записывает круговые многоугольники вокруг аэропорта Лондона-Сити в файл 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
view point устанавливается при нажатии на любой из 1000 Meters
, 2000 Meters
, или 3000 Meters
строки в списке Places.
openKML(filename)
Добавить filename
на kmlFilenames
.
kmlFilenames{end+1} = filename;
Этот пример запишет многоугольники из usastatelo
shapefile в файл KML. Грани многоугольника имеют цвет, соответствующий политическим областям. Грани многоугольника заданы альфа- значением для обеспечения видимости внутри многоугольника.
states = shaperead('usastatelo','UseGeoCoords',true); states = geoshape(states); colors = polcmap(length(states)); name = states.Name; filename = fullfile(kmlFolder,'usastatelo.kml'); kmlwrite(filename,states,'Name',name,'FaceColor',colors,'FaceAlpha',.6, ... 'EdgeColor','k')
Откройте файл KML.
openKML(filename)
Добавить filename
на kmlFilenames
.
kmlFilenames{end+1} = filename;
Этот пример строит контуры сетки в локальной системе координат, возвращает контуры в географической системе и записывает многоугольники в файл 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;
Этот пример создает многоугольник с внутренним звонком вокруг Эйфелевой башни и записывает многоугольник в файл 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- выход.
if ~useApplication for k = 1:length(kmlFilenames) delete(kmlFilenames{k}) end end
Данные в worldcities.shp
- браузерный слой Digital Chart of the World (DCW), опубликованный Национальным геопространственным разведывательным управлением США (NGA), ранее - Национальным агентством изображений и отображения (NIMA). Для получения дополнительной информации о наборе данных используйте команду type worldcities.txt
.
Данные в tsunamis.shp
из Глобальной базы данных по цунами, Национального центра геопространственных данных США (NGDC), Национального управления океанических и атмосферных исследований (NOAA). Для получения дополнительной информации о наборе данных используйте команду type tsunamis.txt
.
Данные в usastatelo.shp
основан на данных Всемирного банка данных ЦРУ II и сайта Бюро переписи населения США «State and County QuickFacts». Для получения дополнительной информации о наборе данных используйте команду type usastatelo.txt
. Обновленную ссылку на сайт Бюро переписи населения США «State and County QuickFacts» см. https://www.census.gov/quickfacts/fact/table/US/PST045219.