实现水体含量反演程序。
This commit is contained in:
77
interpolate.py
Normal file
77
interpolate.py
Normal file
@ -0,0 +1,77 @@
|
||||
from util import *
|
||||
import numpy as np
|
||||
from osgeo import gdal
|
||||
import time
|
||||
import argparse
|
||||
|
||||
|
||||
@timeit
|
||||
def interpolate_kriging_pykrige(x, y, z, proj, spatial_resolution, output_path=None):
|
||||
# https://pygis.io/docs/e_interpolation.html
|
||||
from pykrige.ok import OrdinaryKriging
|
||||
|
||||
x_min = x.min()
|
||||
x_max = x.max()
|
||||
y_min = y.min()
|
||||
y_max = y.max()
|
||||
|
||||
# Generate a regular grid
|
||||
step_x = int(x_max - x_min / spatial_resolution)
|
||||
step_y = int(y_max - y_min / spatial_resolution)
|
||||
grid_x = np.linspace(x_min, x_max, step_x)
|
||||
grid_y = np.linspace(y_min, y_max, step_y)
|
||||
|
||||
# Create ordinary kriging object:
|
||||
OK = OrdinaryKriging(
|
||||
x,
|
||||
y,
|
||||
z,
|
||||
variogram_model="spherical",
|
||||
verbose=False,
|
||||
enable_plotting=False,
|
||||
coordinates_type="euclidean",
|
||||
)
|
||||
|
||||
# Execute on grid:
|
||||
print("执行插值")
|
||||
start1 = time.perf_counter()
|
||||
|
||||
z1, ss1 = OK.execute("grid", grid_x, grid_y, backend="loop", n_closest_points=12)
|
||||
|
||||
end1 = time.perf_counter()
|
||||
print("插值,运行时间:", end1 - start1, "秒")
|
||||
|
||||
if output_path is not None:
|
||||
format_str = "GTiff"
|
||||
driver = gdal.GetDriverByName(format_str)
|
||||
# driver.Create()函数中RasterXSize代表影像的sample(列数),RasterYSize代表影像的line(行数)
|
||||
dataset_out = driver.Create(output_path, step_x, step_y, 1, gdal.GDT_Float64)
|
||||
|
||||
dataset_out.SetProjection(proj)
|
||||
geotransform_out = (x_min, spatial_resolution, 0, y_max, 0, -spatial_resolution)
|
||||
dataset_out.SetGeoTransform(geotransform_out)
|
||||
|
||||
dataset_out.GetRasterBand(1).WriteArray(z1)
|
||||
|
||||
del dataset_out
|
||||
|
||||
|
||||
# Press the green button in the gutter to run the script.
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser(description="此程序基于反演结果进行插值。")
|
||||
|
||||
parser.add_argument('-i1', '--pos_content_path', type=str, required=True, help='输入含量文件的路径')
|
||||
parser.add_argument('-i2', '--img_path', type=str, required=True, help='输入影像文件的路径')
|
||||
parser.add_argument('-i3', '--spatial_resolution', type=float, default=1.0, help='输出控件分辨率')
|
||||
parser.add_argument('-o', '--outpath', required=True, type=str, help='输出文件的路径')
|
||||
|
||||
parser.add_argument('-v', '--verbose', action='store_true', help='启用详细模式')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
pos_content = np.loadtxt(args.pos_content_path)
|
||||
|
||||
dataset = gdal.Open(args.img_path)
|
||||
im_proj = dataset.GetProjection() # 地图投影信息
|
||||
|
||||
interpolate_kriging_pykrige(pos_content[:, 0], pos_content[:, 1], pos_content[:, 2], im_proj, args.spatial_resolution, args.outpath)
|
Reference in New Issue
Block a user