需求是这样的:需要限制某app的使用范围,如果不在范围内,则不允许使用;
解决思路:提前设置app使用范围,根据用户当前GPS位置,判定是否在范围内。
技术调研:因为之前一直用的百度地图api,文档也比较全面,就用它了。打开百度地图JSSDK,发现设置自定义覆盖物接口,IP定位接口,地址计算服务可以满足需求。客户要求精度不是特别高,r如果要求精度比较高的情况下,就得联系百度提供商业服务了。这里插个题外话,百度地图有自己的套坐标体系,既不是国标的坐标体系,也不是GPS坐标体系,如果稍不留神,很容易搞晕。
码砖:
注册百度开发者账号,登陆百度地图api控制台,创建应用,配置相关权限。
基于百度地图API的GIS实践–限制APP使用范围
基于百度地图API的GIS实践–限制APP使用范围
基于百度地图API的GIS实践–限制APP使用范围
百度自带的api示例还是很给力的
判断某个点是否在某个区域内,要用到百度地图提供的公共API,GeoUtils_min.js。
核心js:
//实例化鼠标绘制工具
var drawingManager = new BMapLib.DrawingManager(_bdmap, {
isOpen: false, //是否开启绘制模式
enableDrawingTool: true, //是否显示工具栏
drawingToolOptions: {
anchor: BMAP_ANCHOR_TOP_RIGHT, //位置
offset: new BMap.Size(5, 5), //偏离值
drawingModes: [
BMAP_DRAWING_CIRCLE,
BMAP_DRAWING_POLYGON,
BMAP_DRAWING_RECTANGLE
] //控制工具栏显示的工具
},
circleOptions: styleOptions, //圆的样式
polylineOptions: styleOptions, //线的样式
polygonOptions: styleOptions, //多边形的样式
rectangleOptions: styleOptions //矩形的样式
});
//添加鼠标绘制工具监听事件,用于获取绘制结果
drawingManager.addEventListener(‘overlaycomplete’, overlaycomplete);
//某个坐标位置是否在区域内,这里涉及到精度问题
BMapLib.GeoUtils.isPointInCircle(pt, circle);
BMapLib.GeoUtils.isPointInPolygon(pt, polygon);