G.I.S Developer, 개발자 김형준(Dip2K)  
Front Page
Notice | Keyword | Tag | E-Mail | Guestbook | Admin | Write Article   
 
GIS 개발/GIS Working History에 해당하는 글 40건
2010/06/22   DuraMap-Xr의 공간 데이터 편집 기능에 대한 간단한 시연 (1)
2010/06/16   단순한 파일 복사인데 왜 메모리 사용량이 계속 올라갈까? (6)
2010/06/03   DuraMap-Xr로 만든 지도 스타일 샘플 이미지들..
2009/12/23   Xr로 만든 지도 이미지 세번째.. (1)
2009/12/20   Xr로 만든 간단한 지도 이미지.. (2)
2009/11/15   지도 엔진의 라벨 회전 기능 (2)
2009/10/31   WKB(Well-Known Binary) Format
2009/09/16   GIS 표준 GML/KML/WMS/WFS에 대한 요약 (10)
2009/06/26   분석 결과와 배경 지도 (4)
2009/06/25   타게팅(Targeting)
2009/05/27   개발 맵 엔진, Kernel Density 그림 개선 (2)
2009/05/11   가중치 최소 비용 경로 분석을 이용한 차량 이동 시간
2009/04/02   가중치 최소 비용 경로 분석(Weighted Lowest Cost Path Analysis) (5)
2009/03/19   IDW 구현에 대한 실행 결과 (5)
2009/02/26   개발중인 맵 엔진으로 표현한 통계 지도 (2)
2009/02/11   카텍좌표로부터 GoogleMap 이미지 다운로드 (40)
2009/02/02   개발중인 맵 엔진을 이용해 만든 지도 (2)
2008/09/16   폴리곤에 높이를 줘 표현하기
2008/09/02   개발중인 맵 엔진의 기능 추가 : 높이값을 가진 폴리곤 데이터의 입체화
2008/08/28   개발중인 맵 엔진의 지도 서비스 서버의 구조
2008/07/19   이미지 기반과 벡터 기반 지도 서비스의 적용 범위 (5)
2008/06/19   공간검색 알고리즘 문서 (2)
2008/03/17   개발중인 맵 엔진에 전국 등고선 데이터 올려본 화면
2007/11/28   밀도계산 in ArcGIS
2007/08/08   Density(밀도) Analysis
2007/06/18   GIS Korea 2007에서 GeoGraph 발표
2006/11/13   동적화소변화율을 고려한 움직이는 물체검출
2006/11/05   OpenCV를 이용한 움직이는 물체 검출하기
2006/10/20   Image Processing 용어
2006/09/25   Geometry의 공간연산 (2)


2010/06/22 10:42 2010/06/22 10:42
DuraMap-Xr의 공간 데이터 편집 기능에 대한 간단한 시연

DuraMap-Xr에 대한 공간 편집 기능 문의가 있어 간단하게 만들어 본 동영상을 공유해 봅니다. SHP 파일에 대한 편집 내용으로.. 크게 새로운 공간 데이터 추가와 기존 데이터의 편집 기능을 소개하고 편집 기능에서 매우 활용도가 큰 정점(Vertex)와 선분(Edge)에 대한 스냅(Snap) 기능과 편집된 이력에 대한 Undo/Redo에 대한 시연 내용으로 구성되어 있습니다.

DuraMap-Xr은 PC에 저장된 공간 데이터뿐만 아니라 공간 데이터 서버에 존재하는 공간 데이터에 대해서도 편집이 가능합니다. 동영상의 용량 문제로 급하게 만들어 충분한 내용을 전달하지 못해 아쉽지만.. 위의 시연 내용으로 DuraMap-Xr에 대한 공간 데이터 편집 기능에 대한 튜토리얼을 작성해 보다 자세하게 소개하도록 할 예정입니다..

이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag : ,
2010/06/16 21:42 2010/06/16 21:42
단순한 파일 복사인데 왜 메모리 사용량이 계속 올라갈까?
이번에 타일맵을 생성해 납품하면서.. 최종 테스트를 위해 실서버로 타일맵 파일을 복사해야 하는데.. 이게 머리가 아픕니다.. 몇가지 시행착오로 인해 4일정도를 허비했는데요..

시행착오라 함은.. 먼저 타일맵 파일을 서버로 바로 FTP로 전송했던 시행 착오.. 그리고 타일맵을 압축해서 전송하려고 압축을 시도 했던 시행 착오.. 외장형 하드를 하나 더 구입해 이 하드에 복사한 후 서버가 설치된 IDC에 가서 복사하려고 했던 착오.. 이네요..

먼저 가장 근본적인 상황은.. 타일맵 파일들의 개수와 크기입니다. 정확히 말하면 크기는 별 문제가 아닙니다. 실제 용량은 100기가 정도되는데.. 이 정도면 3~4시간 정도면 복사하고도 남습니다. 문제는 파일 개수입니다. 매우 작은 크기(4kb~25kb)의 파일 개수가 5천8백만개정도됩니다..

파일들을 바로 FTP로 전송을 시도 했다면 소요되는 시간은 20일정도.. zip으로 압축하는 것은.. 수천만개의 파일을 하나의 zip으로 압축하는건 않되었고.. 백만개씩 나눠 압축하는 것은 손도 시간도 너무 많이 필요한 작업이고.. 외장형 하드에 복사하는 것이 가장 옳바른 판단이였는데.. 이 복사하는 시간에 대한 예상 시간은 2일로 산출되더군요..

그래서 어제 복사를 중지하고.. 오늘 아예 서버의 하드를 떼왔습니다. 그리고 오늘 11시 경부터 도스 시절부터 제공해 오던 XCopy를 이용해 복사를 하고 있습니다. 만약 XCopy가 아닌 드레그&드랍으로 했다면... 이거 실패합니다. 여하튼.. 이런 저런 시행착오 끝에 진행을 하고 있는데요.. 또 불안감이 엄습하네요...

사용자 삽입 이미지

보시면 메모리와 시스템의 핸들이 이상합니다.. 처음 시작할때 메모리 사용량은 2.30GB였는데요. 지금은 무려 4.92GB까지 올라갔습니다. 핸들 역시 눈에 띠지 않게 조심스럽게 올라가고 있습니다. 단순한 파일 복사일 뿐인데... 왜 이렇게 메모리 누수가 발생하는건지..... 이대로라면 새볔녁에 예전 격었던 시행착오처럼 실패할 가능성이 보입니다..

이대로 걸어 놓고 퇴근하려고 하는데.. 신경쓰이게 말이죠... 단순한 파일 복사.... 이런 단순한 파일 복사가 수천, 수백만번 수행... 메모리 누수? 복사할 파일을 열고 않닫나? 이건 아닐텐데... 왜? 메모리가 계속 올라가지... 뭐 이런....... 여하튼.. 별 뾰족한 수가 없습니다.. 그냥 맡길수밖에요....

이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

2010/06/03 00:50 2010/06/03 00:50
DuraMap-Xr로 만든 지도 스타일 샘플 이미지들..
좀더 자세히 말씀드리면.. DuraMap-Xr로 만든 BeautifyMap-Xr로 디자인된 지도 이미지입니다. 제공받은 데이터를 가공하지 않고 그대로 사용하여 BeautifyMap-Xr의 기능을 십분발휘하지 못해 아쉬운 면이 크지만.. DuraMap-Xr(http://www.gisdeveloper.co.kr/notice/574)로 이런 느낌의 지도 스타일을 사용자에게 제공할 수 있다는 점을 공유해 봅니다.

BeautifyMap-Xr은 이렇게 제작된 스타일의 지도를 사용자가 원하는 크기의 타일 이미지로 조각내 저장하는 기능을 가지고 있습니다. 이런 타일 이미지는 추후 웹이나 모바일 환경에서 지도 서비스를 위한 데이터 파일로 활용됩니다. 참고로 구글이나 다음, 네이버 등과 같은 PC 기반의 지도 서비스에서는 타일 이미지 크기를 256x256이며 모바일 환경에서는 이보다는 작은 64x64나 32x32 등으로 지정되어 제작됩니다..

끝으로 DuraMap-Xr의 기술지원과 BeautifyMap-Xr의 사용에 대해서는 지오서비스(hjkim@geoservice.co.kr)로 문의하시기 바랍니다. (문의하실때는 문의하시는 분의 성함, 소속된 단체명 정도는 간단하게 남겨주시기 바랍니다)
 
사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag : ,
2009/12/23 20:59 2009/12/23 20:59
Xr로 만든 지도 이미지 세번째..
요즘 일하다가 머리도 식힐겸해서 Xr을 기반으로 해 만든 지도 이미지 저작툴로 이미지를 만들어 봅니다. 하나는 어제 만들어 본거고.... 또 하나는 오늘 만들어 본 이미지입니다. 살짝 살펴보시면 좋겠습니다.

첫번째 이미지는 총 3개의 shp 파일을 이용해 만든 지도 이미지입니다. 데이터는 가공하지 않은... 그대로 사용했습니다. 건물, 실폭도로, 도로중심선 shp 파일을 이용하였습니다.

사용자 삽입 이미지

사용자 삽입 이미지

그리고 위의 이미지는 단 하나의 shp 파일을 이용해 만든 이미지로 서울시 행정구 shp 입니다. Xr 맵엔진은 라벨에 다수의 필드명을 지정해 표현식을 지정할 수 있도록 되어 있습니다. 이런 기능을 이용해 단 하나의 shp 파일을 이용해서도 행정구역 이름에 대해 한글명과 영문명을 함께 표현할 수 있습니다.

이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag : ,
2009/12/20 17:29 2009/12/20 17:29
Xr로 만든 간단한 지도 이미지..
서울시의 구에 대한 shp 파일 하나만을 가지고 Xr 맵엔진에서 표출해 본 지도 이미지 입니다. 디자이너를 위한 지도 데코레이션 툴을 만들고 있는 중에... 머리도 복잡하여 한번 테스트 겸 간단히 만들어 보았는데.. 아직은 많은 부분에서 밋밋한 분위기입니다만.. 좀더 다양한 레이어와 POI 그리고 아이콘 등으로 장식을 하면 보다 이쁜 지도 이미지가 나오지 않을까 기대를 해봅니다.
사용자 삽입 이미지

지금 개발하고 있는 디자이너를 위한 툴은 Xr 맵엔진을 기반으로 해 만든 툴로써 추후 지도 타일 이미지를 만들기 위한 툴입니다. 추후 개발할 RIA 기술을 적용한 엔진에서 사용할 지도 이미지를 만들기 위한 목적으로 개발되고 있습니다.

참고로 이툴에 사용되는 Xr  클라이언트 맵엔진은 오픈소스를 목적으로 개발하고 있습니다. 추후 어느 정도 안정화되고 가닦이 잡히면 소스를 공개할 예정입니다. 소스를 공개하는 이유는 향후 보다 많은 분들의 의견 수렴을 받기 위함입니다. 기능적인 부분에서 뿐만이라 지도 이미지의 비주얼적인 모습에 대한 조언을 듣고 적당하다면 적극적으로 수렴할 계획입니다.

그리고 아래는 도로 중심선(Polyline) 데이터에 대한 하나의 shp 파일을 이용해 만들어본 지도 이미지입니다.

사용자 삽입 이미지

참고로 아래는 예전에 올렸던, Xr 맵 엔진을 이용해 만든 지도 이미지입니다. 이 글과 연관이 깊어 다시 한번 함께 올려봅니다.
사용자 삽입 이미지


이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag : ,
2009/11/15 20:47 2009/11/15 20:47
지도 엔진의 라벨 회전 기능
오늘 또 김연아의 무결점 환상 연기.. 단 한차례의 NG도 없는.. 역대 최고의 점수를 획득했습니다. 정말 자랑스럽습니다..!

GIS 데이터를 그래픽 요소와 문자 요소를 기준으로 살펴보면 도형 데이터와 속성 데이터로 구분됩니다. 이때 도형에 대한 속성을 화면상에 표시하는 것을 라벨(Label) 또는 주기(Annotation)이라고 하는데.. 이 라벨을 표현하는 방법 또한 다양합니다. 단순히 속성 값을 표시하는 것에서 부터.. 다수의 속성을 표현식으로 조합하여 표현하는 방식과 멀티 라인 속성 방식.. 그리고 폴리라인을 따라 회전하는 표현 방식이 있습니다.

사용자 삽입 이미지

위의 이미지는 Xr 맵엔진에서 각 도형에 해당되는 속성을 도형에 따라 회전하며 라벨 텍스트를 표현하는 방식입니다. 이런 표현 방식은 위의 이미지처럼 도로명을 표현할때 매우 효과적인 방식입니다. Xr 맵 엔진은 지도 타일 이미지를 전문적으로 렌더링하기 위한 1차 목표를 추구하기 위한 맵 엔진입니다. 최근 RIA를 기반으로 한 지도 엔진 개발을 최종 목표로 하고 있는 프로젝트에서 Xr 맵 엔진은 첫 관문으로써 매우 중요한 의미를 가지고 있습니다.

이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag : ,
2009/10/31 23:43 2009/10/31 23:43
WKB(Well-Known Binary) Format

공간 데이터를 처리하는 DBMS는 포인트, 폴리라인, 폴리곤과 같은 공간 좌표 데이터를 효율적으로 저장하기 위해 BLOB 타입으로써 WKB라는 형태로 저장합니다. 개발하고 있는 지도 렌더러를 위한 맵엔진(코드명: Xr)에서 사용할 수치지도 데이터 포맷에 대해 고민하던 차에... GIS 데이터 표현의 범용 표준 중에 하나인 WKB에 대한 자료를 정리해 보았습니다.

WKB, 즉 Well-known Binary는 OpenGIS 스펙에 의해 정의된 지오메트리 값을 표현하기 위해 사용됩니다. KWB는 지오메트리 WKB 정보를 담고 있는 BLOB 타입의 값으로 표현되는 바이너리 스트림으로써 지오메트리 데이터를 상호간에 교환하기 위해 사용됩니다. WKB는 1바이트의 부호없는 정수와 4바이트의 부호없는 정수 그리고 8바이트의 배정밀 소수(IEEE 754)를 사용합니다. 여기서 1바이트는 8비트입니다.

예를 들면... WKT인 POINT(1 1)을 동일한 WKB로 변환해 본다면... 다음과 같은 총 21개로 구성된 연속된 바이트입니다.

앞의 연속된 바이트를 해석 해보면... 다음과 같습니다.

사용자 삽입 이미지

즉, 첫번째 1바이트의 값이 1이면 바이트 정렬이 Little-Endian이며 0이면 Big-Endian이라는 의미입니다. 그리고 다음 2바이트는 지오메트리 타입으로써 현재까지 제안된 타입은 총 7개로써 Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon 그리고 GemetryCollection입니다. 끝으로 포인트의 좌표인 X와 Y 값이 각각 8바이트씩 오게됩니다.

앞의 예는 Point 타입에 대한 예이며 다른 지오메트리 타입에 대해서, 보다 직관적이고 효율적으로 파악하기 위해 C언어의 구조체 형식으로 보면 다음과 같습니다.

바이너리는 크기면에서 데이터를 매우 최적화된 형태로 저장할 수 있는 포맷입니다. GIS 엔진을 설계하고 개발할때 자체 엔진에 특화된 데이터 구조를 설계하는 것 대신에 이러한 표준을 수용할 경우 얻을 수 있는 이점은 매우 크다고 할 수 있겠습니다.

이 글의 일부는 다음 URL에서 참고하였습니다.
http://dev.mysql.com/doc/refman/5.0/en/gis-wkb-format.html


이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag :
2009/09/16 15:56 2009/09/16 15:56
GIS 표준 GML/KML/WMS/WFS에 대한 요약
GML (Geography Markup Language)
http://www.opengeospatial.org/standards/gml

GML은 지리적 특성을 표현하기 위한 XML 문법입니다. GML은 인터넷에서 지리 데이터 송수신을 위한 개방된 교환 포맷임과 동시에 지리데이터 시스템을 위한 모델링 언어로써 사용됩니다. 문법에 기반한 대부분의 XML과 같이 두 부분으로 나눠져 있습니다.

  1. 문서의 설명 부분
  2. 실제 데이터 부분

GML 문서는 GML 스키마를 사용하여 기술됩니다. 이는 사용자와 개발자에게 포인트, 라인 그리고 폴리곤을 포함하는 일반적인 지리데이터셋을 설명할 수 있도록 합니다. 그러나 GML의 개발자들은 GML의 확장을 특화시키는 커뮤니티 지향적인 어플리케이션 스키마를 정의하기 위한 커뮤니티 작업을 상상합니다. 어플리케이션 스키마를 사용하여 사용자는 일반적인 포인트, 라인, 폴리곤을 길, 고속도로 그리고 다리로써 참조할 수 있습니다. 만약 커뮤니티의 모든 사람이 동일한 스키마를 사용하는 것에 대해 동의한다면 데이터를 쉽게 교환할 수 있으며 도로에 대한 라인을 표시할때 도로로 표시할 수 있게 됩니다.

KML(Keyhole Markup Language)
http://earth.google.com/intl/ko/userguide/v4/ug_kml.html
http://en.wikipedia.org/wiki/Keyhole_Markup_Language

KML은 현재 또는 미래의 웹 기반의 2차원과 3차원 브라우저에서 지리 데이터의 주기와 가시화를 위한 XML 기반의 스키마입니다. KML은 Google 어스, Google 지도 및 기타 응용 프로그램에 표시하기 위해 점, 선, 이미지, 다각형 및 모델과 같은 지형 기능을 모델링하고 저장하기 위한 XML 문법 및 파일 형식입니다. KML을 사용하여 Google 어스 및 Google 지도의 다른 사용자와 장소 및 정보를 공유할 수 있습니다. KML은 구글어스에서 사용하기 위해 개발되어졌으며 원래 이름은 Keyhole Earth Viewer였습니다. Keyhole 사에서 만들어졌으며 이 회사는 2004년에 구글로 인수되었습니다. 현재 KML은 오픈 GIS 컨소시엄의 국제 표준입니다. KML을 표현하고 편집할 수 있는 첫번째 프로그램은 구글어스이며 KML을 지원하는 툴이 다양하게 제공되고 있습니다.

참고 : KMZ 파일은 KML 파일의 압축된 버전입니다.

WMS(Web Map Service)
http://en.wikipedia.org/wiki/Web_Map_Service

WMS는 GIS 데이터베이스의 데이터를 사용하는 지도 서버로부터 생성되어진 지오레퍼런싱된 지도 이미지를 서비스하기 위한 표준 프로토콜입니다. 스펙은 1999년에 오픈 GIS 컨소시엄에서 처음 개발어 공개되었습니다.

WMS는 다양한 요청 타입을 가지고 있으며 WMS 서버는 다음 2가지 요청 타입을 제공해야 합니다.

  1. GetCapabilities : WMS에 대한 인자값과 이용가능한 지도 레이어 목록 반환
  2. GetMap : 해당 인자에 대한 지도 이미지

다음은 WMS 서버에서 옵션으로 제공하는 요청 타입입니다.

  1. GetFeatureInfo
  2. DescribeLayer
  3. GetLegendGraphic

WMS는 클라이언트가 인터넷으로부터 접근할 수 있는 지도와 GIS 데이터 포맷을 폭넓게 지원합니다. WMS를 지원하는 주요 상업적인 GIS 및 맵핑 소프트웨어는 다음과 같습니다.

  • Bentley Systems's GIS products
  • ESRI's ArcGIS products
  • MapInfo Professional
  • GeoMedia
  • Manifold System
  • Google Earth

또한 WMS를 지원하는 오픈소스 제품군은 다음과 같습니다.

  • Quantum GIS
  • uDig
  • OpenJUMP
  • MapGuide Open Source
  • NASA World Wind
  • GRASS GIS
  • gvSIG
  • OpenLayers

WFS(Web Feature Service)
http://en.wikipedia.org/wiki/Web_Feature_Service

WFS는 플랫폼에 독립적인 호출을 이용하여 웹에서 지리데이터에 대한 피쳐(feature)를 요청할 수 있는 인터페이스를 제공합니다. WMS가 단순히 지도 이미지만을 서비스하는데 반해 WFS는 공간 분석 등과 같은 연산을 위해 필요한 데이터를 서비스 합니다.

WFS의 서비스 기능은 다음과 같습니다.

  1. 공간 또는 비공간 조건에 기반한 피쳐(feature)의 쿼리
  2. 새로운 피쳐 생성
  3. 피쳐 삭제
  4. 피쳐 업데이트

가장 기본적인 WFS 서버는 반드시 공간 또는 비공간 조건에 기반한 피쳐의 쿼리 기능을 지원해야 하며, 트랜젝션 WFS(WFS-T)는 피쳐의 생성과 삭제 그리고 업데이트를 제공합니다.


이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag :
2009/06/26 16:22 2009/06/26 16:22
분석 결과와 배경 지도

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

사용자 삽입 이미지

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

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

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


이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag : ,
2009/06/25 15:17 2009/06/25 15:17
타게팅(Targeting)
현재 작업하고 있는 지도 엔진(OpenMate XGE)에.. 각 점포가 고객을 끌어 들이는 영향권을 분석하는 기능을 개발해 보았습니다.

예를 들어서 여러개의 점포가 있다고 하면, 고객들이 어느 마트에 가서 구매를 할 것인지에 대한 분석이라고도 해석할 수가 있습니다. 또 다른 말로.. 각 점포가 고객들을 끌어 들이는 흡인력이 미치는 영향권이라고도 설명할 수 있겠고.... 이처럼 다양한 의미로 해석할 수 있는 기능이 바로 타게팅(Targeting)입니다. 이때.. 고객을 끌어들이는 다양한 인자가 존재합니다. 예를 들어서.. 유동인구, 배후인구, 교통시설, 생활수준지수 등등 매우 다양한 인자가 존재합니다.

아래의 화면은 현재 XGE 지도엔진을 이용해 만든 분석툴에서 간단히 분석해본 Targeting 화면입니다.

사용자 삽입 이미지

위의 결과는, 서울시에 가상으로 5개의 점포를 위치하고.. 점포가 고객을 끌어들이는 인자로써 접근성 인자만을 고려한 경우입니다. 즉, 고객이 가장 빠르게 접근할 수 있는 점포가 어디인가.... 입니다. 접근성에 대한 가중치는 도로망도를 라스터화하여 사용됩니다. 물론 도로망도는 속도라는 속성값이 있어 이 속성값을 이용해 라스터화됩니다.

이 분석 기능의 응용예는 무엇일까요? 만약 새로운 도로가 생길 경우... 기존의 점포에 미치는 영향을 분석해 본다든지.... 새로운 경쟁 점포가 생기거나 기존의 점포가 폐업했을 때... 또 어떤 영향을 미치는지 등등... 매우 다양한 분야에 응용할 수 있습니다.

근무하는 회사가 비니지스 GIS 분야이다보니.. 비니지스쪽으로 타게팅을 설명했으나... 다양한 가중치에 대한 공간 분석의 응용부분에서 이 타겟팅이 활용될 수 있습니다. 예를 들어, 토목에서, 공간상에 배수구가 다수 존재할 경우... 비가 올때 빗물이 어느 배수구로 집수 되어 빠져 나가느냐... 로 응용해 분석할수가 있습니다. 이때... 사용되는 가중치는.. 물이 흘러가는데 영향을 미치는 경사도와 표고, 그리고 땅이 물을 얼마나 흡수하느냐... 등을 생각해 볼 수 있습니다.

이상으로 짧은 지식이나마... GIS를 이용한 타겟팅에 대한 설명을 마칩니다.

이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag :
2009/05/27 13:24 2009/05/27 13:24
개발 맵 엔진, Kernel Density 그림 개선

개발 맵 엔진의 확장 기능 중에 밀도 분석에 대한 기능이 있습니다. 지도 엔진을 설계할 당시에 파일럿 성격으로 만들고, 이를 별다른 고민이나 개선없이 확장 기능 단으로 수용을 해서인지... 여러가지로 문제가 있었나 봅니다. 문제가 꽤 되는데.... 그 중에 2가지만 언급한다면...

  • 적은 포인트의 개수에 대해 밀도 그림으로써 의미가 없는 결과를 냄
  • 기존에 존재 하는 GIS 밀도 분석 기능(ArcGIS)에 비해 속도가 매우 느림

먼저 첫번째에 대해서는 이런 저런 고민으로 절충안을 내어 개선을 했습니다. 실제로 이전의 개발 맵 엔진의 밀도분석에 대한 확장 기능으로 포인트 수가 10개정도 되는 공간을 대상으로 수행해 보면, 전혀 엉뚱한 결과가 도출되었습니다. 아래는 개선되기 이전의 결과 입니다.

사용자 삽입 이미지

그리고 아래는 동일한 해상도, 동일한 검색반경을 이용한 개선된 밀도 분석에 대한 결과 그림입니다.

사용자 삽입 이미지

그리고 아래의 두 그림은 개선된 밀도 분석 기능을 통해 만들어본 실제 의미있는 포인트에 대한 밀도 분석입니다. 여기서의 의미는 서울시에 존재하는 아파트 중 매매가가 6억 이상인 아파트에 대한 포인트로써, 데이터는 오픈메이트에서 보유하고 있는 데이터입니다. 실제로 국내에서 가장 정확하고 중요한 인문/사회에 대한 데이터와 특히 아파트에 대한 데이터는 오픈메이트가 보유하고 있는 데이터가 최고가 아닌가 싶습니다.

사용자 삽입 이미지

사용자 삽입 이미지

끝으로, 공간 상의 밀도 분석은 공간 상에 의미 있는 데이터가 어떤 분포 양상을 띠는지에 대한 경향을 분석하는 기능으로, 비지니스 분야의 GIS를 활용한 분석에서는 매우 큰 비중을 차지 하고 있는 분석 기능입니다.

아..! 그리고 속도에 대한 개선은 아직 이루지 못했습니다. 하지만 일단 개선할 곳을 찾기는 했는데.. 개선하기가 약간 복잡하여 추후 문제가 될 경우 개선할 예정입니다.

이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag : ,
2009/05/11 22:57 2009/05/11 22:57
가중치 최소 비용 경로 분석을 이용한 차량 이동 시간
가중치 최소 비용 경로 분석을 이용하여 특정 위치에 대해 차량으로 이동할 경우 소요되는 시간에 대한 영역을 분석하는 기능에 적용해 보았습니다. 가중치는 차량이동속도로 하였습니다. 절차는 다음과 같습니다.

사용자 삽입 이미지

먼저 벡터 데이터로 도로망에 대한 폴리라인 데이터와 한강 수계에 대한 폴리곤 데이터를 추가합니다.

사용자 삽입 이미지

그리고, 이 두 벡터 데이터를 라스터 데이터로 변환합니다. 이때 도로망에 대한 셀값은 차량의 이동속도 값을 주는데, 여기서는 30km/h로 합니다. 그리고 수계는 차량이 들어갈 수 없으므로 NULL 값을 줍니다. 그리고 그 이외의 셀들은 도보 속도인 4km/h로 줍니다. 변환한 위의 화면을 확대해 보면 라스터로 변환된 것을 확인할 수 있습니다.

사용자 삽입 이미지

바로 파랑색이 차도이며 30의 값을 가지고, 회색은 4의 값을 가집니다.

사용자 삽입 이미지

이제 목적지가 되는 포인트를 먼저 추가하고 가중치 최소 비용 경로 분석을 수행합니다. 목적지 포인트는 화면상에 노란색 원이 그에 해당하고, 가중치 최소 비용 경로 분석에 대한 결과는 위처럼 회색계열의 새로운 라스터 데이터 레이어가 생성됩니다. 분석된 셀값에는 거리에 대한 값이 반영되어 있으므로 이 거리의 값을 제거하기 위해 셀의 크기로 나누어 시간 값만 남게 합니다.

최종적으로 등고선 추출 기능(개발 맵 엔진의 확장 기능 중의 하나)를 이용하여 15분과 35분에 대한 차량이동시간을 추출한 화면이 아래와 같습니다.

사용자 삽입 이미지

바로 위의 그림에서 추출된 영역이 목적지 포인트에 도달하는데 소요되는 최대 시간으로 각각 최대 15분이 소요되는 영역과 35분이 소요되는 영역을 나타내고 있습니다.

이 가중치 최소 비용 경로 분석은 적용하는 가중치에 따라 공간상의 이동에 대한 매우 다양한 분야에 적용할 수 있는 GIS 공간 분석 방법입니다.

이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag : ,
2009/04/02 13:08 2009/04/02 13:08
가중치 최소 비용 경로 분석(Weighted Lowest Cost Path Analysis)
공간상의 어떤 지점을 통과하기 위해 드는 비용 값이 있다고 해 보겠습니다. 일단 어떤 지점을 통과한다는 것은 그 공간의 거리가 길수록 통과하는데 더 많은 비용이 들고, 거리가 짤을 수록 통과하는데 더 작은 비용이 듭니다.

여기에... 이 거리에 대한 비용은 기본적으로 반영하되, 그 지점을 통화하는데 드는 또 다른 비용을 추가적으로 고려하여, 임이의 지점에서 어떤 특정한 지점으로 이동할때 가장 최소의 비용이 드는 경로를 분석해 보는 것을 고민해 볼 필요가 있습니다.

여기서 또 다른 비용은 그 대상이 되는 분석에 따라 매우 다양한데, 쉽게 생각해볼 수 있는 것이 지형의 경사(Slope)입니다. 예를들어서, 노약자가 어느 지점에서 특정한 지점으로 이동할때... 단순히 가장 짧은 거리가 아닌 지형이 좀더 완만~한 경로를 선택해 가는것이 효율적이라 할 수 있겠습니다.

이 예에서 지형의 강사값이 바로 어느 지점을 통과하는데 드는 기본적인 비용인 거리에 대한 가중치로써의 역활을 한다는 점에서.... 이러한 분석을 "가중치 최소 비용 경로 분석(Weighted Lowest Cost  Path Analysis)"이라고 이름을 붙일 수 있겠습니다.

간단히 WLCP라고 하는 이 분석은 공간을 대상으로 하는 GIS 분석에서 매우 가치 있게 활용됩니다. 간단한 예로써 어떤 고객이 자신이 살고 있는 집에서 주위의 마트 중에 어느 마트에 갈것인지를 결정하거나 예측하는 경우를 생각해 보겠습니다.

사용자 삽입 이미지

위의 그림은 고객(화면 가운데의 용문동에 위치)이 갈 수 있는 주위의 4개의 마트를 표시한 것입니다. 고객과 마트의 거리만을 놓고 볼때 D 마트가 가장 가까워 고객은 D 마트로 방문할 가능성이 가장 큽니다.

하지만 고객은 이처럼 단순히 거리만 가깝다는 이유로 꼭 그 마트를 방문하지는 않습니다. 여기에는 다양한 변수가 존재하는데, 그 변수는 해당 마트까지 가는 것까지의 교통혼잡지수나 마트가 존재하는 지역의 문화 수준이나 생활 수준, 또는 해당 마트가 생필품을 주로 판매하는지, 아니면 고가의 사치품을 주로 판매하는지 등과 같은 변수가 작용하여, 고객은 자신이 방문할 방문할 마트를  결정하게 됩니다. 이러한 교통혼잡지수와 문화 수준, 생활 수준 등이 바로 WLCP 분석을 위한 가중치가 됩니다.

WLCP의 근본적인 필요성인, 최소의 경비가 소요되는 길을 찾는 것 뿐만 아니라.. 이 방법을 응용하여 길을 찾는 것이 아닌 반대로.. 어느 지점에 마트를 세워야 하는지 등과 같은 최적입지 분석이나 최적입지에 세워졌는지에 대한 검증 분석에도 충분히 활용될 수 있습니다. 문제는 얼마나 다양하고 정확하며, 꼭 필요한 가중치 변수를 사용하느냐가 문제이며.. 이 변수 선택의 몫은 이 변수들에 대해 가장 잘 알고 있는 해당 분야의 전문가의 몫일 것입니다.

만약 기회가 닿는다면, 개발 맵 엔진에 이 WLCP 분석을 확장기능으로써 개발하고, 간단히 어떤 지점에서 목적지까지  가장 경사가 완만한... 최단 거리를 구하는 예를 통해 검증해 보도록 하겠습니다.

이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag :
2009/03/19 23:13 2009/03/19 23:13
IDW 구현에 대한 실행 결과
먼저 입력 데이터는 아래와 같습니다. 15개 정도 되는 포인트 데이터로 각각 값을 가지고 있습니다. 이제 나머지 지점에 대해서도 IDW를 이용해 값을 예측해 보도록 하겠습니다.

사용자 삽입 이미지

먼저 IDW 공식에서 power 파라메터의 값을 0.9와 1.2, 2.6, 4.0으로 산출한 결과입니다.  보간된 지점은 색상으로 표시하였습니다. 값이 높은 지점은 완전 불투명한 빨강색, 낮은 지점은 완전 투명한 초록색입니다.

먼저 pow = 0.9 인 경우입니다.

사용자 삽입 이미지

IDW 공식을 설명할때 pow값의 범위에 따라 보간된 양상이 다르다... 라고 언급했는데, 이 pow의 값이 달라지면서 어떤 양상을 보이는지 살펴 보시길 바랍니다. 다음은 pow = 1.2 입니다.

사용자 삽입 이미지

그리고 pow = 2.6 입니다.

사용자 삽입 이미지

끝으로 pow = 4.0 입니다.

사용자 삽입 이미지

pow가 클 수록 값이 넓게 퍼지면서 보간되는 모습입니다. 보간할 값의 특성에 따라 알맞은 pow 값을 결정해줘야함을 알 수 있습니다. 끝으로... 위의 IDW 구현에 대한 결과 이미지는 XGE 엔진의 확장 기능 형태로 개발되었습니다. 이미지 결과를 확인하기 위해 IDW 구현에 대해 독자적인 프로젝트로 구현하지 않고 현재 개발중인 맵 엔진을 이용하였습니다. 혹시 IDW를 자신의 프로젝트에 적용하고자 한다면 저에게 멜 주시길 바랍니다. IDW를 구현해 보면서, 이 IDW를 실시간 지형 생성 프로젝트에 적용해도 괜찬은 결과를 얻을 수 있겠다는 생각이 들었습니다. 몇개의 높이값만으로도 결정되지 않은 더 많은 지점의 자연스러운 높이를 쉽게 구할 수 있으니 말입니다.

이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag : , ,
2009/02/26 19:53 2009/02/26 19:53
개발중인 맵 엔진으로 표현한 통계 지도
간단하게 서울시 행정구역도와 가상의 데이터를 이용해서 구성해본 통계 지도입니다. 먼저 첫번째와 두번째는 남자, 여자, 노인이라는 항목에 대한 인구수를 가상의 데이터로 하여 Bar Chart 형식으로 표현한 내용이며 두번째는 동일한 주제로 하여 Pie Chart 형태로 표현한 화면입니다.

사용자 삽입 이미지

사용자 삽입 이미지

그리고 아래, 세번째는 실제 아파트의 밀집 정도를 색상 밀도도로 표현한 것입니다. 그리고 네번째는 표현한 밀집도를 등가선을 추출해 표현한 것입니다. 밀도도와 등가선을 추출하는 기능은 개발중인 맵 엔진에 Plug-In 할 수 있는 별도의 확장 기능 개념으로 개발하였습니다.

사용자 삽입 이미지

사용자 삽입 이미지

아래는 좀더 좁은 간격으로 등가선을 딴 결과 화면입니다.

사용자 삽입 이미지

이외에도 개발중인 맵 엔진를 이용하여 지도 위에 다양한 형태의 통계치를 표현할 수 있습니다.

이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag : ,
2009/02/11 07:11 2009/02/11 07:11
카텍좌표로부터 GoogleMap 이미지 다운로드

2009년 2월 11일 변경된 구글지도서버의 내용을 반영해, 정상적으로 작동하도록 하였습니다. 소중한 정보를 제공해준 이사돌이님께 감사를 드립니다. E-Mail이나 블로그 링크를 공개하지 않으셔서 이 자리를 통해 감사의 말씀을 드립니다. 또한 소스까지 공개합니다. 아무쪼록 필요하신 분에게 도움이 되시길 바랍니다.

구글에서 제공하는 구글맵 OpenAPI에 대한 관심이 저를 제외하고 매우 뜨거웠던 모양입니다. 관심을 갖게된 배경은 회사에서 개발하고 있는 엔진에 다른 회사에서 제공하는 OpenAPI를 통해 제공하고 있는 지도를 적용해보면 어떨까 하는 생각에서 접근을 하게 되었습니다. 구글맵을 통해 OpenAPI를 접해보는 순간... 머리속에 하얗게 되는것을 느꼈습니다. 웹이라면 단순이 html 정도와 자바스크립트 그리고 근사한 이미지나 플래시로 치장하는게 전부라고 생각했기 때문입니다. OpenAPI는 많은 사람들에게 공개된 API인지라 사용하기가 매우 쉬웠습니다만, 개발자로써 내부적으로 어떻게 구현했느냐를 모르니 참... 우울해지더군요. 바로 자바스크립트 관련 책을 주문하고 OpenAPI와 AJAX와 같은 흐름을 대표하는 Web2.0에 찬찬히... 개발자로써 접근을 시도해 보고자 다짐하게 되었습니다.

뭐 여튼... 처음으로 돌아가, 원래의 목적을 완수하고 위해.. 구글맵을 엔진단에 통합하는 방법을 연구하던 중에, 그 중간 결과로 만든 것을 소개해 드릴겸해서 글을 작성합니다. 구글맵은 경도와 위도값을 주게 되면 그 지점에 대한 이미지를 던져주는데, 이 이미지의 크기는 256 x 256 입니다. 이 이미지를 타일이라고 합니다. 구글맵에는 해상도 레벨에 대한 개념이 있습니다. 1~18 단계로 되어 있고 1단계는 하나의 타일에 전세계가 보입니다. 18단계는 최대로 확대한 타일이미지로 18단계에 해당되는 타일의 개수는 엄청나겠지요. 이런 구글맵에서 제공하는 지도를 활용하기 위해서는 원하는 지점에 대한 타일을 얻는 것이 시발점이 됩니다. 그런데 문제는 이 원하는 지점을 어떤식으로 접근할 것이냐인데... 우리 나라 GIS계에서 사용하는 좌표계는 카텍입니다. 원래 카텍은 CNS 분야에서 사용하는 좌표계인데 원점이 하나인지라... 직각좌표계에서 경위도로 변경할때 원점을 고민할 필요가 없습니다. 바로 이 카텍 좌표를 이용해서 구글이 사용하는 경위도 좌표로 변환하고, 이 변환된 경위도 좌표를 구글맵 서버에게 넘겨줘서 해당 지점의 타일을 받아오면 됩니다.

먼저 구글맵은 WGS84 경위도 좌표계이고 우리나라에서 많이 사용하는 좌표계는 베셀 TM 직각좌표계의 원점을 하나로 한 카텍좌표계입니다. 먼저 경위도 좌표를 카텍과 같은 직각 좌표로 변환하는 방법과 그 반대로 변환하는 방법이 필요한데, 이 부분에 대한 방법은 gTrans라는 Visual Basic으로된 소스를 참고로 하여 작성을 하였습니다. 하지만 이 코드는 카텍좌표에 대한 언급이 전혀 없습니만... 타원체와 투영 그리고 변환공식 등에 대한 기본적인 내용을 숙지 하고 있다면 카텍 좌표계로의 변환은 그리 어렵지 않습니다. 비주얼 베이직으로 된것을 C++으 변환하는게 시간적으로 어려울 뿐이지요. 대학원때 GPS를 분석해보며 살펴봤던 좌표변환이 이제서야 큰 도움이 되더군요. 참고로 카텍 좌표계는 TM128이라고 하는데, 원래 우리나라에서 사용하는 TM 좌표계와 다른 점은 아래와 같고 다른 점은 모두 동일합니다.

central scale : 0.9998 or 0.9999
central meridian : E 128 00 00
Origin Latitude : N 38 00 00
False Easting (meters) : 400000
Falsle Northing (meters) : 600000
위의 내용은 http://blog.naver.com/azzuo/100037410143에서 참조했습니다. 위의 차이점을 활용해서 구글의 WGS84 경위도 좌표를 카텍좌표계로 변환하고 또 이 반대로 변환하는 코드를 작성하여 구글서버에 요청을 하여 타일을 받아오는 코드를 작성하였는데... 또 여기서 문제는 원하는 지점(카텍좌표)를 구글이 사용하는 경위도 좌표계로 변환을 하여 구글 서버에게 그 지점의 타일을 요청하는 url을 작성하는 것이 문제입니다. 이에 대한 것은 아래의 GoogleMap, How to Work라는 아티클을 참고하였습니다.


역시 인터넷은 바다입니다. 찾으면 있습니다... 이제 원하는 지점에 대한 타일요청 url을 알았으니 구글맵 서버로부터 쉽게 타일 이미지를 받아올 수 있지요. 이제 실제로 제가 만든 프로그램이 실행되는 모습을 말씀드리겠습니다.

먼저 요청할 지점입니다. 카텍 좌표로 만들어진 지도인데... 제주도와 서울의 여의도 그리고 꼬리 부분에 대한 이미지를 요청해 보겠습니다.
이 세 지점에 대한 좌표가 나타나 있습니다. 이 세 지점의 좌표는 ArcMap에 지도를 올려 놓고 얻었습니다. 이 좌표를 구글맵이 사용하는 WGS84 경위도 좌표계로 변환하고 타일을 요청하는 url을 만들어 구글맵 서버에 요청하면 되는데... 먼저 서울의 여의도 지점을 요청해 보겠습니다.
tstGoogle.exe라는 프로그램을 실행할때 인자로 카텍좌표계로써의 X, Y와 줌레벨(여기서는 13)을 주고 구글서버에게 받아 저장할 타일에 대한 파일명을 주고 실행을 하면 받은 타일에 대한 정보을 출력해주고.. "똥 싸는 중..."라는 메세지와 함께 타일이미지를 저장하게 됩니다. ^^; (최신버전에서는 얌전하게 Downloading으로 변경되었습니다) 아래는 요청해서 받은 타일이미지입니다.


여의도가 담긴 타일을 받았다는 것을 알 수가 있습니다. 이제 나머지 다른 지점에 대해서도 요청을 해서 이미지를 얻어올 수가 있습니다. 아래는 나머지 두 타일에 대한 요청 명령이고 받은 타일 이미지입니다.
tstGoogle.exe 265630 88249 11 d:/제주도.jpg
tstGoogle.exe 541018 385821 5 d:/꼬리.jpg
아래는 tstGoogle 프로그램입니다. 필요하신 분은 사용하시길 바랍니다. 아마도 배치파일을 만들어서 해당 지점의 타일이미지를 긁어 오는 곳에 응용하면 어떨지 싶습니다.


2009년 2월 11일 변경된 구글지도서버의 내용을 반영해, 정상적으로 작동하도록 하였습니다. 소중한 정보를 제공해준 이사돌이님께 다시 한번 더 감사를 드립니다.

아~ 끝으로.. 타일을 보면 요청한 좌표의 지점이 타일의 중앙에 있지 않은데, 구글맵의 타일은 사용자가 요청한 지점이 포함된 타일을 보내준다는 점에 유의하셔야 합니다.

아래의 그림은 제가 만든 프로그램을 이용해서 GoogleMap 서버로부터 타일이미지를 얻어온후 ArcGIS에서 수치지도(Shape)파일과 함께 중첩한 모습입니다. Georeferencing을 위한 2개의 컨트롤포인트(빨강색 십자 심벌)는 제가 만든 프로그램이 계산해준 좌표값입니다.

이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag :
2009/02/02 18:46 2009/02/02 18:46
개발중인 맵 엔진을 이용해 만든 지도
이번에 개발중인 맵 엔진이 적용된 프로젝트에 사용될 지도 모양입니다. 개발자가 아닌 디자이너 분이 지도 색상과 도형 심벌 및 레이어 구성을 했습니다. XGE 지도 엔진으로 만든 XGEyes라는 툴을 이용해 작업을 했고, 모두 개발중인 맵 엔진이 실시간으로 만들어낸 지도 이미지입니다. 한번 살펴보시길 바랍니다.

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag : ,
2008/09/16 19:01 2008/09/16 19:01
폴리곤에 높이를 줘 표현하기

폴리곤에 높이를 줘서 입체적으로 표현하는 방법을 소개합니다. 일단 주어진 폴리곤 데이터는 아래와 같다고 가정을 합니다. 실제 적용된 결과는 http://www.gisdeveloper.co.kr/404 를 살펴보시길 바랍니다.

이 폴리곤에 일정한 높이값을 주어 아래처럼 표현하는 예를 통해 설명하겠습니다.

높이값을 주어 위의 그림처럼 표현하기 위해 옆면과 윗면을 높이값을 이용해 그려준 것 뿐입니다. 매우 간단하지요.. 끝?

하지만 이렇게 매우 단순하지 않습니다. 처음 폴리곤은 4각형이므로 옆면이 모두 4개인데, 이 4개의 옆면을 우리가 바라보는 시선 거리 중 긴것 순서대로 그려줘야 입체적으로 보입니다. 하지만 이것도 문제가 있습니다. 즉, 4개의 면이 모두 보이는게 아니고, 위의 경우는 딱 2개만 보입니다. 즉, 속도 효율성을 위해서 보이는 옆면만을 그리되, 그리는 순서는 시선의 거리가 긴것을 먼저 그려야 합니다. 시선의 거리가 길다라는 의미는 쉽게 말해.. 멀리 있는 옆면을 먼저 그려야한다는 것입니다.

결국 절차는 아래와 같습니다.

  1. 폴리곤을 구성하는 옆면들 중에 보이는 옆면만을 골라 낸다.
  2. 골라낸 옆면 중에 멀리 있는 것부터 순서대로 그린다.
  3. 마지막으로 윗면을 그린다.

먼저 옆면중에서 보이는 면만을 골라 내는 방법은.. 일단 시선축이라는 것을 정의해야 합니다. 시선축은 폴리곤을 구성하는 좌표 중에서 가장 작은 y값을 가진 좌표를 지나는 x축과 평행한 선분입니다.

위의 예 같은 경우는 아래의 그림처럼 시선축(빨간색 선)을 정의할 수 있습니다.

이제 다음으로 폴리곤을 구성하는 각 선분(위의 예는 4개의 선분)에 대해 그 선분의 중점과 시선축과 수직선을 그려 봅니다. 이 수직선을 시선방향선이라고 하겠습니다. 아래의 그림이 폴리곤을 구성하는 하나의 선분(빨간색)의 중심점에서 시선축으로 시선방향선을 그려본 것인데.. 폴리곤을 구성하는 4개의 선분 중에서 2개와 교차하는 것을 알 수 있습니다.

하지만 여기서 중요한 예외 사항이 있는데.. 그것은 처음 기준이 되는 폴리곤을 구성하는 선분과의 중점과 시선축과의 거리(SL)이 선분을 구성하는 시작점이나 끝점과 시선축과의 거리보다 작다면 시선방향선과 교차하지 않는다고 가정을 합니다. 결과적으로 위의 경우는 시선방향선이 2개의 선분과 만나지만 1개만 만나는 것이 됩니다.

아래는 나머지 3개의 선분에 대한 시선 방향선을 표시한 그림들입니다.

시선방향선과 만나는 선분이 2개인 경우

시선방향선과 만나는 선분이 2개인 경우

시선방향선과 만나는 선분이 1개인 경우(예외로 인해 1개의 교차점은 제외)

이를 토대로, 유추를 해보면.. 교점의 수가 홀수인 경우가 보이는 옆면이고 짝수인 경우는 않보이는 옆면이라는 것을 알 수 있습니다.

이제 보이는 옆면을 고르는 것은 끝났고, 두번째 절차인 골라낸 옆면 중에 멀리는 있는 것부터 그리는 것은 골라낸 옆면에 대해 거리값, 위의 설명에서 SL의 값을 이용해 내림차순으로 정렬하여 정렬된 순서대로 옆면을 그리면 됩니다.

그리고 마지막 세번째 절차는 단순히 기존의 폴리곤을 y축으로 높이 값만큼 올려 그려주기만 하면 됩니다.

이해가 되셨는지 모르겠습니다. 이해가 되지 않는 부분에 대해서는 댓글을 통해 물어보시길 바랍니다.
이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag : , ,
2008/09/02 09:37 2008/09/02 09:37
개발중인 맵 엔진의 기능 추가 : 높이값을 가진 폴리곤 데이터의 입체화

꽤 오래전부터 이 기능을 추가해야지 하고 벼르던 차에.. 회사에서 수주한 프로젝트에서 실제로 이 기능이 적용되어야 한다고 하여.. 이제서야 추가하게 되었습니다.

나름대로 만족스럽기는 하지만... 실제 프로젝트에 적용되었을 경우에 한가지 큰 개선이 필요합니다. 그 개선은... 높이값을 가진 폴리곤 레이어가 하나가 아닌 여러개의 레이어로 구성되었을때 여러개의 레이어들의 각 폴리곤들을 옳바른 순서대로 그려내도록 하는 것입니다. 물론 여러개의 레이어를 하나의 레이어로 합쳐 버리면 될 일이지만...

게다가 이 글을 포스팅 하려고 지도이미지를 캡쳐받았는데... 바로 버그가 눈에 띱니다.. =_=;

화면 가운데 쯤... 잠원한신7차 308호.. 옆면이 그려지지 않았네요.. 이 버그를 지금이 아닌, 다음에.. 잡을겁니다..

3일후인, 9월 5일에 버그를 잡았습니다. 원인은 옆면을 그리기 위해 거리값으로 정렬을 해야하는데 동일한 거리값에 대해 기존의 값이 사라져 버리기 때문입니다. 조만간에.. 2차원인 Shape 파일을 위처럼 입체적으로 표현하는 알고리즘을 공개할까 합니다.


이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag :
2008/08/28 11:24 2008/08/28 11:24
개발중인 맵 엔진의 지도 서비스 서버의 구조
잠시 정리하는 차원에서 그려본 현재 개발중인 맵 엔진의 서버측의 구조입니다. 아직 DataSource를 감시하는 Controller Service의 구현이 아직 않된 것과 각 DBMS별로 DB API가 구현되지 않은 것을 빼고 말입니다. 현재는 MySQL에 대한 DB API만 구현되어져 있습니다.  하지만 곧, 아래의 구조대로 구현되리라 봅니다.

요즘 드는 생각이... 개발중인 맵 엔진이 점차 완성되 가는 중간 단계에서 혼자 서는 하기 벅차다는 생각이 자주 듭니다. 개발중인 맵 엔진의 많은 부분이 분리가 되어져 있어져 있서 함께 분담해서 개발했으면 하는 바램과 아래의 경우처럼 각 DBMS 별로 DB API 개발을 누군가 같이 했으면 하는 바램도 무척 큽니다. 또한 XGE가 어느 정도 완성이 되면 분석기능과 같은개발중인 맵 엔진 단에 붙일수있는 확장 기능의 개발이 이뤄져야 하는데, 그때 과연 저 혼자 개발하여 정해진 시간안에 완전한 지원이 가능할까... 하는 걱정이 커져갑니다. 그래서.. http://www.gisdeveloper.co.kr/400 를 보시고 많은 지원을 해주시길..
  • XGE WebService는 XGE Web Server(IIS)에 별도의 스레드로 동작함
  • XGE DataSource는 XGE WebService의 요청에 대한 데이터를 수집해 전달함
  • XGE WebService는 XGE DataSource와 통신하기 위해 IPC 방법 중 PIPE를 사용함
  • XGE DataSource는 추상화된 DB API를 가짐
  • DB API의 기능은 DBMS 연결, 데이터의 읽기/쓰기임
  • 각 DBMS에 대한 DB API는 DB API에서 제공하는 스펙을 따라야하며, 스펙을 만족할 경우 어떠한 DBMS 든지 쉽게 활용할 수 있음
  • XGE DataSource Controller Service는 주기적으로 XGE DataSource의 상태를 점검함
  • 만약 XGE DataSource가 다운되었을 경우, Controller Service는DataSource를 재기동함

이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag : , ,
2008/07/19 19:54 2008/07/19 19:54
이미지 기반과 벡터 기반 지도 서비스의 적용 범위

이 글은 지도 서비스 방법으로 이미지 방식과 벡터 방식에 대한 장단점과 이런 장단점으로 인해 각각의 적당한 적용분야에 대한 개인적인 생각을 써본 글입니다.

초기 지도 서비스는 서버에서 클라이언트로 데이터를 전송해줄 때 좌표를 던져줌으로써 이 좌표를 이용해 지도를 화면상에 그려냈습니다. GIS의 초창기에는 이런 벡터 방식이 주류를 이루었으나, 지금은  이미 만들어 준비된 지도 이미지를 서버가 클라이언트에게 던져주고, 클라이언트는 이 이미지를 화면에 뿌려주는 방식이 대세가 되었습니다. 구글맵이 그렇고.. 콩나물, 네이버, 다음, 야후, MS 등등, 모두가 이미지 방식입니다. 그렇다면 이유는 무엇일까요?

  1. 속도가 빠르다.
  2. 클라이언트 개발이 간편하다.
  3. 클라이언트에 별도의 프록그램 설치(특히 말도 탈도 많다는 ActiveX)가 필요없다.
  4. Web2.0(특히 AJAX 기술)의 트렌드를 충족시킨다.

가장 중요한 것이... 이미지 기반은 벡터 기반에 비해 속도가 빠릅니다. 속도라 함은 클라이언트가 보고자 하는 지역의 좌표(MBR)를 넘겨주면 서버가 해당 지역에 대한 데이터를 찾아 전송해주고 클라이언트가 화면상에 그려주는데까지 얼마나 빨리 처리할 수 있느냐입니다. 벡터 기반의 경우 이런 처리에 대한 전체 흐름은 다음과 같습니다.

  1. 클라이언트는 원하는 지역의 좌표와 지역의 크기(이를 MBR이라 함)를 서버로 전송한다.
  2. 서버는 해당 지역의 데이터를 수집하는데, 데이터는 복잡한 공간검색(R-Tree나 Grid-File과 같은 공간검색 알고리즘 이용)을 사용하며 이 검색 방식은 많은 시간이 소모된다.
  3. 서버는 수집한 데이터를 클라이언트로 빠르게 전송하기 위해 데이터의 크기를 줄일 목적으로 데이터를 압축한다.
  4. 서버가 보낸 데이터가 압축되었다면 클라이언트는 받은 데이터를 압축해제 한다.
  5. 클라이언트는 받은 데이터(좌표, 속성 등)를 이용하고 지도 이미지를 직접 만들어 그린다.
  6. 클라이언트 측의 사용자는 자신이 요청했던 지도를 본다.

다음으로 이미지 기반의 처리 과정을 살펴보면 다음과 같습니다.

  1. 클라이언트는 원하는 지역의 좌표와 지역의 크기(이를 MBR이라 함)를 서버로 전송한다.
  2. 서버는 해당 지역에 대한 이미지를 찾는데, 해당되는 지역에 대한 파일의 찾기는 매우 단순하며 빠른다.
  3. 서버는 이미지를 바로 클라이언트로 전송한다.
  4. 클라이언트는 받은 이미지를 바로 그린다.
  5. 클라이언트 측의 사용자는 자신이 요청했던 지도를 본다.

처리 과정만을 살펴보더라도 벡터 기반에 비해 이미지 기반의 지도 서비스가 당연히 빠를 수 밖에 없다는 것을 알수 있지요.

그렇다면 이처럼 성능 좋은 이미지 기반의 지도 서비스가 아닌 벡터 기반의 서비스가 할 수 있는 기능은 무엇일까요..? 즉, 이미지 기반의 지도 서비스에서는 불가능한, 아니 매우 어려운 기능은 무엇일까요?

  1. 새로운 건물이 생겼을 때나 형태가 변경되었을 경우, 클라이언트에서 지도 편집
  2. 화면상에 표시된 지도에서 원하는 건물을 찍어 그 건물의 상세 내용을 살펴보는 기능
  3. 플롯터와 같은 출력기를 통해 큰 용지(A4 이상)에서 높은 품질의 지도 출력하기
  4. 건물을 제외하고 도로만을 화면상에 보는 것과 같은 원하는 지도 스타일 만들기.
  5. 건물 전용면적이 200평방 이상인 건물만을 화면상에 표시하여 지도 보기.
  6. 지도의 특정 주제를 가지는 요소 그룹을 사용자가 원하는 색상이나 형태로 표시하는 기능.
  7. 등등...

위의 기능이 왜 이미지 기반에서는 거의 불가능하고 벡터 기반에서는 가능한 이유는 무엇일까요? 그것은 단지 현재 보이는 지도에 대한 정보를 이미지 기반은 "이미지"로써만 가지고 있기 때문입니다. 이에 반해 벡터 기반은 지도에 대한 실제 정보로써 "지도 좌표"를 가지고 있다는 점입니다.

이러한 이미지 기반과 벡터 기반의 서로간의 장단점을 놓고 볼때.. 이미지 기반은 클라이언트 PC에 별도의 프로그램 설치 없이 원하는 지역을 빠르게 보여주는 서비스에 적당하며, 벡터 기반은 사용자가 원하는 지역에 대해서 좀더 다양한 기능, 즉 이미지 기반이 제공할 수 없는 기능, 좀더 전문적으로 말해 지도를 좀더 높은 수준에서 활용하고 응용하는 영역, GIS에 적당하다고 할 수 있습니다.


이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag : ,
2008/06/19 09:14 2008/06/19 09:14
공간검색 알고리즘 문서

예전에 찾아서 한번(?) 읽어본 공간검색에 관련된 알고리즘 문서입니다. 깨끗하게 출판된 알고리즘 서적에 나와 있는 것보다 훨씬 더 나은, 더 정확한 정보를 얻을 수 있을 겁니다.

알고리즘은 다음과 같습니다.

  • R*-Tree
  • R-Tree
  • X-Tree

필요하신분은 한번 꼭 살펴보시길 바랍니다. 대부분... 이 알고리즘을 그대로 사용하지 않고 나름대로 약간 변형/응용하여 활용합니다. 참고로 살펴보시고 힌트로써 활용하여 자기 나름대로 적용을 하시길 바랍니다.


이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag : ,
2008/03/17 14:21 2008/03/17 14:21
개발중인 맵 엔진에 전국 등고선 데이터 올려본 화면

www.biz-gis.com 이라는 사이트에서 가보시면, GIS를 이용한 분석기법을 중심으로 해서.. 다양한 GIS 데이터와 GIS 툴에 대한 사용법 등에 대한 글들이 많아, 국내 GIS에 관심이 많은 분들에게 매우 인지도 높은 사이트입니다. 이곳에 전국에 대한 등고선 데이터 SHP를 손쉽게 다운로드 받을 수 있는데요. 그 데이터를 다운 받아 개발중인 맵 엔진에서 올려본 화면입니다. 등고선 데이터 용량이 대략 450메가 정도 됩니다.

이미지를 클릭하시면, 원래 크기로 확대가 되는데, 그 상태로 보시길 바랍니다. 그냥, 기본값으로 Add Layer 했을 뿐인데, 참.. 이쁘게 잘 나온듯합니다~ ^^


이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag : ,
2007/11/28 01:13 2007/11/28 01:13
밀도계산 in ArcGIS

밀도계산의 방식은 Simple 방식과 Kernel 방식이 있습니다. 이 두방식에 대해 ArcGIS에서 처리된 결과 이미지는 아래와 같습니다. 첫번째는 Kernel 방식이고 두번째가 Simple 방식입니다. Simple 방식은 Kernel 방식에 비해 처리 속도가 매우 빠르지만 그 결과는 Kernel에 비해  떨어집니다. 물론 분석 대상이 되는 Point나 Polyline의 개수가 증가할 수록 그 결과의 차이는 줄어들것으로 생각됩니다. XGE에서 밀도계산 기능을 확장단위로 개발하기에 앞서 비교 기준이 되는 결과를 ArcMap에서 살펴봅니다.

밀도 개산의 가장 많은 활용처는 포인트나 폴리라인에 대해 어느 부분에 밀집되어져 있느냐를 시각적으로 효과적으로 파악할 수 있다는 점입니다. 또한 이러한 밀도 개산에 의해 생성된 Grid 데이터를 여러개를 동시에 중첩하여 여러개의 인자들에 대한 복합적인 분석에 매우 효과적으로 활용됩니다. XGE에서는 ArcGIS의 밀도 분석은 물론이고 시각적으로 어느 부분이 가장 밀집도가 높으냐라는 판단이 아니라, 정확히 이 부분이 가장 밀집도가 높다라는 "제시"까지 제공할 예정입니다. "제시"는 기본이 되는 밀도개산 기능이 잘 완료가 되면 쉽게 구현할것으로 판단됩니다.

이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag : ,
2007/08/08 19:56 2007/08/08 19:56
Density(밀도) Analysis
밀도맵에 대해 고민을 본격적으로 해보고 있는데, 먼저 내가 알고 있는 밀도맵이라는 개념은 틀린 것임을 알았다. 밀도맵이 아닌 밀도분석에 의한 결과라고 해야 옳겠다. 밀도맵은 아래처럼 지도의 영역을 통계수치값에 따라 다른 색상으로 구분해 놓은 맵을 말한다.

밀도 분석에 대해 관심을 가지게 된 이유는 이 밀도 분석을 구현해보고자 함이다. 그러기 위해서는 정확히 밀도 분석이라는 것이 무엇인가 부터 정확히 파악해야 어떤식으로 구현을 할지 알 수 있을 것이기 때문이다.

밀도 분석은 어떤 지점의 현상에 대한 측정된 수량(예를들어 인구수)을 지도 전체에 걸쳐 측정된 수량을 재분배를 해주는 것이다. 재분배는 지도를 일정한 간격의 Grid의 Cell의 값으로써 이루어진다. 아래의 그림이 포인트에 대한 밀도분석의 결과를 나타낸 화면이다.

이런 밀도 분석의 목적에 대해서 알아보자. 밀도 분석에 의한 결과를 Density Surface, 즉 밀도폴리곤이라고 하면... 밀도폴리곤은 측정값을 속성으로 하는 포인트나 라인 피쳐가 어디에 집중되었는가를 보여준다. 예를들어서 하나의 포인트가 어떤 마을을 의미하고 그 포인트 속성으로 마을의 전체 주민수를 나타낸다고 해보자. 여기서 우리는 이 주민수 포인트 데이터로부터 지도 전체에 걸친 주민의 분포수를 알고자 하는 것이다. 이 주민의 분포수를 얻는 방법이 바로 밀도 계산인데, 지도 전체에 걸친 인구의 예측 분포를 보여주는 밀도 폴리곤을 생성할 수 있는 것이 바로 밀도 분석, 밀도 계산이다.

여기서 중요한 것은 밀도 폴리곤은 벡터가 아닌 라스터라는 점이다. 밀도 분석에 의해 라스터를 구성하는 각 Cell에 측정된 값들이 계산되어져 입력되는데, 모든 Cell의 값들을 합한값과 입력 데이터로써의 벡터 데이터의 측정값들의 합은 같다.

밀도 분석을 위해 필요한 입력값은 무엇일까? 앞의 설명으로부터 유추가 가능한데.. 한번 정리를 해보면 아래와 같다.

  • 측정값이 들어가 있는 포인트나 폴리라인 벡터 데이터(여기서는 포인트에 관심을 둠)
  • 측값값이 저장된 속성 데이터에 대한 필드명
  • 밀도 분석 방법(Kernel과 Simple 방법이 있음)
  • 검색 반경
  • 셀의 크기
위의 지식을 기반으로 밀도 분석을 구현해 그 결과를 제시해 보겠다.

먼저 입력 데이터는 아래와 같다. 직관적으로 결과를 보이기 위해 하나의 포인트는 1의 값을 갖는다고 했다.
대략 9500개의 포인트를 사용했다. 화면의 가운데 부분에 5000개의 포인트를 밀집 시켰고 이를 중심으로 2000개의 포인트와 2500개의 포인트를 밀집시켰다. 직접 구현한 밀도 분석은 아래와 같다. 처음 이미지는 Simple 방법이고 두번째는 Kernel 방법이다.

Kernel 방법이 훨씬 정확한 결과를 제시하고 있다는 것을 알 수 있다. 아직은 속도나 퀄러티(밀도의 단계가 10단계로 표출되어야하나 그 이하로 표출(위의 경우 9단계)되는 문제가 발생하는 문제가 있다.

기회가 닿는다면 밀도분석에 대한 Simple 방법과 Kernel 방법에 대한 구현 로직에 대해 설명해 보도록 하겠다.
이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

2007/06/18 03:37 2007/06/18 03:37
GIS Korea 2007에서 GeoGraph 발표

6월 13일부터 15일까지 양재동의 AT센터에서 GIS Korea 2007이 열렸습니다. 회사 연구소에서 GIS Korean 2007에서 발표했던 제품중 새로운 제품 두개가 있는데, 그 중에 하나가 바로 제가 담당한 GeoGraph입니다. 웹에서 작동하는 방식으로 시연을 했고 회사 부사장님의 강력한 추진력으로 시연 당일 아침에 터치스크린 장치에서 시연해 시연 효과를 높였습니다. 아래는 대회에서 일반 대중에게 처음으로 공개되어져 시연된 GeoGraph를 이용해 만든 데모의 스크린샷입니다.


아래는 웹 페이지에서 구현된 GeoGraph를 이용한 프리젠테이션 GIS 솔루션의 첫 페이지입니다.
좀더 선명한 이미지를 보길 원한다면 해당 이미지를 클릭하시면 확대됩니다. 간단이 설명하면, 통계정보나 분석된 결과 데이터를 지도위에 다양한 차트나 표, 이미지 등과 같이 사용자가 좀더 효과적으로 정보를 이해시킬 수 있는 프리젠테이션 GIS 솔루션입니다.

끝으로 위의 사진은 GIS Korea 2007의 신기술 발표회에서 GeoGraph를 내용으로 발표했던 제 모습입니다. ^^V


이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag : ,
2006/11/13 23:35 2006/11/13 23:35
동적화소변화율을 고려한 움직이는 물체검출
지난주에 OpenCV를 이용해 화상카메라로부터 영상을 받아, 움직이는 물체를 검출해 보는 코드를 작성해 보았는데, 여기에 자동으로 움직이는 물체가 있을 시에 그 영상을 캡춰받아 자동으로 저장하도록 해보았다.

회사에서 퇴근하는 아무개님(초상권을 위해 모자이크 처리 ㅡㅡ;)

문제는 영상에서 움직이는 물체가 있는지 없는지의 기준이 필요한데, 그 기준을 동적화소변이율을 사용하였다. 동적화소변이율은 영상을 구성하고 있는 전체 화소값(0~255)에서 변화된 화소값의 차이를 다시 백분율로 계산한 것이다. 이 동적화소변화율은 그냥 어찌 저찌 해서 직접 만들어낸 공식이므로 영상관련 책을 암만... 찾아봐도 않나온다. ㅡ_ㅡ; 그래서 자세한 수식을 제시하면...

동적화소변이율=((모든 바뀐 픽셀 차이값의 합)/(영상을 구성하는 픽셀수*255))*100

사용하고 있는 화상카메라를 기준으로 했을때 동적화소변이율이 0.5% 미만일 경우 화면상에 움직이는 물체가 없다고 판단했을때 정확히 일치했다. 그리고 0.5이상일때부터 영상에 움직이는 물체가 나타나기 시작했다가 1% 이상일때 움직이는 물체가 화면의 중앙에 위치한 상태였다. 동적화소변이율이 1%일때의 영상을 날짜와 시간을 파일명으로 해서 저장하도록 했다.

다음 단계는 움직이는 물체가 "누구(Who)"인지를 자동으로 판별해 내는 것..! 두둥~! 이를 위해 필요한 알고리즘은 무엇인가?
이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*