주소 좌표 변환툴, GeoCoder-Xr

Release Node

  • [2017/05/11] 이 포스트에서 제공하는 GeoCoder-Xr은 더 이상 작동되지 않습니다. 새롭게 업데이트된 GeoCoder-Xr을 사용하시기 바랍니다. 새로운 버전은 [GeoCoder-Xr v3.0]에서 다운로드 받을 수 있습니다.
  • [2016/05/03] 도로명 주소 데이터가 최신 DB(2016년 2월 버전)으로 업데이트 되었습니다. 아울러 도로명 주소 DB를 적극 활용하여 지번주소도 변환이 가능합니다.
  • [2015/06/06] 도로명 주소 데이터가 최신 DB(2015년 6월 버전)으로 업데이트 되었습니다.
  • [2014/09/28] 도로명 주소 데이터가 최신 DB(2014년 9월 버전)으로 업데이트 되었으며 매칭율이 더 향상 되었습니다.

회사를 제외한 개인/기관/연구소에서 사용할 경우 상업적인 용도에도 제한이 없으며 주소 좌표 변환 횟수에도 제한이 없는 도로명주소 좌표 변환툴입니다. 이 툴은 주소를 WGS84 경위도 좌표계의 좌표로 구성된 SHP 파일로 변환해주는 지오코딩 툴입니다.

변환할 주소는 아래의 그림처럼 메모장 또는 엑셀을 통해 CSV 포맷으로 저장하여 사용할 수 있습니다. CSV는 각 데이터를 컴마(,)로 구분하는 데이터 형식입니다.

CSV 형식의 입력 데이터의 첫줄은 반드시 필드명으로 구성되어야 합니다. 위의 데이터를 최종적으로 CSV 파일로 저장하고 메모장에서 살펴보면 다음과 같습니다.

이 입력 데이터를 GeoCoder-Xr 프로그램에서 주소읽기 버튼을 통해 읽은 후 주소 필드를 지정하고 결과 포맷으로 저장할 SHP 파일을 지정하면 아래의 화면처럼 구성됩니다.

이제 좌표로 변환하기 위한 시작 버튼을 누르면 좌표로 변환됩니다. 성공적으로 변환되면 아래의 화면처럼 변환된 지점이 지도에 표시됩니다.

사용자 삽입 이미지

이 프로그램은 아래의 경로를 통해 다운로드 받으실 수 있습니다. 간단한 Setup 프로그램으로 구성되어 있어서 쉽게 설치하고 사용할 수 있습니다.

사용에 있어 문의점이나 개선점에 대한 피드백은 hjkim@geoservice.co.kr 로 주시기 바랍니다.

PostgreSQL에서 초성 얻기

PostgreSQL에서 한글 단어에 대해 초성을 얻는 방법입니다.

prepare 초성(text) as 
  select case octet_length($1::char(1)) when 3 then 
    case ((((get_byte(decode($1::char(1), 'escape'), 0) & 15) << 12) 
    | ((get_byte(decode($1::char(1), 'escape'), 1) & 63) << 6) 
    | ((get_byte(decode($1::char(1), 'escape'), 2) & 63))) - 44032) / 588 
      when  0 then E'\xe3\x84\xb1' 
      when  1 then E'\xe3\x84\xb2' 
      when  2 then E'\xe3\x84\xb4' 
      when  3 then E'\xe3\x84\xb7' 
      when  4 then E'\xe3\x84\xb8' 
      when  5 then E'\xe3\x84\xb9' 
      when  6 then E'\xe3\x85\x81' 
      when  7 then E'\xe3\x85\x82' 
      when  8 then E'\xe3\x85\x84' 
      when  9 then E'\xe3\x85\x85' 
      when 10 then E'\xe3\x85\x86' 
      when 11 then E'\xe3\x85\x87' 
      when 12 then E'\xe3\x85\x88' 
      when 13 then E'\xe3\x85\x89' 
      when 14 then E'\xe3\x85\x8a' 
      when 15 then E'\xe3\x85\x8b' 
      when 16 then E'\xe3\x85\x8c' 
      when 17 then E'\xe3\x85\x8d' 
      when 18 then E'\xe3\x85\x8e' 
      when -53 then $1::char(1) 
      else '??' 
    end 
  else $1::char(1) 
end as initial; 

실행은 execute 명령을 활용하며 예를 들어 아래와 같습니다.

execute 초성('가나다');

결과는 'ㄱ'으로 나옵니다.

대한민국의 아름다운 영토, 독도

당연하다고 생각되는 것도, 상대가 인정하지 않는다면 제3자는 누가 진실을 이야기 하는지 알 수 없습니다. 지금은 우리가 분명이 알고 있는 사실이지만, 긴 시간이 지나 지금의 우리가 존재하지 않을 때, 우리가 아닌 제3자가 알고 있는 것이 진실이 될 수 있기 때문입니다. 또 이렇게 된다면 우리의 후대 역시 외곡된 것을 진실이라고 믿게 될 수 있습니다. 상식이라고 하여 말하지 않아도 당연한 것도 때론 강하게 주장하여 옳은 것이라는 것을 따져 물어야 할 때도 분명 있습니다.

PostgreSQL의 timestamp 필드에 값 INSERT

PostgreSQL에서 년/월/일과 시간을 모두 저장할 수 있는 필드 타입인 timestamp에 값을 넣는 Java 코드입니다.

Calendar cal = Calendar.getInstance();
Timestamp timestamp = new Timestamp(cal.getTimeInMillis());

코드를 호출하는 시점에서의 시간 값을 얻어 오는 코드이고, 이를 INSERT 문으로 추가할때는 문자열 형태로 넣어 주면 됩니다. 즉, 아래처럼 말입니다.

Calendar cal = Calendar.getInstance();  
Timestamp timestamp = new Timestamp(cal.getTimeInMillis());

StringBuilder sb = new StringBuilder();

sb.append("INSERT INTO log (call_time)");
sb.append("VALUES (");
sb.append("'");
sb.append(timestamp);
sb.append("')");

log라는 테이블에 timestamp 필드 타입의 call_time 필드에 값을 저장하는 코드입니다.