2016-10-03 55 views
1

我試圖找出如何計算使用在一個文本文件中的座標的線段的長度計算點之間的距離:試圖從一個.txt文件

X,Y format (x,y,x,y,x,y,etc...)

4.5,10.0,4.5,5.7,5.5,2.5,6.5,0.3,6.8,0.0,1.0,1.0,3.5,3.5,2,5,6.0,2.0

這是我到目前爲止:

Python

# -*- coding: cp1252 -*- 
#Starter code for GIS301 Lab 2 
#GIS301Lab2Starter.py 

import math 

#----------------------------------------------------------- 
#Procedure for reading a coordinate text file 
#in x1,y1,x2,y2,… xn,yn format 
#and resulting in a list as type float 

#open file to read 
file = open(r'C:\Users\Tristan\Desktop\USB_Backup_10-4-16\2016-2017\Fall2016\SpatialDataStructures\Labs\Lab2\points.txt','r') 

#read file to string 
coordString = file.read() 
#Split coordString into list elements 
coordList = coordString.split(',') 
#convert from string to float type 
for index, item in enumerate(coordList): 
    coordList[index] = float(coordList[index]) 
file.close 
#----------------------------------------------------------- 
print (coordList)  
#add more code here 
numPoints = len(coordList)/2 
print("Number of Points") 
print (numPoints) 


x = [float(r) for r in coordList[0::2]] 
y = [float(r) for r in coordList[1::2]] 

xy = list(zip(x,y)) 


# pre-define distance and add subsequent distances 
dist = 0 
for r in coordList(len(xy)-1): 
    dist += ((xy[r][0]-xy[r+1][0])**2 + (xy[r][1]-xy[r+1][1])**2)**0.5 

print (dist) 



#for r in coordList(len(xy)-1): 
# dist += ((xy[r][0]-xy[r+1][0])**2 + (xy[r][1]-xy[r+1][1])**2)**0.5 

When I run it in PyhthonWin:

Traceback (most recent call last): 
    File "C:\Users\Tristan\Desktop\USB_Backup_10-4-16\2016-2017\Fall2016\SpatialDataStructures\Labs\Lab2\GOERSLab2.py", line 39, in <module> 
    for r in coordList(len(xy)-1): 
TypeError: 'list' object is not callable 

的方程n用於計算兩點之間的距離爲: http://i.stack.imgur.com/vOcu0.png

然後我需要將它們全部加起來!

+0

錯誤來自哪裏,哪一行? – MooingRawr

+0

我不明白'coordString.replace(',','')]'coordList'coordList = [float(coordList)'的用途。事實上,簡單地刪除該行似乎給你一個完全按照你想要的格式的列表。這是書面的奇怪操作;你會想'coordList = [float(item)for coordList]''。但正如我所說,這是多餘的 – roganjosh

+0

你正在做的事實際上歸結爲'['string_with_no_separators中a_list的float(a_list)] .... ....這並沒有太大的意義。 – roganjosh

回答

0

從你所提供的,我沒有看到需要過度複雜這一點。假設你可以正確導入文本文件數據,並拆分它,你可以這樣做:

points = ['4.5','10.0','4.5','5.7','5.5','2.5','6.5','0.3','6.8','0.0','1.0','1.0','3.5','3.5','2','5','6.0','2.0'] 


x = [float(r) for r in points[0::2]] 
y = [float(r) for r in points[1::2]] 

# put x/y coordinates in tuples 
xy = list(zip(x,y)) 

# pre-define distance and add subsequent distances 
dist = 0 
for r in xrange(len(xy)-1): 
    dist += ((xy[r][0]-xy[r+1][0])**2 + (xy[r][1]-xy[r+1][1])**2)**0.5 

我覺得東西沿着這些路線將工作做好(你甚至不需要把座標元組,真)。這是否符合你所需要的?

+0

謝謝你的幫助。我認爲這是我正在尋找的。不過,我遇到了一個問題: -------------------------------------- Traceback(最近調用最後): RunScript中的第326行文件「C:\ Users \ Tristan \ AppData \ Local \ Programs \ Python \ Python35 \ Lib \ site-packages \ Pythonwin \ pywin \ framework \ scriptutils.py」exec exec (len(xy)-1)中的r: : (codeObject,__main __.__ dict__) 文件「D:\ 2016-2017 \ Fall2016 \ SpatialDataStructures \ Labs \ Lab2 \ GOERSLab2.py」 TypeError:類型'zip'的對象沒有len() – Tristan

+0

您必須使用Python 3.x,這有所作爲。如上所示,在我編輯的答案中將xy轉換爲列表。 – tnknepp

+0

這是給我一個 - TypeError:'列表'對象是不可調用的 - 錯誤時,我把 - 列表(zip(x,y)) - 它有什麼與x和y等於什麼? – Tristan