限飞区解禁教程
限飞区解禁教程
1. 概述
限⻜解禁功能给开发者提供⻜行器附近限⻜区的变化进行监听。通过限⻜解禁可以获取⻜行器周边特定公里范围的限⻜区,并对指定的区域进行解锁。解锁后将不再提示任何限⻜区并取消⻜行器起⻜限制。
2. 限⻜区划分
MSDK对限⻜区的划分在限⻜区策略枚举值 – FlyZoneCategory:
限飞区类型 | 描述 |
---|---|
WARNING | 警告区 |
ENHANCED_WARNING | 强化警告区 |
AUTHORIZATION | 授权区域 |
RESTRICTED | 限制区域 |
HEIGHT_RESTRICTED | 限高区 |
注意:
- 如果⻜行器⻜行过程途径禁⻜区或者⻜行器⻜行超过限高区,⻜行器将在区域前悬停并且无法打杆⻜行器往区域方向前进。
3. 限⻜区获取
通过getFlyZonesInSurroundingArea()获取距离中心位置100公里范围内的限⻜区,返回的限⻜区包含固定限飞区、临时限⻜区与电子围栏;
通过getFixedNoFlyZone()获取距离中心位置100公里范围内的固定限飞区;
通过getTempNoFlyZone()获取距离中心位置100公里范围内的临时限⻜区;
通过getImportNoFlyZone()获取导入SDK的电子围栏。
注意:
- 如果获取到的限⻜区数量过多,在地图上绘制限⻜区可能存在卡顿问题,建议做相关优化显示。
4. 限⻜区解禁
以下为限⻜区解禁步骤介绍。
通过限⻜区获取中的接口获取附近的限飞区
通过售后申请授权区域。
通过downloadAuthFlyZoneFromServer()从服务器获取授权区,可通过⻜机序列号,获取指定⻜机的授权区域。
通过writeNoFlyZoneFile()将限飞区和授权区信息写入Autel格式的文件
通过uploadNoFlyZoneToAircraft()将文件上传到与当前⻜行器SN一致的授权区到⻜行器⻜控中,导入成功则授权区设置生效。
通过getAuthFlyZone()获取本地存储的解禁信息。
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?) {
//failure
}
})
参数说明:
location:位置信息LocationCoordinate2D
可以一次获取固定禁飞区、临时禁飞区和电子围栏,也可以使用其他接口分开获取。如下所示:
//获取固定禁飞区
FlyZoneManager.get().getFixedNoFlyZone(location, object: CommonCallbacks.CompletionCallbackWithParam<List<FlyZoneInformation>?>{
override fun onSuccess(t: List<FlyZoneInformation>?) {
//success
}
override fun onFailure(error: IAutelCode, msg: String?) {
//failure
}
})
//获取临时禁飞区
FlyZoneManager.get().getTempNoFlyZone(location, object: CommonCallbacks.CompletionCallbackWithParam<List<FlyZoneInformation>?>{
override fun onSuccess(t: List<FlyZoneInformation>?) {
//success
}
override fun onFailure(error: IAutelCode, msg: String?) {
//failure
}
})
//获取导入电子围栏
FlyZoneManager.get().getImportNoFlyZone(location, object: CommonCallbacks.CompletionCallbackWithParam<List<FlyZoneInformation>?>{
override fun onSuccess(t: List<FlyZoneInformation>?) {
//success
}
override fun onFailure(error: IAutelCode, msg: String?) {
//failure
}
})
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().writeNoFlyZoneFile(filePath, fileType, flyZoneInformation, authZoneInformation, object: CommonCallbacks.CompletionCallback<{
override fun onSuccess() {
//success
}
override fun onFailure(error: IAutelCode, msg: String?) {
//failure
}
})
参数说明:
filePath: 文件保存路径
fileType: 文件类型FileTypeEnum
flyZoneInformation: 限飞区信息FlyZoneInformation
authZoneInformation: 授权区信息FlyZoneAuthInformation
6.4 限飞区文件上传至飞行器中
示例代码:
FlyZoneManager.get().uploadNoFlyZoneToAircraft(filePath, aircraftSN, fileType, 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
}
})
参数说明:
filePath: 文件保存路径
aircraftSN:飞机SN号
fileType: 文件类型FileTypeEnum
注意:
授权区信息SN需与飞机SN匹配,否则上传失败,上传成功授权区即生效。
飞机已经内置固定禁飞区,不需要上传
目前Autel固定翼飞机将临时禁飞区、电子围栏和授权区整合成一个文件上传
Autel固定翼飞机只能使用FileTypeEnum.ELECTRIC_BARRIER类型上传
同一文件类型上传会覆盖之前的文件
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:文件路径
注意:当前只支持导入欧盟地理感知数据,地理感知数据可以从欧洲航空安全局官网下载。
更多接口细节,请参考IFlyZoneManager