У меня есть список мест с их названиями и координатными точками.
Я пытаюсь найти пары ближайших местоположений для каждого местоположения и распечатать имя текущего местоположения, расстояние до ближайшего местоположения и название ближайшего местоположения.
- названия местоположенийхранится в столбце 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 = ''