1. 한국어 지부
PostGIS 고급
2014년 1월 20일
국토교통부 공간정보 거점대학
오픈 소스 GIS 심화 과정
㈜엔지스
윤정환(lenablue12@en-gis.com)
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. I. PostGIS 설치 및 환경설정
- 일러두기 • 본 자료는 모두 Creative Commons License CC-BY-NC을 따릅니다.
• 본 교재에서는 교육의 편의상 Windows 32비트 기반의 프로그램들을 위주로 설명합니다.
• 본 교재에서 사용하는 샘플 데이터 셋은 실제 정보와 다르므로 교육용 이외에는 사용할 수 없습니다.
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. 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. 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. 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. 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. I-4. pgAdmin & Query Tool 사용하기
pgAdmin 사용하기
도구
설명
pgAdmin 도구에 새로운 서버를 추가합니다.
객체의 정보를 생성, 수정, 갱신, 삭제 후 새로고침 합니다.
테이블 등의 객체의 등록정보를 확인하거나 수정합니다.
선택된 객체와 같은 형태의 새로운 객체를 생성합니다.
선택된 객체를 삭제합니다.
SQL을 실행할 수 있는 Query 도구를 불러옵니다.
선택된 테이블을 편집할 수 있는 테이블 편집기를 불러옵니다.
필터를 적용해서 테이블을 편집할 수 있는 테이블 편집기를 불러옵니다.
Vacuum, Analyze 등 테이블 유지에 필요한 도구를 불러옵니다.
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
6
윤정환 (lenablue12@en-gis.com)
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. II. 공간데이터베이스 관리
- 일러두기 • 본 자료는 모두 Creative Commons License CC-BY-NC을 따릅니다.
• 본 교재에서는 교육의 편의상 Windows 32비트 기반의 프로그램들을 위주로 설명합니다.
• 본 교재에서 사용하는 샘플 데이터 셋은 실제 정보와 다르므로 교육용 이외에는 사용할 수 없습니다.
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. 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. 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. 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. 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. 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. 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. III. 공간함수 사용하기
- 일러두기 • 본 자료는 모두 Creative Commons License CC-BY-NC을 따릅니다.
• 본 교재에서는 교육의 편의상 Windows 32비트 기반의 프로그램들을 위주로 설명합니다.
• 본 교재에서 사용하는 샘플 데이터 셋은 실제 정보와 다르므로 교육용 이외에는 사용할 수 없습니다.
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. 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. 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. 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. 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. III-2. Spatial Relationships / Joins / Indexing / Projecting
Spatial Relationships
③ ST_Disjoint
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
ST_Crosses
21
윤정환 (lenablue12@en-gis.com)
27. III-2. Spatial Relationships / Joins / Indexing / Projecting
Spatial Relationships
⑤ ST_Overlaps
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
⑥ ST_Touches
22
윤정환 (lenablue12@en-gis.com)
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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. IV. 어플리케이션을 이용한
PostGIS 사용하기
- 일러두기 • 본 자료는 모두 Creative Commons License CC-BY-NC을 따릅니다.
• 본 교재에서는 교육의 편의상 Windows 32비트 기반의 프로그램들을 위주로 설명합니다.
• 본 교재에서 사용하는 샘플 데이터 셋은 실제 정보와 다르므로 교육용 이외에는 사용할 수 없습니다.
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. 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. IV-2. QGIS 이용한 PostGIS 이용하기
QGIS에서 PostGIS 레이어 불러와 사용하기
① QGIS 2.0 실행
② [레이어] – [PostGIS레이어 추가하기] 선택
③ [새로만들기] 선택, 정보 입력 후 [확인] 선택 – nyc 사용
④ [연결] 선택
⑤ public 선택 원하는 Shape 선택 후 [추가] 선택
⑥ 선택된 레이어 변경하기
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
39
윤정환 (lenablue12@en-gis.com)
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. 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. 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. 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. V. PostGIS 그밖의 기능
- 일러두기 • 본 자료는 모두 Creative Commons License CC-BY-NC을 따릅니다.
• 본 교재에서는 교육의 편의상 Windows 32비트 기반의 프로그램들을 위주로 설명합니다.
• 본 교재에서 사용하는 샘플 데이터 셋은 실제 정보와 다르므로 교육용 이외에는 사용할 수 없습니다.
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. 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. 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. 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. V-1. Tuning PostgreSQL for Spatial
Reload configuration
① pgAdmin 접속 종료(종료)
② OpenSeo Suit Dashboard Shutdown, Start
③ pgAdim 접속 (재시작)
④ 설정 정보가 반영된다.
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
48
윤정환 (lenablue12@en-gis.com)
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. V-3. 백업 & 복원
백업
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
50
윤정환 (lenablue12@en-gis.com)
58. V-3. 백업 & 복원
백업
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
51
윤정환 (lenablue12@en-gis.com)
59. V-3. 백업 & 복원
복원
절차
– 템플릿 데이터베이스 생성
–Restore(복원)
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
52
윤정환 (lenablue12@en-gis.com)
60. V-3. 백업 & 복원
복원
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
53
윤정환 (lenablue12@en-gis.com)
61. V-3. 백업 & 복원
주의사항
① 상위버전과 하위버전 호환안됨
② 하위버전 백업 상위버전 Restore 가능
③ 상위버전 백업 하위버전 Restore 오류
버전충돌시 테이블/레이어 분리백업/복원
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
54
윤정환 (lenablue12@en-gis.com)
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. 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. 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. 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. V-4. pgRouting
공공기관 생산 도로 네트워크 (사례지역 : 제주도, 배경은 주거지(건물) 밀집도)
새주소 도로중심선
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
59
윤정환 (lenablue12@en-gis.com)
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)