From 8ed8f1a21dc108db01720882cf763993b4a6a57b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?scnoh=28=EB=85=B8=EC=8A=B9=EC=B2=A0=29?= Date: Mon, 1 Aug 2022 14:03:53 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B9=84=ED=96=89=EA=B5=AC=EC=97=AD=20buffer?= =?UTF-8?q?=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bas/flight/service/BasFlightService.java | 33 ++++++----------- .../java/com/palnet/comn/utils/AreaUtils.java | 37 ++++++++++++++++--- 2 files changed, 43 insertions(+), 27 deletions(-) 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 ce0e52e..187e31d 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 @@ -60,6 +60,15 @@ public class BasFlightService { List coordEntityList = fltPlanAreaCoordRepository.findByPlanAreaSnoOrderByPlanAreaCoordSnoAsc(areaEntity.getPlanAreaSno()); if (coordEntityList != null && !coordEntityList.isEmpty()) { areaModel.setCoordList(BasFlightMapper.mapper.entityToModelCoordList(coordEntityList)); + + // Line인 경우 BufferList 생성 + if("LINE".equals(areaEntity.getAreaType())) { + List convertCoordinates = areaUtils.convertCoordinates(areaModel.getCoordList()); + List bufferList = areaUtils.buffer(convertCoordinates, areaModel.getBufferZone()); + List bufferCoordList = areaUtils.convertModel(bufferList); + + areaModel.setBufferCoordList(bufferCoordList); + } } area.add(areaModel); } @@ -303,29 +312,13 @@ public class BasFlightService { // 비행 구역 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 convertCoordinates = areaUtils.convertCoordinates(area.getCoordList()); + List bufferList = areaUtils.buffer(convertCoordinates, area.getBufferZone()); + List bufferCoordList = areaUtils.convertModel(bufferList); - 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); @@ -334,8 +327,6 @@ public class BasFlightService { } } - - return rq; } diff --git a/src/main/java/com/palnet/comn/utils/AreaUtils.java b/src/main/java/com/palnet/comn/utils/AreaUtils.java index d31c3a2..dade21c 100644 --- a/src/main/java/com/palnet/comn/utils/AreaUtils.java +++ b/src/main/java/com/palnet/comn/utils/AreaUtils.java @@ -3,6 +3,7 @@ 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.BufferOp; import org.locationtech.jts.operation.buffer.BufferParameters; import org.springframework.stereotype.Component; @@ -19,12 +20,20 @@ public class AreaUtils { GeometryFactory geometryFactory = new GeometryFactory(); LineString line = new GeometryFactory().createLineString(coordList.toArray(new Coordinate[] {})); - Geometry geometry = geometryFactory.createGeometry(line); + + // buffer + int nSegments = 10; int cap = BufferParameters.CAP_SQUARE; - Geometry buffer = geometry.buffer(bufferZone,20,cap); + int join = BufferParameters.JOIN_ROUND; + + BufferParameters bufferParam = new BufferParameters(nSegments, cap, join, join); +// Geometry buffer = geometry.buffer(bufferZone,20,cap); + BufferOp ops = new BufferOp(geometry, bufferParam); - Coordinate[] coords = buffer.getCoordinates(); + Geometry bufTrans = ops.getResultGeometry((bufferZone/177763.63662580872)*2); + + Coordinate[] coords = bufTrans.getCoordinates(); bufferList.addAll(Arrays.asList(coords)); @@ -33,15 +42,31 @@ public class AreaUtils { public List convertCoordinates(List coordList) { - List convertCoordList = new ArrayList<>(); + List coordinates = new ArrayList<>(); for(BasFlightPlanAreaCoordModel coord : coordList) { Coordinate coordinate = new Coordinate(coord.getLon(), coord.getLat()); - convertCoordList.add(coordinate); + coordinates.add(coordinate); + } + + return coordinates; + } + + public List convertModel(List bufferList) { + + List bufferCoordList = new ArrayList<>(); + + for(Coordinate buffer : bufferList) { + BasFlightPlanAreaCoordModel bufferCoord = new BasFlightPlanAreaCoordModel(); + + bufferCoord.setLat(buffer.getY()); + bufferCoord.setLon(buffer.getX()); + + bufferCoordList.add(bufferCoord); } - return convertCoordList; + return bufferCoordList; } }