Merge pull request '변화탐지 point, cogUrl API 수정' (#42) from feat/dev_251201 into develop
Reviewed-on: https://kamco.gitea.gs.dabeeo.com/dabeeo/kamco-dabeeo-backoffice/pulls/42
This commit is contained in:
@@ -57,7 +57,19 @@ public class ChangeDetectionDto {
|
|||||||
|
|
||||||
private String beforeCogUrl;
|
private String beforeCogUrl;
|
||||||
private String afterCogUrl;
|
private String afterCogUrl;
|
||||||
private Geometry bbox;
|
private JsonNode bbox;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Schema(name = "CogUrlDto", description = "COG Url 정보")
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public static class CogUrlData {
|
||||||
|
|
||||||
|
private String beforeCogUrl;
|
||||||
|
private String afterCogUrl;
|
||||||
|
private String bbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Schema(name = "AnalYearList", description = "년도(차수) 목록")
|
@Schema(name = "AnalYearList", description = "년도(차수) 목록")
|
||||||
@@ -140,6 +152,18 @@ public class ChangeDetectionDto {
|
|||||||
private Double cdProb; // 탐지정확도
|
private Double cdProb; // 탐지정확도
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Schema(name = "PointFeature", description = "Geometry 리턴 객체")
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public static class PointQueryData {
|
||||||
|
|
||||||
|
private String type;
|
||||||
|
private String geometry; // point
|
||||||
|
private PointProperties properties; // Point 정보
|
||||||
|
}
|
||||||
|
|
||||||
@Schema(name = "PointFeature", description = "Geometry 리턴 객체")
|
@Schema(name = "PointFeature", description = "Geometry 리턴 객체")
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
@@ -148,7 +172,7 @@ public class ChangeDetectionDto {
|
|||||||
public static class PointFeature {
|
public static class PointFeature {
|
||||||
|
|
||||||
private String type;
|
private String type;
|
||||||
private Geometry geometry; // point
|
private JsonNode geometry; // point
|
||||||
private PointProperties properties; // Point 정보
|
private PointProperties properties; // Point 정보
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import com.querydsl.core.types.dsl.Expressions;
|
|||||||
import com.querydsl.core.types.dsl.StringExpression;
|
import com.querydsl.core.types.dsl.StringExpression;
|
||||||
import com.querydsl.jpa.impl.JPAQueryFactory;
|
import com.querydsl.jpa.impl.JPAQueryFactory;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport;
|
import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport;
|
||||||
|
|
||||||
@@ -71,24 +72,38 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ChangeDetectionDto.CogUrlDto getChangeDetectionCogUrl(ChangeDetectionDto.CogUrlReq req) {
|
public ChangeDetectionDto.CogUrlDto getChangeDetectionCogUrl(ChangeDetectionDto.CogUrlReq req) {
|
||||||
return queryFactory
|
ChangeDetectionDto.CogUrlData data =
|
||||||
.select(
|
queryFactory
|
||||||
Projections.constructor(
|
.select(
|
||||||
ChangeDetectionDto.CogUrlDto.class,
|
Projections.constructor(
|
||||||
makeCogUrl(req.getBeforeYear()).max().as("beforeCogUrl"),
|
ChangeDetectionDto.CogUrlData.class,
|
||||||
makeCogUrl(req.getAfterYear()).max().as("afterCogUrl"),
|
makeCogUrl(req.getBeforeYear()).max().as("beforeCogUrl"),
|
||||||
mapInkx5kEntity.geom.as("bbox")))
|
makeCogUrl(req.getAfterYear()).max().as("afterCogUrl"),
|
||||||
.from(imageryEntity)
|
Expressions.stringTemplate("ST_AsGeoJSON({0})", mapInkx5kEntity.geom)
|
||||||
.innerJoin(mapInkx5kEntity)
|
.as("bbox")))
|
||||||
.on(imageryEntity.scene5k.eq(mapInkx5kEntity.mapidcdNo))
|
.from(imageryEntity)
|
||||||
.where(
|
.innerJoin(mapInkx5kEntity)
|
||||||
imageryEntity
|
.on(imageryEntity.scene5k.eq(mapInkx5kEntity.mapidcdNo))
|
||||||
.year
|
.where(
|
||||||
.eq(req.getBeforeYear())
|
imageryEntity
|
||||||
.or(imageryEntity.year.eq(req.getAfterYear())),
|
.year
|
||||||
imageryEntity.scene5k.eq(req.getMapSheetNum()))
|
.eq(req.getBeforeYear())
|
||||||
.groupBy(mapInkx5kEntity.geom)
|
.or(imageryEntity.year.eq(req.getAfterYear())),
|
||||||
.fetchOne();
|
imageryEntity.scene5k.eq(req.getMapSheetNum()))
|
||||||
|
.groupBy(mapInkx5kEntity.geom)
|
||||||
|
.fetchOne();
|
||||||
|
|
||||||
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
|
String geoJson = Objects.requireNonNull(data).getBbox();
|
||||||
|
JsonNode jsonNode;
|
||||||
|
try {
|
||||||
|
jsonNode = mapper.readTree(geoJson);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ChangeDetectionDto.CogUrlDto(
|
||||||
|
data.getBeforeCogUrl(), data.getAfterCogUrl(), jsonNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -177,13 +192,14 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport
|
|||||||
@Override
|
@Override
|
||||||
public ChangeDetectionDto.PointFeatureList getChangeDetectionPointList(
|
public ChangeDetectionDto.PointFeatureList getChangeDetectionPointList(
|
||||||
Long analUid, String mapSheetNum) {
|
Long analUid, String mapSheetNum) {
|
||||||
List<ChangeDetectionDto.PointFeature> list =
|
List<ChangeDetectionDto.PointQueryData> list =
|
||||||
queryFactory
|
queryFactory
|
||||||
.select(
|
.select(
|
||||||
Projections.constructor(
|
Projections.constructor(
|
||||||
ChangeDetectionDto.PointFeature.class,
|
ChangeDetectionDto.PointQueryData.class,
|
||||||
Expressions.stringTemplate("{0}", "Feature"),
|
Expressions.stringTemplate("{0}", "Feature"),
|
||||||
mapSheetAnalDataGeomEntity.geomCenter, // point
|
Expressions.stringTemplate(
|
||||||
|
"ST_AsGeoJSON({0})", mapSheetAnalDataGeomEntity.geomCenter), // point
|
||||||
Projections.constructor(
|
Projections.constructor(
|
||||||
ChangeDetectionDto.PointProperties.class,
|
ChangeDetectionDto.PointProperties.class,
|
||||||
mapSheetAnalDataGeomEntity.id,
|
mapSheetAnalDataGeomEntity.id,
|
||||||
@@ -198,7 +214,25 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport
|
|||||||
mapSheetAnalDataGeomEntity.mapSheetNum.eq(Long.valueOf(mapSheetNum)))
|
mapSheetAnalDataGeomEntity.mapSheetNum.eq(Long.valueOf(mapSheetNum)))
|
||||||
.fetch();
|
.fetch();
|
||||||
|
|
||||||
return new ChangeDetectionDto.PointFeatureList("FeatureCollection", list);
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user