当我们用GIS软件打开一个SHP文件的时候,会显示出里面全部的几何图形,假如我只想要其中的一部分数据显示出来,其他的均不要显示,有那么几种操作方法。
我们可以通过把需要显示的几何面复制到另外一个图层里面来单独显示,但如果需要显示的区域一变,又要重新搞,不是很方便。
下面将记录一下我学到的解决方法:ArcGIS和QIGS都支持筛选一个图层中的数据,提供类似SQL一样的查询语句,只需编写查询条件图层就会只显示匹配到的面。
准备SHP数据
-
到GitHub开源库下载最新版的全国省市区边界数据,地址:https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov ,支持 在线预览(高德地图、ECharts),这个开源库经常更新维护 各方面都支持得很好,可以到乡镇级,也不乱码。
-
下载并解压得到 ok_geo.csv 文件,里面包含了全国的省市区边界数据,此开源库内提供了一个转换工具,开源将此csv文件转换成shp、geojson、sql等格式,也一样的下载一下。
-
打开转换工具,工具里面选择 ok_geo.csv 文件,因为里面是全国所有的省市区数据,比较大,我们先导出武汉的所有区县数据来演示;在工具的城市名前缀里面填写
"湖北省 武汉市 "
(结尾带一个空格,不然武汉市的边界也会导出来)。 -
点击转换工具的
转成shp文件
按钮,耐心稍等一会,武汉市的所有区县数据就导出成功了,shp文件在 ok_geo.csv 同一个目录里。
ArcMap 的筛选
在ArcMap中打开导出的武汉SHP文件:
图层上右键打开图层属性面板,切换到查询定义(Definition Query):
ArcMap查询定义里面填写了name='汉阳区' or name='硚口区'
条件,意思是筛选出属性表中name
列等于汉阳区
或者硚口区
的数据,点确定后就查询出需要显示的数据,不匹配的全部未显示,只会显示匹配到的:
如何编写更多的查询条件请参考下面。
QGIS 的筛选
在QGIS中打开导出的武汉SHP文件:
图层上右键打开过滤(Filter)菜单,进入查询定义(Query Builder):
QGIS查询定义里面填写了name='汉阳区' or name='硚口区'
条件,意思是筛选出属性表中name
列等于汉阳区
或者硚口区
的数据,点确定后就查询出需要显示的数据,不匹配的全部未显示,只会显示匹配到的:
如何编写查询条件
查询条件和SQL
的where
查询条件类似,支持 and or like = > < !=
等运算符。
字符串用'
单引号括起来,比如:name='张三'
、name like '张%'
。
字段名称直接写或者用"
双引号括起来,比如:"编号(数字)"=12345
。
用and
和or
进行多个条件组合查询,比如:面积>100 and 面积<200 or 面积=999
。
and
组合比or
组合优先级更高,可以用()
来控制优先级,比如:(名称='A' or 名称='B') and 面积<200
,会查找出名称为A或B,并且面积小于200的数据;如果去掉括号,就变成了:查找名称为A的所有数据,和名称为B并且面积小于200的数据。
用like
来进行字符串的模糊查询,比如:
-
name like '%小%'
查找名字中包含小
字的所有数据; -
name like '张%'
查找名字为张
开头的所有数据; -
name like '%小'
查找名字为小
结尾的所有数据。
【完】