XGE 3차 릴리즈 – 밀도계산

XGE에 이번에 추가한 밀도계산 기능을 ArcGIS와 비교해 보았습니다. 아래는 ArcGIS의 Simple 방식의 밀도 분석입니다. 주제는 “교육”입니다. 학교의 분포이겠지요.

참고로 XGE는 국내 최고의 비지니스 GIS 솔루션 기술을 가진 GIS 전문 회사((주)오픈메이트)가 보유한 GIS 엔진의 차기 버전입니다. XGE는 현재 개발단계인지라.. Code Name이고, 추후 멋드러진 이름을 갖게 되겠지요~ ^^

아래는 동일한 데이터.. 즉, 위에 대한 XGE의 결과입니다.

밀도 계산중 심플 방식은 속도는 매우 빠르지만, 그 결과는 그리 Nice~ 하지 않습니다. 아래는 실제 밀도 계산에서 가장 많이 쓰이는 Kernel 방식이며 ArcGIS에서 얻은 결과입니다. 심플 방식에 비해 결과가 Nice~ 하지요..

아래는 위와 동일한 데이터와 밀도 계산을 위한 변수(셀해상도, 계산반경)에 대한 XGE의 결과입니다. 배경이 검정인 이유는 검색반경에 영향을 받지 않아 Null Value인 셀입니다. ArcGIS의 경우 이 Null Value인 셀에 대해서는 가장 낮은 값으로 할당한 색상으로 표현하고 있습니다.

아래는 서울 지역에 대한 은행분포를 나타낸 Kernel 방식의 밀도 계산이며 모두 XGE로 얻은 결과입니다. 감상(?) 해보시길 바랍니다. ^^ ArcGIS에서처럼 Null Value인 셀에 대해서도 최하위 단계의 색상으로 표현하고 있습니다.

25m 해상도, 1000m 검색반경
10m 해상도, 2000m 검색반경
25m 해상도, 3000m 검색반경
25m 해상도, 5000m 검색반경

보시면 은행이 중구에 가장 많이 밀집되어있고 그 다음에 강남구 쪽에 많이 밀집되어 있다는 것을 알 수 있습니다. 밀도 분석은 2차원에서 그 분포에 대한 가중치를 구해 다양한 분석에 활용될 수 있는 조건 계산법입니다.

C++에서 기본클래스의 생성자에서는 순수가상함수를 호출할 수 없다!?

다소 황당하기도 하고, 언젠가 책에서 본것같기도 한 내용입니다. 하지만 저는 당연이 되리라 생각했던지라… 왜 않되냐며 약간 열 받기도 하였습니다. 어떤 내용인냐면…

먼저 Base라는 클래스가 있고, 이 클래스는 A라는 순수 가상 함수가 있습니다.

class Base {
public:
	Base() { };

	void TTT() {
		A();
	}

public:
	virtual void A() = 0;
};

보시면 TTT라는 함수에서 A 함수를 호출하고 있구요. 이제 Base를 상속받는 Derv라는 함수를 정의해 봅니다.

class Derv : public Base {
public:
	virtual void A() {
		printf("impl");
	}
};

상속받는 클래스는 기본 클래스의 순수 가상 함수를 구현해야할 책임이 있으므로 A 함수를 구현합니다. 이제 Base 함수를 사용해 보면…

int _tmain(int argc, _TCHAR* argv[])
{
	Base *p = new Derv();

	p->TTT();

	delete p;

	return 0;
}

화면상에 “impl”이라는 문자가 찍힙니다. 잘됩니다. 그렇다면 Base 클래스를 아래처럼 수정합니다.

class Base {
public:
	Base() { A(); };

	void TTT() {
		A();
	}

public:
	virtual void A() = 0;
};

변경된 부분은 Base의 생성자에서 순사 가상 함수를 호출하고 있습니다. 실행해보면… 않됩니다. Base::A(void) 외부 기호를 확인할 수 없다는 경고입니다. 원래 C++ 표준도 않되는 것인지.. 아니면 MS의 C++ 만 않되는 것인지는 모르겠지만, 당연히 될줄알고 사용했던지라 매우 난감했습니다. 아무튼 않되는 것을 알았으니 돌아가야겠습니다.