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;    

应用程序.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表示,以便能够将它们作为数字进行操作(使用-,*等)

您可以通过创建一个intfloat对象将字符串作为参数传递来做到这一点

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

或者

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

与 PHP 不同,Python 不会自动从字符串转换为浮点数。采用:

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 回答