gma 1.1.5 (2023.04.13) 更新日志

2023-10-28 09:10
文章标签 日志 更新 13 1.1 gma 2023.04

本文主要是介绍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()

这篇关于gma 1.1.5 (2023.04.13) 更新日志的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/292206

相关文章

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

hdu1689(线段树成段更新)

两种操作:1、set区间[a,b]上数字为v;2、查询[ 1 , n ]上的sum 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdl

usaco 1.1 Broken Necklace(DP)

直接上代码 接触的第一道dp ps.大概的思路就是 先从左往右用一个数组在每个点记下蓝或黑的个数 再从右到左算一遍 最后取出最大的即可 核心语句在于: 如果 str[i] = 'r'  ,   rl[i]=rl[i-1]+1, bl[i]=0 如果 str[i] = 'b' ,  bl[i]=bl[i-1]+1, rl[i]=0 如果 str[i] = 'w',  bl[i]=b

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :

AI行业应用(不定期更新)

ChatPDF 可以让你上传一个 PDF 文件,然后针对这个 PDF 进行小结和提问。你可以把各种各样你要研究的分析报告交给它,快速获取到想要知道的信息。https://www.chatpdf.com/

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

GIS图形库更新2024.8.4-9.9

更多精彩内容请访问 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信:digital_twin123 Cesium 本期发布了1.121 版本。重大新闻,Cesium被Bentley收购。 ✨ 功能和改进 默认启用 MSAA,采样 4 次。若要关闭 MSAA,则可以设置scene.msaaSamples = 1。但是通过比较,发现并没有多大改善。

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.