polygon intersects() 判断相交小坑

博客讨论了在QGIS中,两个多边形在视觉上相交,但在使用几何对象的intersects方法时返回false的问题。原因是其中一个几何对象实际上是一条线段而非完整的多边形。通过为几何对象添加一个极小的Buffer(0.01),使得原本相交的几何形状在数学上变为真正相交,从而解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 上图两个ploygon在qgis上是相交的,但是使用 geometry1.intersects(geometry2) = false

原因:geometry2 的ploygon 为一条线段

String geom2 = "POLYGON ((13424522.607350014 3689604.6833999963, 13424515.744900092 3689602.2228004425, 13424514.623300763 3689588.520600244, 13424517.519300671 3689580.0576009, 13424531.934903784 3689577.296599313, 13424538.456499573 3689588.266200122, 13424536.184500214 3689600.5367996185, 13424522.607350014 3689604.6833999963))";
String geom1 = "POLYGON ((13424533.784500118 3689581.9672003356, 13424538.084499832 3689584.7631998626, 13424538.084499832 3689584.7631998626, 13424533.784500118 3689581.9672003356, 13424533.784500118 3689581.9672003356))";
// String geom1 = "LINESTRING (13424533.784500118 3689581.9672003356, 13424538.084499832 3689584.7631998626, 13424538.084499832 3689584.7631998626, 13424533.784500118 3689581.9672003356, 13424533.784500118 3689581.9672003356)";
Geometry ploygon2 =  READER.read(geom2);
Geometry geometry1 =  READER.read(geom1);
System.out.println(ploygon2.intersects(geometry1));


打印结果:false

解决办法:将geometry进行buffer(0.01)之后再进行判断

String geom2 = "POLYGON ((13424522.607350014 3689604.6833999963, 13424515.744900092 3689602.2228004425, 13424514.623300763 3689588.520600244, 13424517.519300671 3689580.0576009, 13424531.934903784 3689577.296599313, 13424538.456499573 3689588.266200122, 13424536.184500214 3689600.5367996185, 13424522.607350014 3689604.6833999963))";
String geom1 = "POLYGON ((13424533.784500118 3689581.9672003356, 13424538.084499832 3689584.7631998626, 13424538.084499832 3689584.7631998626, 13424533.784500118 3689581.9672003356, 13424533.784500118 3689581.9672003356))";
// String geom1 = "LINESTRING (13424533.784500118 3689581.9672003356, 13424538.084499832 3689584.7631998626, 13424538.084499832 3689584.7631998626, 13424533.784500118 3689581.9672003356, 13424533.784500118 3689581.9672003356)";
Geometry ploygon2 =  READER.read(geom2);
Geometry geometry1 =  READER.read(geom1);
System.out.println(ploygon2.intersects(geometry1.buffer(0.01)));


打印结果:true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值