Impostazione della query di definizione sul livello ArcPy da shapefile?


11

Sto cercando di determinare le opzioni per impostare una query di definizione del livello utilizzando ArcPy.

So che è possibile quando si utilizza arcpy.mapping.ListLayers ().

Tuttavia, in questo scenario sto caricando in shapefile e usando arcpy.MakeFeatureLayer_management () in ArcPy.

Voglio impostare una query di definizione sul livello che creo usando questo geoprocessore.

È possibile?

Risposte:


15

Il codice seguente creerà, da un file di forma, un file di livello chiamato test_A.lyr che ha una query di definizione di "testField" = 'A' salvata in esso.

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

Se necessario, è anche possibile aggiungere questo file di livello o l'oggetto Layer (lyr) prima di essere salvato come file di livello nella mappa tramite arcpy.mapping.AddLayer.

Per vedere se un where_clause su MakeFeatureLayer viene passato come una query di definizione, che penso sia un comportamento non documentato, ho eseguito un secondo test di seguito per verificare la risposta di @John, ed è abbastanza corretto.

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

Per aggiornare per ArcGIS Pro e la sua biblioteca , arcpy.mapping.layer()è stato sostituito conarcpy.mp.LayerFile()
Adin

5

Sì, dovrebbe essere sicuramente possibile per te, poiché questo è il parametro facoltativo "where_clause" - vedi la sua documentazione per dettagli ed esempi, ma in pratica devi solo includere la query di definizione come parametro where_clause e dovrebbe funzionare. L'unica cosa da notare, se si utilizza un livello che non ha un campo ObjectID / FID, ArcGIS ha problemi con l'esecuzione di espressioni SQL su di esso, ma qualsiasi livello ArcGIS normale lo farà.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.