프로젝트 정리/애완동물 종합 솔루션(CatDogForest)

Kakao Map API with 애완동물병원 #2

공공데이터 포털에서 동물병원 정보를 찾았다.

 

https://www.data.go.kr/data/15045050/fileData.do

 

행정안전부_동물병원_20220531

동물을 진료하거나 동물의 질병을 예방하는 기관정보 데이터로 인허가일자, 영업상태, 사업장명, 소재지주소 등의 정보 확인이 가능합니다.<br/><br/>* 좌표계 : 중부원점TM(EPSG:2097)<br/>

www.data.go.kr

 

CSV파일이어서 csv to sql로 테이블로 집어넣었고 위도 경도를 사용하려는데 문제가 발생했다.

 

제공해주는 좌표값이 다음과 같다.

 

좌표계 : 중부원점TM(EPSG:2097)

 

카카오 맵 API는 위도, 경도를 기준으로 생성되는데 이에 맞게 변환과정이 필요하다.

 

구글링 해보니 파이썬이나 자바스크립트 위주의 레퍼런스가 많은데 선구자가 계셨다.

https://fascinate-zsoo.tistory.com/29

 

proj4.js로 좌표계 변환하기(중부원점 좌표계 >> WGS84좌표계)

개인프로젝트 또는 현업에서 종종 공공데이터포털의 데이터를 활용할 일이 꽤나 있습니다. 특히 최근에는 지도API를 활용한 업무가 많아졌습니다. 그런데..! 데이터 제공처마다 각각 다른 좌표

fascinate-zsoo.tistory.com

EPSG에 대한 설명글

http://www.gisdeveloper.co.kr/?p=8942 

 

대한민국 EPSG 코드 – GIS Developer

EPSG 코드는 전세계 좌표계 정의에 대한 고유한 명칭입니다. EPSG 코드에 대한 상세 정의는 prj4와 wkt라는 문자열로 되어 있으며, proj4와 EPSG의 wkt는 좌표계의 다양한 제원값을 정해진 문자열로 구성

www.gisdeveloper.co.kr

 

https://wooble52.tistory.com/32

 

[QGIS] 국내 주요 좌표계 EPSG 코드 정리

안녕하세요, 우블입니다! 저번글에 이어서 오늘은 QGIS 좌표계에 대한 글 써보겠습니다. 2020/02/10 - [QGIS] 좌표계 설정하기 [QGIS] 좌표계 설정하기 안녕하세요, 우블입니다~! 오늘 글을 소개해드리기

wooble52.tistory.com

 

위의 자료들을 이해하고 EPSG:2097로 구성된 좌표를

카카오맵에서 사용하는 EPSG:5181로 변환하여 카카오에 적합하게 변경하는 작업을 하자.

 

Chat GPT가 알려준 솔루션

import org.geotools.referencing.CRS;
import org.opengis.referencing.crs.CoordinateReferenceSystem;

public class CoordinateConverter {
    public static void main(String[] args) throws Exception {
        CoordinateReferenceSystem sourceCRS = CRS.decode("EPSG:2097");
        CoordinateReferenceSystem targetCRS = CRS.decode("EPSG:5181");
        
        System.out.println("Source CRS: " + sourceCRS.getName());
        System.out.println("Target CRS: " + targetCRS.getName());
        
        // Define your source coordinate here
        double[] sourceCoord = new double[] { 10.0, 20.0 };
        
        // Convert the coordinate from source CRS to target CRS
        double[] targetCoord = CRS.transform(sourceCRS, targetCRS, sourceCoord);
        
        System.out.println("Source coordinate: " + sourceCoord[0] + ", " + sourceCoord[1]);
        System.out.println("Target coordinate: " + targetCoord[0] + ", " + targetCoord[1]);
    }
}
package tobyspring.helloboot;
import org.locationtech.proj4j.BasicCoordinateTransform;
import org.locationtech.proj4j.CRSFactory;
import org.locationtech.proj4j.CoordinateReferenceSystem;
import org.locationtech.proj4j.ProjCoordinate;
public class TransCoord {
    public ProjCoordinate transform(String strLon, String strLat) {

        //parse to Double
        Double dblLon = Double.parseDouble(strLon);
        Double dblLat = Double.parseDouble(strLat);

        CRSFactory factory = new CRSFactory();
        CoordinateReferenceSystem srcCRS = factory.createFromName("EPSG:2097");
        CoordinateReferenceSystem tgtCRS = factory.createFromName("EPSG:5181");

        System.out.println("Source CRS: " + srcCRS.getName());
        System.out.println("Target CRS: " + tgtCRS.getName());

        BasicCoordinateTransform transformer = new BasicCoordinateTransform(srcCRS, tgtCRS);

        ProjCoordinate beforeCoord = new ProjCoordinate(dblLon, dblLat);
        ProjCoordinate afterCoord = new ProjCoordinate();

        //변환된 좌표
        System.out.println(afterCoord.x + "," + afterCoord.y);

        return transformer.transform(beforeCoord, afterCoord);
    }

}

 

위 에러 메시지는일반적으로 Proj4J 라이브러리가 사용하는 좌표 참조 시스템(CRS) 정보 파일을 찾을 수 없어서 발생하는 문제입니다.
이 문제를 해결하기 위해서는 다음과 같은 단계를 따르면 됩니다.

먼저, 프로젝트의 클래스 패스(classpath)에 Proj4J 라이브러리 jar 파일이 제대로 추가되어 있는지 확인해 주세요. 만약 Maven이나 Gradle과 같은 빌드 도구를 사용한다면, 라이브러리 의존성을 빌드 파일에 추가하고,
제대로 다운로드되고 있는지 확인해야 합니다.
사용하는 EPSG 코드가 올바르고 유효한 CRS와 일치하는지 확인하세요.
epsg.io와 같은 웹사이트를 사용하여 올바른 코드와 CRS 정보를 확인할 수 있습니다.

사용하는 EPSG 코드의 CRS 정보가 들어있는 파일이 Proj4J 라이브러리의 클래스 패스에 있는지 확인하세요.
이 파일은 보통 "epsg"라는 이름으로 "proj4/nad" 디렉토리에 위치합니다.

이 파일이 클래스 패스에 존재하고, 라이브러리가 이 파일을 읽을 수 있는지 확인해야 합니다.
만약 파일이 누락되거나 손상된 경우,
Proj4J 라이브러리를 다시 다운로드하여 프로젝트의 클래스 패스에 추가해 보세요.

위 방법으로도 문제를 해결할 수 없다면,
인터넷에서 비슷한 문제나 에러 메시지를 검색하거나, Proj4J 라이브러리의 문서나 지원 자료를 참고해 보세요.