2016-06-30 133 views
0

這比邏輯問題更爲合理。所以請求你們不要標記它。分組/經銷緯度和經度

我想用python編寫一個方法,它需要兩個參數 - >緯度和經度。此方法應該返回組/存儲桶。分組應基於0.05度完成。

def get_bucket(lat,lng): 
    #body 

例如:

get_bucket(1.05,1.05) - > B1 get_bucket(1.05,1.03) - > B1

所以它像假設地球表明在0.05度網格方塊劃分並且在這個方格中的任何緯度/長度共享同一個水桶。

+0

最初的想法是僅僅分割和落地,但例如「0.15/0.05」不是3。乘以100和地板除以5也許? –

+0

由於地球不平坦,當你接近極點時,你的水桶會逐漸變得更加三角形。這就是說,粗略地說,你們最大的桶會出現在有更多人的地方,如果你的問題領域完全受到人口的影響,這可能是非常糟糕的。(當然,如果你只對一小塊地球感興趣,那麼這並不重要,特別是當貼片靠近赤道時。) – rici

+0

那麼你的問題是什麼?你有沒有嘗試過任何東西?如果您想根據將它們除以2得到的結果將0到1000之間的所有整數存入桶中,您需要多少個桶?如果你能解決這個問題,那麼你可以解決這個問題。 –

回答

0

這裏是一個實現:

def get_bucket(lat,lng): 
    int(lng/0.05)*(whatever the highest possible lat is)/0.05 + int(lat/0.05) 
+0

這是什麼「無論最高可能的緯度」 – Juvenik

+0

@Juvenik 90度?這顆行星是球形的。 – Andrey

2

通常有180度的緯度(-90〜90)和360°經線(-180〜180)。

因此,緯度有18,000個百分位增量(即-90.00,-89.99,... 89.99,90.00)和36,000個百分位數的經度增量。

假設你把它放在一個二維數組中。如果您希望以0.05度爲增量,則緯度需要3,600(18,000/5)行,緯度需要7,200列(36,000/5)。

所以你想要把一個經度/緯度轉換成兩個數組索引。這裏有一種方法:

  1. 把你的緯度號碼,將在-90到90範圍內,並加上90。這會給你一個從0到180的數字。
  2. 乘以100,然後向上取整。這給你一個從0到18,000的數字。
  3. 除以5.

這就是您的行索引。

與經度相同,但加上180來得到0到360之間的數字。這就提供了你的列號。

例子:

奧斯汀的位置,TX是緯度:30.267,經度:-97.743

30.267 + 90 = 120.267 
120.267 * 1000 = 12027 (rounded up) 
12027/5 = 2405 

-97.743 + 180 = 82.257 
82.257 * 1000 = 8226 (rounded up) 
8226/5 = 1645 

所以奧斯汀,德克薩斯州將進入桶(2450,1645)

中當然,將索引轉換回經緯度只是原始轉換的逆向。對於緯度,乘以5,除以1,000,然後減去90.