繁体   English   中英

Python求和地理半径内的lat / lon点和网格的总和

[英]Python sum lat/lon points within geographic radius and sum to grid

基本上,我的实验程序试图找到在给定时间落在有效点的半径(例如,50km)内的点的数量。 我的数据是在三个独立的数组中构建的(但我可以根据需要进行重组),例如:

1_LAT,1_LON,1_TIM

其中1_LAT,1_LON,1_TIM都包含分别对应于纬度,经度(十进制度)和时间的约250个值。

我有20组这些数组(即1_LAT,1_LON,1_TIM ... 20_LAT,20_LON,20_TIM)。

这是我想要完成的:

1)计算出落在每组特定半径内的纬度/经度集的数量。 例如,有多少点落在1_LAT半径的50km范围内,在1_TIM的有效时间内从其他19组点落入1_LON。 然后,我想迭代每个有效时间,以确定每个特定点和有效时间的有效半径中的点数。

我附上了一张图片,以帮助直观地描述。 sampleimage

黑色方块表示LAT_1 / LON_1阵列中的所有点。 蓝色方块表示LAT_n / LAT_n阵列中的所有点。

我想计算每组lat / lon数组在每个有效时间内每个半径的点数。 最终显示将是地理底图图像上的每个网格点的明暗(即,计数数量/ 20)的总和栅格或网格网格。

我有一种感觉,KDEtree可能是实现这一目标的最佳方式,但我很少/没有经验。 任何想法或建议将不胜感激。

您可以执行以下操作...首先,将每个组的(x, y)坐标分组到一个points_x数组中:

points_1 = np.column_stack((LAT_1, LON_1))
...
points_n = np.column_stack((LAT_n, LON_n))

将它们存储在数组列表中可能是个好主意:

points = [point_1, points_2, ..., points_n]

现在,从每组点中创建一个kdTree:

import scipy.spatial as spsp
kdtrees = [spsp.cKdTree(p) for p in point]

你准备好了。 如果您现在运行以下代码:

r = whatever_your_threshold_value_is
points_within_r = np.zeros((len(kdtrees), len(kdtrees)), dtype=np.int)
for j in xrange(len(kdtrees)):
    for k in xrange(j+1, len(kdtrees)):
        points_within_r[j, k] = kdtrees[j].count_neighbors(kdtrees[k], r, 2)
points_within_r = points_within_r + points_within_r.T

您现在应该发现points_within_r[j, k]拥有多点如何points_j的半径范围内r中的一个点的points_k

请记住,这里的距离是坐标的欧氏距离,而忽略了它们测量的是球面角度的事实。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM