198 lines
7.6 KiB
Python
198 lines
7.6 KiB
Python
"""
|
||
@Project :microproduct
|
||
@File :AtmosphericDelayDT.py
|
||
@Function :主函数
|
||
@Author :LMM
|
||
@Date :2021/10/19 14:39
|
||
@Version :1.0.0
|
||
"""
|
||
from osgeo import gdal, gdalconst, osr
|
||
from tool.algorithm.image.ImageHandle import ImageHandler
|
||
|
||
class DataTransform:
|
||
|
||
"""数据转换"""
|
||
def __int__(self):
|
||
pass
|
||
|
||
def Cover(self, filepath):
|
||
"""读取数据"""
|
||
array = ImageHandler().get_data(filepath)
|
||
return array
|
||
|
||
def get_arr(self, filepath):
|
||
"""读取数据"""
|
||
testDst = gdal.Open(filepath, gdalconst.GA_Update)
|
||
width = testDst.RasterXSize
|
||
height = testDst.RasterYSize
|
||
band_count = testDst.RasterCount
|
||
band1 = testDst.GetRasterBand(1)
|
||
img_arr = band1.ReadAsArray(0, 0, width, height)
|
||
return img_arr
|
||
|
||
def write_tif(self, out_path, lat_path, lon_path, in_path):
|
||
lat_arr = self.Cover(lat_path) # 读取lat_rdr
|
||
lon_arr = self.Cover(lon_path) # 读取lon_rdr
|
||
in_arr = self.Cover(in_path) # 读取hgt_rdr
|
||
band = ImageHandler().get_bands(in_path)
|
||
if band == 2:
|
||
save_array = in_arr[1, :, :]
|
||
else:
|
||
save_array = in_arr
|
||
"""读取数据"""
|
||
# 转换参数
|
||
# lat_res = abs(lat_arr[1, 0]-lat_arr[0, 0])
|
||
# lon_res = abs(lon_arr[0, 1] - lon_arr[0, 0])
|
||
|
||
import numpy as np
|
||
lon_leftup = np.min(lon_arr[np.nonzero(lon_arr)])
|
||
lon_rightup = np.max(lon_arr[np.nonzero(lon_arr)])
|
||
|
||
lat_leftup = np.max(lat_arr[np.nonzero(lat_arr)])
|
||
lat_leftdown = np.min(lat_arr[np.nonzero(lat_arr)])
|
||
|
||
lon_res1 = (lon_rightup - lon_leftup) / lon_arr.shape[1]
|
||
lat_res1 = (lat_leftup - lat_leftdown) / lat_arr.shape[0]
|
||
|
||
# 定义投影系
|
||
dst_srs = osr.SpatialReference()
|
||
dst_srs.ImportFromEPSG(4326) # 定义一个WGS84坐标系
|
||
im_proj = dst_srs.ExportToWkt()
|
||
|
||
im_geo = [lon_leftup, lon_res1, 0, lat_leftup, 0, -lat_res1]
|
||
# [(左上角像元的位置), (像元的宽度), (如果影像是指北的,0),(左上角像元的位置),(如果影像是指北的,0), (像元的高度)]
|
||
ImageHandler().write_img(out_path, im_proj, im_geo, save_array, no_data='null')
|
||
|
||
def unw_write_tif(self, out_path, lat_path, lon_path, in_path):
|
||
lat_arr = self.Cover(lat_path) # 读取lat_rdr
|
||
lon_arr = self.Cover(lon_path) # 读取lon_rdr
|
||
in_arr = self.Cover(in_path) # 读取hgt_rdr
|
||
band = ImageHandler().get_bands(in_path)
|
||
save_array = in_arr
|
||
"""读取数据"""
|
||
# 转换参数
|
||
lat_res = abs(lat_arr[1, 0]-lat_arr[0, 0])
|
||
lon_res = abs(lon_arr[0, 1] - lon_arr[0, 0])
|
||
|
||
# 定义投影系
|
||
dst_srs = osr.SpatialReference()
|
||
dst_srs.ImportFromEPSG(4326) # 定义一个WGS84坐标系
|
||
im_proj = dst_srs.ExportToWkt()
|
||
|
||
im_geo = [lon_arr[0][0], lon_res, 0, lat_arr[0][0], 0, -lat_res]
|
||
# [(左上角像元的位置), (像元的宽度), (如果影像是指北的,0),(左上角像元的位置),(如果影像是指北的,0), (像元的高度)]
|
||
ImageHandler().write_img(out_path, im_proj, im_geo, save_array, no_data='null')
|
||
|
||
def write_tif1(self, out_path, lat_path, lon_path, in_path):
|
||
"""输入的in_path数据翻转,输入的lat_path数据翻转"""
|
||
lat_arr_src = self.Cover(lat_path) # 读取lat_rdr
|
||
lon_arr_src = self.Cover(lon_path) # 读取lon_rdr
|
||
in_arr_src = self.Cover(in_path) # 读取hgt_rdr
|
||
|
||
lat_arr2 = lat_arr_src[::-1]
|
||
lon_arr2 = lon_arr_src
|
||
|
||
band = ImageHandler().get_bands(in_path)
|
||
if band == 2:
|
||
save_array = in_arr_src[1, :, :]
|
||
else:
|
||
save_array = in_arr_src
|
||
|
||
"""读取数据"""
|
||
# geo = [0, 0, 0, 0, 0, 0]
|
||
lon_width = ImageHandler().get_img_width(lon_path) # 栅格矩阵的行数
|
||
lat_width = ImageHandler().get_img_height(lat_path) # 栅格矩阵的行数
|
||
# 转换参数
|
||
lat_res = abs(lat_arr2[-1, 0] - lat_arr2[0, 0])/lat_width
|
||
lon_res = abs(lon_arr2[0, -1] - lon_arr2[0, 0])/lon_width
|
||
|
||
# 定义投影系
|
||
dst_srs = osr.SpatialReference()
|
||
dst_srs.ImportFromEPSG(4326) # 定义一个WGS84坐标系
|
||
im_proj = dst_srs.ExportToWkt()
|
||
|
||
im_geo = [lon_arr2[0][0], lon_res, 0, lat_arr2[0][0], 0, -lat_res]
|
||
# [(左上角像元的位置), (像元的宽度), (如果影像是指北的,0),(左上角像元的位置),(如果影像是指北的,0), (像元的高度)]
|
||
|
||
ImageHandler().write_img(out_path, im_proj, im_geo, save_array, no_data='null')
|
||
|
||
def tif_vrt(self, tif_path, vrt_path):
|
||
"""
|
||
干涉图.tif重采样为.int的大小
|
||
"""
|
||
delayDst = gdal.Open(tif_path)
|
||
if delayDst is None:
|
||
return False
|
||
delayWidth = delayDst.RasterXSize
|
||
delayHeight = delayDst.RasterYSize
|
||
delayBands = delayDst.RasterCount
|
||
delayArray = delayDst.ReadAsArray(0, 0, delayWidth, delayHeight)
|
||
|
||
testDst = gdal.Open(vrt_path, gdalconst.GA_Update)
|
||
if testDst is None:
|
||
return False
|
||
width = testDst.RasterXSize
|
||
height = testDst.RasterYSize
|
||
Bands = testDst.RasterCount
|
||
band1 = testDst.GetRasterBand(1)
|
||
# img_arr = band1.ReadAsArray(0, 0, width, height) # 1
|
||
if delayWidth!=width or delayHeight!=height or delayBands!=Bands:
|
||
return False
|
||
|
||
# print("修改前:\t", img_arr[0, 0]) # 1
|
||
# print("修改后:\t", delayArray[0, 0]) # 1
|
||
band1.WriteArray(delayArray)
|
||
band1 = None
|
||
testDst = None
|
||
img_arr = None
|
||
|
||
# testDst2 = gdal.Open(vrt_path, gdalconst.GA_Update) # 1
|
||
# width2 = testDst2.RasterXSize # 1
|
||
# height2 = testDst2.RasterYSize # 1
|
||
# band12 = testDst2.GetRasterBand(1) # 1
|
||
# img_arr2 = band12.ReadAsArray(0, 0, width2, height2) # 1
|
||
# print("重新读取后:\t", img_arr2[0, 0]) # 1
|
||
# print("over") # 1
|
||
return True
|
||
|
||
def read_tif(self, Atmosp_path):
|
||
testDst=gdal.Open(Atmosp_path,gdalconst.GA_Update)
|
||
width=testDst.RasterXSize
|
||
height=testDst.RasterYSize
|
||
band_count=testDst.RasterCount
|
||
band1=testDst.GetRasterBand(1)
|
||
img_arr=band1.ReadAsArray(0,0,width,height)
|
||
|
||
return img_arr
|
||
def tran(self, vrt_path,Atmo_arr1):
|
||
|
||
testDst=gdal.Open(vrt_path,gdalconst.GA_Update)
|
||
width=testDst.RasterXSize
|
||
height=testDst.RasterYSize
|
||
band_count=testDst.RasterCount
|
||
band1=testDst.GetRasterBand(1)
|
||
img_arr=band1.ReadAsArray(0,0,width,height)
|
||
# print("修改前:\t",img_arr.dtype)
|
||
# print("修改前:\t",img_arr[500,500])
|
||
# print("修改后:\t",Atmo_arr1[500,500])
|
||
# print("修改后:\t",Atmo_arr1.dtype)
|
||
band1.WriteArray(Atmo_arr1)
|
||
# band1.WriteArray(img_arr)
|
||
band1.FlushCache()
|
||
del testDst
|
||
band1=None
|
||
testDst=None
|
||
img_arr=None
|
||
|
||
def tran_af(self, vrt_path):
|
||
|
||
testDst2=gdal.Open(vrt_path, gdalconst.GA_Update)
|
||
width2=testDst2.RasterXSize
|
||
height2=testDst2.RasterYSize
|
||
band_count2=testDst2.RasterCount
|
||
band12=testDst2.GetRasterBand(1)
|
||
img_arr2=band12.ReadAsArray(0,0,width2,height2)
|
||
# print("重新读取后:\t",img_arr2[500,500])
|
||
# print("重新读取后:\t", img_arr2.dtype)
|
||
# print("over")
|