IDL/Mapping

KML 또는 KMZ 형식 파일 생성 기능 소개 (내용 일부 수정 2018년 6월)

이상우_idl 2011. 5. 20. 15:20
728x90
반응형

IDL 8.1 버전에서부터 새로 도입되었던 기능들 중 KML/KMZ 파일 생성 기능에 대하여 소개하고자 합니다. 아시다시피 이 파일들은 Google Earth에서 열어볼 수 있는 형식으로서, 지도상에 표출 가능한 각종 정보들을 Google Earth의 그래픽상에서 볼 수 있도록 해줍니다. 이미지, 등위선(Contour), 선, 폴리곤 등의 여러가지 그래픽 요소들을 표출할 수 있습니다. 오늘은 이미지와 선을 표출하는 예제를 만들어보기로 하겠습니다. 이 예제코드의 세부적인 내용은 아래에 설명하겠지만, 첨부파일로도 있으므로 필요하신 분들은 다운로드받으시면 됩니다.


test_kml.pro


먼저 예제에서 사용될 2차원 자료를 다음과 같이 임의로 생성합니다. 여기서는 300X300의 크기를 갖는 data라는 이름의 2차원 배열을 생성하였습니다. 경위도 기반의 격자분포를 하는 2차원 배열입니다.


lons = FINDGEN(300)/10 + 120

lats = FINDGEN(300)/20 + 30

data = SIN(lons/10) # COS(lats/5)

HELP, data


MAP 함수를 사용하여 지도를 먼저 셋업합니다. 여기서는 한반도 인근의 영역을 대상으로 하였습니다.


m = MAP('Geographic', LIMIT=[30, 120, 50, 150])


이제 앞서 생성했던 2차원 배열을 이미지의 형태로 표출하기 위하여 IMAGE 함수를 다음과 같이 사용합니다.


image = IMAGE(data, GRID_UNITS=2, RGB_TABLE=34, $

  IMAGE_LOCATION=[122, 32], IMAGE_DIMENSIONS=[20, 15], $

  /OVERPLOT, NAME='Image Overlay Example')


여기서는 이미지의 왼쪽 하단부 꼭지점의 위치에 해당되는 경위도 좌표를 IMAGE_LOCATION 속성에 부여하였고, 이미지가 점유하게 될 경위도 범위의 크기를 IMAGE_DIMENSIONS 속성에 부여하였습니다. 그리고 GRID_UNITS라는 속성에 2라는 값이 부여되어 있는데, 이것은 좌표값들을 도(degree)단위로 하겠다는 의미입니다. 그리고 NAME이라는 속성에 부여된 문자열은 나중에 생성될 KML/KMZ 파일을 Google Earth에서 열었을 때 이미지 부분의 고유 이름이 됩니다.


바로 이어서 MAPCONTINENTS 함수를 사용하여 지도상에 대륙경계선을 그리도록 합니다. 그리고 서울과 동경(Tokyo)를 이어주는 선을 다음과 같이 POLYLINE 함수를 사용하여 삽입합니다.


mc = MAPCONTINENTS(/COUNTRIES)

line = POLYLINE([[126.97, 37.57], [139.68, 35.68]], $

  /DATA, COLOR='blue', NAME='Seoul to Tokyo', THICK=2, TARGET=m)


그러면 표출해야 할 요소들은 다 표출이 된 상태입니다. 이제 앞서 MAP 함수로 정의했던 map이라는 그래픽 개체에 대하여 SAVE 메서드를 다음과 같이 사용합니다. 이 때 저장될 파일명의 확장자는 KML 또는 KMZ로 명시해줘야 합니다.


m.SAVE, 'test_kml.kmz'


여기서는 두가지 정도를 유의해야 합니다. 첫번째로 유의해야 할 점은, KML/KMZ 파일로 저장하는 기능 자체가 이와 같이 NG 체계 그래픽 함수들의 SAVE 메서드에서만 사용이 가능하다는 점입니다. 즉 IDL 8.0부터 도입된 NG(New Graphics) 기반의 그래픽 함수들에서만 지원됩니다. 예전부터 존재했던 Direct Graphics 기반의 그래픽에서는 지원되지 않는다는 점을 유의해야 합니다. 두번째로 유의해야 할 점은, 만약 저장될 파일을 외부로 보내서 다른 PC에서도 읽을 수 있어야 할 경우라면 KML보다는 KMZ로 저장하는 것이 더 나을 수도 있다는 것입니다. 특히 지금의 예제와 같이 이미지가 포함되어야 하는 경우라면 더욱 더 그렇습니다.


어쨌든 예제코드의 내용은 여기까지가 끝입니다. 위의 내용을 모두 실행하면 일단 그래픽 창이 하나 뜨고 다음과 같은 결과 그림을 먼저 볼 수 있습니다.



그리고 바로 이어서 이 내용을 담은 KML파일이 생성이 됩니다. 생성된 파일은 현재 작업 디렉토리의 내부에 저장됩니다. 이렇게 생성된 파일을 Google Earth를 이용하여 열어본 모습은 다음 그림과 같습니다.



아마 이미지의 불투명도가 좀 짙어서 뒷배경의 지도부분이 잘 안보일 것 같은데, 이 경우에는 Google Earth의 인터페이스상에서 이 이미지 부분만 투명도를 조절할 수 있습니다. Google Earth의 버전에 따라 조금씩 다른데, 예를 들어 2018년 6월 현재 최신 버전이라 할 수 있는 Google Earth Pro 7.3.2에서는 왼쪽 인터페이스의 중간 부분에 "불투명도 조정"이라는 팝업 설명이 뜨는 버튼이 있습니다. 참고로 이 스크린샷은 2011년 당시의 Google Earth의 모습이긴 한데, 다행히(?) 최근의 모습과 아주 크게 다르지는 않습니다. 어쨌든 이와 같은 자체 기능을 사용하여 투명도를 조절하면 다음 그림과 같이 배경과 이미지가 함께 잘 보이게 됩니다.



위의 예제 코드를 이용하여 얻은 kmz 파일도 아래에 첨부합니다.


test_kml.kmz


지금까지 IDL에서 KML/KMZ 파일을 생성하는 방법을 하나의 예제를 통하여 소개해보았습니다. 여기서는 이미지와 선을 표출하는 경우에 대한 예제만 소개하였지만, IDL 도움말에서 다음과 같은 섹션을 보면 좀 더 자세한 내용이 있으니 필요시 이 내용을 참조하시면 됩니다.


IDL > Graphics > Graphics Gallery > Images > Saving Images as KML Files

test_kml.pro
0.0MB
test_kml.pro
0.0MB
test_kml.kmz
0.02MB
반응형