import arcpy
def Vorverarbeitung(klasse1, klasse2, klasse3, klasse4, klasse5, ffh, stationen, ordner):
#Import Messstationen
arcpy.conversion.ExcelToTable(stationen,
"messstationen")
#Puffer der FFH Gebiete (5km)
arcpy.analysis.Buffer(ffh,
"puffer_ffh",
"5 Kilometers",
"FULL")
#Klassierung der Klasse1 (Siedlung)
klasse1_fl = arcpy.management.MakeFeatureLayer(klasse1, "klasse1_fl")
arcpy.management.SelectLayerByAttribute(klasse1_fl,
"NEW_SELECTION",
"'CLC15' = '111'")
arcpy.management.CopyFeatures(klasse1, "siedlung")
#Klassierung der Klasse1 (Industrie)
arcpy.management.SelectLayerByAttribute(klasse1_fl,
"NEW_SELECTION",
"'CLC15' = '121' OR 'CLC15' = '131' OR 'CLC15' = '132' OR 'CLC15' = '133'")
arcpy.management.CopyFeatures(klasse1, "industrie")
#Klassierung der Klasse1 (Verkehr)
arcpy.management.SelectLayerByAttribute(klasse1_fl,
"NEW_SELECTION",
"'CLC15' = '122' OR 'CLC15' = '123' OR 'CLC15' = '124'")
arcpy.management.CopyFeatures(klasse1, "verkehr")
return
# This is used to execute code if the file was run but not imported
if __name__ == '__main__':
# Tool parameter accessed with GetParameter or GetParameterAsText
klasse1 = arcpy.GetParameter(0)
klasse2 = arcpy.GetParameter(1)
klasse3= arcpy.GetParameter(2)
klasse4 = arcpy.GetParameter(3)
klasse5 = arcpy.GetParameter(4)
ffh = arcpy.GetParameter(5)
stationen = arcpy.GetParameter(6)
ordner = arcpy.GetParameter(7)
Vorverarbeitung(klasse1, klasse2, klasse3, klasse4, klasse5, ffh, stationen, ordner)
# Update derived parameter values using arcpy.SetParameter() or arcpy.SetParameterAsText()
Hello there...today I struggle with the "Select by Attribute Tool" using ArcPy (Screenshot).
I tried my SQL Expression manually and it worked out fine but in ArcPy the result is always the complete dataset. I have also tried "Feature Class to Feature Class" but my selection is again not considered. I am still a beginner in the Arcpy environment so the error may well be extremely stupid.
I hope one of you can help me out on this rainy Saturday.
Thanks in advance, Fynn
Solved! Go to Solution.
There's a difference between a feature class and a layer.
Very basically:
Importantly, one other thing that only works on the layer, not on the feature class, is selection.
You start out doing the right thing: Create a layer (klasse1_f1) of the data and do the selection on that layer.
But then you copy the feature class (klasse1). The feature class has no selection, because you selected on your layer and there is no feedback to the feature class.
So this should work as intended:
arcpy.management.CopyFeatures(klasse1_f1, "siedlung")
As a side note: you don't actually need to do the selection. You could just use your queries in the MakeFeatureLayer tool. This sets the definition query of the resulting layer. So you could do this:
#Klassierung der Klasse1 (Siedlung)
klasse1_siedlung = arcpy.management.MakeFeatureLayer(klasse1, "klasse1_siedlung", "'CLC15' = '111'")
arcpy.management.CopyFeatures(klasse1_siedlung , "siedlung")
#Klassierung der Klasse1 (Industrie)
klasse1_industrie = arcpy.management.MakeFeatureLayer(klasse1, "klasse1_industrie ", "'CLC15' = '121' OR 'CLC15' = '131' OR 'CLC15' = '132' OR 'CLC15' = '133'")
# you could also write this as
# CLC15 IN ('121', '131', '132', '133')
arcpy.management.CopyFeatures(klasse1_industrie , "industrie")
Screenshots of code are hard to read - How to insert code in your post
Maybe someone is able to help now 🙂 Thanks for the tip! Didn't know it was possible
There's a difference between a feature class and a layer.
Very basically:
Importantly, one other thing that only works on the layer, not on the feature class, is selection.
You start out doing the right thing: Create a layer (klasse1_f1) of the data and do the selection on that layer.
But then you copy the feature class (klasse1). The feature class has no selection, because you selected on your layer and there is no feedback to the feature class.
So this should work as intended:
arcpy.management.CopyFeatures(klasse1_f1, "siedlung")
As a side note: you don't actually need to do the selection. You could just use your queries in the MakeFeatureLayer tool. This sets the definition query of the resulting layer. So you could do this:
#Klassierung der Klasse1 (Siedlung)
klasse1_siedlung = arcpy.management.MakeFeatureLayer(klasse1, "klasse1_siedlung", "'CLC15' = '111'")
arcpy.management.CopyFeatures(klasse1_siedlung , "siedlung")
#Klassierung der Klasse1 (Industrie)
klasse1_industrie = arcpy.management.MakeFeatureLayer(klasse1, "klasse1_industrie ", "'CLC15' = '121' OR 'CLC15' = '131' OR 'CLC15' = '132' OR 'CLC15' = '133'")
# you could also write this as
# CLC15 IN ('121', '131', '132', '133')
arcpy.management.CopyFeatures(klasse1_industrie , "industrie")
i would like to call myself stupid. sometimes you can't see the forest for the trees. thanks for your help. kind regards fynn 😌