VWorld와 호환성을 가진 (동일한 형식을 가진) 타일맵 가공시 주의할 점

기관에서 주로 사용하는 배경지도가 VWorld이다 보니 VWorld을 기본도로 해서 배경맵을 더 강화(Enrichment)시켜주는 작업이 필요할 때가 있습니다.

해당 기관은 VWorld 배경맵을 사용했는데 여러가지 문제로 관리하는 건물이나 시설물이 상당 부분 누락된 VWorld을 보강해야 할 필요가 있었고 이에 대한 작업을 수행하게 되었습니다. 예전에도 이런 비슷한 작업을 진행했는데.. 매번 할때마다 그 전의 작업 내역을 잊어 버리고 다시 VWorld의 구조를 분석해 작업 흐름을 추론해 진행했습니다. 해서.. 이번에는 작업 내역을 정리해 둡니다.

먼저 VWorld는 EPSG:3857 좌표계를 사용합니다. 레벨이 1~19까지 존재합니다. 각 단계의 축척에 대한 픽셀 당 논리단위 거리는 다음과 같습니다. 1레벨부터 시작합니다.

78000,39000,19600,9800,4900,2400,1222.9924523925781,611.4962261962891,305.74811309814453,152.87405654907226,76.43702827453613,38.218514137268066,19.109257068634033,9.554628534317017,4.777314267158508,2.388657133579254,1.194328566789627,0.5971642833948135,0.29858214169740677

그리고 타일맵 좌표의 전체 범위는 다음과 같습니다.

-20037508.342789244,-20037508.342789244,20037508.342789244,20037508.342789244

1레벨은 전세계의 지도가 표시됩니다. 반대로 마지막 레벨인 19레벨은 최대한으로 확대된 건물이 표시됩니다. 그리고 타일맵이 저정되는 디렉토리 구조가 Level/Column/Row 순서로 저장됩니다. 좀더 일반적인 타일맵의 디렉토리 구조는 Level/Row/Column 입니다. 끝으로 Row의 인덱스가 역순이라는 점도 주의해야 합니다.

작업시 초점을 맞춰야할 것들을 정리해서 요약하면 다음과 같습니다. 1) 타일맵 좌표의 전체 범위 2) 각 축척 단계의 픽셀 당 논리 단위 거리값 3) 디렉토리의 구조(Level/Row/Column) 4) Row 인덱스가 역순임

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

짝짝짝! 참 잘했어요!

국토교통부에서 제공하는 연속지적도의 좌표계에서 사용하는 타원체를 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);
    }
}

[오프라인강좌 소개] three.js와 blender를 이용한 3D 인터렉티브 웹 개발

안녕하세요, GIS Developer 김형준입니다. 오는 10월 24일에서 26일 판교에서 3D 그래픽 웹 개발을 위한 three.js 라이브러리와 3차원 모델링 제작툴인 Blender를 활용한 3차원 인터렉티브 웹 개발에 대한 오프라인 강좌를 진행합니다. 소개 영상은 아래와 같습니다.

이번 강좌는 한국메타버스산업협회에서 주관하는 강좌로 교육비는 무료이며 수강신청은 아래 URL을 통해 가능합니다.

https://www.metaverse-campus.kr/lecture/viewAll.do?pageIndex=1&menu_idx=50&lecIdx=17&proIdx=147

참여 인원수에 제한이 있으므로 빠른 신청 부탁드리겠습니다. 감사합니다.