1、 使用openlayers自带的geom. containsXY方法
该方法是监测坐标点是否在多边形内,所以Geom的类型只能是Polygon、MultiPolygon、GeometryCollection、Circle中的一个,且该方法的参数是点, 使用:
polygon.containsXY(coors[0], coors[1])
那我们如何使用这个检测点与面关系的函数,去检测面与面之间的关系?我们可以这样做:
比如有A、B两个多边形
1、遍历A多边形上的点,判断是否有坐标点在B多边形内 --- 返回结果 a
2、遍历B多边形上的点,判断是否有坐标点在A多边形内 --- 返回结果 b
如果a、b都为true,则两个多边形相交
如果a为true,b为false,则多边形B包含多边形A
如果a为false,b为true,则多边形A包含多边形B
如果a、b都为false,则两个多边形远离
代码如下:
function judge(coorsA, coorsB){
//booleanContains
let geomA = new ol.geom.Polygon([coorsA])
let geomB = new ol.geom.Polygon([coorsB])
let boola = coorsA.some(item => {
return geomB.containsXY(item[0], item[1])
})
let boolb = coorsB.some(item => {
return geomA.containsXY(item[0], item[1])
})
return [
['相离', 'A包含B'],
['B包含A', '相交']
][+boola][+boolb]
}
2、 使用truf库的booleanContains函数,这个函数可以检测两个几何是否为包容关系
使用:引入相关函数,因为truf识别的geometry不是openlayers中的geometry,所以需要使用其提供的函数,转换成对应的geometry
import booleanContains from '@turf/boolean-contains'
import {geometry, polygon, lineString} from '@turf/helpers'
let contains = booleanContains( polygon(parent.coors), polygon(child.coors) )
函数可以监测的类型如下
如果父元素的类型是LineString,那么子元素的类型可以是Point、LineString、MultiPoint,此外都会抛出错误,以此类推。
其他相似方法:
booleanCrosses:检测两个几何是否相交
booleanDisjoint:检测两个几何是否不相交
经过测试,使用openlayers自带的方法性能上可能比truf要好,而且不需要在引入额外库,所以推荐使用openlayers自带的函数进行封装。
js确定取消,在html界面中,有css模拟的模态框,这样显示的就会更好看一些,那么javascript有没有自带的弹框呢,当然是有的,接下来我就来给大家介绍一下把:
使用JavaScript实现用户输入一个年份,判断这个年是否是闰年。非整百年数除以4,无余为闰,有余不闰;整百年数除以400,无余为闰,有余不闰。
在 JavaScript 中如何判断两个值相等,这个问题看起来非常简单,但并非如此,在 JavaScript 中存在 4 种不同的相等逻辑,如果你不知道他们的区别,或者认为判断相等非常简单,那么本文非常适合你阅读。
分支优化在各种语言中都有不同的实现方式和应用场景,本篇通过JavaScript介绍了两种代码分支优化的思想,代码的实现非常简单,重点在于这种思想的应用。其实关于分支优化这个问题一直存在争议
在JavaScript中,判断两个对象是否相等有多种方法,取决于你对 相等 的定义以及对象属性的类型。如果你只是需要比较两个对象的属性是否相等(不比较引用地址)
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!