mcpField
A
arcgis-custom-data-feeds

arcgis-custom-data-feeds

github.com/valdesrosier数据与数据库8105 次安装4 周前更新
代码仓库

关于 arcgis-custom-data-feeds

arcgis-custom-data-feeds 是一项用于编写和本地测试 ArcGIS Enterprise Custom Data Feeds 的 Node.js Provider 技能。它指导开发者按版本配置 Provider,并以 GeoJSON 将外部数据提供为 Feature Service;不涵盖部署和注册。

主要功能

  1. 01用 cdf CLI 创建应用和 Provider
  2. 02实现 GeoJSON 数据读取
  3. 03支持编辑、授权和元数据
  4. 04配置特定版本的 Provider
  5. 05检查字段、ID 和几何规则

适用场景

  1. 01为外部数据源构建 Provider
  2. 02部署前在本地测试 Provider
  3. 03针对特定 ArcGIS Enterprise 版本开发
  4. 04为上游数据存储添加受控编辑

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/valdesrosier/skills --skill arcgis-custom-data-feeds

安装后在 Claude Code 中输入/arcgis-custom-data-feeds确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
references/
geojson-response-format.md
provider-patterns.md
references/examples/
editable-provider.md
minimal-provider.md

详细介绍

ArcGIS Enterprise 自定义数据馈送(CDF)

自定义数据馈送是一个 Node.js 提供程序,运行在 ArcGIS Enterprise SDK 运行时中的 Koop.js 上,可从任意外部来源(REST API、数据库、文件)获取数据,并将其公开为标准 ArcGIS Feature Service。提供程序返回 GeoJSON;框架会将其转换为 ArcGIS 客户端使用的 GeoServices REST 规范。

在 ArcGIS Server 上部署和注册(上传 .cdpk、cdf register)不在本文范围内——本指南涵盖提供程序的编写和本地测试。

先确认目标 Enterprise 版本,再编写任何代码

CDF 在 ArcGIS Enterprise 11.1 中推出(10.x 中不存在),其功能受版本限制。你编写的提供程序完全取决于它必须运行的版本,因此请先确定目标版本:

  • 询问此提供程序必须在哪些 ArcGIS Enterprise 版本上运行。针对较新运行时编译的提供程序无法在较旧服务器上运行——请针对最低目标版本构建。
  • 12.x 需要重新编译。 提供程序必须在 12.x 中重新编译才能在那里运行;在 11.x 上构建的提供程序与 12.x 运行时不具备二进制兼容性。
  • 开发计算机的 操作系统系列和 Node.js 主版本必须与目标服务器一致,否则编译后的提供程序将无法加载。

如需了解当前版本、各版本的功能列表以及任何重大变更,请查阅最新的 **ArcGIS Enterprise SDK CDF 指南**及其“新增功能”页面;不要依赖转述的版本对照表,因为它会过时。要确认某个类、方法或选项是否存在于特定版本,请以 arcgis-docs-lookup 技能为准。

12.0 代际分界

CDF 在 12.0 发生了根本性变化——请将 12.0 之前和 12.0 及之后视为两代,切勿混用它们的假设:

  • config npm 模块在 12.0 中停用。 请将凭据存储在 src/ 中的本地 JSON 文件里,并直接调用 require()。在 11.1–11.5 中,config/default.json 是标准做法(应用中所有提供程序的顶层键必须唯一)。
  • 12.0 升级陷阱: 使用过 config 模块的提供程序在升级到 12.0 后不会自动重新注册。请在升级之前将其迁移到本地 JSON 配置。
  • getMetadata()(见下文)仅从 12.0 开始提供。

项目脚手架——cdf CLI

cdf createapp my-cdf-app          # once per project
cd my-cdf-app
cdf createprovider my-provider    # a provider inside the app
npm start                         # local dev server (HTTP :8080)
cdf export my-provider            # produce a deployable .cdpk

生成的结构(核心部分):providers/my-provider/src/index.js(注册)、.../src/model.js(核心逻辑)、.../cdconfig.json(提供程序配置)、.../package.json(提供程序依赖)。

请在提供程序级别安装 npm 包(providers/my-provider/),切勿在应用级别安装。切勿修改 framework/——其中捆绑的 Koop 包为只读。

The Model 类

model.js 导出一个最多包含四个方法的类。“自”列记录的是稳定的发布历史,并非实时矩阵:

方法必需自用途
getData(req)是11.1获取数据;返回 GeoJSON FeatureCollection
editData(req, edits)否11.4处理 applyEdits(添加/更新/删除)
authorize(req)否11.5请求前授权;拒绝时抛出异常
getMetadata()否12.0返回用于编辑重投影的 idField + inputCrs

getData(req) 返回包含 metadata 块的 GeoJSON FeatureCollection。请使用 async/await 形式,切勿在同一方法中混用 async 和回调模式——这样会导致进程崩溃。完整的响应架构请参阅 references/geojson-response-format.md,完整获取与透传模式请参阅 references/provider-patterns.md。

关键 req 属性:req.params.layer('0'、'1'、……)、req.params.<key>(服务参数值)、req.query.where、req.query.resultOffset / req.query.resultRecordCount(分页)、req.query.returnCountOnly('true' → 返回 { count: N })、req._user(需要在服务上设置 forwardUserIdentity: true)。

GeoJSON 响应规则

  • 同一图层中的所有要素必须具有相同的几何类型。
  • 始终显式声明 fields——切勿依赖从第一个要素推断类型;这会导致类型错误。
  • **始终将 idField 设置为唯一的数值属性。**省略它会导致对完整要素进行哈希处理(速度慢且容易碰撞)。对于可编辑的数据提供程序,idField 必须引用一个真实字段;不支持自动生成的 OID。
  • 默认 CRS 为 WGS84(4326);如果数据使用其他坐标系,请将 metadata.inputCrs 设置为对应的 WKID。
  • 对于多图层服务,当 req.params.layer 未定义时,返回 { layers: [...], tables: [], metadata: { name, inputCrs } }。
  • 在透传模式中,对于已在上游处理的每项过滤条件,将 filtersApplied(where、geometry、objectIds、resultOffset、resultRecordCount)设置为 true,以免框架重复应用。
  • ttl 设置 LRU 缓存的 TTL,单位为秒(缓存容量:500 个元素)。

在 editData() 中防护破坏性编辑

editData() 会将 adds / updates / deletes 写入数据提供程序的上游存储(数据库或外部 API)——这些是不可逆的数据操作,因此在生成任何会执行更新或删除的 editData 代码之前,必须按顺序满足以下每一点:

  1. **说明目标。**指出上游系统,以及写入操作所针对的确切存储/集合/表。目标未明确说明时必须停止。
  2. **展示影响范围。**说明更新/删除会影响什么(涉及哪些记录、大约有多少条),让用户了解即将更改或丢失的内容。
  3. **确认不是生产环境。**明确说明这一点,并在继续之前取得用户确认。
  4. **优先提供可逆的方案。**先提供读取/计数方案,以便在执行破坏性写入前了解影响范围。
  5. **绝不盲目输出。**在满足第 1–4 点并取得用户确认之前,不提供更新/删除代码——即使用户听起来很有把握也不例外。

返回 { addResults, updateResults, deleteResults },其中每项均为 { objectId, success, error? }。错误代码:1017 表示插入,1018 表示删除,1019 表示更新。框架不会强制执行 rollbackOnFailure——请在 editData() 中自行实现事务逻辑。使用 authorize(req) 门控写入(抛出异常以拒绝)。

配置和密钥

  • **12.0+:**在 src/ 中对本地 JSON 配置文件使用 require()。将其添加到 .gitignore。
  • **11.1–11.5:**使用 config 模块(config/default.json)。
  • 切勿将凭据硬编码;切勿提交包含真实密钥的配置 JSON。

完成条件

已固定目标 Enterprise 版本(并针对最低目标版本构建提供程序;如有需要,针对 12.x 重新编译);12.0 之前与 12.0+ 的配置处理方式与该版本匹配;每个 getData 响应都声明了 fields 和数值型 idField,且每个图层仅使用一种几何类型;密钥存储在已加入 gitignore 的配置文件中,绝不内联;任何 editData 更新或删除操作都已通过防护检查;并且已通过 arcgis-docs-lookup 对照 Enterprise SDK CDF 在线指南确认特定版本的相关说明。

参考文件

文件何时阅读
references/geojson-response-format.md完整的元数据架构、字段类型、多图层格式、编辑模板
references/provider-patterns.md完整获取与透传、计数/范围快捷方式、上游身份验证
references/examples/minimal-provider.md完整可运行的只读提供程序(示例,目标版本为 12.0)
references/examples/editable-provider.md带数据库后端的完整可编辑提供程序(示例,目标版本为 12.0)

评论

支持 Markdown