update v0.0.2, add default value
This commit is contained in:
@ -1,14 +1,25 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import cartopy.crs as ccrs
|
import cartopy.crs as ccrs
|
||||||
|
|
||||||
|
|
||||||
class model_info_2d(object):
|
class model_info_2d(object):
|
||||||
"""
|
"""
|
||||||
用于创建模式网格, 并包含了相关信息, 提供了方便坐标与经纬度相互转换的工具
|
用于创建模式网格, 并包含了相关信息, 提供了方便坐标与经纬度相互转换的工具
|
||||||
基于Numpy和Cartopy.crs构建, 仅支持方形网格
|
基于Numpy和Cartopy.crs构建, 仅支持方形网格
|
||||||
"""
|
"""
|
||||||
def __init__(self, proj, nx, ny, dx, dy, lowerleft=None, \
|
def __init__(
|
||||||
nt=None, dt=None, var_list=None, type=None) -> None:
|
self,
|
||||||
|
proj : ccrs.PlateCarree = None,
|
||||||
|
nx : int = None,
|
||||||
|
ny : int = None,
|
||||||
|
dx : float = None,
|
||||||
|
dy : float = None,
|
||||||
|
lowerleft : list = None,
|
||||||
|
nt : int = None,
|
||||||
|
dt : float = None,
|
||||||
|
var_list : list = None,
|
||||||
|
type : str = None
|
||||||
|
) -> None:
|
||||||
|
|
||||||
"""
|
"""
|
||||||
用于初始化网格, 如果不给定左下角经纬度坐标, 则默认投影坐标原点位置为网格
|
用于初始化网格, 如果不给定左下角经纬度坐标, 则默认投影坐标原点位置为网格
|
||||||
中心, 并依据此建立网格
|
中心, 并依据此建立网格
|
||||||
@ -39,46 +50,38 @@ class model_info_2d(object):
|
|||||||
2023-03-18 15:17:40 Sola v4 删除扩展边界的选项
|
2023-03-18 15:17:40 Sola v4 删除扩展边界的选项
|
||||||
2023-03-18 15:18:04 Sola v4 修正输入高维数组时, 计算报错的问题
|
2023-03-18 15:18:04 Sola v4 修正输入高维数组时, 计算报错的问题
|
||||||
2023-03-18 16:22:17 Sola v5 增加支持获取加密网格的方法, 用于超采样清单
|
2023-03-18 16:22:17 Sola v5 增加支持获取加密网格的方法, 用于超采样清单
|
||||||
|
2023-03-19 21:53:51 Sola v0.0.2 加入了默认的网格(经纬度网格), 以方便了解功能
|
||||||
测试记录:
|
测试记录:
|
||||||
2022-09-28 16:28:10 Sola v2 新的简化网格生成方法测试完成, 结果与旧版一致
|
2022-09-28 16:28:10 Sola v2 新的简化网格生成方法测试完成, 结果与旧版一致
|
||||||
2022-09-28 18:27:59 Sola v2 测试了使用proj_LC投影的相关方法, 网格与WRF一致
|
2022-09-28 18:27:59 Sola v2 测试了使用proj_LC投影的相关方法, 网格与WRF一致
|
||||||
"""
|
"""
|
||||||
if type is None:
|
try:
|
||||||
self.type = 'unknown'
|
self.type = 'lonlat' if type is None else type # 类型
|
||||||
else:
|
self.nx = 360 if nx is None else nx # x方向网格数
|
||||||
self.type = type # 类型
|
self.ny = 180 if ny is None else ny # y 方向网格数
|
||||||
self.nx = nx # x方向网格数
|
self.projection = ccrs.PlateCarree() if proj is None else proj # 投影类别, 使用cartopy的crs提供
|
||||||
self.ny = ny # y方向网格数
|
self.dx = 1 if dx is None else dx # 在该投影下x方向间距
|
||||||
self.projection = proj # 投影类别, 使用cartopy的crs提供
|
self.dy = 1 if dy is None else dy # 在该投影下y方向间距
|
||||||
self.dx = dx # 在该投影下x方向间距
|
self.dt = 1 if dt is None else dt # 时间间隔(小时)
|
||||||
self.dy = dy # 在该投影下y方向间距
|
self.nt = 1 if nt is None else nt # 每个文件中包含多少时间点
|
||||||
if dt is None: # 时间间隔(小时)
|
self.var_list = [] if var_list is None else var_list # 变量列表
|
||||||
self.dt = 1
|
if lowerleft is None:
|
||||||
else:
|
zero_lon, zero_lat = ccrs.PlateCarree().transform_point(
|
||||||
self.dt = dt
|
-self.dx*(self.nx-1)/2, -self.dy*(self.ny-1)/2, self.projection)
|
||||||
if nt is None: # 每个文件中包含多少时间点
|
|
||||||
self.nt = 1
|
|
||||||
else:
|
|
||||||
self.nt = nt
|
|
||||||
if lowerleft is None:
|
|
||||||
zero_lon, zero_lat = ccrs.PlateCarree().transform_point(\
|
|
||||||
-dx*(nx-1)/2, -dy*(ny-1)/2, proj)
|
|
||||||
self.lowerleft = [zero_lon, zero_lat]
|
|
||||||
else:
|
|
||||||
if len(lowerleft) == 2:
|
|
||||||
self.lowerleft = lowerleft # 左下角坐标(经纬度)
|
|
||||||
else:
|
|
||||||
zero_lon, zero_lat = ccrs.PlateCarree().transform_point(\
|
|
||||||
lowerleft[0], lowerleft[1], lowerleft[2])
|
|
||||||
self.lowerleft = [zero_lon, zero_lat]
|
self.lowerleft = [zero_lon, zero_lat]
|
||||||
if var_list is None: # 变量列表
|
else:
|
||||||
self.var_list = []
|
if len(lowerleft) == 2:
|
||||||
else:
|
self.lowerleft = lowerleft # 左下角坐标(经纬度)
|
||||||
self.var_list = var_list
|
else:
|
||||||
self.lowerleft_projxy = self.projection.transform_point(
|
zero_lon, zero_lat = ccrs.PlateCarree().transform_point(\
|
||||||
self.lowerleft[0], self.lowerleft[1],
|
lowerleft[0], lowerleft[1], lowerleft[2])
|
||||||
ccrs.PlateCarree()
|
self.lowerleft = [zero_lon, zero_lat]
|
||||||
) # 计算投影下的坐标
|
self.lowerleft_projxy = self.projection.transform_point(
|
||||||
|
self.lowerleft[0], self.lowerleft[1],
|
||||||
|
ccrs.PlateCarree()
|
||||||
|
) # 计算投影下的坐标
|
||||||
|
finally:
|
||||||
|
print(f"{self.__dict__}")
|
||||||
|
|
||||||
def grid_id_float(self, original_x, original_y, original_proj=ccrs.PlateCarree()):
|
def grid_id_float(self, original_x, original_y, original_proj=ccrs.PlateCarree()):
|
||||||
"""
|
"""
|
||||||
|
Reference in New Issue
Block a user