상황
- DB에는 공공 API 사용하고 있는데, 값이 국내에서 사용되는 좌표계로 사용되고 있었다.
- 그렇다보니 파라미터와 값이 맞지 않아 변환하는 쪽으로 테스트 하게 되었다.
- 좌표계 종류
해결
- DB 전처리 쪽에서 WGS84 좌표계로 바꿔달라고 요청해서 수정이 되었지만
Coordinate coordinate = coordinateService.getCoordinate(rawRestaurant.getRdnwhladdr());
build.gradle
// 좌표계 변환
implementation 'org.locationtech.proj4j:proj4j:1.1.1'
java
double[] tmCoordinates = transformWGS84ToTM(lon, lat);
double tmLon = tmCoordinates[0];
double tmLat = tmCoordinates[1];
public double[] transformWGS84ToTM(double lon, double lat) {
CRSFactory crsFactory = new CRSFactory();
CoordinateReferenceSystem crsWGS84 = crsFactory.createFromName("EPSG:4326");
CoordinateReferenceSystem crsTM = crsFactory.createFromParameters("EPSG:2097", "+proj=tmerc +lat_0=38 +lon_0=127.5 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +units=m +no_defs");
CoordinateTransformFactory ctFactory = new CoordinateTransformFactory();
CoordinateTransform transform = ctFactory.createTransform(crsWGS84, crsTM);
ProjCoordinate sourceCoordinate = new ProjCoordinate(lon, lat);
ProjCoordinate targetCoordinate = new ProjCoordinate();
transform.transform(sourceCoordinate, targetCoordinate);
return new double[]{targetCoordinate.x, targetCoordinate.y};
}