主要内容

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

readgeotable

从矢量数据文件中读取地理空间表

自 R2021b 起

说明

T = readgeotable(filename) 通过读取地理或投影矢量数据文件(如 shapefile、KML 或 Esri 文件地理数据库)创建地理空间表。有关支持格式的完整列表,请参阅 支持的格式

示例

T = readgeotable(filename,Name=Value) 使用名称-值参数指定选项。例如,使用名为 CoordinateSystemType 的名称-值参数指定坐标系类型。

示例

全部折叠

将包含马萨诸塞州康科德市道路网络的 shapefile 读取到工作空间中,作为地理空间表。

T = readgeotable("concord_roads.shp");

该表的 Shape 变量包含道路形状的相关信息,包括坐标参考系 (CRS)。此 shapefile 中的道路形状采用投影坐标参考系。

T.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]

在地图上显示道路。

mapshow(T)
xlabel("x (meters)")
ylabel("y (meters)")

Figure contains an axes object. The axes object with xlabel x (meters), ylabel y (meters) contains 609 objects of type line.

可选的投影文件 (.prj) 决定了 shapefile 的坐标系类型。当您的 shapefile 没有投影文件,但您知道坐标系类型时,可通过 CoordinateSystemType 名称-值参数进行指定。

读取名为 tsunamis.shp 的 shapefile 文件(包含海啸事件信息)至工作空间。该文件的元数据表明,该 shapefile 使用地理坐标。

T = readgeotable("tsunamis.shp",CoordinateSystemType="geographic");

查看地理空间表的 Shape 变量。海啸震源位置以点的形式存储。

T.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: []

在地图上标注源位置。

lat = T.Shape.Latitude;
lon = T.Shape.Longitude;
geoiconchart(lat,lon)

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

GPX 文件最多可包含五个图层:航点、轨迹、轨迹点、路线和路线点。当读取包含轨迹点或路线点的图层时,地理空间表中包含一个 ID 变量,该变量将点与轨迹或路线相关联。

导入包含两条轨迹的 GPX 文件中的轨迹图层。每条轨迹的 Shape 变量都是一个 geolineshape 对象。

T = readgeotable("sample_tracks.gpx",Layer="tracks")
T=2×3 table
       Shape                                                  Name                                               Number
    ____________    _________________________________________________________________________________________    ______

    geolineshape    "Track logs from walking the perimeter of the MathWorks campus in Natick on May 21, 2007"      1   
    geolineshape    "Track logs from biking from Concord to the MathWorks campus in Natick on June 30, 2011"       2   

查看每条轨迹的形状。第一条轨迹包含一个区段,第二条轨迹包含五个区段。

T.Shape(1)
ans = 
  geolineshape with properties:

                NumParts: 1
                Geometry: "line"
    CoordinateSystemType: "geographic"
           GeographicCRS: [1×1 geocrs]

T.Shape(2)
ans = 
  geolineshape with properties:

                NumParts: 5
                Geometry: "line"
    CoordinateSystemType: "geographic"
           GeographicCRS: [1×1 geocrs]

导入轨迹点图层。每个点的 Shape 变量是一个 geopointshape 对象。

T2 = readgeotable("sample_tracks.gpx",Layer="track_points");
T2.Shape
ans = 
  2586×1 geopointshape array with properties:

               NumPoints: [2586×1 double]
                Latitude: [2586×1 double]
               Longitude: [2586×1 double]
                Geometry: "point"
    CoordinateSystemType: "geographic"
           GeographicCRS: [1×1 geocrs]

创建一个子表,其中仅包含第二条轨迹中的点。对于此文件,第二条轨迹中点的 TrackFID 值为 1

rows = (T2.TrackFID == 1);
T3 = T2(rows,:);

使用蓝色线条显示子表中的点。

lat = T3.Shape.Latitude;
lon = T3.Shape.Longitude;
geoplot(lat,lon,Color="b")

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

从网站读取 GeoJSON 数据,并将其保存至文件 storms.geojson。该数据包含来自美国国家海洋和大气管理局/国家气象局风暴预测中心的第 1 天对流天气预报。有关对流展望的更多信息,请参阅 [1]。有关数据的链接,请参阅 [2]

websave("storms.geojson","https://www.spc.noaa.gov/products/outlook/day1otlk_cat.lyr.geojson");

将数据读取到地理空间表中。如果文件中没有可供 readgeotable 函数读取的数据(例如当没有严重雷暴威胁时),则创建一个包含空多边形形状的地理空间表。

try
    GT = readgeotable("storms.geojson");
catch
    GT = table(geopolyshape,"No Data","none",VariableNames=["Shape" "LABEL2" "fill"]);
end

查看地理空间表的 Shape 变量。该表将地理区域存储为多边形。

GT.Shape
ans=2×1 geopolyshape array with properties:
              NumRegions: [2×1 double]
                NumHoles: [2×1 double]
                Geometry: "polygon"
    CoordinateSystemType: "geographic"
           GeographicCRS: [1×1 geocrs]

第一天的对流天气预报会逐日变化,因此您的结果可能有所不同。

在卫星底图上显示对流展望图。要根据雷暴风险等级创建图例,请将表格的每一行绘制为独立的多边形。

figure
geobasemap satellite
hold on
for k = 1:height(GT)
    row = GT(k,:);
    geoplot(row,"DisplayName",row.LABEL2,"FaceColor",row.fill)
end
legend
alpha(0.6)

添加标题,包括访问日期。

dt = datetime("today",Format="MMMM d, yyyy");
title("Day 1 Convective Outlooks",string(dt))

[1] "SPC Products."NOAA/National Weather Service Storm Prediction Center.Accessed June 28, 2022. https://www.spc.noaa.gov/misc/about.html.

[2] "SPC Shapefile/KML/KMZ Links."NOAA/National Weather Service Storm Prediction Center.Accessed June 28, 2022. https://www.spc.noaa.gov/gis/.

自 R2023b 起

OpenStreetMap® 文件包含多个数据图层,包括点图层、线图层、多线串图层和多边形图层。readgeotable 函数从 OpenStreetMap 文件中读取的数据取决于您指定的图层。

指定一个包含日本东京涩谷区多个街区数据的 OpenStreetMap 文件名称 [1]

filename = "shibuya.osm";

将读取的行数据层加载到地理空间表中。线条图层表示诸如道路、人行道和铁路轨道等特征。该表格通过线形在地理坐标系中表示线条。

linesLayer = readgeotable(filename,Layer="lines");

在地图上显示这些线条。

figure
geoplot(linesLayer)
title("Lines Layer")

将点图层读取到地理空间表中。点图层表示诸如交通信号灯、公交站和地铁入口等要素。该表格通过点形状在地理坐标系中表示点位。

pointsLayer = readgeotable(filename,Layer="points");

在同一张地图上显示这些点。

hold on
geoplot(pointsLayer)
title("Points and Lines Layers")

有关如何解读特定地理特征(如铁路和地铁入口)的信息,请参阅Read Data from OpenStreetMap Files示例。

[1] You can download OpenStreetMap files from https://www.openstreetmap.org, which provides access to crowd-sourced map data all over the world.The data is licensed under the Open Data Commons Open Database License (ODbL), https://opendatacommons.org/licenses/odbl/.

自 R2023b 起

从扩展名为 .osm 的 OpenStreetMap 文件中读取建筑物数据,例如建筑物轮廓、质心和高度。

指定一个包含日本东京涩谷区多个街区数据的 OpenStreetMap 文件名称 [1]

filename = "shibuya.osm";

通过将 readgeotable 函数的 Layer 名称-值参量指定为 "buildings",将建筑物图层读取到地理空间表中。该表格采用地理坐标系中的多边形形状表示建筑物。

buildingsLayer = readgeotable(filename,Layer="buildings");

在地图上显示建筑物,并根据建筑物的最高高度进行颜色标注。添加标题,更改颜色图,并添加带标签的颜色栏。

figure
geoplot(buildingsLayer,ColorVariable="MaxHeight")

title("Maximum Heights of Buildings")
colormap sky
c = colorbar;
c.Label.String = "Height in Meters";

有关如何根据地理空间表中存储的信息显示建筑物数据的信息,请参阅Display Buildings from OpenStreetMap Files示例。

[1] You can download OpenStreetMap files from https://www.openstreetmap.org, which provides access to crowd-sourced map data all over the world.The data is licensed under the Open Data Commons Open Database License (ODbL), https://opendatacommons.org/licenses/odbl/.

输入参数

全部折叠

要读取的文件名,指定为字符向量或字符串标量。filename 的形式取决于文件所在的位置。

  • 如果文件位于当前文件夹或 MATLAB® 路径下的某个文件夹中,则指定文件名,例如 "myFile.shp"

  • 如果文件不在当前文件夹或位于 MATLAB 路径下的文件夹中,则需指定完整路径或相对路径名称,例如 "C:\myfolder\myFile.gpx""dataDir\myFile.kml"

有关支持的文件格式列表,请参阅 支持的格式

要读取 Esri 文件地理数据库,您必须指定完整或相对路径名,或将地理数据库包含在当前文件夹中。

数据类型: char | string

名称-值参数

全部折叠

将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

示例: readgeotable("sample_tracks.gpx",Layer="track_points") 从 GPX 文件中读取轨迹点图层。

当文件包含多个图层时,指定要读取的图层,可以是正整数、字符串标量或字符向量。若指定整数,则该数值必须小于或等于文件中矢量图层的数量。此参数区分大小写。

文件中包含的图层取决于文件格式。

文件格式层格式
Esri 文件地理数据库文件的内容决定了图层的数量和图层的名称。
GeoJSON文件的内容决定了图层的数量和图层的名称。
GeoPackage文件的内容决定了图层的数量和图层的名称。
GPX

将图层指定为以下选项之一:

  • "waypoints" - 航点。

  • "tracks" - 轨迹线。

  • "track_points" - 轨迹点。在读取轨迹点时,地理空间表包含一个 ID 变量 TrackFID,该变量将每个点与一条轨迹关联起来。

  • "routes" - 路线标记线。

  • "route_points" - 路线点。在读取路线点时,地理空间表包含一个 ID 变量 RouteFID,该变量将每个点与一条路线关联起来。

KML每个文件夹及其子文件夹均对应一个图层,且文件夹名称与图层名称一致。
KMZ底层 KML 文件中的每个文件夹及其子文件夹均对应一个图层,且文件夹名称与图层名称一致。
OpenStreetMap®

将图层指定为以下选项之一。有关各层存储数据的更多信息,请参阅Data Stored in OpenStreetMap Layers

  • "points" - 点。

  • "lines" - 线条。

  • "multilinestrings" - 多行字符串。

  • "multipolygons" - 多边形集合。

  • "buildings" - 建筑物。此层要求文件具有 .osm 扩展名。

  • "buildingparts" - 建筑部件。当您需要自定义文件中存储的建筑时,请使用此图层。此层要求文件具有 .osm 扩展名。

形状文件shapefile 包含一个图层。

数据类型: single | double | char | string

坐标系类型,指定为以下值之一:

readgeotable 函数无法检测到坐标系类型时,请指定坐标系类型。

对于 shapefile,坐标系类型由可选的投影文件 (.prj) 确定。如果您的 shapefile 没有投影文件,您可以尝试通过以下任一方式确定坐标系类型:

  • 请参阅元数据。

  • 请咨询您的数据提供商。

  • 使用 shapeinfo 函数将 shapefile 的信息以结构体形式返回。然后,通过查询结构体的 BoundingBox 字段查看数据的边界。这些范围或许能帮助您预测坐标系类型。

用于保留变量名的标志,可选以下选项之一:

  • "preserve" - 保留不符合 MATLAB 标识符规则的变量名,例如包含空格和非 ASCII 字符的变量名。

  • "modify" - 将由 isvarname 函数标识的无效变量名转换为有效的 MATLAB 标识符。

数据类型: char | string

输出参量

全部折叠

地理空间表,以地理空间表形式返回。地理空间表是一个包含 Shape 变量和属性变量的 table 对象。

  • Shape 变量包含关于点、线和多边形形状的二维信息。Shape 变量可包含形状类型的组合。所有形状都采用相同的坐标参考系 (CRS)。

    readgeotable 函数通过使用 geopointshapegeolineshapegeopolyshape 对象,将地理坐标系中的坐标表示为形状。

    readgeotable 函数通过使用 mappointshapemaplineshapemappolyshape 对象,在投影 CRS 中表示具有坐标的形状。

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

当数据文件包含坐标参考系 (CRS) 信息时,readgeotable 函数会将该信息存储为每个形状对象内的 projcrsgeocrs 对象。

有关从 OpenStreetMap 文件创建的地理空间表的更多信息,请参阅 Data Stored in OpenStreetMap Layers

详细信息

全部折叠

版本历史记录

在 R2021b 中推出

全部展开