百度地圖API實現地理圍欄
阿新 • • 發佈:2019-01-28
地理圍欄(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