| | |
| | | import com.ard.route.mapper.ArdRouteInfoMapper; |
| | | import com.ard.route.service.IArdRouteInfoService; |
| | | import com.ard.route.service.UavRouteService; |
| | | import com.ard.work.domain.cache.UavTelemetryDataCache; |
| | | import com.ard.work.domain.cache.UavWaylineCache; |
| | | import com.ard.work.domain.dto.state.PointData; |
| | | import com.ard.work.domain.dto.telemetry.TelemetryData; |
| | | import com.ard.work.domain.dto.wayline.*; |
| | | import com.ard.work.service.ITyService; |
| | | import org.slf4j.Logger; |
| | |
| | | throw new RuntimeException(e); |
| | | } |
| | | |
| | | // 主逻辑优化 |
| | | double altitudeOffset = getDoublePoint(ardRouteInfo.getUavRouteReq().getTakeOffRefPoint(), "alt"); |
| | | // 如果参考起飞点不为空,将每个航点高度进行加工。 |
| | | if (ardRouteInfo.getUavRouteReq().getTakeOffRefPoint() != null){ |
| | | |
| | | for (RoutePointReq routePointReq : ardRouteInfo.getUavRouteReq().getRoutePointList()) { |
| | | // 调整航点高度 |
| | | adjustRoutePointHeight(routePointReq, altitudeOffset); |
| | | double altitudeOffset = getDoublePoint(ardRouteInfo.getUavRouteReq().getTakeOffRefPoint(), "alt"); |
| | | |
| | | for (RoutePointReq routePointReq : ardRouteInfo.getUavRouteReq().getRoutePointList()) { |
| | | // 调整每个航点高度 |
| | | adjustRoutePointHeight(routePointReq, altitudeOffset); |
| | | } |
| | | } |
| | | |
| | | return ardRouteInfo; |
| | | } |
| | | |
| | | // 提取航点高度调整逻辑到方法中 |
| | | private void adjustRoutePointHeight(RoutePointReq routePointReq, double altitudeOffset) { |
| | | routePointReq.setHeight(routePointReq.getHeight() + altitudeOffset); |
| | | } |
| | |
| | | */ |
| | | @Override |
| | | public int deleteArdRouteInfoById(String id) { |
| | | // 删除航线(kmz)文件 |
| | | ArdRouteInfo information = ardRouteInfoMapper.selectArdRouteInfoById(id); |
| | | delOssService(information); |
| | | return ardRouteInfoMapper.deleteArdRouteInfoById(id); |
| | | } |
| | | |
| | |
| | | |
| | | /** |
| | | * 上传航线到边缘服务器 |
| | | * |
| | | * ardNoflyDto |
| | | * @return 结果 |
| | | */ |
| | |
| | | } catch (IOException | ClassNotFoundException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | |
| | | // 获取第一个点 |
| | | double firstPointLng = route.getUavRouteReq().getRoutePointList().get(0).getLongitude(); |
| | | double firstPointLat = route.getUavRouteReq().getRoutePointList().get(0).getLatitude(); |
| | | |
| | | // 获取最后一个点 |
| | | double lastPointLng = route.getUavRouteReq().getRoutePointList().get(route.getUavRouteReq().getRoutePointList().size()-1).getLongitude(); |
| | | double lastPointLat = route.getUavRouteReq().getRoutePointList().get(route.getUavRouteReq().getRoutePointList().size()-1).getLatitude(); |
| | | |
| | | // 无人机遥测数据,用于校验真实起飞点和第一个点是否在禁飞区 |
| | | TelemetryData telemetryData = UavTelemetryDataCache.get(boxSn); |
| | | double telemetryDataLng = 0; |
| | | double telemetryDataLat = 0; |
| | | if (telemetryData != null){ |
| | | telemetryDataLng = telemetryData.getLng(); |
| | | telemetryDataLat = telemetryData.getLat(); |
| | | } |
| | | |
| | | ArdNoflyDto dto1 = new ArdNoflyDto(); |
| | | dto1.setCurrent(new Vertex(telemetryDataLng,telemetryDataLat)); |
| | | dto1.setTarget(new Vertex(firstPointLng,firstPointLat)); |
| | | verifyNoFlyZone(dto1); |
| | | |
| | | ArdNoflyDto dto2 = new ArdNoflyDto(); |
| | | dto2.setCurrent(new Vertex(lastPointLng,lastPointLat)); |
| | | dto2.setTarget(new Vertex(telemetryDataLng,telemetryDataLat)); |
| | | verifyNoFlyZone(dto2); |
| | | |
| | | // 判断禁飞区 |
| | | arrayWithinNoFlyZone(route.getUavRouteReq().getRoutePointList()); |
| | | // 1.2通过minio获取航线信息 |
| | |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | public Boolean routeBegins(String boxSn) { |
| | | public Boolean routeBegins(String id,String boxSn) { |
| | | ArdRouteInfo route = ardRouteInfoMapper.selectArdRouteInfoById(id); |
| | | // 判断是否循环航线 |
| | | if ("1".equals(route.getIsLoop())) { |
| | | deleteArdRouteInfoById(id); |
| | | } |
| | | WayLineBeginDTO wayLineBeginDTO = new WayLineBeginDTO(boxSn); |
| | | tyService.wayLineBegin(wayLineBeginDTO); |
| | | return true; |