函数背景:经纬度坐标列表筛选最近距离的经纬度如:输入ABCD四个位置的经纬度列表以及计算经纬度的距离函数,就可以输出与ABCD最近的站点清单并以列表的形式输出。
输入:a为位置列表,b为位置距离计算公式
输出:
函数说明:
- 输出结果:因为一个站点可能对应多个距离一致的站点,为了保证输出数据的整齐性,输出结果格式为[[A站点,最短距离,与A最近的所有站点],[B站点,最短距离,与B最近的所有站点],[C站点,最短距离,与C最近的所有站点],[D站点,最短距离,与D最近的所有站点]],这个结果存在重复项,我不作考虑。
- 函数执行:a为第一次循环对比点,bcd为第一次巡检的被对比点,第一个循环遍历所有点,第二次循环用于a站点与bcd对比。distance_tmp计算的临时距离,distance保存最近距,如果存在更近点,最近距离变成当前位置,如果相等距离则添加到最近距离列表中。
函数限制:只支持二维,高维需要自己修改
#多个位置数组进行比较排序函数如
#多个经纬度坐标位置,计算两者之间的距离,匹配站点A的最近距离并保存
#函数参数,一个包含多个二维数组列表、二维数组之间的计算公式、
def owm(value,formula,inaccessible=-99999):#inaccessible不能小于第一次距离计算最优解,可以自主赋值,默认为-99999
results = list() #保存结果值
j_tmp = list() #保存最优解
distance = inaccessible #初始化最优解
try: #防止参数异常
for i in value:
value_tmp = value[:]
value_tmp.remove(i)
for j in value_tmp:
distance_tmp = formula(i,j)
if distance_tmp < distance or distance == inaccessible:
distance = distance_tmp
j_tmp = j
elif distance_tmp == distance:
j_tmp = [j_tmp,j]
results.append([i,distance,j_tmp])
distance = inaccessible #初始化最优解
results.insert(0,['Source-Location','Distance','Targe-Location'])
return results
except EnvironmentError:
print(EnvironmentError)
a = [[1,2],[3,4],[4,4],[2,1],[3,3]]
def b(i,j):
t = i[0]-j[0]
t1 = i[1]-j[1]
t2 = t*t+ t1*t1
return t2
for i in owm(a,b):
print(i)