主要内容

选择Shapefile要读取的数据

shaperead功能为您提供了一个强大的方法,称为选择器,只选择你想要的数据字段和项目从shapefile导入。

选择器是与两个或两个以上的单元阵列元素。第一个元素是一个处理一个谓词函数(一个函数和一个输出参数的类型逻辑)。每个剩余元素是一个特征向量表示一个属性的名称。

对于一个给定的特性,shaperead供应谓词函数列出的属性的值,以帮助确定是否包括在它的输出特性。功能是排除如果谓词返回。反过来不一定是真实的:一个谓词返回功能真正的可能由于其他原因被排除在外时,使用选择器结合边界框或者创纪录数量的选择。

下面的例子在越来越复杂的顺序安排。尽管他们使用MATLAB®函数句柄,匿名函数和嵌套功能,你不需要熟悉这些功能使用的选择器shaperead

示例1:谓词函数在单独的文件中

  1. 定义谓词函数在一个单独的文件。(发布前14,这是唯一可用的选项)。创建一个文件命名roadfilter.m,以下内容:

    函数的结果= roadfilter (roadclass roadlength) mininumClass = 4;minimumLength = 200;结果= (roadclass > = mininumClass) & &……(roadlength > = minimumLength);结束
  2. 你可以叫shaperead是这样的:

    roadselector = {@roadfilter,‘类’,‘长’}roadselector = @roadfilter类“长度”年代= shaperead (concord_roads。轴马力”、“选择器”,roadselector) s = 115 x1结构体数组字段:X Y边界框(几何大小)STREETNAME RT_NUMBER类ADMIN_TYPE长度

    或者更紧凑的方式是这样的:

    s = shaperead (“concord_roads.shp”,…“选择器”,{@roadfilter,“类”,“长度”})s = 115 x1结构体数组字段:X Y边界框(几何大小)STREETNAME RT_NUMBER类ADMIN_TYPE长度

    映射工具箱™Version 7之前软件,将选择在当地的一个文件或函数的使用选择器的唯一途径。

    注意,如果调用shaperead发生在一个函数,然后roadfilter可以定义在当地的函数,而不是在它自己的文件。

示例2:谓词函数处理

作为一个简单的变异在前面的示例中,您可以指定一个函数处理,roadfilterfcn选择器,使用它:

roadfilterfcn = @roadfilter s = shaperead (“concord_roads.shp”,…“选择器”,{roadfilterfcn,“类”,“长度”})roadfilterfcn = @roadfilter s = 115 x1结构体数组字段:X Y边界框(几何大小)STREETNAME RT_NUMBER类ADMIN_TYPE长度

示例3:谓词是匿名函数

必须定义谓词函数在他们自己的文件,甚至是当地的功能,有时可能是尴尬的。匿名函数允许定义谓词函数需要的地方。例如:

roadfilterfcn =…@ (roadclass roadlength) (roadclass > = 4) & &……(roadlength > = 200) roadfilterfcn = @ (roadclass roadlength) (roadclass > = 4)……& & (roadlength > = 200)年代= shaperead (concord_roads。轴马力”、“选择器”,……{roadfilterfcn,“类”,“长度”})s = 115 x1结构体数组字段:X Y边界框(几何大小)STREETNAME RT_NUMBER类ADMIN_TYPE长度

示例4:谓词定义在单元阵列(匿名函数)

实际上不需要引入一个函数处理变量在定义谓词作为一个匿名函数。相反,您可以将整个表达式中的选择器单元阵列本身,导致更紧凑的代码。此模式用于许多例子在工具箱的映射文档和帮助功能。

s = shaperead (“concord_roads。轴马力”、“选择器”,……{@ (roadclass roadlength)…(roadclass > = 4) & & (roadlength > = 200),…})年代“类”、“长度= 115 x1结构体数组字段:X Y边界框(几何大小)STREETNAME RT_NUMBER类ADMIN_TYPE长度

示例5:由于选择器;谓词为嵌套函数

在前面的模式中,谓词涉及两个(称为硬编码的参数minimumClassminimumLengthroadfilter.m),以及roadclassroadlength输入变量。如果你在程序中使用这些模式,你需要决定最低截止值roadclassroadlength当时你写程序。但假设你想等待,决定等参数minimumClassminimumLength在运行时?

幸运的是,嵌套函数提供额外的力量,你需要这样做;它们允许您利用工作空间变量作为参数,而不是要求谓词函数中的参数被硬编码为常数。在下面的例子中,工作空间变量minimumClassminimumLength可能是分配通过各种计算的结果是未知的,直到运行时,然而,它们的值可以在谓词,只要它被定义为一个嵌套函数。在这个例子中嵌套函数封装在一个文件中constructroadselector.m,它返回一个完整的选择器:一个处理谓词(命名nestedroadfilter)和两个属性名称:

函数roadselector =…constructroadselector (minimumClass minimumLength) roadselector = {@nestedroadfilter,“类”,“长度”};函数的结果= nestedroadfilter (roadclass roadlength)结果= (roadclass > = minimumClass) & &……(roadlength > = minimumLength);结束结束

以下四行显示如何使用constructroadselector:

minimumClass = 4;%可以运行时依赖minimumLength = 200;%可以运行时依赖roadselector = constructroadselector (…minimumClass minimumLength);s = shaperead (“concord_roads。轴马力”、“选择器”,roadselector) s = 115 x1结构体数组字段:X Y边界框(几何大小)STREETNAME RT_NUMBER类ADMIN_TYPE长度