主要内容

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

shapewrite

将地理矢量数据结构写入 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×72 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×77 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 向量。

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

  • 一个 geopoint 向量。

  • 一个 geoshape 向量。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

详细信息

全部折叠

提示

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

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

版本历史记录

在 R2006a 之前推出

全部展开