2016-10-03 4 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 

equatio 2点間の距離を計算するためのnは: http://i.stack.imgur.com/vOcu0.png

次にそれらをすべて追加する必要があります。

+0

どこからエラーが発生していますか? – MooingRawr

+0

私は、coordList.replace( '、'、 '')] 'の中のcoordList = [float(coordList)]の目的を理解していません。実際には、単にその行を削除するだけで、あなたが望む形式でリストを残しているように見えます。それは書かれたように奇妙な操作です。 'coordList = [coordListのitemのfloat(item)]'のようなものが必要でしょう。しかし、私が言ったように、それは重複しています – 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

ご協力いただきありがとうございます。私はそれが私が探しているものだと思います。しかし、私は問題に遭遇しています: -------------------------------------- トレースバック最後の最後の呼び出し): RunScriptの "C:¥Users¥Tristan¥AppData¥Local¥Programs¥Python¥Python35¥Lib¥site-packages¥Pythonwin¥python¥framework¥scriptutils.py" 326行目のファイル exec (codeObject、__main __.__ dict__) ファイル "D:¥2016-2017¥Fall2016¥SpatialDataStructures¥Labs¥Lab2¥GOERSLab2.py"、行38、 in coordList(len(xy)-1): TypeError:型 'zip'のオブジェクトにlen()がありません – Tristan

+0

違いがあるPython 3.xを使用している必要があります。私の編集した答えに上記のようにxyをリストに変換します。 – tnknepp

+0

これは私に - TypeErrorを与えています: 'list'オブジェクトは呼び出し可能ではありません - put(list(zip(x、y))を置くとエラー - xとyが等しいものと何か関係がありますか? – Tristan

関連する問題