如何使用python中的数学库从一个csv中的地理代码到另一个csv中的地理代码获得最近的距离?
我有两个csv数据集:一个是客户地址(5k),另一个是供应商地址(30k) 我有这两个收件人的纬度和经度如何使用python中的数学库从一个csv中的地理代码到另一个csv中的地理代码获得最近的距离?,python,pandas,math,geocoding,Python,Pandas,Math,Geocoding,我有两个csv数据集:一个是客户地址(5k),另一个是供应商地址(30k) 我有这两个收件人的纬度和经度 from math import sin, cos, sqrt, atan2, radians R = 6373.0 lat1 = radians(52.2296756) lon1 = radians(21.0122287) lat2 = radians(52.406374) lon2 = radians(16.9251681) dlon = lon2 - lon1 dlat = lat
from math import sin, cos, sqrt, atan2, radians
R = 6373.0
lat1 = radians(52.2296756)
lon1 = radians(21.0122287)
lat2 = radians(52.406374)
lon2 = radians(16.9251681)
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))
distance = R * c
print("Result:", distance)
但问题是我必须手动输入这些地理编码,它只计算相对于一个地址的距离。我的目标是在30k lat长的供应商地址中找到离一个客户地址最近的距离。新列应显示供应商所在位置的最近距离和相应lat长度
客户地址代表(地理编码):
供应商地址代表(地理代码):
如何使用python中的公式获得一个新列,显示与供应商地理编码的最短距离?天真地说:计算到所有这些地理编码的距离,选择最小的一个。@ifly6我们如何计算它们相对于每行客户地址的距离?我是python新手,不知道怎么做?可以用for循环完成吗?因为现在正如您所见,我正在手动输入LAT,并且很天真:计算到所有LAT的距离,选择最小的一个。@ifly6我们如何计算所有LAT相对于每行客户地址的距离?我是python新手,不知道怎么做?可以用for循环完成吗?因为现在,正如你们所看到的,我正在手动输入lat和long
tibble::tribble(
~lat1, ~lon1,
39.75454546, -82.63637088,
40.85117794, -81.47034464,
40.53956136, -74.33630685,
42.16066679, -71.21368025,
39.27048579, -119.5770782,
64.82534285, -147.6738774,
45.05610617, -93.35002038,
42.3389155, -122.8397708,
41.10381554, -74.04539909
)
tibble::tribble(
-lat2, -lon,
61.40886875, -149.4865564,
61.20489474, -149.808293,
61.58477348, -149.3407098,
61.5680345, -149.6961905,
61.62608446, -149.2686872,
59.64314849, -151.5526014,
61.19525952, -149.8425922,
61.18076249, -149.851269,
61.18091852, -149.8330178,
38.43043751, -78.91355956,
58.35644743, -134.6304364,
61.61070366, -149.2116577,
61.114842, -149.8639269,
61.13809396, -149.8444685,
60.55535021, -151.2472091,
57.80280421, -152.3781389,
56.8088978, -132.9408203,
64.84413, -147.71677,
64.5006652, -165.4056714,
61.56753716, -149.1560716,
61.56753716, -149.1560716,
60.21036892, -150.4961396,
60.27128968, -149.3463409,
58.36041163, -134.5659648,
58.36041163, -134.5659648,
60.48383367, -151.1526046,
61.12920166, -146.3570934,
61.97836, -145.32329,
61.32582042, -149.5753404,
61.189848, -149.8709985,
61.5714302, -149.3786345,
56.80475225, -132.9792018,
33.10048759, -87.55398883,
31.46539167, -87.35210326,
33.16517649, -86.77548729,
34.56854968, -87.90430696,
33.17146366, -86.24763824,
31.02415155, -87.4849998,
34.57099778, -86.97775339,
33.21126338, -86.7852119,
34.28011985, -86.1970117,
34.639391, -87.50096166,
32.57896937, -85.52307862,
31.30613, -87.49948,
30.5200105, -87.88036967,
31.30084306, -86.49910839,
33.42891896, -86.74094478,
33.77463145, -85.89427619,
32.58509978, -85.4456512,
33.5968923, -85.93125012,
31.23074374, -85.4438391
)