ArcPy katmanındaki Tanım Sorgusunu şekil dosyasından mı ayarlıyorsunuz?


11

ArcPy kullanarak bir katman tanımı sorgusu ayarlamak için seçenekleri belirlemeye çalışıyorum.

Arcpy.mapping.ListLayers () kullanırken mümkün olduğunu biliyorum.

Ancak, bu senaryoda şekil dosyalarına yüklüyorum ve ArcPy'de arcpy.MakeFeatureLayer_management () kullanıyorum.

Bu coğrafi işlemciyi kullanarak oluşturduğum katman üzerinde bir tanım sorgusu ayarlamak istiyorum.

Mümkün mü?

Yanıtlar:


15

Aşağıdaki kod, bir şekil dosyasından test_A.lyr adlı ve "testField" = 'A' Tanımlı Sorgusu içine kaydedilmiş bir katman dosyası oluşturur.

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

Gerekirse, bu katman dosyasını veya katman nesnesini (lyr) katman dosyası olarak kaydedilmeden önce arcpy.mapping.AddLayer aracılığıyla haritanıza da ekleyebilirsiniz.

MakeFeatureLayer üzerindeki where_clause öğesinin, belgelenmemiş davranış olduğunu düşündüğüm bir Tanımlama Sorgusu olarak geçip geçmediğini görmek için, @John'un Cevabını doğrulamak için aşağıda ikinci bir test yaptım ve oldukça doğru.

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

Pro ArcGIS ve kitaplık için güncellemek için , arcpy.mapping.layer()ile değiştirilmiştirarcpy.mp.LayerFile()
Adin

5

Evet, sizin için kesinlikle mümkün olmalıdır, çünkü isteğe bağlı "where_clause" parametresi bunun içindir - ayrıntılar ve örnekler için belgelerine bakın , ancak temel olarak tanım sorgusunu where_clause parametresi olarak eklemeniz gerekir ve çalışması gerekir. Unutulmaması gereken tek şey, bir ObjectID / FID alanı olmayan bir katman kullanıyorsanız, ArcGIS'in SQL ifadelerini çalıştırırken sorunları vardır, ancak herhangi bir normal ArcGIS katmanı olacaktır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.