Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为解析查询计算NSPredicate中两个PFGEOPOINT之间的距离_Objective C_Swift_Parse Platform_Pfquery - Fatal编程技术网

Objective c 为解析查询计算NSPredicate中两个PFGEOPOINT之间的距离

Objective c 为解析查询计算NSPredicate中两个PFGEOPOINT之间的距离,objective-c,swift,parse-platform,pfquery,Objective C,Swift,Parse Platform,Pfquery,当我想做这样的事情时,我有一个特殊的情况 let predicate = NSPredicate(format:" DISTANCE(\(UserLocation),photoLocation) <= visibleRadius AND DISTANCE(\(UserLocation),photoLocation" <= 10)" var query = PFQuery(className:"Photo", predicate:predicate) let pred

当我想做这样的事情时,我有一个特殊的情况

let predicate = NSPredicate(format:"
    DISTANCE(\(UserLocation),photoLocation) <= visibleRadius AND
    DISTANCE(\(UserLocation),photoLocation" <= 10)"
var query = PFQuery(className:"Photo", predicate:predicate)
let predicate=NSPredicate(格式:

距离(\(UserLocation),photoLocation)我在
pares.com
文档中找到了这个

此代码获取由
swOfSF
neOfSF
objectc定义的矩形区域中的所有对象,其中seOfSF位于西南角,neOfSF位于东北角

您可以对代码进行一些修改,并获得位于对象中间的矩形区域中的所有对象

我建议您不要使用半径,因为它需要大量计算,而是使用矩形区域(如我给您的代码中所示)


只需从您的位置计算最大/最小经度和最大/最小纬度是多少,并获取介于两者之间的所有对象。您可以在此处阅读有关如何细化最小/最大经度和纬度的内容

Parse.Cloud.define(“最新邮件”),函数(请求、响应){
风险价值限额=20;
var query=newparse.query(“Post”);
var userLocation=request.params.userLocation;
var searchScope=request.params.searchScope;
var afterDate=request.params.afterDate;
var senderUserName=request.params.senderUserName;
查询。Withinkilometer(“位置”、用户位置、搜索范围);
query.greaterThan(“createdAt”,afterDate);
query.notEqualTo(“senderUserName”,senderUserName);
升序查询(“createdAt”);
查询.查找({
成功:功能(结果){
var finalResults=结果.过滤器(函数(el){
var visibleRadius=el.get(“visibleRadius”);
var postLocation=el.get(“位置”);
返回postLocation.km(用户位置)限制){
var slicedFinalResults=results.slice(0,20);
响应。成功(切片分析结果);
}否则{
回答:成功(最终结果);
}
},
错误:函数(){
答复.错误(“无新员额”);
}
}); 
});

上面的代码演示了如何使用云代码的一个基本示例。除了,我必须确保所有返回的图像都在用户的搜索范围和照片的可见范围内。还有更多的技术,如
承诺
。但就我的目的而言,上面的代码应该就足够了。

你想知道如何获得distan吗两个位置之间的距离?我想我有一个令人困惑的标题。但是我确实需要计算谓词中两点之间的距离,这有意义吗?visibleRadius是什么意思?如果我理解正确,我认为你用这个值做了一点过度处理。因为提取只会检查位于正确距离的图像来自用户的ce(即,如果图像距离用户20公里,则仅当您请求20公里范围内的所有图像时,才会获取图像)1)讨论这一点可能会解决您的架构问题,这可能会解决您原来的问题。2)您需要将所有项目从您提取到外圈,然后使用内圈值对应用程序中的元素进行排序
let swOfSF = PFGeoPoint(latitude:37.708813, longitude:-122.526398)
let neOfSF = PFGeoPoint(latitude:37.822802, longitude:-122.373962)
var query = PFQuery(className:"PizzaPlaceObject")
query.whereKey("location", withinGeoBoxFromSouthwest:swOfSF, toNortheast:neOfSF)
var pizzaPlacesInSF = query.findObjects()
Parse.Cloud.define("latestPosts", function(request, response) {
    var limit = 20;
    var query = new Parse.Query("Post");
    var userLocation = request.params.userLocation;
    var searchScope = request.params.searchScope;
    var afterDate = request.params.afterDate;
    var senderUserName = request.params.senderUserName;
    query.withinKilometers("Location", userLocation, searchScope);
    query.greaterThan("createdAt", afterDate);
    query.notEqualTo("senderUserName",senderUserName);
    query.ascending("createdAt");
    query.find({
        success: function(results) {
            var finalResults = results.filter(function(el) {
                var visibleRadius = el.get("VisibleRadius");
                var postLocation = el.get("Location");
                return postLocation.kilometersTo(userLocation) <= visibleRadius;
            });
            if (finalResults.length > limit) {
                var slicedFinalResults = results.slice(0, 20);
                response.success(slicedFinalResults);
            } else {
                response.success(finalResults);
            }
        },
        error: function() {
            response.error("no new post");
        }
    }); 
});