geoshape

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

Описание

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

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

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

Чтобы создать географическую точку, линия или форма многоугольника для использования с геопространственной таблицей, создает geopointshape, geolineshape, или geopolyshape объект вместо этого.

Создание

Описание

пример

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, Latitudelon или Longitude, затем те значения полей проигнорированы начиная с latitude и longitude входные векторы устанавливают Latitude и Longitude значения свойств.

Свойства

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

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.shp', '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: [73.4571 73.0669 72.8343 72.6010 72.2894 NaN NaN 72.2894 ... ]
    Longitude: [126.7796 126.5321 126.3121 126.2383 126.0362 NaN NaN ... ]
 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: [73.4571 73.0669 72.8343 72.6010 72.2894 NaN NaN 72.2894 ... ]
    Longitude: [126.7796 126.5321 126.3121 126.2383 126.0362 NaN NaN ... ]
 Feature properties:
    RiverName: {1x128 cell}

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

structArray = shaperead('worldrivers.shp', '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.shp', '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месяцденьчасминута.

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.gpx')
trk1 = 
 1851x1 geopoint vector with properties:

 Collection properties:
     Geometry: 'point'
     Metadata: [1x1 struct]
 Feature properties:
     Latitude: [42.2995 42.2995 42.2994 42.2994 42.2994 42.2994 42.2994 ... ]
    Longitude: [-71.3502 -71.3504 -71.3504 -71.3504 -71.3504 -71.3504 ... ]
    Elevation: [90.0206 90.0206 90.0206 90.5013 90.0206 90.0206 90.0206 ... ]
         Time: {1x1851 cell}

trk2 = gpxread('sample_tracks.gpx', '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: [42.2995 42.2995 42.2994 42.2994 42.2994 42.2994 42.2994 ... ]
    Longitude: [-71.3502 -71.3504 -71.3504 -71.3504 -71.3504 -71.3504 ... ]
    Elevation: [90.0206 90.0206 90.0206 90.5013 90.0206 90.0206 90.0206 ... ]
         Time: {1x2591 cell}

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

Чтобы создать вектор геоформы, содержащий динамическое свойство 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: [42.2995 42.2995 42.2994 42.2994 42.2994 42.2994 42.2994 ... ]
           Longitude: [-71.3502 -71.3504 -71.3504 -71.3504 -71.3504 -71.3504 ... ]
           Elevation: [90.0206 90.0206 90.0206 90.5013 90.0206 90.0206 90.0206 ... ]
                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: [-83.8300 -84.3300 -84.5000 -84.6700 -84.9200 -85.4200 ... ]
    Longitude: [-180 -178 -174 -170 -166.0000 -163 -158 -152 -146 -147 ... ]

Обратите внимание на то, что 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: [-83.8300 -84.3300 -84.5000 -84.6700 -84.9200 -85.4200 ... ]
    Longitude: [-83.8300 -84.3300 -84.5000 -84.6700 -84.9200 -85.4200 ... ]

Больше о

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

Советы

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

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

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

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

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

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

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

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

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

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

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