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。尝试设置超出范围的纬度或经度值将导致错误。