更新记录

1.0.1(2024-01-06)

  • 修复iOS端传百度key问题

1.0.0(2023-12-28)

新账号发布


平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.0 - 14.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 适用版本区间:11 - 17

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


特别提醒

  • 购买本插件前,请先试用,请先试用,请先试用自测确认满足需求之后再行购买。虚拟物品一旦购买之后无法退款;
  • 如有使用上的疑问、bug,可以QQ(381996687)联系作者;
  • 作者可承接各种插件定制,价格美丽有意向可加q详谈;
  • 请在合法范围内使用,若使用本插件做非法开发,本方概不负责;
  • 请仔细阅读文档结合示例demo测试有问题加q联系作者;

插件功能介绍

iOS鹰眼轨迹SDK版本3.2.0、Android-SDK版本3.2.1

  1. 轨迹采集、后台采集(可设置采集/上传周期,可设置定位选项);
  2. 设置缓存大小;
  3. 获取历史轨迹、缓存轨迹、轨迹纠偏、里程计算、清除缓存;
  4. 空间搜索(搜索终端),周边搜索(圆形搜索)、矩形搜索、多边形搜索、行政区搜索、关键字搜索;
  5. 地理围栏-服务端地理围栏(增删改查);
  6. 地理围栏-客户端地理围栏(增删改查);
  7. 轨迹分析-停留点分析;
  8. 轨迹分析-驾驶行为分析;
  9. 查询警报信息;

Android后台采集或保活设置

  1. 通知管理允许通知,允许自启动;

  2. 耗电保护允许后台运行;

  3. 电池设置中关闭智能耗电保护、省电模式、应用速冻等。

注意事项:

  1. iOS后台采集需要在manifest.json -> App常用其它设置 中配置定位的后台运行能力;
  2. Android手机型号太多,各品牌对手机的限制不尽相同,需要保活而进行的设置也不一样。随着Android系统的更新迭代,保活的难度也在不断加大。最有效的保活方式还是联系厂家添加白名单以实现进程保活。
  3. 结合示例demo能更快熟悉各个接口。

插件使用

插件通用参数说明

通用参数:后续插件中多次使用的参数说明

  • 坐标系类型说明
参数 值类型 说明
coordType String 101 WGS84 102:BGCJ02 103: BD09LL (默认:cordType = "103")
  • transportMode:指定被监控对象的交通方式
值类型 说明
1001 string 驾车
1002 string 骑行
1003 string 步行
  • 轨迹纠偏参数 (processOption)
参数 值类型 说明
denoise bool 降噪
mapMatch bool 是否绑路
vacuateGrade String 抽稀取值范围[1,5]
radiusThreshold String 纠偏时的定位精度过滤阀值,用于过滤掉定位精度较差的轨迹点。
transportMode String 见上面默认transportMode说明”transportMode=1001“

radiusThreshold说明:0代表不过滤,100代表过滤掉定位精度大于100米的轨迹点。 例如:若只需保留 GPS 定位点,则建议设为:20;若需保留 GPS 和 Wi-Fi 定位点,去除基站定位点,则建议设为:100.纠偏时的定位精度过滤阀值,用于过滤掉定位精度较差的轨迹点。

轨迹追踪

鹰眼轨迹管理后台:https://lbsyun.baidu.com/trace/admin/service

官方文档:https://lbs.baidu.com/faq/api?title=android-yingyan/guide/analysishttps://lbs.baidu.com/faq/api?title=android-yingyan/guide/analysis

  • 引入插件
const trajectoryTrackingMoudle = uni.requireNativePlugin('YT-DCBdTreace-TrajectoryTrackingMoudle');
  • 配置轨迹服务信息(配置轨迹服务必须在开启服务前调用)
trajectoryTrackingMoudle.configServiceOption({
    mcode: "io.dcloud.LYScanUniPlugin", //填写你在API控制台申请iOS类型AK时指定的Bundle Identifier  iOS有效
    serviceID: 237771, //填写你在鹰眼轨迹管理台创建的鹰眼服务对应的ID--ios/android 通用
    entityName: "大郎的西瓜", //ios/android 通用
    keepLive: true //ios/android 通用

}, res => {

})

配置参数说明:

参数 值类型 说明
mcode String iOS Bundle Identifier(申请百度地图AK的Bundle Identifier)仅iOS有效
serviceID String 服务ID(后面需要开启的服务ID)
entityName String 需要采集轨迹的实体名称
keepLive bool 是否需要后台采集
  • 开启/停止轨迹服务
//开启服务
trajectoryTrackingMoudle.startService(res => {
    uni.showToast({
        icon: "none",
        title: res.message
    })
});
//停止服务
trajectoryTrackingMoudle.stopService(res => {
    uni.showToast({
        icon: "none",
        title: res.message
    })
});
//设置采集/上传周期 可以在开启服务前或在服务运行过程中动态设置定位和回传周期,设置完成后一旦进入下一采集周期即生效
//设置采集和打包周期时,要求采集周期和上传周期的值域均为[2, 300],且上传周期必须是采集周期的整数倍
trajectoryTrackingMoudle.changeGatherAndPackIntervals({
    gatherInterval: 10, //采集周期
    packInterval: 60 //上传周期
}, res => {
    uni.showToast({
        icon: "none",
        title: res.message
    })
});
  • 开始/结束采集
//开始采集
trajectoryTrackingMoudle.startGather(res => {
    uni.showToast({
        icon: "none",
        title: res.message
    })
});
//结束采集
trajectoryTrackingMoudle.stopGather(res => {
    uni.showToast({
        icon: "none",
        title: res.message
    })
});
  • 轨迹自定义字段上传

轨迹自定义属性上传说明:下例中heart_rate字段认为是自定义字段的名称,将value认为是自定义字段的值。需要注意的是,字典中的key必须是已经存在的 track属性字段。开发者可以通过鹰眼轨迹管理台,设置某个service的 track属性字段。

let i = Math.floor(Math.random() * 20+100);
     trajectoryTrackingMoudle.customData({
    heart_rate: i+""
 }, res => {
    console.log(res)
})
  • 获取当前位置信息(仅Android有效切必须开启采集才可获取到值)
trajectoryTrackingMoudle.queryRealTimeLoc({
 serviceID: "237771"//服务ID
 }, res => {
 //返回数据结构
 <!--res= {
    "direction": 0,
    "loc_type": "NET_WORK",//定位类型 NET_WORK、GPS
    "time": "2023-09-22 15:29:49",//当前时间
    "indoor": "1",//室内定位结果类型
    "coord_type": "bd09ll",//坐标类型
    "floor": "",//楼层信息
    "building": "",//获取建筑物信息
    "latitude": 30.446815,//纬度
    "speed": 0,// 获取速度,仅gps定位结果时有速度信息,单位 : 公里/小时
    "radius": 40,//定位精度
    "message": "成功",
    "code": "000000",
    "longitude": 120.263732,//经度
    "altitude": 0//获取高度信息,仅GPS定位结果时有高度信息,单位 : 米
 }-->
   console.log(res);
})
  • 查询缓存信息(网络中断、或网络不佳、上传时间太长都会有缓存在本地的轨迹信息)
let options = {
    serviceID: "237771",//服务ID
    needDistance: true, //是否需要返回所查询的缓存的里程信息,默认为false,当指定此属性为true时,查询到的缓存信息结构不变,只不过在每个entity对应的缓存信息字典中,新增了一个distance字段,表示该entity符合条件的里程数(单位:米)
    distanceFilter: "100", //由于缓存里程在SDK端离线计算,无法享受到鹰眼服务端强大的轨迹纠偏功能。不过开发者可以通过设置distanceFilter属性(double类型),在计算里程时将不符合预期定位精度的轨迹点排除掉。例如设置distanceFilter=60的话,则定位精度超过60米的轨迹点都不会参与该entity的离线里程计算。而如果开发者不设置此字段,或将此字段的值设置为0,则所有缓存的轨迹点都参与计算//对应 Android的radiusThreshold
    entityNames: "大郎的西瓜", //终端名称多个用英文逗号隔开
    startTime: "24", //开始时间 单位小时 该字段表示当前时间的前多少小时
    endTime: "0" //结束时间 单位小时 该字段表示当前时间的前多少小时 
}
trajectoryTrackingMoudle.queryTrackCacheWith(options, res => {
<!--res={
  code:"",
  message:"",
  result:[{
  distance:0,//缓存距离
  entityName:"",
  num:"",
  startTimestamp:"",
  endTimestamp:"",
  startTimeStr:"",
  endTimeStr:""
  }]
}-->
    console.log(res)
})
  • 设置缓存大小
 // 缓存占用空间的最大值,最小值为50MB  默认不设置
trajectoryTrackingMoudle.setCacheMaxSize(50, res => {
    uni.showToast({
        icon: "none",
       title: res.message
    })
});
  • 定位选项设置
let options = {
    // 触发定位的距离阀值 默认200
    distanceFilter:10
}
if(plus.os.name == "iOS"){
    //出行类型 typeFitness:步行 typeAutomotiveNavigation:汽车导航 typeOtherNavigation:其他交通工具导航  typeOther:未知出行类型---仅iOS有效
    options.activityType = "typeFitness";
    // 定位精度 bestForNavigation:导航最佳精准  best:最佳精准 nearestTenMeters:10米误差 hundredMeters:百米误差 kilometer:千米误差 threeKilometers:3千米误差---仅iOS有效
    options.desiredAccuracy = "nearestTenMeters";
}else if(plus.os.name == "Android"){
    // android定位精度 High_Accuracy:高精度定位模式,GPS与网络综合定位 Device_Sensors:仅使用GPS Battery_Saving:低功耗定位模式,仅使用网络定位(WiFi和基站定位) 默认:Battery_Saving
    options.androidLocationMode = "High_Accuracy"
}
trajectoryTrackingMoudle.configLocationAttribute(options)
  • 清空缓存信息
let options = {
    entityName: "大郎的西瓜",
    serviceID: "237771",
    startTime: "24", //开始时间 单位小时 该字段表示当前时间的前多少小时
    endTime: "0" //结束时间 单位小时 该字段表示当前时间的前多少小时  
}
trajectoryTrackingMoudle.clearTrackCacheWith(options, res => {
    console.log(res)
})
  • 查询最新轨迹点
let options = {
    entityName: "大郎的西瓜",
    serviceID: "237771",
    coordType: "103", ////101 BTK_COORDTYPE_WGS84 102:BTK_COORDTYPE_GCJ02 不传默认BTK_COORDTYPE_BD09LL
    processOption: { //纠偏配置 不需要纠偏 不传
        denoise: false, //降噪
        mapMatch: false, //绑路
        vacuateGrade: "1", //抽稀 取值范围【1,5】
        //  0代表不过滤,100代表过滤掉定位精度大于100米的轨迹点。 例如:若只需保留 GPS 定位点,则建议设为:20;若需保留 GPS 和 Wi-Fi 定位点,去除基站定位点,则建议设为:100.纠偏时的定位精度过滤阀值,用于过滤掉定位精度较差的轨迹点。
        radiusThreshold: "20",
        // 查询纠偏后的实时位置时,指定被监控对象的交通方式、里程补偿的默认值为不补充,中断两点间距离不记入里程。1001:驾车 1002:骑行 1003:步行
        transportMode: "1003"
    }
}
trajectoryTrackingMoudle.queryTrackLatestPointWith(options, res => {
    console.log(res)
})
  • 里程计算(已经上传至服务端的轨迹)
let options = {
    entityName: "大郎的西瓜",
    serviceID: "237771",
    startTime: "2", //单位小时
    endTime: "0",
    supplementMode: "", //10001:不补充,中断两点间距离不记入里程 10002:使用直线距离补充 10003:使用最短驾车路线距离补充 10004:使用最短骑行路线距离补充 10005:使用最短步行路线距离补充
    isProcessed: true, //是否返回纠偏后的里程
    lowSpeedThreshold: 20, //低速阈值,选填。(单位:千米/小时) 若填写该值且isProcessed=true时,则返回结果中将增加low_speed_distance字段,表示速度低于该值的里程。 示例: lowSpeedThreshold=20,则返回结果中将增加low_speed_distance字段表示此段轨迹中速度低于20千米/小时的里程,可用于网约车行业中计算低速里程。
    processOption: { //纠偏配置 
        denoise: false, //降噪
        mapMatch: false, //绑路
        vacuateGrade: "1", //抽稀 取值范围【1,5】
        //  0代表不过滤,100代表过滤掉定位精度大于100米的轨迹点。 例如:若只需保留 GPS 定位点,则建议设为:20;若需保留 GPS 和 Wi-Fi 定位点,去除基站定位点,则建议设为:100.纠偏时的定位精度过滤阀值,用于过滤掉定位精度较差的轨迹点。
        radiusThreshold: "20",
        // 查询纠偏后的实时位置时,指定被监控对象的交通方式、里程补偿的默认值为不补充,中断两点间距离不记入里程。1001:驾车 1002:骑行 1003:步行
        transportMode: "1003"
    }
}
trajectoryTrackingMoudle.queryTrackDistanceWith(options, res => {
    console.log(res)
})
  • 查询一段时间内的轨迹
let options = {
    entityName: "大郎的西瓜",
    serviceID: "237771",
    coordType: "103", ////101 BTK_COORDTYPE_WGS84 102:BTK_COORDTYPE_GCJ02 不传默认BTK_COORDTYPE_BD09LL
    supplementMode: "10001", //10001:不补充,中断两点间距离不记入里程 10002:使用直线距离补充 10003:使用最短驾车路线距离补充 10004:使用最短骑行路线距离补充 10005:使用最短步行路线距离补充
    supplementContent: "distance_and_points", //轨迹补偿内容 ---仅在supplementMode不为10001时生效  默认 only_distance:对于中断区间,只补偿中断的里程,不补偿轨迹点。 distance_and_points:对于中断区间,既补偿里程,又补偿轨迹点
    sortType: "1001", //1001:升序 1002:倒序
    index: "1", //分页页码
    pageSize: "100", //每页数据条数
    startTime: "1", //多少小时前的数据,以当前时间为结束时间。
    endTime: "0",
    isProcessed: true, //是否返回纠偏轨迹
    lowSpeedThreshold: 20, //低速阈值,选填。(单位:千米/小时) 若填写该值且isProcessed=true时,则返回结果中将增加low_speed_distance字段,表示速度低于该值的里程。 示例: lowSpeedThreshold=20,则返回结果中将增加low_speed_distance字段表示此段轨迹中速度低于20千米/小时的里程,可用于网约车行业中计算低速里程。
    processOption: {
        denoise: false, //降噪
        mapMatch: false, //绑路
        vacuateGrade: "1", //抽稀 取值范围【1,5】
        //  0代表不过滤,100代表过滤掉定位精度大于100米的轨迹点。 例如:若只需保留 GPS 定位点,则建议设为:20;若需保留 GPS 和 Wi-Fi 定位点,去除基站定位点,则建议设为:100.纠偏时的定位精度过滤阀值,用于过滤掉定位精度较差的轨迹点。
        radiusThreshold: "20",
        // 查询纠偏后的实时位置时,指定被监控对象的交通方式、里程补偿的默认值为不补充,中断两点间距离不记入里程。1001:驾车 1002:骑行 1003:步行
        transportMode: "1003"
    }
}
trajectoryTrackingMoudle.queryHistoryTrackWith(options, res => {
    console.log(res)
})
  • 查询有单时间内的轨迹返回数据结构
{
    "points": [
        {
            "direction": 106,
            "longitude": 120.263743,
            "speed": 0,
            "latitude": 30.446809,
            "loc_time": 1695369658,
            "custom_data": {},
            "height": 0,
            "_supplement": 0,
            "car_limit_speed": 0
        }
    ],
    "message": "成功",
    "toll_distance": 0,
    "end_point": {//起点
        "height": 0,
        "loc_time": 1695369658,
        "direction": 0,
        "longitude": 120.263743,
        "speed": 0,
        "radius": 0,
        "latitude": 30.446809
    },
    "start_point": {//终点
        "height": 0,
        "loc_time": 1695352857,
        "direction": 0,
        "longitude": 120.26363542521,
        "speed": 0,
        "radius": 0,
        "latitude": 30.446817504493
    },
    "code": "000000",
    "distance": 53.862103989477,
    "size": 9,//改页数据条数  最大值为请求时设置的pageSize
    "total": 9,//轨迹点总数
    "low_speed_distance": 0
}
  • 监听推送警报信息(进入/离开地理围栏的警报信息)
trajectoryTrackingMoudle.listenPushMessage(res => {
//          res = {
            //  "monitoredObject":"大郎的西瓜",//实体名称(被监听实体)
            //  "alarmDateStr":"2023-09-28 12:09:34",//触发警报时间
         //  "action":'进入',//进入还是离开围栏
         //  "fenceType":"客服端围栏",//围栏类型  客户端围栏/服务端围栏
         //  "fenceName":"",//围栏名称
        //  "fenceID":"",//围栏ID
        //  "pushMessage":""//完整信息
         // }
});
  • android保活/取消保活
<!--保活-->
trajectoryTrackingMoudle.keepAlive();
<!--取消保活-->
trajectoryTrackingMoudle.stopKeepAlive();

空间搜索(参考示例demo:spatialSearch.vue页面)

官方文档:https://lbs.baidu.com/faq/api?title=android-yingyan/guide/searchentity

实时查询entity最新位置、高度、速度、方向和相关属性信息。支持搜索方式:插件支持周边搜索、矩形范围搜索、多边形搜索、行政区搜索、关键字搜索

  • 引入空间搜索模块
const searchMoudle = uni.requireNativePlugin('YT-DCBdTreace-SearchMoudle');
  • 周边搜索
searchMoudle.aroundSearchEntity({
    serviceID:"237771",//服务ID
    lat:"30.446879",//圆心纬度
    lng:"120.263822",//圆心精度
    pageIndex:1,//查询页码
    pageSize:10,//每页数据
    inputCoordType:"103",// 输入坐标类型 101 BTK_COORDTYPE_WGS84 102:BTK_COORDTYPE_GCJ02 不传默认BTK_COORDTYPE_BD09LL
    outputCoordType:"103",// 输出坐标类型 101 BTK_COORDTYPE_WGS84 102:BTK_COORDTYPE_GCJ02 不传默认BTK_COORDTYPE_BD09LL
    radius:1000,//半径默认1km
    filterCondition:{//筛选条件
        inActiveTime:5,//当前时间5小时前有上传定位的entity 不能与activeTime同时设置(单位小时)
        // activeTime:5,//当前时间5小时后有上传定位的entity 不能与inActiveTime同时设置(单位小时)
        entityNames:["大郎的西瓜"],
        columnKey:{//自定义属性  (选填)

        }
    }
},res=>{
    uni.showToast({
        title:res.message,
        icon:"none"
    })
})
  • 矩形范围搜索
searchMoudle.boundSearchEntity({
                    serviceID:"237771",
                    pageIndex:1,
                    pageSize:10,
                    inputCoordType:"103",//101 BTK_COORDTYPE_WGS84 102:BTK_COORDTYPE_GCJ02 不传默认BTK_COORDTYPE_BD09LL
                    outputCoordType:"103",//101 BTK_COORDTYPE_WGS84 102:BTK_COORDTYPE_GCJ02 不传默认BTK_COORDTYPE_BD09LL
                    lowerLeft:{//左下角坐标,
                        lat:"30.445174",
                        lng:"120.263579"
                    },
                    upperRight:{//右上角坐标
                        lat:"30.449019",
                        lng:"120.26508"
                    },
                    filterCondition:{//筛选条件
                        inActiveTime:5,//当前时间5小时前有上传定位的entity 不能与activeTime同时设置(单位小时)
                        // activeTime:5,//当前时间5小时后有上传定位的entity 不能与inActiveTime同时设置(单位小时)
                        entityNames:["大郎的西瓜"],
                        columnKey:{//自定义属性  (选填)

                        }
                    }
                },res=>{
                    uni.showToast({
                        title:res.message,
                        icon:"none"
                    })
                })
  • 多边形检索
searchMoudle.polygonSearchEntity({
                    serviceID:"237771",
                    pageIndex:1,
                    pageSize:10,
                    inputCoordType:"103",//101 BTK_COORDTYPE_WGS84 102:BTK_COORDTYPE_GCJ02 不传默认BTK_COORDTYPE_BD09LL
                    outputCoordType:"103",//101 BTK_COORDTYPE_WGS84 102:BTK_COORDTYPE_GCJ02 不传默认BTK_COORDTYPE_BD09LL
                    vertexes:[{//多边形的各个角经纬度 
                        lat:"30.44533",
                        lng:"120.263139"
                    },
                    {
                        lat:"30.446723",
                        lng:"120.266472"
                    },
                    {
                        lat:"30.448786",
                        lng:"120.265816"
                    },
                    {
                        lat:"30.44733",
                        lng:"120.262322"
                    }],
                    filterCondition:{//筛选条件
                        inActiveTime:5,//当前时间5小时前有上传定位的entity 不能与activeTime同时设置(单位小时)
                        // activeTime:5,//当前时间5小时后有上传定位的entity 不能与inActiveTime同时设置(单位小时)
                        entityNames:["大郎的西瓜"],
                        columnKey:{//自定义属性  (选填)

                        }
                    }
                },res=>{
                    uni.showToast({
                        title:res.message,
                        icon:"none"
                    })
                })
  • 行政区搜索
searchMoudle.districtSearchEntity({
                    serviceID:"237771",
                    pageIndex:1,
                    pageSize:10,
                    outputCoordType:"103",//101 BTK_COORDTYPE_WGS84 102:BTK_COORDTYPE_GCJ02 不传默认BTK_COORDTYPE_BD09LL
                    returnType:"all", //all:返回全部(默认all) simple:仅返回 total,即符合本次检索条件的所有entity 数量(若仅需行政区内entity数量,建议选择 simple,将提升检索性能)
                    keyword:"杭州市",
                    filterCondition:{//筛选条件
                        inActiveTime:5,//当前时间5小时前有上传定位的entity 不能与activeTime同时设置(单位小时)
                        // activeTime:5,//当前时间5小时后有上传定位的entity 不能与inActiveTime同时设置(单位小时)
                        entityNames:["大郎的西瓜"],
                        columnKey:{//自定义属性  (选填)

                        }
                    }
                },res=>{
                    uni.showToast({
                        title:res.message,
                        icon:"none"
                    })
                })
  • 关键字搜索
searchMoudle.searchEntity({
                    serviceID:"237771",
                    pageIndex:1,
                    pageSize:10,
                    keyword:"",//关键字
                    outputCoordType:"103",//101 BTK_COORDTYPE_WGS84 102:BTK_COORDTYPE_GCJ02 不传默认BTK_COORDTYPE_BD09LL
                    filterCondition:{//筛选条件
                        inActiveTime:5,//当前时间5小时前有上传定位的entity 不能与activeTime同时设置(单位小时)
                        // activeTime:5,//当前时间5小时后有上传定位的entity 不能与inActiveTime同时设置(单位小时)
                        entityNames:["大郎的西瓜"],
                        columnKey:{//自定义属性  (选填)

                        }
                    }
                },res=>{
                    uni.showToast({
                        title:res.message,
                        icon:"none"
                    })
                })
  • 空间搜索返回数据结构
{
    "entities": [//范围内实体集合
        {
            "custom_data": {},//自定义属性
            "modify_time": "2023-09-22 16:01:10",
            "entity_name": "大郎的西瓜",
            "latest_location": {//最新轨迹点信息
                "longitude": 120.26365559273,
                "direction": 0, //方向
                "speed": 0,
                "loc_time": 1695369658,
                "custom_data": {},
                "floor": "",//楼层信息--gps定位有效
                "latitude": 30.446778963084,
                "radius": 150,//定位精度
                "coord_type": "\"bd09ll\"",//坐标类型
                "height": 0,//高度-gps定位有效
                "distance": 0// 获取距中心点距离,仅在周边搜索时该字段有值
            },
            "create_time": "2023-08-31 17:16:00"
        }
    ],
    "message": "成功",
    "size": 1,
    "code": "000000",
    "total": 1
}

地理围栏

官网文档:https://lbs.baidu.com/faq/api?title=ios-yingyan/guide/geo-fencinghttps://lbs.baidu.com/faq/api?title=android-yingyan/guide/geo-fencing

//引入地理围栏模块
const fenceMoudle = uni.requireNativePlugin('YT-DCBdTreace-FenceMoudle');

服务端围栏

服务端地理围栏的管理、计算、报警触发都在鹰眼服务端完成,依赖于轨迹点及时上传至服务端才能完成围栏的各种操作。因此要想完整地使用服务端地理围栏的功能,使用SDK的设备必须时刻保持联网状态,否则将无法及时触发服务端地理围栏,报警信息也无法及时推送至客户端。与客户端地理围栏相比,服务端地理围栏支持将报警信息推送。

服务端围栏类型:圆形围栏、多边形围栏、线行围栏、行政区围栏

  • 创建服务端围栏
let options = {
   serviceID: "237771",
    serverFenceName: "第一个服务端围栏",
    type: "1001",
    coordType: "103",
    entityName: "大郎的西瓜",
    denoiseAccuracy: "10", //定位精度大于10米的轨迹点都不会参与围栏计算
    circleFenceParameter:{
       lat: "30.446782",
        lng: "120.263684",
        radius: "10"
    }
}
fenceMoudle.createServerFenceWith(options, res => {
    uni.showToast({
        title: res.message,
        icon: "none"
  })
)

创建围栏参数说明:

参数 值类型 说明
serviceID String 服务ID
serverFenceName String 围栏名称
type String 围栏类型(1001圆形 1002 多边形 1003 线行 1004 行政区域)
coordType String 坐标类型(101 BTK_COORDTYPE_WGS84 102:BTK_COORDTYPE_GCJ02 不传默认BTK_COORDTYPE_BD09LL)
entityName String 需要监听的终端名称
denoiseAccuracy String 终端实体的定位精度大于该值的轨迹点不参与此围栏的计算(默认50)单位米
circleFenceParameter object 创建圆形围栏参数(type = 1001必传),详情见下表circleFenceParameter详解
polygonFenceParameter Array 创建多边形围栏参数(type = 1002必传),详情见下表polygonFenceParameter 详解
polylineFenceParameter object 创建线形围栏参数(type = 1003必传),详情见下表polylineFenceParameter 详解
districtFenceParameter object 创建行政区围栏参数(type = 1004必传)例:{keyWord:"浙江省杭州市西湖区"}

circleFenceParameter 参数详解

参数 值类型 说明
lat String 圆形纬度
lng String 圆形经度
radius String 半径(米)

polygonFenceParameter 详解

//例如 [{ lat: "30.446601", lng: "120.263334" }, { lat: "30.446714", lng: "120.264017" }, { lat: "30.44736", lng: "120.264299" }, { lat: "30.447263", lng: "120.263657" }]

参数 值类型 说明
lat String 多边形各个角的纬度
lng String 多边形各个角的经度

polylineFenceParameter 详解

例:

{ coors:[ { lat: "30.447022", lng: "120.264762" }, { lat: "30.447481", lng: "120.264461" }, { lat: "30.44801", lng: "120.264169," }, { lat: "30.44824", lng: "120.264057" }, { lat: "30.446683", lng: "120.264165" }, { lat: "30.446578", lng: "120.263504" }, { lat: "30.446216", lng: "120.262903" } ], offset:"20" }

参数 值类型 说明
offset String 偏离距离 偏移距离(若偏离折线距离超过该距离即报警),单位:米
coors Array 直线上的点坐标集合
  • 更新服务端地理围栏(服务围栏更新与创建服务围栏参数格式基本一致,多个fenceID围栏ID)
let options = {
    serviceID: "237771",
    fenceID: "38",//服务围栏ID
    serverFenceName: "更新第一个服务端围栏",
    type: "1002",
    coordType: "103",
    entityName: "大郎的西瓜",
    denoiseAccuracy: "10", //定位精度大于10米的轨迹点都不会参与围栏计算
    polygonFenceParameter: [{ ////type = 1002 需要传的参数
        lat: "30.446601",
        lng: "120.263334"
    }, {
        lat: "30.446714",
        lng: "120.264017"
    }, {
        lat: "30.44736",
        lng: "120.264299"
    }, {
        lat: "30.447263",
        lng: "120.263657"
    }]
}
fenceMoudle.updateServerFenceWith(options, res => {
    uni.showToast({
        title: res.message,
        icon: "none"
    })
})

更新围栏参数说明:

参数 值类型 说明
serviceID String 服务ID
fenceID String 围栏ID
serverFenceName String 围栏名称
type String 围栏类型(1001圆形 1002 多边形 1003 线行 1004 行政区域)
coordType String 坐标类型(101 BTK_COORDTYPE_WGS84 102:BTK_COORDTYPE_GCJ02 不传默认BTK_COORDTYPE_BD09LL)
entityName String 需要监听的终端名称
denoiseAccuracy String 终端实体的定位精度大于该值的轨迹点不参与此围栏的计算(默认50)单位米
circleFenceParameter object 创建圆形围栏参数(type = 1001必传),详情见上表circleFenceParameter详解
polygonFenceParameter Array 创建多边形围栏参数(type = 1002必传),详情见上表polygonFenceParameter 详解
polylineFenceParameter object 创建线形围栏参数(type = 1003必传),详情见上表polylineFenceParameter 详解
districtFenceParameter object 创建行政区围栏参数(type = 1004必传)例:{keyWord:"浙江省杭州市西湖区"}
  • 删除服务端围栏
let options = {
    serviceID: "237771",//服务ID
    entityName: "大郎的西瓜",//实体名称
    // fenceIDs:[]//需要删除的围栏ID,围栏ID的数组,若为空,则删除监控对象上的所有地理围栏
}
fenceMoudle.deleteServerFenceWith(options, res => {
    uni.showToast({
        title: res.message,
        icon: "none"
    })
})
  • 查询服务围栏
let options = {
    serviceID: "237771",
    coordType: "103",
    entityName: "大郎的西瓜",
    pageIndex: "1", //字符串
    pageSize: "10" //字符串
}
fenceMoudle.queryServerFenceWith(options, res => {

})
  • 查询实体与围栏的状态 (例:实体名称为”大郎的西瓜“是否在fenceID为38的围栏内)
let options = {
    fenceIDs: ["38"],//围栏ID集合
    entityName: "大郎的西瓜",
    serviceID: "237771",
    pageIndex: "1", //字符串
    pageSize: "10" //字符串
}
fenceMoudle.queryServerFenceStatusWith(options, res => {

})
  • 查询指定位置监控对象与围栏间的状态(例:查询”大郎的西瓜“假设在纬度为30.353807经度为120.300066这个位置与fenceID为38的围栏的关系)
let options = {
    fenceIDs: ["38"],//围栏ID集合
    lat: "30.353807",//指定位置纬度
    lng: "120.300066",//指定位置精度
    coordType: "103",//输出坐标类型
    entityName: "大郎的西瓜",
    serviceID: "237771",//服务ID
    pageIndex: "1", //字符串---查询页码
    pageSize: "10" //字符串----每页数据条数
}
fenceMoudle.queryServerFenceStatusByCustomLocationWith(options, res => {
    console.log(res)
})
  • 查询服务围栏警报信息
let options = {
    fenceIDs: ["38"],
    coordType: "103",
    entityName: "大郎的西瓜",
    serviceID: "237771",
    startTime: "24", //开始时间 当前时间减去这个时间  单位小时
    endTime: "0"
}
fenceMoudle.queryServerFenceHistoryAlarmWith(options, res => {
    console.log(res)
})
  • 查询指定服务下所有服务围栏警报信息--仅iOS有效
let options = {
    coordType: "103",
    serviceID: "237771",
    startTime: "24", //开始时间 当前时间减去这个时间  单位小时
    endTime: "0",
    pageIndex: 0,
    pageSize: 10
}
// 仅iOS有效
fenceMoudle.batchQueryServerFenceHistoryAlarmWith(options, res => {
    console.log(res)
})

客户端围栏 参考示例demo:localFencel.vue文件

  • 创建客户端围栏(客户端围栏只有圆形围栏)
let options = {
    serviceID: "237771", //android独有参数
    localFenceName: "第一个客户端围栏",
    coordType: "103",
    entityName: "大郎的西瓜",
    denoiseAccuracy: "10", //定位精度大于10米的轨迹点都不会参与围栏计算
    circleFenceParameter: {
        lat: "30.446782",//圆形纬度
        lng: "120.263684",//圆心精度
        radius: "10"//半径
    }
}
fenceMoudle.createLocalFenceWith(options, res => {
    uni.showToast({
        title: res.message,
        icon: "none"
    })
})
  • 更新客户端围栏
let options = {
    serviceID: "237771", //android独有参数--Android必传
    fenceID: "24", //必选
    localFenceName: "第一个客户端围栏1111",
    coordType: "103",
    entityName: "大郎的西瓜",
    denoiseAccuracy: "10", //定位精度大于10米的轨迹点都不会参与围栏计算
    circleFenceParameter: { //可选
        lat: "30.446782",//圆形纬度
        lng: "120.263684",//圆心精度
        radius: "10"//半径
    }
}
fenceMoudle.updateLocalFenceWith(options, res => {
    uni.showToast({
        title: res.message,
        icon: "none"
    })
})
  • 删除客户端围栏
let options = {
    serviceID: "237771", //android独有参数
    entityName: "大郎的西瓜", //可选
    // fenceIDs:[]//需要删除的围栏ID,围栏ID的数组,若为空,则删除监控对象上的所有地理围栏 可选
}
fenceMoudle.deleteLocalFenceWith(options, res => {
    uni.showToast({
        title: res.message,
        icon: "none"
    })
})
  • 查询客户端地理围栏
let options = {
    serviceID: "237771", //android独有参数
    fenceIDs: [],
    entityName: "大郎的西瓜"
}
fenceMoudle.queryLocalFenceWith(options, res => {
    uni.showToast({
        title: res.message,
        icon: "none"
    })
})
  • 查询实体与围栏的状态 (例:实体名称为”大郎的西瓜“是否在fenceID为38的围栏内)
let options = {
    serviceID: "237771", //android独有参数
    fenceIDs: [],
    entityName: "大郎的西瓜"
}
fenceMoudle.queryLocalFenceStatusWith(options, res => {
    uni.showToast({
        title: res.message,
        icon: "none"
    })
})
  • 查询指定位置监控对象与围栏间的状态(例:查询”大郎的西瓜“假设在纬度为30.353807经度为120.300066这个位置与fenceID为38的围栏的关系)
let options = {
        serviceID: "237771", //android独有参数
        fenceIDs: ["24"],
        lat: "30.353807",
        lng: "120.300066",
        coordType: "103",
        entityName: "大郎的西瓜",
    }
    fenceMoudle.queryLocalFenceStatusByCustomLocationWith(options, res => {
        uni.showToast({
            title: res.message,
            icon: "none"
        })
    })
  • 查询客户围栏警报信息
let options = {
        serviceID: "237771", //android独有参数
        fenceIDs: ["24"],
        entityName: "大郎的西瓜",
        startTime: "24", //开始时间 当前时间减去这个时间  单位小时
        endTime: "0"
    }
    fenceMoudle.queryLocalFenceHistoryAlarmWith(options, res => {
        uni.showToast({
            title: res.message,
            icon: "none"
        })
    })

轨迹分析(参考示例demo:trajectoryAnalysis.vue)

官方文档:https://lbs.baidu.com/faq/api?title=android-yingyan/guide/analysishttps://lbs.baidu.com/faq/api?title=android-yingyan/guide/analysis

轨迹分析提供停留点分析和驾驶行为分析功能:

  1. 停留点分析接口:一段轨迹中有多少个停留点、停留在何处、停留了多久停留点分析查询entity在指定时间段内的停留点。停留点判断规则为:在stay_radius半径范围内,滞留start_time以上,被认为是一次停留,将取一个代表性坐标作为停留点,其中 stay_radius 默认为20米,start_time 默认为 600秒

  2. 驾驶行为分析:一段轨迹中有多少个超速点、急加/减速点、急转弯点,其中超速点功能支持依据百度地图道路限速信息进行判断

  • 停留点分析
analyzeStayPoint() {
                let options = {
                    serviceID: "237771",
                    entityName: "大郎的西瓜",
                    startTime: "12", //开始时间 单位小时,这里的数值表示当前时间之前的几小时
                    endTime: "0", //开始时间 单位小时,这里的数值表示当前时间之前的几小时---比如获取一天前的数据 startTime传24  endTime传0
                    coordType: "103", ////101 BTK_COORDTYPE_WGS84 102:BTK_COORDTYPE_GCJ02 不传默认BTK_COORDTYPE_BD09LL 输出坐标类型
                    stayRadius: "10", //停留半径 单位米 默认20米
                    stayTime: "60", //停留时间,单位秒  默认600s
                    processOption: { //纠偏设置 不需要纠偏 去掉该参数
                        denoise: false, //降噪
                        mapMatch: false, //绑路
                        vacuateGrade: "1", //抽稀 取值范围【1,5】
                        //  0代表不过滤,100代表过滤掉定位精度大于100米的轨迹点。 例如:若只需保留 GPS 定位点,则建议设为:20;若需保留 GPS 和 Wi-Fi 定位点,去除基站定位点,则建议设为:100.纠偏时的定位精度过滤阀值,用于过滤掉定位精度较差的轨迹点。
                        radiusThreshold: "20",
                        // 查询纠偏后的实时位置时,指定被监控对象的交通方式、里程补偿的默认值为不补充,中断两点间距离不记入里程。1001:驾车 1002:骑行 1003:步行
                        transportMode: "1003"
                    }
                }

                fenceMoudle.analyzeStayPointWith(options, res => {
                    console.log(res)
                })

停留点分析参数说明:

参数 值类型 说明
serviceID String 服务ID
entityName String 监听实体名称
startTime String 开始时间 单位小时,这里的数值表示当前时间之前的几小时
endTime String 结束时间这里的数值表示当前时间之前的几小时---比如获取一天前的数据 startTime传24 endTime传0
coordType String 输出坐标类型(101 WGS84 102:BGCJ02 103: BD09LL 不传默认BD09LL)
stayRadius String 停留半径 单位米 默认20米
stayTime String 停留时间,单位秒 默认600s
processOption object 纠偏配置(见上面通用参数说明-纠偏配置)
  • 驾驶分析
let options = {
                    serviceID: "237771",
                    entityName: "大郎的西瓜",
                    startTime: "12", //开始时间 单位小时,这里的数值表示当前时间之前的几小时
                    endTime: "0", //开始时间 单位小时,这里的数值表示当前时间之前的几小时---比如获取一天前的数据 startTime传24  endTime传0
                    coordType: "103", ////101 BTK_COORDTYPE_WGS84 102:BTK_COORDTYPE_GCJ02 不传默认BTK_COORDTYPE_BD09LL
                    processOption: { //纠偏设置 不需要纠偏 去掉该参数 可选
                        denoise: false, //降噪
                        mapMatch: false, //绑路
                        vacuateGrade: "1", //抽稀 取值范围【1,5】
                        //  0代表不过滤,100代表过滤掉定位精度大于100米的轨迹点。 例如:若只需保留 GPS 定位点,则建议设为:20;若需保留 GPS 和 Wi-Fi 定位点,去除基站定位点,则建议设为:100.纠偏时的定位精度过滤阀值,用于过滤掉定位精度较差的轨迹点。
                        radiusThreshold: "20"
                    },
                    thresholdOption: { //轨迹分析时需要的阈值,各阈值均有默认值。可选
                        speedingThreshold: 50, //固定限速值,可选。若设置为非0值,则以设置的数值为阈值,轨迹点速度超过该值则认为是超速;若不设置,或设置为0,则根据百度地图道路限速数据计算超速点。
                        harshAccelerationThreshold: 1.67, // 急加速的水平加速度阈值。单位:m^2/s,默认值:1.67,仅支持正数
                        harshBreakingThreshold: -1.67, //急减速的水平加速度阈值。单位:m^2/s,默认值:-1.67,仅支持负数
                        harshSteeringThreshold: 5 // 急转弯的向心加速度阈值 单位:m^2/s,默认值:5,仅支持正数
                    }
                }

                fenceMoudle.analyzeDrivingBehaviourWith(options, res => {
                    console.log(res)
                })

驾驶分析参数说明:

参数 值类型 说明
serviceID String 服务ID
entityName String 监听实体名称
startTime String 开始时间 单位小时,这里的数值表示当前时间之前的几小时
endTime String 结束时间这里的数值表示当前时间之前的几小时---比如获取一天前的数据 startTime传24 endTime传0
coordType String 输出坐标类型(101 WGS84 102:BGCJ02 103: BD09LL 不传默认BD09LL)
processOption object 纠偏配置(见上面通用参数说明-纠偏配置)
thresholdOption object 轨迹分析时需要的阈值,各阈值均有默认值。可选

thresholdOption说明:

参数 值类型 说明
speedingThreshold int 固定限速值,可选。若设置为非0值,则以设置的数值为阈值,轨迹点速度超过该值则认为是超速;若不设置,或设置为0,则根据百度地图道路限速数据计算超速点。
harshAccelerationThreshold float 急加速的水平加速度阈值。单位:m^2/s,默认值:1.67,仅支持正数(默认1.67)
harshBreakingThreshold float 急减速的水平加速度阈值。单位:m^2/s,默认值:-1.67,仅支持负数(默认-1.67)
harshSteeringThreshold int 急转弯的向心加速度阈值 单位:m^2/s,默认值:5,仅支持正数(默认5)
  • 驾驶分析返回数据结构
{
    "average_speed": 57.060968094796,//获取平均时速
    "tag": 555,
    "harsh_breaking": [//急刹车集合
    {
     "acceleration":0,//获取实际加速度,单位:m/s^2
     "end_speed":0,//获取减速后时速,单位:km/h
     "speed":0,
     "inital_speed":0,//   获取刹车前时速,单位:km/h
    }],
    "duration": 1079,//获取行程耗时,单位:秒
    "message": "成功",
    "harsh_steering": [{
     "direction":0,
     "radius":0,
     "loc_time":0,
     "centripetal_acceleration":0,// 获取向心加速度,单位:m/s^2
     "turn_speed":0,//转向时速
     "turn_type":"",//转向类型 左 右
     "speed":0//速度
    }],//急转弯集合
    "harsh_acceleration_num": 0,//获取急加速次数
    "max_speed": 92.39,//最大速度km/h
    "start_point": {//起点
        "loc_time": 1695285763,
        "height": 0,
        "direction": 0,
        "longitude": 120.263724,
        "speed": 0,
        "latitude": 30.446801,
        "radius": 0,
        "coord_type": "bd09ll"
    },
    "code": "000000",
    "distance": 17102.440159524,//获取行程里程,单位:米
    "end_point": {//终点
        "loc_time": 1695300633,//定位时间戳
        "height": 0,
        "direction": 0,
        "longitude": 120.2997265806,
        "speed": 0,
        "latitude": 30.354376250714,
        "radius": 0,
        "coord_type": "bd09ll"
    },
    "harsh_acceleration": [{//急加速点集合
     "acceleration":0,//获取实际加速度,单位:m/s^2
     "end_speed":0,//获取加速后时速,单位:km/h
     "speed":0,
     "inital_speed":0,//  获取加速前时速,单位:km/h
    }],
    "speeding_num": 3,//获取超速次数
    "harsh_breaking_num": 0,// 获取急刹车次数
    "speeding": [//超速点集合
        {
            "speeding_distance": 8014.5127393949,//超速距离
            "speeding_points": [
                {
                    "loc_time": 1695299688,
                    "height": 0,
                    "longitude": 120.25855856578,
                    "direction": 0,
                    "speed": 0,
                    "actual_speed": 70.92,
                    "latitude": 30.436841623667,
                    "radius": 0,
                    "coord_type": "bd09ll",
                    "limit_speed": 0
                },
                {
                    "loc_time": 1695300043,
                    "height": 0,
                    "longitude": 120.31919218378,
                    "direction": 0,
                    "speed": 0,
                    "actual_speed": 67.35,
                    "latitude": 30.405198856104,
                    "radius": 0,
                    "coord_type": "bd09ll",
                    "limit_speed": 0
                }
            ]
        }
    ],
    "harsh_steering_num": 0//获取急转弯次数
}

隐私、权限声明

1. 本插件需要申请的系统权限列表:

android:注意: manifest.json权限配置中不包含后台定位和前台服务,需要在源码中自行添加(即:FOREGROUND_SERVICE与ACCESS_BACKGROUND_LOCATION)。 "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>", "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>", "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>", "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>", "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>", "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>", "<uses-permission android:name=\"android.permission.INTERNET\"/>", "<uses-permission android:name=\"android.permission.FOREGROUND_SERVICE\" />", "<uses-permission android:name=\"android.permission.ACCESS_BACKGROUND_LOCATION\" />", "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>", "<uses-permission android:name=\"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"/>", <!-- 用于Android M及以上系统,申请加入忽略电池优化白名单,可选权限,非必须--> "<uses-permission android:name=\"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\"/>" iOS:"NSLocationWhenInUseUsageDescription", "NSLocationAlwaysAndWhenInUseUsageDescription", "NSLocationAlwaysUsageDescription"

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件会采集用户位置信息,插件使用百度鹰眼轨迹SDK,参考其官方网站https://lbsyun.baidu.com/ 和隐私政策 https://lbsyun.baidu.com/index.php?title=openprivacy

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问