# -*-coding:utf-8 -*-
import arcpy
from arcpy import env
import os
import shutil
class GridCalculator(object):
"""
:栅格计算器 con函数的使用
"""
def __init__(self):
#img文件临时存储路径
self.OUTPATH = 'F:/arcgis_temp/raster/'
#img文件存储路径
self.IMGPATH = 'F:/arcgis_temp/img/'
#环境变量设置 上下左右经纬度
self.x_min = 104.250
self.y_min = 35.200
self.x_max = 107.700
self.y_max = 39.400
def overlay(self,dicts,formula,out_path,file_name):
"""
:栅格计算器img栅格图层叠加运算
:params dicts :计算公式中用到的img文件名称
{"img1":r"F:/test/test.img","img2":r"F:/test2/test2.img",}
formula :栅格计算器使用的公式
out_path:输出文件路径
file_name:输出的文件名称 *.img
:return 返回输出的文件路径
"""
try:
#组合形成完整的栅格计算器的计算公式
for key,values in dicts.items():
formula = formula.replace('{'+key+'}','"'+values+'"')
env.overwriteOutput = True
filepath = self.OUTPATH+'overlay/'+out_path
#如果路径不存在,新建目录
if not os.path.exists(filepath):
os.makedirs(filepath)
#工作空间
env.workspace = filepath
#环境变量设置 上下左右经纬度
env.extent = arcpy.Extent( self.x_min, self.y_min,
self.x_max, self.y_max
)
arcpy.gp.RasterCalculator_sa(formula, file_name)
#如果路径不存在,新建目录
if not os.path.exists(self.IMGPATH+'overlay/'+out_path):
os.makedirs(self.IMGPATH+'overlay/'+out_path)
img_name = self.IMGPATH+'overlay/'+out_path+"/"+file_name+".img"
#将文件永久保存
shutil.copyfile(filepath+"/"+file_name,img_name)
#删除所有的临时文件
self.remove_all_file(filepath)
#返回输出的文件路径
return img_name
except:
raise
def remove_all_file(self,path):
"""
:删除文件夹下多有文件
"""
try:
for i in os.listdir(path):
path_file = os.path.join(path,i) #取文件绝对路径
os.remove(path_file)
except:
raise
def img_to_txt(self,in_raster,out_txt,filename):
"""
:将img文件转换为格点数据文件
:params in_raster :需要转换的img文件路径 F:/test.img
out_txt :输出的txt文件路径 F:/
filename :输出的txt文件名称 test.txt
"""
try:
#如果路径不存在,新建目录
if not os.path.exists(out_txt):
os.makedirs(out_txt)
arcpy.RasterToASCII_conversion (in_raster, out_txt+"/"+filename)
except:
raise
if __name__ == '__main__':
"""栅格图层叠加预算示例————即公式计算"""
formula = '0.2*{img1}-1+0.8*{img2}+1.25'
dicts = {
"img1" : r"F:/arcgis_temp/img/CDCF/test.img",
"img2" : r"F:/arcgis_temp/img/aaaa/aaa.img",
}
out_path = 'test'
file_name = 'test.img'
gc=GridCalculator()
gc.overlay(dicts, formula,out_path,file_name)
"""栅格计算器,con函数 ————即指标判断"""
formula = ( 'Con( ({img1}<=10),1,'
'Con( ({img1}>10)&({img1}<=20),2,3))'
)
dicts = {
"img1" : r"F:/arcgis_temp/img/CDCF/test.img",
}
out_path = 'test'
file_name = 'test1.img'
gc=GridCalculator()
gc.overlay(dicts, formula,out_path,file_name)