속성값으로 SHP 파일 데이터 분류 가공

SHP 파일의 속성값에 따라 불필요한 데이터는 제거할 필요가 있어 ExpressionsSHP 툴을 사용한 예를 정리해 봅니다. ExpressionsSHP 툴은 다음 URL을 통해 다운로드 받을 수 있습니다.

http://www.gisdeveloper.co.kr/entry/정규표현식을-이용한-SHP-추출-ExpressionsSHP

제가 하고자 하는 것은 해당 SHP 파일 중 특정 필드의 값이 빈문자값을 가지는 것은 제거였습니다.

“빈문자열로 시작하지 않는다”는 조건에 대한 정규표현식은 다음과 같습니다.

^\S

예를 들어 제가 처리하고자 하는 SHP 파일의 속성값을 살펴보면 아래와 같았습니다. NOBJNM_MB_ 필드에 대해서 빈문자열이 보입니다.

사용자 삽입 이미지
위의 데이터를  ExpressionsSHP 툴에서 SHP 파일로 입력하고 공백으로 시작하지 않음을 의미하는 정규표현식 조건 지정한 화면은 아래와 같습니다.

사용자 삽입 이미지
위와 같이 입력값을 지정하고 실행하면 결과 SHP 파일에 대한 분류가 되는 것을 알 수 있습니다.

사용자 삽입 이미지

[Java] 한글 문자열에서 초성 얻기

예를 들어, ‘대한민국’의 첫자인 ‘대’의 초성을 얻는 코드입니다. ‘대’의 초성은 ‘ㄷ’입니다. 아래의 함수 코드는 ‘대한민국’과 같은 문자열을 인자로 받아 그 결과로 ‘ㄷ’ 문자열을 반환하는 함수입니다.

String getInitialSound(String text) {
    String[] chs = { 
        "ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", 
        "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", 
        "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", 
        "ㅋ", "ㅌ", "ㅍ", "ㅎ" 
    };
		
    if(text.length() > 0) {
        char chName = text.charAt(0);
        if(chName >= 0xAC00)
        {
            int uniVal = chName - 0xAC00;
            int cho = ((uniVal - (uniVal % 28))/28)/21;

            return chs[cho];
        }
    }
   		
    return null; 
}

위의 함수를 간단히 테스트하는 코드 예는 아래와 같습니다.

System.out.println(getInitialSound("자바"));

결과는 ‘ㅈ’입니다.

XrReverseGeocoder ㅡ 좌표를 새주소로 변환하는 툴

좌표를 새주소로 변환하는 툴입니다. SHP 파일을 구성하는 포인트의 좌표에 대한 새주소(도로명주소)를 필드값으로 추가하여 새로운 SHP 파일을 생성해 줍니다. SHP 파일의 좌표계는 GPS 좌표, 즉 WGS94 경위도 좌표계여야 하며 포인트(Point) 타입이여야 합니다. 아래는 이 프로그램의 실행 화면입니다.

사용자 삽입 이미지

이 프로그램을 이용하여 포인트 좌표에 대해 변환된 주소는 새로운 SHP 파일의 속성값으로 저장되며 아래는 그 결과에 대한 예입니다.

사용자 삽입 이미지

이 프로그램은 DuraMap-Xr 컴포넌트를 필요로 합니다. 만약 이전에 DuraMap-Xr을 설치하지 않았다면 DuraMap-Xr의 설치를 위해 아래의 프로그램을 다운로드 받아 실행하시기 바랍니다.



아래는 이 프로그램에 대한 다운로드입니다. 다운로드 받아 원하는 폴더에 압축을 풀고 별도의 설치 없이 바로 실행할 수 있습니다.

리버스 지오코딩(Reverse Geocode) 서비스

GPS 좌표, 즉 WGS84 경위도 좌표를 도로기반의 신주소로 변환하는 OpenAPI 입니다. 만약 (36.63922, 127.478317)에 해당하는 주소를 얻고자 한다면 다음처럼 호출하면 됩니다.

http://222.237.78.208:8080/Gp?command=revgc;v=36.63922;h=127.478317

이를 웹브라우져에서 호출해 보면 다음과 같은 결과를 얻을 수 있습니다.

사용자 삽입 이미지

결과 내용 중 ADDRESSDATE는 주소데이터에 대한 갱신 날짜를 의미하고 DISTANCE는 좌표에서 결과주소에 해당하는 건물까지의 거리를 의미합니다. 실제 다음(Daum) 지도 서비스에서 해당 좌표에 대한 위치를 확인해 보면 다음과 같습니다.

사용자 삽입 이미지

이 서비스는 쿼리 요청에 대한 횟수 제한이 없습니다. 아울러 이 서비스는 비상업적인 용도에 한해서 자유롭게 사용하실 수 있으며 상업적인 용도로 사용하고자 할 경우 (주)지오서비스로 문의하시기 바랍니다.

[Java] AES 암호화

자바에서 문자열에 대한 암호화 방법입니다. 문자열이므로 특정한 데이터 형식, 즉 바이너리까지 포함하여 암호화가 가능합니다. 사용방법은 다음과 같습니다.

public static void main(String[] args) {
    try {
        String e = StringCrypto.encrypt(
            "GEOSERVICE", 
            "안녕하세요, 2014년 새해 복 많이 받으세요!"
        );

        System.out.println(e);
        String d = StringCrypto.decrypt("GEOSERVICE", e);
        System.out.println(d);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

문자열에 대한 암호화를 작업시에 간단히 할 수 있도록 StringCrypto라는 클래스로 묶었습니다. 이 클래스는 Java에서 이미 구현한 암호화 알고리즘 중에 AES를 사용합니다. 실행 결과는 다음과 같습니다.

사용자 삽입 이미지
첫줄은 ‘안녕하세요, 2014년 새해 복 많이 받으세요!’에 대한 문자열을 암호화하여 HEX 코드로 표시한 것이고 다음 줄은 HEX 코드로 암호화된 것을 다시 복원한 것입니다. 아래는 위의 코드와 함께 StringCrypto 클래스에 대한 소스의 다운로드입니다.

2014년, 새해 복 많이 받으시고 좋은 일만 가득하시기 바랍니다. ㅡ !