matlab实现对全球不规则投影数据的投影转换

前几个专栏我们讨论了几个不规则的投影转换问题,有需要的可以阅读以下文章:

matlab实现对极地投影数据的投影转换_matlab极地投影-CSDN博客

联合matlab和Arcgis进行netcdf格式的雪覆盖数据的重新投影栅格-CSDN博客

这次遇到的问题是一个墨卡托投影的数据,需要转成标准的WGS经纬度。

使用的数据是HYCOM输出的全球海洋分层温度数据,下载地址:

HYCOM + NCODA Global 1/12° Analysis (GLBa0.08/expt_90.8)

这个数据有一个问题,就是使用的是墨卡托投影,即在南北极变形特别大。见下图:

在读取数据的过程中,我发现其中的经度明显不正常,即有些超过360。

仔细研究后发现,是因为经度需要进行取模处理,即 modulo        = '360 degrees'

ncdisp显示的变量列表:

Source:
           C:\Users\Hello World!!\DESKTOP\projection\archv.2010_296_00_3zt.nc4
Format:
           netcdf4_classic
Global Attributes:
           _NCProperties = 'version=1|netcdflibversion=4.4.1.1|hdf5libversion=1.8.20'
           Conventions   = 'CF-1.0'
           title         = 'HYCOM GLBa0.08'
           institution   = 'Naval Research Laboratory'
           source        = 'HYCOM archive file'
           experiment    = '90.8'
           history       = 'archv2ncdf3z'
Dimensions:
           MT    = 1     (UNLIMITED)
           Y     = 3298
           X     = 4500
           Depth = 33
Variables:
    MT         
           Size:       1x1
           Dimensions: MT
           Datatype:   double
           Attributes:
                       long_name = 'time'
                       units     = 'days since 1900-12-31 00:00:00'
                       calendar  = 'standard'
                       axis      = 'T'
    Date       
           Size:       1x1
           Dimensions: MT
           Datatype:   double
           Attributes:
                       long_name      = 'date'
                       units          = 'day as %Y%m%d.%f'
                       C_format       = '%13.4f'
                       FORTRAN_format = '(f13.4)'
    Depth      
           Size:       33x1
           Dimensions: Depth
           Datatype:   single
           Attributes:
                       standard_name = 'depth'
                       units         = 'm'
                       positive      = 'down'
                       axis          = 'Z'
    Y          
           Size:       3298x1
           Dimensions: Y
           Datatype:   int32
           Attributes:
                       point_spacing = 'even'
                       axis          = 'Y'
    X          
           Size:       4500x1
           Dimensions: X
           Datatype:   int32
           Attributes:
                       point_spacing = 'even'
                       axis          = 'X'
    Latitude   
           Size:       4500x3298
           Dimensions: X,Y
           Datatype:   single
           Attributes:
                       standard_name = 'latitude'
                       units         = 'degrees_north'
    Longitude  
           Size:       4500x3298
           Dimensions: X,Y
           Datatype:   single
           Attributes:
                       standard_name = 'longitude'
                       units         = 'degrees_east'
                       modulo        = '360 degrees'

    temperature
           Size:       4500x3298x33x1
           Dimensions: X,Y,Depth,MT
           Datatype:   single
           Attributes:
                       coordinates   = 'Longitude Latitude Date'
                       standard_name = 'sea_water_potential_temperature'
                       units         = 'degC'
                       _FillValue    = 1.267650600228229e+30
                       valid_range   = [-7.69922      34.2409]
                       long_name     = '  temp [90.8H]'

因此采用以下的代码进行运算,大于360的,对360度取模,并进行重采样处理,得到规则的经纬度格网。

matlab代码:

file = 'archv.2010_296_00_3zt.nc4';
ncdisp(file)
x = ncread(file,'Longitude');
for i = 1:4500
    for j = 1:3298
        if(x(i,j)>360)
            x(i,j) = mod(x(i,j),360);
        end
    end
end
y = ncread(file,'Latitude');
z = ncread(file,'temperature');
O.lon = x;O.lat = y;O.rg = z(:,:,2);
rg_plot(O)

lonx = reshape(x,4500*3298,1);
laty = reshape(y,4500*3298,1);
rgz  = reshape(O.rg,4500*3298,1);

lon = 0.5:1:359.5;
lat = -89.5:1:89.5;
[lon,lat] = meshgrid(lon,lat);
%% 内插处理
fxy = scatteredInterpolant(double(lonx),double(laty),rgz,'natural');
sla = fxy(lon,lat);
figure
imagesc(sla(:,:,4500))

imagesc(O.rg)

结果图

♥欢迎点赞收藏♥

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/474224.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaWeb】Spring非阻塞通信 - Spring Reactive之WebFlux的使用

【JavaWeb】Spring非阻塞通信 - Spring Reactive之WebFlux的使用 文章目录 【JavaWeb】Spring非阻塞通信 - Spring Reactive之WebFlux的使用参考资料一、初识WebFlux1、什么是函数式编程1)面向对象编程思维 VS 函数式编程思维(封装、继承和多态描述事物间…

vue3新功能-Teleport

1.teleport 在组件内的任何位置渲染内容 将一个组件内部的一部分模板“传送”到该组件的 DOM 结构外层的位置去。 例:将组件dialog添加到body下面 <teleport to"body"> <el- dialog --> </teleport> 2.fragments 多个根元素外层不需要…

2024年了,还能学自动化吗?

大家都说2024年软件测试行业会卷的更厉害&#xff0c;简单的功能测试不再是入门的标准&#xff0c;那么2024年是否可以从自动化测试这块冲一把呢&#xff1f; 我们先来看看过去的一年自动化测试在测试行业中的发展分析&#xff1a; 01 市场需求增长 随着技术的进步和企业对软件…

爬虫入门系列-HTML基础语法

&#x1f308;个人主页&#xff1a;会编辑的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” HTML基础语法 bs4解析比较简单&#xff0c;但是呢&#xff0c;首先你需要了解一丢丢的html知识&#xff0c;然后再去使用bs4去提取&#xff0c;逻辑和编写难度就会非常简…

消息队列常见的两种消费模式

一、点对点模式 点对点模式&#xff1a;生产者发送消息到消息队列&#xff0c;消费者从消息队列中接收、处理消息&#xff0c;消息被消费后&#xff0c;就不在消息队列中了。每个消息只能由一个消费者接收和处理。如果有多个消费者监听同一个队列&#xff0c;消息将被发送到其…

刷题DAY29 | LeetCode 491-递增子序列 46-全排列 47-全排列 II

491 递增子序列&#xff08;medium&#xff09; 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素&#xff0c;如出现两个整数相等&#xff0c;也…

流畅的 Python 第二版(GPT 重译)(五)

第九章. 装饰器和闭包 有人对将这个功能命名为“装饰器”的选择提出了一些抱怨。主要的抱怨是该名称与其在 GoF 书中的用法不一致。 名称 decorator 可能更多地归因于其在编译器领域的用法—语法树被遍历并注释。 PEP 318—函数和方法的装饰器 函数装饰器让我们在源代码中“标记…

外包干了14天,技术退步明显。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;2019年我通过校招踏入了成都一家软件公司&#xff0c;开始了我的职业生涯。那时的我&#xff0c;满怀热血和憧憬&#xff0c;期待着在这个行业中闯出一片天地。然而&#xff0c;随着时间的推移&#xff0c;我发现自己逐渐陷入…

NVIDIA Chat with RTX教程使用以及CUDA和CUDNN

基本环境安装&#xff1a;CUDA12.1CUDNNcudnn-windows-x86_64-8.9.7.29_cuda12-archive 1、CUDA下载 CUDA官方安装教程: https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html CUDA Toolkit的下载: CUDA Toolkit 12.1 Downloads | NVIDIA Dev…

Vue.js+SpringBoot开发高校宿舍调配管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能需求2.1 学生端2.2 宿管2.3 老师端 三、系统展示四、核心代码4.1 查询单条个人习惯4.2 查询我的室友4.3 查询宿舍4.4 查询指定性别全部宿舍4.5 初次分配宿舍 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的…

如何读懂Java GC日志

Java应用程序的GC日志对分析定位很多性能问题有着非常大的帮助。默认情况下&#xff0c;Java应用程序不会自动产生GC日志。如果需要输出GC日志&#xff0c;必须在JVM启动时增加对应的参数&#xff0c;场景的参数如表5-8所示。 2. GC日志分析一 例如&#xff0c;在Tomcat的JVM启…

【Spring Cloud】微服务注册中心的工作原理

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;人生乏味啊&#xff0c;我欲令之光怪陆离 本文封面由 凯楠&#x1f4f7; 友情提供&#xff01; 目录 前言 1. 注册中心的主要作用 2. 常见的注册中心 3. Nacos 服务注册和发…

护眼大路灯哪个更适合学生?大路灯购选分享,经验总结!

在当前开节奏的生活领域中&#xff0c;作为测评师我观察到&#xff0c;大路灯作为一种新型照明的补光工具&#xff0c;逐渐被越来越多的人融入家庭生活中。这种设备无疑为用眼人群带来了显著的好处。但许多用户反馈中也频繁提及平时是眼睛疲劳感越来越严重等副情况&#xff0c;…

Java 学习和实践笔记(42):内部类(inner class)

内部类的两个要点: 1&#xff09;内部类提供了更好的封装。只能让外部类直接访问&#xff0c;不允许同一个包中的其他类直 接访问。 2&#xff09;内部类可以直接访问外部类的私有属性&#xff0c;内部类被当成其外部类的成员。但外部类 不能访问内部类的内部属性。| 注意&…

【开源】SpringBoot框架开发个人保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 登录注册模块2.2 保险档案模块2.3 保险订单模块2.4 保险理赔模块 三、系统展示四、核心代码4.1 查询保险产品4.2 新增保险预定4.3 订单支付4.4 新增理赔单4.5 查询保险理赔 五、免责说明 一、摘要 1.1 项目介绍 基于J…

停车管理系统asp.net+sqlserver

停车管理系统asp.netsqlserver 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql server数据库&#xff0c; 功能模块&#xff1a; 停车管理系统asp.net sqlserver 用户功能有菜单列表 我的停车记录 专…

【解决】Unity Profiler | Sempaphore.WaitForSignal

开发平台&#xff1a;Unity 2022 版本以上 开发语言&#xff1a;CSharp 6.0 编程平台&#xff1a;Visual Studio 2022 关键词&#xff1a;Sempaphore.WaitForSignal   问题背景 开发过程中出现 Waiting to excute code… 长时间阻碍运行。使用 逐对象排查法 确认影响无法运行…

在离线的arm架构kylin v10服务器上使用Kuboard-Spray搭建K8S集群

在离线的arm架构kylin v10服务器上使用Kuboard-Spray搭建K8S集群 在内网项目中需要安装K8S集群&#xff0c;经过调研&#xff0c;选择使用Kuboard-Spray工具搭建K8S集群&#xff0c;降低学习成本&#xff0c;提高安装效率。 为了简化安装使用集群的过程&#xff0c;搭建了私有…

excel处理_多个excel文件合并

data文件夹内&#xff0c;有多个xls文件。每个xls文件格式一致&#xff0c; 表头占两行&#xff0c;表位汇总数据占一行。 表头两行&#xff0c;拼接前第二行设置为表头&#xff0c;且删除第二行。 在python读入的dataframe中&#xff0c;游轮成本表是表头&#xff0c;第一行是…

解密Mysql数据库引擎:探究其背后的神秘力量(二)

本系列文章简介&#xff1a; 在本系列文章中&#xff0c;我们将从MySQL的基础知识入手&#xff0c;逐步深入到数据库引擎的内部机制。我们将详细介绍MySQL中常用的几种数据库引擎&#xff0c;包括InnoDB、MyISAM等&#xff0c;分析它们的优缺点以及适用场景。同时&#xff0c;我…