Mengatur Query Definisi pada lapisan ArcPy dari shapefile?

11

Saya mencoba menentukan opsi untuk menetapkan kueri definisi lapisan menggunakan ArcPy.

Saya tahu bahwa itu mungkin saat menggunakan arcpy.mapping.ListLayers ().

Namun, dalam skenario ini saya memuat di shapefile, dan menggunakan arcpy.MakeFeatureLayer_management () di ArcPy.

Saya ingin menetapkan kueri definisi pada layer yang saya buat dari menggunakan geoprocessor ini.

Apakah ini mungkin?

amasephy
sumber

Jawaban:

15

Kode di bawah ini akan membuat, dari shapefile, file layer yang disebut test_A.lyr yang memiliki Query Definisi "testField" = 'A' yang disimpan di dalamnya.

import arcpy

arcpy.MakeFeatureLayer_management(r"C:\temp\testLines.shp","test_lyr")
lyr = arcpy.mapping.Layer("test_lyr")
lyr.name = "test"
lyr.definitionQuery = '"testField" = ' + "'A'"
lyr.saveACopy(r"C:\temp\test_A.lyr")

del lyr

Jika diperlukan, Anda juga bisa menambahkan file layer ini, atau objek Layer (lyr) dari sebelum disimpan sebagai file layer, ke dalam peta Anda melalui arcpy.mapping.AddLayer.

Untuk melihat apakah where_clause di MakeFeatureLayer dilewati sebagai Definisi Kueri, yang menurut saya merupakan perilaku tidak berdokumen, saya melakukan tes kedua di bawah ini untuk memverifikasi Jawaban @John, dan dia cukup benar.

arcpy.MakeFeatureLayer_management(r"C:\temp\testLines.shp","test_lyr2",'"testField" = ' + "'A'")
lyr2 = arcpy.mapping.Layer("test_lyr2")
lyr2.name = "test2"
lyr2.saveACopy(r"C:\temp\test_2.lyr")

del lyr2
PolyGeo
sumber
Untuk memperbarui untuk ArcGIS Pro dan perpustakaannya , arcpy.mapping.layer()telah diganti denganarcpy.mp.LayerFile()
adin
5

Ya, itu pasti mungkin bagi Anda karena itulah yang menjadi parameter opsional "where_clause" - lihat dokumentasi untuk detail dan contoh, tetapi pada dasarnya Anda hanya perlu memasukkan kueri definisi sebagai param where_clause dan harusnya berfungsi. Satu-satunya hal yang perlu diperhatikan, jika Anda menggunakan lapisan yang tidak memiliki bidang ObjectID / FID, ArcGIS memiliki masalah menjalankan ekspresi SQL terhadapnya, tetapi lapisan ArcGIS biasa akan.

John
sumber