判断是否为长按_【QGIS技巧】介绍一个按图层区域选择要素的插件

看阿国(化名)用ArcGIS制图,用按区域选择功能两顿操作,就把行政区划范围内的要素提取出来了,很是羡慕,QGIS怎么没这个实用的功能呢?

那就在插件里找吧,刚开始是向找显示矢量箭头的插件,无意中发现了select within这个插件,看着名字就感觉可以实现按区域选择功能。

下载下来用了一下,果然是!先看介绍和界面:

065076b348e2c16fef6bf7e8f292b1e3.png

fe7fd9a81d0325bca8dc9040181d2d6a.png

用法很简单,一看就懂,这里解释一下Centroid、Point on Surface、Pole of Inaccessiblility三者的区别,这三个点,翻译过来分别是质心、曲面上的点、不可接近极点,在QGIS中都能找到对应的工具。

Centroid——质点好说,就是重心。

Point on Surface——曲面上的点,不知道什么东西,stackexchange(查看原文跳转)的回答解释了怎么算,但是我用QGIS对应的工具生成结果好像不是这个样子。(哪位大佬帮忙解释一下)

8996ca7ed1f89bec020484442f592556.png

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,

4b1151a289dc50f7ccef075bf3141bfc.png

文件select_within_dialog_base.ui 第135行

1f9e226ba49ec59c5744b9380edb4782.png

文件select_within_dialog_base.py 第68行

这里有个顾虑,如果比例设为0,那岂不是任何情况下交集面积都会≥0,选中所有了?看了下源代码,选中的原理是:首先判断是否有交集,然后有交集的计算交集面积的占比是否大于所设比例。因为没有交集的要素已经在判断面积之前剔除了,所以不用担心。

源代码改了之后重新加载插件,完美解决问题!

看看结果吧(用灰色多边形分别选中三角网的三角形、边、节点):

1d4d7a4bf2e7bb74a00a19438e3d41b1.png

235d7f914a803893018a31379f8663f5.png

e7893e730b0dc7654b131fb711788b74.png

4423fd7cf76a66c1ccf7bbfe2e04dfce.png

46b10267b327352bdb8732350ea09130.png

46b10267b327352bdb8732350ea09130.png

tip:其他几个选框,表面意思,不再赘述(Advanced里,我也不知道啥意思,勾选与否没区别,哪位大佬帮忙解答一下)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值