我有一个位置列表,包括其名称和坐标点。
我正在尝试查找每个位置的最近位置对,并打印当前位置名称,到最近位置的距离以及最近位置名称。
我已尝试解决此问题,但经过几次迭代后仍收到此错误。
---------------------------------------------------------------------------
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 = ''
答案 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”,它定义了范围并随后关闭文件。