Skip to main content

为文档数据库中的数据创建查询图层

您可以在 目录 窗格中将空间表从数据库连接 (.dbconn) 拖动到地图上以自动创建可在文档数据库中访问数据的查询图层。 或者,可以使用 地图 选项卡上的 添加数据 按钮 添加数据 在 ArcGIS Pro 的地图中创建一个查询图层。

提示:

下方介绍了在受支持的文档数据库中为表创建查询图层的说明。 有关创建访问这些源类型的查询图层的说明,请参阅 为关系数据库中的数据创建查询图层为云数据仓库中的数据创建查询图层

工作流摘要

下文总结了从 支持的文档数据库 中创建数据查询图层所必须执行的操作:

  • 连接到数据库 - 您可以在 目录 窗格中创建数据库连接,将其添加到工程,并从 新建查询图层 对话框中浏览至连接。 或者,可以通过 新建查询图层 对话框创建数据库连接。 有关说明,请参阅 从 ArcGIS Pro 连接到 Elasticsearch从 ArcGIS Pro 连接到 OpenSearch

  • 定义查询 - 选择表以及要在查询中包含的字段。 查询图层使用 SQL 语句。 但是,Elasticsearch 和 OpenSearch 不是关系数据库,因此当通过这些数据库中的数据创建查询图层时,仅支持一部分 SQL 语句。 您无法添加链接或关联子句,并且 WHERE 子句受限

  • 验证查询 - 验证进程会检查查询语句的语法。 还会使用表中返回的第一行属性来确定查询的有效性。 如果查询语句无效,则无法添加查询图层。

  • 指定唯一标识符 - 地图中的所有要素必须具有唯一标识符。 查询图层必须包含一个唯一标识符字段,该字段将包含每个要素的值。 默认情况下,查询图层使用系统 ID 字段作为各个要素的唯一标识符字段。 如果您倾向于使用其他 ID 字段,则可以进行选择。 如果选择字段,则它必须是包含唯一值的整型字段。

  • 定义几何类型 - 图层的几何类型指示图层是存储点、多点、线还是面要素。 默认情况下,第一行的几何类型用于确定表中存在的几何类型。 因为 ArcGIS 仅支持每个表具有一个几何类型,所以只有该几何类型的要素会绘制在地图上。 您可以指定与查询图层返回的第一行中的类型不同的几何类型。

    例如,如果查询返回的第一行是线要素,则仅会在地图上绘制线要素。 如果表包含面要素,则可以将图层的几何类型定义为面,并且只有查询返回的面要素才会绘制在地图上。

    不支持嵌套几何字段。

支持的 Where 子句格式

从 ArcGIS 查询文档数据库时,并非所有 SQL WHERE 子句语句均受支持。 在访问文档数据库的查询图层中可以使用以下语法:

  • <FIELD_NAME | LITERAL>'<='<FIELD_NAME | LITERAL>

  • <FIELD_NAME | LITERAL>'>='<FIELD_NAME | LITERAL>

  • <FIELD_NAME | LITERAL>'<'<FIELD_NAME | LITERAL>

  • <FIELD_NAME | LITERAL>'>'<FIELD_NAME | LITERAL>

  • <FIELD_NAME | LITERAL>'='<FIELD_NAME | LITERAL>

  • <FIELD_NAME | LITERAL>'<>'<FIELD_NAME | LITERAL>

  • <BOOLEAN EXPRESSION> AND | OR <BOOLEAN EXPRESSION>

  • NOT <BOOLEAN EXPRESSION>

  • <FIELD_NAME> LIKE <STRING>

  • <FIELD_NAME> NOT LIKE <STRING>

  • <FIELD_NAME> IN ( <LITERAL>, <LITERAL>, ... )

  • <FIELD_NAME> NOT IN ( <LITERAL>, <LITERAL>, ... )

  • <FIELD_NAME> BETWEEN <FIELD_NAME | LITERAL> AND <FIELD_NAME | LITERAL>

  • <FIELD_NAME> NOT BETWEEN <FIELD_NAME | LITERAL> AND <FIELD_NAME | LITERAL>

以下语法也受支持;但是,由于受支持的文档数据库不支持字段中的空值,因此使用它们时的返回值与为关系数据库或数据仓库中的表定义相同子句时返回的值略有不同。

  • <FIELD_NAME> IS NULL - 返回指定字段缺失值的行。

  • <FIELD_NAME> IS NOT NULL - 返回指定字段包含某个值的行。

为 Elasticsearch 或 OpenSearch 中的表创建查询图层

要将访问 Elasticsearch 或 OpenSearch 中数据的查询图层添加到地图,可将表拖动到地图上,或在 新建查询图层 对话框上定义查询图层。

将表拖动到地图上

目录 窗格中将表从数据库连接 (.dbconn) 拖动到地图上时,ArcGIS Pro 会自动创建一个选择表中所有行和字段的查询图层。 它还将系统维护的 _id 字段设置为图层的唯一标识符字段。

ArcGIS Pro 在您将图层拖动到地图时,计算该图层的范围。 ArcGIS Pro 还会识别第一行的几何类型并将其设置为查询图层的几何类型。 只有该几何类型的要素会绘制在地图中。

将图层添加到地图后,可以根据需要 更改查询图层

在“新建查询图层”对话框中定义查询

按照以下步骤使用 新建查询图层 对话框在 ArcGIS Pro 工程的地图中定义查询图层:

  1. 打开要在其中添加查询图层的 ArcGIS Pro 中的地图。

  2. 地图 功能区的 图层 组中,单击 添加数据 按钮 添加数据 上的箭头,然后从下拉菜单中选择 查询图层 添加查询图层

    展开“添加数据”菜单并选择“查询图层”。

    将显示 新建查询图层 对话框。

  3. 执行以下操作之一以指定连接:

    • 如果工程中已存在连接文件 (.dbconn),请从下拉列表中选择此文件。

    • 如果工程中不存在连接,请单击新建数据库连接按钮 新建地理数据库连接 并创建一个连接。 在创建连接后,从下拉列表中选择该连接。

  4. 名称 文本框中,指定要创建的查询图层的名称。

    这是将显示在地图 内容 窗格中的名称。

  5. 查询 文本框中输入或粘贴一个 SQL 查询。

    要查看表(索引)的列表及其字段,请选中 表列表 复选框。 您可以双击 表列表 节中的表,将所有字段添加到 查询 文本框中并在 查询 文本框中编辑查询。 例如,您可以从查询中删除不想包含的字段,并在查询中添加 WHERE 子句以限制查询图层中包含的数据。

    您可以按照 上文 中所述使用 WHERE ,但是其他子句不受支持。

    当查询包含对象字段类型时,您可以查询该字段以返回其中所有的子字段值,或是查询单个子字段。 例如,以下对象字段 (parts) 包含了子字段 modelnoinstalledinspectedreplaced

    "parts": {
              "modelno": {
                "type": "text"
              },{
              "installed": {
                "type": "date"
              },
              "inspected": {
                "type": "date"
              },
              "replaced": {
                "type": "date"
              }
            }
    

    如以下示例所示,您可以将 parts 字段包含在表(计算机)的查询中,并将全部四个子字段的值作为文本字段返回。

    定义一个查询以返回 parts 字段中的所有子字段。

    SELECT parts FROM machines

    或者,您可以查询单个子字段。 在下一示例中,将查询 inspected 子字段以返回其日期值。

    定义一个查询,以返回所检查子字段的值。

    SELECT "parts.inspected" FROM machines

    在为图层定义查询时,您可以查询子字段或顶级字段,但不能同时查询两者。

  6. 选择如何定义图层的空间属性。

    • 选择 允许 ArcGIS 发现图层的空间属性 (默认选项)以允许 ArcGIS Pro 使用查询返回的第一行的空间属性。 验证 SQL 语句时,ArcGIS Pro 发现了这些属性。

    • 如果您希望图层包含空间属性与第一行不同的要素,请选择 定义图层的空间属性

  7. 单击 验证 以确保查询语法是否正确以及 ArcGIS 是否可以使用该查询。

    验证过程将在数据库中运行查询,以确认查询的结果集是否符合 ArcGIS 所实施的数据建模标准。 只有当查询图层有效时,才会将其添加到地图。

    验证规则如下:

    • 结果集最多只能包含一个空间字段。

    • 结果集必须只有一种 shape 类型。

    • 结果集不得包含 ArcGIS 任何不支持的字段类型。

    如果由于任何原因而导致验证失败,系统将返回一条错误消息以便您修改查询。

    如果所使用的数据库中的数据执行的标准与 ArcGIS 不同,则验证尤为重要。

  8. 当查询通过验证时,单击 下一步

  9. 要选择要素内部 ID 字段以外的唯一标识符字段,请选中 ArcGIS 可用作各个字段 ID 的包含唯一值的整型字段旁边的复选框。

    您不是必需选择唯一标识符字段。 如果您未指定字段,则会使用系统 ID 字段。

    注:

    不支持 m 值和 z 值。

    您无法为图层定义空间参考;始终使用 SRID 4326、GCS WGS 1984。

  10. 从下拉菜单中选择几何类型。

    如果您为图层选择了 允许 ArcGIS 发现图层的空间属性 选项,则此字段可能设置完成。

  11. 如果您在步骤 6 中选择了 允许 ArcGIS Pro 发现图层的空间属性 选项,请单击 完成 将查询图层添加到地图中。

    接下来的两个步骤仅在您选择了 定义图层的空间属性 选项时适用。

  12. 图层范围属性 部分中,通过选择以下选项之一来指定查询图层的空间范围:

    • 输入范围 - 单击 下一步 时,您必须输入范围。 您指定的范围必须有效,并且包含表中的所有要素。

    • 使用地图范围 - 当前地图的范围将用于查询图层范围。 单击 下一步 查看地图范围值。

    • 使用空间参考范围 - 数据的空间参考范围将用于查询图层范围。 对于某些空间参考,这是整个地球。 单击 下一步 并查看空间参考范围值。

  13. 完成设置或查看图层范围后,单击 完成 以将查询图层添加到地图中。

有关更改查询图层属性的信息,请参阅 修改查询图层