postgis栅格数据_postGIS教程⼀ 什么是PostgreSQL和PostGIS
1.1 什么是PostgreSQL
说起数据库,⼤家⽿熟能详的商业数据库产品当推Oracle、微软的SqlServer和IBM的
DB2等,⽽开源数据库中则有两⼤产品MySQL和PostgreSQL。
PostgreSQL 是⼀种对象-关系型数据库管理系统(ORDBMS),也是⽬前功能最强⼤、
特性最丰富和最复杂的⾃由软件数据库系统。它起源于伯克利(BSD)的数据库研究计划,
⽬前是最重要的开源数据库产品开发项⽬之⼀, 有着⾮常⼴泛的⽤户。
PostgreSQL 可以说是最富特⾊的⾃由数据库管理系统,也有⼈认为可以是最强⼤的⾃由
软件数据库管理系统。PostgreSQL 是唯⼀⽀持事务、⼦查询、多版本并⾏控制系统、数据完
整性检查等特性的唯⼀的⼀种⾃由软件的数据库管理系统。能在多平台下---包括Linux、
FreeBSD和Windows等---运⾏,并且⽀持多语⾔的开发。
在两⼤开源数据库产品的对⽐中,⼀般认为MySQL速度更快,所以得到更为⼴泛的使
⽤;⽽PostgreSQL性能更为先进,PostgreSQL 提供很多 MySQL ⽬前所不⽀持的特性,⽐
如触发器、视图、存储过程等等,在记录数超千万之后性能表现尤其出⾊。
当前的最新版本是PostgreSQL 8.2.3,官⽅⽹站是:
1.2 什么是PostGIS
PostGIS在对象关系型数据库PostgreSQL上增加了存储管理空间数据的能⼒,相当于
Oracle的spatial部分。PostGIS最⼤的特点是符合并且实现了OpenGIS的⼀些规范,是最著
名的开源GIS数据库。
当前的最新版本是PostGIS 1.2.1,官⽅⽹站是:
⼆ PostgreSQL和PostGIS的安装
2.1 在windows下安装。
新版本的PostgreSQL在其安装程序中集成了PostGIS,只需要在安装过程中选中
PostGIS和pgsql项就可以了。
2.2 在Debian下安装PostGIS
# apt-get install postgresql-8.1 postgresql-8.1-postgis
当前Etch中的版本:PostgreSQL是8.1.7,⽽PostGIS是1.1.6,虽然不是最新的版本,
但已经⾜够了。
还需要做的⼯作是:
1) 创建⼀个专门⽤于PostGIS的数据库并为专⽤数据库导⼊PostGIS⽀持:
2) 创建⼀个专门的⽤户,并把相应的数据库和数据表的属主设置为该⽤户:
# su – postgres
$ psql
$ create user wen1 password ‘123456’;
$ alter database wen1 owner to wen1;
$ alter table spatial_ref_sys owner to wen1;
$ alter table geometry_columns owner to wen1 ;
3) 修改PostgreSQL配置⽂件以便可以远程使⽤。
修改PostgreSQL的配置⽂件/etc/postgresql/8.1/f,将其中的⼀句:listen_address=’localhost’
前⾯的注释去掉,并把’localhost’该为’*’。
修改Postgresql的配置⽂件/etc/postgresql/8.1/main/f,在⽂件后⾯加⼀句:host all all 192.168.0.0/24 password
这句的意思是:同⽹络中192.168.0.*的机器可以以密码的形式使⽤所有的数据库。更具
体的参数意义直接看该配置⽂件中的注释就可以了。
这⾥⼀定要配置正确,否则⽆法在远程连接PostgreSQL数据库。
2.3 源码安装PostgreSQL和PostGIS
参阅以前写的⽼⽂章。
三 PostGIS的使⽤
要使⽤PostGIS,需要两⽅⾯的预备知识,⼀是要熟悉基本的SQL语法;⼆是熟悉PostgreSQL数据库的基本使⽤。
(⼀) 快速⼊门
我们使⽤前⾯创建的数据库wen2,⽤户为wen1,现在创建⼀个包含三个点的数据库
test1:
⾸先在Etch下以wen1登陆,然后打开wen2数据库:
$ psql -d wen2 ;
再在PostgreSQL的控制台下输⼊以下命令:
wen2=> create table test1 (myID int4, pt geometry, myName varchar );
wen2=> insert into test1 values (1, 'POINT(0 0)', 'beijing' );
wen2=> insert into test1 values (2, 'POINT(31.5 60.87)', 'shanghai' );
wen2=> insert into test1 values (3, 'POINT(10.77 85.902)', 'tianjin' );
这样我们利⽤PostGIS创建了⼀个包含三个点的GIS数据表。
为了能在QGIS中打开这⼀图层,我们还需要为数据表创建⼀个主键:
wen2=>alter table test1 add primary key (myID);
可以看到PostGIS的使⽤其实就相当于使⽤⼀个经过扩展的SQL语法,上述语句熟悉
SQL语法的⼈⼀看都很熟悉,都是普通的SQL语句,不同的只不过是增加了PostGIS特殊的geometry数据类型。
你可以再试试这些SQL语句:
select * from test1;
select myID,AsText(pt) from test1;
select Distance(pt, 'POINT(0 0)') from test1;
(⼆) PostGIS的Geometry数据类型
Geometry可以说是PostGIS最重要的⼀个概念,是“⼏何体”的意思,由于PostGIS很update语句主键冲突解决
好地遵守OGC的”Simple Feature for Specification for SQL”规范,⽬前⽀持的⼏何体类型包含其实例有:
POINT(1 1)
MULTIPOINT(1 1, 3 4, -1 3)
LINESTRING(1 1, 2 2, 3 4)
POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))
MULTIPOLYGON((0 0, 0 1, 1 1, 1 0, 0 0), (5 5, 5 6, 6 6, 6 5, 5 5))
MULTILINESTRING((1 1, 2 2, 3 4),(2 2, 3 3, 4 5))
⽽geometry具体表现⼜有两种形式,⼀种叫做WKT(Well Known Text)形式,如上⾯的
例⼦。或者使⽤如下SQL语句浏览:
select AsText(pt) from test1;
另⼀种叫做“Canonical Form”形式,看上去是⼀串古怪的数字,其实是⼀种增强的⼗六
进制编码,使⽤如下SQL语句就可以浏览了:
select pt from test1;
(三) 读写PostGIS数据
建设好PostGIS数据库之后,我们现在需要进⾏读写GIS数据了,包括把GIS写⼊到
PostGIS数据库中以及在应⽤程序中使⽤PostGIS数据库的数据。读写PostGIS⽬前主要有以
下四种⽅式:
3.1 使⽤psql语⾔
Psql语⾔是PostgreSQL内嵌的⼀个命令⾏⼯具,其语法基本上和标准的SQL语法是⼀
致的,可以使⽤Psql⼯具,结合标准SQL语法和⼀些PostGIS的扩展对PostGIS数据库进⾏
读写操作。
具体例⼦如上⾯“快速⼊门”中的例⼦。
这种⽅式功能强⼤,但全部需要⼿⼯操作,烦琐且繁重。
3.2 使⽤⼀些⼩⼯具
有两个很有⽤的⼩的转换⼯具,⼀是shp2pg;⼀是ogr2ogr
3.2.1 shp2pgsql和pgsql2shp
shp2pgsql和pgsql2shp是PostGIS⾃⾝携带的⼀对在Shape⽂件和PostGIS数据库之间进
⾏转换的⼯具,在Debian中安装好PostGIS之后,这两个程序已经位于可执⾏⽂件的搜索路
径上,因此可以在系统中任何位置使⽤。
假如当前⽬录下有完整的china.shp⽂件(应该有三个同名不同扩展名的⽂件),需要把其
中数据输⼊到上述的wen2数据库中的数据表china_postgis中,具体操作为(操作⽤户为
wen1):
$ shp2pgsql china china_postgis > tmp.sql
$ psql -d wen2 -f roads.sql
这个⼯具很好⽤,缺点在于使⽤范围有限,只针对Shape⽂件格式。
3.2.2 ogr2ogr
PostGIS本⾝的shp2pg⼯具只把shape⽂件转换到PostGIS 数据库中,那如何把其他的
GIS数据加⼊呢?⽐如说MapInfo的mid格式,ESRI的e00格式呢?这就要使⽤ogr这个⼯
具了。
如此介绍:
GDAL is a translator library for raster geospatial data formats that is released under an X/MIT style Open Source license by the Open Source Geospatial Foundation. As a library, it presents a single abstract data model to the calling application for all supported formats. It also comes with a variety of useful commandline utilties for data translation and processing.
简单地说,Gdal是⼀个各种Gis数据格式的转换软件库,ogr则是转换⽮量GIS数据的
软件库。
⽬前ogr能够⽀持的数据格式包括:
Arc/Info Binary Coverage、DWG、ESRI Personal GeoDatabase、ArcSDE、ESRI
Shapefile、GML、GRASS、Mapinfo File、Microstation DGN、ODBC、Oracle Spatial和
PostgreSQL等。应该说,这就基本包括了我们平常⽤到的所有⽮量型GIS⽂件格式了。
Gdal⽀持的栅格数据格式参阅http: ///formats_list.html
下⾯我们从源码编译安装gdal---因为我在Debian下使⽤apt⽅式安装的gdal并不⽀持
postgresql数据库,其实更为简便的⽅法也许是去下载⼀个Fwtools的⼯具包,可以
直接运⾏不⽤繁琐的编译,既有Windows的,也有Linux下⽤的,只不过这个包有些⼤。
1) 下载最新的gdal-1.3.2
2) 解压
3) ./configure --prefix=/opt/gdal --with-pg=/opt/pg/bin/pg_config --without-ogdi
这⾥我习惯把软件安装在/opt⽬录下。
--with-pg参数很重要,使ogr可以⽀持PostGIS,后⾯的参数是我的PostGIS安装的地⽅。matlab中fontsize函数用法
我在这⾥编译很多次失败,经过仔细查,发现问题出在ogdi上,所以暂时我只好使
它不⽀持ogdi。
4) make
5) make install
下⾯是使⽤过程,假设现在我要把⼀个rai.mid⽂件导⼊到数据库data1中:
$ ogr2ogr –f Postgresql PG:dbname=data1 rai.mid
注意,f参数后⾯跟的是导⼊的数据类型,最后那个⽂件才是要导出的⽂件。PG后⾯说
明的是数据库的名字,需要是已经创建好的数据库,⽽数据表则由程序⾃动创建。还要特别
mysql入门基础教程注意权限问题,以上命令我是由postgres⽤户执⾏的。
还有⼀个要注意的是主键问题。⼀般情况下,你使⽤shp2pg或者 ogr2ogr向postgis中
strlen可以用于int数组吗增加了Gis数据后,在GIS客户端添加postgis图层的时候,常常会因为数据表没有定义主键
⽽出错,解决的办法是,在服务器上使⽤psql或者其他sql⼯具,使⽤命令:
alter table table_name add primary key (column_name);
基础数据库是什么
另外我们发现ogr竟然是不⽀持最常见的GIS格式e00格式,好象是因为版权⽅⾯的原
因吧。解决的⽅法就是去sf查相关⼯具。我在上⾯就到⼀个e002pg⼯具,⽀持将
e00⽂件导⼊到postGIS数据库中。
3.3 在其他GIS软件中读写PostGIS数据
⽐如在QGIS中,能够打开PostGIS图层,还有SPIT插件可以把Shape⽂件输⼊到
PostGIS数据库中。数据库数据优化
其他GIS软件如uDig,Grass等,甚⾄连ArcInfo都⽀持或部分⽀持读写PostGIS数据。
3.4 利⽤接⼝在应⽤程序中读写PostGIS数据
⼴⼤的开源GIS程序员⼏乎为每⼀种程序设计语⾔设计好了读写PostGIS的接⼝,如利
⽤PostgreSQL的JDBC库,可以使⽤Java语⾔在程序中读写PostGIS数据;利⽤libpq库,
可以使⽤C语⾔读写PostGIS数据。
(四) 使⽤PostGIS函数
4.1 PostGIS函数
要能熟练使⽤PostGIS,掌握PostGIS的所有函数是关键。通过掌握这些PostGIS函数,
我们能够⾼效、稳定地处理各种地理数据。由于PostGIS的函数设计时都遵守OpenGIS规范,我们也可以把这些PostGIS叫做OpenGIS函数。
4.2 PostGIS函数的分类
PostGIS函数⼤致可以分为以下四类
1) 字段处理函数
这类函数当前⼀共有3个,分别是:
AddGeometryColumn(var1,var2,var3,var4,var5,var6):为已有的数据表增加⼀个地理⼏何

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。