2017-05-12 15 views
1

2つの座標条件の間の距離に一緒に参加する必要がある2つのデータセットがあります。 distance_kmを計算するためにHaversines formulaを使用して関数を作成しましたが、実行に時間がかかるという制約があります。座標間の最も近い距離にある2つのデータフレームを結合する

データセット1:

building_id | lat | lng 
-------------|-------|-------- 
     1  | 32.11 | -71.22 
     2  | 32.44 | -72.25 
     3  | 31.75 | -71.36``` 

データセット2:

building_id | lat | lng 
------------|-------|-------- 
     4  | 31.65 | -73.52 
     5  | 32.78 | -70.21 
     6  | 36.15 | -72.49 

各データセットは、それらの中に10,000人以上の建物があり、私は、データセット1にセット2にマッチしたいと思いますが、場合にのみ、 km単位の距離は0.0075未満です。

私は現在、あなたがに任意のデータを提供しなかったので、私はこれを残して

dataset_2_latlng_dict = dict(zip(dataset_2.lng,dataset_2.lat)) 

for index, row in dataset_1.iterrows(): 
    lat = row['lat'] 
    lng = row['lng'] 
    all_dist = [] 
    final_list = [] 
    for key, value in dataset_2_latlng_dict.iteritems(): 
     distance = utils.distance_km(key,value,lng,lat) 
     all_dist.extend([distance]) 
     final_list = sorted(all_dist, key=float) 
    dataset_1['min_distance'] = final_list[0] 
+0

テストに使用できるより大きなデータセットがありますか? –

答えて

0

データセット1のそれぞれの行を反復処理と分の距離を決定するために、データセット2からのすべての緯度のLNGコンボを探しています説明的なものとしてのみ答えてください。

予想どおり、他の各建物との距離を計算する理由はありません。 7.5メートルの仕様は、緯度と経度が近くにあるすべての建物に直接一致する近いVERYになることを意味します。

緯線間の距離は、赤道では110.6kmから極では111.7kmです。この分析を容易にするために誤差マージンとラウンドを追加すると、1度あたり100kmの推定値を使用できます。これは、0.0075kmの最大距離が最大0.000075度の緯度になることを意味します。したがって、0.0075kmの距離基準を満たす建物は必然的に0.000075度の緯度基準を満たすことになります。緯度0.000075度以内の建物に計算を実行することを制限する場合は、はるかに小さい建物のサブセットの計算を行うだけで済みます。

したがって、緯度で位置リストを並べ替えるだけで、緯度が他のリストの建物の0.000075度(7.5メートル)にある建物の距離を比較するリストをトラバースすることができます。

関連する問題