Я читаю в лат и длинные координаты из CSV-файла.Моя цель состоит в том, чтобы взять координаты и отсортировать их по соответствующим пунктам в виде списка списков, например [[strip 1 coordiantes],[strip 2 coordiantes],[strip 3 coordinates]]
Конечная цель - использовать эти полосы для определения наиболее удаленных угловых точек, которые будут использоваться для другой работы.,Простое получение стандартных значений max, min x и y для всех координат не работает, поскольку ориентация точек не является фиксированной.
Перейдите к следующему:
[['41.55275997', '21.97765353'], ['41.55273016', '21.97763498'], ['41.55270034', '21.97761643'], ['41.55267052', '21.97759788'], ['41.55264071', '21.97757933'], ['41.55270455', '21.97740142'], ['41.55273436', '21.97741997'], ['41.55276418', '21.97743852'], ['41.55279399', '21.97745707'], ['41.55282381', '21.97747562'], ['41.55275997', '21.97765353'], ['41.55273016', '21.97763498'], ['41.55270034', '21.97761643'], ['41.55267052', '21.97759788'], ['41.55264071', '21.97757933']]
К этому:
[[['41.55275997', '21.97765353'], ['41.55273016', '21.97763498'], ['41.55270034', '21.97761643'], ['41.55267052', '21.97759788'], ['41.55264071', '21.97757933']], [['41.55270455', '21.97740142'], ['41.55273436', '21.97741997'], ['41.55276418', '21.97743852'], ['41.55279399', '21.97745707'], ['41.55282381', '21.97747562']], [['41.55275997', '21.97765353'], ['41.55273016', '21.97763498'], ['41.55270034', '21.97761643'], ['41.55267052', '21.97759788'], ['41.55264071', '21.97757933']]]
Мой план состоял в том, чтобы использовать расчет подъема / пробега между точками.Однако, поскольку наклон точек изменяется, когда координата перемещается на другую полосу, и снова при сравнении точек на той же полосе, я не уверен, как поступить.
CurrКод:
# get waypoint coordiantes
coordinateList = []
csv_file.seek(0)
next(csv_reader)
#add all coordinates in csv to a single list
for line in csv_reader:
coordinateList.append([line[0],line[1]])
print(coordinateList)
#Take coordinate list (list of lists) and add coordinates to lists reprenting a s ingle stip
#Get the rise over run from the first two coordinates.
rise = float(coordinateList[0][1]) - float(coordinateList[1][1])
run = float(coordinateList[0][0]) - float(coordinateList[1][0])
print(rise,run)
#add first two coordiantes to a strip
coordStips = [[coordinateList[0],coordinateList[1]]]
#iterate through remaining coordiantes and compare
for coord1,coord2 in zip(coordinateList[1:-1:], coordinateList[2::]):
#print(coord1,coord2)
rise = float(coord2[1]) - float(coord1[1])
run = float(coord2[0]) - float(coord1[0])
print(rise,run)
Любая помощь приветствуется.
РЕДАКТИРОВАТЬ: Вот склоны, которые я рассчитал в настоящее время.Не уверен, почему они все немного отличаются.
0.622065727665411
0.622065727665411
0.6222744045453561
-2.7868107768422306
0.6222744045453561
0.6220657278136351
0.6222744045453561
0.622065727665411
-2.7868107768422306
0.6222744046936797
0.622065727665411
0.622065727665411
0.6222744045453561
Решение:
# get waypoint coordiantes
coordinateList = []
csv_file.seek(0)
next(csv_reader)
#add all coordinates in csv to a single list
for line in csv_reader:
coordinateList.append([line[0],line[1]])
print(coordinateList)
#Take coordinate list (list of lists) and add coordinates to lists reprenting a s ingle stip
#Get the rise over run from the first two coordinates.
rise = float(coordinateList[0][1]) - float(coordinateList[1][1])
run = float(coordinateList[0][0]) - float(coordinateList[1][0])
masterslope = rise/run
#---Strip List set Up
#add first two coordiantes to a strip
coordStrips = [[coordinateList[0],coordinateList[1]]]
stripCount = 0
switch = False
#----------Iteration
#iterate through remaining coordiantes and compare
for coord1,coord2 in zip(coordinateList[1:-1:], coordinateList[2::]):
#if previous waypoint was found to be on a new strip
if switch == True:
coordStrips[stripCount].append(coord2)
rise = float(coord2[1]) - float(coord1[1])
run = float(coord2[0]) - float(coord1[0])
masterslope = rise/run
switch = False
continue
#print(coord1,coord2)
rise = float(coord2[1]) - float(coord1[1])
run = float(coord2[0]) - float(coord1[0])
slope = rise/run
diff = abs(masterslope-slope)
#they are in the same strip, add to current strip
if diff < 0.5:
coordStrips[stripCount].append(coord2)
#new strip
else:
stripCount+= 1
coordStrips.append([coord2])
switch = True