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 ‘콜론 연산자와 인덱스 생성 함수’ »

WHERE 함수의 속사정

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

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

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 키워드 사용 주의!)’ »

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 키워드’ »

IDL–PYTHON Bridge 기능 살펴보기(2)

이전 포스팅을 통해서 IDL에서 PYTHON을 사용하는 내용에 대해서 확인을 했었습니다. 이번에는 PYTHON에서 IDL을 사용하는 방법을 보여드리겠습니다. 우선 이 과정에 앞서 파이썬에 Bridge를 연동하는 것은 이미 완료하셨다고 생각하고 진행을 하도록 하겠습니다. 이 내용은 이전 포스팅에도 있는 이상우 박사님의 블로그 혹은 IDL Help를 통해서 자세히 확인할 수 있습니다. 모든 준비가 완료되었다면, Bridge 연동을 위해서 우선 IDL Bridge …

Continue reading ‘IDL–PYTHON Bridge 기능 살펴보기(2)’ »

IDL–PYTHON Bridge 기능 살펴보기(1)

IDL 8.5가 출시되면서 IDL에는 IDL–PYTHON Bridge 라는 새로운 기능이 생겼습니다. 이 기능은 IDL과 PYTHON을 서로 불러와 사용할 수 있도록 지원하는 기능입니다. IDL –PYTHON Bridge에 대한 기본적인 내용은 이상우 박사님께서 작성하신 블로그를 참조해주세요. 오늘부터 제가 하고자 하는 IDL–PYTHON Bridge 기능 살펴보기에서는 몇 개의 파트를 거쳐서 IDL과 파이썬에서 각각 구현되어있는 모듈과 함수를 사용해보고, IDL에서 유저가 작성한 클래스를 …

Continue reading ‘IDL–PYTHON Bridge 기능 살펴보기(1)’ »