主要内容

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

shapewrite

R2026a

将地理矢量数据结构写入 shapefile

描述

shapewrite(S,filename) 将存储在 S 中的矢量地理特征以 shapefile 格式写入由 filename 指定的文件。

示例

shapewrite(S,filename,'DbfSpec',dbfspec) 写入一个 shapefile,其中 DBF 文件的内容和布局由 dbfspec(一种 DBF 规范)控制。

示例

全部折叠

导入 shapefile,移除部分数据,并将修改后的数据写入新的 shapefile。

获取关于 shapefile 的结构信息。该 shapefile 包含马萨诸塞州康科德市道路网段的网络数据。

shapeinfo("concord_roads.shp")
ans = struct with fields:
                     Filename: [3×71 char]
                    ShapeType: 'PolyLine'
                  BoundingBox: [2×2 double]
                  NumFeatures: 609
                   Attributes: [5×1 struct]
    CoordinateReferenceSystem: [1×1 projcrs]

NumFeatures 字段表示该 shapefile 包含 609 要素。

将 shapefile 导入为地理空间表。

GT = readgeotable("concord_roads.shp");

shapefile 的 CLASS 属性包含道路类型的信息。例如,值为 2 表示多车道高速公路,值为 6 表示次要道路。创建一个子表,其中包含主要道路,使得 CLASS 的值小于 4。

rows = GT.CLASS < 4;
majorGT = GT(rows,:);

将地理空间表导出为 shapefile 格式。

shapewrite(majorGT,"main_concord_roads.shp")

获取新 shapefile 的结构信息。

shapeinfo("main_concord_roads.shp")
ans = struct with fields:
                     Filename: [3×76 char]
                    ShapeType: 'PolyLine'
                  BoundingBox: [2×2 double]
                  NumFeatures: 107
                   Attributes: [5×1 struct]
    CoordinateReferenceSystem: [1×1 projcrs]

新 shapefile 包含的是 107 要素而非 609 要素。

读取包含世界城市矢量数据的 shapefile 文件。使用 mappoint 函数将数据存储为平面点向量。

S = shaperead("worldcities.shp");
p = mappoint(S)
p = 
 318×1 mappoint vector with properties:

 Collection properties:
    Geometry: 'point'
    Metadata: [1×1 struct]
 Feature properties:
           X: [-3.9509 54.7589 -0.2121 35.3894 38.7575 138.8528 44.5408 72.2474 30.4098 3.0397 77.0010 35.9214 75.0498 4.8892 -149.1074 32.9496 122.8003 47.5258 -71.4434 40.6098 58.6638 38.8593 -57.5113 23.5183 -84.3489 174.7379 44.4258 … ] (1×318 double)
           Y: [5.2985 24.6525 5.6106 37.0613 9.0235 -34.6645 12.8767 22.7778 31.3044 36.7870 43.3620 31.7444 31.7744 52.3699 61.6040 39.7831 41.4673 -18.9141 -16.3867 64.7383 38.0316 15.3042 -25.1162 38.0164 33.7657 -36.9126 33.3449 -38.7281 … ] (1×318 double)
        Name: {1×318 cell}

将德国帕德博恩添加到点向量中。

x = 51.715254;
y = 8.75213;
p = append(p,x,y,"Name","Paderborn")
p = 
 319×1 mappoint vector with properties:

 Collection properties:
    Geometry: 'point'
    Metadata: [1×1 struct]
 Feature properties:
           X: [-3.9509 54.7589 -0.2121 35.3894 38.7575 138.8528 44.5408 72.2474 30.4098 3.0397 77.0010 35.9214 75.0498 4.8892 -149.1074 32.9496 122.8003 47.5258 -71.4434 40.6098 58.6638 38.8593 -57.5113 23.5183 -84.3489 174.7379 44.4258 … ] (1×319 double)
           Y: [5.2985 24.6525 5.6106 37.0613 9.0235 -34.6645 12.8767 22.7778 31.3044 36.7870 43.3620 31.7444 31.7744 52.3699 61.6040 39.7831 41.4673 -18.9141 -16.3867 64.7383 38.0316 15.3042 -25.1162 38.0164 33.7657 -36.9126 33.3449 -38.7281 … ] (1×319 double)
        Name: {1×319 cell}

p 的大小增加了 1。

将更新后的点向量写入 shapefile。

shapewrite(p,"worldcities_updated.shp")

输入参数

全部折叠

矢量地理特征,指定为以下之一:

  • 一个地理空间表。shapewrite 函数不支持包含多种形状对象类型的地理空间表。有关地理空间表的更多信息,请参阅Create Geospatial Tables。

  • 一个 mappoint 向量。

  • 一个 mapshape 向量。

  • 一个具有 X 和 Y 坐标字段的地图结构体数组 (mapstruct)。

  • 一个 geopoint 向量。

  • 一个 geoshape 向量。

  • 一个地理结构体数组 (geostruct),包含 Lat 和 Lon 字段。

S 对其属性字段有以下限制:

  • 每个属性字段的值必须是实数、有限的标量 double 或字符向量。

  • 给定属性的类型必须在所有特征中保持一致。

  • 若 S 是包含 geopointshape、geolineshape 或 geopolyshape 对象的地理空间表,或包含 geopoint 向量、geoshape 向量或地理结构体数组,则 shapewrite 函数将纬度值和经度值分别写入为 Y 和 X 坐标。

  • 若某个属性对所有特征均为整数值,则 shapewrite 将其作为整数写入 [basename '.dbf'] 文件。若某特征的属性值非整数,shapewrite 将其写入为固定小数点十进制数,小数点后保留六位。

用于创建 shapefile 的文件名和位置,指定为字符串标量或字符向量。若包含文件扩展名,则必须为 .shp 或 .SHP。

shapewrite 函数创建主文件 (.shp)、索引文件 (.shx) 和属性文件 (.dbf)。

若将包含坐标参考系 (CRS) 对象的地理空间表指定为 S,则该函数还会创建一个投影文件 (.prj),其中包含该 CRS 的标准文本 (WKT) 字符串表示形式。要从包含平面形状对象的地理空间表创建投影文件,必须确保形状的 ProjectedCRS 属性不为空。要从包含地理形状对象的地理空间表创建投影文件,必须确保形状的 GeographicCRS 属性不为空。您可以使用 struct2geotable 函数将结构体数组转换为地理空间表。

所有文件都具有相同的基础名称。例如,若将 filename 指定为 "myfile.shp",则该函数将生成 myfile.shp、myfile.shx、myfile.dbf 和 myfile.prj。

需包含在 shapefile 中的特征属性,以标量 MATLAB® 结构指定,该结构包含每个特征属性对应的字段。为该字段分配一个标量结构,包含以下四个字段:

  • FieldName - 文件中使用的字段名称

  • FieldType - 文件中使用的字段类型:'N'(数字)或 'C'(字符)

  • FieldLength - 文件中字段的长度,单位为字节

  • FieldDecimalCount - 对于数字字段,小数点右侧的位数

要创建 DBF 规范,请调用 makedbfspec,然后修改输出以删除属性,或为一个或多个属性更改 FieldName、FieldLength 或 FieldDecimalCount。

要在输出文件中包含某个属性,请在 dbfspec 中指定一个与该属性在 S 中所用名称相同的字段。

详细信息

全部折叠

提示

  • xBASE(.dbf) 文件规范要求,当作为 DBF 字段名复制时,geostruct 和 mapstruct 属性名称需截断为 11 个字符。在调用 shapewrite 之前,请考虑缩短过长的字段名称。通过这种方式,您能使 DBF 文件中的字段名称更易于阅读,并避免因截断操作导致名称重复的情况。

  • 请确保将字符编码方案设置为与您要导出的地理数据结构相匹配。例如,若要导出显示日文文本的地图,请将您的设备配置为支持 Shift-JIS 字符编码。

版本历史记录

在 R2006a 之前推出

全部展开