Browse Source

feat: Flt모듈 - 버퍼존 생성 추가

pull/9/head
lkd9125(이경도) 7 months ago
parent
commit
1e46991148
  1. 4
      web/api-flight/src/main/java/kr/co/palnet/kac/api/util/model/FlightPlanAreaCoordModel.java
  2. 4
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/service/FlightLaancService.java
  3. 14
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/controller/FlightPlanController.java
  4. 57
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/model/buffer/BufferAreaCoordModel.java
  5. 58
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/model/buffer/CreateBufferModel.java
  6. 32
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/service/FlightPlanService.java

4
web/api-flight/src/main/java/kr/co/palnet/kac/api/util/model/FlightPlanAreaCoordModel.java

@ -7,8 +7,8 @@ import java.time.LocalDateTime;
@Data
public class FlightPlanAreaCoordModel {
private Integer planAreaCoordSno;
private Integer planAreaSno;
private Long planAreaCoordSno;
private Long planAreaSno;
@Schema(description = "x 좌표", example = "37.5208864")
private double lat;
@Schema(description = "y 좌표", example = "126.6071164")

4
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/service/FlightLaancService.java

@ -578,6 +578,8 @@ public class FlightLaancService {
public SearchLaancAprvDetailRS getLaancAprvDetail(Long planSno) {
if(planSno == null) throw new BaseException(BaseErrorCode.WEB_PARAM_INVALID);
Optional<FltPlanBas> fltPlanBasData = fltPlanDomainService.findById(planSno);
if(fltPlanBasData.isPresent()){
@ -616,7 +618,7 @@ public class FlightLaancService {
return result;
} else {
throw new BaseException(BaseErrorCode.WEB_PARAM_INVALID);
throw new BaseException(BaseErrorCode.DATA_EMPTY);
}
}
}

14
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/controller/FlightPlanController.java

@ -1,11 +1,18 @@
package kr.co.palnet.kac.api.v1.flight.plan.controller;
import io.swagger.v3.oas.annotations.Operation;
import kr.co.palnet.kac.api.v1.flight.plan.model.buffer.CreateBufferModel;
import kr.co.palnet.kac.api.v1.flight.plan.service.FlightPlanService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@Slf4j
@RequestMapping("/v1/flight/plan")
@ -14,6 +21,13 @@ public class FlightPlanController {
private final FlightPlanService flightPlanService;
@PostMapping("/area/buffer")
@Operation(summary = "비행 계획서 작성 - 버퍼존 생성", description = "비행 계획서 작성 시 특정 좌표를 이은 선분에 대한 버퍼존을 생성하는 API 입니다.")
public ResponseEntity<List<CreateBufferModel>> createBuffer(@RequestBody List<CreateBufferModel> rq){
List<CreateBufferModel> result = flightPlanService.createBuffer(rq);
return ResponseEntity.ok().body(result);
}
}

57
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/model/buffer/BufferAreaCoordModel.java

@ -0,0 +1,57 @@
package kr.co.palnet.kac.api.v1.flight.plan.model.buffer;
import io.swagger.v3.oas.annotations.media.Schema;
import kr.co.palnet.kac.api.util.model.FlightPlanAreaCoordModel;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class BufferAreaCoordModel {
@Schema(description = "비행구역좌표 일련번호", example = "1")
private Long planAreaCoordSno;
@Schema(description = "비행계획비행구역 일련번호", example = "1")
private Long planAreaSno;
@Schema(description = "위도", example = "127.33")
private double lat;
@Schema(description = "경도", example = "37.99")
private double lon;
@Schema(description = "생성자ID", hidden = true)
private String createUserId;
@Schema(description = "생성일시", hidden = true)
private LocalDateTime createDt;
@Schema(hidden = true)
private String docState = "R";
public static FlightPlanAreaCoordModel toCoordModel(BufferAreaCoordModel model){
FlightPlanAreaCoordModel coordModel = new FlightPlanAreaCoordModel();
coordModel.setPlanAreaCoordSno(model.getPlanAreaCoordSno());
coordModel.setPlanAreaSno(model.getPlanAreaSno());
coordModel.setLat(model.getLat());
coordModel.setLon(model.getLon());
coordModel.setCreateUserId(model.getCreateUserId());
coordModel.setCreateDt(model.getCreateDt());
coordModel.setDocState(model.getDocState());
return coordModel;
}
public static BufferAreaCoordModel toModel(FlightPlanAreaCoordModel model){
BufferAreaCoordModel coordModel = new BufferAreaCoordModel();
coordModel.setPlanAreaCoordSno(model.getPlanAreaCoordSno());
coordModel.setPlanAreaSno(model.getPlanAreaSno());
coordModel.setLat(model.getLat());
coordModel.setLon(model.getLon());
coordModel.setCreateUserId(model.getCreateUserId());
coordModel.setCreateDt(model.getCreateDt());
coordModel.setDocState(model.getDocState());
return coordModel;
}
}

58
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/model/buffer/CreateBufferModel.java

@ -0,0 +1,58 @@
package kr.co.palnet.kac.api.v1.flight.plan.model.buffer;
import io.swagger.v3.oas.annotations.media.Schema;
import kr.co.palnet.kac.api.v1.flight.laanc.model.constant.FltMethod;
import kr.co.palnet.kac.api.v1.flight.laanc.model.create.BasLaancAreaCoordModel;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class CreateBufferModel {
@Schema(description = "비행구역 일련번호", example = "1", hidden = true)
private Long planAreaSno;
@Schema(description = "비행계획서 일련번호", example = "1", hidden = true)
private Long planSno;
@Schema(description = "구역종류", example = "CIRCLE")
private String areaType;
@Schema(description = "비행방식", example = "01")
private FltMethod fltMethod;
@Schema(description = "비행구역주소", example = "인천광역시 부평구 청천2동")
private String fltAreaAddr;
@Schema(description = "버퍼존", example = "100")
private Integer bufferZone;
@Schema(description = "고도", example = "110")
private String fltElev;
@Schema(description = "생성자ID", hidden = true)
private String createUserId;
@Schema(description = "생성일시", hidden = true)
private LocalDateTime createDt;
@Schema(description = "수정자ID", hidden = true)
private String updateUserId;
@Schema(description = "수정일시", hidden = true)
private LocalDateTime updateDt;
private String docState = "R";
private List<BufferAreaCoordModel> coordList;
@Schema(hidden = true)
private List<BufferAreaCoordModel> bufferCoordList;
// kac 추가 필드
@Schema(description = "비행방식(기타)")
private String fltMothoeRm;
}

32
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/service/FlightPlanService.java

@ -1,11 +1,43 @@
package kr.co.palnet.kac.api.v1.flight.plan.service;
import kr.co.palnet.kac.api.util.AreaUtils;
import kr.co.palnet.kac.api.util.model.FlightPlanAreaCoordModel;
import kr.co.palnet.kac.api.v1.flight.laanc.model.create.BasLaancAreaCoordModel;
import kr.co.palnet.kac.api.v1.flight.plan.model.buffer.BufferAreaCoordModel;
import kr.co.palnet.kac.api.v1.flight.plan.model.buffer.CreateBufferModel;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.locationtech.jts.geom.Coordinate;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@Slf4j
@RequiredArgsConstructor
public class FlightPlanService {
private final AreaUtils areaUtils;
public List<CreateBufferModel> createBuffer(List<CreateBufferModel> rq) {
for (CreateBufferModel area : rq) {
if ("LINE".equals(area.getAreaType())) {
List<FlightPlanAreaCoordModel> coordList = area.getCoordList().stream().map(BufferAreaCoordModel::toCoordModel).toList();
List<Coordinate> convertCoordinates = areaUtils.convertCoordinates(coordList); // 객체 타입 변환
List<Coordinate> transCoordList = areaUtils.transform(convertCoordinates, "EPSG:4326", "EPSG:5181");
List<Coordinate> bufferList = areaUtils.buffer(transCoordList, area.getBufferZone()); // buffer 영역 생성
List<Coordinate> transBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326"); // buffer 영역 좌표계 변환
List<BufferAreaCoordModel> bufferCoordList = areaUtils.convertModel(transBufferList).stream().map(BufferAreaCoordModel::toModel).toList();
area.setBufferCoordList(bufferCoordList);
}
}
return rq;
}
}

Loading…
Cancel
Save