当前位置: 首页 > 工具软件 > img2txt > 使用案例 >

arcgis 栅格计算器,img叠加运算,con函数,img转txt

匡安宜
2023-12-01
# -*-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)





 类似资料: