解析云代码无效的geopoint对象

时间:2014-07-01 22:14:26

标签: parse-platform

我在Parse Cloud Code中使用JavaScript SDK,试图编写一个过滤GeoPoint的查询。我一直收到错误:

{"code":141,"error":" Error: 102 $nearSphere: invalid geopoint object"}

我的代码如下所示:

Parse.Cloud.define("findPeopleNearby", function (request, response) {
Parse.Cloud.useMasterKey();
if (request.params.latitude && request.params.longitude) {
    var point = new Parse.GeoPoint({ latitude: request.params.latitude, longitude: request.params.longitude });
    console.log('would query off of GeoPoint: ' + JSON.stringify(point));

    var places = Parse.Object.extend("UserLocation");
    var placesQuery = new Parse.Query(places);
    placesQuery.near("location", point);

    placesQuery.find({
        success: function (results)
        {
            console.log("Successfully retrieved " + results.length + " rows.");
            response.success();
        },
        error: function (error)
        {
            response.error("Error: " + error.code + " " + error.message);
        }
    });
}});

我知道表中的数据没问题,因为我可以成功发出curl命令:

curl -X GET -H "X-Parse-Application-Id: xxxx" -H "X-Parse-REST-API-Key: yyyy" -G --data-urlencode 'limit=5' --data-urlencode 'where={ "location": { "$nearSphere": { "__type": "GeoPoint", "latitude": 37.33521504  , "longitude": -122.03254905 }, "$maxDistanceInMiles":10.0 } }'  https://api.parse.com/1/classes/UserLocation

我最初在安装表上有了location属性(这是我希望它的位置),但我看到this Q&A并认为我会在自己的对象中尝试它,但似乎没有有所作为。

顺便说一句,如果我可以使这个查询起作用,我的下一次尝试是使用父指针加入Installation对象。我希望/假设如果我能理解导致此错误的原因,那将会有效。

由于

编辑控制台输出

would query off of GeoPoint: {"__type":"GeoPoint","latitude":"37.33521504","longitude":"-122.03254905"}

1 个答案:

答案 0 :(得分:1)

蒂莫西的怀疑是正确的。输入是字符串而不是浮点数。转换输入可以解决错误,实际上,查询“加入”安装对象也可以正常工作。一个愚蠢的错误,但希望现在任何人谷歌搜索它会找到一个结果,指出他们在正确的方向。

长版供参考:

        var lat, lng;

    if (typeof request.params.latitude === "number") {
        lat = request.params.latitude;
    }
    else {
        lat = parseFloat(request.params.latitude);
        // this could return NaN
    }

    if (typeof request.params.longitude === "number") {
        lng = request.params.longitude;
    }
    else {
        lng = parseFloat(request.params.longitude);
    }

    var point = new Parse.GeoPoint({ latitude: lat, longitude: lng });