From 2559b225d59a21ef81491a9362aab34379549fa8 Mon Sep 17 00:00:00 2001 From: teddy Date: Fri, 30 Jan 2026 21:09:35 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=96=B4=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/kamco/cd/kamcoback/common/enums/CrsType.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/common/enums/CrsType.java b/src/main/java/com/kamco/cd/kamcoback/common/enums/CrsType.java index 1589f875..42fffdfc 100644 --- a/src/main/java/com/kamco/cd/kamcoback/common/enums/CrsType.java +++ b/src/main/java/com/kamco/cd/kamcoback/common/enums/CrsType.java @@ -9,9 +9,9 @@ import lombok.Getter; @Getter @AllArgsConstructor public enum CrsType implements EnumType { - EPSG_3857("korea 2000, 미터단위"), - EPSG_4326("geojson, osm기본"), - EPSG_5186("google, EPSG:900913동일"); + EPSG_3857("Web Mercator, 웹지도 미터(EPSG:900913 동일)"), + EPSG_4326("WGS84 위경도, GeoJSON/OSM 기본"), + EPSG_5186("Korea 2000 중부 TM, 한국 SHP"); private final String desc; From b77de057f0c471fd035a5c7f1c1ceb80aa9a6371 Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Fri, 30 Jan 2026 21:26:52 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=EC=98=81=EC=83=81=EA=B4=80=EB=A6=AC=20?= =?UTF-8?q?=EB=85=84=EB=8F=84=EB=B3=84=20=ED=83=80=EC=9D=BC=20crs=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cd/kamcoback/layer/dto/LayerDto.java | 24 ++++++++---- .../layer/MapLayerRepositoryImpl.java | 39 ++++++++++++++----- 2 files changed, 47 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/layer/dto/LayerDto.java b/src/main/java/com/kamco/cd/kamcoback/layer/dto/LayerDto.java index bcba1204..52a849e2 100644 --- a/src/main/java/com/kamco/cd/kamcoback/layer/dto/LayerDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/layer/dto/LayerDto.java @@ -17,6 +17,11 @@ import lombok.Setter; public class LayerDto { + public enum MapType { + CHANGE_MAP, + LABELING_MAP + } + @Getter @Setter @AllArgsConstructor @@ -259,6 +264,9 @@ public class LayerDto { @Schema(description = "rawJson") private JsonNode rawJson; + @Schema(description = "crs") + private Integer crs; + public LayerMapDto( String layerType, String tag, @@ -272,7 +280,8 @@ public class LayerDto { Short maxZoom, String bboxGeometry, UUID uuid, - String rawJsonString) { + String rawJsonString, + Integer crs) { this.layerType = layerType; this.tag = tag; this.sortOrder = sortOrder; @@ -308,6 +317,7 @@ public class LayerDto { this.rawJson = rawJson; this.bbox = geoJson; + this.crs = crs; } @JsonProperty("workspace") @@ -354,6 +364,8 @@ public class LayerDto { @JsonIgnore private String bboxGeometry; + private Integer crs; + public TileUrlDto( Integer mngYyyy, String url, @@ -364,7 +376,8 @@ public class LayerDto { BigDecimal maxLat, Short minZoom, Short maxZoom, - String bboxGeometry) { + String bboxGeometry, + Integer crs) { this.mngYyyy = mngYyyy; this.url = url; this.tag = tag; @@ -388,6 +401,7 @@ public class LayerDto { } this.bbox = geoJson; + this.crs = crs; } } @@ -408,15 +422,11 @@ public class LayerDto { @NoArgsConstructor @AllArgsConstructor public static class IsMapYn { + @Schema(description = "CHANGE_MAP(변화지도), LABELING_MAP(라벨링지도)", example = "CHANGE_MAP") private String mapType; @Schema(description = "노출여부 true, false", example = "true") private Boolean isMapYn; } - - public enum MapType { - CHANGE_MAP, - LABELING_MAP - } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/layer/MapLayerRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/layer/MapLayerRepositoryImpl.java index 9d752480..2e8fa816 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/layer/MapLayerRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/layer/MapLayerRepositoryImpl.java @@ -11,6 +11,7 @@ import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import java.util.Collection; import java.util.List; @@ -92,6 +93,10 @@ public class MapLayerRepositoryImpl implements MapLayerRepositoryCustom { @Override public List findLayerMapList(String type) { + NumberExpression crsInt = + Expressions.numberTemplate( + Integer.class, "cast(replace({0}, 'EPSG_', '') as integer)", mapLayerEntity.crs); + return queryFactory .select( Projections.constructor( @@ -107,13 +112,15 @@ public class MapLayerRepositoryImpl implements MapLayerRepositoryCustom { mapLayerEntity.minZoom, mapLayerEntity.maxZoom, Expressions.stringTemplate( - "ST_AsGeoJSON(ST_Transform(ST_MakeEnvelope({0}, {1}, {2}, {3}, 4326), 5186))", + "ST_AsGeoJSON(ST_Transform(ST_MakeEnvelope({0}, {1}, {2}, {3}, 4326), {4}))", mapLayerEntity.minLon, mapLayerEntity.minLat, mapLayerEntity.maxLon, - mapLayerEntity.maxLat), + mapLayerEntity.maxLat, + crsInt), mapLayerEntity.uuid, - Expressions.stringTemplate("cast({0} as text)", mapLayerEntity.rawJson))) + Expressions.stringTemplate("cast({0} as text)", mapLayerEntity.rawJson), + crsInt)) .from(mapLayerEntity) .where(layerTypeCondition(type), mapLayerEntity.isDeleted.isFalse()) .orderBy(mapLayerEntity.order.asc()) @@ -122,6 +129,10 @@ public class MapLayerRepositoryImpl implements MapLayerRepositoryCustom { @Override public LayerDto.YearTileDto getChangeDetectionTileUrl(Integer beforeYear, Integer afterYear) { + NumberExpression crsInt = + Expressions.numberTemplate( + Integer.class, "cast(replace({0}, 'EPSG_', '') as integer)", mapSheetMngTileEntity.crs); + LayerDto.TileUrlDto before = queryFactory .select( @@ -137,11 +148,13 @@ public class MapLayerRepositoryImpl implements MapLayerRepositoryCustom { mapSheetMngTileEntity.minZoom, mapSheetMngTileEntity.maxZoom, Expressions.stringTemplate( - "ST_AsGeoJSON(ST_Transform(ST_MakeEnvelope({0}, {1}, {2}, {3}, 4326), 5186))", + "ST_AsGeoJSON(ST_Transform(ST_MakeEnvelope({0}, {1}, {2}, {3}, 4326), {4}))", mapSheetMngTileEntity.minLon, mapSheetMngTileEntity.minLat, mapSheetMngTileEntity.maxLon, - mapSheetMngTileEntity.maxLat))) + mapSheetMngTileEntity.maxLat, + crsInt), + crsInt)) .from(mapSheetMngTileEntity) .where(mapSheetMngTileEntity.mngYyyy.eq(beforeYear)) .fetchOne(); @@ -161,11 +174,13 @@ public class MapLayerRepositoryImpl implements MapLayerRepositoryCustom { mapSheetMngTileEntity.minZoom, mapSheetMngTileEntity.maxZoom, Expressions.stringTemplate( - "ST_AsGeoJSON(ST_Transform(ST_MakeEnvelope({0}, {1}, {2}, {3}, 4326), 5186))", + "ST_AsGeoJSON(ST_Transform(ST_MakeEnvelope({0}, {1}, {2}, {3}, 4326), {4}))", mapSheetMngTileEntity.minLon, mapSheetMngTileEntity.minLat, mapSheetMngTileEntity.maxLon, - mapSheetMngTileEntity.maxLat))) + mapSheetMngTileEntity.maxLat, + crsInt), + crsInt)) .from(mapSheetMngTileEntity) .where(mapSheetMngTileEntity.mngYyyy.eq(afterYear)) .fetchOne(); @@ -175,6 +190,10 @@ public class MapLayerRepositoryImpl implements MapLayerRepositoryCustom { @Override public TileUrlDto getChangeDetectionTileOneYearUrl(Integer year) { + NumberExpression crsInt = + Expressions.numberTemplate( + Integer.class, "cast(replace({0}, 'EPSG_', '') as integer)", mapSheetMngTileEntity.crs); + return queryFactory .select( Projections.constructor( @@ -189,11 +208,13 @@ public class MapLayerRepositoryImpl implements MapLayerRepositoryCustom { mapSheetMngTileEntity.minZoom, mapSheetMngTileEntity.maxZoom, Expressions.stringTemplate( - "ST_AsGeoJSON(ST_Transform(ST_MakeEnvelope({0}, {1}, {2}, {3}, 4326), 5186))", + "ST_AsGeoJSON(ST_Transform(ST_MakeEnvelope({0}, {1}, {2}, {3}, 4326), {4}))", mapSheetMngTileEntity.minLon, mapSheetMngTileEntity.minLat, mapSheetMngTileEntity.maxLon, - mapSheetMngTileEntity.maxLat))) + mapSheetMngTileEntity.maxLat, + crsInt), + crsInt)) .from(mapSheetMngTileEntity) .where(mapSheetMngTileEntity.mngYyyy.eq(year)) .fetchOne();