2014년 3월 28일 금요일

[uDig:experimental] With Driving Distance Enabled (pgRouting 2.0 )

pgRouting으로 Network Service Area와 비슷한 일을 하게 될거 같아 먼저 uDig을 활용하여 기능을 검토해 보았습니다. 아직 GXT Toolbox에 등록되지 않은 실험적인 도구 입니다.

▣ pgRouting 2.0
- http://pgrouting.org/

▣ pgRouting 2.0 Manual
http://docs.pgrouting.org/2.0/en/pgRoutingDocumentation.pdf

▣ Routing Topology
pgr_createTopology fuction을 이용하여 Topology생성
- 위 함수를 사용하기전에 도로 라인 데이터에 source, target 필드를 추가해 놓으면 pgr_createTopology 가 실행될 때 vertex 테이블(도로데이터명칭_vertices_pgr)이 생성되고 vertex ID가 추가됨
- 기타 도로의 length, time 등에 대한 값은 쿼리를 사용하여 계산


▣ pgr_drivingDistance


<툴박스 UI>
- pgRouting을 사용하기 위해 우선 PostGIS 데이터베이스에 연결
- edge table(도로)의 명칭과 기본적인 필드 정보 입력(ID, Source vertex ID, Target vertex ID, Cost)
- vertex table(노드)의 명칭 입력
- 출발지점으로 사용할 레이어 선택
- Cost값 입력 (comma로 여러개의 값을 구분하여 사용)
- 분석결과 Shapefile 저장 경로 설정


▣ Result



- 시작위치로 지정한 레이어의 모든 포인트 위치로 부터 cost값으로 설정한 300m, 600m, 900m, 1200m, 1500m 거리에 도달 가능한 Network Area를 Polygon으로 생성하여 Shapefile로 저장
- Cost로 시간을 선택하고 도로 데이터에 통행시간 필드가 계산되어 있을 경우 도달시간에 따른 분석도 가능


▣ 분석 과정
- 시작위치의 포인트로 부터 가장 가까운 버텍스를 찾음 (추후 UI상에 Tolerance 옵션 추가예정, 현재는 1km 설정)
- PostGIS의 st_expand() 함수를 사용하여 출발지점에서 1000m 확장한 영역과 Vertex레이어의 Geometry 간의 AND(&&) 연산을 수행하고 st_distance() 함수를 사용하여 거리 오름차순으로 정렬하여 최상 Vertex를 Closet Vertex로 설정

-  pgr_drivingDistance() 함수를 사용하여 위에서 찾은 Closet vertex에서 지정한 cost 만큼에 도달 가능한 vertex ID 목록을 생성하고 "도로데이터명칭_vertices_pgr" 테이블의 Vertex ID로 조인하여 Geometry를 가지는 Temp Table을 생성

Temp Table에 pgr_alphAShape() 함수를 사용하여 alpha shape 생성 : 여기서는 도달 가능한 Vertex의 전체 목록에서 Area를 생성하기 위해 가장 외곽의 vertex만 추려내는 과정

st_makeline() 함수로 포인트를 Line으로 생성 (id순서)

- st_makepolygon() 함수를 활용하여 최종 Polygon을 생성하고 st_astext()로 WKT로 리턴

- Geometry(from WKT)와 기타 속성정보를 Shapefile로 저장


▣ 비교

- 아래는 E*** 사의 A**G**로 분석한 결과입니다.. 



2014년 2월 15일 토요일

Wind Rose Map using GXT, uDig GIS

[uDig] Create Wind Rose Map using Geotools, uDig

얼마전 MapPlus님의 QGIS RingMap 스크립트를 보고 저희 회사 분석 엔진인 GXT에 RingMap을 개발해서 배포했습니다. 그런데 MapPlus님이 저에게 살짝 Wind Rose Map을 보여주더군요. djWjfkrh!!


▣ Reference
 - biz-gis : http://www.biz-gis.com/index.php?document_srl=107186&mid=GIS_Essay
 - http://nebraskawindandsolar.com/green-info/wind-rose/
  
▣ uDig Plugin 저장소
 - http://www.mangosystem.com:8080/gxt_updates

▣ Sample Dataset

 - Dataset : https://www.dropbox.com/s/u95exijhoxgb2is/sample_data.zip

▣ Usage
 - uDig 실행 -> Window -> Show View -> GXT Toolbox 선택


- 다운로드한 샘플 데이터중 서울시 은행,아파트 포인트 데이터를 새로운 지도에 추가
  (WindRose의 경우 도선관,백화점 위치와 해당 기관의 사용자 위치등을 분석하여 그 방향성과 사용자의 수를 한눈에 볼 수 있게 하는게 원칙이나 데이터를 구하기가 힘들어 레이어의 센터점으로 잡아 분석함)


- GXT Toolbox에서 Vector Analysis > General > Wind Rose 선택

Input Vector Layer : 분석 대상이되는 Point Layer를 선택
Field to apply the weight(선택) : 필수 입력값은 아니지만 갯수에 가중치를 주고자 할때 필드 이름 입력
Centroid of Rose(선택) : 중점이 되는 위치. 입력하지 않으면 Input Vector Layer의 center 값이 선택됨
Output rose value : Rose Value가 추가될 필드 명
Number of rose petals : 분석할 방향의 개수
Search Bounding Box : 검색영역

위 값을 선택한 후 OK

[uDig] Create Multi Wind Rose Map using Geotools, uDig

위 WindRose를 약간 변형하여 장미 한송이가 아닌 한다발로 표현해 보겠습니다. 

- 이번에는 GIS의 고전인 SnowGIS를 이용하여 표현하겠습니다.
- 다운로드한 데이터중 Cholera Death 와 Pumps를 새로운 맵에 추가


- GXT Toolbox에서 Vector Analysis > General > Multi Rose 선택

Input Vector Layer : Cholera Deaths 선택
Field to apply the weight : "Count" 입력
Centroid of Rose : Pumps 선택
search radius : 검색 반경입력 (Centroid of Rose이 Point, Line의 경우에는 필수 입력, Polygon의 경우 Polygon이 검색영역이 됨
Output rose value : Rose Value가 추가될 필드 명
Number of rose petals : 분석할 방향의 개수

위 값을 선택한 후 OK


그외 포인트 레이어를 다수 두어 분석도 가능 합니다.

2014년 2월 6일 목요일

[experimental] Mango Base Maps for Analytics

부제: Open Data, Open Source GIS 만으로 분석지도에 활용할 수 있는 배경지도 제작하기

▣ 배경
2013년 아니 그 전부터 포털 지도를 사용하면서 느낀 점 중 하나는 우리 회사가 주로 하는 공간분석 결과(래스터, 영역 기반의 주제도 등)를 중첩할 때 너무 어울리지 않는다는 것.

지금 아니면 영원히 못할 것 같아 오래 전부터 생각해 왔던 내용을 기반으로 한달 전부터 데이터 수집, 처리, 데이터베이스 등록 등등 작업을 수행했으며, 이제 겨우 데이터 처리를 완료함.

▣ 현재까지 작업 내용
 - Gray 및 Color(Mango System 스타일) 스타일 2 종류 제공
 - 배경지도와 레이블 지도를 별도로 분리하여 분석지도(래스터, 폴리곤 등)의 시각화 향상에 중점
 - 전세계 DEM(SRTM 90m 및 ASTER GDEM 30m), 국내 새주소, 국가공간정보유통센터, 교통데이터, 공간정보오픈플랫폼, 서울시 등 공개된 데이터 및 자체 수집 POI만으로 구성
 - 대한민국, 북한을 완전히 포함한 한반도 주변 1(5) ~ 18 레벨로 구성
 - 원 자료의 편집을 최소화하여 유지/갱신이 가능할 수 있는 체계 구성
 - 데이터 처리는 GDAL/OGR, QGIS, uDig, Python Script 등 오픈 소스 GIS만으로 작업
 - 좌표체계는 OpenStreetMap 등 공개된 지도 데이터와의 호환을 위해 EPSG:3857 사용
 - OSGeo TMS 준수

▣ 향후 일정
 - 스타일, 드로잉 순서 등 보완
 - POI 분류 및 분석 지도에 적합한 주제도 수집 및 적용
 - 레이블링 지도 상세화
 - 부분갱신 체계 도입 예정 - 구상중

▣ Maps

부산광역시 주변
대구광역시 주변
대전광역시 주변
인천광역시 주변
OSM과 국내 공간 데이터 혼합 - Level 8
전라남도 주변
서울특별시 및 경기도 주변
높은 레벨의 도시 내부
OSM 만으로 구성된 평양 주변