arcpy-避坑笔记

错误提示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))
  1. 保存路径为工作目录下。会直接生成tiff格式,使用默认的文件名。
  2. 如果是在工作空间的二级目录下生成文件,则会生成 .adf 格式的栅格文件。
  3. 还可以指定将栅格数据保存为特定文件类型,避开使用 save 方法。(见下文)
    arcpy-避坑笔记_第1张图片

保存栅格数据为指定格式

为了将 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

可能是内存限制
解决方法:

  1. 使用分块的方式进行数据计算,减少内存占用,时间换空间
  2. 使用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 了,需要重新破解一下)。

你可能感兴趣的:(使用笔记,碎碎念,arcgis,python)