Python地理数据处理 十五:基于arcpy的批量操作

今天把最近遇到的一些问题和解决方法和大家进行分享,方便自己后面的回顾,也希望帮助大家解决自己的问题。后期如果大家需要的话,我会出一个关于Anusplin插值软件的一个详细教程,免费分享给大家。
arcpy可以在Arcgis自带的python2.7版本中使用,不需要再下载python。

在这里插入图片描述

1. 批量格式转换(grd to tiff)

# -*- coding: cp936 -*-
import arcpy
arcpy.env.workspace="E:\\ANUSSPLIN\\90DEM2\\"  #存放数据的文件夹
a=arcpy.ListRasters("*","grd")  #得到文件夹下所有的grd名称
for i in a:
    arcpy.RasterToOtherFormat_conversion(i,"E:\\ANUSSPLIN\\90DEM2\\tif\\","TIFF")

在这里插入图片描述

2. 批量定义投影(Albers)

import arcpy
arcpy.env.workspace = "E:\\ANUSSPLIN\\1000mTEM"
rasters = arcpy.ListRasters("*","tif")
Coordinate_System = "E:\\ANUSSPLIN\\1000mPRE\\coordinateSystem.tif"
for raster in rasters:
    print str(raster)
    arcpy.DefineProjection_management(raster,Coordinate_System)
print("OK!!!")

在这里插入图片描述

3. 批量投影转换(WGS 1984 to WGS 1984 Albers)

非常感谢大家的指正,我把这里再进行完善一下。

# -*- coding: cp936 -*-
import arcpy
arcpy.env.workspace = "E:/Work_GIS/practice" # 输入路径
rasters = arcpy.ListRasters("*","tif")
for raster in rasters:
    print str(raster)
    out = "E:/Work_GIS/practice/output/" + raster  # 输出路径
    arcpy.ProjectRaster_management(raster,out,"PROJCS['Asia_North_Albers_WGS84_LCR',GEOGCS['GCS_WGS_1984',DATUM['D_WGS_1984',SPHEROID['WGS_1984',6378137.0,298.257223563]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]],PROJECTION['Albers'],PARAMETER['False_Easting',0.0],PARAMETER['False_Northing',0.0],PARAMETER['Central_Meridian',105.0],PARAMETER['Standard_Parallel_1',25.0],PARAMETER['Standard_Parallel_2',47.0],PARAMETER['Latitude_Of_Origin',0.0],UNIT['Meter',1.0]]"
    )
print("ok!!!")

ProjectRaster_management中的投影信息在哪里可以找到:

在这里插入图片描述
结果显示:

在这里插入图片描述

3.1 转换前的栅格图像属性:

在这里插入图片描述
在这里插入图片描述
这里采用的重采样方法是最邻近法

3.2 转换后的栅格图像属性:

在这里插入图片描述在这里插入图片描述此处的采样方法默认为最邻近法

所以对栅格图像进行批量裁剪的时候,只需要改变投影坐标信息就行,重采样方法默认为最邻近法

4. ArcPy批量裁剪

# -*- coding: cp936 -*-
import arcpy
arcpy.CheckOutExtension("spatial")
arcpy.env.workspace = "E:\\ANUSSPLIN\\1000mPRE"#栅格文件路径
rasters = arcpy.ListRasters("*","tif")#也可以是其他的文件格式,如grd
mask = "E:\\China_map\\长株潭垃圾站点信息\\长沙.shp"
for raster in rasters:
    print str(raster)
    out = "E:\\ANUSSPLIN\\PRE_output\\" + raster
    arcpy.gp.ExtractByMask_sa(raster, mask, out)
    print("ma_" + raster + "has done!")
print("ok!!!")

在这里插入图片描述

4.1 常见错误
Traceback (most recent call last):
  File "D:\Datasets\arcgisDatasetFrost\clip\clip", line 20, in <module>
    print str(raster)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)

   这个错误通常发生在尝试将非ASCII字符编码为ASCII字符集时,因为ASCII字符集仅支持128个字符,无法表示非ASCII字符。
  解决这个问题的一种方法是在打印或输出非ASCII字符之前,将其转换为正确的字符集,如UTF-8或Unicode。在第一行加入:

# -*- coding: utf-8 -*-

   但是有时候尝试了上面的方法之后还是不行,这里建议你将你要裁剪的栅格影像的文件名改为英文或数字(不要包含汉字),就可以解决99%的问题了。

5. ArcPy批量镶嵌

# -*- coding: cp936 -*-
import arcpy
import os
arcpy.CheckOutExtension("spatial")
base = r"E:\Download\2020年中国行政区划边界SHP数据-省、市\安徽省.shp"
#获取坐标系
out_coordSystem = arcpy.Describe(base).spatialReference
dataType = arcpy.Describe(base).DataType
piexlType = arcpy.Describe(base).pixelType
cellWidth = arcpy.Describe(base).meanCellWidth
bandCount = arcpy.Describe(base).bandCount
arcpy.env.workspace = "E:\\Download\\2020年中国行政区划边界SHP数据-省、市\\005-2020年中国行政区划边界-省、市-Shp\\2020年中国行政区划边界-省、市-Shp\\省边界(包含子区域)\\"
rasters = arcpy.ListRasters("*","shp")
outFolder = r"E:\Download\2020年中国行政区划边界SHP数据-省、市\output"
arcpy.MosaicToNewRaster_management(rasters, outFolder,"result.shp",
                                   out_coordSystem,"16_BIT_SIGNED",
                                   cellWidth,bandCount,"LAST","FIRST")
  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jackson的生态模型

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值