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 版本。
![提示 提示](rsrc/tip.png)
有关正在使用的 ArcGIS 版本所支持的 PostGIS 版本信息,请参阅 ArcGIS 资源中心中的数据库系统要求页面。
安装 PostGIS 时,会在 PostgreSQL 数据库集群中创建 PostGIS 模板数据库。使用 PostGIS 模板数据库可创建用于存储地理数据库的数据库。
![注 注](rsrc/note.png)
如果使用创建企业级地理数据库地理处理工具创建地理数据库,则将使用 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/。