diff --git a/src/main/java/com/fitlink/service/TmapGeoService.java b/src/main/java/com/fitlink/service/TmapGeoService.java new file mode 100644 index 0000000..7a26515 --- /dev/null +++ b/src/main/java/com/fitlink/service/TmapGeoService.java @@ -0,0 +1,51 @@ +package com.fitlink.service; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fitlink.web.dto.ReverseAddressDTO; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.*; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +@Service +@RequiredArgsConstructor +public class TmapGeoService { + + private final RestTemplate restTemplate; + + @Value("${tmap.app-key}") + private String appKey; + + public ReverseAddressDTO reverseGeocode(double lat, double lon) { + + String url = UriComponentsBuilder + .fromHttpUrl("https://apis.openapi.sk.com/tmap/geo/reversegeocoding") + .queryParam("version", 1) + .queryParam("lat", lat) + .queryParam("lon", lon) + .queryParam("coordType", "WGS84GEO") + .toUriString(); + + HttpHeaders headers = new HttpHeaders(); + headers.set("appKey", appKey); + + ResponseEntity response = + restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(headers), String.class); + + try { + JsonNode root = new ObjectMapper().readTree(response.getBody()); + String fullAddress = root + .path("addressInfo") + .path("fullAddress") + .asText(); + + return new ReverseAddressDTO(fullAddress); + + } catch (Exception e) { + throw new RuntimeException("Reverse geocoding parsing error", e); + } + } +} diff --git a/src/main/java/com/fitlink/web/controller/TmapGeoController.java b/src/main/java/com/fitlink/web/controller/TmapGeoController.java new file mode 100644 index 0000000..f2eaaf1 --- /dev/null +++ b/src/main/java/com/fitlink/web/controller/TmapGeoController.java @@ -0,0 +1,24 @@ +package com.fitlink.web.controller; + +import com.fitlink.apiPayload.ApiResponse; +import com.fitlink.service.TmapGeoService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/api/maps") +@RequiredArgsConstructor +public class TmapGeoController { + + private final TmapGeoService geoService; + + @GetMapping("/reverse") + public ApiResponse getAddress( + @RequestParam double lat, + @RequestParam double lon + ) { + return ApiResponse.onSuccess( + geoService.reverseGeocode(lat, lon) + ); + } +} diff --git a/src/main/java/com/fitlink/web/dto/ReverseAddressDTO.java b/src/main/java/com/fitlink/web/dto/ReverseAddressDTO.java new file mode 100644 index 0000000..77dbc77 --- /dev/null +++ b/src/main/java/com/fitlink/web/dto/ReverseAddressDTO.java @@ -0,0 +1,10 @@ +package com.fitlink.web.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class ReverseAddressDTO { + private String fullAddress; +}