실습강의자료 ㅡ 스마트기기융합서비스개발

경일대의 공간정보공학과에서 진행한 모바일 GIS 실습자료입니다. 모바일 GIS 엔진인 블랙포인트를 이용하여 실습을 진행하였습니다. 다음과 같은 내용을 중심으로 실습을 하였습니다.

  1. 스마트 폰 또는 태블릿 PC의 화면에 지도를 표시하고
  2. 지도를 레이어(Layer) 단위로 구성하며
  3. 구성된 레이어의 색상 등의 심벌을 지정하고
  4. 구성된 레이어의 라벨을 표시하며
  5. 표시된 건물을 터치하면 터치된 건물의 속성 정보를 제공하고
  6. 현재 내 위치로 지도를 이동함

아래의 이미지는 최종 실습 결과물에 대한 실행화면 예시입니다.

사용자 삽입 이미지

그리고 아래는 실습을 위한 수업자료입니다.

반복문의 반복 횟수를 줄이는 코드 작성

반복문의 속도를 최적화하기 위한 방법중의 하나로 반복 횟수를 줄이는 것이 있습니다. 이에 대해서 제프 그린버그(Jeff Greenberg)가 제안한 내용이 있는데요. 처음 제안될때 작성된 샘플 코드가 C이지만 이를 JavaScript로 해석해 보았습니다. 먼저 개선해 나갈 반복문의 코드가 다음과 같습니다.

function task(arg) {
    var sum = 0;
    for (var i = 0; i < 10; i++) {
        sum += i;
    }
    return sum;
}

var start = +new Date();
var result = 0;
var repeatCounts = 9999999;

//========================================
for (var i = 0; i < repeatCounts; i++) {
    result += task(i);
}
//========================================

var end = +new Date();
var diff = end - start;
alert("result = " + result + ", " + diff + " msec");

최적화 대상이 되는 반복문은 13ㅡ17번입니다. 반복문 안에서 실해된 코드를 별도의 함수인 task로 뽑아놨습니다. task는 1부터 10까지의 합계를 구하는 간단한 연산을 수행하는 함수입니다. 반복문의 속도를 측정하기 위해서 반복문 앞뒤로 시간을 측정하고 있습니다. 이 반복문을 수행하였더니 제 타블릿PC에서는 8.6초가 나왔습니다. 이제 동일한 결과를 얻으면서도 반복 회수를 줄이는 방식으로 최적화를 한 코드는 다음과 같습니다. 위의 13ㅡ17번에 대한 반복 코드에 대한 변경된 부분만 언급하였습니다.

//========================================
var iters = Math.floor(repeatCounts / 10);
var startAt = repeatCounts % 10;
var i = 0;

do {
    switch (startAt) {
        case 0: result += task(i++);
        case 9: result += task(i++);
        case 8: result += task(i++);
        case 7: result += task(i++);
        case 6: result += task(i++);
        case 5: result += task(i++);
        case 4: result += task(i++);
        case 3: result += task(i++);
        case 2: result += task(i++);
        case 1: result += task(i++);
    }
    startAt = 0;
} while (iters--);
//====================================

한번의 반복으로 최대 10번의 반복을 대신하고 있습니다. switch 문을 보면 break문이 없다는 점을 유념해 해석해 보면 그 원리를 이해할 수 있습니다. 실행해 보면 소요되는 시간이 6.3초로 2.4초 단축된 것을 알 수 있습니다.

[GIS] 여러 개의 SHP 파일을 하나로 합쳐주는 툴 ㅡ MergeSHPFiles

속성이 동일한 SHP 파일들을 하나로 병합해 주는 툴입니다. 병합할때 저장할 속성을 선택할 수 있는 편의 기능을 제공합니다. UI는 아래와 같습니다.

사용자 삽입 이미지
각 UI에 대한 기능을 간단히 설명하면 다음과 같습니다.


  1. 병합할 SHP 파일을 추가합니다. 병합할 SHP 파일의 속성에 대한 필드 구조는 동일해야 합니다.
  2. 병합하기 위해 추가한 SHP 파일을 제거합니다.
  3. 병합할 SHP 파일에 대해서 저장할 속성 필드를 선택할 수 있는 리스트입니다.
  4. 병합할 SHP 파일의 리스트입니다.
  5. 병합되어질 결과 SHP 파일명입니다.
  6. 그림에서 빠졌군요 ㅡOㅡ;
  7. 병합할 SHP 파일을 지정합니다. 이미 존재하는 SHP 파일을 지정해서는 않됩니다.
  8. 병합을 실행합니다.
아래에 실행 파일과 소스를 함께 올립니다. 이 프로그램은 듀라맵을 이용하므로 먼저 듀라맵을 PC에 등록하셔야 합니다.

[GIS] 듀라맵을 이용한 폴리곤 자르기(Split) 데모

듀라맵을 이용한 공간 분석 시스템을 작년부터 진행하고 있었습니다. 1차 마무리를 하고 추가 요구사항이 생김으로써, 해당 요구사항을 반영하면서 해당 내용 중 필요한 일부 기능인 폴리곤 자르기에 대한 데모를 동영상으로 소개합니다.

사용자 삽입 이미지
데모시연 동영상

듀라맵은 작지만 GIS 엔진으로써 갖춰야할 전반적이고 기본적인 기능을 모두 갖추고 있습니다. 또한 이러한 GIS에 대한 기본 기능을 통해 보다 고도화된 고급기능을 PlugIn 형태로 확장할 수 있습니다.