坐标
Parse允许你在对象中关联真实世界的经纬坐标,使用Parse.GeoPoint
,可以查询这个对象和参考位置的距离。这让你可以超级简单的实现基于坐标的功能,比如附近的人、最近的KTV。
Parse.GeoPoint
要关联一个坐标到对象,你首先需要创建一个Parse.GeoPoint
。假设你要创建一个纬度40.00、经度-30.00的坐标:
var point = new Parse.GeoPoint({latitude: 40.0, longitude: -30.0});
这个位置将会作为一个普通的字段存储在对象中。
placeObject.set("location", point);
坐标查询
现在假设,你有一大堆具有位置坐标的对象,要找出最靠近某个点的对象,可以通过给Parse.Query
增加一个near
条件,就能得到结果:
// 用户位置
var userGeoPoint = userObject.get("location");
// 创建一个位置查询
var query = new Parse.Query(PlaceObject);
// 附近的用户,location为字段名
query.near("location", userGeoPoint);
// 限制返回数量
query.limit(10);
// 查询结果
query.find({
success: function(placesObjects) {
}
});
注意,查询结果placesObjects
是根据距离从近到远排序的,除非你使用ascending()
或者descending()
设置了其他排序规则。
如果要根据距离过滤查询结果,可以使用withinMiles
(英米内),withinKilometers
(千米内)和withinReadians
(弧度内)。
你可以查询特定区域内的对象。要查询距离范围内的对象,给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) {
...
}
});
注意
有几个需要注意的地方:
- 每一个
Parse.Object
类应当只有一个字段是Parse.GeoPoint
对象; near
条件限制同时也会限制搜索结果在100英里内;- 坐标不能大于或等于最终范围,纬度应该在-90.00到90.00间,经度应在-180.00到180.00间。超过将造成error。