Arcpy ERROR 999999: 执行函数时出错解决方法

最近用Arcpy处理遥感影像,很有可能昨天代码还能正常运行,今天再打开就是999999,一般都是内存问题,如果你尝试了修改路径(输出路径不能有中文、不能太长)等种种花里胡哨的操作后还是无法解决,可以试试以下方法:

1. 缩小待处理栅格(裁剪、重分类……)

比如将栅格裁剪为几部分,或者降低分辨率,最终目的都是让栅格所占空间尽可能小(最好不要超过2G)。
在ArcGIS中查看影像大小
当你的栅格可以尽可能缩小分辨率的前提下(比如,用30m分辨率的landsat-8影像裁剪更高精度的夜间灯光数据,后续对影像进行分类只需要30m精度的分辨率即可),这种方法比较推荐,因为程序运行起来会快很多,快速提高效率!

2. 修改可执行文件,让程序能处理超过2GB的字节(高阶技巧)

原理见:GIS Geek: Set 32bit Executable LARGEADDRESSAWARE Flag to True
需要工具:Visual Studio 2010
步骤:

  1. 打开VS2010命令提示
    文件路径打开: All Programs > Microsoft Visual Studio 2010 > Visual Studio Tools > Visual Studio Command Prompt (2010)
    或者打开命令提示符 (cmd.exe):
    “C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat” x86
    命令提示
  2. 输入
    editbin /LARGEADDRESSAWARE “C:\Python26\ArcGIS10.0\python.exe”
    (注:路径换为你的ArcGIS Python 安装的路径)
    示例
  3. 查看
    dumpbin /headers “C:\Python26\ArcGIS10.0\python.exe” | more
    应该可以看到"…Application can handle large (>2GB) addresses…"的提示
    示例

解决999999的更多方法可见:Death, Taxes and the Esri ArcGIS 999999 Error: How to Fix It

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
根据错误信息,是在 `FeatureClassToFeatureClass_conversion` 函数的调用中发生了错误。具体错误信息需要查看 ArcGIS 的日志,不过在这里可以给出一些可能导致错误的原因和解决方法: 1. `feature_class` 参数和 `output_path` 参数中的路径名应该使用反斜杠 `\` 而不是斜杠 `/`。 2. 如果 `feature_class` 参数或 `output_path` 参数中的路径名包含空格,则需要使用引号将路径名括起来,例如 `"C:\data\input feature class.shp"`。 3. `FeatureClassToFeatureClass_conversion` 函数中的第三个参数应该是输出的要素类的名称,而不是输出路径。因此,应该将第三个参数改为 `"output_feature_class"`。 4. 如果删除要素类中的行之后,要素类为空,则在调用 `FeatureClassToFeatureClass_conversion` 函数出错。在删除行之前,可以先检查要素类是否为空,如果为空,则不需要调用 `FeatureClassToFeatureClass_conversion` 函数。 下面是修改后的代码: ```python import arcpy import os import sys feature_class = arcpy.GetParameterAsText(0) query = arcpy.GetParameterAsText(1) output_path = arcpy.GetParameterAsText(2) if not arcpy.Exists(output_path): arcpy.CreateFolder_management(os.path.dirname(output_path), os.path.basename(output_path)) gdb_path = os.path.join(output_path, "output.gdb") if not arcpy.Exists(gdb_path): arcpy.CreateFileGDB_management(output_path, "output.gdb", "CURRENT") expression = arcpy.AddFieldDelimiters(feature_class, "SHAPE_Area") + " < " + query if arcpy.Exists(feature_class): count = arcpy.GetCount_management(feature_class) if int(count.getOutput(0)) == 0: print("要素类为空,不需要进行操作") else: with arcpy.da.UpdateCursor(feature_class, "*", where_clause=expression) as cursor: for row in cursor: cursor.deleteRow() arcpy.FeatureClassToFeatureClass_conversion(feature_class, gdb_path, "output_feature_class", where_clause=expression) print("操作完成") else: print("要素类不存在") ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值