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。请参阅本主题中的“准备数据库以使用 PostGIS 几何”部分。
- 必须为 sde 用户和在地理数据库中创建数据的所有用户授予针对特定 PostGIS 表的权限。请参阅“为用户授予创建包含 PostGIS 几何列的表的权限”部分。
- 所创建的要素类只能使用 PostGIS public.spatial_ref_sys 表中列出的空间参考。如果指定此表中不包含的空间参考,要素类创建将失败。
- 要创建使用 PostGIS 几何类型的要素类,必须指定 GEOMETRY_STORAGE 参数设置为 PG_GEOMETRY 的配置关键字。
- 无法重命名使用 PostGIS 几何类型存储的空间表。这是因为不存在可用来对 public.geometry_columns 表中的表名称进行更新的 PostGIS 函数。
以下部分包含有关如何将 PostGIS 几何存储类型与 ArcGIS 应用程序一起使用的详细信息。
准备数据库以使用 PostGIS 几何
要使用 PostGIS 几何类型,必须安装 PostGIS。安装 PostgreSQL 之后安装 PostGIS。
要了解 ArcGIS 所支持的 PostGIS 版本,请访问 PostGIS 网站 http://www.postgis.org/download/ 或 PgFoundry 网站 http://pgfoundry.org/,以获取下载文件的位置。确保下载适合您操作系统的正确安装文件或二进制文件。
有关所支持 PostGIS 版本的信息以及正在使用的 ArcGIS 版本,请参阅 ArcGIS 资源中心上的数据库系统要求页面。
安装 PostGIS 时,会在 PostgreSQL 数据库集群中创建 PostGIS 模板数据库。使用 PostGIS 模板数据库可创建用于存储地理数据库的数据库。
如果使用创建企业级地理数据库地理处理工具创建地理数据库,则将使用 PostGIS 模板以外的其他模板来创建数据库。因此,如果想要使用 PostGIS 几何类型,则必须使用 PostGIS 模板手动创建数据库、在数据库集群中创建一个 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>;
使用 PostGIS 几何存储在 PostgreSQL 中的地理数据库内创建要素类
启用数据库存储 PostGIS 几何后,即可创建包含类型几何空间列的、空间上可用的表。可以将地理要素插入到空间列中。
您可以通过 ArcGIS for Desktop 或通过使用 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 配置关键字,然后在创建要素类时指定该关键字。在通过使用 sdedbtune 命令导出 sde_dbtune 表的内容而创建的 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 表
ArcGIS 可以使用包含 PostGIS 几何列的表(由其他应用程序或使用 SQL 在外部创建,也称为第三方表),但这些表必须满足以下先决条件:
- 每个表必须归注册此表的用户所有。
- 每个表必须具有单个几何列。
- 表不得包含属于用户定义类型的其他列。
- 表的几何类型必须单一(点、线或面),但几何可以为多部件类型。
- 每个表必须具有适合作注册行 ID 列的整数、唯一和非空列。
- 每个表应具有空间索引。
有关使用 SQL 创建包含 PostGIS 列的表的信息,请参阅 PostGIS.org 网站上的 PostGIS 文档。
注册包含 PostGIS 几何列的第三方表
您可以从 ArcGIS for Desktop 连接到包含 PostGIS 表的 PostgreSQL 数据库并将这些表注册到地理数据库。请参阅将表注册到地理数据库了解详细信息。
PostGIS 和 PostgreSQL 文档所在位置
可在 PostGIS 网站上找到 PostGIS 文档:http://www.postgis.org/documentation/。
有关 PostgreSQL 的常规信息,请参阅 PostgreSQL 网站上的文档:http://www.postgresql.org/docs/。