db.collection('activity').aggregate()
.geoNear({
distanceField: 'distance', // 输出的每个记录中 distance 即是与给定点的距离
spherical: true,
near: db.Geo.Point(114.06058996826175, 22.550311425481723),
maxDistance: 300 * 1000//300公里
// query: {
// docType: 'geoNear',
// },
// key: 'location', // 若只有 location 一个地理位置索引的字段,则不需填
// includeLocs: 'location', // 若只有 location 一个是地理位置,则不需填
})
.end()
以上同一份代码,在小程序端运行和云函数(版本:~2.3.0)中调用返回结果不一样,小程序端返回的距离为,distance: 6617.587567221755这个是正确的,而云函数返回结果为distance: 0.0010375484183725177 这个距离是错误的。为什么给定同样的点,查询同样的数据,两者返回结果不一样?
这云函数里算出的distance单位应该一个弧度不是米,需要乘以地球赤道半径6378137后才是米,maxDistance则需要除以6378137
db.collection('activity').aggregate() .geoNear({ distanceField: 'distance', distanceMultiplier: 6378137,//这样算出来的才是米 spherical: true, near: db.Geo.Point(114.06058996826175, 22.550311425481723), maxDistance: 300000/6378137 //300公里 }) .end()
我也遇到了
这事就完了?明显是个bug啊
你先打印一下取出来的集合,云函数和小程序是否一样
如果不一样当然计算就不一样了
云函数是管理身份,能取所有,小程序受权限管控