按属性选择模糊_ArcGIS的属性查询
ArcGIS 中的属性查询表达式符合数据库的 SQL表达式语法及规范,这⾥主要是WHERE ⼦句的使⽤,但使⽤不同存储类型的数据
源,SQL语法也不完全相同,如果是MDB格式地理数据库,SQL的使⽤语法就是Access的语法;如果数据存储是Oracle数据库,则就是Oracle的语法。在ArcGIS下常⽤SQL语法如表11-1所列。
表11-1 SQL的常⽤语法
类型字符串空的判断模糊查询
SHP单引号字符是=”,
数字是=0
_(下划线)表⽰1位,%表⽰多位
个⼈数据库(Mdb)单双引号都可以is Null?表⽰1位,*表⽰多位
⽂件数据库(gdb)单引号is null_表⽰1位,%表⽰多位
Oracle单引号is Null_表⽰1位,%表⽰多位
Sql server单引号is Null_表⽰1位,%表⽰多位
总结:字符串查询⽅法,⼀般⽤单引号;数字如整数,双精度,不加引号;字段名通常什么也不⽤加,不需要引号和中括号;对于特殊查询,如查询“北⼤”(北京⼤学),输⼊的查询值应该为:MDB格式数据'北*⼤*',其他格式'北%⼤%';字符串模糊查询使⽤“Like”关键字,同时加通配符,通配符除在mdb中是“*”外(如果使⽤C# ArcEngine开发,程序源代码中也使⽤“%”,⽽不是“*”),其他都是百分
号“%”。精确查询使⽤“=”号。另外,SQL中不区分⼤⼩写,如null和NULL,是完全⼀样的,SHP⽂件不⽀持NULL。
查询中的“and” 是并且、逻辑“与”的含义,要同时满⾜两个查询条件,查询结果更少;⽽关键字“or”是或者、逻辑“或”的含义,查询结果⼀般⽐单条件查询结果更多。
数字不能直接模糊查询,处理思路是将该数字转换为字符串,转换语句如下(FID,OBJECTID是数字)表11-2所列。
表11-2数字模糊查询
类型模糊查询
SHP cast(FID as character) like '%1%'
gdb cast(OBJECTID AS varchar(20)) like '%1%'
mdb str( OBJECTID ) like '*1*'
oracle OBJECTID like ‘%1%’
Sql server str(OBJECTID) like ‘%1%’
如果要查询个⼈地理数据库数据,可以将字段名称⽤⽅括号括起:如[AREA],对于⽂件地理数据库数据和SHP,您可以将字段名称⽤双引号括起,"AREA",但是通常不需要。如直接AREA,所以字段名通常什么也不加。
查询时,数字可以使⽤“⼤于,⼩于或等于”运算符,对于字符型也可以使⽤“⼤于,⼩于或等于”运算符,字符型结果按ABC字母顺序从⼩到⼤排序,数字在字母之前。如果含有a,b,A,B⼤⼩写字母,按aAbB顺序从⼩到⼤排序。汉字也可以进⾏⼤⼩⽐较,ArcGIS下是按汉字的拼⾳顺序,对于多⾳字,情况有点复杂,如汉字“长”可能的拼⾳是“chang”,也可能是“zhang”,默认排序是按“chang”使⽤,重发⾳可以“zhong,chong”,此时排序按“zhong”,因为“zhong”是最常⽤的。
对于特殊字符的查询,在GDB、 SHP、Oracle、SQL Server下查询含下划线“_”和“%”等特殊字符的查询(XMMC是字段名),查询⽅法如下:
XMMCLIKE '%\_%' escape '\' ---查询含下划线_的
XMMC LIKE'%\%%' escape '\' ---查询含百分号%的
Acessmdb中*和?的查询
XMMC LIKE '*[*]*'---查询含*的
XMMC LIKE '*[?]*'---查询含?的
属性查询的四种⽅法:
1. 1. 主菜单下“选择”菜单→“按属性选择”,该选择功能只能是针对要素图层,且查询的图层必须加载到ArcMap地图窗⼝,查询后
ArcMap地图窗⼝⾃动选择查询结果要素对象,该属性查询操作界⾯如图11-1所⽰。
2. 2. ⼯具箱中“按属性选择图层(SelectLayerByAttribute)”⼯具。使⽤该⼯具时输⼊数据可以是要素图层
或表,但必须加到ArcMap
的地图窗⼝,查询后⾃动选择满⾜查询条件的要素对象;
3. 3. ⼯具箱中“筛选(Select)”⼯具。该⼯具的输⼊必须是是要素类或要素图层,查询输出结果是要素;
4. 4. 使⽤⼯具箱中“表筛选(Table Select)”⼯具,该⼯具的输⼊可以是要素类或表,但该⼯具的查询输出结果只能是表;
图11-1 属性查询界⾯
图11-1中,上⾯的图层列表中选择查询图层,在字段列表框中双击字段,字段名进⼊SQL查询输⼊框,单击“获得唯⼀值”按钮可获得选中字段的唯⼀值(字段值相同的只返回⼀个)。当查询出现SQL语法错误,⼀个重要的⽅法:编辑框中的脚本拷贝到记事本中,仔细查看、分析,主要:字符是否加引号、引号是否半⾓、引号是否单引号、数字不加引号等等。
例1获得等⾼线计曲线
数据:“\chp11\dgx.SHP”,其中的⾼程字段是“BSGC”,且该等⾼线的等⾼距是20⽶,是100的倍数就是计曲线,如图11-2所⽰。
图11-2 获得等⾼线计曲线查询
不同的数据源,SQL语句不太⼀样,如果SHP⽂件格式或者是GDB格式(个⼈地理数据库格式),查询的语句
是:“round(BSGC/100,0)*100=BSGC”, “round”是四舍五⼊取位函数,其中的0是取整数;如果数据是MDB格式,则查询的语句是:“int(BSGC/100)*100= BSGC”,“int”取整函数。
类似的查询操作,在SHP⽂件格式中,查询“FID”字段是为偶数的要素对象,可使⽤“round(FID/2,0)*2= FID”这个查询语句来实现。
例2获得等⾼线长度⼤于平均值
测试数据:“chp11\复合查询.mdb\dgx”,查询等⾼线长度⼤于平均值的要素记录,具体的输⼊查询语句内容及界⾯如图11-3所⽰。
图11-3获得等⾼线长度⼤于平均值的复合查询
acess数据库注意:图11-3查询条件中字段外带的中括号“[]”可以去掉。上述输⼊的查询语句该改成:“Shape_Length>(select avg(
Shape_Length) from dgx) ”,这⾥“avg”是计算平均值的函数,查询的数据可以是mdb和gdb格式数据,但不能是SHP⽂件,SHP不⽀持复杂查询及多个表之间嵌套。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论