gpt4 book ai didi

python - 根据纬度/经度和半径选择 geopandas 或 pandas 中的行

转载 作者:行者123 更新时间:2023-12-05 01:39:19 33 4
gpt4 key购买 nike

我有一个数据框 (pd),其中每一行都包含一堆度量值,以及 latitudelongitude 值。如果需要,我可以将它们转换成 geopandas 点。

从这个数据框中,我想只选择落在新的给定纬度/经度的某个(比如 1 公里)半径范围内的行。

有解决这个问题的明智方法吗?

这是来自 df 的数据示例:

id .  lat  .  long  . polution . label
----------------------------------------
3 . 45.467. -79.51 . 7 . 'nice'
7 . 45.312. -79.56 . 8 . 'mediocre'

示例纬度/经度为 lat = 45.4long = -79.5

最佳答案

这是一个工作代码示例。首先做一个函数来计算你的距离。我实现了一个简单的距离计算,但我会推荐你​​觉得最有用的。接下来,您可以将 DataFrame 子集化到您想要的距离内。

#Initialize DataFrame
df=pd.DataFrame(columns=['location','lat','lon'])
df['location']=['LA','NY','LV']
df['lat']=[34.05,40.71,36.16]
df['lon']=[-118.24,-74.00,-115.14]

#New point Reno 39.53,-119.81
newlat=39.53
newlon=-119.81

#Import trig stuff from math
from math import sin, cos, sqrt, atan2,radians

#Distance function between two lat/lon
def getDist(lat1,lon1,lat2,lon2):
R = 6373.0

lat1 = radians(lat1)
lon1 = radians(lon1)
lat2 = radians(lat2)
lon2 = radians(lon2)

dlon = lon2 - lon1
dlat = lat2 - lat1

a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2
c = 2 * atan2(sqrt(a), sqrt(1 - a))

return R * c

#Apply distance function to dataframe
df['dist']=list(map(lambda k: getDist(df.loc[k]['lat'],df.loc[k]['lon'],newlat,newlon), df.index))

#This will give all locations within radius of 600 km
df[df['dist']<600]

关于python - 根据纬度/经度和半径选择 geopandas 或 pandas 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58548566/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com