Arcgis Engine(ae)接口详解(2):featureClass查询
//属性查询~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//IQueryFilter代表查询条件,QueryFilterClass代表只限于属性查询(就是没有空间查询)
IQueryFilter queryFilter = new QueryFilterClass();
//属性查询的条件,跟sql语句where部分格式类似,但不完成相同,格式在开发手册有额外的补充
queryFilter.WhereClause = "name='张三'";
//获取某个字段的索引,后面取字段值用到
int xxxFieldIdx = featureClass.FindField("xxx");
//进行查询,获取到的IFeatureCursor是查询结果的游标,可通过游标获取到查询结果内容
//Search方法第一个参数设为null就是查询所有数据,也就是不过滤
//参数2是是否自动回收要素
//当值为true,也就是遍历要素速度会更快,缺点是不能访问上一次循环的feature
//当值为false,遍历速度相对慢些,但可以访问上一次循环的feature
//关于什么是上一次循环的feature?游标遍历要素是通过featureCursor.NextFeature(),每一次NextFeature就返回下一条要素
IFeatureCursor featureCursor = featureClass.Search(queryFilter, true);
IFeature feature = null;
//遍历查询结果的所有要素,使用while循环
//游标每次NextFeature就会返回结果的下一条要素,如果遍历完了就会返回null
//因此下一句其实包含了两句代码,首先是NextFeature获取到下一条要素,其实是判断feature是否为null作为判断是否遍历完全部结果要素
while ((feature = featureCursor.NextFeature()) != null)
{
//获取属性字段的字段值
//xxxFieldIdx代表字段索引
//获取到的值都是object类型,但实际上字段类型各有不同,edm提供了类型转换类方便进行类型转换,下例是把值转换为string
string fieldValue = DataConvert.ObjToString(feature.Value[xxxFieldIdx]);
//获取几何字段的值
//因为一条要素有且只有一个几何字段,所以也不用再传入字段索引
//获取几何对象有Shape和ShapeCopy,关于他们的区别,官方文档是这么说的:
//When modifying the geometry of a feature or a set of features, use the ShapeCopy property to obtain a copy of the feature's geometry, perform the modification on the geometries, then apply the modifications by setting the geometry to the Shape property
//大意是如果你要修改feature的shape,那就先用ShapeCopy获取到几何对象,修改几何对象后,再通过Shape属性赋值回去
IGeometry geometry = feature.Shape;
IGeometry geometry2 = feature.ShapeCopy;
//获取feature的oid
//oid可以作为feature的唯一标识
int oid = feature.OID;
}
//释放游标,注意不能漏!!!!
//ae的对象大部分是不用手动释放的,游标是少数的例外
//不释放游标,可能会造成后续查询变慢,数据被锁等各种奇怪现象,所以强烈建议用完就释放
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(featureCursor);
//空间查询~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//geometryFilter代表作为查询条件的结合对象,由于这里没有数据,所以只是给null值,
IGeometry geometryFilter = null;
//ISpatialFilter代表查询条件,SpatialFilterClass代表空间查询过滤,但实际也包含了属性查询的过滤功能,可以同时进行空间和属性过滤
ISpatialFilter spatialFilter = new SpatialFilterClass();
//作为过滤条件的几何对象
//PS:过滤条件的几何对象的空间参考和被查询featureClass的空间参考要一样,否则很可能查询出错
spatialFilter.Geometry = geometryFilter;
//空间关系,Intersect代表重叠,Intersect意思是只要有一点重叠的地方就为true
//关于其他的空间关系,在开发手册有详细说明
spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
//查询和遍历结果要素跟属性查询一样,不再说明
featureCursor = featureClass.Search(spatialFilter, true);
feature = null;
while ((feature = featureCursor.NextFeature()) != null)
{
}
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(featureCursor);
//属性或空间查询,获取查询结果记录数量
IQueryFilter queryFilter2 = new QueryFilterClass();
queryFilter2.WhereClause = "name='张三'";
//filter部分跟上述的查询一样
int count = featureClass.FeatureCount(queryFilter2);
//一些其他获取要素的方法
//通过oid获取要素
//由于oid可以作为要素的唯一标识,因此可以通过一个oid获取一条要素
//获取大量要素不建议用这个,因为每次获取都相当于查询了一次,大量调用会比较慢
int oid1 = ;
feature = featureClass.GetFeature(oid1);
Arcgis Engine(ae)接口详解(2):featureClass查询的更多相关文章
- JDBC常用接口详解
JDBC中常用接口详解 ***DriverManager 第一.注册驱动 第一种方式:DriverManager.registerDriver(new com.mysql.jdbc.Driver()) ...
- Java6.0中Comparable接口与Comparator接口详解
Java6.0中Comparable接口与Comparator接口详解 说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者 ...
- socket接口详解
1. socket概述 socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket起源于UNIX,在Unix一切 ...
- “全栈2019”Java第八十四章:接口中嵌套接口详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第八十三章:内部类与接口详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java接口 详解(二)
上一篇Java接口 详解(一)讲到了接口的基本概念.接口的使用和接口的实际应用(标准定义).我们接着来讲. 一.接口的应用—工厂设计模式(Factory) 我们先看一个范例: package com. ...
- [转载]MII/MDIO接口详解
原文地址:MII/MDIO接口详解作者:心田麦浪 本文主要分析MII/RMII/SMII,以及GMII/RGMII/SGMII接口的信号定义,及相关知识,同时本文也对RJ-45接口进行了总结,分析了在 ...
- map接口详解
1.Map接口详解(1)映射(map)是一个存储键.键值对的对象,给定一个键,可以查询得到它的值,键和值都可以是对象(2)键必须是唯一的,值可以重复(Map接口映射唯一的键到值)(3)有些映射可以接收 ...
- ReadWriteLock 接口详解
ReadWriteLock 接口详解 这是本人阅读ReadWriteLock接口源码的注释后,写出的一篇知识分享博客 读写锁的成分是什么? 读锁 Lock readLock(); 只要没有写锁,读锁可 ...
- MySQL简单查询详解-单表查询
MySQL简单查询详解-单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询的执行路径 一条SQL查询语句的执行过程大致如下图所示: 1>.客户端和服务端通过my ...
随机推荐
- 【转载】标准C语言的输入输出流(i/o)方法详解
标准 C I/O clearerr 语法: #include <stdio.h> void clearerr( FILE *stream ); clearerr函数重置错误标记和给出的流的 ...
- Leetcode 388.文件的最长绝对路径
文件的最长绝对路径 假设我们以下述方式将我们的文件系统抽象成一个字符串: 字符串 "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext" 表示: dir ...
- hdu2074
我先求出交叉的gird,然后再一行一行求得.感觉还可以吧.思路比较清晰,开始想的是数是第几行然后从每一行的前后开始控制,好麻烦的感觉,我就先求出来了框架再做就好做多啦!后来PE,突然发现我特殊处理n= ...
- 84. Spring Boot集成MongoDB【从零开始学Spring Boot】
至于MongoDB网上有很多相关的资料,所以在这里不进行过多的介绍,我们在这里主要是介绍下如何将mongodb与spring boot结合使用.本节大纲: (1) 准备工作: (2) 新建一个mave ...
- 【Luogu】P2617Dynamic Ranking(树状数组套主席树)
题目链接 树状数组套主席树有点难懂qwq 不好理解 树状数组套主席树的直观理解应该是:树状数组的每一个节点是一棵主席树. 普通区间修改我们是创建1个线段树,树状数组套主席树的时候我们就创建log个线段 ...
- 【Luogu】P1352没有上司的舞会(树形DP)
题目链接 设f[i][0]表示第i个人不去舞会时子树的最大欢乐度,f[i][1]表示第i个人去舞会时子树的最大欢乐度. 则有状态转移方程:f[i][0]+=∑max(f[to][0],f[to][1] ...
- BZOJ 1087 [SCOI2005]互不侵犯King ——状压DP
[题目分析] 沉迷水题,吃枣药丸. [代码] #include <cstdio> #include <cstring> #include <iostream> #i ...
- 【bzoj1854】[Scoi2010]游戏 - 并查集
lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备最多只能使 ...
- __getattr__ 与 __getattribute__的区别
原文博客地址 http://www.cnblogs.com/bettermanlu/archive/2011/06/22/2087642.html
- ElasticSearch集群状态查看命令大全
Elasticsearch中信息很多,同时ES也有很多信息查看命令,可以帮助开发者快速查询Elasticsearch的相关信息. _cat $ curl localhost:9200/_cat =^. ...