투영좌표 변환 (TM과 UTM)

TM(Transverse Mercator) 좌표를 변환하다가, 숫자가 계속 안맞는 안타까운 경험을 했습니다. 정말 오랜만에 TM 좌표를 써 본 것인지, 그 사이 우리 법이 바뀐 것을 몰랐습니다.  결국 검색을 하다보니 어이없게도 단 한문장을 제가 그동안 모르고 살았습니다. 측량, 수로업무 및 지적에 관한 법률(2009.12.14)에 따라 TM 투영원점의 가산수치는 600,000/200,000이 적용됩니다. 남북방향의 가산수치(FALSE NORTHING)을 500,000이라고 믿고 있던 저는, 제 기억을 …

Continue reading ‘투영좌표 변환 (TM과 UTM)’ »

콜론 연산자와 인덱스 생성 함수

[0, 1, 2, 3, 4] 이와 같은 배열을 만드는 일은 IDL에서 매우 흔하게 발생하는 일입니다. IDL이 반복문을 쓰기 보다는 배열의 인덱스를 배열로 지정하여 처리하는 쪽을 독려하기 때문에, 그렇습니다. 예를 들면 이런 거죠.

이렇게 반복문을 써서 배열의 요소를 하나 하나 뽑아내기 보다는, 다음과 같이 쓰는게 IDL 스타일입니다.

여기서는 i 변수가 배열이고, x 라는 배열의 …

Continue reading ‘콜론 연산자와 인덱스 생성 함수’ »

GetTemporaryFileName() 으로 생성된 파일은 왜 자동으로 지워지지 않는가?

GetTemporaryFileName()은 ENVI 프로그래밍 예제에서 매우 많이 등장하는 메쏘드입니다. 그 이름이 주는 느낌 때문에, 임시파일 이름을 받아오는 기능이라고 생각하고, 임시파일이니까, ENVI를 닫으면 자동으로 지워지는 파일이 될 거라고 예상하기 쉽습니다. 오해입니다. 자동으로 지워지는 파일과 아무런 연관이 없습니다. 이 글의 제목이 질문인데요, 결론부터 말씀드리면, GetTemporaryFileName() 메쏘드는, Temporary Directory 에 쓸 파일의 이름을 자동으로 받아오는 것이지, ENVI가 관리하는 임시 …

Continue reading ‘GetTemporaryFileName() 으로 생성된 파일은 왜 자동으로 지워지지 않는가?’ »

WHERE 함수의 속사정

저는 IDL을 처음 접하시는 분들에게 WHERE를 소개할 때, OK = WHERE(조건문) 으로 소개합니다. 이렇게 하면 배열 중 조건에 부합하는 요소의 위치(WHERE)를 리턴값으로 준다고 말씀 드립니다. 거의 사실이죠. 당장은 느낌도 좋구요, 데이터베이스의 WHERE 문을 쓰는 기분으로 사용할 수 있기 때문에 저는 이렇게 설명을 드리는 방식을 선호했습니다. 다음과 같이 다섯개의 원(circle) 정보 중에 반경이 7보다 큰 원을 …

Continue reading ‘WHERE 함수의 속사정’ »

JULDAY(1, 9, 2017) – JULDAY(4, 16, 2014)+1 eq 1000

Julian Day는 하루에 1씩 증가하는 날짜 체계입니다. 어제의 이시각은 오늘 보다 1이 작고, 내일의 이시각은 오늘보다 1이 큽니다.  이 숫자의 셈이 기원전 4713년 1월 1일 정오를 Julian Day 0으로 정하여 카운트된다고 하지만, 기원전 4713년이란 기준을 기억하는 사람은 별로 없습니다. 거의 없습니다. 매우 무심한 숫자이고, 과학자들 말고는 사용하지도 않는 날짜입니다. 2017년 1월 9일이 Julian Day로 2457763 …

Continue reading ‘JULDAY(1, 9, 2017) – JULDAY(4, 16, 2014)+1 eq 1000’ »

minmax 함수, 그리고 일타이피

배열에서 최대값을 찾는 일은 배열 전체를 한번 훑어야 하는 일입니다. 최소값을 찾는 일도 배열 전체를 한번 훑어야 하는 일입니다. 그러지 않고서는 이 값이 최대값(또는 최소값)이라는 확신을 할 수 없을 테니까요. 여기에 어떤 신비로운 비법은 없습니다. 그런데, 배열에서 최대값과 최소값을 모두 알고자 한다면, 배열 전체를 두 번 훑어야 할까요? 그건 아닙니다. 한번만 스캔하면 최대값과 최소값을 다 …

Continue reading ‘minmax 함수, 그리고 일타이피’ »

IDL_SAVEFILE 클래스. (SAVE의 /ALL 키워드 사용 주의!)

다음 내용은 알고 있어야 합니다. SAVE는 IDL의 메모리를 그대로 떠서 HDD에 저장하는 방식입니다. 그래서, SAVE는 컴파일되어 메모리에 적재된 IDL 프로그램을 저장할 수도 있고, IDL에서 사용중인 변수를 저장할 수도 있습니다. 파일 하나에 이 두가지를 동시에 저장하는 것은 안됩니다. RESTORE는 SAVE로 저장된 내용을 메모리에 다시 복원하는 명령어입니다. SAVE와 RESTORE는 매우 편리한 도구입니다. IDL을 사용한다는 전제로, 이것은 아마도 …

Continue reading ‘IDL_SAVEFILE 클래스. (SAVE의 /ALL 키워드 사용 주의!)’ »

Linux libXp.so.6

리눅스의 libXp 라이브러리는 프린터로 그림을 출력하기 위한 라이브러리라고 합니다. 저도 그렇게 나와 있으니 그런가 보다 합니다. 어쨌든, Linux용 IDL을 설치하고 나서, IDL을 처음 실행해 보려고 할 때, 흔히 만날 수 있는 메시지가 libXp가 없다는 에러 메시지입니다. yi@stella:~$ idl /usr/local/exelis/idl85/bin/bin.linux.x86_64/idl: error while loading shared libraries: libXp.so.6: cannot open shared object file: No such file or directory …

Continue reading ‘Linux libXp.so.6’ »

OpenU, OpenW, 그리고 Append 키워드

파일 입출력과 관련하여서 IDL은 세 가지의 Open 명령어가 있고, 이들에 대한 도움말의 설명은 아래와 같습니다. The three OPEN procedures open a specified file for input and/or output. OPENR (OPEN Read) opens an existing file for input only. OPENW (OPEN Write) opens a new file for input and output. If the file exists, it is truncated …

Continue reading ‘OpenU, OpenW, 그리고 Append 키워드’ »

WGET 함수를 이용한 자료 다운로드

IDL 8.5에 새로 등장하는 함수 중에 WGET() 이 있습니다. 웹이나 FTP에서 원하는 Text나 파일을 가져오는 기능입니다. Linux에도 같은 목적을 가진 wget 명령이 있지요. 이 기능이 그리 각광을 받지 못한 데에는 아마도 기존의 IDLnetURL 클래스를 이용한 자료 다운로드와 업로드가 그리 어렵지 않았기 때문으로 생각합니다. 사실 WGET() 함수도  내부에는 IDLnetURL을 사용하고 있는 간단한 프로그램이거든요. IDLnetURL을 이용하면 그래도 …

Continue reading ‘WGET 함수를 이용한 자료 다운로드’ »