方法

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. SQL 式の更新のソースとして、手順 2 で作成したクエリ レイヤーを参照します。
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 Support アプリのダウンロード

関連情報

このトピックについてさらに調べる

ArcGIS エキスパートのサポートを受ける

テクニカル サポートへのお問い合わせ

Esri Support アプリのダウンロード

ダウンロード オプションに移動