geoshape

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

Описание

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

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

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

Создание

Описание

пример

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 значения полей. Кроме того, 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 значения свойств.

Свойства

расширить все

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

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

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

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

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

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

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

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

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

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

  • Если a 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]

Создайте вектор геошапы с помощью Пары "имя-значение" для определения свойства новой возможности. Этот пример задает свойство, называемое '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 разделитель, который разделяет данные функции Vertex в классе geoshape.

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 из каждой записи в массиве структур с помощью записи через точку. Добавьте динамическое свойство Feature, 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';

Добавьте Paderborn Germany к вектору геошапа.

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 свойство Dynamic 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 значения.

Чтобы создать вектор геошапы, содержащий свойство dynamic Feature, используйте массив, длина которого совпадает с длиной массива координатных ячеек. Для примера добавьте MaximumElevation свойство Dynamic Feature.

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]

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

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

load coastlines

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

pts = [coastlat coastlon];

Создайте объект геосепа и сохраните данные о широте и долготе. Если вы храните значения координат широты и долготы в массиве n на 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];

Создайте объект геосепа и сохраните данные о широте и долготе. Если вы храните значения координат широты и долготы в массиве 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 свойство вектора геошапы задается с меньшим количеством значений, чем содержится в объекте, затем все остальные свойства уменьшаются в размере.

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

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

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

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

    Используйте индексацию для сортировки и изменения динамических функций

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

Введенный в R2012a