GEO Point的使用

GEO Point是什么

在APP开发的过程中,我们经常会遇到在针对于地理坐标的一些问题.而现实的地理坐标在我们的AVOS Cloud上提供一个对应,我们把它称之为GEO Point.每一个GEO Point只包含2个信息,就是它的经度(longtitude)与纬度(latitude).

下面我们建立一个北纬40度,东经30度的点:

JavaScript:

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

(JavaScript的SDK下载到这里。)

这只是一个代表这坐标信息的点而已,而我们需要把这个点关联到对象上去,这样才构成了一个有地理位置信息的对象

JavaScript:

placeObject.set("location", point);

这样我们就为placeObject这个对象加入了地理位置信息了.在之后我们可以用SDK提供的功能进行查找.

做一个"查找附近的人"的功能

有了AVOS Cloud以后,您可以轻松地实现类似于微信中:"查找附近的人"这种功能.而这并不需要您做太多的工作,大部分事情都可以交给AVOS Cloud来做.

为每个用户加入地理位置信息

为了提供这项功能,当然确定用户的地理位置是一定需要的,获取用户当前的地理位置需要根据用户所用的设备来调用相应设备的API,以获取当前用户的地理位置信息.然后如果需要的话应该将其转换为经度和纬度,我们这里假设用户在东经40度北纬50度的地方,然后设定当前用户的地理位置,同时为了让其他用户能得到当前用户的地址,我们应该更新当前用户的地理信息:

var point = new AV.GeoPoint({latitude: 40.0, longitude: -30.0});
var currentUser = AV.User.current();
if (currentUser) {
    currentUser.set("location", point);
    currentUser.save();
} else {
    // user signup or login
}

查找当前用户附近的用户

有了用户的地理信息之后,我们就可以提供一个搜索了,这一点可以用AVOS Cloud带有的地理查询功能来做:

var query = new AV.Query(Parse.User);
query.near("location", point);
query.limit(10);
query.find({
  success: function(users) {
  }
});

AVOS Cloud对于near类型的查询会按距离由近到远进行排序,这样我们非常轻松地就找到了离我们的当前用户距离最近的十个用户了.

GEO Point还有哪些查询方式?

上面的例子中我们限定了返回10个结果,但是如果我们只想查找同城的用户的话怎么办呢?

可以用withinKilometers方式来限定我们的查询,或者说是用withinGeoBox这个方法把结果限定在一个矩形之内.
withinKilometers接受一个距离参数,可以限定query的距离范围.而withinGeoBox接受2个GEO Point,这两个点代表了矩形的对角的两个点,这样就可以把查询限定在一个矩形范围内了.

评论

Loading comments ...