exponenta event banner

геоформа

Вектор географической формы

Описание

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

Атрибуты, изменяющиеся пространственно, называются свойствами вершин. Эти элементы вектора геошапы связаны таким образом, что длина значений свойств координат широты и долготы всегда равна длине любых дополнительных динамических свойств вершины.

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

Создание

Описание

пример

s = geoshape() создает пустой вектор геошейпа, s, с этими настройками свойств по умолчанию.

s = 

 0x1 geoshape vector with properties:

 Collection properties:
     Geometry: 'line'
     Metadata: [1x1 struct]
 Vertex properties:
     Latitude: []
    Longitude: []

s всегда является вектором столбца.

пример

s = geoshape(latitude,longitude) устанавливает Latitude и Longitude свойства вектора геошейпа s.

пример

s = geoshape(latitude,longitude,Name,Value) устанавливает Latitude и Longitude затем добавляет динамические свойства к вектору геошейпа с помощью Name,Value пары аргументов. Можно указать несколько аргументов пары имя-значение в любом порядке как Name1,Value1,...,NameN,ValueN.

пример

s = geoshape(structArray) создает geoshape вектор из полей структурного массива, structArray.

  • Если structArray содержит поле Lat, и не содержит поля Latitude, то Latitude значения свойств устанавливаются равными Lat значения полей. Подобное поведение происходит, когда structArray содержит поле Lon и не содержит поля Longitude.

  • Если structArray содержит оба Lat и Latitude поля, затем Latitude значения свойств устанавливаются равными Latitude значения полей. Также, a Lat динамическое свойство создается и его значения устанавливаются равными Lat значения полей. Подобное поведение имеет место для Lon и Longitude поля, если оба присутствуют в structArray.

  • Другое structArray поля назначены s и становятся динамическими свойствами. Значения полей в structArray , которые не являются числовыми значениями, строковые скаляры, строковые массивы, символьные векторы, логические или клеточные массивы числовых значений, логические или символьные векторы игнорируются. Векторы в массивах ячеек можно указывать как векторы строк или столбцов.

пример

s = geoshape(latitude,longitude,structArray) устанавливает Latitude и Longitude и устанавливает динамические свойства из значений поля structArray.

  • Если structArray содержит поля Lat, Latitude, Lon или Longitude, то эти значения полей игнорируются, поскольку latitude и longitude входные векторы устанавливают Latitude и Longitude значения свойств.

Свойства

развернуть все

geoshape класс - это общий класс, представляющий различные географические особенности. Этот класс позволяет элементам иметь несколько вершин и, таким образом, может представлять прямые и многоугольники в дополнение к многоточиям. Дополнительные сведения о типах свойств в geoshape, см. «Свойства коллекции», «Свойства вершин» и «Свойства элементов».

Динамические свойства - это новые элементы и вершины, которые добавляются к вектору геошапы. Динамические свойства можно присоединить к вектору геошейпа во время построения с помощью Name,Value аргумент или после построения с использованием точки (.) нотация. Это аналогично добавлению новых полей в структуру. Пример добавления свойств динамических элементов см. в разделе Создание вектора геошапы с динамическими свойствами.

Форма каждого элемента в векторе геошейпа, указанная как 'line', 'point', или 'polygon'. Geometry является свойством Collection, поэтому на экземпляр объекта может приходиться только одно значение, а его назначение является чисто информационным. Три допустимых значения для Geometry не изменяйте поведение класса. Класс не проверяет топологию линии или полигона.

Типы данных: char | string

Координаты широты, заданные как числовая строка или вектор столбца. Latitude хранится как вектор строки. Latitude является свойством Vertex.

Типы данных: double | single

Координаты долготы, заданные как вектор строки или столбца. Longitude хранится как вектор строки. Longitude является свойством Vertex.

Типы данных: double | single

Информация для каждого элемента, указанная как скалярная структура. В структуру можно добавить любой тип данных. Metadata является свойством Collection, поэтому допускается только один экземпляр на объект.

  • Если 'Metadata' предоставляется как имя динамического свойства в конструкторе, и соответствующее значение является скалярной структурой, то Value копируется в Metadata собственность. В противном случае выдается сообщение об ошибке.

  • Если Metadata поле предоставляется structArray, и оба Metadata и structArray являются скалярными структурами, то Metadata значение поля копируется в Metadata значение свойства. Если structArray является скаляром, но Metadata поле не является структурой, после чего выдается ошибка. Если structArray не является скалярным, то Metadata поле игнорируется.

Типы данных: struct

Функции объекта

append Добавление элементов к географическому или плоскому вектору
catКонкатенат географического или планарного вектора
dispОтображение географического или плоского вектора
fieldnamesВозврат динамических имен свойств географического или планарного вектора
isemptyОпределение пустого географического или планарного вектора
isfieldОпределение наличия динамического свойства в географическом или плоском векторе
ispropОпределение наличия свойства в географическом или плоском векторе
length Возвращаемое число элементов в географическом или плоском векторе
propertiesВозвращать имена свойств географического или планарного вектора
rmfieldУдаление динамического свойства из географического или плоского вектора
rmpropУдаление свойства из географического или плоского вектора
sizeВозвращаемый размер географического или планарного вектора
struct Преобразование географического или планарного вектора в скалярную структуру
vertcatВертикальная конкатенация географических или плоских векторов

Примеры

свернуть все

Создайте пустой вектор геошейпа.

s = geoshape()
s = 

 0x1 geoshape vector with properties:

 Collection properties:
     Geometry: 'line'
     Metadata: [1x1 struct]
 Vertex properties:
     Latitude: []
    Longitude: []

Установите Latitude и Longitude значения свойств с использованием точечной нотации.

s.Latitude = 0:45:90;
s.Longitude = [10 10 10];

Отображение обновленного вектора геошейпа.

s
s = 
 1x1 geoshape vector with properties:

 Collection properties:
     Geometry: 'line'
     Metadata: [1x1 struct]
 Vertex properties:
     Latitude: [0 45 90]
    Longitude: [10 10 10]

Создайте вектор геошапы, задающий значения широты и долготы в качестве входных аргументов.

s = geoshape([42 43 45],[10 11 15])
s = 
 1x1 geoshape vector with properties:

 Collection properties:
     Geometry: 'line'
     Metadata: [1x1 struct]
 Vertex properties:
     Latitude: [42 43 45]
    Longitude: [10 11 15]

Создайте вектор геообращения с помощью пары Имя (Name) - Значение (Value) для определения нового свойства элемента. В этом примере определяется свойство с именем 'Temperature' и присваивает ему значение 89.

point = geoshape(42, -72, 'Temperature', 89)
point = 
 1x1 geoshape vector with properties:

 Collection properties:
       Geometry: 'line'
       Metadata: [1x1 struct]
 Vertex properties:
       Latitude: 42
      Longitude: -72
 Feature properties:
    Temperature: 89

Чтобы добавить динамические свойства к вектору геошейпа после его создания, используйте стандартное точечное представление. Добавление динамического свойства с именем 'TemperatureUnits' со значением 'Fahrenheit'.

point.TemperatureUnits = 'Fahrenheit'
point = 
 1x1 geoshape vector with properties:

 Collection properties:
            Geometry: 'line'
            Metadata: [1x1 struct]
 Vertex properties:
            Latitude: 42
           Longitude: -72
 Feature properties:
         Temperature: 89
    TemperatureUnits: 'Fahrenheit'

Для изменения свойств используйте стандартное точечное представление. Обновить температуру и изменить 'Geometry' кому 'point'.

point.Temperature = 86;
point.Geometry = 'point'
point = 
 1x1 geoshape vector with properties:

 Collection properties:
            Geometry: 'point'
            Metadata: [1x1 struct]
 Vertex properties:
            Latitude: 42
           Longitude: -72
 Feature properties:
         Temperature: 86
    TemperatureUnits: 'Fahrenheit'

В этом примере показаны два способа создания вектора геошейпа с одинаковыми элементами. Первый способ использует структурный массив в конструкторе для вектора геошейпа. Второй способ добавляет поля массива структуры к вектору геошейпа после построения.

Сначала считывайте данные в структурный массив. Массив в этом примере содержит 128 элементов. Каждый элемент определяет реку как линию, используя несколько вершин расположения.

structArray = shaperead('worldrivers', 'UseGeoCoords', true);

Отображение первого элемента в structArray. Обратите внимание, что Lat и Lon векторы оканчиваются NaN разделитель, разделяющий данные элемента «Вершина» в классе геошейпов.

structArray(1)
ans = struct with fields:
       Geometry: 'Line'
    BoundingBox: [2x2 double]
            Lon: [126.7796 126.5321 126.3121 126.2383 126.0362 NaN]
            Lat: [73.4571 73.0669 72.8343 72.6010 72.2894 NaN]
           Name: 'Lena'

Метод 1: Предоставьте структуру в качестве аргумента конструктору, который строит вектор геошапы.

Создайте вектор геошейпа, предоставив массив структуры в качестве аргумента конструктору.

shape1 = geoshape(structArray)
shape1 = 
 128x1 geoshape vector with properties:

 Collection properties:
     Geometry: 'line'
     Metadata: [1x1 struct]
 Vertex properties:
  (128 features concatenated with 127 delimiters)
     Latitude: [1x5542 double]
    Longitude: [1x5542 double]
 Feature properties:
         Name: {1x128 cell}

Обратите внимание, что BoundingBox поле в structArray не назначается свойству в shape1 поскольку значение поля не является поддерживаемым типом.

Метод 2: Добавление элементов к вектору геошапы после построения.

Создайте пустой вектор геошейпа.

shape2 = geoshape;

Добавление свойств вершины Latitude и Longitude из каждой записи в массиве структуры с использованием точечной нотации. Добавьте динамическое свойство «Элемент», RiverName, название реки из каждой записи в structArray. Так как значение по умолчанию Geometry Свойство коллекции: 'line' в этом примере нет необходимости задавать его явно.

shape2.Latitude  = {structArray.Lat};
shape2.Longitude = {structArray.Lon};
shape2.RiverName = {structArray.Name}
shape2 = 
 128x1 geoshape vector with properties:

 Collection properties:
     Geometry: 'line'
     Metadata: [1x1 struct]
 Vertex properties:
  (128 features concatenated with 127 delimiters)
     Latitude: [1x5542 double]
    Longitude: [1x5542 double]
 Feature properties:
    RiverName: {1x128 cell}

Сначала считывайте данные в структурный массив. Массив в этом примере содержит 128 элементов. Каждый элемент определяет реку как линию, используя несколько вершин расположения.

structArray = shaperead('worldrivers', 'UseGeoCoords', true)
structArray=128×1 struct array with fields:
    Geometry
    BoundingBox
    Lon
    Lat
    Name

Создайте векторы широты и долготы. В иллюстративных целях векторы не соответствуют элементам structArray.

lat = {[0:10:40], [1:5]};
lon = {[-60:30:60], [0:2:8]};

Создайте вектор геошапы с использованием векторов широты и долготы и структурного массива.

s = geoshape(lat,lon,structArray);

Отображение первых трех элементов s. Элементы разделяются с помощью NaN разделитель.

s(1:3)
ans = 
 3x1 geoshape vector with properties:

 Collection properties:
     Geometry: 'line'
     Metadata: [1x1 struct]
 Vertex properties:
  (3 features concatenated with 2 delimiters)
     Latitude: [0 10 20 30 40 NaN 1 2 3 4 5 NaN 0]
    Longitude: [-60 -30 0 30 60 NaN 0 2 4 6 8 NaN 0]
 Feature properties:
         Name: {'Lena'  'Lena'  'Mackenzie'}

Обратите внимание, что geoshape использует аргументы lat и lon для заполнения Latitude и Longitude свойства, хотя structArray обеспечивает Lat и Lon значения полей. Также, с lat и lon имеют меньше элементов, чем элементов в structArray, Latitude и Longitude свойства расширяются по размеру, используя значение 0.

Создайте вектор геошейпа, содержащий одну особенность местоположений городов мира.

S = shaperead('worldcities.shp', 'UseGeoCoords', true);
cities = geoshape([S.Lat], [S.Lon], 'Name', {{S.Name}});
cities.Geometry = 'point';

Добавьте Падерборн Германия к вектору геошапа.

lat = 51.715254;
lon = 8.75213;
cities(1).Latitude(end+1) = lat;
cities(1).Longitude(end) = lon;
cities(1).Name{end} = 'Paderborn'
cities = 

 1x1 geoshape vector with properties:

 Collection properties:
     Geometry: 'point'
     Metadata: [1x1 struct]
 Vertex properties:
     Latitude: [1x319 double]
    Longitude: [1x319 double]
         Name: {1x319 cell}

Длина каждого свойства вершины увеличивается на единицу, когда Latitude(end+1) установлен. Остальные свойства индексируются с помощью end.

Последнюю точку можно отобразить, построив вектор геоинтерфейса.

paderborn = geopoint(cities.Latitude(end), cities.Longitude(end), ...
   'Name', cities.Name{end})
paderborn = 

 1x1 geopoint vector with properties:

 Collection properties:
     Geometry: 'point'
     Metadata: [1x1 struct]
 Feature properties:
     Latitude: 51.7153
    Longitude: 8.7521
         Name: 'Paderborn'

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

northern = cities(1).Latitude >= 0;
southern = cities(1).Latitude < 0;
index = {northern; southern};
location = {'Northern Hemisphere', 'Southern Hemisphere'};
hemispheres = geoshape();
for k = 1:length(index)
   hemispheres = append(hemispheres, ...
      cities.Latitude(index{k}), cities.Longitude(index{k}), ...
      'Name', {cities.Name(index{k})}, 'Location', location{k});
end
hemispheres.Geometry = 'point'
hemispheres = 

 2x1 geoshape vector with properties:

 Collection properties:
     Geometry: 'point'
     Metadata: [1x1 struct]
 Vertex properties:
  (2 features concatenated with 1 delimiter)
     Latitude: [1x320 double]
    Longitude: [1x320 double]
         Name: {1x320 cell}
 Feature properties:
     Location: {'Northern Hemisphere' 'Southern Hemisphere'}

Постройте участки северных городов в красном цвете и южных городов в синем.

hemispheres.Color = {'red', 'blue'};
figure;worldmap('world')
geoshow('landareas.shp')
for k=1:2
   geoshow(hemispheres(k).Latitude, hemispheres(k).Longitude, ...
      'DisplayType', hemispheres.Geometry, ...
      'MarkerEdgeColor', hemispheres(k).Color)
end

Создайте вектор геошейпа и сортируйте его динамические свойства.

shape = geoshape(shaperead('tsunamis', 'UseGeoCoords', true));
shape.Geometry = 'point';
shape = shape(:, sort(fieldnames(shape)))
shape = 

 162x1 geoshape vector with properties:

 Collection properties:
       Geometry: 'point'
       Metadata: [1x1 struct]
 Vertex properties:
  (162 features concatenated with 161 delimiters)
       Latitude: [1x323 double]
      Longitude: [1x323 double]
 Feature properties:
          Cause: {1x162 cell}
     Cause_Code: [1x162 double]
        Country: {1x162 cell}
            Day: [1x162 double]
    Desc_Deaths: [1x162 double]
         Eq_Mag: [1x162 double]
           Hour: [1x162 double]
       Iida_Mag: [1x162 double]
      Intensity: [1x162 double]
       Location: {1x162 cell}
     Max_Height: [1x162 double]
         Minute: [1x162 double]
          Month: [1x162 double]
     Num_Deaths: [1x162 double]
         Second: [1x162 double]
       Val_Code: [1x162 double]
       Validity: {1x162 cell}
           Year: [1x162 double

Измените вектор геошейпа, чтобы он содержал только динамические свойства. Year, Month, Day, Hour, Minute.

shape = shape(:, {'Year', 'Month', 'Day', 'Hour', 'Minute'})
shape = 

 162x1 geoshape vector with properties:

 Collection properties:
     Geometry: 'point'
     Metadata: [1x1 struct]
 Vertex properties:
  (162 features concatenated with 161 delimiters)
     Latitude: [1x323 double]
    Longitude: [1x323 double]
 Feature properties:
         Year: [1x162 double]
        Month: [1x162 double]
          Day: [1x162 double]
         Hour: [1x162 double]
       Minute: [1x162 double]

Отображение первых пяти элементов.

shape(1:5)
ans = 

 5x1 geoshape vector with properties:

 Collection properties:
     Geometry: 'point'
     Metadata: [1x1 struct]
 Vertex properties:
  (5 features concatenated with 4 delimiters)
     Latitude: [-3.8000 NaN 19.5000 NaN -9.0200 NaN 42.1500 NaN 19.1000]
    Longitude: [128.3000 NaN -156 NaN 157.9500 NaN 143.8500 NaN -155]
 Feature properties:
         Year: [1950 1951 1951 1952 1952]
        Month: [10 8 12 3 3]
          Day: [8 21 22 4 17]
         Hour: [3 10 NaN 1 3]
       Minute: [23 57 NaN 22 58]

Считывание нескольких данных журнала отслеживания GPS из файла. trk1 и trk2 являются объектами географической точки.

trk1 = gpxread('sample_tracks')
trk1 = 
 1851x1 geopoint vector with properties:

 Collection properties:
     Geometry: 'point'
     Metadata: [1x1 struct]
 Feature properties:
     Latitude: [1x1851 double]
    Longitude: [1x1851 double]
    Elevation: [1x1851 double]
         Time: {1x1851 cell}

trk2 = gpxread('sample_tracks', 'Index', 2);

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

lat = {trk1.Latitude, trk2.Latitude};
lon = {trk1.Longitude, trk2.Longitude};

Поместите значения отметки и времени в массивы ячеек.

elevation = {trk1.Elevation, trk2.Elevation};
time = {trk1.Time, trk2.Time};

Построение вектора геошейпа, содержащего два элемента журнала дорожек, которые включают Elevation и Time в качестве динамических свойств вершины.

tracks = geoshape(lat, lon, 'Elevation', elevation, 'Time', time)
tracks = 
 2x1 geoshape vector with properties:

 Collection properties:
     Geometry: 'line'
     Metadata: [1x1 struct]
 Vertex properties:
  (2 features concatenated with 1 delimiter)
     Latitude: [1x2591 double]
    Longitude: [1x2591 double]
    Elevation: [1x2591 double]
         Time: {1x2591 cell}

Каждый Latitude и Longitude координатная пара имеет связанный Elevation и Time значения.

Для построения вектора геоскопии, содержащего динамическое свойство «Элемент», используйте массив той же длины, что и массив ячеек координат. Например, добавить MaximumElevation динамическое свойство элемента.

tracks.MaximumElevation = [max(trk1.Elevation) max(trk2.Elevation)]
tracks = 
 2x1 geoshape vector with properties:

 Collection properties:
            Geometry: 'line'
            Metadata: [1x1 struct]
 Vertex properties:
  (2 features concatenated with 1 delimiter)
            Latitude: [1x2591 double]
           Longitude: [1x2591 double]
           Elevation: [1x2591 double]
                Time: {1x2591 cell}
 Feature properties:
    MaximumElevation: [92.4240 76.1000]

Значение свойства Feature имеет только два числовых значения, по одному для каждого элемента.

Загрузка данных береговой линии из MAT-файла.

load coastlines

Создайте массив значений широты и долготы береговой линии n-by-2.

pts = [coastlat coastlon];

Создайте объект geoshape и сохраните данные широты и долготы. Если значения координат широты и долготы хранятся в массиве n-by-2, geoshape назначает Latitude значения свойств первого столбца и Longitude значения свойств для второго столбца.

shape = geoshape();
shape(1) =  pts
shape = 
 1x1 geoshape vector with properties:

 Collection properties:
     Geometry: 'line'
     Metadata: [1x1 struct]
 Vertex properties:
     Latitude: [1x9865 double]
    Longitude: [1x9865 double]

Обратите внимание, что Latitude и Longitude сохраняются векторы строк в векторе геошейпа.

Теперь создайте массив значений широты и долготы береговой линии 2 на метр. Обратите внимание на точку с запятой внутри скобок.

pts2 = [coastlat; coastlon];

Создайте объект geoshape и сохраните данные широты и долготы. Если значения координат широты и долготы хранятся в массиве 2 на м, geoshape назначает Latitude значения свойств для первой строки и Longitude значений свойств во вторую строку.

shape2 = geoshape();
shape2(1) = pts2
shape2 = 
 1x1 geoshape vector with properties:

 Collection properties:
     Geometry: 'line'
     Metadata: [1x1 struct]
 Vertex properties:
     Latitude: [1x19730 double]
    Longitude: [1x19730 double]

Подробнее

развернуть все

Совет

  • geoshape функция разделяет элементы с помощью NaN значения. При отображении элемента с помощью скаляра для индексирования в вектор геошейпа, например s(1), то NaN значения, разделяющие элементы, не отображаются.

  • Если Latitude, Longitudeили динамическое свойство задается с большим количеством значений, чем элементы в векторе геошейпа, затем все другие свойства расширяются по размеру, используя 0 для числовых значений и пустой символьный вектор ('') для значений ячеек.

  • Если динамическое свойство установлено с меньшим количеством значений, чем количество элементов, то это динамическое свойство расширяется в соответствии с размером других свойств, вставляя 0, если значение является числовым или пустым символьным вектором (''), если значение является массивом ячеек.

  • Если Latitude или Longitude свойство вектора geoshape задается с меньшим количеством значений, чем содержится в объекте, после чего все остальные свойства уменьшаются в размере.

  • Если либо Latitude или Longitude имеют значение [], затем оба свойства координат имеют значение [] и все динамические свойства удаляются.

  • Если динамическое свойство имеет значение [], оно удаляется из объекта.

  • Вектор геошейпа может индексироваться как любой вектор MATLAB ®. Для получения определенного элемента можно получить доступ к любому элементу вектора. Следующие примеры демонстрируют такое поведение:

    Использование индексирования для добавления одной точки и фигуры к вектору Geoshape

    Использование индексирования для сортировки и изменения динамических элементов

    Построение вектора Geoshape из нескольких объектов

Представлен в R2012a