当前位置: 首页 > 知识库问答 >
问题:

从NetCDF中的多个横向中心查找半径内的值

常俊侠
2023-03-14

我有一个 netCDF 文件,其中包含特定时间南半球的多个气旋位置(纬度、纬度)和气温。

我想要的是提取温度值​​距离每个气旋位置中心10个测地线度(~1110公里)的半径内。想法是确定温度值​​与每个气旋相关(假设与气旋中心的最大径向距离为10º),并绘制一张仅包含这些温度值的全球等值线图。

我在这里搜索了很多,但我只找到了适用于距离一个特定的纬度中心的距离的代码(比如这个:如何从纬度和经度值的中心位置找到半径内的值)。

我被困在如何将哈弗辛公式同时应用于多个中心。

import xarray as xr
import numpy as np
import matplotlib.pyplot as plt

d = xr.open_dataset('cyc_temp.nc')
lat = d['lat']
lon = d['lon']
cyc_pos = d['id'][:,:]
temp = d['temp'][:,:]

# Haversine formula

def haversine(lon1, lat1, lon2, lat2):
    # convert decimal degrees to radians
    lon1 = np.deg2rad(lon1)
    lon2 = np.deg2rad(lon2)
    lat1 = np.deg2rad(lat1)
    lat2 = np.deg2rad(lat2)

    # haversine formula
    dlon = lon2 - lon1
    dlat = lat2 - lat1
    a = np.sin(dlat/2)**2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon/2)**2
    c = 2 * np.arcsin(np.sqrt(a))
    r = 6371
    return c * r

如果有人能帮助我,我愿意。

共有1个答案

和光启
2023-03-14

这是一个有趣的问题;xarray的自动广播让这一切变得非常干净。

我不确定旋风位置阵列的结构,但我会假设它的结构如下(或者至少可以被操纵为这种形式):

centers = np.array([[12.0, -62.0], [40.0, -80.0], [67.0, -55.0]])
cyc_pos = xr.DataArray(centers, coords={"coord": ["lon", "lat"]}, dims=["cyclone", "coord"])

换句话说,每一行代表每个气旋的经度和纬度值。

以这种方式定义cyc_pos,使用 haversine 函数获取经纬度网格中每个点到每个气旋中心的距离相当简单,从那里获得所需的掩码只是多一条线。

distances = haversine(cyc_pos.sel(coord="lon"), cyc_pos.sel(coord="lat"), lon, lat)

如果你想要一个特定Storm的面具,你可以使用:

storm_id = 0
mask = (distances <= 1110.0).isel(cyclone=storm_id)

或者如果你想要一个遮蔽所有Storm的面具:

mask = (distances <= 1110.0).any("cyclone")
 类似资料:
  • 问题内容: 我有一个表,该表的列包含各个位置的纬度和经度。 然后,我还会从浏览器中的地理位置获得一个用户位置。 我需要做的是从表中找到所有记录,其中的值在10 km半径(或X km半径)内,并按距离最近的顺序排序。 我的表在列上有一个索引。 问题答案: 我目前正在从事一个项目,该项目正在计算多个位置之间的距离。我正在使用以下查询来选择给定半径内的object_id。 我无法解释ACOS公式本身,因

  • 我在PostgreSQL/PostGIS中有一个名为的表,其中有两个几何列:()和(),指示旅程的开始和结束位置。 我还有一个单独的表,名为,带有几何列(),指示办公室的位置。 我的目标是从表中选择目标距离任何办公地点1000米以内的记录。 我需要激发什么查询才能获得所需的结果?

  • 我想用圆心(x,y)和半径r画一个圆。

  • 我需要给一个减去的圆添加一个圆形径向梯度。我一直在尝试,但我不能得到一个圆形渐变。 1:整圆2:整圆中的径向梯度3:减去圆4:减去圆中的圆形径向梯度试验(不是我想要的)5:减去圆中的圆形径向梯度。这就是我想要获得的。 一旦我得到减去的圆(3),我应用径向梯度,但我得到(4)而不是(5)。 我也尝试过改变x和y的值,但是我没有得到我想要的。

  • 是否有工具来确定PDF是横向的还是纵向的? 旋转:270 “旋转”到底是什么意思?

  • 我们只考虑无向图。图的直径是在所有顶点和的选择中,和之间的最短路径距离的最大值。(回想一下,和之间的最短路径距离是路径中最少的边数。)接下来,对于顶点,让表示和之间的最短路径距离在所有顶点上的最大值。图的半径是所有顶点选择的中的最小值。半径和直径以下哪项始终保持不变?选择最佳答案。 1) r 我们知道(1)和(2)总是保存在任何写的参考书中。我的挑战是入学考试中提到的这个问题,只有(1)或(2)中