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 e66e64c9..8cd49509 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 @@ -10,9 +10,6 @@ import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalSttcEntity.map import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto; import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataGeomEntity; -import com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataEntity; -import com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataGeomEntity; -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; @@ -20,9 +17,6 @@ import com.querydsl.core.types.dsl.StringExpression; import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.impl.JPAQueryFactory; import java.util.List; -import java.util.stream.Collectors; -import org.locationtech.jts.geom.Geometry; -import org.locationtech.jts.io.geojson.GeoJsonReader; import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport; public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport @@ -114,79 +108,23 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport public ChangeDetectionDto.PolygonFeatureList getChangeDetectionPolygonList( Long analUid, String mapSheetNum) { - List list = - queryFactory - .select( - Expressions.stringTemplate( - "ST_AsGeoJSON(ST_Transform({0}, 4326))", mapSheetAnalDataGeomEntity.geom), - mapSheetAnalDataGeomEntity.id, - mapSheetAnalDataGeomEntity.area, - mapSheetAnalDataGeomEntity.compareYyyy, - mapSheetAnalDataGeomEntity.classBeforeProb, - mapSheetAnalDataGeomEntity.classBeforeCd.toUpperCase(), - mapSheetAnalDataGeomEntity.targetYyyy, - mapSheetAnalDataGeomEntity.classAfterProb, - mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase()) - .from(QMapSheetAnalDataGeomEntity.mapSheetAnalDataGeomEntity) - .where( - QMapSheetAnalDataGeomEntity.mapSheetAnalDataGeomEntity.dataUid.in( - JPAExpressions.select(QMapSheetAnalDataEntity.mapSheetAnalDataEntity.id) - .from(QMapSheetAnalDataEntity.mapSheetAnalDataEntity) - .where(QMapSheetAnalDataEntity.mapSheetAnalDataEntity.analUid.eq(analUid))), - QMapSheetAnalDataGeomEntity.mapSheetAnalDataGeomEntity.mapSheetNum.eq( - Long.valueOf(mapSheetNum))) - .fetch(); - - GeoJsonReader reader = new GeoJsonReader(); - List result = - list.stream() - .map( - tuple -> { - String geojson = tuple.get(0, String.class); - Geometry geom; - try { - geom = reader.read(geojson); - } catch (Exception ex) { - throw new RuntimeException("GeoJSON -> Geometry 변환 실패", ex); - } - ChangeDetectionDto.PolygonProperties properties = - new ChangeDetectionDto.PolygonProperties( - tuple.get(mapSheetAnalDataGeomEntity.id).longValue(), - tuple.get(mapSheetAnalDataGeomEntity.area).doubleValue(), - tuple.get(mapSheetAnalDataGeomEntity.compareYyyy).intValue(), - tuple.get(mapSheetAnalDataGeomEntity.classBeforeProb).doubleValue(), - tuple - .get(mapSheetAnalDataGeomEntity.classBeforeCd.toUpperCase()) - .toString(), - tuple.get(mapSheetAnalDataGeomEntity.targetYyyy).intValue(), - tuple.get(mapSheetAnalDataGeomEntity.classAfterProb).doubleValue(), - tuple - .get(mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase()) - .toString()); - return new ChangeDetectionDto.PolygonFeature("Feature", geom, properties); - }) - .collect(Collectors.toList()); - - ChangeDetectionDto.PolygonFeatureList polygonList = new ChangeDetectionDto.PolygonFeatureList(); - polygonList.setType("FeatureCollection"); - polygonList.setFeatures(result); - - list.clear(); // List 사용 참조 해제 - - return polygonList; - } - - @Override - public List getChangeDetectionPointList( - Long analUid, String mapSheetNum) { - List list = queryFactory .select( - Expressions.stringTemplate( - "ST_AsGeoJSON(ST_Transform({0}, 4326))", mapSheetAnalDataGeomEntity.geomCenter), - mapSheetAnalDataGeomEntity.id, - mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase()) + Projections.constructor( + ChangeDetectionDto.PolygonFeature.class, + Expressions.stringTemplate("{0}", "Feature"), + mapSheetAnalDataGeomEntity.geom, // polygon + Projections.constructor( + ChangeDetectionDto.PolygonProperties.class, + mapSheetAnalDataGeomEntity.id, + mapSheetAnalDataGeomEntity.area, + mapSheetAnalDataGeomEntity.compareYyyy, + mapSheetAnalDataGeomEntity.classBeforeProb, + mapSheetAnalDataGeomEntity.classBeforeCd.toUpperCase(), + mapSheetAnalDataGeomEntity.targetYyyy, + mapSheetAnalDataGeomEntity.classAfterProb, + mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase()))) .from(mapSheetAnalDataGeomEntity) .where( mapSheetAnalDataGeomEntity.dataUid.in( @@ -196,31 +134,136 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport mapSheetAnalDataGeomEntity.mapSheetNum.eq(Long.valueOf(mapSheetNum))) .fetch(); - GeoJsonReader reader = new GeoJsonReader(); - List result = - list.stream() - .map( - tuple -> { - String geojson = tuple.get(0, String.class); - Geometry geom; - try { - geom = reader.read(geojson); - } catch (Exception ex) { - throw new RuntimeException("GeoJSON -> Geometry 변환 실패", ex); - } + // List list = + // queryFactory + // .select( + // Expressions.stringTemplate( + // "ST_AsGeoJSON(ST_Transform({0}, 4326))", mapSheetAnalDataGeomEntity.geom), + // mapSheetAnalDataGeomEntity.id, + // mapSheetAnalDataGeomEntity.area, + // mapSheetAnalDataGeomEntity.compareYyyy, + // mapSheetAnalDataGeomEntity.classBeforeProb, + // mapSheetAnalDataGeomEntity.classBeforeCd.toUpperCase(), + // mapSheetAnalDataGeomEntity.targetYyyy, + // mapSheetAnalDataGeomEntity.classAfterProb, + // mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase()) + // .from(QMapSheetAnalDataGeomEntity.mapSheetAnalDataGeomEntity) + // .where( + // QMapSheetAnalDataGeomEntity.mapSheetAnalDataGeomEntity.dataUid.in( + // JPAExpressions.select(QMapSheetAnalDataEntity.mapSheetAnalDataEntity.id) + // .from(QMapSheetAnalDataEntity.mapSheetAnalDataEntity) + // + // .where(QMapSheetAnalDataEntity.mapSheetAnalDataEntity.analUid.eq(analUid))), + // QMapSheetAnalDataGeomEntity.mapSheetAnalDataGeomEntity.mapSheetNum.eq( + // Long.valueOf(mapSheetNum))) + // .fetch(); + // + // GeoJsonReader reader = new GeoJsonReader(); + // + // List result = + // list.stream() + // .map( + // tuple -> { + // String geojson = tuple.get(0, String.class); + // Geometry geom; + // try { + // geom = reader.read(geojson); + // } catch (Exception ex) { + // throw new RuntimeException("GeoJSON -> Geometry 변환 실패", ex); + // } + // ChangeDetectionDto.PolygonProperties properties = + // new ChangeDetectionDto.PolygonProperties( + // tuple.get(mapSheetAnalDataGeomEntity.id).longValue(), + // tuple.get(mapSheetAnalDataGeomEntity.area).doubleValue(), + // tuple.get(mapSheetAnalDataGeomEntity.compareYyyy).intValue(), + // tuple.get(mapSheetAnalDataGeomEntity.classBeforeProb).doubleValue(), + // tuple + // .get(mapSheetAnalDataGeomEntity.classBeforeCd.toUpperCase()) + // .toString(), + // tuple.get(mapSheetAnalDataGeomEntity.targetYyyy).intValue(), + // tuple.get(mapSheetAnalDataGeomEntity.classAfterProb).doubleValue(), + // tuple + // .get(mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase()) + // .toString()); + // return new ChangeDetectionDto.PolygonFeature("Feature", geom, properties); + // }) + // .collect(Collectors.toList()); - Long geoUid = tuple.get(mapSheetAnalDataGeomEntity.id).longValue(); - String classCd = - tuple.get(mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase()).toString(); + ChangeDetectionDto.PolygonFeatureList polygonList = new ChangeDetectionDto.PolygonFeatureList(); + polygonList.setType("FeatureCollection"); + polygonList.setFeatures(result); - return new ChangeDetectionDto.PointFeature( - "Feature", geom, new ChangeDetectionDto.PointProperties(geoUid, classCd)); - }) - .collect(Collectors.toList()); + // list.clear(); // List 사용 참조 해제 - list.clear(); // List 사용 참조 해제 + return polygonList; + } - return result; + @Override + public List getChangeDetectionPointList( + Long analUid, String mapSheetNum) { + return queryFactory + .select( + Projections.constructor( + ChangeDetectionDto.PointFeature.class, + Expressions.stringTemplate("{0}", "Feature"), + mapSheetAnalDataGeomEntity.geomCenter, // point + Projections.constructor( + ChangeDetectionDto.PointProperties.class, + mapSheetAnalDataGeomEntity.id, + mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase()))) + .from(mapSheetAnalDataGeomEntity) + .where( + mapSheetAnalDataGeomEntity.dataUid.in( + JPAExpressions.select(mapSheetAnalDataEntity.id) + .from(mapSheetAnalDataEntity) + .where(mapSheetAnalDataEntity.analUid.eq(analUid))), + mapSheetAnalDataGeomEntity.mapSheetNum.eq(Long.valueOf(mapSheetNum))) + .fetch(); + + // List list = + // queryFactory + // .select( + // Expressions.stringTemplate( + // "ST_AsGeoJSON(ST_Transform({0}, 4326))", + // mapSheetAnalDataGeomEntity.geomCenter), + // mapSheetAnalDataGeomEntity.id, + // mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase()) + // .from(mapSheetAnalDataGeomEntity) + // .where( + // mapSheetAnalDataGeomEntity.dataUid.in( + // JPAExpressions.select(mapSheetAnalDataEntity.id) + // .from(mapSheetAnalDataEntity) + // .where(mapSheetAnalDataEntity.analUid.eq(analUid))), + // mapSheetAnalDataGeomEntity.mapSheetNum.eq(Long.valueOf(mapSheetNum))) + // .fetch(); + // + // GeoJsonReader reader = new GeoJsonReader(); + // List result = + // list.stream() + // .map( + // tuple -> { + // String geojson = tuple.get(0, String.class); + // Geometry geom; + // try { + // geom = reader.read(geojson); + // } catch (Exception ex) { + // throw new RuntimeException("GeoJSON -> Geometry 변환 실패", ex); + // } + // + // Long geoUid = tuple.get(mapSheetAnalDataGeomEntity.id).longValue(); + // String classCd = + // + // tuple.get(mapSheetAnalDataGeomEntity.classAfterCd.toUpperCase()).toString(); + // + // return new ChangeDetectionDto.PointFeature( + // "Feature", geom, new ChangeDetectionDto.PointProperties(geoUid, + // classCd)); + // }) + // .collect(Collectors.toList()); + // + // list.clear(); // List 사용 참조 해제 + // + // return result; } @Override