查看原文
其他

技术 | Mapbox 教你如何实现地理围栏功能

Mapbox Mapbox 2019-06-02


地理围栏(Geo-fencing)是 LBS 的一种新应用,就是用一个虚拟的栅栏围出一个虚拟地理边界。当手机或者其它带 GPS 定位的设备进入、离开某个特定地理区域,或在该区域内活动时,平台可以接收通知和警告。


地理围栏应用非常广泛,下面列举了一些地理围栏的应用场景:

  • 车辆监控与管理

  • 线下区域社交活动

  • 儿童区域报警

  • 商场发送的优惠券push消息

  • ...


今天我们就教大家使用 Mapbox GL JS 去做一个地理围栏应用。


应用场景


本示例中,我们在上海的南京西路划了一块收费区域,当有车辆进入这个区域时通知并计入费用,当有车辆离开这个区域的时候也进行通知。


1. 添加收费区域


创建一块收费的区域(地理围栏)。在这里我们使用 geojson 格式定义了一块多边形,点击这里下载示例多边形下载,下面的代码块演示了怎么将这个这块区域加入我们的地图中:

map.on('load', function() {    // initialize the congestion zone data and layer    map.addSource('zone', {      type: 'geojson',      data: turf.merge(buffered)    });
   map.addLayer({      id: 'zone-line',      source: 'zone',      type: 'line',      paint: {        'line-width': 5,        'line-opacity': .5,        'line-color': '#C96F16'      }    }); });



2. 判断车辆是否在区域内


我们使用了turf.js 作为我们图形算法库,使用 turf.within 去测试多个点是否在一个多边形内,或者使用 turf.insidex 去测试一个点是否在多边形内。并在使用turf 的时候设置通知函数来通知用户。

if (!current_car.inside && turf.inside(p, zone)) {    ... }


3. 示例中的车辆路径 


在上面的示例中我们使用Mapbox的Direction API 接口来实现了车辆的行走和模拟,有兴趣的同学可以去我们的网站上去查看文档


4. 地理围栏示例


https://v.qq.com/txp/iframe/player.html?vid=j1322q8bwxv&width=500&height=375&auto=0

是不是非常酷炫啊,您还可以通过Mapbox微信公众号跟我们分享您对地理围栏(Geo-fencing)的见解和应用。

      您可能也对以下帖子感兴趣

      文章有问题?点此查看未经处理的缓存