BIGEMPA Js API示例中心

判断点是否在多边形内源代码展示

代码编辑区 运行 下载 还原
<!DOCTYPE html>

<html>
<head>
    <meta charset='UTF-8' />
    <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
    <!--
        以下CSS地址请在安装软件了替换成本地的地址
        CSS地址请使用:
        http://localhost:9000/bigemap.js/v2.1.0/bigemap.css
        软件下载地址 http://www.bigemap.com/reader/download/detail201802017.html
    -->
    <link href='http://www.bigemap.com:9000/bigemap.js/v2.1.0/bigemap.css' rel='stylesheet' />
    <!--
        JS地址请使用:
        http://localhost:9000/bigemap.js/v2.1.0/bigemap.js
    -->
    <script src='http://www.bigemap.com:9000/bigemap.js/v2.1.0/bigemap.js'></script>
    <style>
        body { margin: 0; padding: 0; }
        #map { position: absolute; top: 0; bottom: 0; width: 100%; }
    </style>
    <title>Google Map Streets</title>
</head>
<body>
    <div id='map'></div>
    <script>
        // 软件配置信息地址,软件安装完成之后使用本地地址,如:http://localhost:9000
        BM.Config.HTTP_URL = 'http://www.bigemap.com:9000';
        
        // 在ID为map的元素中实例化一个地图,并设置地图的ID号为 bigemap.baidu-map,ID号程序自动生成,无需手动配置,并设置地图的投影为百度地图 ,中心点,默认的级别和显示级别控件
        var map = BM.map('map', 'bigemap.googlemap-streets', { center: [0, 0], zoom: 2, zoomControl: true,attributionControl:false });
        var latlngs = [
            [30, 102.68],
            [37, 108.43],
            [37.04, 118.2]
        ];
        //创建多边形,并设置填充颜色 ,具体详细API请参见:http://www.bigemap.com/offlinemaps/api/#polygon
        var polygon = BM.polygon(latlngs, {color: '#369'}).addTo(map);
        // 让地图适配当前的线段
        map.fitBounds(polygon.getBounds());
            map.on('click',function(e){
        var p=map.project([e.latlng.lat,e.latlng.lng]);
        var ps=latlngs.map(v=>{
            return [map.project(v).x,map.project(v).y];
        });
        if(isIn([p.x,p.y],ps)){
            alert('在内部');
        }else{
            alert('在外部');
        }
    });

    function isIn(a, b,c) {
        var d = a[0];
        a = a[1];
        var e = !1, f, h, k, l, m = b.length, n = 0;
        for (l = m - 1; n < m; l = n,
            n += 1) {
            var p = !1;
            f = b[n][0];
            h = b[n][1];
            k = b[l][0];
            l = b[l][1];
            if (f === d && h === a || k === d && l === a)
                return c ? !0 : !1;
            if (h < a === l >= a) {
                f = (k - f) * (a - h) / (l - h) + f;
                if (d === f)
                    return c ? !0 : !1;
                p = d < f
            }
            p && (e = !e)
        }
        return e
    }
    </script>
</body>
</html>