геоформа

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

Описание

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

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

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

Создание

Синтаксис

s = geoshape()
s = geoshape(latitude,longitude)
s = geoshape(latitude,longitude,Name,Value)
s = geoshape(structArray)
s = geoshape(latitude,longitude,structArray)

Описание

пример

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 устанавливают значения свойств Longitude и Latitude.

Свойства

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

Класс geoshape является общим классом, который представляет различные географические особенности. Этот класс функции разрешений, чтобы иметь больше чем одну вершину и может таким образом представлять строки и полигоны в дополнение к мультиточкам. Для больше о типах свойства в geoshape, смотрите Collection Properties, Vertex Properties и Feature Properties.

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

Форма каждой функции в векторе геоформы, заданном как '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]

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

Добавьте свойства Vertex Latitude и Longitude от каждой записи в массиве структур с помощью записи через точку. Добавьте динамическое свойство Feature, RiverName, имя реки от каждой записи в structArray. Поскольку значением по умолчанию свойства Geometry Collection является '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 = 128x1 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 обеспечивает значения полей Lon и Lat. Кроме того, поскольку 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 как динамические свойства Vertex.

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 сопоставила значения Time и Elevation.

Чтобы создать вектор геоформы, содержащий динамическое свойство Feature, используйте массив, который является той же длиной как координатный массив ячеек. Например, добавьте MaximumElevation динамическое свойство 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 m массивом значений широты и долготы береговой линии. Отметьте точку с запятой в скобках.

pts2 = [coastlat; coastlon];

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

Больше о

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

Советы

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

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

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

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

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

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

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

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

    Создайте вектор геоформы из нескольких объектов

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

Функции

Объекты

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