From 6af8584526a67139bef4eda22b2ba92ca05f9046 Mon Sep 17 00:00:00 2001 From: teddy Date: Tue, 27 Jan 2026 20:38:42 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=96=B4=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20api=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kamcoback/layer/LayerApiController.java | 70 ++++ .../kamco/cd/kamcoback/layer/dto/WmtsDto.java | 27 ++ .../cd/kamcoback/layer/dto/WmtsLayerInfo.java | 277 ++++++++++++++++ .../layer/service/GeojsonService.java | 3 + .../kamcoback/layer/service/TileService.java | 10 + .../kamcoback/layer/service/WmsService.java | 10 + .../kamcoback/layer/service/WmtsService.java | 301 ++++++++++++++++++ .../postgres/entity/MapLayerEntity.java | 80 +++++ .../repository/layer/LayerRepository.java | 7 + .../layer/LayerRepositoryCustom.java | 3 + .../repository/layer/LayerRepositoryImpl.java | 6 + src/main/resources/application-dev.yml | 4 + src/main/resources/application-prod.yml | 4 + 13 files changed, 802 insertions(+) create mode 100644 src/main/java/com/kamco/cd/kamcoback/layer/LayerApiController.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/layer/dto/WmtsDto.java create mode 100755 src/main/java/com/kamco/cd/kamcoback/layer/dto/WmtsLayerInfo.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/layer/service/GeojsonService.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/layer/service/TileService.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/layer/service/WmsService.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/layer/service/WmtsService.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapLayerEntity.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/postgres/repository/layer/LayerRepository.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/postgres/repository/layer/LayerRepositoryCustom.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/postgres/repository/layer/LayerRepositoryImpl.java diff --git a/src/main/java/com/kamco/cd/kamcoback/layer/LayerApiController.java b/src/main/java/com/kamco/cd/kamcoback/layer/LayerApiController.java new file mode 100644 index 00000000..f3eed1cf --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/layer/LayerApiController.java @@ -0,0 +1,70 @@ +package com.kamco.cd.kamcoback.layer; + +import com.kamco.cd.kamcoback.config.api.ApiResponseDto; +import com.kamco.cd.kamcoback.layer.dto.WmtsDto.WmtsAddReqDto; +import com.kamco.cd.kamcoback.layer.dto.WmtsLayerInfo; +import com.kamco.cd.kamcoback.layer.service.WmtsService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Tag(name = "레이어 관리", description = "레이어 관리 API") +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/layer") +public class LayerApiController { + + private final WmtsService wmtsService; + + @Operation(summary = "wmts tile 조회", description = "wmts tile 조회 api") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "검색 성공", + content = + @Content( + mediaType = "application/json", + array = @ArraySchema(schema = @Schema(implementation = String.class)))), + @ApiResponse(responseCode = "400", description = "잘못된 검색 조건", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @GetMapping("/wmts/tile") + public ApiResponseDto> getWmtsTile() { + return ApiResponseDto.ok(wmtsService.getTile()); + } + + @Operation(summary = "wmts tile 상세 조회", description = "wmts tile 상세 조회 api") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "검색 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = WmtsLayerInfo.class))), + @ApiResponse(responseCode = "400", description = "잘못된 검색 조건", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @PostMapping("/wmts") + public ApiResponseDto getWmtsTileDetail( + @Parameter(description = "선택한 tile", example = "959022EFCAA448D1A325FA7B8ABEA10D") + @RequestBody + WmtsAddReqDto dto) { + wmtsService.save(dto); + return ApiResponseDto.ok(null); + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/layer/dto/WmtsDto.java b/src/main/java/com/kamco/cd/kamcoback/layer/dto/WmtsDto.java new file mode 100644 index 00000000..966d0a77 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/layer/dto/WmtsDto.java @@ -0,0 +1,27 @@ +package com.kamco.cd.kamcoback.layer.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +public class WmtsDto { + + @Getter + @Setter + @AllArgsConstructor + @NoArgsConstructor + public static class WmtsAddReqDto { + private String title; + private String description; + } + + @Getter + @Setter + @AllArgsConstructor + @NoArgsConstructor + public static class WmtsAddDto { + private WmtsLayerInfo wmtsLayerInfo; + private String description; + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/layer/dto/WmtsLayerInfo.java b/src/main/java/com/kamco/cd/kamcoback/layer/dto/WmtsLayerInfo.java new file mode 100755 index 00000000..331b3611 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/layer/dto/WmtsLayerInfo.java @@ -0,0 +1,277 @@ +package com.kamco.cd.kamcoback.layer.dto; + +import java.util.ArrayList; +import java.util.List; + +/** WMTS 레이어 정보를 담는 DTO 클래스 */ +public class WmtsLayerInfo { + + public String identifier; + public String title; + public String abstractText; + public List keywords = new ArrayList<>(); + public BoundingBox boundingBox; + public List formats = new ArrayList<>(); + public List tileMatrixSetLinks = new ArrayList<>(); + public List resourceUrls = new ArrayList<>(); + public List