[GIS] BlackPoint-Xr, 네트워크를 통한 공간 데이터 서비스

안드로이드(Android) GIS 엔진인 블랙포인트에서 네트워크를 통해 항공영상이나 수치지도를 받아 지도로 표시하는 기능에 대한 샘플 코드를 정리해 봅니다. 먼저 항공영상에 대한 레이어를 추가한느 코드는 다음과 같습니다.

ILayer aerial = new TileImageLayer(
    "aerial", 
    "http://222.237.78.28:8080/tiles/a", 
    false);

layerMan.addLayer(aerial);

TileImageLayer 클래스의 생성자 함수의 첫번째 인자는 레이어의 식별자이고 두번째는 항공영상지도를 받아올 인터넷 URL입니다. 세번째는 파일에서 항공영상을 처리하는 것이 아니므로 false를 지정합니다. 다음은 수치지도를 표시하는 코드 예입니다.

ShapeLayer jibun = new ShapeLayer(
    "jibun", 
    "http://222.237.78.28:8080/Xr?layerName=jj");

layerMan.addLayer(jibun);

ShapeLayer 클래스의 생성자 함수의 첫번째 인자는 레이어의 식별자이고 두번째는 수치지도를 받아올 인터넷 URL입니다.

안드로이드 GIS 엔진인 블랙포인트는 공간 데이터를 SD 카드를 통한 로컬 방식과 네트워크를 통해 받아 사용 방식에 대해서 모두 동일한 TileImageLayer와 ShapeLayer를 사용함으로써 라벨이나 속성, 좌표 등의 정보를 얻어오고 사용하는 방식이 동일합니다. 다음은 위의 예제에서 추가한 항공영상과 수치지도를 추가한 화면입니다.

[GIS] BlackPoint-Xr, 블랙포인트를 이용해 개발된 앱 소개

블랙포인트로 개발된 현장조사시스템을 소개해 봅니다. 블랙포인트는 비영리적인 연구 목적과 비영리적인 개인 사용에 한하여 라이선스 비용없이 사용할 수 있는 안드로이드 기반의 모바일 GIS 엔진입니다. 위의 화면(클릭시 크게 볼 수 있음)은 블랙포인트에서 제공하는 지도 엔진에 항공영상(50cm)과 지적도 그리고 건물을 표시하고 있는 화면입니다.

사용자가 원하는 지적 필지를 하나 선택하여 선택된 필지에 대해 다양한 데이터를 저장할 수 있습니다. 저장할 수 있는 데이터는 지도 위에 자유롭게 그린 스케치 데이터, 사진 데이터, 동영상 데이터, 음성 녹음 데이터, 텍스트(폼 입력) 데이터입니다.

위의 화면에 해당 필지에 대해서 다양한 정보를 입력하고 있는 화면입니다. 현장에서 자유롭게 원하는 형태로 데이터를 수집할 수 있고 이렇게 수집된 데이터는 SD 카드에 체계적으로 주소를 기준으로 정리되어 있어 일반 USB를 통해 PC에 연결하여 내려받을 수 있습니다. 이 시스템은 현재 지자체 납품을 위해 준비하고 있는 시스템입니다.

[GIS] 블랙포인트(BlackPoint)를 이용한 GPS 테스트

모바일 디바이스(사용 디바이스: 갤럭시 플레이어 70)에 기본 장착된 GPS의 위치 정확도를 테스트해 볼 목적으로 블랙포인트(BlackPoint)를 이용해 GPS Tracking 앱을 만들어 직접 실외에서 실행해 보았습니다. 대상 지역은 서초구 서초동입니다. 아래의 화면은 디바이스의 실제 실행 화면을 캡춰한 이미지입니다.

사용자 삽입 이미지
점심 식사를 하고 도보로 천천히 걸으며 대로와 골목길로 위치를 추적해 보았습니다. 상당히 일치하는 부분과 상당히 벗어나는 부분이 존재하는 것을 알 수 있습니다. 그 이유를 파악하기 위해 위의 경로를 KML로 저장하고 구글어스에서 표시해 보았습니다.

사용자 삽입 이미지
위치가 크게 벗어나는 부분은 4곳으로.. 1곳은 디바이스의 이미지를 캡쳐하기 위해 사무실인 실내로 들어옴으로써 발생하는 오차입니다. 나머지 3곳에 대해서 위의 이미지에 표시를 해보았습니다. 결과적으로 고층건물에 의한 위치 오차라고 생각됩니다. 3곳에 대한 이미지를 좀더 확대해 보면 각각 다음과 같습니다.

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
만약 주위에 고층건물이 없다면 모바일 디바이스의 GPS 만으로도 어느 정도 정확한 위치를 파악할 수 있으리라 생각됩니다. 하지만 좁고 거미줄처럼 복잡한 골목길에 대한 위치의 파악은 GPS만으로는 어렵지 않을까… 예상해봅니다.

[GIS] 도로명 주소 검색에 사용된 데이터 및 도로명 주소 현장조사 시스템 소개

협력사를 통해 개발 및 납품 요청을 받고 개발한 “도로명 주소 현장조사 시스템”에서 도로명에 기반한 새주소 검색 기능을 개발하면서.. 이 새주소 검색에 사용된 데이터에 대한 정리를 해봅니다.

시스템 개발을 위해 제공 받은 데이터는 KLIS에서 다운로드 받은 지적도, 25cm급 항공영상(77 기가바이트) 그리고 새주소 데이터입니다. 새주소 데이터에는 건물, 도로, 출입구 등에 대한 SHP 파일입니다. 이 데이터 중에서 새주소 검색 기능에서 사용된 데이터는 오직 건물에 대한 SHP 파일 하나입니다. 이 건물의 속성 필드는 다음과 같이 구성되어 있습니다. 매우 많은 필드로 구성되어져 있습니다.

사용자 삽입 이미지
하지만 늘 그렇듯… 필요한 것은 이 중 일부입니다.. 데이터 용량과 속도를 최적화 시키기기 위해서 새주소 검색에 필요한 필드만을 남기고 정리를 하면 다음과 같습니다.

사용자 삽입 이미지
보시면.. 건물의 명칭을 위한 BULD_NM과 읍면 단위 명칭인 EMD 그리고 도로명에 대한 DORON, 주소의 번지를 나타내는 BULD_MN과 BULD_SL 필드가 전부입니다. 그리고 DP_NAME이라는 새로운 필드가 추가되었는데 이 필드는 BULD_MN과 BULD_SL로 계산된 필드입니다. 새주소에도 건물에 대한 번지가 존재하는 바로 이 번지에 대한 내용으로 건물 위에 라벨로 표시하기 위한 목적으로 추가한 필드입니다. 이 DP_NAME은 주소 검색에 활용되지 않으므로 건물 위에 라벨 표시가 필요치 않으면 추가하지 않아도 됩니다. 주소 검색에 필요한 데이터, 매우 단순하다는 것을 알 수 있고… 이제 UI를 살펴 보겠습니다.

사용자 삽입 이미지
보시면.. 읍면에는 검색 대상 지역의 읍면에 대한 명칭이 리스트업되며.. 하나의 읍면을 선택하면 도로명에 선택된 읍면에 해당되는 도로명이 리스트업됩니다. 읍면 및 도로명의 리스트업은 앞서 언급한 데이터의 필드로 구성이 쉽게 가능합니다. 이중 선택된 읍면에 대한 도로명의 목록을 조회하는 SQL문은 다음과 같습니다.

SELECT 
    DISTINCT DORON 
FROM 
    ADDRESSDB 
WHERE 
    EMD = '용문면' AND DORON <> ''

위의 UI에서 번지에 4 를 입력하고 검색 버튼을 클릭하면 검색 결과에 4 가 포함된 용문면 개방길에 대한 주소가 아래의 화면처럼 검색됩니다.

사용자 삽입 이미지
이 중 42를 선택하고 이동 버튼을 누르면.. 해당 위치로 빠르게 지도가 이동됩니다.

사용자 삽입 이미지
해당 위치로 지도를 이동하기 위해서는 건색된 건물 도형에 대한 MBR을 알아야 하는데 이 MBR은 바로 알기는 어렵고.. 먼저 해당 건물의 FID를 조회합니다. 이 FID를 조회하는 SQL에 대한 실제 코드를 살펴보면 다음과 같습니다. 코드는 시스템의 구동 환경인 안드로이드 SDK의 코드입니다.

Cursor cursor = rawDb.rawQuery(
    "SELECT FID, BULD_NM, DP_NAME FROM ADDRESSDB WHERE EMD='" + 
    emdName +  "' AND DORON='" + 
    roadName + "' AND BULD_MN LIKE '%" + 
    BonBun + "%' AND BULD_SL LIKE '%" + 
    BuBun + "'", null);

여기서 FID를 얻어 올 수 있고.. 이 FID를 통해 해당 도형의 MBR을 다시 얻어오게 됩니다.

끝으로.. 도로명 주소 현장조사시스템은 안드로이드 기반의 GIS 시스템으로 지오서비스의 블랙포인트라는 모바일 GIS 엔진을 이용해 개발되었습니다. 현장조사시스템은 공간 데이터만 시스템에 맞게 가공하고 적용함으로써 시스템에 대한 재개발을 하지 않고 바로 사용할 수 있도록 개발된 제품입니다.

잠시 소개해 드린 현장조사 시스템이나 이 시스템 개발에 사용된 블랙포인트 엔진에 대해 관심 있으신 분은 지오서비스로 문의하시기 바랍니다.