0

与えられた点のセットとリストからの複数の点の間の距離を計算する必要があります。

リストの行の例は次のとおりです。

['14', '"Name of place"', '-31.000', '115.000']

calc distance 関数は 4 つのパラメーターを受け取るので、与えられた 2 つのポイントを入れてから、リストの long 値と lat 値を入れます。

私の理解は、これを行うことでした。単に「リスト」というリストを参照してから、各行のどの部分にアクセスしたいのか、2および3にアクセスできます。

        User_E = raw_input("First enter your longitude(easting) value")
        User_N = raw_input("Now enter your latitude(northing) value")
        Radius = raw_input("Now enter a search radius in kilometres")
        for lines in ListOfLandmarks:
            CalculateDistance( User_N, User_E, ListOfLandmarks[2], ListOfLandmarks[3] )

プログラムを実行すると、次のエラーが表示されます。

TypeError: unsupported operand type(s) for -: 'str' and 'list'

私はそれらを数字として使用intして識別しようとしましたが、次のようになります。float

TypeError: int() argument must be a string or a number, not 'list'

TypeError: float() argument must be a string or a number

def CalculateDistance( latOne, lonOne, latTwo, lonTwo ):
DISTANCE_CONSTANT = 111120.0
coLat = math.fabs(lonOne - lonTwo)
alpha = 90 - latTwo
beta  = 90 - latOne

cosAlpha = math.cos(math.radians(alpha))
cosBeta  = math.cos(math.radians(beta))
sinAlpha = math.sin(math.radians(alpha))
sinBeta  = math.sin(math.radians(beta))
cosC     = math.cos(math.radians(coLat))

cos_of_angle_a = (cosAlpha * cosBeta)
cos_of_angle_b = (sinAlpha * sinBeta * cosC)
cos_of_angle_c = cos_of_angle_a + cos_of_angle_b
angle          = math.degrees(math.acos(cos_of_angle_c))
Distance       = angle * DISTANCE_CONSTANT
return Distance

どこが間違っているのか疑問に思っているだけです、乾杯!

4

1 に答える 1

2

変換の問題をスキップする (座標を float ではなく文字列として保存するため)

for lines in ListOfLandmarks:
        CalculateDistance( User_N, User_E, ListOfLandmarks[2], ListOfLandmarks[3] )

する必要があります

for lines in ListOfLandmarks:
        CalculateDistance( User_N, User_E, lines[2], lines[3] )

反復する特定のランドマークまでの距離を求めるListOfLandmarks[2]と、2 番目のランドマークになります(そのため、インタプリタはコンテキストlistで比較/使用する方法を知りません)。一方、現在のランドマークの最初の座標floatlines[2]

于 2013-10-19T05:22:32.930 に答える