您的位置:首页 > 编程语言 > Python开发

Python 批量 Arcgis 通过矢量数据裁剪栅格数据

2018-07-25 16:36 691 查看

    网上已经有批量裁剪的源代码,但是运行问题有很多,经过改动,成功运行,希望对他人有所启发。如果有问题,欢迎留言,希望能够回复帮忙。以下是从网上找到的源码

[code]#-*- encoding:UTF-8 -*-

  

# Tool Name: 遍历要素裁剪栅格

# Source Name: extractByMask.py

# Version: ArcGIS 10.1

# Author: GIScloud

# Created: 2012/11/1

  

import arcpy

import string

from arcpy.sa import *

  

try:

    raster = arcpy.GetParameterAsText(0) #要裁剪的栅格

    clip_feat = arcpy.GetParameterAsText(1) #裁剪要素类

    field = arcpy.GetParameterAsText(2) #命名字段

    outworkspace = arcpy.GetParameterAsText(3) #命名字段裁剪后输出目录

  

    for row in arcpy.SearchCursor(clip_feat):

        mask=row.getValue("Shape")

        outPath=outworkspace+"\\"+str(row.getValue(field))

        outExtractByMask = ExtractByMask(raster,mask)

        outExtractByMask.save(outPath)

  

except arcpy.ExecuteError:

    print arcpy.GetMessages()

此为源码,资源来自互联网,链接为:
https://www.cnblogs.com/liweis/p/4252097

运行过程中发现有很多问题,总结如下:

1)报错0100240,不能将运行好的文件保存到某路径。解决办法,更改environment中的workspace。此外,看看你的属性字段是不是有空格,字符是不是超过了13个,是不是有特殊符号,例如'之类,都会引起报错,如果这些都检查没有问题,再看看导入到arcgis工具箱中的脚本是不是有缩进的问题,因为python是由缩进控制作用域,很可能引起代码不循环,不判断等等。更改后代码如下:

[code]#-*- encoding:UTF-8 -*-
  
# Tool Name: maskproperty
# Source Name: extractByMask.py
# Version: ArcGIS 10.1
# Author: GIScloud
# Created: 2012/11/1
  
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
import arcpy
from arcpy import env
import string
from arcpy.sa import *

arcpy.CheckOutExtension("spatial")
env.workspace = r"G:\image_bach\origal_data"#enveriment setting
  
try:
   raster = arcpy.GetParameterAsText(0)                                       #input roster
   clip_feat = arcpy.GetParameterAsText(1)                                  #input vector
   field = arcpy.GetParameterAsText(2)                                         #file 字段
   outworkspace = arcpy.GetParameterAsText(3)                         #outputdectory
  
   for row in arcpy.SearchCursor(clip_feat):
      mask=row.getValue("Shape")
      outpart=str(row.getValue(field)) 
      n=len(outpart)
      if n <= 13:
        outPath=outworkspace+"\\"+''.join(outpart.split())       #由于python的文件命名不能超过13个字符,判断是否超了
      else:
        noblankstr=''.join(outpart.split())                                  #由于命名字段可能存在空格,去掉空格
        outPath=outworkspace+"\\"+noblankstr[0:13]             #如果字段的字符超过13个,截取前13个
      outExtractByMask = ExtractByMask(raster,mask)
      outExtractByMask.save(outPath)
except arcpy.ExecuteError:
   print arcpy.GetMessages()

    运行时候是将此工具配置到arcgis中自己新建的script中运行的。

运行结果:

 此为运行结果,文件名是属性字段命名的,如果有空格,将空格去掉作为文件名。

    生成文件夹,以属性字段命名,生成的格式是arcgis的栅格文件。

  此为原创,转载请注明出处。 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: