成对计算两组点之间的距离

时间:2017-08-03 19:14:59

标签: python python-3.x loops pairwise

我在Python中进行成对计算时遇到了一些麻烦。

我有两组节点(例如供应商和客户)。

  • 为多个供应商设置1:SupplierCO =(Xco,Yco)
  • 设置2:多个客户的客户CO =(Xco,Yco)

我想计算客户与所有供应商之间的距离,并保存最短的距离。这应该为所有客户循环。

我意识到我必须使用两个for循环和一个if函数。但我不明白如何在循环时从正确的点中选择坐标。

感谢您的回复! 更多信息: - Haversine距离 - 必须将集合1中的每个点与集合2的所有点进行比较 - 这就是我到目前为止

import urllib.parse
from openpyxl import load_workbook, Workbook
import requests
from math import radians, cos, sin, asin, sqrt

"""load datafile"""
workbook = load_workbook('Macro.xlsm')
Companysheet = workbook.get_sheet_by_name("Customersheet")
Networksheet = workbook.get_sheet_by_name("Suppliersheet")

"""search for column with latitude/longitude - customers"""
numberlatC = -1
i = 0
for col in Customersheet.iter_cols():
    if col[2].value == "Latitude" :
        numberlatC = i
    i+=1

numberlongC = -1
j = 0
for col in Customersheet.iter_cols():
    if col[2].value == "Longitude" :
        numberlongC = j
    j+=1


latC = [row[numberlatC].value for row in Companysheet.iter_rows() ]
longC = [row[numberlongC].value for row in Companysheet.iter_rows()]

# haversine formula 
    dlon = lonC - lonS 
    dlat = latC - latS 
    a = sin(dlat/2)**2 + cos(latC) * cos(latS) * sin(dlon/2)**2
    c = 2 * asin(sqrt(a)) 
    r = 6371 # Radius of earth in kilometers. Use 3956 for miles
    distance = c*r 
    distances.append([distance])
    return distances

customers = [latC, longC]

谢谢!

1 个答案:

答案 0 :(得分:0)

这应该给你一般的想法。在下面的示例中,我只使用了常规坐标,但是,您应该可以将其转换为您的需要。

print(shortest_distance_pair(customer,supplier))
[((0, 2), (8, 7)), ((8, 8), (8, 7))]

打印(shortest_distance_pair(客户,供应商))

{
  "query": {
    "filtered": {
      "query": {
        "multi_match": {
          "query": "something",
          "fields": [
            "field1",
            "field2",
            "field3"
          ],
          "operator": "and"
        }
      }
    }
  }
}

现在,如果您创建两个列表,1。客户坐标和2.供应商坐标;你应该能够利用上述内容。