지대한
10 months ago
12 changed files with 272 additions and 25 deletions
@ -0,0 +1,113 @@
|
||||
package com.palnet.biz.api.comn.elev.controller; |
||||
|
||||
import com.palnet.biz.api.comn.elev.model.ComnElevRq; |
||||
import com.palnet.biz.api.comn.elev.model.ComnElevRs; |
||||
import com.palnet.biz.api.comn.elev.model.ComnGroundElevRq; |
||||
import com.palnet.biz.api.comn.elev.service.ComnElevService; |
||||
import com.palnet.biz.api.comn.response.BasicResponse; |
||||
import com.palnet.biz.api.comn.response.ErrorResponse; |
||||
import com.palnet.biz.api.comn.response.SuccessResponse; |
||||
import com.palnet.comn.exception.CustomException; |
||||
import io.swagger.annotations.ApiImplicitParam; |
||||
import io.swagger.annotations.ApiImplicitParams; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import io.swagger.v3.oas.annotations.tags.Tag; |
||||
import lombok.RequiredArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.data.domain.Page; |
||||
import org.springframework.http.HttpStatus; |
||||
import org.springframework.http.ResponseEntity; |
||||
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; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
@Slf4j |
||||
@Tag(name = "공통 API", description = "공통 API") |
||||
@RequiredArgsConstructor |
||||
@RequestMapping("/api/comn/elev") |
||||
@RestController |
||||
public class ComnElevController { |
||||
|
||||
private final ComnElevService comnElevService; |
||||
|
||||
@PostMapping(value = "/ground") |
||||
@ApiOperation(value = "지표면 고도 가져오기") |
||||
@Tag(name = "공통 API", description = "공통 API") |
||||
public ResponseEntity<? extends BasicResponse> getGroundElev(@RequestBody List<ComnGroundElevRq> rq) { |
||||
List<ComnElevRs> rs = null; |
||||
try { |
||||
log.debug(">>> rq : {}", rq); |
||||
rs = comnElevService.getGroundElev(rq); |
||||
|
||||
} catch (CustomException e) { |
||||
Map<String, Object> resultMap = new HashMap<>(); |
||||
log.error("IGNORE : ", e); |
||||
resultMap.put("result", false); |
||||
resultMap.put("errorCode", e.getErrorCode()); |
||||
resultMap.put("errorMessage", e.getMessage()); |
||||
return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); |
||||
} catch (Exception e) { |
||||
log.error("IGNORE : ", e); |
||||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
.body(new ErrorResponse("Server Error", "-1")); |
||||
|
||||
} |
||||
return ResponseEntity.ok().body(new SuccessResponse<>(rs)); |
||||
} |
||||
|
||||
@PostMapping(value = "/to/agl") |
||||
@ApiOperation(value = "msl을 agl로 변환") |
||||
@Tag(name = "공통 API", description = "공통 API") |
||||
public ResponseEntity<? extends BasicResponse> convertMslToAgl(@RequestBody List<ComnElevRq> rq) { |
||||
List<ComnElevRs> rs = null; |
||||
try { |
||||
log.debug(">>> rq : {}", rq); |
||||
rs = comnElevService.convertMslToAgl(rq); |
||||
|
||||
} catch (CustomException e) { |
||||
Map<String, Object> resultMap = new HashMap<>(); |
||||
log.error("IGNORE : ", e); |
||||
resultMap.put("result", false); |
||||
resultMap.put("errorCode", e.getErrorCode()); |
||||
resultMap.put("errorMessage", e.getMessage()); |
||||
return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); |
||||
} catch (Exception e) { |
||||
log.error("IGNORE : ", e); |
||||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
.body(new ErrorResponse("Server Error", "-1")); |
||||
|
||||
} |
||||
return ResponseEntity.ok().body(new SuccessResponse<>(rs)); |
||||
} |
||||
|
||||
@PostMapping(value = "/to/msl") |
||||
@ApiOperation(value = "agl을 msl로 변환") |
||||
@Tag(name = "공통 API", description = "공통 API") |
||||
public ResponseEntity<? extends BasicResponse> convertAglToMsl(@RequestBody List<ComnElevRq> rq) { |
||||
List<ComnElevRs> rs = null; |
||||
try { |
||||
log.debug(">>> rq : {}", rq); |
||||
rs = comnElevService.convertAglToMsl(rq); |
||||
|
||||
} catch (CustomException e) { |
||||
Map<String, Object> resultMap = new HashMap<>(); |
||||
log.error("IGNORE : ", e); |
||||
resultMap.put("result", false); |
||||
resultMap.put("errorCode", e.getErrorCode()); |
||||
resultMap.put("errorMessage", e.getMessage()); |
||||
return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); |
||||
} catch (Exception e) { |
||||
log.error("IGNORE : ", e); |
||||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||
.body(new ErrorResponse("Server Error", "-1")); |
||||
|
||||
} |
||||
return ResponseEntity.ok().body(new SuccessResponse<>(rs)); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,16 @@
|
||||
package com.palnet.biz.api.comn.elev.model; |
||||
|
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Builder; |
||||
import lombok.Data; |
||||
import lombok.NoArgsConstructor; |
||||
|
||||
@Data |
||||
@NoArgsConstructor |
||||
@AllArgsConstructor |
||||
@Builder |
||||
public class ComnElevRq { |
||||
private Double lat; |
||||
private Double lon; |
||||
private Double elev; |
||||
} |
@ -0,0 +1,17 @@
|
||||
package com.palnet.biz.api.comn.elev.model; |
||||
|
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Builder; |
||||
import lombok.Data; |
||||
import lombok.NoArgsConstructor; |
||||
|
||||
@Data |
||||
@NoArgsConstructor |
||||
@AllArgsConstructor |
||||
@Builder |
||||
public class ComnElevRs { |
||||
private String elevType; |
||||
private Double lat; |
||||
private Double lon; |
||||
private Double elev; |
||||
} |
@ -0,0 +1,15 @@
|
||||
package com.palnet.biz.api.comn.elev.model; |
||||
|
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Builder; |
||||
import lombok.Data; |
||||
import lombok.NoArgsConstructor; |
||||
|
||||
@Data |
||||
@NoArgsConstructor |
||||
@AllArgsConstructor |
||||
@Builder |
||||
public class ComnGroundElevRq { |
||||
private Double lat; |
||||
private Double lon; |
||||
} |
@ -0,0 +1,72 @@
|
||||
package com.palnet.biz.api.comn.elev.service; |
||||
|
||||
import com.palnet.biz.api.comn.elev.model.ComnElevRq; |
||||
import com.palnet.biz.api.comn.elev.model.ComnElevRs; |
||||
import com.palnet.biz.api.comn.elev.model.ComnGroundElevRq; |
||||
import com.palnet.comn.utils.DigitalElevationModelUtils; |
||||
import lombok.RequiredArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.locationtech.jts.geom.Coordinate; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
import java.util.List; |
||||
import java.util.stream.Collectors; |
||||
|
||||
@Slf4j |
||||
@RequiredArgsConstructor |
||||
@Service |
||||
public class ComnElevService { |
||||
|
||||
// 지표면 고도 가져오기
|
||||
public List<ComnElevRs> getGroundElev(List<ComnGroundElevRq> rq) { |
||||
DigitalElevationModelUtils demUtils = DigitalElevationModelUtils.getInstance(); |
||||
List<ComnElevRs> rs = rq.stream().map(elev -> { |
||||
Coordinate coord = new Coordinate(elev.getLon(), elev.getLat()); |
||||
Double groundElevation = demUtils.getGroundElevation(coord); |
||||
return ComnElevRs.builder() |
||||
.elevType("ground") |
||||
.lat(elev.getLat()) |
||||
.lon(elev.getLon()) |
||||
.elev(groundElevation) |
||||
.build(); |
||||
}).collect(Collectors.toList()); |
||||
return rs; |
||||
} |
||||
|
||||
// msl 기준 고도 > agl 기준 고도 변환
|
||||
public List<ComnElevRs> convertMslToAgl(List<ComnElevRq> rq) { |
||||
DigitalElevationModelUtils demUtils = DigitalElevationModelUtils.getInstance(); |
||||
List<ComnElevRs> rs = rq.stream().map(elev -> { |
||||
Coordinate coord = new Coordinate(elev.getLon(), elev.getLat()); |
||||
// 해수면기준 고도 - 지표면 고도 = AGL기준 고도(지표면에서 떨어진 높이)
|
||||
Double groundElevation = demUtils.getGroundElevation(coord); |
||||
Double aglElevation = (Math.round((elev.getElev() - groundElevation) * 100.0) / 100.0); |
||||
|
||||
return ComnElevRs.builder() |
||||
.elevType("agl") |
||||
.lat(elev.getLat()) |
||||
.lon(elev.getLon()) |
||||
.elev(aglElevation) |
||||
.build(); |
||||
}).collect(Collectors.toList()); |
||||
return rs; |
||||
} |
||||
|
||||
// agl 기준 고도 > msl 기준 고도 변환
|
||||
public List<ComnElevRs> convertAglToMsl(List<ComnElevRq> rq) { |
||||
DigitalElevationModelUtils demUtils = DigitalElevationModelUtils.getInstance(); |
||||
List<ComnElevRs> rs = rq.stream().map(elev -> { |
||||
Coordinate coord = new Coordinate(elev.getLon(), elev.getLat()); |
||||
// AGL기준 고도 + 지표면 고도 = 해수면기준 고도(해수면에서 떨어진 높이)
|
||||
Double groundElevation = demUtils.getGroundElevation(coord); |
||||
Double aglElevation = (Math.round((elev.getElev() + groundElevation) * 100.0) / 100.0); |
||||
return ComnElevRs.builder() |
||||
.elevType("msl") |
||||
.lat(elev.getLat()) |
||||
.lon(elev.getLon()) |
||||
.elev(aglElevation) |
||||
.build(); |
||||
}).collect(Collectors.toList()); |
||||
return rs; |
||||
} |
||||
} |
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue