对于以下两个GeoPandas数据框:
df1:
id sMiddleLng sMiddleLat p1_sum p2_sum \
0 325782 109.255034 34.691754 0.0 0.0
1 84867 107.957177 33.958289 0.0 0.0
2 13101 107.835338 33.739493 0.0 0.0
3 92771 109.464280 33.980666 0.0 0.0
4 86609 108.253830 33.963262 0.0 0.0
geometry
0 POINT (109.255033915 34.69175367)
1 POINT (107.957177305 33.95828929)
2 POINT (107.8353377 33.73949313)
3 POINT (109.46428019 33.98066616)
4 POINT (108.253830245 33.96326193)
df2:
fnid sMiddleLng sMiddleLat p1_sum p2_sum \
0 361104 102.677887 36.686408 0.0 0.0
1 276307 103.268356 36.425372 0.0 0.0
2 334778 103.242125 36.605224 0.0 0.0
3 205223 104.186869 36.206637 0.0 0.0
4 167892 104.387566 36.091905 0.0 0.0
geometry
0 POINT (102.67788654685 36.68640780045)
1 POINT (103.26835590025 36.42537187675)
2 POINT (103.2421246007 36.60522388845)
3 POINT (104.1868687253 36.2066370049)
4 POINT (104.38756565315 36.0919047206)
如何基于df2
和df1
来查找和合并从另一个类似的地理数据框id
到geometry
的所有点,它们的距离要短于10 km
到df1
和df2
中的点之间?谢谢。
计算距离的功能:
from math import radians,cos,sin,asin,sqrt
def haversine(lon1,lat1,lon2,lat2):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
"""
# convert decimal degrees to radians
lon1,lat2 = map(radians,[lon1,lat2])
# haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * asin(sqrt(a))
r = 6371 # Radius of earth in kilometers. Use 3956 for miles
return c * r