选择Shapefile要读取的数据
的shaperead
功能为您提供了一个强大的方法,称为选择器,只选择你想要的数据字段和项目从shapefile导入。
选择器是与两个或两个以上的单元阵列元素。第一个元素是一个处理一个谓词函数(一个函数和一个输出参数的类型逻辑
)。每个剩余元素是一个特征向量表示一个属性的名称。
对于一个给定的特性,shaperead
供应谓词函数列出的属性的值,以帮助确定是否包括在它的输出特性。功能是排除如果谓词返回假
。反过来不一定是真实的:一个谓词返回功能真正的
可能由于其他原因被排除在外时,使用选择器结合边界框或者创纪录数量的选择。
下面的例子在越来越复杂的顺序安排。尽管他们使用MATLAB®函数句柄,匿名函数和嵌套功能,你不需要熟悉这些功能使用的选择器shaperead
。
示例1:谓词函数在单独的文件中
定义谓词函数在一个单独的文件。(发布前14,这是唯一可用的选项)。创建一个文件命名
roadfilter.m
,以下内容:函数的结果= roadfilter (roadclass roadlength) mininumClass = 4;minimumLength = 200;结果= (roadclass > = mininumClass) & &……(roadlength > = minimumLength);结束
你可以叫
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:由于选择器;谓词为嵌套函数
在前面的模式中,谓词涉及两个(称为硬编码的参数minimumClass
和minimumLength
在roadfilter.m
),以及roadclass
和roadlength
输入变量。如果你在程序中使用这些模式,你需要决定最低截止值roadclass
和roadlength
当时你写程序。但假设你想等待,决定等参数minimumClass
和minimumLength
在运行时?
幸运的是,嵌套函数提供额外的力量,你需要这样做;它们允许您利用工作空间变量作为参数,而不是要求谓词函数中的参数被硬编码为常数。在下面的例子中,工作空间变量minimumClass
和minimumLength
可能是分配通过各种计算的结果是未知的,直到运行时,然而,它们的值可以在谓词,只要它被定义为一个嵌套函数。在这个例子中嵌套函数封装在一个文件中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长度