向 PostgreSQL 数据库添加 ST_Geometry 类型
在 Standard 或 Advanced 许可等级下可用。
要使用 ST_Geometry 类型将空间数据存储在 PostgreSQL 数据库中,数据库管理员可以运行创建空间类型地理处理工具或调用 CreateSpatialType ArcPy 函数的 Python 脚本将类型、其子类型和函数添加到数据库。
提示:
如果您使用了创建企业级地理数据库地理处理工具(其中空间类型参数设置为 PostGIS)以在 PostgreSQL 中创建地理数据库,并且稍后决定将 ST_Geometry 类型添加至该地理数据库,则可以运行创建空间类型工具以将 ST_Geometry 添加至该地理数据库。 否则,您只能在数据库中运行创建空间类型工具。
创建空间类型工具和函数可执行以下操作:
在 PostgreSQL 数据库集群中创建 sde 登录角色。
授予 sde 用户超级用户权限(创建 ST_Geometry 类型后可撤销该权限)。
在数据库中创建名为 sde 的方案。
授予 sde 用户对 sde 方案的完全权限。
授予公共登录组对 sde 方案的
USAGE权限。 可以从公共群组撤销此权限,但必须为需要访问 ST_Geometry 类型、子类型或函数的所有用户授予对 sde 方案的USAGE权限。在 sde 方案中创建必需的函数、属性域、表(sde_coordinate_systems 和 sde_geometry_columns)和视图(st_geometry_columns 和 st_spatial_references),并在公共方案中创建 sde_spatial_references 表。
在运行工具或函数之前,您必须将 st_geometry 库复制到 PostgreSQL 服务器。
注:
在 Microsoft Windows 服务器上进行部署时,st_geometry.dll 文件需要使用 Microsoft Visual C++ Redistributable Package (x64)。 有关所需的软件包版本,请参阅使用 PostgreSQL 的 ArcGIS 要求。 如果 PostgreSQL 服务器上没有此软件包,可从 Microsoft 站点下载该包并安装。
使用创建空间类型地理处理工具
要运行创建空间类型地理处理工具在 PostgreSQL 数据库中安装 ST_Geometry 类型,请完成以下步骤:
从 My Esri 下载 ST_Geometry 压缩文件。
这些压缩文件特定于您将用于创建空间类型的 ArcGIS 软件版本。
如果未提供下载选项,请联系 ArcGIS 组织管理员。
提取该文件的内容。
注:
st_geometry 库适用于特定操作系统和 PostgreSQL 版本。 请确保您复制了正确的库。
将 st_geometry 文件放入 PostgreSQL
lib目录中。如果 PostgreSQL 安装在 Windows server 服务器上,则将
st_geometry.dll文件放在服务器的%PostgreSQL%\lib目录中。根据安装 PostgreSQL 方式的不同,Linux 上
lib目录的位置可能会有所不同。 要确定 PostgreSQL 安装程序的正确位置,请以 postgres 用户身份运行pg_config。 针对 PKGLIBDIR 返回的值是需要放置st_geometry.so文件的lib目录。 以根用户身份登录到计算机,以将该文件复制到lib位置。
注:
如果您的 Linux 操作系统不包含
libstdcc++.so.6.0.29或更高版本的库,也需要将libstdcc++.so.6库与st_geometry.so库一起放置在 PostgreSQLlib目录中。打开 ArcGIS Pro 中的工程,打开目录窗格,然后作为 PostgreSQL 超级用户连接到数据库。
将在工程文件夹中创建数据库连接 (
.sde) 文件。打开创建空间类型工具。
可以使用搜索窗口查找工具,或者从数据管理工具箱的工作空间工具集中打开工具。
将在第 2 步中创建的数据库连接添加至输入数据库连接参数文本框。
在 SDE 用户密码参数文本框中提供 sde 数据库用户的密码。
提示:
如果 PostgreSQL 数据库集群已具有 sde 登录角色,则您提供的密码必须与现有 sde 登录角色的密码相匹配。 例如,如果您在同一数据库集群中拥有一个企业级地理数据库,则 sde 登录角色已存在,并且您必须在此处使用其密码。
将表空间名称参数文本框留空。
单击运行。
ST_Geometry 类型、子类型和函数是在所指定数据库的 sde 用户方案中创建的。
使用 ArcPy 函数
在任何 ArcGIS Pro 或 ArcGIS Server 计算机上,使用 CreateDatabaseConnection ArcPy 函数创建数据库连接文件 (.sde),并以 PostgreSQL 超级用户身份将该文件连接到 PostgreSQL 数据库。 接下来,使用 .sde 文件和 CreateSpatialType ArcPy 函数在数据库中创建 ST_Geometry 类型、子类型和函数。
从My Esri下载
st_geometry库,并放到 PostgreSQLlib目录中。注:
如果您的 Linux 操作系统不包含
libstdcc++.so.6.0.29或更高版本的库,也需要从 My Esri 下载 PostgreSQL 的libstdcc++.so.6库,并将其与st_geometry.so库一起放置在 PostgreSQLlib目录中。st_geometry 库适用于特定操作系统、PostgreSQL 版本和 ArcGIS 版本。
根据安装 PostgreSQL 方式的不同,Linux 上
lib目录的位置可能会有所不同。 要确定 PostgreSQL 安装程序的正确位置,请以 postgres 用户身份运行pg_config。 针对 PKGLIBDIR 返回的值是需要放置st_geometry.so文件的lib目录。 以根用户身份登录到计算机,以将该文件复制到lib位置。如果 PostgreSQL 安装在 Windows server 服务器上,则将
st_geometry.dll文件放在服务器的%PostgreSQL%\lib目录中。
运行
CreateDatabaseConnection函数创建.sde文件。您必须以 PostgreSQL 超级用户身份进行连接,并且必须保存凭据。
在以下示例中,在名为 TempFiles 的目录中创建了连接文件,连接文件名称为 suserconnection.sde,提供了超级用户身份凭据,并将此凭据与此文件一同保存,以在数据库集群 pginstance 中连接名为 pgdb 的数据库。
import arcpy arcpy.management.CreateDatabaseConnection( "/user/TempFiles", "suserconnection.sde", "POSTGRESQL", "pginstance", "DATABASE_AUTH", "postgres", "Cl@rkK3nt", "SAVE_USERNAME", "pgdb" )运行
CreateSpatialTypeArcPy 函数,以在 PostgreSQL 实例中安装 ST_Geometry 类型。此示例使用了上一步骤中的连接文件,且 SDE 密码设置为 pw0rd4sde。
import arcpy arcpy.management.CreateSpatialType( "suserconnection.sde", "pw0rd4sde" )
ST_Geometry 类型、子类型和函数是在数据库连接文件中指定的数据库的 SDE 用户方案中创建的。