簡體   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