ArcGIS Pro 2.9中如何通过文件路径直接获取Shapefile图层对象?
解决ArcGIS Pro Python工具箱支持直接输入Shapefile路径的问题
方法一:修改参数数据类型
将输入参数的类型从Feature Layer改为Feature Class,这样参数控件既支持选择地图中已加载的图层,也允许直接浏览输入Shapefile的文件路径。
参数定义代码示例
def getParameterInfo(self): # 定义输入参数 param_input = arcpy.Parameter( displayName="输入要素", name="in_features", datatype="DEFeatureClass", # 使用要素类类型而非要素图层 parameterType="Required", direction="Input" ) params = [param_input] return params
执行代码中使用参数
def execute(self, parameters, messages): # 获取参数值(可直接作为路径或要素对象使用) in_features = parameters[0].valueAsText # 示例:执行要素复制操作 out_feature_class = r"C:\output\result.shp" arcpy.CopyFeatures_management(in_features, out_feature_class) arcpy.AddMessage(f"已成功复制要素到:{out_feature_class}")
方法二:兼容现有参数类型,代码内处理路径输入
如果不想修改原有参数类型(仍保留Feature Layer),可以在代码中判断输入值是图层对象还是文件路径,对路径自动创建临时要素图层。
执行代码示例
def execute(self, parameters, messages): input_value = parameters[0].value # 判断输入是否为文件路径(字符串类型) if isinstance(input_value, str): # 创建临时要素图层 temp_layer_result = arcpy.MakeFeatureLayer_management(input_value, "temp_feature_layer") in_layer = temp_layer_result[0] arcpy.AddMessage(f"已从路径创建临时图层:{input_value}") else: # 直接使用已加载的图层对象 in_layer = input_value arcpy.AddMessage(f"使用地图中已加载的图层:{in_layer.name}") # 示例:获取图层字段信息 field_names = [field.name for field in arcpy.ListFields(in_layer)] arcpy.AddMessage(f"图层包含字段:{', '.join(field_names)}") # 可选:将临时图层添加到当前地图(执行完工具后会保留) project = arcpy.mp.ArcGISProject("CURRENT") active_map = project.activeMap active_map.addLayer(in_layer)
注意:用
MakeFeatureLayer_management创建的临时图层,默认仅在工具执行期间有效;若需保留在地图中,需手动添加到地图对象。
内容的提问来源于stack exchange,提问作者For Comment
相关产品推荐
相关产品推荐

