diff --git a/build.gradle b/build.gradle index 10b5c9a1..1d3e9ce0 100644 --- a/build.gradle +++ b/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation 'com.fasterxml.jackson.core:jackson-databind' implementation 'org.locationtech.jts.io:jts-io-common:1.20.0' implementation 'org.locationtech.jts:jts-core:1.19.0' - //implementation 'org.hibernate:hibernate-spatial:6.2.7.Final' + implementation 'org.hibernate:hibernate-spatial:6.2.7.Final' // QueryDSL JPA implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' diff --git a/src/main/java/com/kamco/cd/kamcoback/changedetection/dto/ChangeDetectionDto.java b/src/main/java/com/kamco/cd/kamcoback/changedetection/dto/ChangeDetectionDto.java index 4d237536..fa71e98b 100644 --- a/src/main/java/com/kamco/cd/kamcoback/changedetection/dto/ChangeDetectionDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/changedetection/dto/ChangeDetectionDto.java @@ -1,6 +1,5 @@ package com.kamco.cd.kamcoback.changedetection.dto; -import com.fasterxml.jackson.databind.JsonNode; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; @@ -53,7 +52,7 @@ public class ChangeDetectionDto { public static class CogUrlDto { private String beforeCogUrl; private String afterCogUrl; - private JsonNode bbox; + private Geometry bbox; } @Schema(name = "AnalYearList", description = "년도(차수) 목록") diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/ChangeDetectionCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/ChangeDetectionCoreService.java index adc3fb27..56290b7a 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/ChangeDetectionCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/ChangeDetectionCoreService.java @@ -56,16 +56,6 @@ public class ChangeDetectionCoreService { } public ChangeDetectionDto.CogUrlDto getChangeDetectionCogUrl(ChangeDetectionDto.CogUrlReq req) { - ObjectMapper mapper = new ObjectMapper(); - ChangeDetectionDto.CogUrlDto resultDto = - changeDetectionRepository.getChangeDetectionCogUrl(req); - - try { - JsonNode geomNode = mapper.readTree(resultDto.getBbox().toString()); - resultDto.setBbox(geomNode); - } catch (Exception e) { - throw new RuntimeException("Failed to parse geom JSON", e); - } return changeDetectionRepository.getChangeDetectionCogUrl(req); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryImpl.java index 6b40b85e..ce53dfe7 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryImpl.java @@ -7,19 +7,14 @@ import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataGeomEntity import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalEntity.mapSheetAnalEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalSttcEntity.mapSheetAnalSttcEntity; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto; import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataGeomEntity; -import com.querydsl.core.Tuple; import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.CaseBuilder; import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.StringExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import java.util.List; -import java.util.Objects; import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport; public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport @@ -68,31 +63,24 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport @Override public ChangeDetectionDto.CogUrlDto getChangeDetectionCogUrl(ChangeDetectionDto.CogUrlReq req) { - Tuple result = - queryFactory - .select( + return queryFactory + .select( + Projections.constructor( + ChangeDetectionDto.CogUrlDto.class, makeCogUrl(req.getBeforeYear()).max().as("beforeCogUrl"), makeCogUrl(req.getAfterYear()).max().as("afterCogUrl"), - Expressions.stringTemplate("ST_AsGeoJSON({0})", mapInkx5kEntity.geom).as("bbox")) - .from(imageryEntity) - .innerJoin(mapInkx5kEntity) - .on(imageryEntity.scene5k.eq(mapInkx5kEntity.mapidcdNo)) - .where( - imageryEntity - .year - .eq(req.getBeforeYear()) - .or(imageryEntity.year.eq(req.getAfterYear())), - imageryEntity.scene5k.eq(req.getMapSheetNum())) - .groupBy(mapInkx5kEntity.geom) - .fetchOne(); - - // Polygon -> JsonNode 로 변환 - JsonNode geometryJson = - changeGeometryJson( - String.valueOf(Objects.requireNonNull(result).get(2, StringExpression.class))); - - return new ChangeDetectionDto.CogUrlDto( - result.get(0, String.class), result.get(1, String.class), geometryJson); + mapInkx5kEntity.geom.as("bbox"))) + .from(imageryEntity) + .innerJoin(mapInkx5kEntity) + .on(imageryEntity.scene5k.eq(mapInkx5kEntity.mapidcdNo)) + .where( + imageryEntity + .year + .eq(req.getBeforeYear()) + .or(imageryEntity.year.eq(req.getAfterYear())), + imageryEntity.scene5k.eq(req.getMapSheetNum())) + .groupBy(mapInkx5kEntity.geom) + .fetchOne(); } @Override @@ -119,13 +107,4 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport "{0} || {1}", imageryEntity.cogMiddlePath, imageryEntity.cogFilename)) .otherwise(""); } - - private JsonNode changeGeometryJson(String geometry) { - ObjectMapper mapper = new ObjectMapper(); - try { - return mapper.readTree(geometry); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } - } }