Browse Source

비행구역 buffer 작업

feature/auth
노승철 2 years ago
parent
commit
26eac2a3b2
  1. 15
      src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java
  2. 15
      src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaBufferModel.java
  3. 1
      src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaModel.java
  4. 47
      src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java
  5. 13
      src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java
  6. 47
      src/main/java/com/palnet/comn/utils/AreaUtils.java
  7. 11
      src/main/java/com/palnet/comn/utils/FlightUtils.java

15
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<? extends BasicResponse> findBuffer(@RequestBody List<BasFlightPlanAreaModel> rq) {
List<BasFlightPlanAreaModel> 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));
}
}

15
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<BasFlightPlanAreaCoordModel> coordList; // 기초 좌표
private List<BasFlightPlanAreaCoordModel> bufferCoordList; // 버퍼 좌표
}

1
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<BasFlightPlanAreaCoordModel> coordList;
private List<BasFlightPlanAreaCoordModel> bufferCoordList;
}

47
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<BasFlightPlanModel> listPlan(BasFlightPlanListRq rq) {
@ -294,4 +300,43 @@ public class BasFlightService {
return arcrftModels;
}
// 비행 구역 buffer zone
public List<BasFlightPlanAreaModel> getBuffer(List<BasFlightPlanAreaModel> rq) {
List<BasFlightPlanAreaCoordModel> bufferCoordList = new ArrayList<>();
for(BasFlightPlanAreaModel area : rq) {
if("LINE".equals(area.getAreaType())) {
List<Coordinate> coordinates = new ArrayList<>();
for(BasFlightPlanAreaCoordModel coord : area.getCoordList()) {
Coordinate coordinate = new Coordinate(coord.getLon(), coord.getLat());
coordinates.add(coordinate);
}
List<Coordinate> 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;
}
}

13
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();

47
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<Coordinate> buffer(List<Coordinate> coordList, Integer bufferZone) {
List<Coordinate> 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<Coordinate> convertCoordinates(List<BasFlightPlanAreaCoordModel> coordList) {
List<Coordinate> convertCoordList = new ArrayList<>();
for(BasFlightPlanAreaCoordModel coord : coordList) {
Coordinate coordinate = new Coordinate(coord.getLon(), coord.getLat());
convertCoordList.add(coordinate);
}
return convertCoordList;
}
}

11
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;

Loading…
Cancel
Save