地理数据结构

在现有的章节提供的实施例,地理数据是在各个变量的形式。映射工具箱™软件还提供了显示,提取和操纵向量地图的集合的一种简单的方法的特征在组织地理数据结构

的地理数据结构是MATLAB®结构阵列,其具有每地理特征的一个元件。每个功能由坐标和属性来表示。保持地理坐标(纬度和经度)的地理数据结构被称为geostruct和一个保存地图坐标(预测Xÿ)被称为mapstruct。地理数据结构仅保持矢量要素,并且不能被用于保持光栅数据(规则或地理定位数据网格或图像)。

形状文件

地理数据结构时矢量地理数据是从shape文件导入最频繁发起。环境系统研究所设计的矢量地理数据shape文件格式。形状文件编码坐标点,多点,线或多边形,与非几何的属性。

Shape文件存储的属性和坐标在单独的文件;它由一个主文件,一个索引文件,以及XBASE文件。所有这三个文件都具有相同的基本名称,并通过扩展来区分.SHP.SHX.DBF, 分别。(例如,给定的基本名称'concord_roads'shape文件的文件名会'concord_roads.shp''concord_roads.shx''concord_roads.dbf')。

地理数据结构的内容

shaperead函数读取向量的特征和从shape文件属性,并返回一个地理数据结构阵列。该shaperead功能确定在从shape文件XBASE表或来自可选的,用户指定的参数运行时属性字段的名称。如果shape文件属性名称不能直接用作字段名,shaperead分配字段适当修改的名称,通常是通过对空间代下划线。

在地理数据结构字段

字段名称 数据类型 描述 注释

几何

特征向量

以下其中一个形状类型:'点'“多点”'线', 要么“多边形”

为一个“折线”,的值几何场简直是'线'

BoundingBox的

2×2阵列的数值

指定的最小和最大特征坐标在以下形式的每个维度值:

[ X ÿ 最大 X 最大 ÿ ]

省略了形状类型'点'

Xÿ经度, 要么纬度

1×N的阵列的类

坐标向量。

ATTR

字符向量或标量数

属性名称,类型和值。

可选的。通常有多个属性。

shaperead功能不万博1manbetx支持任何3-d或“测量的”形状类型:'PointZ''PointM''MultipointZ''MultipointM''PolyLineZ的''PolyLineM中''PolygonZ的''PolyLineM中', 要么“多面体”。此外,虽然“空形”特征可以存在于一个'点'“多点”“折线”, 要么“多边形”shape文件,它们将被忽略。

折线多边形形状

在具有地理数据结构线要么多边形的几何形状,各个特征可具有多个部分断开的线段和多边形环。该部件可包括逆时针内圈是大纲“洞”。有关此方法的说明,请参见显示多边形。每个断开一部分从下通过为NaN内的分离Xÿ(要么纬度经度)载体。您可以使用isShapeMultipart函数来确定一个特征具有的NaN分隔部件。

每个多点或NaN分隔多线或多边形实体构成单个特征,因此具有一个字符矢量或每个属性字段标量双值。这是不可能分配不同的属性这样的特征的不同部分;任何字符载体或数字属性进口(或随后添加到)geostruct或mapstruct适用于组合所有特征的部分。

Mapstructs和Geostructs

默认情况下,shaperead返回包含一个mapstructXÿ领域。如果数据组坐标已经投影(在地图坐标系统),这是合适的。否则,如果数据组坐标是未投影(在地理坐标系统)中,使用参数值对'UseGeoCoords',真为了使shaperead返回具有geostruct经度纬度领域。

坐标类型。如果你不知道shape文件是否使用地理坐标或地图坐标,这里有一些事情你可以试试:

  • 问问你的数据提供者。

  • 采用shapeinfo获得BoundingBox的。通过查看坐标的范围,你可以告诉样的坐标,你有什么。

  • 检查可选.PRJ文件,如果已提供了一个。该.PRJ文件是写在著名的文本,文本标记语言。如果你的.PRJ文件包含术语PROJCS,你有地图坐标。如果你的.PRJ文件包含术语GEOGCS,但不是术语PROJCS,你有地理坐标。

geoshow功能显示存储在geostructs地理特征,并且mapshow功能显示存储在mapstructs地理特征。如果试图以显示与mapstructgeoshow,该功能将发出警告,并呼吁mapshow。如果试图以显示与geostructmapshow,功能项目,一个长方投影并发出警告的坐标。

检查一个地理数据结构

下面是返回未经过滤mapstruct的例子shaperead

S = shaperead( 'concord_roads.shp')

输出显示如下:

S = 609x1结构阵列字段:几何的BoundingBox X Y STREETNAME RT_NUMBER CLASS ADMIN_TYPE LENGTH

shape文件包含609层的功能。除了几何BoundingBox的和坐标字段(Xÿ),有五个属性字段:街道名称RT_NUMBERADMIN_TYPE长度

看看10元:

S(10)

输出显示如下:

ANS =几何: '行' 的BoundingBox:[2×2双] X:[1X9双] Y:[1X9双] STREETNAME: 'WRIGHT FARM' RT_NUMBER: '' CLASS:5 ADMIN_TYPE:0 LENGTH:79.0347

这mapstruct包含'线'特征。第十行有九个顶点。前两个属性的值是字符向量。第二恰好是一个空字符向量。最后三个属性是数字。跨越的元素小号Xÿ可以有不同的长度,但街道名称RT_NUMBER必须始终包含特征向量,并ADMIN_TYPE长度必须始终包含标量加倍。

在这个例子中,shaperead返回一个未经过滤的mapstruct。如果您想筛选出一些属性,看选择Shape文件读取数据了解更多信息。

如何构建地理数据结构

如功能shaperead要么gshhs导入矢量地理数据时将返回geostructs。但是,您可能要创建geostructs或mapstructs自己在某些情况下。例如,你可能进口未存储在shape文件(例如,从MAT文件,从微软矢量地理数据®高强®电子表格,或通过在分隔符的文本文件中读取)。您还可能计算矢量地理数据和属性通过调用各种MATLAB或映射工具箱功能。在这两种情况下,所述坐标和其它数据通常是在工作区矢量或矩阵。包装变量成geostruct或mapstruct可以映射和导出它们更容易,因为地理位置的数据结构提供了若干优点上坐标数组:

  • 所有相关联的地理数据变量被包装在一个容器中,一个结构阵列。

  • 该结构是自文档通过其字段名。

  • 可以根据通过构建它们的属性值会发生变化的点,线,多边形地图符号symbolspec用于显示geostruct或mapstruct。

  • 结构元件和地理特征之间存在一个一对一对应,延伸到的儿童hggroup对象通过构建mapshowgeoshow

实现这些好处并不困难。使用下面的示例为指导,以导入包装载体的地理数据或创建为地理数据结构。

制作点和线Geostructs

下面的示例首先创建包含在不同的洲,并用它绘制三个城市的点geostructgeoshow。然后,它会创建一个包含用于连接这些城市大圆航行轨迹数据线geostruct。最后,它绘制使用symbolspec这些行。

  1. 用一小点数据,近似纬度和三大洲的三个城市经度的开始:

    latparis = 48.87084;lonparis = 2.41306;%巴黎COORDS latsant = -33.36907;lonsant = -70.82851;%圣地亚哥latnyc = 40.69746;lonnyc = -73.93008;%纽约市

  2. 构建点geostruct;它需要有以下必填字段:

    • 几何(在这种情况下'点'

    • 纬度(用于分,这是一个标量加倍)

    • 经度(用于分,这是一个标量加倍)

    %按照惯例第一个字段是几何(维数)。%作为几何是所有元素是相同的,与交易它分配:[城市(1:3).Geometry] =交易(“点”);%的纬度和经度添加到geostruct:城市(1).Lat = latparis;城市(1).Lon = lonparis;城市(2).Lat = latsant;城市(2).Lon = lonsant;城市(3).Lat = latnyc;城市(3).Lon = lonnyc;%添加城市名作为市域。您可以命名可选字段任何你喜欢的不是几何,纬度,经度,X或Y的城市(1)请将.Name =“巴黎”其他%; Cities(2).Name = 'Santiago'; Cities(3).Name = 'New York'; % Inspect your completed geostruct and its first member Cities Cities = 1x3 struct array with fields: Geometry Lat Lon Name Cities(1) ans = Geometry: 'Point' Lat: 48.8708 Lon: 2.4131 Name: 'Paris'

  3. 显示存储在地球陆地的墨卡托投影的geostructlandareas.shpshape文件,设置地图的限制,排除极地地区:

    axesm( '上' '麦卡托', '网格', 'MapLatLimit',[ -  75 75]);tightmap;%映像的geostruct与非洲大陆的轮廓geoshow( 'landareas.shp')%城市地图充满圆形标记geoshow(市, '标记', 'O',...... 'MarkerFaceColor', 'C','MarkerEdgeColor位置”, 'K');%显示在geostruct场名称使用数据的城市名称。%请注意,您必须把名称字段作为单元阵列。TEXTM([城市(:)纬度],[城市(:)经度],... {城市(:)名称。}, 'fontWeight设置', '大胆');

  4. 接下来,建立一个行geostruct打包三个城市之间的大圆航行轨迹:

    %调用新geostruct曲目,并给它一个线几何:[曲目(1:3).Geometry] =交易( '线');%创建一个文本字段识别样的轨迹每个条目。%在这里,他们都将是巨大的圆,标识为“GC”%(使用的某些功能,以表示大圆弧字符向量)trackType =“GC”;[Tracks.Type] =交易(trackType);%给每个磁迹的识别名曲目(1)请将.Name =“巴黎圣地亚哥”;[曲目(1).Lat曲目(1).Lon] = ...磁轨2(trackType,latparis,lonparis,latsant,lonsant);曲目(2),请将.Name = '圣地亚哥 - 纽约';[曲目(2).Lat曲目(2).Lon] = ...磁轨2(trackType,latsant,lonsant,latnyc,lonnyc);曲目(3),请将.Name = '纽约 - 巴黎';[曲目(3).Lat曲目(3).Lon] = ...磁轨2(trackType,latnyc,lonnyc,latparis,lonparis);

  5. 大圈轨道的计算长度:

    %的距离函数计算的距离和方位角%给出点之间,以度为单位。在geostruct同时存储。对于j = 1:numel(曲目)[测距AZ] = ...距离(trackType,曲目(j)的.Lat(1),...曲目(j)的.Lon(1),...曲目(j).Lat(结束),...曲目(j)的.Lon(结束));[曲目(j)的。长度] = DIST;[曲目(j)的.Azimuth] = AZ;端%检查完成geostruct轨道中的第一构件(1)ANS =几何:“行”类型:“GC”姓名:“巴黎圣地亚哥”纬度:[100X1双]经度:[100X1双]长度:104.8274方位角:235.8143

  6. 地图在该行geostruct三条轨道:

    %的圆柱形凸起像墨卡托,大圆轨%是弯曲的,除了那些遵循赤道或子午线。%以图形方式区分通过创建symbolspec轨道;%键线的颜色来跟踪长度,使用“夏天”的颜色表。%Symbolspecs可以很容易地改变由%属性值的颜色和线型。您还可以指定默认的符号。colorRange = makesymbolspec( '线',... { '长度',[分钟([Tracks.Length])... MAX([Tracks.Length])],... '颜色',冬季(3)});geoshow(曲目, 'SymbolSpec',colorRange);

    您可以保存您刚刚通过调用创建为形状文件的geostructsshapewrite与您选择,例如文件名:

    shapewrite(城市, 'citylocs');shapewrite(曲目, 'citytracks');

制作多边形Geostructs

创建多边形数据geostruct或mapstruct类似于建立一个点或线数据。但是,如果你的多边形包括多个,南分隔的部分,召回他们能在每一个属性只有一个值,每部分不是一个值。每次在这样一个多边形属于其所有部件的结构元素位置属性。这意味着,如果定义一组岛屿,例如与为每个坐标单一的NaN分隔的列表,该元素的所有属性描述岛作为一个组,而不是特定的岛屿。如果你想与特定的岛屿副属性,您必须提供该岛上独特的结构元素。

请注意,多边形的排序顶点事项。当你映射的多边形数据,在多边形的遍历方向对他们是如何通过功能,如渲染的意义geoshowmapshowMapView类。正确的方向性就显得尤为重要,如果多边形包含孔。映射工具箱惯例编码以顺时针方向外环(例如,大陆和岛屿轮廓)的坐标;逆时针排序用于内部环(例如,湖泊和内海)。坐标阵列中,每个环被从一个由一个NaN的它前面分离。

当绘制mapshow要么geoshow顺时针环填补。逆时针环是空缺;通过任何这样的孔下面的符号所示。为了确保外,并根据上述惯例内圈正确编码,可以调用下列功能:

  • ispolycw- 如果多边形轮廓的顶点顺时针排列

  • poly2cw- 转换多边形结构,以顺时针排序

  • poly2ccw- 转换多边形轮廓逆时针排序

  • poly2fv- 转换多边形区域,以面顶点形式用于在使用补丁为了正确呈现含有孔的多边形

这些功能中的三个检查或改变限定的多边形顶点的顺序,和第四个转换多边形具有孔,以一个完全不同的表示形式。

对于多边形geostructs工作的例子,见转换海岸线数据(GSHHG)到Shape文件格式

制图工具箱版本1个显示结构

之前当引入geostructs和mapstructs,导入从某些外部格式地理数据时,将其封装在地图显示功能的不同的数据结构被使用版本2,。这些显示结构容纳栅格和矢量地图数据和其他类型的对象,但缺乏电流geostructs和mapstructs的一般性的用于表示矢量的特征和正在被逐步工具箱的进行。但是,您可以使用转换包含矢量地理数据以geostruct形式显示结构updategeostruct。有关版本1显示的结构及其用法的更多信息,请参阅版本1个显示结构在参考页displaym。附加信息位于参考页updategeostructextractmmlayers