Bao Cao Postgis

You might also like

Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 24

I.

KHI NIM V CI T
PostGIS l mt c s d liu c bit m rng ca PostgreSQL. N h tr tt c
cc function v cc object nh ngha trong OpenGIS Simple Feature For SQL. Ging
nh Oracle, DB2 v SQL server, PostGIS c kh nng to mt c s d liu quan h.
PostGIS c th i li tn nh PostgreSQL Spatial. N c n rng hn vi nhng
kh nng:
M rng lu tr kiu d liu hnh hc cho cc kiu d liu thng dng ( varchar,
char, integer, date).
Thm vo cc functions cho kiu hnh hc (geometry) v cung cp cc thng tin hu
ch .
ST_Distance(geometry,geometry), ST_Area(geometry), ST_Length(geometry),
ST_Intersects(geometry, geometry
C ch nh ch s cho cc cu truy vn vi khng gian gii hn, tr v cc record
nhanh chng t cc bng d liu khng l.
Nhng chc nng c bn ca c s d liu khng gian d dng c lit k nh:
kiu, hm, ch mc. iu quan trng nht l khi lng ca vic x l khng gian bn
trong c s d liu khi nhng kh nng c gii thiu: chiu li (re_projection),
nhng phn tch ln t bn d liu, tm kim xp x, lc thuc tnh, v nhiu hn na.
-

1. Download ti liu v phn mm


The PostgreSQL source code is available from: http://www.postgresql.org/.
The PostGIS source code is available from: http://postgis.refractions.net/.
The GEOS source code is available from: http://geos.refractions.net/.
The Proj4 source code is available from: http://proj.maptools.org/.
The PgAdmin administration tool is available from: http://www.pgadmin.org.
2. Ci t PostgreSQL
Cc bc ci t:
Double click vo file postgrespl-8.2.msi
La chn ngn ng

Click next

Khi la chn ci t chn do not enable cho ci t PostGIS

Nu account cha c trn my tnh, click OK

Sau click NO

Chn li ngn ng, tn v password cho csdl

PL/pgSQL l ngn ng ca postgreSQL

Chn cc chc nng ging hnh sau

Sau click Next ci t


5

3. Ci t PostGIS
Double-click the postgis-pg82-setup-1.3.1.exe file

Chn Create Database

Chn th mc ci t

Chp nhn cc gi tr mc nh
Click instanll hon tt vic ci t
4. Cch s dng
iu hng cho PostgreSQL v chy PgAdmin III.
Double click trn PostgreeSQL Database Server. Xc nhn li password.

iu hng cho Databases: Edit New Object New Database. Thm mt c


s d liu vi tn postgis, vi postgres template_postgis.

M mt c s d liu PostGIS mi.

Navigate to postgis Schemas public Tables. Bn c th thy c cc bng


geometry_columns v spatial_ref_sys. l nhng bng tiu chun c to bi
PostGIS. Bng bt u trong pg_ts_ c s dng bi modulo full_text_search v c
th b b qua.

10

5. Enabling PostGIS Without template_postgis


Nu c s d liu khng c mt template_postgis s dng nh mt c s d liu khun
mu to ra, bn c th load PostGIS bi SQL scrips c ci t trn PostGIS functions.

11

Trong PgAdmin, m ca s SQL bng cch click v SQL button

Chn File Open


C:\ProgramFiles\PostgreSQL\8.2\share\contrib\lwpostgis.sql

Nhn Run. File lwpostgis.sql s c thc thi. Cc functions v cc objects


trong postgis database s c a ra.

Chn File Open v


C:\ProgramFiles\PostgreSQL\8.2\share\contrib\spatial_ref_sys.sql

Nhn Run li mt ln na. File spatial_ref_sys.sql s c thc thi. C s


d liu postgis s c ci t v sn sng cho vic load d liu. C mt s im cn
lu cho cc ng dng khc:
Database Name: postgis
User Name:
postgres
II.
S DNG POSTGIS
Kt ni ti postgis vi pgAdmin v m ca s truy vn s dng Tools Query
Tool hoc nt SQL trn .
II.1. Khng gian SQL n gin

12

Chng ta s kim tra vic to mt bng vi mt ct gi tr hnh hc, b xung thm


mt vi i tng khng gian, v chy mt s hm khng gian.
Create table points (pt geometry, name varchar);
Insert into points values (POINT (0 0),Origin);
Insert into points values (POINT (5 0),X Axis);
insert into points values ( 'POINT(0 5)', 'Y Axis' );
select name, ST_AsText(pt), ST_Distance(pt, 'POINT(5 5)') from points;

Ch : hai functions c s d liu c s dng ST_Distance() v ST_AsText().


ST_Distance() tnh ton khong cch nh nht theo thuyt Cartesian gia hai i tng.
ST_AsText() tr v nguyn bn ca i tng c gi.
II.2. OGC metadata table
Khi mt c s d liu c c t vi PostGIS, hai bng siu d liu c to ra, theo
l thuyt Open Geospatial Consortium Simple Features cho c t SQL bng
SPATIAL_REF_SYS v GEOMETRY_COLUMNS.
GEOMETRY_COLUMNS serves nh mt th mc ca khng gian cho php tn ti
trong database. N khng gi up-to-date t ng, v vy chy mt v d n gin CREATE
TABLE bao gm mt GEOMETRY s khng thm mt entry vo bng. Khng gian
13

AddGeometryColumn() c th cung cp s dng ng thi thm mt ct geometry vo


mt bng khng phi khng gian trong khi update bng GEOMETRY COLUMNS.
Cu trc ca GEOMETRY_COLUMNS l:
Table "public.geometry_columns"
Column
|
Type
| Modifiers
-------------------+------------------------+----------f_table_catalog
| character varying(256) | not null
f_table_schema
| character varying(256) | not null
f_table_name
| character varying(256) | not null
f_geometry_column | character varying(256) | not null
coord_dimension
| integer
| not null
srid
| integer
| not null
type
| character varying(30) | not null

Mi ct nh ngha duy nht bi s kt hp ca schema/table/column. Thm cc siu d


liu v kch thc ca d liu (COORD_DIMENTSION), tham chiu h thng (SRID) v
kiu geometry (TYPE) c cung cp trong cc bng.
SPATIAL_REF_SYS serves nh mt th mc tham chiu h thng cho c bn d
tho hai chiu v h thng o c. Mi geometry trong c s d liu khng gian c mt
SRID(spatial referencing identifier ) kt hp, n l mt s integer. SRID c th c
function ST_SRID.
II.3. LOADING SHAPE FILE
By gi chng ta s load mt v d trong database (C:\postgis-workshop\data\). D liu
mu trong Shape file, v vy chng ta cn chuyn i kiu. S dng shp2pgsql chuyn
i v load n vo trong database. Qu trnh chuyn i trn Windows (Start -> Run
cmd.exe).
u tin chy file pg_setenv.bat, ci t d liu PostgreSQL vo trong ng dn
d dng s dng cng c shp2pgsql.
Chng ta c th to nh dng nh mt file, sau load file vi psql hoc dn kt qu
ca shp2pgsql trc tip trong psql ra mn hnh. S dng la chn u tin cho d liu
bc_pubs.
C:\> cd \postgis-workshop\data
C:\postgis-workshop\data> dir *.shp
Directory of C:\postgis-workshop\data>
06/26/2007
06/26/2007

11:15a
11:15a

278,184 bc_municipality.shp
19,687,612 bc_roads.shp

14

06/26/2007
06/26/2007
06/26/2007
06/26/2007
06/26/2007
06/26/2007
08/22/2007
06/26/2007
06/26/2007

11:15a
1,537,144 countries.shp
11:15a
10,576 bc_pubs.shp
11:15a
466,308 timezone.shp
11:15a
71,024 cities.shp
11:15a
1,332 bc_hospitals.shp
11:15a
3,662,668 newyork_census.shp
10:21a
8,359,672 bc_voting_areas.shp
11:15a
1,196,124 bc_border.shp
11:15a
1,518,248 usa_counties.shp
11 File(s)
36,788,892 bytes
0 Dir(s) 539,488,157,696 bytes free

C:\postgis-workshop\data>
C:\postgis-workshop\data>
> bc_pubs.sql
C:\postgis-workshop\data>
Password:
. . . . . .
C:\postgis-workshop\data>
C:\postgis-workshop\data>
Password:

pg_setenv.bat
shp2pgsql i D -s 3005 bc_pubs.shp bc_pubs
psql U postgres f bc_pubs.sql d postgis
pg_shpsql.bat
psql U postgres f bc_data.sql d postgis

BEGIN
INSERT 215525 1
. . . . . .
COMMIT

Cc lnh SHP2PGSQL hay s dng


-D

S dng nh dng database dump. Mc nh s dng nh dng


insert vi yu cu database cho mi dng lnh. nh dng dump
nhanh hn nhiu so vi mc nh load.

-s <#>

S dng SRID (spatial reference system identifier) khi to bng hnh


hc. iu ny c bit quan trng, SRID yu cu chuyn i trong
database.

-i

S dng 32bits cho cc gi tr s. Phn DBF ca shape file c th bao


gm thng tin u v kch thc ca integer c bn ln hn so vi
integer trong file d liu.

-W

Khi lm vic vi th hin database m ha d liu quc t

-a

Ch ni d liu. Ch mc nh c to ra, u tin to mt


bng trng sau in d liu vo. Ch ni thm tng ng vi
bng tn ti v d dng load d liu. La chn ny hu ch cho
load nhiu files vi thuc tnh nh anh.
15

II.4. Quan st d liu trong PostGIS


C mt s m ngun m c chn la cho desktop ci nhn tng quan/ son tho d liu
PostGIS.
QGIS, mt chng trnh C++/Qt
uDig, mt chng trnh Java/Eclipse
gvSIG, mt chng trnh Java/Swing
quan st d liu v cc ng dng trong uDig chn: File -> New -> Map sau File ->
new -> Layer. Chn mt PostGis layer type, sau enter kt ni thng tin trong hp
dialog:
There are a number of open source options for desktop viewers / editors of PostGIS data:
QGIS, a C++ / Qt program;
uDig, a Java / Eclipse program; and,
gvSIG, a Java / Swing program.
To view the data in uDig fire up the uDig application and select: FileNew->Map, then
FileNewLayer. Select a PostGIS layer type, then enter the connection information
into the dialog box:

16

II.5. nh ch s
II.5.1. To mt ch s khng gian
Ch s l phn cc k quan trng cho cc bng khng gian ln, bi v chng cho php truy
vn nhanh chng v nhn cc records chng cn. T khi PostGIS c thng xuyn s dng
cho lng ln d liu c lp, nhng lm th no xy dng v s dng ch mc nh th
no?
Ch s PostGIS c nh theo kiu R-Tree, cng c nh ch s ph bin
GiST( Generalized Search Tree).
CREATE INDEX bc_roads_gidx ON bc_roads USING GIST ( the_geom );
CREATE INDEX bc_pubs_gidx ON bc_pubs USING GIST ( the_geom );
CREATE INDEX bc_voting_areas_gidx ON bc_voting_areas USING GIST ( the_geom );
CREATE INDEX bc_municipality_gidx ON bc_municipality USING GIST ( the_geom );
CREATE INDEX bc_hospitals_gidx ON bc_hospitals USING GIST
( the_geom );

By gi xa ht d liu trong database v update ch s la chn trng thi:


VACUUM ANALYZE;

II.5.2. S dng ch s
Tt c database khng gian thc thi l hai giai on t cc x l khng gian:

Giai on 1 l to ch s hp tm kim.

Giai on 2 l kim tra x l chnh xc cc tp hp con tr v t giai on 1.

Trong PostGIS giai on 1 tm kim ch s c kch hot bng cch s dng ton t
&& vi ngha chng lp ln ranh gii.
So snh cc functions PostGIS (ST_Intersects(), ST_DWithin(), ST_Contains(), etc) t ng
s dng ton t &&.
Phin bn khng ch s ca cng function th s dng tin t _ST_Intersects(),
_ST_Contains(), etc).
II.5.3. Kim tra ch s khng gian
So snh hai cc s dng sau:
u tin, thi tian truy vn non-index:
17

SELECT gid, name


FROM bc_roads
WHERE
_ST_Crosses(
the_geom,
ST_GeomFromText('LINESTRING(1220446 477473,1220417 477559)', 3005)
);
gid |
name
-------+-------------64556 | Kitchener St
(1 row)

y l thi gian giai on hai, n bao gm mt ch s tm kim


SELECT gid, name
FROM bc_roads
WHERE
ST_Crosses(
the_geom,
ST_GeomFromText('LINESTRING(1220446 477473,1220417 477559)', 3005)
);
gid |
name
-------+-------------64555 | Kitchener St
(1 row)

bn s c kt qu tt hn vi cc truy vn th hai.
II.5.4. Index v k hoch truy vn
Vi mt s lng ln d liu c lu trn cng, vic truy xut n s rt l chm chp.
iu ct li ca gii thut database l tm kim nhiu d liu nhng ch mt vi disk c tm
kim ch khng tm kim ton b. Trong PostgreSQL, bn c th c lng k hoch truy vn
cho bt k truy vn SQL no trong khong thi gian EXPLAIN trc khi truy vn. Trong
PgAdmin, bn c ci nhn trc quan thay v k hoch truy vn bi vic s dng mt truy vn
vi nt Explain

thay v nt Run

S dng mt hm truy vn un-index _ST_Crosses(), gii thch kt qu th hin tr v khi


chy l scan trn tt c bng d liu (bc_roads)

18

S dng mt index truy vn hm, ST_Crosses() gii thch th hin kt qu tr v khi chy
mt index scan trn khng gian index (bc_roads_gidx)

II.6. Ti u ha POSTGRESQL
nh dng database file trong database \data, v tn postgresql.conf .
The database configuration file is in the databases \data area, and is named
postgresql.conf. Ci t li phn cng my tnh trong
StartProgramsPostgreSQL 8.2Configuration FilesEdit postgresql.conf
Thay i theo nhng thng s sau:
shared_buffers = 256MB

# min 128kB or max_connections*16kB

19

Vo y tham kho thm cch ti u PostgreSQL:


http://www.postgresql.org/docs/8.2/static/kernel-resources.html
III.
III.1.

ADVANCED POSTGIS
Tnh ton vn d liu

Khng gian cc hm PostGIS yu cu ng vo geometry tun theo Cc tnh nng n gin


SQL. LINESRINGS khng th self-intersect, POLYGONS khng th c cc l ngoi ng
bin
ST_IsValid() l hm dng test s ph hp ca cc c t geometries. Cu truy vn sau
m s lng geometries khng hp l trong bng.
SELECT gid
FROM bc_voting_areas
WHERE NOT
ST_IsValid(the_geom);
gid
-----4897
(1 row)

III.2. Overlay
Overlays l mt tiu chun cng ngh GIS cho phn tch quan h gia hai lp. c bit
thuc tnh lin kt vi nhau bi cc vng gia cc layers. Overlays l mt cng c quan trng.
Trong SQL mt overlay phi kt khng gian vi ng giao thao tc. Cho mi a gic
trong bng A, tm tt c cc a gic trong bng B c tng tc vi A. Phn ct A bng B v
copy kt qu vo mt bng mi. Vi thuc tnh chung ca c A v B, v vng gc ca A v B.
Thuc tnh c th tng hp hot ng c th c gn vo trng thi SQL.
VD:
CREATE TABLE pg_voting_areas AS
SELECT
ST_Intersection(v.the_geom, m.the_geom) AS intersection_geom,
ST_Area(v.the_geom) AS va_area,
v.*,
m.name
FROM
bc_voting_areas v,
bc_municipality m
WHERE

20

ST_Intersects(v.the_geom, m.the_geom) AND


m.name = 'PRINCE GEORGE';
postgis=# SELECT Sum(ST_Area(intersection_geom))
FROM pg_voting_areas;
sum
-----------------326579103.824927
(1 row)
postgis=# SELECT ST_Area(the_geom) FROM bc_municipality
WHERE name = 'PRINCE GEORGE';
area
-----------------326579103.824927
(1 row)

IV.

MAPSERVER & POSTGIS

Mapserver c th c d liu khng gian trc tip ca Postgis databases. Cung cp cch
thc nhanh chng d dng a d liu database ln internet khng nht thit theo mt cch
duy nht mt quy trnh dumping d liu.
IV.1. nh dng Mapserves
Hu ht nh dng ca MapServer s dng PostGIS n gin tham chiu mt bng khng
gian v ch ra ct cha thng tin khng gian trong map. Tt c nh dng khc l tiu chun
MapServer c php file map:
LAYER
CONNECTIONTYPE postgis
NAME "bc_roads"
CONNECTION "user=postgres password=postgres dbname=postgis host=localhost"
DATA "the_geom FROM bc_roads"
STATUS ON
TYPE LINE
CLASS
COLOR 200 0 0
END
END

V d a cc con ng t bng bc_roads trong c s d liu PostGIS v maps nh cc


ng mu .

21

IV.1.1.Gi MS4W
y l phin bn Mapserver dnh cho window. Vi MS4W vic ci t v thit lp trn
mi trng window rt n gin. Mc ch ca gi ny l cho php tt c nhng ngi s
dng mi cp ci t mi trng pht trin Mapserver d dng v nhanh chng. N cng
l mi trng cho vic ng gi v phn phi ng dng mapserver.
MS4W ph hp a dng nhu cu bng cch h tr

Nhng t chc mun phn phi ng dng mapserver c cu hnh trc.

Nhng ngi pht trin mun thit lp 1 mi trng pht trin n nh nhanh.

Nhng ngi hun luyn cn ci t 1 cu hnh ging nhau trn nhiu my.

Dnh cho nhng ngi mi bt u lm quen vi mapserver.

Mt gi MS4W c bn ci t mi trng bao gm cc thnh phn:

Apache HTTP Server version 2.2.10

PHP version 5.2.6

MapServer CGI 5.2.1

MapScript 5.2.1 (CSharp, Java, PHP, Python)

H tr Oracle 10g, v d liu SDE

MrSID support built-in

GDAL/OGR 1.6.0 RC2 and Utilities

MapServer Utilities

PROJ Utilities

Shapelib Utilities

Shp2tile Utility
22

Shpdiff Utility

AVCE00 Utilities

OGR/PHP Extension 1.0.0

OWTChart 1.2.0

DEMtools Utilities

IV.1.2.Cc gi FWTools cho Window


L gi cha cc cng c command-line (GDAL, PROJ.4 v.v..) v ng dng OpenEV
desktop. C th ti gi http://fwtools.maptools.org/ . Cc gi con gm:

OpenEV: cng c hin th v phn tch d liu raster/vector.

Mapserver: Gi Web map.

GDAL/OGR: th vin v tp cc tin ch command line cho vic c v ghi

nhiu nh dng raster v vector.

PROJ.4: th vin php chiu bn vi nhng tin ch command-line.

OGDI: cng ngh c nhiu nh dng raster v vector.

Python: ngn ng script


IV.2.B lc MapServer
Ch tiu chun Mapserver cu trc map file khc bit khi s dng Postgis nh ngun d
liu cc thng s FILTER v EXPRESSION. Khi s dng postgis, FILTER a vo biu thc
SQL mnh where.
Biu thc MapServer ch khc nhau khi s dng PostGIS. Khi s dng file Shape thuc
tnh trong biu thc MapServer c biu din i dng ch hoa. Khi s dng PostGIS thuc
tnh c biu din i dng ch thng.
IV.3. MapServer vi SQL
Mt vi thng tin mun a vo bn nhng gi tr ca n khng c ly trc tip t
bng d liu n l kt qu ca vic tnh ton hoc so snh vi cc d liu khc. Trong trng
23

hp ny c th xy dng mt phn bng SQL. Mapserver hon tr kt qu vo mt map. Mun


s dng sc mnh c khng gian SQL, bn s thy kh nng s dng MapServer/PostGIS l?

24

You might also like