openlayers4判断一个点是否在闭合图形的内部


在opanlayers4官方API已经有一个方法:intersectsCoordinate(coordinate),用于判断一个点coordinate是否在闭合图形的内部,返回值为布尔类型的,true表示点在多边形的内部,false表示点不在多边形的内部。
首先获得将要判断的几何元素信息,接下来获取坐标点的位置,然后调用API中的方法intersectsCoordinate进行判断,有两种处理方法:

第一种:
详细代码如下所示:(下面的代码仅支持鼠标点击获取地图上的要素,获取鼠标点的位置)

var geo = feature.getGeometry();//feture是几何元素
var isIn = geo.intersectsCoordinate(coordinate);
if(isIn) {
    console.log("该mark点在当前几何元素里。");
}

首先获得将要判断的几何元素信息(用getGeometry()方法取得),接下来获取坐标点的位置,然后调用API中的方法intersectsCoordinate进行判断,如果coordinate在多边形的内部,输出”该mark点在当前几何元素里。”

第二种
详细代码如下所示:(给出一个坐标点可以判断在不在多边形的内部,在的话,在哪个多边形的内部)

var feature1 = imageLayer1.getSource().getFeatures();//获取图层要素信息
var feature2 = imageLayer2.getSource().getFeatures();
var feature3 = imageLayer3.getSource().getFeatures();
var feature4 = imageLayer4.getSource().getFeatures();
var feature5 = imageLayer5.getSource().getFeatures();
array_feature.push(feature1);
array_feature.push(feature2);
array_feature.push(feature3);
array_feature.push(feature4);
array_feature.push(feature5);
for(var i=0;i<array_feature.length;i++){//循环遍历每个图层要素,分别调用intersectsCoordinate判断是否在多边形内
    if(array_feature[i][0].O.geometry.intersectsCoordinate(lonlat_arr)){
        console.log(array_feature[i][0].O.GNQ);
        /*下面是以弹框形式出现坐标点属于第几功能区*/
        result_popuptitle.innerHTML = "功能区信息";
        result_content.innerHTML = "<table class='popuptable' cellspacing='0'>" +
            "<tbody>" +
            "<tr>" +
            "<td width='260px' align='center'>功能区类型</td>" +
            "<td width='150px' align='center'>" + array_feature[i][0].O.GNQ + "类</td>" +
            "</tr>" +
            "</tbody>" +
            "</table>";
            $(".ol-popup").css("display", "block");
        result_overlay.setPosition(lonlat_arr);
    }
}

从上面的代码可以看出,我们只要通过鼠标交互的方式才可以获取地图上的要素(feature),但是如果单纯给出一个坐标点,直接根据坐标点判断这个点属于第几类功能区的话,就不能通过第一种方法来获取了,只能分别获取每个图层里面的要素信息,然后循环遍历,返回为true的图层信息,这样就可以实现了

转载自:https://blog.csdn.net/u013594477/article/details/80279120

You may also like...