操作方法

操作方法:使用 Python 更改查询图层 SQL 表达式

Last Published: December 4, 2020

摘要

当使用具有的多个引用数据库表的查询图层的地图时,在某些情况下,查询图层的 SQL 表达式可能需要更新。 例如,如果引用的数据库表已重命名或切换至新的数据库表,可以使用“图层属性”窗口中的“更改查询”按钮手动更新查询图层的 SQL 表达式。 但是,如果存在多个查询图层,则手动更新表达式可能会很繁琐。 有关详细信息,请参阅 ArcMap:修改查询图层

过程

Python 脚本和 arcpy.mapping 模块可用于自动化查询更新过程。 以下步骤将介绍如何完成上述操作。

  1. 导入 ArcPy 模块。
import arcpy
  1. 创建一个新的查询图层,其中包括对现有地图文档中的 SQL 表达式的必要更新。
sdeworkspace_path = r"D:\Connections\sample.sde" querypath = "Select * from sample where NAME = 'Test'" arcpy.MakeQueryLayer_management(sdeworkspace_path, "New_Sample_Layer", querypath, "OBJECTID", "POLYGON", "3735") MXD = arcpy.mapping.MapDocument(r"D:\Data\Mxd\Sample_Query.mxd") DF = arcpy.mapping.ListDataFrames(MXD)[0] output_layer = arcpy.mapping.Layer("New_Sample_Layer") arcpy.mapping.AddLayer(DF, output_layer, "AUTO_ARRANGE") MXD.save()
  1. 引用步骤 2 中创建的查询图层,作为 SQL 表达式的更新源。
mxd2 = arcpy.mapping.MapDocument(r"D:\Data\Mxd\Sample_Query.mxd") df2 = arcpy.mapping.ListDataFrames(mxd2, "Layers")[0] sourceLayer = arcpy.mapping.ListLayers(mxd2, "New_Sample_Layer", df2)[0]
  1. 使用 arcpy.mapping.UpdateLayer() 函数指定要实施更新的地图文档。
mxd1 = arcpy.mapping.MapDocument(r"D:\Data\Mxd\Sample_Query_1.mxd") df = arcpy.mapping.ListDataFrames(mxd1, "Layers")[0] updateLayer = arcpy.mapping.ListLayers(mxd1, "Sample_Query", df)[0] arcpy.mapping.UpdateLayer(df, updateLayer, sourceLayer, False)
  1. 将编辑保存到现有地图文档中,然后清除所有变量引用以清除所有 .lock 文件。
mxd1.save() del mxd1, mxd2 del MXD

以下是完整脚本示例:

import arcpy sdeworkspace_path = r"D:\Connections\GEODATA1051@gisadmin.sde" querypath = "Select * from GISADMIN.Test_Parks where NAME = 'Test'" arcpy.MakeQueryLayer_management(sdeworkspace_path, "New_Parks_Layer", querypath, "OBJECTID_1", "POLYGON", "3735") MXD = arcpy.mapping.MapDocument(r"D:\Data\Mxd\Parks\Parks_Query.mxd") DF = arcpy.mapping.ListDataFrames(MXD)[0] output_layer = arcpy.mapping.Layer("New_Parks_Layer") arcpy.mapping.AddLayer(DF, output_layer, "AUTO_ARRANGE") MXD.save() mxd2 = arcpy.mapping.MapDocument(r"D:\Data\Mxd\Parks\Parks_Query.mxd") df2 = arcpy.mapping.ListDataFrames(mxd2, "Layers")[0] sourceLayer = arcpy.mapping.ListLayers(mxd2, "New_Parks_Layer", df2)[0] mxd1 = arcpy.mapping.MapDocument(r"D:\Data\Mxd\Parks\Parks_Query1.mxd") df = arcpy.mapping.ListDataFrames(mxd1, "Layers")[0] updateLayer = arcpy.mapping.ListLayers(mxd1, "Parks_Query", df)[0] arcpy.mapping.UpdateLayer(df, updateLayer, sourceLayer, False) mxd1.save() del mxd1, mxd2 del MXD

文章 ID: 000018029

接收通知并查找新问题或常见问题的解决方案

从我们全新的 AI 聊天机器人中获得简明答案和视频解决方案。

下载 Esri 支持应用程序

相关信息

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

获取来自 ArcGIS 专家的帮助

联系技术支持部门

下载 Esri 支持应用程序

转至下载选项