4

我在编写 Parse 查询以获取带有与输入的 GeoPoint 最接近的 GeoPoint 的 Parse 对象时遇到问题。目前,代码似乎正在返回最近创建的对象。

代码:

// check Parse for infections around passed GeoPoint
Parse.Cloud.define("InfectionCheck_BETA", function(request, response) {

var returnCount;

var geoPoint = request.params.geoPoint;
var query = new Parse.Query("InfectedArea");
query.withinMiles("centerPoint", geoPoint, 1); // check for infections within one mile

Parse.Promise.as().then(function() {
    // query for count of infection in area, this is how we get severity
    return query.count().then(null, function(error) {
        console.log('Error getting InfectedArea. Error: ' + error);
        return Parse.Promise.error(error);
    });

}).then(function(count) {
    if (count <= 0) {
        // no infected areas, return 0
        response.success(0);
    }
    returnCount = count;
    return query.first().then(null, function(error) {
        console.log('Error getting InfectedArea. Error: ' + error);
        return Parse.Promise.error(error);
    });

}).then(function(result) {
    // we have the InfectedArea in question, return an array with both
    response.success([returnCount, result]);

}, function(error) {
    response.error(error);
});
});

我想要的是 first() 查询返回centerPoint键中包含 CLOSEST GeoPoint 的对象。

我试过添加query.near("centerPoint", geoPoint)query.limit(1)也无济于事。

我已经看到 iOS PFQueries 调用whereKey:nearGeoPoint:withinMiles:它可能返回基于最近的 GeoPoints 排序。是否有类似这样工作的 JavaScript 等价物?

4

1 回答 1

6

你会试试这个吗?如果所有距离都相同,则 Parse 不会按您需要的精度进行排序。

// check Parse for infections around passed GeoPoint
Parse.Cloud.define("InfectionCheck_BETA", function(request, response) {
    var geoPoint = request.params.geoPoint;
    var query = new Parse.Query("InfectedArea");
    query.near("centerPoint", geoPoint);
    query.limit(10);
    query.find({
        success: function(results) {
            var distances = [];
            for (var i = 0; i < results.length; ++i){
                distances.push(results[i].kilometersTo(geoPoint));
            }
            response.success(distances);
        }, 
        error: function(error) {
            response.error("Error");
        }
    });
});

这导致十个最接近的距离。

聊天后,似乎没有对距离进行排序的原因是Parse仅以几厘米的精度进行排序。用户正在查看的差异小于此。

于 2014-09-16T21:22:59.393 回答