Skip to main content

限飞区解禁教程

限飞区解禁教程

1. 概述

限⻜解禁功能给开发者提供⻜行器附近限⻜区的变化进行监听。通过限⻜解禁可以获取⻜行器周边特定公里范围的限⻜区,并对指定的区域进行解锁。解锁后将不再提示任何限⻜区并取消⻜行器起⻜限制。

2. 限⻜区划分

MSDK对限⻜区的划分在限⻜区策略枚举值 – FlyZoneCategory:

限飞区类型描述
WARNING警告区
ENHANCED_WARNING强化警告区
AUTHORIZATION授权区域
RESTRICTED限制区域
HEIGHT_RESTRICTED限高区

注意

  • 如果⻜行器⻜行过程途径禁⻜区或者⻜行器⻜行超过限高区,⻜行器将在区域前悬停并且无法打杆⻜行器往区域方向前进。

3. 限⻜区获取

  1. 通过getFlyZonesInSurroundingArea()获取距离中心位置100公里范围内的限⻜区,返回的限⻜区包含固定限飞区、临时限⻜区与电子围栏;

  2. 通过getFixedNoFlyZone()获取距离中心位置100公里范围内的固定限飞区;

  3. 通过getTempNoFlyZone()获取距离中心位置100公里范围内的临时限⻜区;

  4. 通过getImportNoFlyZone()获取导入SDK的电子围栏。

注意

  • 如果获取到的限⻜区数量过多,在地图上绘制限⻜区可能存在卡顿问题,建议做相关优化显示。

4. 限⻜区解禁

以下为限⻜区解禁步骤介绍。

  1. 通过限⻜区获取中的接口获取附近的限飞区

  2. 通过售后申请授权区域。

  3. 通过downloadAuthFlyZoneFromServer()从服务器获取授权区,可通过⻜机序列号,获取指定⻜机的授权区域。

  4. 通过writeNoFlyZoneFile()将限飞区和授权区信息写入Autel格式的文件

  5. 通过uploadNoFlyZoneToAircraft()将文件上传到与当前⻜行器SN一致的授权区到⻜行器⻜控中,导入成功则授权区设置生效。

  6. 通过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