如何使用python中的数学库从一个csv中的地理代码到另一个csv中的地理代码获得最近的距离?

如何使用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

我有两个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 = 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
  )