10.GeoPoints

作者: xiangdong_9013 | 来源:发表于2017-09-23 18:49 被阅读0次

    GeoPoints

    Parse允许您将实际的纬度和经度坐标与对象相关联。将Parse.GeoPoint添加到Parse.Object使得我们可查询对象与参考点的接近度。这样您可以很轻松地做一些事情,比如找出最接近另一用户的用户或最接近用户的位置。

    1.Parse.GeoPoint

    将一个点与对象相关联,您首先需要创建一个Parse.GeoPoint。例如,创建纬度40.0度、经度-30.0度的点:

    var point = new Parse.GeoPoint({latitude: 40.0, longitude: -30.0});
    

    然后将该点作为常规字段存储在对象中。

    placeObject.set("location", point);
    

    注意:目前,一个类中只能有一个键是Parse.GeoPoint。

    2.地理查询

    既然已经有一堆具有空间坐标的对象,那么找出最接近某个点的对象将会非常简单。这可以通过使用near在Parse.Query上添加约束条件来完成。获取最接近用户的十个位置的列表,代码如下所示:

    // User's location
    var userGeoPoint = userObject.get("location");
    // Create a query for places
    var query = new Parse.Query(PlaceObject);
    // Interested in locations near user.
    query.near("location", userGeoPoint);
    // Limit what could be a lot of points.
    query.limit(10);
    // Final list of objects
    query.find({
      success: function(placesObjects) {
      }
    });
    

    这时,placesObjects上将是一个根据userGeoPoint按距离(从最近到最远)排列的对象数组。请注意,如果使用了附加ascending()/ descending()排序约束,它将优先于距离排序。

    要使用距离限定检查结果,可查看withinMiles,withinKilometers和withinRadians。

    还可以查询包含在特定区域内的一组对象。要找到矩形边框中的对象,请在Parse.Query上添加withinGeoBox约束。

    var southwestOfSF = new Parse.GeoPoint(37.708813, -122.526398);
    var northeastOfSF = new Parse.GeoPoint(37.822802, -122.373962);
    
    var query = new Parse.Query(PizzaPlaceObject);
    query.withinGeoBox("location", southwestOfSF, northeastOfSF);
    query.find({
      success: function(pizzaPlacesInSF) {
        ...
      }
    });
    

    3.注意事项

    有以下几件事要注意:

    • 每个Parse.Object类只能有一个键带有Parse.GeoPoint对象。
    • 使用near约束同时也会将结果限制在100英里内。
    • 坐标点不应等于或超过极端值。纬度不能为-90.0或90.0。经度不能为-180.0或180.0。尝试设置超出范围的纬度或经度值将导致错误。

    相关文章

      网友评论

        本文标题:10.GeoPoints

        本文链接:https://www.haomeiwen.com/subject/zracextx.html