1. 程式人生 > >百度地圖API實現地理圍欄

百度地圖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相關技術交流。微信公眾號:gisxxcom
微信