[GIS] 모바일 GPS 위치정확도 향상 연구

블랙포인트(BlackPoint-Xr)을 이용해 스마트폰의 GPS 좌표를 그 상황에 맞도록 정확도를 높여 주는 연구과제를 전주대학교 주체하에 진행하고 있습니다. 내일쯤.. 논의된 알고리즘을 실제 구현하여 논의해야하는데.. 실제 구현 단계에서 보니 논의된 알고리즘의 구현에 어려운 점과 제공 받은 데이터의 한계로 알고리즘의 재검토와 데이터 보완을 위한 요청 문서를 만들고 있습니다.

사용자 삽입 이미지
위의 화면은 지금까지 개발된 연구에 대한 구현 시스템입니다. 실제 동영상을 통해 보여드리면 좀더 좋겠지만.. 추후에 정확도 향상 알고리즘이 시스템에 적용되면 동영상으로 제공하면 좋겠습니다.

오차가 많은 모바일 GPS의 정확도를 개선하기 위해 다양한 보정 방법을 적용할 수 있습니다. 그런데 문제는 매우 다양한 변수가 존재한다는 것입니다. 그 수를 셀수도 없는 도로의 선형에 대한 형태들은 물론 GPS가 제공하는 위치에 대해 예측하기 어려운 변수들…

이러한 다양한 변수들에 대해서 정확도 향상을 위한 보정 알고리즘을 “강요”할 경우 시스템이 얼어 버리는 문제가 발생합니다. 또한 얼지는 않더라도 여러개의 보정 알고리즘이 동시에 적용될 경우 서로 상반되는 조건이 발생할 수도 있고요.

해서 GPS에 대한 상황을 길게 유지하지 않고 짧게 유지하되.. 이 짧은 상태에 대해서 제약 조건을 걸고 정확도 보정을 하고 다시 아무런 제약 조건이 깨끗한 상태에서 다시 위치 정확도를 보정하는 알고리즘이 최선이 아닐까 싶습니다.

재밌기도 하고.. 아직 문제 해결을 위한 실제 구현을 위한 구체적인 방법을 강구하고 있기에 조금 답답하기는 하지만 분명 의미가 큰 연구과제라고 생각됩니다.

[C++] 복사생성자, 소멸자, 대입연산자

C++을 학습하던 때에 제법 깊이 있게 생각하며 봤던 C++ 내용 중 복사생성자와 소멸자 그리고 대입연산자가 있었습니다. 마치 스타크래프트에서 등장하는 유닛들의 이름을 한글화 해 놓은 것은 이 3가지에 대해서 정리해 봅니다.

기본적으로 C++은 복사생성자, 소멸자, 대입연산자를 프로그래머가 정의해 놓지 않을 경우 정해진 기본 기능을 수행하는 복사생성자와 소멸자, 대입연산자를 만들어 놓는다고 가정할 수 있습니다.

기본 기능에 대한 복사생성자는 해당 클래스의 맴버 변수의 값을 그대로 복사합니다. 또한 기본 기능에 대한 소멸자는 해당 클래스의 맴버 변수의 소멸자를 호출해 줍니다. 그리고 기본기능에 대한 대입연산자는 해당 클래스의 맴버 변수의 값을 그대로 복사합니다.

여기서 언급된 맴버 변수의 값에 대한 복사라함은 단순한 값의 복사로써 만약 맴버 변수가 포인터일 경우 그 변수가 가르키고 있는 값까지 복사하는것이 아닌 주소값만을 복사한다는 의미입니다. 바로 이 포인트에 대한 부분이 C++에서 복사생성자와 소멸자, 대입연산자의 중요함이 강조되는 부분입니다.

아래의 코드는 이들 세가지(복사생성자, 소멸자, 대입연산자)에 대한 작성방법 및 이들을 제공하지 않았을 경우 어떻게 이들 세가지가 호출되는지를 보여주는 예입니다. 작성방법은 클래스 M에서 파악할 수 있고 호출 순서와 여부는 클래스 X에서 파악할 수 있습니다. 클래스 X는 이들 셋을 정의하고 있지 않으므로 C++에서 기본적으로 제공하는 기능에 대해 수행된다고 확신할 수 있습니다.

먼저 클래스 M에 대한 코드입니다.

class M {
public:
    M() {
        cout << "M::default-ctr is called" << endl;
    }

    M(const M&) {
        cout << "M::copy-ctr is called" << endl;
    }

    ~M() {
        cout << "M::dtr is called" << endl;
    }

    M& operator=(const M&) {
        cout << "M::oper= is called" << endl;
        return *this;
    }
};

여기서 기본생성자(M::default-ctr is called를 출력하는 함수)가 추가로 제공되고 있습니다. C++은 프로그래머가 생성자를 추가하지 않으면 기본생성자를 자동으로 추가해 주지만, 여기서는 복사생성자를 추가하고 있음으로 프로그래머가 직접 기본 생성자를 추가해 주어야 합니다.

다음은 클래스 X이며 이 클래스는 복사생성자와 소멸자, 대입연산자를 프로그래머가 제공하지 않으며 단순히 맴버 변수로써 클래스 M만을 가지고 있습니다.

class X {
    M m;
};

이제 클래스 X를 생성하고 대입하는 코드를 통해 복사생성자와 소멸자, 대입연산자의 호출을 확인해 보도록 하겠습니다.

X x;
X y = x;
x = y;

실행 결과는 다음과 같습니다.

사용자 삽입 이미지
1번 코드에 의해서 M::default-ctr is called가 표시되며 2번 코드에 의해서 M::copy-ctr is called가 호출됩니다. 그리고 3번 코드에 의해서 M::oper= is called가 호출됩니다. 그리고 이 프로그램의 유효범위가 종료됨으로써 직역변수로 선언된 x와 y에 대한 소멸자가 각각 1번씩 호출됩니다.

[GIS] Mr.Tiler-Xr 3.0의 편집 기능 소개

맵 디자인 툴이자 타일맵 가공툴인 Mr.Tiler-Xr이 3.0으로 버전업 되었습니다. 대용량의 수치지도에 대해서도 빠른 속도로 도형 및 속성 데이터를 편집할 수 있으며 스냅핑 기능과 편집에 대한 Undo/Redo가 가능합니다.

편집 데이터는 일반적인 SHP을 그대로 사용함으로써 편집된 데이터를 SHP로 변환해 데이터를 교환할 필요가 없습니다. 아래의 링크는 Mr.Tiler-Xr의 편집 기능에 대한 시연 동영상에 대한 URL입니다.

http://www.gisdeveloper.co.kr/Mr.Tiler-Xr/mrtiler_demo2

Mr.Tiler의 편집 기능에 대한 시연에서 사용한 데이터는 2.5GB에 이르는 대한민국에 대한 전국 데이터입니다. 이미 잘 디자인된 지도 위에서 바로 데이터를 편집하고 추가할 수 있습니다.

하나의 툴만으로 공간 데이터를 편집하고 디자인하며 이를 타일맵으로 가공할 수 있는 툴은 지오서비스(GEOSERVICE)의 Mr.Tiler-Xr이 최초이며 가장 빠르고 뛰어납니다.

지오서비스는 웹기반의 GIS 솔루션 개발을 위한 맵엔진인 핑거아이즈와 모바일 기반의 맵엔진인 블랙포인트를 자체 기술력만으로 개발하여 지자체의 다양한 시스템 개발에 적용한, GIS 분야에서 최고의 기술력을 갖춘 GIS 소프트웨어 개발회사입니다.