创建地理空间表
向量数据利用点、线、多边形及其非空间属性来描述现实世界中的事件、位置和对象。例如,您可以使用点和时间戳属性来表示海啸事件,使用线和名称属性来表示河流位置,使用多边形和年代属性来表示建筑物。
您可以使用地理空间表来表示向量数据。地理空间表 是一种 table 或 timetable 对象,其中包含一个 Shape 变量和属性变量。
Shape变量包含关于点、线和多边形形状的二维信息。Shape变量可以包含多种形状类型的组合,但所有形状必须使用相同的坐标参考系 (CRS)。Shape变量必须是该表中的第一个变量。使用
geopointshape、geolineshape和geopolyshape对象,通过地理坐标参考系统 (CRS) 中的坐标来表示几何图形。每个对象的GeographicCRS属性以geocrs对象的形式包含 CRS。使用
mappointshape、maplineshape和mappolyshape对象,通过投影坐标系中的坐标来表示形状。每个对象的ProjectedCRS属性以projcrs对象的形式包含 CRS。属性变量包含诸如名称、分类和测量值等数据。
例如,您可以将代表马萨诸塞州康科德市道路网络的 shapefile 文件 concord_roads.shp 导入为地理空间表。表格的每一行都包含一个 maplineshape 对象,其中包含关于线路形状的信息,以及若干属性,如街道名称、道路类别和道路长度等。
创建地理空间表的方法有多种。您可以:
使用
readgeotable函数从向量数据文件中读取地理空间表。使用
readtable或readtimetable函数从包含点数据或几何图形的已知文本 (WKT) 字符串表示形式的文件中读取表格或时间表,然后使用table2geotable函数将该表格转换为地理空间表。使用
table或timetable函数创建一个地理空间表。有关创建表的信息,请参阅 创建表并为其分配数据。有关创建课表的信息,请参阅 创建时间表。
这些示例演示了如何使用所列出的每种方法创建地理空间表。
从文件中读取地理空间表
使用 readgeotable 函数,将一个包含马萨诸塞州康科德市道路路段网络的 shapefile 文件读取为地理空间表。
GT = readgeotable("concord_roads.shp");查看地理空间表的前八行。Shape 变量包含有关形状的信息。例如,所有图形都是直线。其他变量包含属性数据。
head(GT)
Shape STREETNAME RT_NUMBER CLASS ADMIN_TYPE LENGTH
____________ _____________ _________ _____ __________ ______
maplineshape "" "" 6 0 67.264
maplineshape "WRIGHT FARM" "" 5 0 72.178
maplineshape "WRIGHT FARM" "" 5 0 43.965
maplineshape "WRIGHT FARM" "" 5 0 109.65
maplineshape "WRIGHT FARM" "" 5 0 18.019
maplineshape "" "" 6 0 58.444
maplineshape "WRIGHT FARM" "" 5 0 16.925
maplineshape "" "" 6 0 55.633
查看线形图的投影 CRS。地理空间表中的所有图形必须使用相同的坐标参考系统 (CRS)。
GT.Shape.ProjectedCRS
ans =
projcrs with properties:
Name: "NAD83 / Massachusetts Mainland"
GeographicCRS: [1×1 geocrs]
ProjectionMethod: "Lambert Conic Conformal (2SP)"
LengthUnit: "meter"
ProjectionParameters: [1×1 map.crs.ProjectionParameters]
查看表格第一行中关于线形的信息。
GT.Shape(1)
ans =
maplineshape with properties:
NumParts: 1
Geometry: "line"
CoordinateSystemType: "planar"
ProjectedCRS: [1×1 projcrs]
显示道路。
mapshow(GT)

根据表创建地理空间表
使用 readtable 函数将海啸事件的相关数据以表格形式读取。海啸震源位置的坐标存储在 Latitude 和 Longitude 这两个表变量中。
T = readtable("tsunamis.xlsx");使用 table2geotable 函数将该表转换为地理空间表。该函数检测 Latitude 和 Longitude 变量,并利用它们创建表中的 Shape 变量。
GT = table2geotable(T);
查看地理空间表的 Shape 变量。海啸震源位置是地理坐标系中的点。
GT.Shape
ans =
162×1 geopointshape array with properties:
NumPoints: [162×1 double]
Latitude: [162×1 double]
Longitude: [162×1 double]
Geometry: "point"
CoordinateSystemType: "geographic"
GeographicCRS: []
在地图上标注源位置。
geoplot(GT)

从数组创建地理空间表
创建一个包含城市位置和名称的地理空间表。
根据纬度和经度坐标的列向量,创建一个由 geopointshape 对象组成的数组。指定地理坐标参考系为 1984 年世界大地测量系统,其 EPSG 代码为 4326。
lats = [35.7082 -22.8842 51.5074 39.9042 37.9838]'; lons = [139.6401 -43.3882 -0.1278 116.4074 23.7275]'; shape = geopointshape(lats,lons); shape.GeographicCRS = geocrs(4326)
shape =
5×1 geopointshape array with properties:
NumPoints: [5×1 double]
Latitude: [5×1 double]
Longitude: [5×1 double]
Geometry: "point"
CoordinateSystemType: "geographic"
GeographicCRS: [1×1 geocrs]
请将城市名称指定为一个列向量。
names = ["Tokyo" "Rio de Janeiro" "London" "Beijing" "Athens"]';
创建地理空间表。变量 Shape 包含 geopointshape 对象,而变量 Name 包含名称。
GT = table(shape,names,VariableNames=["Shape" "Name"])
GT=5×2 table
Shape Name
_______________________ ________________
(35.7082°N, 139.6401°E) "Tokyo"
(22.8842°S, 43.3882°W) "Rio de Janeiro"
(51.5074°N, 0.1278°W) "London"
(39.9042°N, 116.4074°E) "Beijing"
(37.9838°N, 23.7275°E) "Athens"
请确认该表是否为地理空间表。
isgeotable(GT)
ans = logical
1
提示
某些将地理空间表作为输入的函数要求该地理空间表包含特定类型的几何图形。例如,kmlwrite 函数仅接受包含地理点、线或多边形几何对象的地理空间表。