【python】多个位置最近距离筛选

函数背景:经纬度坐标列表筛选最近距离的经纬度如:输入ABCD四个位置的经纬度列表以及计算经纬度的距离函数,就可以输出与ABCD最近的站点清单并以列表的形式输出。

 输入:a为位置列表,b为位置距离计算公式

 输出:

 函数说明:

  1. 输出结果:因为一个站点可能对应多个距离一致的站点,为了保证输出数据的整齐性,输出结果格式为[[A站点,最短距离,与A最近的所有站点],[B站点,最短距离,与B最近的所有站点],[C站点,最短距离,与C最近的所有站点],[D站点,最短距离,与D最近的所有站点]],这个结果存在重复项,我不作考虑。
  2. 函数执行: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)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值