gma 1.1.5 (2023.04.13) 更新日志

优化

 1、LogLogistic 分布

  优化标准化气候指数 LogLogistic 分布内部拟合/变换算法,提高拟合结果的精度 。

 2、【栅格处理】

  将进度条回调函数外置——包括 CallBack 和 CallBackData(已测试可以配合 PyQT 实现进图条界面(如果这个回调函数基于 gdal 原生方法))。

 3、Layer

  重构了 Layer 类(移除了 95% ogr.Layer 的内容,因为其可能导致 Python 内核崩溃,但整体用法和功能不变)。

  • 现在,gma 打开的矢量数据 Layer 和 Feature 已经完全不同于 ogr。
  • 如果希望将 gma.~.Feature 转为 ogr.Feature,请探索 gma.algorithm.core.gcreate._GMAFeatureToOGR 函数!

 4、内置数据

  a、内置栅格数据格式由.tif改为 .jp2 和 .webp ,使文件大小减小最多75%。
  b、除 DEM 数据之外,其他数据更换为 Natural Earth(1:50M)数据。

新增

 1、io 模块

  将 gma 内部输入输出相关函数入口调整至 io 模块,开放使用。主要包括(功能同名称):

  • CreateFeatureFromPoints:从点创建要素(Feature)。
  • CreateLayerFromFeature:从点创建图层(Layer)。
  • Open:打开文件。同 gma.Open
  • RasterOpen:打开栅格文件。
  • VectorOpen:打开矢量文件。
  • ReadArrayAsDataSet:将 Numpy 数组读取为数据集(DataSet)。
  • SaveArrayToRaster:将 Numpy 数组保存到栅格文件。
  • TranslateFeatureToDataSet:将要素(Feature)转换为数据集(DataSet)。
  • TranslateLayerToDataSet:将图层(Layer)转换为数据集(DataSet)。

已开放但不在 io模块的同功能函数将在未来的某个版本移除(例如:rasp.WriteRaster 与 SaveArrayToRaster 功能完全一致)。

 2、inres 模块

  为 map 增加 inres模块,用以提供内置资源(世界陆地、大型河流、大型湖泊、自然地球等数据)。原有方法依旧可用,但会发出弃用警告。

 3、plot 模块

  a、增加【GetPreDefinedCMaps】。列出并绘制 matplotlib 所有默认色带。

  b、增加【CreatePlotFeature】。将坐标点转换为绘图要素。与 io.CreateFeatureFromPoints 不同,此方法生成的线、面要素会在点之间插值形成一系列的连续点,以保证更换投影时绘制线的位置不会发生改变并且是空间连续的。

修复

 1、SetFrame

  修复了一个因显示区域过小进而导致配置经度或纬度刻度总是忽略不显示(即 ShowXXX 总是= False)的问题。

 2、ET0.Hargreaves

  修复了 ET0.Hargreaves 函数在 2 维气温数据条件下,不支持对应 1 维纬度数据的问题。(感谢反馈:su*****77)

 3、MultiSDSToTif

  由于重构了 Open 函数导致此方法异常。因此,基于 gma 当前版本的整体逻辑对此方法进行简化重构。(感谢反馈:a2*****20)


简单示例

示例数据下载:

链接:https://pan.baidu.com/s/1VMsDxzogCvN8Fj0Unb8LCg?pwd=4gij
提取码:4gij

from gma import io
from gma.smc import Interpolate
from gma.map import rcs, plot, inres
import pandas as pd

# 步骤一:读取数据
## 0.若为 Excel 数据
Data = pd.read_excel("Interpolate.xlsx")
Points = Data.loc[:, ['经度','纬度']].values
Values = Data.loc[:, ['值']].values

##可选################### 从矢量文件读取坐标点(经度、维度)和值
## 1.若为矢量文件
DataSource = io.Open("Interpolate.shp")
Layer = DataSource.GetLayer(0)
### 1.1 如果属性表包含经度、维度和值
Data = Layer.GetAttributeTable()
Points = Data.loc[:, ['经度','纬度']].values
Values = Data.loc[:, ['值']].values
### 1.2 如果属性表仅包含值,可读取每个点要素的坐标及其对应的值
Points = [Layer.GetFeature(i).Points[:2] for i in range(Layer.FeatureCount)]
Values = [Layer.GetFeature(i).Fields['值'] for i in range(Layer.FeatureCount)]
##可选###################

# 步骤二:克里金插值,并将插值结果转换为 gma 数据集(DataSet)
KGD = Interpolate.Kriging(Points, Values, Resolution = 0.01, InProjection = 'WGS84')
KGDataSet = io.ReadArrayAsDataSet(KGD.Data, Projection = 'WGS84', Transform = KGD.Transform)

# 步骤三:绘图
# 0.使用 gma 定义一个中心经线为 125°E ,两条标准纬线为 40°N, 52°N 的 Albers 等面积投影
Proj = rcs.AlbersEqualArea(CentralLongitude = 125, StandardParallels = (40, 52))

# 1.初始化一个地图框,并配置视图范围 
MapF = plot.MapFrame(Axes = None, BaseMapProj = Proj, Extent = [112, 38, 138, 54])

# 2.将内置的世界矢量图层(国界和海洋)添加到地图框
MapL1 = MapF.AddLayer(inres.WorldLayer.Country, FaceColor = 'none', LineWidth = 0.2, EdgeColor = 'black', Zorder = 2)
MapL2 = MapF.AddLayer(inres.WorldLayer.Ocean, FaceColor = '#BEE8FF', EdgeColor = 'none')

# 3.添加插值结果数据集
MapD1 = MapF.AddDataSetClassify(KGDataSet,
                                CMap = 'jet',
                                Remap = [[-25, 0], [-20, 1], [-15, 2], [-10, 3],[-5, 4], [100, 5]],
                                Method = 'Range', 
                                Labels = ['<= -25', '-25 ~ -20', '-20 ~ -15','-15 ~ -10','-10 ~ -5',' > -5'],
                                Zorder = 1     
                               )

# 4.地图整饰要素
## 4.1 经纬网
GridLines = MapF.AddGridLines(LONRange = (100, 150, 5), LATRange = (30, 60, 5))
## 4.2 指北针
AddCompass = MapF.AddCompass(LOC = (0.1, 0.8), Color = 'black')
## 4.3 比例尺
ScaleBar = MapF.AddScaleBar(LOC = (0.1, 0.02), Width = 0.3, Color = 'black', FontSize = 7)
## 4.4 图例
Legend = MapF.AddLegend(LegendName = '气温(℃)', TitleAlignment = 'left', PlotID = [2], LOC = (0.75, 0.5), TitleFont = 'SimSun')

# 5.设置地图框边框
Frame = MapF.SetFrame()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛的地理研学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值