簡體   English   中英

與一個經緯度相比,使用 Haversine function 循環經緯度

[英]Looping through lat lon with Haversine function comparing to one lat lon

我有兩個數據框,一個有很多行的lat / lon點,如下所示:

lat            lon   
32.8000009     -117.536
32.800005      -117.047   
etc...    

我們稱之為df1

和一個只有一個lat / lon點的df (我們稱之為df2

Ycoord     Xcoord 
32.8005     -117.0473

我正在嘗試使用 haversine function 循環遍歷每個lat點的第一個lon並找到從這些點到第二個df的距離。

我能夠使用代碼來弄清楚如何使用haversine function 循環遍歷第一個df並計算從一個點到下一個點的距離並將它們放在新列中,但是我如何在比較時循環遍歷第一個df第二個df (只有一對點)而不是前一個點?

這是我以前使用的代碼:

def haversine(lat1, lon1, lat2, lon2, to_radians=True, earth_radius=6371):
"""
slightly modified version: of http://stackoverflow.com/a/29546836/2901002

Calculate the great circle distance between two points
on the earth (specified in decimal degrees or in radians)

All (lat, lon) coordinates must have numeric dtypes and be of equal length.

"""
if to_radians:
   lat1, lon1, lat2, lon2 = map(np.radians,[lat1,lon1,lat2,lon2])

a = np.sin((lat2-lat1)/2.0)**2 + \
    np.cos(lat1) * np.cos(lat2) * np.sin((lon2-lon1)/2.0)**2

return earth_radius * 2 * np.arcsin(np.sqrt(a))


df['distKM_cleaned'] = \
haversine(df.lat.shift(), df.lon.shift(),
             df.loc[1:, 'lat'], df.loc[1:, 'lon'])
df['distMI_cleaned'] = df['distKM_cleaned'] * 0.621371
#distKM is in km, distMI is converted to miles
df.tail()

我得到的 output 看起來像這樣:

lat            lon            distMI_cleaned
32.8000009     -117.536       0
32.800005      -117.047       .0003450
etc...  

所以我的問題是如何創建這個新列,類似於 distMI_cleaned 但 dist_from_df2 作為新列? 抱歉,我對所有這一切都是全新的,並且已經用谷歌搜索了所有內容甚至可以做到這一點。 謝謝!

我決定手動輸入 df2 中的經緯度點(此處為 lon1、lat1),這對我有用!

def haversine(row):
lon1 = -117.047343
lat1 = 32.800027
lon2 = row['lon']
lat2 = row['lat']
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
dlon = lon2 - lon1 
dlat = lat2 - lat1 
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * np.arcsin(sqrt(a)) 
km = 6367 * c
return km

df['distance_from_HomeMI'] = df.apply(lambda row: haversine(row), axis=1) * 0.621371

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM