2016-06-30 5 views
0

これは技術的な問題よりも論理的な問題です。それで、あなたにフラグを立てないようにお願いします。グループ化/バケット緯度と経度

私はpythonで、緯度と経度の2つのパラメータをとるメソッドを記述したいと思います。このメソッドはグループ/バケットを返す必要があります。グループ分けは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」は例ではありません。おそらく100で乗算し、フロアを5で割りますか? –

+0

地球は平らではないので、あなたのバケツは極に近づくにつれて次第に三角形になります。つまり、おおまかに言えば、あなたの最大のバケツはもっと多くの人がいるところにあります。問題のドメインがすべて人口の影響を受けるなら、本当に悪いかもしれません。(もちろん、パッチが赤道近くにある場合は特に、地球の小さなパッチに興味があるかどうかは関係ありません) – rici

+0

あなたの質問は何ですか?何か試しましたか? 0から1000の間のすべての整数を2で割った結果に基づいてバケットに入れたい場合、いくつのバケツが必要ですか?あなたがその問題を解決できるなら、あなたはこの問題を解決することができます。 –

答えて

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

@ユヴェニク90度?惑星は球形です。 – Andrey

2

緯度の180度(-90〜90)と経度360度(180 -180)は、典型的に存在します。

したがって、緯度が1万8千分の1増分(つまり、-90.00、-89.99、... 89.99、90.00)、および経度が36,000分の1増分です。

これを2次元配列に配置したとします。 .05度の増分が必要な場合は、緯度に3,600(18,000/5)行、緯度に7,200列(36,000/5)行が必要です。

したがって、経度/緯度を2つの配列インデックスに変換する必要があります。ここには1つの方法があります:

  1. -90から90の範囲にある緯度の数字をとり、90を追加します。これにより、0から180までの数値が得られます。
  2. 100を掛けて四捨五入します。それはあなたに0から18,000までの数字を与えます。
  3. あなたの行インデックスです5.

で割ます。

経度と同じことを行いますが、180を加えて0〜360の数値を取得します。これにより、列番号が提供されます。

例:

オースティンの場所は、TXは緯度である:30.267、LNG:-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 

だから、オースティン、TXは(2450,1645)バケツに行くだろう

のもちろん、インデックスを緯度と経度に変換することは、元の変換の逆です。緯度の場合は5を掛け、1000で割って90を引いてください。