From cdd050905efa28bbe1c42e38f9036c0c519dbdd2 Mon Sep 17 00:00:00 2001 From: songhyeonseong Date: Thu, 6 Feb 2025 10:14:34 +0900 Subject: [PATCH] =?UTF-8?q?[UNI-132]=20fix=20:=20=EB=B9=8C=EB=94=A9=20?= =?UTF-8?q?=EB=85=B8=EB=93=9C=20=EC=A1=B0=ED=9A=8C=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?SQL=20=EC=98=A4=EB=A5=98=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../softeer5/uniro_backend/common/utils/GeoUtils.java | 9 +++++++++ .../node/repository/BuildingRepository.java | 4 ++-- .../softeer5/uniro_backend/node/service/NodeService.java | 6 ++++-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/common/utils/GeoUtils.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/common/utils/GeoUtils.java index 5c4e45f..cd2df80 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/common/utils/GeoUtils.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/common/utils/GeoUtils.java @@ -46,4 +46,13 @@ public static String convertDoubleToLineStringWTK(List co){ return writer.write(lineString); } + public static String makeSquarePolygonString(double leftUpLng, double leftUpLat, double rightDownLng, double rightDownLat){ + return String.format("Polygon((%f %f, %f %f, %f %f, %f %f, %f %f))" + , leftUpLng,leftUpLat + , leftUpLng,rightDownLat + , rightDownLng, rightDownLat + , rightDownLng, leftUpLat + , leftUpLng, leftUpLat); + } + } diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/repository/BuildingRepository.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/repository/BuildingRepository.java index 9049dc7..a231d1b 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/repository/BuildingRepository.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/repository/BuildingRepository.java @@ -18,9 +18,9 @@ public interface BuildingRepository extends JpaRepository, Build JOIN FETCH Node n ON b.nodeId = n.id WHERE b.univId = :univId AND b.level >= :level - AND ST_Within(n.coordinates, ST_MakeEnvelope(:lux, :luy, :rdx, :rdy, 4326)) + AND ST_Within(n.coordinates, ST_PolygonFromText((:polygon),4326)) """) - List findByUnivIdAndLevelWithNode(Long univId, int level, double lux , double luy, double rdx , double rdy); + List findByUnivIdAndLevelWithNode(Long univId, int level, String polygon); @Query(""" SELECT new com.softeer5.uniro_backend.node.dto.BuildingNode(b, n) diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/service/NodeService.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/service/NodeService.java index 0652e1a..84907d3 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/service/NodeService.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/service/NodeService.java @@ -16,6 +16,8 @@ import lombok.RequiredArgsConstructor; +import static com.softeer5.uniro_backend.common.utils.GeoUtils.makeSquarePolygonString; + @Service @RequiredArgsConstructor @Transactional(readOnly = true) @@ -26,8 +28,8 @@ public List getBuildings( Long univId, int level, double leftUpLng, double leftUpLat, double rightDownLng , double rightDownLat) { - List buildingNodes = buildingRepository.findByUnivIdAndLevelWithNode( - univId, level, leftUpLng, leftUpLat, rightDownLng, rightDownLat); + String polygon = makeSquarePolygonString(leftUpLng, leftUpLat, rightDownLng, rightDownLat); + List buildingNodes = buildingRepository.findByUnivIdAndLevelWithNode(univId, level, polygon); return buildingNodes.stream() .map(buildingNode -> GetBuildingResDTO.of(buildingNode.getBuilding(), buildingNode.getNode()))