限飞区解禁教程
限飞区解禁教程
1. 概述
限⻜解禁功能给开发者提供⻜行器附近限⻜区的变化进行监听。通过限⻜解禁可以获取⻜行器周边特定公里范围的限⻜区,并对指定的区域进行解锁。解锁后将不再提示任何限⻜区并取消⻜行器起⻜限制。
2. 限⻜区划分
MSDK对限⻜区的划分在限⻜区策略枚举值 – FlyZoneCategory:
限飞区类型 | 描述 |
---|---|
WARNING | 警告区 |
ENHANCED_WARNING | 强化警告区 |
AUTHORIZATION | 授权区域 |
RESTRICTED | 限制区域 |
HEIGHT_RESTRICTED | 限高区 |
注意:
- 如果⻜行器⻜行过程途径禁⻜区或者⻜行器⻜行超过限高区,⻜行器将在区域前悬停并且无法打杆⻜行器往区域方向前进。
3. 限⻜区获取
1、通过getFlyZonesInSurroundingArea()获取距离中心位置50公里范围内的限⻜区,返回的限⻜区包含临时限⻜区与地理感知区域;
2、通过getDroneFlyZoneCountryCode()获取当前⻜机可⻜国家码;
3、通过getHotZoneCountryCode()获取热点区域国家码。
注意:
- 如果获取到的限⻜区数量过多,在地图上绘制限⻜区可能存在卡顿问题,建议做相关优化显示。
4. 限⻜区解禁
以下为限⻜区解禁步骤介绍。
1、通过售后申请授权区域。
2、通过downloadAuthFlyZoneFromServer()从服务器获取授权区,可通过⻜机序列号,获取指定⻜机的授权区域。
3、通过pushAuthFlyZoneToAircraft()导入与当前⻜行器 SN 一致的授权区到⻜行器⻜控中,导入成功则授权区设置生效。
4、通过getAuthFlyZone()获取本地存储的解禁信息。
5、通过deleteAuthFlyZoneFromAircraft()删除⻜机上授权区信息。
5. 接口调用流程
下图为限⻜解禁接口调用流程示例,无需每步参照,请视实际情况调用。详细的使用方法请查看 MSDK API 文档中的限⻜区解禁管理类IFlyZoneManager。
6. 接口调用说明
6.1 获取飞机方圆100公里禁飞区
示例代码如下:
FlyZoneManager.get().getFlyZonesInSurroundingArea(location, object: CommonCallbacks.CompletionCallbackWithParam<List<FlyZoneInformation>?>{
override fun onSuccess(t: List<FlyZoneInformation>?) {
//success
}
override fun onFailure(error: IAutelCode, msg: String?) {
//failureL
}
})
参数说明:
location:位置信息LocationCoordinate2D
6.2 从服务器获取制定飞机授权区信息
示例代码如下:
FlyZoneManager.get().downloadAuthFlyZoneFromServer(
aircraftSN,
location,
object: CommonCallbacks.CompletionCallbackWithParam<List<FlyZoneAuthInformation>?>{
override fun onSuccess(t: List<FlyZoneAuthInformation>?) {
//success
}
override fun onFailure(error: IAutelCode, msg: String?) {
//failure
}
})
参数说明:
aircraftSN:飞机SN号
location:中心位置LocationCoordinate2D
6.3 授权区文件上传至飞行器中
示例代码:
FlyZoneManager.get().pushAuthFlyZoneToAircraft(device, object: CommonCallbacks.UpLoadFileCallbackWithProgress<Int>{
override fun onStartUploading() {
//start uploading
}
override fun onProgressUpdate(progress: Int) {
// progress info
}
override fun onSuccess() {
// success
}
override fun onFailure(error: IAutelCode) {
//failure
}
})
参数说明:
device:无人机设备
注意:授权区信息SN需与飞机SN匹配,否则上传失败,上传成功授权区即生效。
6.4 获取授权区信息
示例代码如下:
FlyZoneManager.get().getAuthFlyZone(device.getDroneSn()!!, object: CommonCallbacks.CompletionCallbackWithParam<List<FlyZoneAuthInformation>?>{
override fun onSuccess(t: List<FlyZoneAuthInformation>?) {
//success
}
override fun onFailure(error: IAutelCode, msg: String?) {
// faulure
}
})
6.5 导入授权区文件
示例代码:
FlyZoneManager.get().importFlySafeDynamicDatabaseToMSDK(filePath, object: CommonCallbacks.CompletionCallbackWithParam<List<FlyZoneInformation>> {
override fun onSuccess(t: List<FlyZoneInformation>?) {
//success
}
override fun onFailure(error: IAutelCode, msg: String?) {
//failure
}
})
参数说明:
filePath:文件路径
注意:当前只支持导入欧盟地理感知数据,地理感知数据可以从欧洲航空安全局官网下载。
6.6 将地理感知数据导入到飞行器中,当前仅支持欧盟数据
示例代码如下:
FlyZoneManager.get().pushFlySafeDynamicDatabaseToAircraft(object: CommonCallbacks.UpLoadFileCallbackWithProgress<Int>{
override fun onStartUploading() {
// start uploading
}
override fun onSuccess() {
// success
}
override fun onFailure(error: IAutelCode) {
// failure
}
override fun onProgressUpdate(progress: Int) {
// progress info
}
})
6.7 获取飞行器可飞区国家码
示例代码如下:
FlyZoneManager.get().getAircraftFlyZoneCountryCode(aircraftSN, object: CommonCallbacks.CompletionCallbackWithParam<List<FlyableZoneInfo>> {
override fun onSuccess(t: List<FlyableZoneInfo>?) {
//success
}
override fun onFailure(error: IAutelCode, msg: String?) {
//failure
}
})
参数说明:
aircraftSN:飞机SN
7.接口说明及Sample获取
接口说明请参考限⻜区解禁管理类IFlyZoneManager
接口使用参考Sample中FlyZoneFragment