ArcGIS 和 PostGIS 几何类型
PostGIS 是在空间上启用 PostgreSQL 数据库的产品。PostGIS 遵从开放地理空间联盟 (OGC) 关于结构化查询语言 (SQL) 的简单要素规范。它使用 OGC 熟知二进制 (WKB) 和熟知文本 (WKT) 表示几何。
PostGIS 有两个空间类型选项:几何空间类型和地理空间类型。ArcGIS 仅支持几何类型。
将 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 版本。
有关正在使用的 ArcGIS 版本所支持的 PostGIS 版本信息,请参阅 ArcGIS 资源中心中的数据库系统要求页面。
安装 PostGIS 时,会在 PostgreSQL 数据库集群中创建 PostGIS 模板数据库。使用 PostGIS 模板数据库可创建用于存储地理数据库的数据库。
如果使用创建企业级地理数据库地理处理工具创建地理数据库,则将使用 PostGIS 模板以外的其他模板来创建数据库。因此,如果想要使用 PostGIS 几何类型,必须使用 PostGIS 模板手动创建数据库。然后,在运行创建企业级地理数据库地理处理工具时,便可以指定现有数据库,地理数据库也将在其中创建。
为用户授予创建包含 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 文档。
注册包含 PostGIS 几何列的第三方表
您可以从 ArcGIS for Desktop 连接到包含 PostGIS 表的 PostgreSQL 数据库并将这些表注册到地理数据库。请参阅将表注册到地理数据库了解详细信息。
PostGIS 和 PostgreSQL 文档所在位置
可在 PostGIS 网站上找到 PostGIS 文档:http://www.postgis.org/documentation/。
有关 PostgreSQL 的常规信息,请参阅 PostgreSQL 网站上的文档:http://www.postgresql.org/docs/。