잡동사니

[logj4] 좌표변환 본문

IT/Open Source

[logj4] 좌표변환

yeTi 2016. 5. 20. 15:29

안녕하세요. yeTi입니다.

오늘은 logj4를 활용하여 좌표계를 변환하는 방법에 대해서 알아보겠습니다.



환경

 - 전자정부프레임워크

 - Proj4j-0.1.0


1. SVN을 통하여 소스를 다운받습니다. (http://svn.osgeo.org/metacrs/proj4j/)

2. Ant를 활용하여 빌드합니다.

3. 2번에서 생성한 라이브러리를 활용할 프로젝트에 추가합니다.

 - proj4j-0.1.0.jar

4. 다음과 같이 활용합니다.

import org.osgeo.proj4j.CRSFactory;
import org.osgeo.proj4j.CoordinateReferenceSystem;
import org.osgeo.proj4j.CoordinateTransform;
import org.osgeo.proj4j.CoordinateTransformFactory;
import org.osgeo.proj4j.ProjCoordinate;

/**
 * logj4를 활용한 좌표계 변환 객체
 * @author HHS
 *
 */
public class CRSConverter {
   
    private CoordinateTransform trans;
   
    public CRSConverter(String srcCrsSpec, String destCrsSpec) throws Exception {
        CoordinateReferenceSystem srcCRS = this.createCRS(srcCrsSpec);
        CoordinateReferenceSystem destCRS = this.createCRS(destCrsSpec);
       
        CoordinateTransformFactory ctFactory = new CoordinateTransformFactory();
        this.trans = ctFactory.createTransform(srcCRS, destCRS);
    }
   
    /**
     * CRS creator
     * @param crsSpec
     * @return
     */
    private CoordinateReferenceSystem createCRS(String crsSpec) {
        CRSFactory crsFactory = new CRSFactory();
        CoordinateReferenceSystem crs = null;

        if (crsSpec.indexOf("+") >= 0 || crsSpec.indexOf("=") >= 0) {
            // title 검색
            String title = null;
            String[] arr = crsSpec.split(" ");
            for (int i = 0; i < arr.length; i++) {
                if ("title".equalsIgnoreCase(arr[i].split("=")[0].replace("+", ""))) {
                    title = arr[i].split("=")[1];
                    break;
                }
            }
            crs = crsFactory.createFromParameters(title, crsSpec);
        }
        else {
            crs = crsFactory.createFromName(crsSpec);
        }
       
        return crs;
    }

    public ProjCoordinate transform(String coordX, String coordY) {
        /*
         * Create input and output points.
         * These can be constructed once per thread and reused.
         */
        ProjCoordinate srcCoord = new ProjCoordinate();
        ProjCoordinate destCoord = new ProjCoordinate();
       
        srcCoord.x = Double.parseDouble(coordX);
        srcCoord.y = Double.parseDouble(coordY);
       
        /*
         * Transform point
         */
        return trans.transform(srcCoord, destCoord);
    }

}


5. 참고 문헌

 - Proj4J 홈페이지 : https://trac.osgeo.org/proj4j/

Comments