看阿国(化名)用ArcGIS制图,用按区域选择功能两顿操作,就把行政区划范围内的要素提取出来了,很是羡慕,QGIS怎么没这个实用的功能呢?
那就在插件里找吧,刚开始是向找显示矢量箭头的插件,无意中发现了select within这个插件,看着名字就感觉可以实现按区域选择功能。
下载下来用了一下,果然是!先看介绍和界面:
用法很简单,一看就懂,这里解释一下Centroid、Point on Surface、Pole of Inaccessiblility三者的区别,这三个点,翻译过来分别是质心、曲面上的点、不可接近极点,在QGIS中都能找到对应的工具。
Centroid——质点好说,就是重心。
Point on Surface——曲面上的点,不知道什么东西,stackexchange(查看原文跳转)的回答解释了怎么算,但是我用QGIS对应的工具生成结果好像不是这个样子。(哪位大佬帮忙解释一下)
stackexchange上的回答对Point on Surface的解释
Pole of Inaccessiblility——表面意思,对于一个多边形来讲就是内部所能容纳最大的圆的圆心。想走出多边形(沿直线到达多边形的边界),从这个点出发会最远。
如果想选中多边形或线条,上面这些功能基本上用不到,况且,这个工具会先生成这些点,再判断是否选中,如果要素比较多,计算会比较慢。
最实用的还是百分比这个选项。
如果设为100%,全部落在内部的才会被选中
如果设为0%,只要有交集就会被选中
什么?不能设置0%,最小只能0.01%?那不行,万一有个占比0.001%的,那岂不是有问题了!
怎么办?改代码呗!
找到源代码(C:\Users\你的用户名\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins\SelectWithin),有两个地方需要修改,把最小值改称0,
文件select_within_dialog_base.ui 第135行
文件select_within_dialog_base.py 第68行
这里有个顾虑,如果比例设为0,那岂不是任何情况下交集面积都会≥0,选中所有了?看了下源代码,选中的原理是:首先判断是否有交集,然后有交集的计算交集面积的占比是否大于所设比例。因为没有交集的要素已经在判断面积之前剔除了,所以不用担心。
源代码改了之后重新加载插件,完美解决问题!
看看结果吧(用灰色多边形分别选中三角网的三角形、边、节点):
tip:其他几个选框,表面意思,不再赘述(Advanced里,我也不知道啥意思,勾选与否没区别,哪位大佬帮忙解答一下)