SlideShare a Scribd company logo
한국어 지부

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

공간정보거점대학 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