腾讯云开发时,我需要在地图场景下:1.查询距离最近的点;2.查询特定区域内的点,如下示例代码,我期望它能返回数据库中距离指定地点1千米范围内的所有点:
location: _.geoNear({
geometry: db.Geo.Point(longitude, latitude), //指定地点
minDistance: 0,
maxDistance: 1 * 1000 //1千米
})
但不如我所愿,以上语句执行成功,返回了一大把数据,但这些返回数据并不正确,它们离我指定的地点远超过1千米!
我开始各种调试,查代码逻辑,查数据库数据是否正确,查云函数布署是否正确... 时间一点点地过去,感觉代码没有问题,于是开始怀疑geoNear本身是否有bugs? 开始查geoNear文档,感觉也没什么问题... 也不知道哪根筋搭对了,突然明白问题在哪里了!
不怕笑话,我部署过3次环境,三次在这里掉坑,次次忘记做下面这件事情!写下来,给新手一个提醒,避免大家像我一样,花很多冤枉的时间去查原因。
存储地理位置信息的字段有被查询的需求时,务必对字段建立地理位置索引
如上图,我给location字段创建好Location index后,以上返回的点就是1千米范围内的了。 欢喜!
另外给大家示例更多类似地图场景下的查询如下,记得要“地理位置索引”!
- 通过geoNear查询距离最近的点
- 通过geoWithin查询特定区域(多边形/圆形)内的点
以上示例来自腾讯产业互联网学堂,那里有很多关于小程序开发等方面的视频,新手值得去看看,少走很多弯路哦~