python--根据任意非网格经纬度坐标,找到均匀网格点上最接近的经纬度坐标

简介: 需求:根据非规则经纬度坐标,查找均匀网格点上最接近的经纬度坐标,并提取该点上的变量。

需求:根据非规则经纬度坐标,查找均匀网格点上最接近的经纬度坐标,并提取该点上的变量。



思路:



  • 1、首先选取一个较大的经纬度范围,将你的非规则经纬度坐标包含进去;
  • 2、计算均匀网格点上经纬度与非规则经纬度坐标的绝对值距离;
  • 3、选择绝对值距离最短的点的索引坐标;
  • 4、根据索引坐标提取最邻近的经纬度坐标
  • 5、选取最近邻经纬度坐标对应的变量


数据:



海表面高度异常数据:sla

分辨率:0.25X0.25

数据类型:2017年月平均数据(netcdf)


代码实现:



主要用到几个库:xarray、numpy、matplotplib

通过xarray读取nc文件,选取数据范围,

根据np.abs()计算两点间绝对值,

通过np.where()查找绝对值最小的网格点的索引index


全部代码如下:

## import package
import xarray as xr
import numpy as np
import matplotlib.pyplot as plt
## set path
path1=r'sla/'
str1='2017'
str2='.nc'
#file=glob.glob(path+'*.nc')
####=======================================================================================================================================
## 设置一个空矩阵存储每个月的sla数据
sla2017=np.zeros((12,1))
sla2017[:]=np.nan
i=0
fig=plt.figure(figsize=(10,10))
###  由于是月平均数据,共有12个,所以需要循环读取12次
for i in range(0,12):
    f=path1+str1+'%02.0f'%int(i+1)+str2
    print(i)
    #137°36.533′ 34°40.917′
  data=xr.open_dataset(f).sel(latitude=slice(33,36),longitude=slice(136,139))
    x=data.longitude
    y=data.latitude
    time=data.time
    sla=data.sla
    x1,y1=np.meshgrid(x,y)
    ##### request longitude\latitude指定的非规则经纬度坐标,根据需求修改
    lat = 34.921
    lon = 137.748
  ### 计算绝对值
    abslat = np.abs(y-lat)
    abslon = np.abs(x-lon)
  ### 就是计算三角形斜边的最小值
    c=(abslat**2+abslon**2).data
    ## 找到最小值的坐标索引
    ([xloc], [yloc]) = np.where(c == np.min(c))
    r = np.where(c == np.min(c))
    ##### the nearest point longitude\latitude
    lon_new=x[r[1].data].data
    lat_new=y[r[0].data].data
    ### 重新选择最邻近点的数据
    ds=data.sel(latitude=slice(lat_new,lat_new),longitude=slice(lon_new,lon_new))
    ### 将新的选取的数据保存下来
    sla_new=ds.sla
    sla2017[i,:]=sla_new
    i=i+1
### 在图中以散点的方式查看最邻近的坐标
data.sla.plot()
plt.scatter(x1, y1)
point = data.sel(latitude=slice(sla.latitude[xloc],sla.latitude[xloc]), longitude=slice(sla.longitude[yloc],sla.longitude[yloc]))
plt.scatter(lon, lat, color='b')
plt.text(lon, lat, 'requested')
plt.scatter(lon_new, lat_new, color='r')
plt.text (lon_new, lat_new, 'nearest')


a8e314bf84634045849a47fc7589c656.png


结果很明显,肉眼看上去是最邻近的点,应该是没有问题的。有兴趣的小伙伴可以尝试一下~


 

                一个努力学习python的海洋人
                水平有限,欢迎指正!!!
                欢迎评论、收藏、点赞、转发、关注。
                关注我不后悔,记录学习进步的过程~~


相关文章
|
2月前
|
数据可视化 数据挖掘 数据处理
python 盒装图纵坐标单位
【4月更文挑战第1天】
|
2月前
|
Python
python用鼠标获取图像任一点的坐标和像素值
python用鼠标获取图像任一点的坐标和像素值
88 1
|
2月前
|
BI 索引 Python
python报表自动化系列 - 译码:与Excel单元格索引对应的十进制数坐标
python报表自动化系列 - 译码:与Excel单元格索引对应的十进制数坐标
20 1
|
26天前
|
存储 算法 数据挖掘
LeetCode第十六题: 掌握双指针技巧 最接近的三数之和 【python】
LeetCode第十六题: 掌握双指针技巧 最接近的三数之和 【python】
|
2月前
|
计算机视觉 Python
使用Python进行多点拟合以确定标准球的球心坐标
使用Python进行多点拟合以确定标准球的球心坐标
32 1
|
2月前
|
Python
python代码根据点坐标裁切图片
【4月更文挑战第19天】python代码根据点坐标裁切图片
70 2
|
2月前
|
API Kotlin Python
Jetpack Compose for Desktop实现复杂的自动布局网格,熬夜整理蚂蚁金服Python高级笔试题
Jetpack Compose for Desktop实现复杂的自动布局网格,熬夜整理蚂蚁金服Python高级笔试题
|
2月前
|
机器学习/深度学习 存储 算法
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
|
2月前
|
机器学习/深度学习
模型选择与调优:scikit-learn中的交叉验证与网格搜索
【4月更文挑战第17天】在机器学习中,模型选择和调优至关重要,scikit-learn提供了交叉验证和网格搜索工具。交叉验证(如k折、留一法和分层k折)用于评估模型性能和参数调优。网格搜索(如GridSearchCV和RandomizedSearchCV)遍历或随机选择参数组合以找到最优设置。通过实例展示了如何使用GridSearchCV对随机森林模型进行调优,强调了理解问题和数据的重要性。
|
2月前
|
机器学习/深度学习 Python
【Python 机器学习专栏】模型选择中的交叉验证与网格搜索
【4月更文挑战第30天】交叉验证和网格搜索是机器学习中优化模型的关键技术。交叉验证通过划分数据集进行多次评估,如K折和留一法,确保模型性能的稳定性。网格搜索遍历预定义参数组合,寻找最佳参数设置。两者结合能全面评估模型并避免过拟合。Python中可使用`sklearn`库实现这一过程,但需注意计算成本、过拟合风险及数据适应性。理解并熟练应用这些方法能提升模型性能和泛化能力。