diff --git a/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java b/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java index 80ab2f4..09b4a49 100644 --- a/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java +++ b/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java @@ -204,4 +204,19 @@ public class BasFlightController { return ResponseEntity.ok().body(new SuccessResponse<>(result)); } + + // 비행 구역 버퍼 존 생성 + @PostMapping("/plan/area/buffer") + public ResponseEntity findBuffer(@RequestBody List rq) { + List rs = null; + try { + rs = basFlightService.getBuffer(rq); + } catch (Exception e) { + log.error("IGNORE : {}", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); + } + + return ResponseEntity.ok().body(new SuccessResponse<>(rs)); + } } diff --git a/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaBufferModel.java b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaBufferModel.java new file mode 100644 index 0000000..f2a57f3 --- /dev/null +++ b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaBufferModel.java @@ -0,0 +1,15 @@ +package com.palnet.biz.api.bas.flight.model; + +import lombok.Data; + +import java.util.List; + +@Data +public class BasFlightPlanAreaBufferModel { + + + private Integer bufferZone; // 반경 + private List coordList; // 기초 좌표 + private List bufferCoordList; // 버퍼 좌표 + +} diff --git a/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaModel.java b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaModel.java index 6d92394..57e05b7 100644 --- a/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaModel.java +++ b/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaModel.java @@ -19,4 +19,5 @@ public class BasFlightPlanAreaModel { private Date updateDt; private String docState = "R"; private List coordList; + private List bufferCoordList; } diff --git a/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java b/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java index 79bb417..ce0e52e 100644 --- a/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java +++ b/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java @@ -6,10 +6,14 @@ import com.palnet.biz.api.bas.flight.model.*; import com.palnet.biz.jpa.entity.*; import com.palnet.biz.jpa.repository.com.ComArcrftBasRepository; import com.palnet.biz.jpa.repository.flt.*; +import com.palnet.comn.code.ErrorCode; +import com.palnet.comn.exception.CustomException; +import com.palnet.comn.utils.AreaUtils; import com.palnet.comn.utils.EncryptUtils; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.StringUtils; +import org.locationtech.jts.geom.Coordinate; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -29,8 +33,10 @@ public class BasFlightService { private final FltPlanPilotRepository fltPlanPilotRepository; private final FltPlanQueryRepository fltPlanQueryRepository; private final ComArcrftBasRepository comArcrftBasRepository; - private final JwtTokenUtil jwtTokenUtil; + private final AreaUtils areaUtils; + + // 비행계획서 조회 public List listPlan(BasFlightPlanListRq rq) { @@ -294,4 +300,43 @@ public class BasFlightService { return arcrftModels; } + // 비행 구역 buffer zone + public List getBuffer(List rq) { + + List bufferCoordList = new ArrayList<>(); + + for(BasFlightPlanAreaModel area : rq) { + + if("LINE".equals(area.getAreaType())) { + List coordinates = new ArrayList<>(); + + for(BasFlightPlanAreaCoordModel coord : area.getCoordList()) { + Coordinate coordinate = new Coordinate(coord.getLon(), coord.getLat()); + + coordinates.add(coordinate); + } + + List bufferList = areaUtils.buffer(coordinates, area.getBufferZone()); + + for(Coordinate buffer : bufferList) { + BasFlightPlanAreaCoordModel bufferCoord = new BasFlightPlanAreaCoordModel(); + + bufferCoord.setLat(buffer.getY()); + bufferCoord.setLon(buffer.getX()); + + bufferCoordList.add(bufferCoord); + } + area.setBufferCoordList(bufferCoordList); + + log.info("RQ: {}", rq); + } else { + throw new CustomException(ErrorCode.FAIL); + } + } + + + + return rq; + } + } diff --git a/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java b/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java index 94e4628..b33bad5 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java @@ -222,14 +222,14 @@ public class CtrCntrlQueryRepository{ own.hpno )) .from(ctr) - .leftJoin(bas) - .on(ctr.objectId.eq(bas.prdctNum)) .leftJoin(own) - .on(bas.arcrftSno.eq(own.arcrftSno)) + .on(ctr.idntfNum.eq(own.idntfNum)) + .leftJoin(bas) + .on(own.arcrftSno.eq(bas.arcrftSno)) .where(ctr.cntrlId.eq(controlId)) .where(bas.useYn.eq("Y")) - .where(ctr.objectId.ne("none")) +// .where(ctr.objectId.ne("none")) .fetchFirst(); @@ -334,6 +334,7 @@ public class CtrCntrlQueryRepository{ public AnlsSmltDetailModel anlsSmltDetail(String cntrlId){ QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; QComArcrftBas air = QComArcrftBas.comArcrftBas; + QComIdntfBas idntf = QComIdntfBas.comIdntfBas; AnlsSmltDetailModel result = query.select(Projections.bean(AnlsSmltDetailModel.class , bas.cntrlId , @@ -355,8 +356,10 @@ public class CtrCntrlQueryRepository{ air.imageUrl )) .from(bas) + .leftJoin(idntf) + .on(bas.idntfNum.eq(idntf.idntfNum)) .leftJoin(air) - .on(bas.objectId.eq(air.prdctNum)) + .on(idntf.arcrftSno.eq(air.arcrftSno)) .on(air.useYn.eq("Y")) .where(bas.cntrlId.eq(cntrlId)) .fetchFirst(); diff --git a/src/main/java/com/palnet/comn/utils/AreaUtils.java b/src/main/java/com/palnet/comn/utils/AreaUtils.java new file mode 100644 index 0000000..d31c3a2 --- /dev/null +++ b/src/main/java/com/palnet/comn/utils/AreaUtils.java @@ -0,0 +1,47 @@ +package com.palnet.comn.utils; + +import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaCoordModel; +import lombok.extern.slf4j.Slf4j; +import org.locationtech.jts.geom.*; +import org.locationtech.jts.operation.buffer.BufferParameters; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@Component +@Slf4j +public class AreaUtils { + + public List buffer(List coordList, Integer bufferZone) { + List bufferList = new ArrayList<>(); + + GeometryFactory geometryFactory = new GeometryFactory(); + LineString line = new GeometryFactory().createLineString(coordList.toArray(new Coordinate[] {})); + + Geometry geometry = geometryFactory.createGeometry(line); + int cap = BufferParameters.CAP_SQUARE; + Geometry buffer = geometry.buffer(bufferZone,20,cap); + + Coordinate[] coords = buffer.getCoordinates(); + + bufferList.addAll(Arrays.asList(coords)); + + return bufferList; + } + + public List convertCoordinates(List coordList) { + + List convertCoordList = new ArrayList<>(); + + for(BasFlightPlanAreaCoordModel coord : coordList) { + Coordinate coordinate = new Coordinate(coord.getLon(), coord.getLat()); + + convertCoordList.add(coordinate); + } + + return convertCoordList; + } + +} diff --git a/src/main/java/com/palnet/comn/utils/FlightUtils.java b/src/main/java/com/palnet/comn/utils/FlightUtils.java index d4567fb..da0b436 100644 --- a/src/main/java/com/palnet/comn/utils/FlightUtils.java +++ b/src/main/java/com/palnet/comn/utils/FlightUtils.java @@ -7,6 +7,7 @@ import org.locationtech.jts.geom.GeometryFactory; import org.locationtech.jts.geom.LineString; import org.locationtech.jts.geom.Point; import org.locationtech.jts.geom.impl.CoordinateArraySequence; +import org.locationtech.jts.operation.buffer.BufferOp; import org.locationtech.jts.operation.buffer.BufferParameters; import org.locationtech.proj4j.BasicCoordinateTransform; import org.locationtech.proj4j.CRSFactory; @@ -21,15 +22,17 @@ public class FlightUtils { System.out.println(coord.x + "," + coord.y); } Geometry geometry = geometryFactory.createGeometry(line); + int nSegments = 10; int cap = BufferParameters.CAP_ROUND; - Geometry buffer = geometry.buffer(bufval,20,cap); + int join = BufferParameters.JOIN_ROUND; + BufferParameters bufferParam = new BufferParameters(nSegments, cap, join, join); + BufferOp ops = new BufferOp(geometry, bufferParam); + Geometry bufTrans = ops.getResultGeometry((bufval/177763.63662580872)*2); - Coordinate[] coords = buffer.getCoordinates(); + Coordinate[] coords = bufTrans.getCoordinates(); System.out.println("-------------------------------------"); for (Coordinate coord : coords) { - System.out.println(coord.x + "," + coord.y ); - } System.out.println("-----------------------------------------"); return coords;