操作方法
在某些情况下,可能希望访问不同数据库管理系统中的要素类或表以用于创建属性规则。 例如,可能想要编写计算规则以填充显示药店位置的点要素类中的地址字段。 地址信息将从位于不同数据库中的另一个要素类获取。 实现此目标的一种方法是在两个数据存储之间建立数据库链接,从而提供访问和查询要素类的方法。 请注意,建立数据库链接的方式因各种数据库管理系统而异。
在本文中,我们将在 Microsoft SQL Server 和 PostgreSQL 之间创建数据库链接,以便在属性规则中使用要素类 (Pharmacies_Tamale)。 此要素类在提供规则所需的信息方面发挥着至关重要的作用。 此示例使用 SQL Server 数据库中的企业级地理数据库作为工作环境,并使用 PostgreSQL 中的地理数据库,其中包含 ST_Geometry 要素类 (Pharmacies_Tamale) 以在规则中访问和使用。


-- 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')

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 方法允许我们在指定的链接服务器上执行直通查询。
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

在本文中,我们探讨了如何在 SQL Server 数据库中创建视图,该视图引用另一个数据源 (PostgreSQL) 数据库中的要素类。 在数据库中注册视图后,我们就能够在设置属性规则时通过 Arcade 表达式引用该视图,以根据 PostgreSQL 中要素类的属性生成信息。
文章 ID: 000032325
获取来自 ArcGIS 专家的帮助
立即开始聊天