百度地图API实现地理围栏

地理围栏(Geo-fencing)是LBS的一种新应用,就是用一个虚拟的栅栏围出一个虚拟地理边界。当手机进入、离开某个特定地理区域,或在该区域内活动时,手机可以接收自动通知和警告。简单来说就是判断一个点是否在某区域内。

如果们用百度地图API来实现地理围栏还是有一定难度的,围栏是圆或者规则多边形还好说,如果围栏是不规则多边形那我们就有点无从下手了,但是百度API团队为我们提供了一个简单的方法——* GeoUtils*

这个库使用起来非常简单,大家可以参考类参考文档
类参考文档
可以看出GeoUtils不只可用于地理围栏还能用于测距和求面积,十分实用。接下以一个小例子用GeoUtils模拟地理围栏:
主要思路是:定时获取用户位置信息,如果用户离开预定的多边形区域则弹出警告框。
1、添加多边形(地理围栏)

var polygon = new BMap.Polygon([
        new BMap.Point(115.8444,28.737246),
        new BMap.Point(116.062868,28.727617),
        new BMap.Point(116.032972,28.603378),
        new BMap.Point(115.684573,28.617077)
    ], {strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});  //创建多边形
    map.addOverlay(polygon);

2、判断用户是否在地理围栏内:

var geolocation = new BMap.Geolocation();
    var dingwei=setInterval(function () {
        geolocation.getCurrentPosition(function(r){
            if(this.getStatus() == BMAP_STATUS_SUCCESS){
                map.panTo(r.point);
                if( BMapLib.GeoUtils.isPointInPolygon(r.point,polygon)){
                    console.log("在监控方位内")
                }else{
                    alert("你已经逃离监控区域")
                }
            }
        },{enableHighAccuracy: true})
    },2000);

通过定时任务setInterval两秒获得一次用户位置信息,调用BMapLib.GeoUtils.isPointInPolygon方法判断用户是否在预设区域,如果在则返回true,控制太输出:“在监控方位内”;如果不在预设区域则返回false,弹出警告框:“你已经逃离监控区域”


GIS技术交流:GISGO(http://www.gisgo.top)

关注我,GIS相关技术交流。微信公众号:gisxxcom
微信

猜你喜欢

转载自blog.csdn.net/agisboy/article/details/74316031