主要内容

本页采用了机器翻译。点击此处可查看英文原文。

创建地理空间表

向量数据利用点、线、多边形及其非空间属性来描述现实世界中的事件、位置和对象。例如,您可以使用点和时间戳属性来表示海啸事件,使用线和名称属性来表示河流位置,使用多边形和年代属性来表示建筑物。

您可以使用地理空间表来表示向量数据。地理空间表 是一种 tabletimetable 对象,其中包含一个 Shape 变量和属性变量。

  • Shape 变量包含关于点、线和多边形形状的二维信息。Shape 变量可以包含多种形状类型的组合,但所有形状必须使用相同的坐标参考系 (CRS)。Shape 变量必须是该表中的第一个变量。

    使用 geopointshapegeolineshapegeopolyshape 对象,通过地理坐标参考系统 (CRS) 中的坐标来表示几何图形。每个对象的 GeographicCRS 属性以 geocrs 对象的形式包含 CRS。

    使用 mappointshapemaplineshapemappolyshape 对象,通过投影坐标系中的坐标来表示形状。每个对象的 ProjectedCRS 属性以 projcrs 对象的形式包含 CRS。

  • 属性变量包含诸如名称、分类和测量值等数据。

例如,您可以将代表马萨诸塞州康科德市道路网络的 shapefile 文件 concord_roads.shp 导入为地理空间表。表格的每一行都包含一个 maplineshape 对象,其中包含关于线路形状的信息,以及若干属性,如街道名称、道路类别和道路长度等。

创建地理空间表的方法有多种。您可以:

这些示例演示了如何使用所列出的每种方法创建地理空间表。

从文件中读取地理空间表

使用 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)

Figure contains an axes object. The axes object contains 609 objects of type line.

根据表创建地理空间表

使用 readtable 函数将海啸事件的相关数据以表格形式读取。海啸震源位置的坐标存储在 LatitudeLongitude 这两个表变量中。

T = readtable("tsunamis.xlsx");

使用 table2geotable 函数将该表转换为地理空间表。该函数检测 LatitudeLongitude 变量,并利用它们创建表中的 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)

Figure contains an axes object with type geoaxes. The geoaxes object contains an object of type point.

从数组创建地理空间表

创建一个包含城市位置和名称的地理空间表。

根据纬度和经度坐标的列向量,创建一个由 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 函数仅接受包含地理点、线或多边形几何对象的地理空间表。

另请参阅

函数

对象