收藏
回答

云函数里调用aggregate.geoNear查询结果不正确?

db.collection('activity').aggregate()
      .geoNear({
        distanceField'distance'// 输出的每个记录中 distance 即是与给定点的距离
        spherical: true,
        near: db.Geo.Point(114.0605899682617522.550311425481723),
        maxDistance300 * 1000//300公里
        // query: {
        //   docType: 'geoNear',
        // },
        // key: 'location', // 若只有 location 一个地理位置索引的字段,则不需填
        // includeLocs: 'location', // 若只有 location 一个是地理位置,则不需填
      })
      .end()


以上同一份代码,在小程序端运行和云函数(版本:~2.3.0)中调用返回结果不一样,小程序端返回的距离为,distance6617.587567221755这个是正确的,而云函数返回结果为distance0.0010375484183725177 这个距离是错误的。为什么给定同样的点,查询同样的数据,两者返回结果不一样?

最后一次编辑于  2020-09-09
回答关注问题邀请回答
收藏

3 个回答

  • 小车
    小车
    2020-09-10

    这云函数里算出的distance单位应该一个弧度不是米,需要乘以地球赤道半径6378137后才是米,maxDistance则需要除以6378137

    db.collection('activity').aggregate()
          .geoNear({
            distanceField: 'distance', 
            distanceMultiplier6378137,//这样算出来的才是米
            spherical: true,
            near: db.Geo.Point(114.06058996826175, 22.550311425481723),
            maxDistance: 300000/6378137  //300公里
          })
          .end()
    


    2020-09-10
    有用 5
    回复 2
    • 此人很懒
      此人很懒
      2020-09-18
      这么看来,之前的 geoNear 计算已经乘过赤道半径了,我也是昨天发现返回的结果变成 0.0000NNNN 了。
      2020-09-18
      回复
    • Johnsonྀൢ🌾
      Johnsonྀൢ🌾
      2020-09-24
      原来这样,多谢啦
      2020-09-24
      回复
  • 魔术猪
    魔术猪
    2020-12-06

    我也遇到了

    这事就完了?明显是个bug啊

    2020-12-06
    有用
    回复 2
    • 魔术猪
      魔术猪
      2020-12-06
      开发工具里和云函数里,完全相同的语句得出的distance值不一样
      2020-12-06
      回复
    • 魔术猪
      魔术猪
      2020-12-06回复魔术猪
      再补充下,同样云函数,用2.2的SDK和2.3的SDK得出的distance也不一样
      2020-12-06
      回复
  • 哄哄
    哄哄
    2020-09-09

    你先打印一下取出来的集合,云函数和小程序是否一样

    如果不一样当然计算就不一样了

    云函数是管理身份,能取所有,小程序受权限管控

    2020-09-09
    有用
    回复
登录 后发表内容
问题标签