프로그램을 고쳤는데도 예전 프로그램이 실행됩니다. FILE_WHICH 활용.

요즘 IDL의 FILE_WHICH 함수를 사용하거나 추천할 일이 많았습니다. 다음과 같은 질문을 몇 번 받았기 때문입니다. “프로시저(함수)를 수정해서 분명히 저장을 했습니다. 그런데 나중에 보면 예전 프로그램이 자꾸 실행되는데요…” 먼저 검토해 보아야 하는 것은 컴파일을 했는지 확인하는 것입니다. IDL의 프로시저나 함수의 호출 절차가 이렇습니다. 호출한 프로시저(함수)가 컴파일되어 메모리에 적재되어 있는지 검색. 그럴 경우 메모리에 적재된 프로그램을 실행. …

Continue reading ‘프로그램을 고쳤는데도 예전 프로그램이 실행됩니다. FILE_WHICH 활용.’ »

DJI GS Pro 사용 소감

저희가 연구 용역에 무인기 항공촬영이 필요하여 DJI의 작은 드론을 이용하고 있습니다. 그리고 그동안은 실력이 검증되지 않은 조종자의 컨트롤에 따라 수동 촬영을 했습니다. 불규칙하게 울퉁불퉁 수동으로 촬영하여도 중첩되는 영역들이 충분하다면, ENVI OneButton을 이용하여 정사모자익 영상을 생성할 수 있는 것은 확인 하였습니다. 그동안 그렇게 사용해 왔으니까요. (저희 드론 파일롯이 조종 실력은 그저 그렇지만, 촬영전후 신고/검사 절차는 칼같이 …

Continue reading ‘DJI GS Pro 사용 소감’ »

IDL PATH 설정에 따른 시동 시간

“내 IDL은 유독 시동 시간이 오래 걸리는 것 같다.” 이런 느낌을 받았던 적이 있으신가요? 컴퓨터는 제법 괜찮은 사양인데, 일단 시동만 되고 나면 꽤 빠르게 돌아가는데, IDL 시동이 유독 오래 걸린다고 생각이 되시나요? 이런 경우 IDL의 PATH 설정을 검토해 보실 필요가 있습니다.  라이선스 파일에 문제가 있거나 라이선스 서버에 접속이 안되는 경우에는 아예 IDL이 “라이선스가 이상합니다”라는 메시지를 …

Continue reading ‘IDL PATH 설정에 따른 시동 시간’ »

RANDOMU 함수의 알고리즘 변경 (8.2버전 이후)

RandomU 함수에서 Seed 값을 상수로 지정할 경우, 항상 같은 값이 나옵니다.

원하는 것이 매회 다른 무작위 수를 발생하는 것이라면, 이렇게 작성하면 안됩니다. 이렇게 상수로 지정하는 이유는, 주로 교육적인 목적에서, 또는 어떤 특별한 이유로 “재현”을 하기 위한 조치입니다. 난수 생성의 본래의 목적인 매번 다른 무작위 수를 생성하고자 한다면, SEED 값을 변수로 지정해야 합니다. 이 변수를, …

Continue reading ‘RANDOMU 함수의 알고리즘 변경 (8.2버전 이후)’ »

OpenStreetMap을 배경으로 사용하기

이 글은 IDL 도움말의 “Image with a Map Projection” 을 서울 중심으로 일부 수정한 것입니다. OpenStreetMap의 staticMapLite API를 사용하면, 지정한 위치에 대한 지도를 그림 파일로 가져올 수 있습니다. 이 그림은 Mercator 투영법으로 된 지도인데, png 파일로 되어 있습니다.  그림을 가져오는 것은 IDLnetURL 기능을 이용하면 아주 간단한 기능입니다. 어려울 게 없죠. 다만, IDL의 그래픽스에서 지도의 배경으로 …

Continue reading ‘OpenStreetMap을 배경으로 사용하기’ »

투영좌표 변환 (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’ »