错误提示9999998
代码中核密度计算结果为栅格变量,使用栅格变量的 Sava 方法时,需指定好输出路径(在工作空间的路径下)。否则无法正确输出就会报错。
# -- coding:cp936 –
# 批量进行核密度计算的脚本
# Import system modules
import arcpy
from arcpy import env
from arcpy.sa import *
import os
# Set environment settings
env.workspace = r"G:\Athrun\ArcData\kerneldensityPython\Point1"
# load all shp file
list_shapefiles = arcpy.ListFiles(r"*.shp")
i=0
for shapefile in list_shapefiles:
i += 1
# Set local variables
populationField = "NONE"
cellSize = 0.004
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
# Execute KernelDensity
outKernelDensity = KernelDensity(shapefile, populationField, cellSize,3200, "SQUARE_KILOMETERS")
print (shapefile[0:-4])
# Save the output
if not os.path.exists(r'G:\Athrun\ArcData\\kerneldensityPython\\Point1\\'+shapefile[0:-4]):
os.makedirs(r"G:\Athrun\ArcData\\kerneldensityPython\\Point1\\"+shapefile[0:-4])
outKernelDensity.save(r"G:\Athrun\ArcData\\kerneldensityPython\\Point1\\"+shapefile[0:-4]+"\\"+str(i))
- 保存路径为工作目录下。会直接生成tiff格式,使用默认的文件名。
- 如果是在工作空间的二级目录下生成文件,则会生成 .adf 格式的栅格文件。
- 还可以指定将栅格数据保存为特定文件类型,避开使用 save 方法。(见下文)
保存栅格数据为指定格式
为了将 lineDensity 的返回值(Raster)保存为tiff格式,可以直接使用 arcpy 的 CopyRaster_management(input,output)方法。
这个函数比 RasterToOtherFormat_conversion 好用的点在于有更多可选的参数,而不是只有输出格式
input:输入栅格数据的路径或者栅格变量
ouput:输出的路径(对于保存到非 gdb 的路径,可以采用加后缀的方式指定输出数据类型,无后缀则是 Grid 类型)
- .bil—Esri BIL
- .bip—Esri BIP
- .bmp—BMP
- .bsq—Esri BSQ
- .dat—ENVI DAT
- .gif—GIF
- .img—ERDAS IMAGINE
- .jpg—JPEG
- .jp2—JPEG 2000
- .png—PNG
- .tif—TIFF
- no extension for Esri Grid
GRID的问题
我目前也不清楚这个问题的原因是什么。
解决方法:
ps:(亲测有效,但因为不知道原因,所以不清楚对其他产生同样问题的同学是否有帮助)
输出的文件名不能包含除大小写字母,数字,“_”之外的所有其他字符。其次名称长度有一定的限制。我在修改为八个字符之后顺利输出数据没有报错。
顺便一提,覆盖原有图像的方法:
arcpy.env.overwriteOutput = True
提示 error 999999
可能是内存限制
解决方法:
- 使用分块的方式进行数据计算,减少内存占用,时间换空间
- 使用64位的 Python 来编译(安装 64位的 background 程序)。
安装 background 64bit
(以此来解决不能处理 2Gb 以上数据的缺陷)
直接在安装文件中找双击安装
安装过程会提示是否安装64位(我这边是10.6,貌似有些版本需要自己到网上找后缀位 msp 的安装包)
对于国内的学生用户而言,可能很多时候使用的是‘免费’版 ArcGIS 。
安装这个 bg 程序的时候,需要注意 64位的桌面端是否也破解了。
否则会在 import arcpy 的过程中,出现了 notinitialized 的错误。
对于 10.6 版本而言,只要在 arcgis desktop 程序的 bin64 文件夹中放入 afcore.dll ‘ pj 文件’,然后重新读取认证
(我之前64位的afcore.dll 被腾讯卫士删了,所以只有32位的程序 pj 了,需要重新破解一下)。