SlideShare a Scribd company logo
1 of 70
한국어 지부

PostGIS 고급
2014년 1월 20일
국토교통부 공간정보 거점대학

오픈 소스 GIS 심화 과정
㈜엔지스
윤정환(lenablue12@en-gis.com)
목차
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)
I. PostGIS 설치 및 환경설정
- 일러두기 • 본 자료는 모두 Creative Commons License CC-BY-NC을 따릅니다.
• 본 교재에서는 교육의 편의상 Windows 32비트 기반의 프로그램들을 위주로 설명합니다.

• 본 교재에서 사용하는 샘플 데이터 셋은 실제 정보와 다르므로 교육용 이외에는 사용할 수 없습니다.
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)
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)
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)
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)
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)
I-4. pgAdmin & Query Tool 사용하기
 pgAdmin 사용하기

도구

설명
pgAdmin 도구에 새로운 서버를 추가합니다.
객체의 정보를 생성, 수정, 갱신, 삭제 후 새로고침 합니다.
테이블 등의 객체의 등록정보를 확인하거나 수정합니다.
선택된 객체와 같은 형태의 새로운 객체를 생성합니다.

선택된 객체를 삭제합니다.
SQL을 실행할 수 있는 Query 도구를 불러옵니다.
선택된 테이블을 편집할 수 있는 테이블 편집기를 불러옵니다.
필터를 적용해서 테이블을 편집할 수 있는 테이블 편집기를 불러옵니다.

Vacuum, Analyze 등 테이블 유지에 필요한 도구를 불러옵니다.
국가공간정보 거점대학 오픈 소스 GIS 심화 과정

6

윤정환 (lenablue12@en-gis.com)
I-4. pgAdmin & Query Tool 사용하기
 Query Tool 사용하기
아이콘을 선택 Query Tool 실행
① pgAdmin Tool 툴바
② 샘플데이터 폴더의 postgis_korea_epsg_towgs84.sql을 열기
③ [F5] 선택 Query 실행 시킴, 한국 주요 좌표계 적용

국가공간정보 거점대학 오픈 소스 GIS 심화 과정

7

윤정환 (lenablue12@en-gis.com)
II. 공간데이터베이스 관리
- 일러두기 • 본 자료는 모두 Creative Commons License CC-BY-NC을 따릅니다.
• 본 교재에서는 교육의 편의상 Windows 32비트 기반의 프로그램들을 위주로 설명합니다.

• 본 교재에서 사용하는 샘플 데이터 셋은 실제 정보와 다르므로 교육용 이외에는 사용할 수 없습니다.
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)
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)
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)
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)
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)
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)
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)
III. 공간함수 사용하기
- 일러두기 • 본 자료는 모두 Creative Commons License CC-BY-NC을 따릅니다.
• 본 교재에서는 교육의 편의상 Windows 32비트 기반의 프로그램들을 위주로 설명합니다.

• 본 교재에서 사용하는 샘플 데이터 셋은 실제 정보와 다르므로 교육용 이외에는 사용할 수 없습니다.
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)
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)
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)
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)
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)
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)
III-2. Spatial Relationships / Joins / Indexing / Projecting
 Spatial Relationships
③ ST_Disjoint

국가공간정보 거점대학 오픈 소스 GIS 심화 과정

ST_Crosses

21

윤정환 (lenablue12@en-gis.com)
III-2. Spatial Relationships / Joins / Indexing / Projecting
 Spatial Relationships
⑤ ST_Overlaps

국가공간정보 거점대학 오픈 소스 GIS 심화 과정

⑥ ST_Touches

22

윤정환 (lenablue12@en-gis.com)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
IV. 어플리케이션을 이용한
PostGIS 사용하기
- 일러두기 • 본 자료는 모두 Creative Commons License CC-BY-NC을 따릅니다.
• 본 교재에서는 교육의 편의상 Windows 32비트 기반의 프로그램들을 위주로 설명합니다.

• 본 교재에서 사용하는 샘플 데이터 셋은 실제 정보와 다르므로 교육용 이외에는 사용할 수 없습니다.
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)
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)
IV-2. QGIS 이용한 PostGIS 이용하기
 QGIS에서 PostGIS 레이어 불러와 사용하기
① QGIS 2.0 실행
② [레이어] – [PostGIS레이어 추가하기] 선택
③ [새로만들기] 선택, 정보 입력 후 [확인] 선택 – nyc 사용
④ [연결] 선택
⑤ public 선택 원하는 Shape 선택 후 [추가] 선택
⑥ 선택된 레이어 변경하기

국가공간정보 거점대학 오픈 소스 GIS 심화 과정

39

윤정환 (lenablue12@en-gis.com)
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)
IV-4. uDig 이용한 PostGIS 이용하기
 uDig에서 PostGIS 레이어 불러와 이용하기
① uDig 1.46 실행
② [파일] – [새로운 지도작업] – [지도] 선택
③ [레이어] – [추가] 선택
④ [PostGIS] 선택, [다음] 선택
⑤ [Add] 선택
⑥ Host, User Name, Password 입력
⑦ Database 콤보박스 [korea] 선택 후 [List] 선택
⑧ 여러 레이어 체크박스 선택 후 [완료]

국가공간정보 거점대학 오픈 소스 GIS 심화 과정

41

윤정환 (lenablue12@en-gis.com)
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)
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)
V. PostGIS 그밖의 기능
- 일러두기 • 본 자료는 모두 Creative Commons License CC-BY-NC을 따릅니다.
• 본 교재에서는 교육의 편의상 Windows 32비트 기반의 프로그램들을 위주로 설명합니다.

• 본 교재에서 사용하는 샘플 데이터 셋은 실제 정보와 다르므로 교육용 이외에는 사용할 수 없습니다.
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)
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)
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)
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)
V-1. Tuning PostgreSQL for Spatial
 Reload configuration
① pgAdmin 접속 종료(종료)
② OpenSeo Suit Dashboard Shutdown, Start
③ pgAdim 접속 (재시작)
④ 설정 정보가 반영된다.

국가공간정보 거점대학 오픈 소스 GIS 심화 과정

48

윤정환 (lenablue12@en-gis.com)
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)
V-3. 백업 & 복원
 백업

국가공간정보 거점대학 오픈 소스 GIS 심화 과정

50

윤정환 (lenablue12@en-gis.com)
V-3. 백업 & 복원
 백업

국가공간정보 거점대학 오픈 소스 GIS 심화 과정

51

윤정환 (lenablue12@en-gis.com)
V-3. 백업 & 복원
 복원

절차
– 템플릿 데이터베이스 생성
–Restore(복원)

국가공간정보 거점대학 오픈 소스 GIS 심화 과정

52

윤정환 (lenablue12@en-gis.com)
V-3. 백업 & 복원
 복원

국가공간정보 거점대학 오픈 소스 GIS 심화 과정

53

윤정환 (lenablue12@en-gis.com)
V-3. 백업 & 복원
 주의사항

① 상위버전과 하위버전 호환안됨
② 하위버전 백업  상위버전 Restore 가능
③ 상위버전 백업  하위버전 Restore 오류
 버전충돌시 테이블/레이어 분리백업/복원

국가공간정보 거점대학 오픈 소스 GIS 심화 과정

54

윤정환 (lenablue12@en-gis.com)
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)
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)
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)
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)
V-4. pgRouting
 공공기관 생산 도로 네트워크 (사례지역 : 제주도, 배경은 주거지(건물) 밀집도)

새주소 도로중심선

국가공간정보 거점대학 오픈 소스 GIS 심화 과정

59

윤정환 (lenablue12@en-gis.com)
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)
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)
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)
한국어 지부

함께 성장하는 새로운 방법,
오픈 소스 소프트웨어!!

감사합니다.

Q&A

More Related Content

What's hot

공간정보거점대학 1.geo server_고급과정
공간정보거점대학 1.geo server_고급과정공간정보거점대학 1.geo server_고급과정
공간정보거점대학 1.geo server_고급과정BJ Jang
 
공간SQL을 이용한 공간자료분석 기초실습
공간SQL을 이용한 공간자료분석 기초실습공간SQL을 이용한 공간자료분석 기초실습
공간SQL을 이용한 공간자료분석 기초실습BJ Jang
 
공간정보거점대학 - PyQGIS 및 플러그인 개발
공간정보거점대학 - PyQGIS 및 플러그인 개발공간정보거점대학 - PyQGIS 및 플러그인 개발
공간정보거점대학 - PyQGIS 및 플러그인 개발MinPa Lee
 
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판BJ Jang
 
GeoServer 2.4.x 한국어 사용자 지침서
GeoServer 2.4.x 한국어 사용자 지침서GeoServer 2.4.x 한국어 사용자 지침서
GeoServer 2.4.x 한국어 사용자 지침서SANGHEE SHIN
 
[FOSS4G Korea 2021]Workshop-QGIS-TIPS-20211028
[FOSS4G Korea 2021]Workshop-QGIS-TIPS-20211028[FOSS4G Korea 2021]Workshop-QGIS-TIPS-20211028
[FOSS4G Korea 2021]Workshop-QGIS-TIPS-20211028MinPa Lee
 
[FOSS4G Korea 2016] Workshop - Advanced GeoServer
[FOSS4G Korea 2016] Workshop - Advanced GeoServer[FOSS4G Korea 2016] Workshop - Advanced GeoServer
[FOSS4G Korea 2016] Workshop - Advanced GeoServerMinPa Lee
 
State of OpenGXT: 오픈소스 공간분석엔진
State of OpenGXT: 오픈소스 공간분석엔진State of OpenGXT: 오픈소스 공간분석엔진
State of OpenGXT: 오픈소스 공간분석엔진MinPa Lee
 
QGIS 공식 Training Manual 한국어판
QGIS 공식 Training Manual 한국어판 QGIS 공식 Training Manual 한국어판
QGIS 공식 Training Manual 한국어판 SANGHEE SHIN
 
QGIS를 활용한 공간분석 입문(1일 6시간)
QGIS를 활용한 공간분석 입문(1일 6시간)QGIS를 활용한 공간분석 입문(1일 6시간)
QGIS를 활용한 공간분석 입문(1일 6시간)Byeong-Hyeok Yu
 
오픈소스 GIS의 이해 - OSgeo Projects 중심
오픈소스 GIS의 이해 - OSgeo Projects 중심오픈소스 GIS의 이해 - OSgeo Projects 중심
오픈소스 GIS의 이해 - OSgeo Projects 중심MinPa Lee
 
QGIS 고급 및 PyQGIS - 김기웅, 임영현
QGIS 고급 및 PyQGIS - 김기웅, 임영현 QGIS 고급 및 PyQGIS - 김기웅, 임영현
QGIS 고급 및 PyQGIS - 김기웅, 임영현 SANGHEE SHIN
 
[QGIS] 수치지도를 이용한 DEM 생성과 지형분석
[QGIS] 수치지도를 이용한 DEM 생성과 지형분석[QGIS] 수치지도를 이용한 DEM 생성과 지형분석
[QGIS] 수치지도를 이용한 DEM 생성과 지형분석MinPa Lee
 
Qgis 기초 2019
Qgis 기초 2019Qgis 기초 2019
Qgis 기초 2019Joonho Lee
 
오픈소스GIS를 활용한 서버기반 공간분석과 시각화
오픈소스GIS를 활용한 서버기반 공간분석과 시각화오픈소스GIS를 활용한 서버기반 공간분석과 시각화
오픈소스GIS를 활용한 서버기반 공간분석과 시각화MinPa Lee
 
오픈소스GIS의 이해와 활용
오픈소스GIS의 이해와 활용오픈소스GIS의 이해와 활용
오픈소스GIS의 이해와 활용SANGHEE SHIN
 
공간정보아카데미 - 오픈소스GIS 분석가과정 - QGIS 공간분석일반
공간정보아카데미 - 오픈소스GIS 분석가과정 - QGIS 공간분석일반공간정보아카데미 - 오픈소스GIS 분석가과정 - QGIS 공간분석일반
공간정보아카데미 - 오픈소스GIS 분석가과정 - QGIS 공간분석일반MinPa Lee
 
QGIS 실습 (총 7차시)
QGIS 실습 (총 7차시)QGIS 실습 (총 7차시)
QGIS 실습 (총 7차시)Byeong-Hyeok Yu
 
PyQGIS와 PyQt를 이용한 QGIS 기능 확장
PyQGIS와 PyQt를 이용한 QGIS 기능 확장PyQGIS와 PyQt를 이용한 QGIS 기능 확장
PyQGIS와 PyQt를 이용한 QGIS 기능 확장MinPa Lee
 

What's hot (20)

공간정보거점대학 1.geo server_고급과정
공간정보거점대학 1.geo server_고급과정공간정보거점대학 1.geo server_고급과정
공간정보거점대학 1.geo server_고급과정
 
공간SQL을 이용한 공간자료분석 기초실습
공간SQL을 이용한 공간자료분석 기초실습공간SQL을 이용한 공간자료분석 기초실습
공간SQL을 이용한 공간자료분석 기초실습
 
공간정보거점대학 - PyQGIS 및 플러그인 개발
공간정보거점대학 - PyQGIS 및 플러그인 개발공간정보거점대학 - PyQGIS 및 플러그인 개발
공간정보거점대학 - PyQGIS 및 플러그인 개발
 
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
 
GeoServer 2.4.x 한국어 사용자 지침서
GeoServer 2.4.x 한국어 사용자 지침서GeoServer 2.4.x 한국어 사용자 지침서
GeoServer 2.4.x 한국어 사용자 지침서
 
[FOSS4G Korea 2021]Workshop-QGIS-TIPS-20211028
[FOSS4G Korea 2021]Workshop-QGIS-TIPS-20211028[FOSS4G Korea 2021]Workshop-QGIS-TIPS-20211028
[FOSS4G Korea 2021]Workshop-QGIS-TIPS-20211028
 
[FOSS4G Korea 2016] Workshop - Advanced GeoServer
[FOSS4G Korea 2016] Workshop - Advanced GeoServer[FOSS4G Korea 2016] Workshop - Advanced GeoServer
[FOSS4G Korea 2016] Workshop - Advanced GeoServer
 
State of OpenGXT: 오픈소스 공간분석엔진
State of OpenGXT: 오픈소스 공간분석엔진State of OpenGXT: 오픈소스 공간분석엔진
State of OpenGXT: 오픈소스 공간분석엔진
 
QGIS 공식 Training Manual 한국어판
QGIS 공식 Training Manual 한국어판 QGIS 공식 Training Manual 한국어판
QGIS 공식 Training Manual 한국어판
 
QGIS를 활용한 공간분석 입문(1일 6시간)
QGIS를 활용한 공간분석 입문(1일 6시간)QGIS를 활용한 공간분석 입문(1일 6시간)
QGIS를 활용한 공간분석 입문(1일 6시간)
 
QGIS 활용
QGIS 활용QGIS 활용
QGIS 활용
 
오픈소스 GIS의 이해 - OSgeo Projects 중심
오픈소스 GIS의 이해 - OSgeo Projects 중심오픈소스 GIS의 이해 - OSgeo Projects 중심
오픈소스 GIS의 이해 - OSgeo Projects 중심
 
QGIS 고급 및 PyQGIS - 김기웅, 임영현
QGIS 고급 및 PyQGIS - 김기웅, 임영현 QGIS 고급 및 PyQGIS - 김기웅, 임영현
QGIS 고급 및 PyQGIS - 김기웅, 임영현
 
[QGIS] 수치지도를 이용한 DEM 생성과 지형분석
[QGIS] 수치지도를 이용한 DEM 생성과 지형분석[QGIS] 수치지도를 이용한 DEM 생성과 지형분석
[QGIS] 수치지도를 이용한 DEM 생성과 지형분석
 
Qgis 기초 2019
Qgis 기초 2019Qgis 기초 2019
Qgis 기초 2019
 
오픈소스GIS를 활용한 서버기반 공간분석과 시각화
오픈소스GIS를 활용한 서버기반 공간분석과 시각화오픈소스GIS를 활용한 서버기반 공간분석과 시각화
오픈소스GIS를 활용한 서버기반 공간분석과 시각화
 
오픈소스GIS의 이해와 활용
오픈소스GIS의 이해와 활용오픈소스GIS의 이해와 활용
오픈소스GIS의 이해와 활용
 
공간정보아카데미 - 오픈소스GIS 분석가과정 - QGIS 공간분석일반
공간정보아카데미 - 오픈소스GIS 분석가과정 - QGIS 공간분석일반공간정보아카데미 - 오픈소스GIS 분석가과정 - QGIS 공간분석일반
공간정보아카데미 - 오픈소스GIS 분석가과정 - QGIS 공간분석일반
 
QGIS 실습 (총 7차시)
QGIS 실습 (총 7차시)QGIS 실습 (총 7차시)
QGIS 실습 (총 7차시)
 
PyQGIS와 PyQt를 이용한 QGIS 기능 확장
PyQGIS와 PyQt를 이용한 QGIS 기능 확장PyQGIS와 PyQt를 이용한 QGIS 기능 확장
PyQGIS와 PyQt를 이용한 QGIS 기능 확장
 

Viewers also liked

전자해도 표준과 뷰어 (최규성)
전자해도 표준과 뷰어 (최규성)전자해도 표준과 뷰어 (최규성)
전자해도 표준과 뷰어 (최규성)Kyu-sung Choi
 
전자해도세미나
전자해도세미나전자해도세미나
전자해도세미나Jiyoon Kim
 
오픈소스 GIS 개요
오픈소스 GIS 개요오픈소스 GIS 개요
오픈소스 GIS 개요slhead1
 
QGIS 기초
QGIS 기초 QGIS 기초
QGIS 기초 slhead1
 
PostGIS 2.0 한국어 사용자 설명서
PostGIS 2.0 한국어 사용자 설명서PostGIS 2.0 한국어 사용자 설명서
PostGIS 2.0 한국어 사용자 설명서SANGHEE SHIN
 
오픈 소스 GIS와 OSGeo
오픈 소스 GIS와 OSGeo오픈 소스 GIS와 OSGeo
오픈 소스 GIS와 OSGeoSANGHEE SHIN
 

Viewers also liked (6)

전자해도 표준과 뷰어 (최규성)
전자해도 표준과 뷰어 (최규성)전자해도 표준과 뷰어 (최규성)
전자해도 표준과 뷰어 (최규성)
 
전자해도세미나
전자해도세미나전자해도세미나
전자해도세미나
 
오픈소스 GIS 개요
오픈소스 GIS 개요오픈소스 GIS 개요
오픈소스 GIS 개요
 
QGIS 기초
QGIS 기초 QGIS 기초
QGIS 기초
 
PostGIS 2.0 한국어 사용자 설명서
PostGIS 2.0 한국어 사용자 설명서PostGIS 2.0 한국어 사용자 설명서
PostGIS 2.0 한국어 사용자 설명서
 
오픈 소스 GIS와 OSGeo
오픈 소스 GIS와 OSGeo오픈 소스 GIS와 OSGeo
오픈 소스 GIS와 OSGeo
 

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

[공간정보연구원] 1일차 - QGIS 개요 및 기초
[공간정보연구원] 1일차 - QGIS 개요 및 기초[공간정보연구원] 1일차 - QGIS 개요 및 기초
[공간정보연구원] 1일차 - QGIS 개요 및 기초slhead1
 
공간정보아카데미 QGIS 기초 (2017.5)
공간정보아카데미 QGIS 기초 (2017.5)공간정보아카데미 QGIS 기초 (2017.5)
공간정보아카데미 QGIS 기초 (2017.5)Sungjin Kang
 
오픈소스 GIS 실습 (1)
오픈소스 GIS 실습 (1)오픈소스 GIS 실습 (1)
오픈소스 GIS 실습 (1)Byeong-Hyeok Yu
 
[FOSS4G] uDig Desktop GIS
[FOSS4G] uDig Desktop GIS[FOSS4G] uDig Desktop GIS
[FOSS4G] uDig Desktop GISMinPa Lee
 
지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기
지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기
지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기Byeong-Hyeok Yu
 
웃으면서Python
웃으면서Python웃으면서Python
웃으면서PythonJiyoon Kim
 
오픈소스기반 상용소프트웨어 GXT의 적용사례
오픈소스기반 상용소프트웨어 GXT의 적용사례오픈소스기반 상용소프트웨어 GXT의 적용사례
오픈소스기반 상용소프트웨어 GXT의 적용사례HaNJiN Lee
 
공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반BJ Jang
 
4. Application - Oozie Fork
4. Application - Oozie Fork4. Application - Oozie Fork
4. Application - Oozie Forkmerry7
 
2. Application - Sqoop Import
2. Application - Sqoop Import2. Application - Sqoop Import
2. Application - Sqoop Importmerry7
 
[FOSS4G KOREA 2014] Introduce uDig
[FOSS4G KOREA 2014] Introduce uDig[FOSS4G KOREA 2014] Introduce uDig
[FOSS4G KOREA 2014] Introduce uDig기웅 김
 
GeoNode - Open Source Geospatial Content Management System
GeoNode - Open Source Geospatial Content Management SystemGeoNode - Open Source Geospatial Content Management System
GeoNode - Open Source Geospatial Content Management SystemMinPa Lee
 
mago3d workshop in FOSS4G Korea 2018
mago3d workshop in FOSS4G Korea 2018mago3d workshop in FOSS4G Korea 2018
mago3d workshop in FOSS4G Korea 2018Gaia3D,Inc.
 
POSTGRES_사칙연산_익스텐션만들기.pdf
POSTGRES_사칙연산_익스텐션만들기.pdfPOSTGRES_사칙연산_익스텐션만들기.pdf
POSTGRES_사칙연산_익스텐션만들기.pdfLee Dong Wook
 
좌충우돌 Data Engineering 학습기
좌충우돌 Data Engineering 학습기좌충우돌 Data Engineering 학습기
좌충우돌 Data Engineering 학습기DONGMIN LEE
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?주식회사 내일비
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?Sang-ho Choi
 
오픈소스 공간통계분석 패키지 개발
오픈소스  공간통계분석 패키지 개발오픈소스  공간통계분석 패키지 개발
오픈소스 공간통계분석 패키지 개발MinPa Lee
 
postgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdfpostgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdfLee Dong Wook
 

Similar to 공간정보거점대학 PostGIS 고급과정 (20)

[공간정보연구원] 1일차 - QGIS 개요 및 기초
[공간정보연구원] 1일차 - QGIS 개요 및 기초[공간정보연구원] 1일차 - QGIS 개요 및 기초
[공간정보연구원] 1일차 - QGIS 개요 및 기초
 
공간정보아카데미 QGIS 기초 (2017.5)
공간정보아카데미 QGIS 기초 (2017.5)공간정보아카데미 QGIS 기초 (2017.5)
공간정보아카데미 QGIS 기초 (2017.5)
 
오픈소스 GIS 실습 (1)
오픈소스 GIS 실습 (1)오픈소스 GIS 실습 (1)
오픈소스 GIS 실습 (1)
 
[FOSS4G] uDig Desktop GIS
[FOSS4G] uDig Desktop GIS[FOSS4G] uDig Desktop GIS
[FOSS4G] uDig Desktop GIS
 
지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기
지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기
지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기
 
웃으면서Python
웃으면서Python웃으면서Python
웃으면서Python
 
오픈소스기반 상용소프트웨어 GXT의 적용사례
오픈소스기반 상용소프트웨어 GXT의 적용사례오픈소스기반 상용소프트웨어 GXT의 적용사례
오픈소스기반 상용소프트웨어 GXT의 적용사례
 
공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반
 
4. Application - Oozie Fork
4. Application - Oozie Fork4. Application - Oozie Fork
4. Application - Oozie Fork
 
2. Application - Sqoop Import
2. Application - Sqoop Import2. Application - Sqoop Import
2. Application - Sqoop Import
 
[FOSS4G KOREA 2014] Introduce uDig
[FOSS4G KOREA 2014] Introduce uDig[FOSS4G KOREA 2014] Introduce uDig
[FOSS4G KOREA 2014] Introduce uDig
 
GeoNode - Open Source Geospatial Content Management System
GeoNode - Open Source Geospatial Content Management SystemGeoNode - Open Source Geospatial Content Management System
GeoNode - Open Source Geospatial Content Management System
 
Nest js 101
Nest js 101Nest js 101
Nest js 101
 
mago3d workshop in FOSS4G Korea 2018
mago3d workshop in FOSS4G Korea 2018mago3d workshop in FOSS4G Korea 2018
mago3d workshop in FOSS4G Korea 2018
 
POSTGRES_사칙연산_익스텐션만들기.pdf
POSTGRES_사칙연산_익스텐션만들기.pdfPOSTGRES_사칙연산_익스텐션만들기.pdf
POSTGRES_사칙연산_익스텐션만들기.pdf
 
좌충우돌 Data Engineering 학습기
좌충우돌 Data Engineering 학습기좌충우돌 Data Engineering 학습기
좌충우돌 Data Engineering 학습기
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
 
오픈소스 공간통계분석 패키지 개발
오픈소스  공간통계분석 패키지 개발오픈소스  공간통계분석 패키지 개발
오픈소스 공간통계분석 패키지 개발
 
postgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdfpostgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdf
 

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

  • 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비트 기반의 프로그램들을 위주로 설명합니다. • 본 교재에서 사용하는 샘플 데이터 셋은 실제 정보와 다르므로 교육용 이외에는 사용할 수 없습니다.
  • 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. 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)
  • 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. 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. 한국어 지부 함께 성장하는 새로운 방법, 오픈 소스 소프트웨어!! 감사합니다. Q&A