一、 使用openlayers自帶的geom. containsXY方法函數
該方法是監測座標點是否在多邊形
內,因此Geom的類型只能是Polygon、MultiPolygon、GeometryCollection、Circle中的一個,且該方法的參數是點性能
使用:polygon.containsXY(coors[0], coors[1])
測試
那咱們如何使用這個檢測點與面關係的函數,去檢測面與面之間的關係?咱們能夠這樣作:spa
好比有A、B兩個多邊形
一、遍歷A多邊形上的點,判斷是否有座標點在B多邊形內 --- 返回結果 a
二、遍歷B多邊形上的點,判斷是否有座標點在A多邊形內 --- 返回結果 b3d
若是a、b都爲true,則兩個多邊形相交
若是a爲true,b爲false,則多邊形B包含多邊形A
若是a爲false,b爲true,則多邊形A包含多邊形B
若是a、b都爲false,則兩個多邊形遠離code
代碼以下:blog
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] }
二、 使用truf庫的booleanContains函數,這個函數能夠檢測兩個幾何是否爲包容關係it
使用:引入相關函數,由於truf識別的geometry不是openlayers中的geometry,因此須要使用其提供的函數,轉換成對應的geometryio
import booleanContains from '@turf/boolean-contains' import {geometry, polygon, lineString} from '@turf/helpers' let contains = booleanContains( polygon(parent.coors), polygon(child.coors) )
函數能夠監測的類型以下function
若是父元素的類型是LineString,那麼子元素的類型能夠是Point、LineString、MultiPoint,此外都會拋出錯誤,以此類推。
其餘類似方法:
booleanCrosses:檢測兩個幾何是否相交
booleanDisjoint:檢測兩個幾何是否不相交
通過測試,使用openlayers自帶的方法性能上可能比truf要好,並且不須要在引入額外庫,因此推薦使用openlayers自帶的函數進行封裝。