공간정보거점대학 PostGIS 고급과정

9,582 views
9,756 views

Published on

1월21일 공간정보거점대학 오픈소스GIS 프로그래밍과정 PostGIS

Published in: Technology
0 Comments
15 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,582
On SlideShare
0
From Embeds
0
Number of Embeds
5,386
Actions
Shares
0
Downloads
215
Comments
0
Likes
15
Embeds 0
No embeds

No notes for slide

공간정보거점대학 PostGIS 고급과정

  1. 1. 한국어 지부 PostGIS 고급 2014년 1월 20일 국토교통부 공간정보 거점대학 오픈 소스 GIS 심화 과정 ㈜엔지스 윤정환(lenablue12@en-gis.com)
  2. 2. 목차 I. PostGIS 설치 및 환경설정 I-1. PostGIS 개요 I-2. PostGIS 설치하기 I-3. PostGIS 환경설정 I-4. pgAdmin & Query Tool 사용하기 IV. 어플리케이션을 이용한 PostGIS 사용하기 IV-1. 프로그램 설치하기 IV-2. QGIS 이용한 PostGIS 사용하기 IV-3. OpenJump 이용한 PostGIS 사용하기 IV-4. uDig 이용한 PostGIS 사용하기 IV-5. JDBC Driver 이용한 PostGIS 이용하기 II. 공간데이터베이스 관리 II-1. 공간 데이터베이스 생성 II-2. 공간 데이터 생성 & 로딩 & 추출 II-3. 래스터 데이터 생성 & 로딩 III. 공간함수 사용하기 III-1. Geometry III-2. Spatial Relationships / Joins / Indexing / Projection III-3. Geography III-4. Geometry Constructing Functions III-5. More Spatial Joins 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 IV-6. .NET Driver 이용한 PostGIS 이용하기 V. PostGIS 그밖의 기능 V-1. Tuning PostgreSQL for Spatial V-2. Query Plans V-3. 백업 & 복원 V-4. pgRouting 소개 V-5. Reference 윤정환 (lenablue12@en-gis.com)
  3. 3. I. PostGIS 설치 및 환경설정 - 일러두기 • 본 자료는 모두 Creative Commons License CC-BY-NC을 따릅니다. • 본 교재에서는 교육의 편의상 Windows 32비트 기반의 프로그램들을 위주로 설명합니다. • 본 교재에서 사용하는 샘플 데이터 셋은 실제 정보와 다르므로 교육용 이외에는 사용할 수 없습니다.
  4. 4. I-1. PostGIS 개요  PostGIS란 ?  PostgreSQL 기반 spatial types, indexes, functions의 3가지 기능을 추가한 공간 데이터베이스  Spatial databases store/manipulate spatial objects – data types, indexes, and functions  Spatial data types – shapes - point, line, polygon  Spatial indexing – efficient processing of spatial operations  Spatial functions, – querying of spatial properties and relationships. http://www.postgis.net/ 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 1 윤정환 (lenablue12@en-gis.com)
  5. 5. I-2. PostGIS 설치하기  PostgreSQL 단독설치 (Application Stack Builder) ① http://www.postgresql.org/download/에 접속하여 PostgreSQL 최신버전(PostgreSQL 9.3.2)을 내려 받음 ② http://download.osgeo.org/postgis/windows/에 접속하여 PostGIS 최신버전(PostGIS 2.1.1)을 내려받음 ③ [설치프로그램postgis] 경로로 이동하여 PostgreSQL, PostGIS 최신버전을 설치 – DBMS 설치 : postgresql-9.3.2-1-windows – Spatial Extension 설치 : postgis-bundle-pg93x32-setup-2.1.1-1 ④ PostgreSQL, PostGIS 기본적인 설정에 따라 설치를 완료 ⑤ [시작메뉴] – [PostgreSQL 9.3] – [pgAdmin] 을 실행 PostgreSQL 설치 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 PostGIS 설치 2 pgAdmin 실행 윤정환 (lenablue12@en-gis.com)
  6. 6. I-2. PostGIS 설치하기  OpenGeo Suite 설치 ① http://boundlessgeo.com/에 접속하여 OpenGeo Suite 최신버전을 내려받음 ② [설치프로그램postgis] 경로로 이동하여 OpenGeo Suite 3.0.2 버전을 복사 ③ OpenGeo Suite 기본적인 설정에 따라 설치를 완료 ④ [시작메뉴] – [OpenGeo Suite 3.0.2] – [OpenGeo Suite Dashboard] 를 실행 ⑤ OpenGeo Suite Dashboard 화면 우측 상단 [Start] 버튼을 선택 ⑥ [Components] – [PostGIS] – [manage] 를 선택하여 pgAdmin을 실행 ⑦ Tip : 사용자 컴퓨터의 등록정보를 확인하여 컴퓨터 이름 또는 사용자 이름이 한글일 경우 오류가 발생할 수 있으므 로 변경 후 설치 권장 OpenGeo Suite 설치 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 OpenGeo Suite Dashboard 실행 3 pgAdmin 실행 윤정환 (lenablue12@en-gis.com)
  7. 7. I-3. PostGIS 환경설정  OpenGeoSuite Dashbord 환결설정 ① OpenGeo Suite Dashboard 화면 선택 ② Preferences를 선택하고, [PostGIS] 메뉴에 Port 번호 “54321”을 확인  pgAdmin 환경설정 ① OpenGeo Suite Dashboard 화면 선택 ② [Components] – [PostGIS] – [manage] 를 선택하여 pgAdmin을 실행 ③ pgAdmin의 [File] – [Options] 메뉴를 선택 ④ [General tab] – [user language] 의 Default를 확인 ⑤ [Preferences tab] – [Font] 선택하여 “돋움, 9”로 변경 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 4 윤정환 (lenablue12@en-gis.com)
  8. 8. I-4. pgAdmin & Query Tool 사용하기  pgAdmin Server 구성하기 ① OpenGeo Suite Dashboard 화면에서 [Components] – [PostGIS] – [manage] 를 선택하여 pgAdmin을 실행 아이콘을 선택 ② [File] – [Add Server] & 툴바 ③ New Server Registration 화면에 Name, Host, Password를 입력 후 [ok] 선택 postgis 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 5 윤정환 (lenablue12@en-gis.com)
  9. 9. I-4. pgAdmin & Query Tool 사용하기  pgAdmin 사용하기 도구 설명 pgAdmin 도구에 새로운 서버를 추가합니다. 객체의 정보를 생성, 수정, 갱신, 삭제 후 새로고침 합니다. 테이블 등의 객체의 등록정보를 확인하거나 수정합니다. 선택된 객체와 같은 형태의 새로운 객체를 생성합니다. 선택된 객체를 삭제합니다. SQL을 실행할 수 있는 Query 도구를 불러옵니다. 선택된 테이블을 편집할 수 있는 테이블 편집기를 불러옵니다. 필터를 적용해서 테이블을 편집할 수 있는 테이블 편집기를 불러옵니다. Vacuum, Analyze 등 테이블 유지에 필요한 도구를 불러옵니다. 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 6 윤정환 (lenablue12@en-gis.com)
  10. 10. I-4. pgAdmin & Query Tool 사용하기  Query Tool 사용하기 아이콘을 선택 Query Tool 실행 ① pgAdmin Tool 툴바 ② 샘플데이터 폴더의 postgis_korea_epsg_towgs84.sql을 열기 ③ [F5] 선택 Query 실행 시킴, 한국 주요 좌표계 적용 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 7 윤정환 (lenablue12@en-gis.com)
  11. 11. II. 공간데이터베이스 관리 - 일러두기 • 본 자료는 모두 Creative Commons License CC-BY-NC을 따릅니다. • 본 교재에서는 교육의 편의상 Windows 32비트 기반의 프로그램들을 위주로 설명합니다. • 본 교재에서 사용하는 샘플 데이터 셋은 실제 정보와 다르므로 교육용 이외에는 사용할 수 없습니다.
  12. 12. II-1. 공간데이터베이스 생성  GUI를 이용한 공간데이터베이스 생성 ① [시작메뉴] – [PostgreSQL 9.3] – [pgAdmin] 을 실행 ② [Databases] 오른쪽 마우스 선택 후 [New Database]를 선택 ③ [Name] – nyc 입력 ④ [Owner] – postgres 선택, [ok] 선택 ] 선택, Query Tool 실행 ⑤[ ⑦ CREATE EXTENSION postgis; 입력, [F5] 실행 ⑧ CREATE EXTENSION postgis_topology; 입력, [F5] 실행 ⑨ SELECT postgis_full_version(); 입력, [F5] 실행 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 8 윤정환 (lenablue12@en-gis.com)
  13. 13. II-2. 공간데이터 생성 & 로딩 & 추출  공간데이터 로딩 - nyc ① [시작메뉴] – [PostGIS 2.1 bundle for PostgreSQL 9.3 ] – [PostGIS Shapefile and DBF Loader Exporter] 을 실행 ② [시작메뉴] – [OpenGeo Suite 3.0.2] – [pgShapeLoader]를 실행 ③ [PostGIS Connection ] – [View connenction details] 선택 후 아래의 내용 입력 - Username : postgres / Password : postgis /Database : korea ④ [Options] - UTF-8 확인 후 [ok] 선택 ⑤ [Add File] – [02_실습예제02_PostGISdatanyc] 폴더의 Shape 파일 추가 ⑦ Import List [SRID] 컬럼 26918 로 변경 입력 ⑧ [Import] 선택 Shape 파일 추가 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 9 윤정환 (lenablue12@en-gis.com)
  14. 14. II-2. 공간데이터 생성 & 로딩 & 추출  공간데이터 로딩 - korea ① [시작메뉴] – [PostGIS 2.1 bundle for PostgreSQL 9.3 ] – [PostGIS Shapefile and DBF Loader Exporter] 을 실행 ② [시작메뉴] – [OpenGeo Suite 3.0.2] – [pgShapeLoader]를 실행 ③ [PostGIS Connection ] – [View connenction details] 선택 후 아래의 내용 입력 - Username : postgres / Password : postgis /Database : korea ④ [Options] – encoding CP949 or EUC-KR 변경 입력 후 [ok] 선택 ⑤ [Add File] – [02_실습예제02_PostGISdataseoul] 폴더의 Shape 파일 추가 ⑦ Import List [SRID] 컬럼 5174 로 변경 입력 ⑧ [Import] 선택 Shape 파일 추가 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 10 윤정환 (lenablue12@en-gis.com)
  15. 15. II-2. 공간데이터 생성 & 로딩 & 추출  공간데이터 추출 ① [시작메뉴] – [PostGIS 2.1 bundle for PostgreSQL 9.3 ] – [pgAdmin III] 을 실행 ② [시작메뉴] – [OpenGeo Suite 3.0.2] – [pgAdmin]를 실행 ③ OpenGeo Suit Dashboard의 PostGIS [Manage] 선택 실행 ④ nyc의 Query Tool을 선택 ⑤ nyc_neighborhoods 테이블을 이용하여 다음 쿼리 문을 작성해 보시기 바랍니다. - 브루클린에 있는 모든 지역의 이름(name)은 ? - 브루클린에 있는 모든 지역의 이름에 있는 문자의 수는 ? - 브루클린에 있는 모든 지역의 이름에 있는 문자의 평균과 표준편차는? ⑥ Function List - avg(expression) - char_lengtth(string) - stddev(string) 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 11 윤정환 (lenablue12@en-gis.com)
  16. 16. II-2. 공간데이터 생성 & 로딩 & 추출  공간데이터 추출 ① [시작메뉴] – [PostGIS 2.1 bundle for PostgreSQL 9.3 ] – [pgAdmin III] 을 실행 ② [시작메뉴] – [OpenGeo Suite 3.0.2] – [pgAdmin]를 실행 ③ OpenGeo Suit Dashboard의 PostGIS [Manage] 선택 실행 ④ korea의 Query Tool을 선택 ⑤ admin_emd 테이블과 pop2007, pop2008 컬럼을 이용하여 다음 쿼리 문을 작성해 보시기 바랍니다. - 서울특별시 2007, 2008 각 년도 인구수 총 합은 ? - 서울특별시 종로구, 서대문구, 강남구 2007, 2008 각년도 인구수의 총 합은? - 2008년 인구 중 종로구내 각 동의 인구비율은 백분율로 표시 ? ⑥ Function List - avg(expression) - count(expression) - sum(expression) 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 12 윤정환 (lenablue12@en-gis.com)
  17. 17. II-3. 래스터 데이터 생성 & 로딩  레스터 데이터 생성 ① [시작메뉴] – [PostGIS 2.1 bundle for PostgreSQL 9.3 ] – [pgAdmin III] 을 실행 ② [시작메뉴] – [OpenGeo Suite 3.0.2] – [pgAdmin]를 실행 ③ OpenGeo Suit Dashboard의 PostGIS [Manage] 선택 실행 ④ nyc의 Query Tool을 선택 ⑤ PostGIS 래스터 공간함수를 사용한 래스터 테이블 생성 - CREATE TABLE myrasters(rid serial primary key, rast raster); - CREATE INDEX myrasters_rast_st_convexhull_idx ON myrasters USING gist( ST_ConvexHull(rast) ); 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 13 윤정환 (lenablue12@en-gis.com)
  18. 18. II-3. 래스터 데이터 생성 & 로딩  레스터 데이터 로딩 ① 윈도우 cmd 화면을 실행 ([시작메뉴] – [실행] – [cmd] 선택) ② OpenGeo Suit 설치경로 이동 or PostgreSQL 설치경로 이동 ③ raster2pgsql –G 입력 실행 ④ 실행 예제 Raster2pgsql raster_options_go_here raster_file someschema.sometable > out.sql ⑤ http://postgis.net/docs/manual-2.1/using_raster_dataman.html#RT_Raster_Loader ⑥ C:OpenGISEdupostgisdataseoul_raster 경로 raster 파일 올리기 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 14 윤정환 (lenablue12@en-gis.com)
  19. 19. III. 공간함수 사용하기 - 일러두기 • 본 자료는 모두 Creative Commons License CC-BY-NC을 따릅니다. • 본 교재에서는 교육의 편의상 Windows 32비트 기반의 프로그램들을 위주로 설명합니다. • 본 교재에서 사용하는 샘플 데이터 셋은 실제 정보와 다르므로 교육용 이외에는 사용할 수 없습니다.
  20. 20. III-1. Geometry  Geometry ① nyc의 Query Tool 실행 CREATE TABLE geometries (name varchar, geom geometry); INSERT INTO geometries VALUES ('Point', 'POINT(0 0)'), ('Linestring', 'LINESTRING(0 0, 1 1, 2 1, 2 2)'), ('Polygon', 'POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))'), ('PolygonWithHole', 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(1 1, 1 2, 2 2, 2 1, 1 1))'), ('Collection', 'GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0, 1 0, 1 1, 0 1, 0 0)))'); SELECT name, ST_AsText(geom) FROM geometries; ② Spatial Type SELECT name, ST_GeometryType(geom), ST_NDims(geom), ST_SRID(geom) FROM geometries; 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 15 윤정환 (lenablue12@en-gis.com)
  21. 21. III-1. Geometry  Geometry ③ Spatial Type SELECT name, ST_GeometryType(geom), ST_NDims(geom), ST_SRID(geom) FROM geometries; ④ Point SELECT ST_AsText(geom) FROM geometries WHERE name = 'Point'; SELECT ST_X(geom), ST_Y(geom) FROM geometries WHERE name = 'Point'; SELECT name, ST_AsText(geom) FROM nyc_subway_stations LIMIT 1; ⑤ Linestrings SELECT ST_AsText(geom) FROM geometries WHERE name = 'Linestring'; SELECT ST_Length(geom) FROM geometries WHERE name = 'Linestring'; 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 16 윤정환 (lenablue12@en-gis.com)
  22. 22. III-1. Geometry  Geometry ⑥ Polygons SELECT ST_AsText(geom) FROM geometries WHERE name LIKE 'Polygon%'; SELECT name, ST_Area(geom) FROM geometries WHERE name LIKE 'Polygon% ⑦ Collections – MultiPoint, MultiLineString, MultiPolygon, GeometryCollection SELECT name, ST_AsText(geom) FROM geometries WHERE name = 'Collection'; ⑧ Geometry Input and Output SELECT encode( ST_AsBinary(ST_GeometryFromText('LINESTRING(0 0 0,1 0 0,1 1 2)')), 'hex'); SELECT ST_AsEWKT(ST_GeometryFromText('LINESTRING(0 0 0,1 0 0,1 1 2)')); SELECT encode(ST_AsEWKB(ST_GeometryFromText( 'LINESTRING(0 0 0,1 0 0,1 1 2)')), 'hex'); SELECT ST_AsGeoJSON(ST_GeomFromGML('<gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point>')); ⑨ Casting from Text SELECT 0.9::text; SELECT 'POINT(0 0)'::geometry; SELECT 'SRID=4326;POINT(0 0)'::geometry; 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 17 윤정환 (lenablue12@en-gis.com)
  23. 23. III-1. Geometry  Geometry 연습문제 사용할 공간함수  sum(expression) aggregate to return a sum for a set of records  ST_InteriorRingN(polygon, integer) returns a specified interior ring as a linestring  count(expression) aggregate to return the size of a set of records  ST_Perimeter(geometry) returns the length of all the rings  ST_GeometryType(geometry) returns the type of the geometry  ST_NumGeometries(multi/geomcollection) returns the number of parts in the collection  ST_NDims(geometry) returns the number of dimensions of the geometry  ST_GeometryN(geometry, integer) returns the specified part of the collection  ST_SRID(geometry) returns the spatial reference identifier number of the geometry  ST_GeomFromText(text) returns geometry  ST_X(point) returns the X ordinate  ST_AsText(geometry) returns WKT text  ST_Y(point) returns the Y ordinate  ST_AsEWKT(geometry) returns EWKT text  ST_Length(linestring) returns the length of the linestring  ST_GeomFromWKB(bytea) returns geometry  ST_StartPoint(geometry) returns the first coordinate as a point  ST_AsBinary(geometry) returns WKB bytea  ST_EndPoint(geometry) returns the last coordinate as a point  ST_AsEWKB(geometry) returns EWKB bytea  ST_NPoints(geometry) returns the number of coordinates in the linestring  ST_GeomFromGML(text) returns geometry  ST_Area(geometry) returns the area of the polygons  ST_GeomFromKML(text) returns geometry  ST_NRings(geometry) returns the number of rings (usually 1, more if there are holes)  ST_AsKML(geometry) returns KML text  ST_AsGML(geometry) returns GML text  ST_AsGeoJSON(geometry) returns JSON text  ST_ExteriorRing(polygon) returns the outer ring as a linestring 국가공간정보 거점대학 오픈 소스 GIS 심화 과정  ST_AsSVG(geometry) returns SVG text 18 윤정환 (lenablue12@en-gis.com)
  24. 24. III-1. Geometry  Geometry 연습문제  Nyc 데이터베이스 사용, 사용 테이블 ① ‘West Village’ 지역(neighborhood)의 면적은 ?  nyc_census_blocks - nyc_neighborhoods ② ‘Manhattan’의 면적은 km 표기 ?(기본단위 m) – blkid, popn_total, boroname, geom  nyc_streets - nyc_neighborhoods, nyc_census_blocks ③ 뉴욕시의 얼마나 많은 인구조사 블록(hole)이 있는가? – name, type, geom  nyc_subway_stations - nyc_census_blocks ④ 뉴욕시의 총 도로의 길이는 km 표기 ? – name, geom  nyc_neighborhoods - nyc_streets ⑤ ‘Columbus Cir’ 도로의 길이는 ? – name, boroname, geom - nyc_streets ⑥ ‘West Village’의 boundary를 JSON으로 표현 ? - nyc_neighborhoods ⑦ ‘West Village’ 다중 폴리곤(Multipolygon) 몇 개 ? - nyc_neighborhoods ⑧ 뉴욕시의 도로타입별 총 길이는 ? - nyc_streets 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 19 윤정환 (lenablue12@en-gis.com)
  25. 25. III-2. Spatial Relationships / Joins / Indexing / Projecting  Spatial Relationships ① ST_Equals ST_Intersects - SELECT name, geom, ST_AsText(geom) FROM nyc_subway_stations WHERE name = 'Broad St'; - SELECT name, ST_AsText(geom) FROM nyc_subway_stations WHERE name = 'Broad St'; - SELECT name FROM nyc_subway_stations WHERE ST_Equals(geom, '0101000020266900000EEBD4CF27CF2141BC17D69516315141') ; - SELECT name, boroname FROM nyc_neighborhoods WHERE ST_Intersects(geom, ST_GeomFromText('POINT(583571 4506714)',26918)); 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 20 윤정환 (lenablue12@en-gis.com)
  26. 26. III-2. Spatial Relationships / Joins / Indexing / Projecting  Spatial Relationships ③ ST_Disjoint 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 ST_Crosses 21 윤정환 (lenablue12@en-gis.com)
  27. 27. III-2. Spatial Relationships / Joins / Indexing / Projecting  Spatial Relationships ⑤ ST_Overlaps 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 ⑥ ST_Touches 22 윤정환 (lenablue12@en-gis.com)
  28. 28. III-2. Spatial Relationships / Joins / Indexing / Projecting  Spatial Relationships ⑦ ST_Within and ST_Contains ⑧ ST_Distance and ST_Dwithin - SELECT ST_Distance( ST_GeometryFromText('POINT(0 5)'), ST_GeometryFromText('LINESTRING(-2 2, 2 2)')); - SELECT name FROM nyc_streets WHERE ST_DWithin( geom, ST_GeomFromText('POINT(583571 4506714)',26918), 10 ); 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 23 윤정환 (lenablue12@en-gis.com)
  29. 29. III-2. Spatial Relationships / Joins / Indexing / Projecting  Spatial Relationships 연습문제 사용할 공간함수  sum(expression) aggregate to return a sum for a set of records  ST_Within(geometry A, geometry B) returns true if geometry A is within geometry B  count(expression) aggregate to return the size of a set of records  ST_Contains(geometry A, geometry B) returns true if geometry A contains geometry B  ST_Crosses(geometry A, geometry B) returns true if geometry A crosses geometry B  ST_Disjoint(geometry A , geometry B) returns true if the geometries do not “spatially intersect”  ST_Distance(geometry A, geometry B) returns the minimum distance between geometry A and geometry B  ST_DWithin(geometry A, geometry B, radius) returns true if geometry A is radius distance or less from geometry B  ST_Equals(geometry A, geometry B) returns true if geometry A is the same as geometry B  ST_Intersects(geometry A, geometry B) returns true if geometry A intersects geometry B  ST_Overlaps(geometry A, geometry B) returns true if geometry A and geometry B share space, but are not completely contained by each other.  ST_Touches(geometry A, geometry B) returns true if the boundary of geometry A touches geometry B 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 24 윤정환 (lenablue12@en-gis.com)
  30. 30. III-2. Spatial Relationships / Joins / Indexing / Projecting  Spatial Relationships 연습문제  Nyc 데이터베이스 사용, 사용 테이블 ① ‘Atlantic Commons’ 이름의 도로의 Geometry 값은?  nyc_census_blocks - nyc_streets ② ‘Atlantic Commons’d의 지역, 자치구는 ? – name, popn_total, boroname, geom  nyc_streets - nyc_neighborhoods ③ ‘Atlantic Commons’도로와 만나는 도로의 이름은? – name, type, geom  nyc_subway_stations - nyc_streets ④ ‘Atlantic Commons’ 반경 50m 이내의 인구수 ? – name, routes, geom  nyc_neighborhoods - nyc_census_blocks – name, boroname, geom 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 25 윤정환 (lenablue12@en-gis.com)
  31. 31. III-2. Spatial Relationships / Joins / Indexing / Projecting  Spatial Joins ① Join ② Join and Summarize ‘Manhattan 지역의 총 인구수와 백인/흑인의 비율 ? SELECT subways.name AS subway_name, SELECT neighborhoods.name AS neighborhood_name, neighborhoods.name AS neighborhood_name, Sum(census.popn_total) AS population, neighborhoods.boroname AS borough Round(100.0 * Sum(census.popn_white) / Sum(census.popn_total),1) AS white_pct, FROM nyc_neighborhoods AS neighborhoods JOIN nyc_subway_stations AS subways Round(100.0 * Sum(census.popn_black) / Sum(census.popn_total),1) AS black_pct ON ST_Contains(neighborhoods.geom, subways.geom) WHERE subways.name = 'Broad St'; FROM nyc_neighborhoods AS neighborhoods JOIN nyc_census_blocks AS census ON ST_Intersects(neighborhoods.geom, census.geom) WHERE neighborhoods.boroname = 'Manhattan' GROUP BY neighborhoods.name ORDER BY white_pct DESC; 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 26 윤정환 (lenablue12@en-gis.com)
  32. 32. III-2. Spatial Relationships / Joins / Indexing / Projecting  Spatial Joins  Spatial Joins 연습문제 사용할 공간함수 ③ Join and Summarize A지하철의 반경 200m이내의 총인구, 인종별 비율?  sum(expression): aggregate to return a sum for a set of records SELECT  ST_Area(geometry) returns the area of the polygons 100.0 * Sum(popn_white) / Sum(popn_total) AS white_pct,  ST_AsText(geometry) returns WKT text  count(expression): aggregate to return the size of a set of records  ST_Contains(geometry A, geometry B) returns the true if geometry A contains geometry B 100.0 * Sum(popn_black) / Sum(popn_total) AS black_pct,  ST_Distance(geometry A, geometry B) returns the minimum distance between geometry A and geometry B Sum(popn_total) AS popn_total  ST_DWithin(geometry A, geometry B, radius) returns the true if geometry A is radius distance or less from geometry B FROM nyc_census_blocks AS census JOIN nyc_subway_stations AS subways  ST_GeomFromText(text) returns geometry ON ST_DWithin(census.geom, subways.geom, 200) WHERE strpos(subways.routes,'A') > 0;  ST_Intersects(geometry A, geometry B) returns the true if geometry A intersects geometry B  ST_Length(linestring) returns the length of the linestring  ST_Touches(geometry A, geometry B) returns the true if the boundary of geometry A touches geometry B  ST_Within(geometry A, geometry B) returns the true if geometry A is within geometry B 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 27 윤정환 (lenablue12@en-gis.com)
  33. 33. III-2. Spatial Relationships / Joins / Indexing / Projecting  Spatial Joins 연습문제  Nyc 데이터베이스 사용, 사용 테이블 ① ‘Little Italy’ 무슨 역이고, 어떤 노선 인가?  nyc_census_blocks - nyc_subway_stations, nyc_subway_stations ② 6-train 지나는 모든 지역은 어디인가? – name, popn_total, boroname, geom  nyc_streets - nyc_subway_stations, nyc_subway_stations ③ ‘Battery Park’ 의 총인구? – name, type, geom  nyc_subway_stations - nyc_subway_stations, nyc_subway_stations ④ ‘Upper West Side’, ‘Upper East Side’ 인구밀도는 ? – name, routes, geom  nyc_neighborhoods - nyc_subway_stations, nyc_subway_stations – name, boroname, geom 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 28 윤정환 (lenablue12@en-gis.com)
  34. 34. III-2. Spatial Relationships / Joins / Indexing / Projecting  Spatial Indexing ① Spatial Indexing 테스트 Index-Only Queris - PostGIS index 내장 공간함수 제공 - DROP INDEX nyc_census_blocks_geom_gist; - SELECT (ST_Contains, ST_Intersects, ST_DWithin, etc) blocks.blkid - Index 와 „&&‟ 연산자 FROM nyc_census_blocks blocks SELECT JOIN nyc_subway_stations subways Sum(popn_total) ON ST_Contains(blocks.geom, subways.geom) FROM nyc_neighborhoods neighborhoods WHERE subways.name = 'Broad St'; JOIN nyc_census_blocks blocks - Query 시간 확인 ON neighborhoods.geom && blocks.geom - CREATE INDEX nyc_census_blocks_geom_gist WHERE neighborhoods.name = 'West Village'; ON nyc_census_blocks USING GIST (geom); - 위의 Select 문을 실행 시켜 Query 시간을 확인 SELECT Sum(popn_total) FROM nyc_neighborhoods neighborhoods JOIN nyc_census_blocks blocks ON ST_Intersects(neighborhoods.geom, blocks.geom) WHERE neighborhoods.name = 'West Village'; 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 29 윤정환 (lenablue12@en-gis.com)
  35. 35. III-2. Spatial Relationships / Joins / Indexing / Projecting  Projecting 연습문제 사용할 공간함수  Projecting 연습문제  Nyc 데이터베이스 사용, 사용 테이블  sum(expression) aggregate to return a sum for a set of records  nyc_census_blocks  ST_Length(linestring) returns the length of the linestring – name, popn_total, boroname, geom  nyc_streets  ST_SRID(geometry, srid) returns the SRID of the geometry – name, type, geom  ST_Transform(geometry, srid) converts geometries into different spatial reference systems  nyc_subway_stations  ST_GeomFromText(text) returns geometry  nyc_neighborhoods – name, geom  ST_AsText(geometry) returns WKT text – name, boroname, geom  ST_AsGML(geometry) returns GML text ① 뉴욕시 모든 도로 길이는 ? - nyc_streets ② SRID 2831로 변환된 뉴욕시 모든 도로 길이는? - nyc_streets ③ ‘Broad St’ subway station을 KML 표시 ? - nyc_subway_stations 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 30 윤정환 (lenablue12@en-gis.com)
  36. 36. III-3. Geograpy  Gemotry & Geograpy ① 거리 구하기 - SELECT ST_Distance( ST_GeometryFromText('POINT(-118.4079 33.9434)', 4326), -- Los Angeles (LAX) ST_GeometryFromText('POINT(2.5559 49.0083)', 4326) -- Paris (CDG) ); - SELECT ST_Distance( ST_GeographyFromText('POINT(-118.4079 33.9434)'), -- Los Angeles (LAX) - SELECT ST_Distance( ST_GeographyFromText('POINT(2.5559 49.0083)') -- Paris (CDG) ); ST_GeometryFromText('Point(-118.4079 33.9434)'), -- LAX ST_GeometryFromText('Point(139.733 35.567)')) -- NRT (Tokyo/Narita) AS geometry_distance, ST_Distance( ST_GeographyFromText('Point(-118.4079 33.9434)'), -- LAX ST_GeographyFromText('Point(139.733 35.567)')) -- NRT (Tokyo/Narita) AS geography_distance; SELECT ST_Distance( ST_GeographyFromText('LINESTRING(-118.4079 33.9434, 2.5559 49.0083)'), -- LAX-CDG ST_GeographyFromText('POINT(-21.8628 64.1286)') -- Iceland ); 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 31 윤정환 (lenablue12@en-gis.com)
  37. 37. III-3. Geograpy  Gemotry & Geograpy ② Geograpy 테이블 생성 ③ Geometry 변환 - SELECT code, ST_X(geog::geometry) AS longitude FROM airports; -CREATE TABLE airports ( code VARCHAR(3), geog GEOGRAPHY(Point) ); INSERT INTO airports VALUES ('LAX', 'POINT(-118.4079 33.9434)'); INSERT INTO airports VALUES ('CDG', 'POINT(2.5559 49.0083)'); INSERT INTO airports VALUES ('REK', 'POINT(-21.8628 64.1286)'); - SELECT * FROM geography_columns; 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 32 윤정환 (lenablue12@en-gis.com)
  38. 38. III-4. Geometry Constructing Functions  ST_Centroid / ST_PointOnSurface  ST_Buffer CREATE TABLE liberty_island_zone AS SELECT ST_Buffer(geom,500)::geometry(Polygon,26918) AS geom FROM nyc_census_blocks WHERE blkid = '360610001001001'; 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 33 윤정환 (lenablue12@en-gis.com)
  39. 39. III-4. Geometry Constructing Functions  ST_Intersection  ST_Union SELECT ST_AsText(ST_Intersection( SELECT ST_AsText(ST_Union( ST_Buffer('POINT(0 0)', 2), ST_Buffer('POINT(0 0)', 2), ST_Buffer('POINT(3 0)', 2) ) ST_Buffer('POINT(3 0)', 2) ) ); ); CREATE TABLE nyc_census_counties AS SELECT ST_Union(geom)::Geometry(MultiPolygon,26918) AS geom, SubStr(blkid,1,5) AS countyid FROM nyc_census_blocks GROUP BY countyid; SELECT SubStr(blkid,1,5) AS countyid, Sum(ST_Area(geom)) AS area FROM nyc_census_blocks GROUP BY countyid; SELECT countyid, ST_Area(geom) AS area FROM nyc_census_counties; 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 34 SELECT countyid, ST_AsText(geom) FROM nyc_census_counties; 윤정환 (lenablue12@en-gis.com)
  40. 40. III-5. More Spatial Joins  Census Tracts Table 생성  문제 ① pgAdim 실행 – Query Tool 실행 뉴욕 지역의 graduate degrees 사람 비율이 높은 10개 지역은 ? ② C:OpenGISEdupostgisdatanyc 폴더 nyc_census_sociodata.sql 파일 열기 SELECT Round(100.0 * Sum(t.edu_graduate_dipl) / Sum(t.edu_total), 1) AS graduate_pct, n.name, n.boroname FROM nyc_neighborhoods n JOIN nyc_census_tracts t ON ST_Intersects(n.geom, t.geom) WHERE t.edu_total > 0 GROUP BY n.name, n.boroname ORDER BY graduate_pct DESC LIMIT 10; ③ [F5] 실행 Census tracts 테이블 생성 ④ Refresh 선택, 테이블 추가 확인 ⑤ ST_Union을 이용한 새로운 테이블 생성 - CREATE TABLE nyc_census_tract_geoms AS SELECT ST_Union(geom) AS geom, SubStr(blkid,1,11) AS tractid FROM nyc_census_blocks GROUP BY tractid; -- Index the tractid CREATE INDEX nyc_census_tract_geoms_tractid_idx ON nyc_census_tract_geoms (tractid); ⑥ Join을 통한 속성정보 추가 테이블 생성 - CREATE TABLE nyc_census_tracts AS SELECT g.geom, a.* FROM nyc_census_tract_geoms g JOIN nyc_census_sociodata a ON g.tractid = a.tractid; -- Index the geometries CREATE INDEX nyc_census_tract_gidx ON nyc_census_tracts USING GIST (geom); 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 35 윤정환 (lenablue12@en-gis.com)
  41. 41. III-5. More Spatial Joins  큰 반경 거리 Join  Polygon/Polygon Joins ① SELECT Sum(popn_total) FROM nyc_census_blocks; ② SELECT Sum(popn_total) FROM nyc_census_blocks census JOIN nyc_subway_stations subway ON ST_DWithin(census.geom, subway.geom, 500); ③ WITH distinct_blocks AS ( SELECT DISTINCT ON (blkid) popn_total FROM nyc_census_blocks census JOIN nyc_subway_stations subway ON ST_DWithin(census.geom, subway.geom, 500) ) SELECT Sum(popn_total) FROM distinct_blocks; SELECT Round(100.0 * Sum(t.edu_graduate_dipl) / Sum(t.edu_total), 1) AS graduate_pct, n.name, n.boroname FROM nyc_neighborhoods n JOIN nyc_census_tracts t ON ST_Contains(n.geom, ST_Centroid(t.geom)) WHERE t.edu_total > 0 GROUP BY n.name, n.boroname ORDER BY graduate_pct DESC LIMIT 10; 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 36 윤정환 (lenablue12@en-gis.com)
  42. 42. IV. 어플리케이션을 이용한 PostGIS 사용하기 - 일러두기 • 본 자료는 모두 Creative Commons License CC-BY-NC을 따릅니다. • 본 교재에서는 교육의 편의상 Windows 32비트 기반의 프로그램들을 위주로 설명합니다. • 본 교재에서 사용하는 샘플 데이터 셋은 실제 정보와 다르므로 교육용 이외에는 사용할 수 없습니다.
  43. 43. IV-1. 프로그램 설치하기  프로그램 설치하기 ① QGIS 2.0 설치 하기 - 설치프로그램 폴더 : QGIS-OSGeo4W-2.0.1-3-Setupx86 설치 - 설치화면 기본 순서대로 설치 ② uDig 1.4 설치 하기 - 설치프로그램 폴더 : udig-1.4.0.win32.win32.x86 - 설치화면 기본 순서대로 설치 ③ OpenJUMP 1.6 설치하기 - 설치프로그램 폴더 : OpenJUMP-Installer-1.6.3-r3576CORE - 설치화면 기본 순서대로 설치 ④ JDK 설치하기 - 설치프로그램 폴더 : JDK 설치 및 환경설정.txt 참조 ⑤ visual studio 평가판 설치하기 - 설치프로그램 폴더 : vcs_web.exe 설치하기 - 설치화면 기본 순서대로 설치 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 37 윤정환 (lenablue12@en-gis.com)
  44. 44. IV-2. QGIS 이용한 PostGIS 이용하기  QGIS에서 레이어 추가하기 ① QGIS 2.0 실행 ② [플러그인] – [플러그인관리및설치] SPIT 설치 확인 ③ [데이터베이스] – [Spit(s)] –[쉐입 파일을 PostGIS에 가 져오기 ④ [새로만들기] 선택, 정보 입력 후 [확인] 선택 ⑤ [연결] 선택 ⑥ [추가] 선택 후, Shape 파일 선택 추가 ⑦ 기본 지오매트리 컬럼 이름 사용 체크 해제 후 „geom‟ 변경 ⑧ 기본 SRID 사용 체크 해제 후 „5174‟ 변경 ⑨ [확인] 선택 ⑩ pgAdmin 실행 후 korea 데이터베이스에 입력한 shape 파일 테이블 확인 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 38 윤정환 (lenablue12@en-gis.com)
  45. 45. IV-2. QGIS 이용한 PostGIS 이용하기  QGIS에서 PostGIS 레이어 불러와 사용하기 ① QGIS 2.0 실행 ② [레이어] – [PostGIS레이어 추가하기] 선택 ③ [새로만들기] 선택, 정보 입력 후 [확인] 선택 – nyc 사용 ④ [연결] 선택 ⑤ public 선택 원하는 Shape 선택 후 [추가] 선택 ⑥ 선택된 레이어 변경하기 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 39 윤정환 (lenablue12@en-gis.com)
  46. 46. IV-3. OpenJUMP 이용한 PostGIS 이용하기  OpenJUMP에서 PostGIS 레이어 불러와 사용하기 ① OpenJUMP 1.6 실행 ② Working, System 오른 쪽 마우스 선택 후 [Add Datastore Layer] 선택 ③ Coonection[ ④ [Add] 선택 ] 아이콘 선택 ⑤ Connection Manager 화면에서 [ok] 선택 ⑥ Add Datastore Layer에서 Dataset(레이어선택) 후 [ok] 선택 ⑦ 여러레이어를 올려 레이어 변경하기 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 40 윤정환 (lenablue12@en-gis.com)
  47. 47. IV-4. uDig 이용한 PostGIS 이용하기  uDig에서 PostGIS 레이어 불러와 이용하기 ① uDig 1.46 실행 ② [파일] – [새로운 지도작업] – [지도] 선택 ③ [레이어] – [추가] 선택 ④ [PostGIS] 선택, [다음] 선택 ⑤ [Add] 선택 ⑥ Host, User Name, Password 입력 ⑦ Database 콤보박스 [korea] 선택 후 [List] 선택 ⑧ 여러 레이어 체크박스 선택 후 [완료] 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 41 윤정환 (lenablue12@en-gis.com)
  48. 48. IV-5. JDBC Driver 이용한 PostGIS 이용하기  JDBC Driver 이용한 PostGIS 이용하기 ① 최신 PostgreSQL JDBC Driver 다운로드 http://jdbc.postgresql.org/download.html ② jar파일 CLASSPATH 등록 ③ JDBC Driver 설치 방법 - 직접 다운로드 사이트 접속 다운 후 등록 - Application Stack Builder 통한 설치 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 42 윤정환 (lenablue12@en-gis.com)
  49. 49. IV-5. .NET Driver 이용한 PostGIS 이용하기 // Code for TestRaster.ashx <%@ WebHandler Language="C#" Class="TestRaster" %> using System; using System.Data; using System.Web; using Npgsql;  .NET Driver 이용한 PostGIS 이용하기 ① 최신 npgsql .NET PostgreSQL driver 다운로드 http://npgsql.projects.postgresql.org/ ② Web.config 설정 -- web.config connection string section -<connectionStrings> <add name="DSN" connectionString="server=localhost;database=mydb;Port= 5432;User Id=myuser;password=mypwd"/> </connectionStrings> ③ .NET Driver 설치 방법 - 직접 다운로드 사이트 접속 다운 후 등록 - Application Stack Builder 통한 설치 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 43 public class TestRaster : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "image/png"; context.Response.BinaryWrite(GetResults(context)); } public bool IsReusable { get { return false; } } public byte[] GetResults(HttpContext context) { byte[] result = null; NpgsqlCommand command; string sql = null; int input_srid = 26986; try { using (NpgsqlConnection conn = new NpgsqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings[ "DSN"].ConnectionString)) { conn.Open(); if (context.Request["srid"] != null) { input_srid = Convert.ToInt32(context.Request["srid"]); } sql = @"SELECT ST_AsPNG( ST_Transform( ST_AddBand( ST_Union(rast,1), ARRAY[ST_Union(rast,2),ST_Union(rast,3)]) ,:input_srid) ) As new_rast FROM aerials.boston WHERE ST_Intersects(rast, ST_Transform(ST_MakeEnvelope(71.1217, 42.227, -71.1210, 42.218,4326),26986) )"; command = new NpgsqlCommand(sql, conn); command.Parameters.Add(new NpgsqlParameter("input_srid", input_srid)); result = (byte[]) command.ExecuteScalar(); conn.Close(); } } catch (Exception ex) { result = null; context.Response.Write(ex.Message.Trim()); } return result; } } 윤정환 (lenablue12@en-gis.com)
  50. 50. V. PostGIS 그밖의 기능 - 일러두기 • 본 자료는 모두 Creative Commons License CC-BY-NC을 따릅니다. • 본 교재에서는 교육의 편의상 Windows 32비트 기반의 프로그램들을 위주로 설명합니다. • 본 교재에서 사용하는 샘플 데이터 셋은 실제 정보와 다르므로 교육용 이외에는 사용할 수 없습니다.
  51. 51. V-1. Tuning PostgreSQL for Spatial  Backend Configuration Editer  Shared_buffer ① pgAdmin 실행  Default Value : 32MB ② [File] – [Open postgresql.conf] – postgresql.conf 파일 선택  Recommended Value : 500MB (75%) 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 44 윤정환 (lenablue12@en-gis.com)
  52. 52. V-1. Tuning PostgreSQL for Spatial  Work_mem  Maintenance_work_mem  Default Value : 1MB  Default Value : 16MB  Recommended value : 16MB  Recommended Value : 16MB(ex.128MB) 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 45 윤정환 (lenablue12@en-gis.com)
  53. 53. V-1. Tuning PostgreSQL for Spatial  Wal_buffers  Checkpoint_segments  Default Value : 1MB  Default Value : 3MB  Recommended value : 16MB  Recommended Value : 6MB 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 46 윤정환 (lenablue12@en-gis.com)
  54. 54. V-1. Tuning PostgreSQL for Spatial  Ramdom_page_cost  Seq_page_cost  Default Value : 4.0  Default Value : 1.0  Recommended value : 2.0  Recommended Value : 1.0 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 47 윤정환 (lenablue12@en-gis.com)
  55. 55. V-1. Tuning PostgreSQL for Spatial  Reload configuration ① pgAdmin 접속 종료(종료) ② OpenSeo Suit Dashboard Shutdown, Start ③ pgAdim 접속 (재시작) ④ 설정 정보가 반영된다. 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 48 윤정환 (lenablue12@en-gis.com)
  56. 56. V-2. Query Plans  Query Plans ① pgAdmin 실행 ② Query Tool 실행 ③ [Query] – [Query Analyze] 선택 ④ Query 실행 – nyc db 사용 SELECT Sum(popn_total) FROM nyc_neighborhoods neighborhoods JOIN nyc_census_blocks blocks ON ST_Intersects(neighborhoods.geom, blocks.geom) WHERE neighborhoods.name = 'West Village'; ⑤ [Output pane] – [Explain] 선택 ⑥ Sequence Scan : 테이블의모든 Row Scan ⑦ Index Scan : 제약조건 스캔 ⑧ Nested Loop ⑨ Hash Aggregate 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 49 윤정환 (lenablue12@en-gis.com)
  57. 57. V-3. 백업 & 복원  백업 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 50 윤정환 (lenablue12@en-gis.com)
  58. 58. V-3. 백업 & 복원  백업 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 51 윤정환 (lenablue12@en-gis.com)
  59. 59. V-3. 백업 & 복원  복원 절차 – 템플릿 데이터베이스 생성 –Restore(복원) 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 52 윤정환 (lenablue12@en-gis.com)
  60. 60. V-3. 백업 & 복원  복원 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 53 윤정환 (lenablue12@en-gis.com)
  61. 61. V-3. 백업 & 복원  주의사항 ① 상위버전과 하위버전 호환안됨 ② 하위버전 백업  상위버전 Restore 가능 ③ 상위버전 백업  하위버전 Restore 오류  버전충돌시 테이블/레이어 분리백업/복원 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 54 윤정환 (lenablue12@en-gis.com)
  62. 62. V-4. pgRouting  pgRouting  pgRouting 은 PostGIS/PostgreSQL에 라우팅 기능을 추한 PostGIS의 Extension  Camptocamp SA 에 의해 시작된 pgDijkstra의 확장판이며 Orkney 에 의해 확장  현재 Georepublic 에 의해 개발 및 유지 관리되고 있음  pgRouting는 GPLv2 라이선스 하에 사용 가능하며 개인, 기업 및 조직의 커뮤니티에 의해 지원  데이터베이스 기반 라우팅 접근 방법의 장점 – 데이터와 속성은 Quantum GIS, uDig 그리고 JDBC, ODBC 또는 Pl/pgSQL 등 다양한 클라이언트 에 의해 직접 갱신 가능하며, 클라이언트는 PC나 모바일 기기가 될 수 있음 – 데이터 변경 내용은 라우팅 엔진을 통해 즉시 반영되며, 재계산이 필요 없음 – “cost” 파라미터는 SQL을 통해 동적으로 계산되고 그 값은 다중 필드 및 테이블의 다양한 값을 사용 할 수 있음 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 55 윤정환 (lenablue12@en-gis.com)
  63. 63. V-4. pgRouting  지원 알고리즘  Shortest Path Dijkstra – 휴리스틱 기법(heuristic method)을 사용하지 않는 최단거리 알고리즘, 알고리즘을 개발한 Dr. Edsger Wybe Dijkstra 교수의 이름을 사용.  Shortest Path A-Star(A*) – 휴리스틱 기법을 사용하며 대용량 데이터셋에 적합한 최단거리 알고리즘  Shortest Path Shooting-Star(Shooting*) – 휴리스틱 기법을 사용하며 turn restrictions(U-turn, P-turn, left-turn 등), 신호등, 편도차선 등의 시제 도로 네트워크 를 위한 최단거리 알고리즘  Traveling Salesperson Problem (TSP) – 최대 40개의 포인트를 지원하는 Traveling Salesman Problem(TSP, 외판원 문제) 알고리즘  Driving Distance calculation (Isolines) – 도로네트워크에 기반을 둔 특정지점에서 특정 시간내에 도달 할 수 있는 영역. Service area 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 56 윤정환 (lenablue12@en-gis.com)
  64. 64. V-4. pgRouting  Network 데이터셋  도로 네트워크 데이터셋은 최소한 다음의 정보를 포함 – Road link ID (gid) – Road class (class_id): primary roads, secondary roads, and local roads 등 Hierarchies – Road link length (length): Cost - Length, Travel Time 등 – Road name (name) – Road geometry (the_geom) – Road restrictions & rule (optional): Lanes, Speed Limit, traffic light, one-way streets 등 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 57 윤정환 (lenablue12@en-gis.com)
  65. 65. V-4. pgRouting  공공기관 생산 도로 네트워크  공공기관에서 생산하는 도로네트워크로 활용 가능한 데이터는 다음의 4가지가 가능 – 1. ITS 전국표준노드링크: http://nodelink.its.go.kr/ – 2. UTIS 통합노드링크: http://www.utis.go.kr/ – 3. 국가교통DB센터 노드링크: http://www.ktdb.go.kr/ – 4. 새주소 도로구간  1. 2. 3. 데이터는 1:5000 축척을 기반으로 제작되었으며 주요 도로(고속국도/일반국도/지방도 수준) 중심으로 상세한 지역에서의 활용은 어려움  4. 새주소 도로구간은 도로중심선으로 구축되어 있으나 네트워크 분석자료로 활용하기 위해서는 위 상구조 편집이 필요하며 도로에 대한 상세정보(Restrictions & rules)는 없음 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 58 윤정환 (lenablue12@en-gis.com)
  66. 66. V-4. pgRouting  공공기관 생산 도로 네트워크 (사례지역 : 제주도, 배경은 주거지(건물) 밀집도) 새주소 도로중심선 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 59 윤정환 (lenablue12@en-gis.com)
  67. 67. V-4. pgRouting  Installing pgRouting  웹사이트에 http://pgrouting.org/download.html  PostGIS 2.1.1 bundle 설치시 기본적으로 pgrouting 2.0 설치됨  [pgAdmin] 실행  [New database] 생성 CREATE EXTENSION postgis; CREATE EXTENSION pgrouting; 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 60 윤정환 (lenablue12@en-gis.com)
  68. 68. V-4. pgRouting  pgRouting reference  pgRouting Demo – http://websi.openvrp.com – http://map.veloland.ch – http://www.ridethecity.com – http://www.pgrouting.org/gallery.html  Reference – http://www.pgrouting.org/ – http://workshop.pgrouting.org/ – http://underdark.wordpress.com/2011/02/07/a-beginners-guide-to-pgrouting/ – https://github.com/pgRouting/pgrouting/ – http://2011.foss4g.org/sites/2011.foss4g.org/files/slides/FOSS4G2011_pgrouting2.pdf – http://2010.foss4g.org/presentations/3284.pdf 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 61 윤정환 (lenablue12@en-gis.com)
  69. 69. V-5. Reference  reference  PostGIS - http://postgis.org/ – Docs - http://postgis.org/docs/  PostgreSQL - http://www.postgresl.org/ – Downloads - http://www.postgresql.org/download/ – Docs - http://www.postgresql.org/docs/ – JDBC Driver - http://jdbc.postgresql.org/ – .Net Driver - http://npgsql.projects.postgresql.org/ – Python Driver - http://www.pygresql.org/ – C/C++ Driver - http://www.postgresql.org/docs/8.4/static/libpq.html  PgAdmin III - http://www.pgadmin.org/  Open Source Desktop Clients – uDig - http://udig.refractions.net/ – QGIS - http://qgis.org/ – OpenJUMP - http://openjump.org/ 국가공간정보 거점대학 오픈 소스 GIS 심화 과정 62 윤정환 (lenablue12@en-gis.com)
  70. 70. 한국어 지부 함께 성장하는 새로운 방법, 오픈 소스 소프트웨어!! 감사합니다. Q&A

×