Merge pull request 'pnu 로 polygon, point 조회 API 수정' (#129) from feat/infer_dev_260211 into develop
Reviewed-on: #129
This commit was merged in pull request #129.
This commit is contained in:
@@ -117,16 +117,18 @@ public class ChangeDetectionApiController {
|
|||||||
@Parameter(description = "도곽/일반(MAPSHEET/ADDRESS) 검색 타입", required = true)
|
@Parameter(description = "도곽/일반(MAPSHEET/ADDRESS) 검색 타입", required = true)
|
||||||
@RequestParam(defaultValue = "MAPSHEET")
|
@RequestParam(defaultValue = "MAPSHEET")
|
||||||
DetectSearchType type,
|
DetectSearchType type,
|
||||||
@Parameter(description = "5k/50k 구분(SCALE_5K/SCALE_50K))", required = true)
|
@Parameter(description = "5k/50k 구분(SCALE_5K/SCALE_50K))")
|
||||||
@RequestParam(defaultValue = "SCALE_50K")
|
@RequestParam(defaultValue = "SCALE_50K", required = false)
|
||||||
MapScaleType scale,
|
MapScaleType scale,
|
||||||
@Parameter(
|
@Parameter(
|
||||||
description = "변화탐지 년도(차수) /year-list 의 uuid",
|
description = "변화탐지 년도(차수) /year-list 의 uuid",
|
||||||
example = "8584e8d4-53b3-4582-bde2-28a81495a626")
|
example = "8584e8d4-53b3-4582-bde2-28a81495a626")
|
||||||
UUID uuid,
|
UUID uuid,
|
||||||
@Parameter(description = "도엽번호", example = "34607") @RequestParam String mapSheetNum) {
|
@Parameter(description = "도엽번호", example = "34607") @RequestParam(required = false)
|
||||||
|
String mapSheetNum,
|
||||||
|
@Parameter(description = "pnu") @RequestParam(required = false) String pnu) {
|
||||||
return ApiResponseDto.ok(
|
return ApiResponseDto.ok(
|
||||||
changeDetectionService.getChangeDetectionPolygonList(type, scale, uuid, mapSheetNum));
|
changeDetectionService.getChangeDetectionPolygonList(type, scale, uuid, mapSheetNum, pnu));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "변화탐지 결과 Point", description = "변화탐지 결과 Point")
|
@Operation(summary = "변화탐지 결과 Point", description = "변화탐지 결과 Point")
|
||||||
@@ -135,16 +137,18 @@ public class ChangeDetectionApiController {
|
|||||||
@Parameter(description = "도곽/일반(MAPSHEET/ADDRESS) 검색 타입", required = true)
|
@Parameter(description = "도곽/일반(MAPSHEET/ADDRESS) 검색 타입", required = true)
|
||||||
@RequestParam(defaultValue = "MAPSHEET")
|
@RequestParam(defaultValue = "MAPSHEET")
|
||||||
DetectSearchType type,
|
DetectSearchType type,
|
||||||
@Parameter(description = "5k/50k 구분(SCALE_5K/SCALE_50K))", required = true)
|
@Parameter(description = "5k/50k 구분(SCALE_5K/SCALE_50K))")
|
||||||
@RequestParam(defaultValue = "SCALE_50K")
|
@RequestParam(defaultValue = "SCALE_50K", required = false)
|
||||||
MapScaleType scale,
|
MapScaleType scale,
|
||||||
@Parameter(
|
@Parameter(
|
||||||
description = "변화탐지 년도(차수) /year-list 의 uuid",
|
description = "변화탐지 년도(차수) /year-list 의 uuid",
|
||||||
example = "8584e8d4-53b3-4582-bde2-28a81495a626")
|
example = "8584e8d4-53b3-4582-bde2-28a81495a626")
|
||||||
UUID uuid,
|
UUID uuid,
|
||||||
@Parameter(description = "도엽번호", example = "34607") @RequestParam String mapSheetNum) {
|
@Parameter(description = "도엽번호", example = "34607") @RequestParam(required = false)
|
||||||
|
String mapSheetNum,
|
||||||
|
@Parameter(description = "pnu") @RequestParam(required = false) String pnu) {
|
||||||
return ApiResponseDto.ok(
|
return ApiResponseDto.ok(
|
||||||
changeDetectionService.getChangeDetectionPointList(type, scale, uuid, mapSheetNum));
|
changeDetectionService.getChangeDetectionPointList(type, scale, uuid, mapSheetNum, pnu));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "선택 변화탐지 결과 uuid 조회", description = "선택 변화탐지 결과 uuid 조회")
|
@Operation(summary = "선택 변화탐지 결과 uuid 조회", description = "선택 변화탐지 결과 uuid 조회")
|
||||||
|
|||||||
@@ -46,13 +46,13 @@ public class ChangeDetectionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ChangeDetectionDto.PolygonFeatureList getChangeDetectionPolygonList(
|
public ChangeDetectionDto.PolygonFeatureList getChangeDetectionPolygonList(
|
||||||
DetectSearchType type, MapScaleType scale, UUID uuid, String mapSheetNum) {
|
DetectSearchType type, MapScaleType scale, UUID uuid, String mapSheetNum, String pnu) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case MAPSHEET -> {
|
case MAPSHEET -> {
|
||||||
return changeDetectionCoreService.getChangeDetectionPolygonList(scale, uuid, mapSheetNum);
|
return changeDetectionCoreService.getChangeDetectionPolygonList(scale, uuid, mapSheetNum);
|
||||||
}
|
}
|
||||||
case ADDRESS -> {
|
case ADDRESS -> {
|
||||||
return new ChangeDetectionDto.PolygonFeatureList(); // TODO: 일반 주소 검색 로직 확인 후 작업 필요
|
return changeDetectionCoreService.getChangeDetectionPnuPolygonList(uuid, pnu);
|
||||||
}
|
}
|
||||||
default -> throw new IllegalArgumentException("Unsupported type: " + type);
|
default -> throw new IllegalArgumentException("Unsupported type: " + type);
|
||||||
}
|
}
|
||||||
@@ -60,14 +60,14 @@ public class ChangeDetectionService {
|
|||||||
|
|
||||||
// Geometry 객체 순환 참조 문제로 캐싱 불가
|
// Geometry 객체 순환 참조 문제로 캐싱 불가
|
||||||
public ChangeDetectionDto.PointFeatureList getChangeDetectionPointList(
|
public ChangeDetectionDto.PointFeatureList getChangeDetectionPointList(
|
||||||
DetectSearchType type, MapScaleType scale, UUID uuid, String mapSheetNum) {
|
DetectSearchType type, MapScaleType scale, UUID uuid, String mapSheetNum, String pnu) {
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case MAPSHEET -> {
|
case MAPSHEET -> {
|
||||||
return changeDetectionCoreService.getChangeDetectionPointList(scale, uuid, mapSheetNum);
|
return changeDetectionCoreService.getChangeDetectionPointList(scale, uuid, mapSheetNum);
|
||||||
}
|
}
|
||||||
case ADDRESS -> {
|
case ADDRESS -> {
|
||||||
return new ChangeDetectionDto.PointFeatureList(); // TODO: 일반 주소 검색 로직 확인 후 작업 필요
|
return changeDetectionCoreService.getChangeDetectionPnuPointList(uuid, pnu);
|
||||||
}
|
}
|
||||||
default -> throw new IllegalArgumentException("Unsupported type: " + type);
|
default -> throw new IllegalArgumentException("Unsupported type: " + type);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
|||||||
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto;
|
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto;
|
||||||
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapScaleType;
|
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapScaleType;
|
||||||
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapSheetList;
|
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapSheetList;
|
||||||
|
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.PointFeatureList;
|
||||||
|
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.PolygonFeatureList;
|
||||||
import com.kamco.cd.kamcoback.common.enums.DetectionClassification;
|
import com.kamco.cd.kamcoback.common.enums.DetectionClassification;
|
||||||
import com.kamco.cd.kamcoback.common.exception.CustomApiException;
|
import com.kamco.cd.kamcoback.common.exception.CustomApiException;
|
||||||
import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataInferenceGeomEntity;
|
import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataInferenceGeomEntity;
|
||||||
@@ -136,4 +138,12 @@ public class ChangeDetectionCoreService {
|
|||||||
.getLearnUuid(chnDtctId)
|
.getLearnUuid(chnDtctId)
|
||||||
.orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND));
|
.orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PolygonFeatureList getChangeDetectionPnuPolygonList(UUID uuid, String pnu) {
|
||||||
|
return changeDetectionRepository.getChangeDetectionPnuPolygonList(uuid, pnu);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PointFeatureList getChangeDetectionPnuPointList(UUID uuid, String pnu) {
|
||||||
|
return changeDetectionRepository.getChangeDetectionPnuPointList(uuid, pnu);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package com.kamco.cd.kamcoback.postgres.repository.changedetection;
|
|||||||
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto;
|
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto;
|
||||||
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapScaleType;
|
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapScaleType;
|
||||||
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapSheetList;
|
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapSheetList;
|
||||||
|
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.PointFeatureList;
|
||||||
|
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.PolygonFeatureList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@@ -43,4 +45,8 @@ public interface ChangeDetectionRepositoryCustom {
|
|||||||
String chnDtctId, String pnu);
|
String chnDtctId, String pnu);
|
||||||
|
|
||||||
Optional<UUID> getLearnUuid(String chnDtctId);
|
Optional<UUID> getLearnUuid(String chnDtctId);
|
||||||
|
|
||||||
|
PolygonFeatureList getChangeDetectionPnuPolygonList(UUID uuid, String pnu);
|
||||||
|
|
||||||
|
PointFeatureList getChangeDetectionPnuPointList(UUID uuid, String pnu);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -700,4 +700,120 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport
|
|||||||
.where(mapSheetLearnEntity.uid.eq(chnDtctId))
|
.where(mapSheetLearnEntity.uid.eq(chnDtctId))
|
||||||
.fetchOne());
|
.fetchOne());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PolygonFeatureList getChangeDetectionPnuPolygonList(UUID uuid, String pnu) {
|
||||||
|
List<ChangeDetectionDto.PolygonQueryData> list =
|
||||||
|
queryFactory
|
||||||
|
.select(
|
||||||
|
Projections.constructor(
|
||||||
|
ChangeDetectionDto.PolygonQueryData.class,
|
||||||
|
Expressions.stringTemplate("{0}", "Feature"),
|
||||||
|
Expressions.stringTemplate(
|
||||||
|
"ST_AsGeoJSON({0})", mapSheetAnalDataInferenceGeomEntity.geom),
|
||||||
|
mapSheetAnalDataInferenceGeomEntity.geoUid,
|
||||||
|
mapSheetAnalDataInferenceGeomEntity.area,
|
||||||
|
mapSheetAnalDataInferenceGeomEntity.compareYyyy,
|
||||||
|
mapSheetAnalDataInferenceGeomEntity.classBeforeProb,
|
||||||
|
mapSheetAnalDataInferenceGeomEntity.classBeforeCd.toUpperCase(),
|
||||||
|
mapSheetAnalDataInferenceGeomEntity.targetYyyy,
|
||||||
|
mapSheetAnalDataInferenceGeomEntity.classAfterProb,
|
||||||
|
mapSheetAnalDataInferenceGeomEntity.classAfterCd.toUpperCase(),
|
||||||
|
mapSheetAnalDataInferenceGeomEntity.cdProb,
|
||||||
|
mapSheetAnalDataInferenceGeomEntity.uuid,
|
||||||
|
mapSheetAnalDataInferenceGeomEntity.resultUid))
|
||||||
|
.from(mapSheetAnalDataInferenceGeomEntity)
|
||||||
|
.innerJoin(mapSheetAnalDataInferenceEntity)
|
||||||
|
.on(mapSheetAnalDataInferenceGeomEntity.dataUid.eq(mapSheetAnalDataInferenceEntity.id))
|
||||||
|
.innerJoin(mapSheetAnalInferenceEntity)
|
||||||
|
.on(mapSheetAnalInferenceEntity.id.eq(mapSheetAnalDataInferenceEntity.analUid))
|
||||||
|
.innerJoin(pnuEntity)
|
||||||
|
.on(mapSheetAnalDataInferenceGeomEntity.geoUid.eq(pnuEntity.geo.geoUid))
|
||||||
|
.where(mapSheetAnalInferenceEntity.uuid.eq(uuid), pnuEntity.pnu.eq(pnu))
|
||||||
|
.orderBy(mapSheetAnalDataInferenceGeomEntity.mapSheetNum.asc())
|
||||||
|
.fetch();
|
||||||
|
|
||||||
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
|
List<ChangeDetectionDto.PolygonFeature> result =
|
||||||
|
list.stream()
|
||||||
|
.map(
|
||||||
|
data -> {
|
||||||
|
String geoJson = data.getGeometry();
|
||||||
|
JsonNode jsonNode;
|
||||||
|
try {
|
||||||
|
jsonNode = mapper.readTree(geoJson);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
ChangeDetectionDto.PolygonProperties properties =
|
||||||
|
new ChangeDetectionDto.PolygonProperties(
|
||||||
|
data.getGeoUid(),
|
||||||
|
data.getArea(),
|
||||||
|
data.getBeforeYear(),
|
||||||
|
data.getBeforeConfidence(),
|
||||||
|
data.getBeforeClass(),
|
||||||
|
data.getAfterYear(),
|
||||||
|
data.getAfterConfidence(),
|
||||||
|
data.getAfterClass(),
|
||||||
|
data.getCdProb(),
|
||||||
|
data.getUuid(),
|
||||||
|
data.getResultUid());
|
||||||
|
|
||||||
|
return new ChangeDetectionDto.PolygonFeature(
|
||||||
|
data.getType(), jsonNode, properties);
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
ChangeDetectionDto.PolygonFeatureList polygonList = new ChangeDetectionDto.PolygonFeatureList();
|
||||||
|
polygonList.setType("FeatureCollection");
|
||||||
|
polygonList.setFeatures(result);
|
||||||
|
return polygonList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PointFeatureList getChangeDetectionPnuPointList(UUID uuid, String pnu) {
|
||||||
|
List<ChangeDetectionDto.PointQueryData> list =
|
||||||
|
queryFactory
|
||||||
|
.select(
|
||||||
|
Projections.constructor(
|
||||||
|
ChangeDetectionDto.PointQueryData.class,
|
||||||
|
Expressions.stringTemplate("{0}", "Feature"),
|
||||||
|
Expressions.stringTemplate(
|
||||||
|
"ST_AsGeoJSON({0})",
|
||||||
|
mapSheetAnalDataInferenceGeomEntity.geomCenter), // point
|
||||||
|
Projections.constructor(
|
||||||
|
ChangeDetectionDto.PointProperties.class,
|
||||||
|
mapSheetAnalDataInferenceGeomEntity.geoUid,
|
||||||
|
mapSheetAnalDataInferenceGeomEntity.classAfterCd.toUpperCase())))
|
||||||
|
.from(mapSheetAnalDataInferenceGeomEntity)
|
||||||
|
.innerJoin(mapSheetAnalDataInferenceEntity)
|
||||||
|
.on(mapSheetAnalDataInferenceGeomEntity.dataUid.eq(mapSheetAnalDataInferenceEntity.id))
|
||||||
|
.innerJoin(mapSheetAnalInferenceEntity)
|
||||||
|
.on(mapSheetAnalInferenceEntity.id.eq(mapSheetAnalDataInferenceEntity.analUid))
|
||||||
|
.innerJoin(pnuEntity)
|
||||||
|
.on(mapSheetAnalDataInferenceGeomEntity.geoUid.eq(pnuEntity.geo.geoUid))
|
||||||
|
.where(mapSheetAnalInferenceEntity.uuid.eq(uuid), pnuEntity.pnu.eq(pnu))
|
||||||
|
.fetch();
|
||||||
|
|
||||||
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
|
List<ChangeDetectionDto.PointFeature> result =
|
||||||
|
list.stream()
|
||||||
|
.map(
|
||||||
|
data -> {
|
||||||
|
String geoJson = data.getGeometry();
|
||||||
|
JsonNode jsonNode;
|
||||||
|
try {
|
||||||
|
jsonNode = mapper.readTree(geoJson);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ChangeDetectionDto.PointFeature(
|
||||||
|
data.getType(), jsonNode, data.getProperties());
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
return new ChangeDetectionDto.PointFeatureList("FeatureCollection", result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user