6

完全なコードはこちら

HTMLコード

<input type="hidden" id="Latitude" name="Latitude" value={{Longitude}} />
<input type="hidden" id="Longitude" name="Longitude" value={{Longitude}} />

document.getElementById("Latitude").value  =  position.coords.latitude;
document.getElementById("Longitude").value =  position.coords.longitude;    

app.py

Latitude = request.form['Latitude']
Longitude = request.form['Longitude']

messages = database.returnMessagesinRange(float(Latitude),float(Longitude))

データベース.py

def returnMessagesinRange(longitude,latitude):
    allMessages = Messages.find()
    messagesinRange = []
    for current in allMessages:
        if ((current['longitude']-longitude) * (current['longitude']-longitude) + (current['latitude']-latitude)*(current['latitude']-latitude)) <= 1:
            if messagesinRange == None:
                messagesinRange = [current['text']]
            else:
                messagesinRange.append(current['text'])
    return messagesinRange

これが実行されると、私は得る

if ((current['longitude']-longitude) * (current['longitude']-longitude) + (current['latitude']-latitude)*(current['latitude']-latitude)) <= 1:
TypeError: unsupported operand type(s) for -: 'unicode' and 'unicode'

なぜこれが起こっているのか知っている人はいますか?ありがとう。

4

4 に答える 4

8

リクエストとデータベースから取得した経度と緯度はどちらも文字列(Unicode文字列)であり、数値であるかのように操作しようとしています。

最初に、そのような文字列のintorfloat表現を取得して、それらを数値として操作できるようにする必要があります(、、-などを使用*

これを行うには、文字列をパラメータとして渡すintまたはオブジェクトを作成しますfloat

latitude = int(request.form['Latitude'])

また

latitude = float(request.form['Latitude'])
于 2013-01-13T22:02:49.237 に答える
2

PHPとは異なり、Pythonは文字列からfloatに自動変換しません。使用する:

errors = []
try:
    latitude = float(request.form['Latitude'])
except ValueError:
    # do something about invalid input
    latitude = 0.0
    errors.append(u"Invalid input for Latitude.")
于 2013-01-13T22:02:44.710 に答える
1

current['longitude']longitudeは両方ともunicode文字列です。floatそれらを減算する場合は、それらをsに変換する必要があります。

于 2013-01-13T22:02:21.617 に答える
0

わかりました、これはうまくいきました。

def returnMessagesinRange(longitude,latitude):
allMessages = Messages.find()
longitude = (eval(str(longitude)))
latitude = (eval(str(latitude)))
messagesinRange = []
for current in allMessages:
    y=eval(str(current['longitude']))
    x=eval(str(current['latitude']))
    if ((longitude-x)*(longitude-x))+((latitude-y)*(latitude-y)) <= 1:
        if messagesinRange == None:
            messagesinRange = [str(current['text'].encode('ascii','ignore'))]
        else:
            messagesinRange.append(str(current['text'].encode('ascii','ignore')))
return messagesinRange

いよいよエンディングが見えます!

于 2013-01-13T23:03:40.800 に答える