[GIS] SHP를 Point Type의 KML로 변환

포인트, 폴리라인, 폴리곤에 대한 SHP를 KML 포맷으로 변환할 수 있는 유틸리티입니다. 선택 기능으로써 SHP의 속성값을 라벨로 표시할 수 있는 기능도 제공됩니다. SHP 파일의 좌표계는 WGS84 경위도 좌표계여야 합니다.

사용자 삽입 이미지

위의 프로그램으로 SHP 파일을 KML로 내보내 구글어스에서 살펴본 화면은 아래와 같습니다. 처음 화면은 기본 화면이며 두번째 화면이 변환된 KML과 함께 표현한 것입니다.

사용자 삽입 이미지
사용자 삽입 이미지
참고로… 이 툴은 오픈소스인 ShapeLib를 이용해 SHP 파일의 도형 정보와 속성 정보를 읽어 만들었습니다. ShapeLib는 http://cafe.naver.com/gisdev에서 자세한 사용법을 알 수 있으니 SHP 파일을 처리할 필요가 있으신 분은 한번 참조해 보시기 바랍니다.

참고로… 이 프로그램을 만들면서 찾은 정보입니다. 먼저 Visual C++ 2005 이상에서 MFC 대화창 기반의 어플리케이션 개발 시에 XP 테마를 적용하기 위해서는 다음 코드를 임의의 헤더 파일이나 소스 파일에 포함해야 합니다.

#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")

그리고 KML 파일의 내용은 utf-8로 인코딩되어야 하며 C/C++에서 ansi 문자셋를 utf-8 문자셋으로 변환하기 위해 사용한 코드는 아래와 같습니다.

void CPoint2KmlDlg::SaveAsUTF8(FILE *pFile, char *pszCode)
{
    int  nLength, nLength2;
    BSTR bstrCode; 
    char *pszUTFCode = NULL;

    nLength = MultiByteToWideChar(CP_ACP, 0, pszCode, 
        lstrlen(pszCode), NULL, NULL); 
    bstrCode = SysAllocStringLen(NULL, nLength); 
    MultiByteToWideChar(CP_ACP, 0, pszCode, lstrlen(pszCode), bstrCode, nLength);

    nLength2 = WideCharToMultiByte(CP_UTF8, 0, bstrCode, -1, pszUTFCode, 
        0, NULL, NULL); 
    pszUTFCode = (char*)malloc(nLength2+1); 
    WideCharToMultiByte(CP_UTF8, 0, bstrCode, -1, pszUTFCode, 
        nLength2, NULL, NULL); 

    fprintf(pFile, "%s", pszUTFCode);

    SysFreeString(bstrCode);
    free(pszUTFCode);
}

첫번째 인자는 출력할 파일의 핸들이며 두번째는 널문자로 끝나는 ansi 문자 배열을 넘겨주게 되면 utf-8로 변환되어 저장됩니다. 위의 코드의 출처는 http://skorea.tistory.com/43 입니다.

[GIS] 분석 결과와 배경 지도

오늘 급작스레 구현해 본 기능인데… 어떤 공간 위에 여러가지 데이터를 가지고 분석한 결과를 표출할때… 배경이 되는 지도와 분석 결과가 뒤섞여… 분석 결과가 한눈에 들어오지 않는 경우가 있는 듯합니다.

사용자 삽입 이미지

그래서 배경이 되는지도의 색상을 빼고, 분석 결과만 색상을 적용하도록 했습니다. 물론.. 사용자가 원하는 시점에서 배경 지도의 색상을 적용하고 뺄 수 있도록 한 것이구요. 매우 단순한 아이디어지만… 사용자에게는 매우 좋은 기능으로 생각됩니다..

위의 이미지는 배경지도위에 어떤 주제를 가지는 밀도 분석 결과를 함께 표현한 것입니다. 지도 엔진은 오픈메이트의 지도 엔진인 XGE를 이용해서 밀도 분석은 XGE에 플러그인할 수 있는 확장 기능으로 수행했습니다.

참고로… 위의 이미지에 해당하는 프로그램인 Clone은 XGE를 이용해 만든 간단한 C/S 프로그램입니다. 여러가지 공간분석기능을 기본도 위에서 수행할 수 있는 GIS 분석용 프로그램입니다. 언제 시간이 되면… XGE를 이용해 만든 여느 프로그램처럼… 소스를 공개할 예정입니다.