操作方法

操作方法:创作属性规则以引用其他数据源中的要素类

Last Published: August 6, 2025

描述

在某些情况下,可能希望访问不同数据库管理系统中的要素类或表以用于创建属性规则。 例如,可能想要编写计算规则以填充显示药店位置的点要素类中的地址字段。 地址信息将从位于不同数据库中的另一个要素类获取。 实现此目标的一种方法是在两个数据存储之间建立数据库链接,从而提供访问和查询要素类的方法。 请注意,建立数据库链接的方式因各种数据库管理系统而异。

在本文中,我们将在 Microsoft SQL Server 和 PostgreSQL 之间创建数据库链接,以便在属性规则中使用要素类 (Pharmacies_Tamale)。 此要素类在提供规则所需的信息方面发挥着至关重要的作用。 此示例使用 SQL Server 数据库中的企业级地理数据库作为工作环境,并使用 PostgreSQL 中的地理数据库,其中包含 ST_Geometry 要素类 (Pharmacies_Tamale) 以在规则中访问和使用。

解决方案或解决方法

创建数据库链接

  1. 如有必要,下载并安装 PostgreSQL ODBC 驱动程序,以匹配在您计算机上安装的 PostgreSQL 版本。
  2. 按照本文中的说明创建 PostgreSQL 数据库的系统 DSN ODBC 数据源
    • 注:对于驱动程序,选择 PostgreSQL ODBS 驱动程序 Unicode
  1. 在弹出的对话框中,提供数据源名称和描述,指定数据库名称、端口、用户名密码作为连接参数。 完成后,单击测试按钮测试连接。
    • 在此示例中,数据源的名称为 PostgreSQL35W,具有 pharmacies_tamale 要素类的 PostgreSQL 中的数据库pg_database,如下图所示。

PostgreSQL 驱动程序设置对话框

  1. 按照本文中的说明,在 SQL Server Management Studio (SSMS) 中创建 SQL Server 与已建立的 PostgreSQL 数据源连接之间的数据库链接。 在下图所示的新建链接服务器对话框中,完成以下字段:
    • 常规选项卡上,键入链接服务器名称,并将服务器类型设置为其他数据源
    • 安全选项卡上,将连接登录选项设置为使用此安全上下文进行并指定 Postgres 用户的用户名和密码
    • 服务器选项选项卡上,将 RPCRPC 输出设置为 True
    • 通过右键单击链接服务器并选择测试连接来测试连接。

指定链接服务器

创建视图以从链接服务器访问要素类

  1. 在 SSMS 中,单击新建查询
  2. 查看并键入以下查询以创建视图:
-- Setting work environment
Use sqlDatabase
Go
-- Creating a view
Create view DataAdmin.vw_pharmacies_tamale
as
select
	objectid,
	name,
	location,
	type,
	class,
	address,
	globalid,
	geometry::STGeomFromText(st_astext, 32630) AS Shape -- rebuilding geometry
From
	OPENQUERY(
		[LINK_TO_POSTGRESQL],
		'Select
			objectid,
			name,
			location,
			type,
			class,
			address,
			globalid,
			ST_AsText(shape)::text as st_astext -- converting from st_geometry to WKT
			from pg_database.editor.pharmacies_tamale')

SSMS 中的 SQL 查询

Note: 
PostgreSQL and SQL Server store geometry data using different spatial types. Hence, to access a geometric object from PostgreSQL in SQL Server, we first converted it to the Well-Known Text (WKT) format.

以下语法表示 ST_Geometry 到 WKT 的转换:

ST_AsText(shape)::text as st_astext

将几何转换为 WKT 后,使用以下语法在 SQL Server 中重新构造:

Geometry::STGeomFromText(st_astext, 32630) AS Shape

此外,SQL 定义中的 OPENQUERY 方法允许我们在指定的链接服务器上执行直通查询。

  1. 运行查询以创建数据库视图。
    • 将创建 DataAdmin.vw_pharmacies_tamale 视图并将其添加到数据库中。 接下来,在 ArcGIS Pro 中访问视图并将其注册到地理数据库中:
  2. 打开 ArcGIS Pro 工程。
  3. 如有必要,在目录窗格中,右键单击数据库,然后通过建立新建数据库连接连接到正在使用的数据库。
  4. 展开数据库并确认您创建的视图可用。
  5. 目录窗格的数据库中,右键单击视图,然后选择注册到地理数据库
  6. 注册到地理数据库地理处理工具窗格中,设置所需参数,然后运行工具。
    • 如以下示例所示,视图已注册到地理数据库,现在可以在设置属性规则时使用 Arcade 和 $datastore 函数进行访问。
var pharma = FeatureSetByName($datastore,"DataAdmin.vw_pharmacies_tamale", ["Address"])
var closestpharma = Intersects(pharma, BufferGeodetic($feature, "1000", "feet"))
var Fpharma = First(closestpharma)
//var Npharma = NearestCoordinate(Fpharma, $feature)
if (Fpharma == null) return {"errormessage": "no pharmacies are closeby"}
return Fpharma.Address 

“表达式构建器”中的 Arcade 表达式

在本文中,我们探讨了如何在 SQL Server 数据库中创建视图,该视图引用另一个数据源 (PostgreSQL) 数据库中的要素类。 在数据库中注册视图后,我们就能够在设置属性规则时通过 Arcade 表达式引用该视图,以根据 PostgreSQL 中要素类的属性生成信息。

文章 ID: 000032325

获得人工智能支持

使用 Esri Support AI Chatbot 快速解决您的问题。

立即开始聊天

相关信息

发现关于本主题的更多内容

获取来自 ArcGIS 专家的帮助

联系技术支持部门

立即开始聊天

转至下载选项