국토교통부 연속지적도 좌표계 변경 아주! 칭찬해!

짝짝짝! 참 잘했어요!

국토교통부에서 제공하는 연속지적도의 좌표계에서 사용하는 타원체를 Bessel1841에서 GRS80으로 변경된 것을 확인했습니다. 정확도면에서 어떻게 향상되었는지 기존의 다른 좌표계로 된 건물을 지적도와 함께 중첩해 보았습니다.

먼저 예전 Bessel1841 타원체를 사용하는 지적도와 UTM-K 좌표계인 건물을 중첩해 보면 다음과 같습니다.

확인해 보면 지적도의 필지와 건물이 상당히 어긋납니다. 늘 그래왔고 그려러니…. 했죠. 이제 최근 변경된 지적도와 건물 중첩을 보겠습니다.

완벽해! 드디어 해냈구나! 근데.. 왜 이렇게 늦었니? 아무튼… 이제 지적도에 대한 좌표계 이슈는 해결된 것 같습니다.

GDAL API를 JAVA에서 사용하기 (Windows 환경)

#1 컴파일된 GDAL 다운로드

다음 사이트를 통해 미리 컴파일된 GDAL을 내려 받는다. MSVC2022로 컴파일된 x64를 선택한 뒤 release-1930-x64-gdal-3-5-3-mapserver-8-0-0.zip를 다운로드 받았음 : https://www.gisinternals.com/release.php

#2 GDAL dll의 PATH 지정

내려받은 파일의 압축을 풀면 bin 폴더에 gdal에 대해 컴파일된 dll 파일이 존재하는데, 이 bin 폴더를 path에 지정한다. (gdalalljni.dll에서 이 폴더의 dll을 참조함)

#3 이클립스에서 라이브러리 참조 및 glue dll 참조 설정

bin/gdal/java 폴더에는 gdal.jar와 gdal에 대한 glue dll인 gdalalljni.dll이 존재하는 것을 확인할 수 있다. 이클립스에서 프로젝트를 생성하고 라이브러리로 gdal.jar를 참조한다. 그리고 gdal.jar가 참조하는 gdalalljni.dll 파일을 JRE가 파악할 수 있도록 이 파일의 경로(d:/path1/path2 라고 하자)를 VM arguments에 -Djava.library.path=d:/path1/path2 를 입력한다. (만약 path에 이 경로가 지정되어 있다면 생략해도 됨)

#4 코드 테스트

테스트 코드는 다음과 같다.

package tstGDAL;

import org.gdal.gdal.Dataset;
import org.gdal.gdal.gdal;
import org.gdal.gdalconst.gdalconstConstants;

public class MainEntry {
    Dataset hDataset;
    int numBands;
	 
    public MainEntry(String filename) {
        gdal.AllRegister();
        hDataset = gdal.Open(filename, gdalconstConstants.GA_ReadOnly);
        this.numBands = hDataset.getRasterCount();
    }
	 
    public static void main(String[] args) {
        String path = "d:/sample.tif";
        MainEntry instance = new MainEntry(path);
        System.out.println(instance.numBands);
    }
}