ArcGIS 和 PostGIS 几何类型
PostGIS is a product from Refractions Research that can spatially enable PostgreSQL databases. PostGIS follows the Open Geospatial Consortium, Inc., Simple Features specification for SQL.
将 PostGIS 几何存储类型与 ArcGIS 一起使用时,请牢记以下规则:
- 必须使用 PostGIS 数据库模板创建用于地理数据库的 PostgreSQL 数据库。请参阅“准备数据库以使用 PostGIS 几何”部分。
- 必须为 sde 用户和在地理数据库中创建数据的所有用户授予对特定 PostGIS 表的权限。请参阅“为用户授予创建包含 PostGIS 几何列的表的权限”部分。
- 所创建的要素类只能使用 PostGIS public.spatial_ref_sys 表中列出的空间参考。如果指定此表中不包含的空间参考,要素类创建将失败。
- 要创建使用 PostGIS 几何类型的要素类,必须指定 GEOMETRY_STORAGE 参数设置为 PG_GEOMETRY 的配置关键字。
以下部分包含有关如何将 PostGIS 几何存储类型与 ArcGIS 应用程序一起使用的详细信息。
准备数据库以使用 PostGIS 几何
要使用 PostGIS 几何类型,必须安装 PostGIS。
安装 PostgreSQL 之后安装 PostGIS。
要获取 ArcSDE 所支持的 PostGIS 版本,可在 Windows 上安装 PostgreSQL 时安装 PostgreSQL StackBuilder。或访问 PostGIS 网站 http://www.postgis.org/download/ 或 PgFoundry 网站 http://pgfoundry.org/,以获取下载文件的位置。确保下载适合您操作系统的正确安装文件或二进制文件。
有关 ArcSDE 所支持的 PostGIS 版本的信息,请参阅 ESRI 支持页面上的 ArcGIS Server 系统要求页面。
安装 PostGIS 时,会在 PostgreSQL 数据库群集中创建 PostGIS 模板数据库。使用 PostGIS 模板数据库可创建用于存储地理数据库的数据库。
如果使用“Windows ArcSDE 安装后配置”向导创建地理数据库,则将使用 PostGIS 模板以外的其他模板来创建数据库。因此,如果要使用 PostGIS 几何类型,需要在开始安装后配置之前退出安装向导,然后使用 PostGIS 模板手动创建数据库、sde 用户并在数据库中创建 sde 用户方案。接下来,可使用该向导完成安装后配置步骤的其余步骤:在“安装后配置”向导的第一个对话框上,单击“自定义”,再单击“下一步”,然后取消选中“定义 SDE 用户环境”。
为用户授予创建包含 PostGIS 几何列的表的权限
如果数据库对 PostGIS 可用,则将在公共方案中创建表 geometry_columns 和 spatial_ref_sys。必须为 sde 用户和将在地理数据库中创建数据的所有用户至少授予对 geometry_columns 表的 SELECT、INSERT、UPDATE 和 DELETE 权限和对 spatial_ref_sys 表的 SELECT 权限。
GRANT select, insert, update, delete ON TABLE public.geometry_columns TO <user_name>; GRANT select ON TABLE public.spatial_ref_sys TO <user_name>;
在 PostgreSQL 的 ArcSDE 地理数据库中创建使用 PostGIS 几何存储的要素类
启用数据库存储 PostGIS 几何后,即可创建包含类型几何空间列的、空间上可用的表。可以将地理要素插入到空间列中。
通过 ArcSDE 访问空间上可用的表可由使用 ArcGIS 软件提供的现有工具的应用程序来实现,还可通过使用 ArcSDE C 应用程序编程接口 (API) 创建应用程序来实现。经验丰富的 SQL 程序员还可调用空间功能。
使用 ArcGIS 创建要素类
使用 ArcGIS 创建的要素类所使用的几何存储类型由 sde_dbtune 表中的参数设置控制。此参数为 GEOMETRY_STORAGE。在 PostgreSQL 中的地理数据库中,此参数可设置为 ST_GEOMETRY 或 PG_GEOMETRY(PostGIS 几何类型的设置)。因此,当您要使用 ArcGIS 创建使用 PostGIS 几何类型的要素类时,指定 GEOMETRY_STORAGE 参数设置为 PG_GEOMETRY 的配置关键字。
默认情况下,PostgreSQL 中 ArcSDE 地理数据库内的新要素类的几何存储类型使用 ST_Geometry 存储。如果要以 PostGIS 存储类型存储大部分数据,则将 sde_dbtune 表中 DEFAULTS 关键字下的 GEOMETRY_STORAGE 参数值更改为 PG_GEOMETRY。(使用 sdedbtune 命令更改 sde_dbtune 表中的参数。有关使用此命令的详细信息,请参阅《ArcSDE 管理命令参考》。)或者,如果仅要以 PostGIS 存储类型存储部分要素类,则可使用 PG_GEOMETRY 配置关键字,然后在创建要素类时指定该关键字。在 dbtune.sde 文件中,PG_GEOMETRY 关键字如下所示:
##PG_GEOMETRY GEOMETRY_STORAGE "PG_GEOMETRY" UI_TEXT "User Interface text description for POSTGIS geometry storage" END
其余存储参数从 DEFAULTS 关键字中选择。有关 sde_dbtune 存储的详细信息,请参阅以下主题:
使用现有 PostGIS 表
ArcSDE 可以成功使用包含 PostGIS 几何列的表(由其他应用程序或使用 SQL 在外部创建,也称为第三方表),但前提是这些表满足以下先决条件:
- 每个表必须归注册此表的用户所有。
- 每个表必须具有单个几何列。
- 表不得包含属于用户定义类型的其他列。
- 表的几何类型必须单一(点、线或面),但几何可以为多部分 (multipart)。
- 每个表必须具有适合作注册行 ID 列的整数、唯一和非空列。
- 每个表应具有空间索引。
有关使用 SQL 创建包含 PostGIS 列的表的信息,请参阅 PostGIS.org 网站上的 PostGIS 文档。
注册包含 PostGIS 几何列的第三方表
通过 ArcSDE 管理命令 sdelayer –o register 可将表注册为要素类。这意味着,将为 sde_layers、sde_table_registry 和 sde_geometry_columns 系统表中的表添加记录。另外,记录还将添加到 sde_column_registry 系统表中的每列。
在下例中,将注册表 properties,其空间列 shape 中包含点几何 (–e p)。此表中包含整型列 fid,该列将用作 sde 保持的唯一要素标识符列(–C fid,SDE)。
sdelayer –o register –l properties,shape –e p -t PG_GEOMETRY –C fid,SDE -g RTREE -x 30,10,1000 –u <user> –p <pw>
如上所示,sdelayer 命令只能将此表添加至 ArcSDE 系统表。要顺利使用 ArcGIS Desktop 地理数据库功能(例如拓扑、版本管理和网络),还必须将表注册到地理数据库。请参阅将表注册到地理数据库了解详细信息。
无法重命名使用 PostGIS 几何类型存储的空间表。这是因为不存在可用来对 public.geometry_columns 表中的表名称进行更新的 PostGIS 功能。
PostGIS 和 PostgreSQL 文档所在位置
可在 PostGIS 网站上找到 PostGIS 文档:http://www.postgis.org/documentation/。
有关 PostgreSQL 的常规信息,请参阅 PostgreSQL 网站上的文档:http://www.postgresql.org/docs/。