2009年4月22日星期三

SDE与PostGIS的集成

PostgreSQL:http://www.postgresql.org/
PostGIS:http://postgis.refractions.net/
PostGIS Manual:http://postgis.refractions.net/documentation/manual-1.3/

安装PostgreSQL
这里没有使用SDE自带的PostgreSQL,而是独立的PostgreSQL 8.3.6.

安装PostGIS扩展
可以通过PostgreSQL的Application Stack Builder安装,或者下载独立安装包。这里下载了PostGIS 1.3.5安装包进行安装。

这个版本在安装PostGIS的时候会提示错误,原因是PostgreSQL锁住了这个文件,因此先停掉PostgreSQL,但安装完成后必然造成初始化PostGIS数据库失败,可以在PostgreSQL启动后再运行一次PostGIS安装程序,再见到这个错误的时候忽略。

这时通过pgAdmin连接到数据库,可以看到PostGIS创建了相关的数据库。

安装ArcSDE for PostgreSQL
在安装ArcSDE for PostgreSQL之前,首先新建一个基于PostGIS模板的数据库用于ArcSDE。注意,使用sde角色需要有管理员权限并可创建数据库对象。

然后安装ArcSDE相关程序文件,接着运行Post Installation。

我们希望SDE在保存数据的时候使用PG_GEOMETRY格式保存空间数据,而不是默认的ST_GEOMETRY,因为使用PG_GEOMETRY格式可以使用PostGIS的功能。这里需要自定义“dbtune.sde”文件 。将这个文件备份后,修改以下这段:
GEOMETRY_STORAGE "ST_GEOMETRY"
为:
GEOMETRY_STORAGE "PG_GEOMETRY"
然后,选择这个修改过的“dbtune.sde”文件。

以下与其它ArcSDE Post Installation类似。

测试SDE图层使用PostGIS功能
在ArcCatalog中新建到ArcSDE的连接:

然后使用ArcCatalog导入若干Feature Class到SDE,这里使用了Sample的World中的cities等图层进行测试:

打开pgAdmin,刷新sde数据库中的sde模式,查询cities表:

下面测试一下不通过ArcSDE直接对这个表进行PostGIS空间查询。打开SQL命令窗口,测试使用如下SQL:
SELECT * FROM cities WHERE ST_Distance(shape, GeomFromText('POINT(116.39 39.9)', 4326))<10

以上空间查询SQL代表查找在4326空间参考下,与点(116.39, 39.9)【北京附近】距离10以内的所有城市,查询结果如下,总共29条记录:

3 条评论:

匿名 说...

大哥,你的文章写的棒极了,既诙谐又深刻,颁个若贝尔文学奖给你也不为过,可是你的文章出的太慢了,我真是有点等不及啊,先少玩会魔兽啊,等你杰作大功告成,我陪你玩,保证让你爽死。。。

Unknown 说...

你的文章非常的棒,对我帮助很大,我想问一下Post Installation ,能否把具体的配置过程讲的更加详细一点,SDE与PostGIS的集成

牛魔王 说...

已经很详细了,主要就是dbtune的修改