GNSS与探空站不并址的解决(文末代码和压缩包分享,自行下载)

本文介绍了一种使用Matlab的方法,通过计算GNSS站点与探空站的经纬度距离和高度差,解决GNSS和探空站不并址时的对比问题,满足水平间距小于50km和高程差小于200m的要求。
摘要由CSDN通过智能技术生成

Part1   这个是免费的,点个赞来点动力,不然没动力啊,铁铁。

里面有文章出处,代码在最后,还有适合小白的压缩包分享,(纯手敲,有个别错字请担待,语文从小不好)。

Part2   有关Matlab 获取代码关注公众号WZZHHH,或者咸鱼关注:WZZHHH123

对IGRAv2进行质量控制得到PWV和Tm的matlab代码;

使用Matlab计算IGRAv2探空站的Tm和PWV;

提取探空站IGRAv2全部数据;

ERA5 解算合集(温度、气压、PWV、水汽压和 Tm)代码获取;

远程安装gamit等服务,博主乐于助人,心地善良,但是不可能免费滴。

Part3   探空站和GNSS站点不并址

根据论文(DOI: 10.1175/JCLI-D-16-0591.1),解决GNSS和探空站不并址如何对比经度的问题。

对于这种比较:

(1)要求水平间距小于50 km

(2)高程差小于200 m。

Part4   如何使用Matlab实现

下面是我随便选探空站。

这是选的GNSS站

根据经纬度计算每个GNSS站与探空站的距离,再计算其高度差,匹配合适的站点即可。运行代码可以获得如下图所示的匹配站点。

按照【GNSS站ID、探空站ID、距离】存为excel表格。

Part5   Matlab代码展示

如下图是压缩包的内容,方便小白学习(虽然你是小白,但是请尊重我,别什么都问我【譬如下载数据这些百度都能解决的】,信不信我顺着网线刀你)。

压缩包地址再公众号的文章(WZZHHH)获取,免费的哦。公众号回复:GNSS与探空站不并址,即可得到

下面是代码展示:

% 基于matlab2022写的
% 微信公众号和CSDN:WZZHHH
% 根据经纬度,计算GNSS和探空站之间的距离
% 并根据论文(DOI: 10.1175/JCLI-D-16-0591.1)
% 解决GNSS和探空站不并址的对比问题
% 1.水平间距小于50 km
% 2.高程差小于200 m

clc,clear;
% 根据经纬度,计算两个点之间的距离
% GNSS站点的经纬度高程

[station_gnss,name_gnss] = xlsread('GNSS站点的ID经纬度高程.xlsx');
[station_sound,name_sound] = xlsread('探空站的经纬度高程');

suitable_station={};

for ii = 1:size(station_sound,1)

    % 探空站ID、经纬度、高度
    sound_id = name_sound{ii,1};
    lat1 = station_sound(ii,1);
    lon1 = station_sound(ii,2);
    h_sound = station_sound(ii,3);

    for i = 1:size(station_gnss,1)
        % 经纬度
        lat = station_gnss(i,1);
        lon = station_gnss(i,2);
        
        % 计算两个站之间的距离
        [c1km,c2km]=distances([lat lon], [lat1 lon1]);
        dist = (c1km+c2km)/2;

        % i=1时候,最近的为第一个站点
        % n为距离最近的GNSS站在所有GNSS站的所在行
        if i==1
            mindise=dist;
            gnss_id = name_gnss{i,1};   % GNSS的站点名
            h_gnss = station_gnss(i,3); % GNSS高度
            n=i;
        else
            % i~=1时,dist小于上一轮最小值时,最近值为dist
            if dist<mindise
                mindise=dist;
                gnss_id = name_gnss{i,1};   % GNSS的站点名
                h_gnss = station_gnss(i,3); % GNSS高度
                n=i;
            end
        end
    end

    if mindise<50
        if h_sound-h_gnss<=200&&h_sound-h_gnss>=-200
            % 【'GNSS站点名','探空站','两者距离'】
            suitable_station=[suitable_station;{gnss_id,sound_id,num2str(mindise)}];
        end
    end
clear dist;
end
header = {'GNSS','探空站','两者距离'};
xlswrite('GNSS和探空站距离和高度满足的点.xlsx',[header;suitable_station])

function [d1km,d2km]=distances(latlon1,latlon2)
radius=6371;
lat1=latlon1(1)*pi/180;
lat2=latlon2(1)*pi/180;
lon1=latlon1(2)*pi/180;
lon2=latlon2(2)*pi/180;
deltaLat=lat2-lat1;
deltaLon=lon2-lon1;
a=sin((deltaLat)/2)^2 + cos(lat1)*cos(lat2) * sin(deltaLon/2)^2;
c=2*atan2(sqrt(a),sqrt(1-a));
d1km=radius*c;    %Haversine distance

x=deltaLon*cos((lat1+lat2)/2);
y=deltaLat;
d2km=radius*sqrt(x*x + y*y); %Pythagoran distance
end

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WZZHHH

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

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

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

打赏作者

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

抵扣说明:

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

余额充值