相关文章推荐
独立的眼镜  ·  (Android ) ...·  5 月前    · 
飞奔的山羊  ·  K8S的StorageClass实战(NFS ...·  1 年前    · 
逃课的滑板  ·  Typescript使用小结 - 简书·  1 年前    · 
博客讨论了在QGIS中,两个多边形在视觉上相交,但在使用几何对象的intersects方法时返回false的问题。原因是其中一个几何对象实际上是一条线段而非完整的多边形。通过为几何对象添加一个极小的Buffer(0.01),使得原本相交的几何形状在数学上变为真正相交,从而解决了问题。 摘要由CSDN通过智能技术生成

上图两个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
此函数计算形状集合的 n 次交叉区域,并允许识别形状 相交 的每个交叉区域。 该函数将一个参数作为输入,一个包含形状几何描述的结构 S,并提供一个输出参数,一个包含不同形状交叉点的结构,在交叉点和相关区域中包含形状索引。 第二个参数是可选的。 Display_result 是一个二进制值,指示结果是应该显示 (1) 还是不显示 (0)。 输入: S :包含多边形几何描述的结构。 S(i) 包含与第 i 个形状相关的所有信息S(i).P(j) 可以访问第 j 个的几何描述第 i 个形状的元素。 XData : S(i).P(j).x : 向量YData : S(i).P(j).y : 向量Kong:S(i).P(j).Kong:二进制值(1= Kong,0= 填充)。 此二元变量指示是否考虑多边形S(i).P(j) 是不是一个洞。 Kong用数字上的虚线。 输出: Geo :包含几何描述
// 判断 两多边形边界是否 相交 function is Polygon s Intersect ant($plyA, $plyB) {//面面 for ($i = 0, $il = count( $plyA ); $i < $il; $i++) { for ($j = 0, $jl = count( $plyB ); $j < $jl; $j++)...
使用考虑到浮点不规则性的公式(通过可配置的epsilon) 提供用于构造有效操作序列的API 支持GeoJSON " Polygon "和"Multi Polygon "类型(实验性) 在某种程度上基于F. Martinez(2008)算法: , npm install polybooljs 或者,对于浏览器,在目录中查找单个文件。 当包含在页面中时,它将公开全局PolyBool 。 var PolyBool = require ( 'polybooljs' ) ; PolyBool . intersect ( { regions : [ [ [ 50 , 50 ] /** 1 解线性方程组, 求线段交点. **/ // 如果分母为0 则平行或共线, 不 相交 let denominator = (b.y - a.y) * (d.x - c.x) - (a.x - b.x) * (c.y - d.y); if (denominator == 0) { return false; // 线段所在直线的交点坐标 (x , y) let x = ((b.x ... SqlSession [.....] was not registered for synchronization because synchronization is not active 10389 SqlSession [.....] was not registered for synchronization because synchronization is not active 求求大佬救救我: 你解决了吗 SqlSession [.....] was not registered for synchronization because synchronization is not active 求求大佬救救我: 你解决了吗? OpenDRIVE文件格式详解 小鱼不吃鱼干: link的数据有起始节点和结束节点的id,但只有起点节点坐标,没有终点节点坐标。 java 使用GeoTools工具 geojson 与shp 相互转换 weixin_55118807: 在不知道文件编码的情况下,怎么动态切换编码呢