У меня есть скрипт на основе ArcPy, где я пытаюсь пересечь два слоя, где один слой должен иметь свой центроид в другом слое.
Поскольку мне нужно знать, что один слой (Feature_layer ниже) включает в себя центроид другого, я использую инструмент arcpy.SelectLayerByLocation_management ().
У меня нет открытого документа карты (* .mxd), поэтому для этого мне нужно использовать Make Feature Layer для подачи в него.
В документации отмечается, что векторный слой исчезнет при выходе из программы, но мне нужно, чтобы он исчез раньше, так как он находится в цикле, подобном приведенному ниже.
for feature_class in large_list_of_feature_classes:
some_function(feature_class)
def some_function():
feature = "{path to feature class}"
feature_layer = "feature_layer"
HUCs_layer = "all_HUCs" #HUCs being Hydrologic Unit Codes
arcpy.MakeFeatureLayer_management(feature, feature_layer)
arcpy.MakeFeatureLayer_management(feature, HUCs_layer)
arcpy.SelectLayerByLocation_management(HUCs_layer, "HAVE_THEIR_CENTER_IN", feature_layer, selection_type="NEW_SELECTION")
arcpy.CopyFeatures_management(HUCs_layer, selection_name)
Я ищу функцию для удаления векторных слоев, но я не смог ее найти.
Я понимаю, что мог бы добавить сюда какой-то счет или что-то, чтобы сделать каждый из них уникальным в рамках программы, но это не идеально, если нет способа удалить слои объектов.
источник
Вы можете вызвать arcpy.mapping.RemoveLayer, чтобы удалить слой из оглавления.
источник
Это то, что я использую для удаления слоев.
arcpy.mapping.RemoveLayer ("DataFrame", "Имя слоя")
Или зацикливание:
источник
Используйте,
mxd.save()
если вы используете документ карты, который неCURRENT
гарантирует, что слой не исчезнет. Также добавьте оператор печати в ваш скрипт:Просто чтобы убедиться, что он вообще находит слой для удаления.
источник
попробуй это:
источник