Python脚本从地理位置列表中查找最接近的位置对

时间:2018-09-19 17:47:46

标签: python python-3.x geolocation geospatial

我有一个位置列表,包括其名称和坐标点。

我正在尝试查找每个位置的最近位置对,并打印当前位置名称,到最近位置的距离以及最近位置名称。

  • 存储在第0列中的位置名称
  • 纬度存储在第5列
  • 经度存储在第8列

我已尝试解决此问题,但经过几次迭代后仍收到此错误。

---------------------------------------------------------------------------
     24         for j in range(len(data[i])):
     25             if(i != j):
---> 26                 distance = get_distance(float(data[i][5]),float(data[i][8]),float(data[j][5]),float(data[j][8]))
     27                 temp = str(data[i][0])
     28                 if (min > distance):

ValueError: could not convert string to float: 

在此错误之前我得到了结果,但是我怀疑结果是错误的。不确定问题出在哪里,任何帮助将不胜感激。

编辑:我现在的问题是算法已损坏。它返回的最接近位置始终是相同的目标位置。它返回的距离从80英里到数千英里不等,我知道并非如此。所有位置都在几百英里之内。

    import math
    import csv
    with open("Locations.csv") as f:
        def get_distance(lat_1, lng_1, lat_2, lng_2): 
            d_lat = lat_2 - lat_1
            d_lng = lng_2 - lng_1 

            temp = (  
            math.sin(d_lat / 2) ** 2 
            + math.cos(lat_1) 
            * math.cos(lat_2) 
            * math.sin(d_lng / 2) ** 2
            )
            return 3963.1676 * (2 * math.atan2(math.sqrt(temp), math.sqrt(1 
            - temp))) 

        min = float(9000)
        temp = ''
        closest = ''
        reader = csv.reader(f)
        next(reader) # skip header
        for i in range(len(data)):
            for j in range(len(data[i])):
                if(i != j):
                    distance = get_distance(float(data[i][5]),float(data[i][8]),float(data[j][5]), float(data[j][8]))
                    temp = str(data[i][0])
                    if (min > distance):
                        min = distance
                        closest = temp
            print(str(data[i][0]) +" " + str(min) + " " + closest)
            min = 90000
            closest = ''

1 个答案:

答案 0 :(得分:0)

我假设您正在尝试读取 文件对象 ,而不是 content 。看看docs,您可以找到用法。

这是同一文档中的一个简单示例:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="list">
  <div class="item">
    <div class="title">
      <div class="btn">
      </div>
      <h2>
        item title
      </h2>
    </div>
    <div class="more-info">
      <div class="item-description">
        Test Hidden
      </div>
    </div>
  </div>
  <div class="item">
    <div class="title">
      <div class="btn">
      </div>
      <h2>
        item title
      </h2>
    </div>
    <div class="more-info">
      <div class="item-description">
        Test Hidden
      </div>
    </div>
  </div>
</div>

看看代码,什么也没读,并且您的阅读器不在CSV文件范围内。 请注意,您使用的是“ with open”,它定义了范围并随后关闭文件。