Geo元素, 如果不new 一下,是不能用的?
发布于 6 年前 作者 abai 7590 次浏览 来自 问答
  • 当前 Bug 的表现(可附上截图)
  • 预期表现
  • 复现路径
  • 提供一个最简复现 Demo

入坑经历与最后的困惑:

先看官方文档:

db.command.geoWithin

相关文档链接:click

按照文档测试,输入如下代码:

        location: _.geoWithin({
            geometry: Polygon([
                LineString([
                    Point(0, 0),
                    Point(100, 0),
                    Point(100, 50),
                    Point(0, 50)
                ])
            ]),
        })

云开发中,进行云端测试后,提示:

Point cannot be invoked without 'new'

坑1:Point不是官方文档那么用滴,我们不是一个世界。

回到真实,在所有的Geo元素前面都加了new:

location: _.geoWithin({
    geometry: new Polygon([
        new LineString([
            new Point(0, 0),
            new Point(100, 0),
            new Point(100, 50),
            new Point(0, 50)
        ])
    ]),
})

坑2:报错:

LineString is not a constructor

看来LineString 不是一回事啊,就不给你new了:

location: _.geoWithin({
    geometry: new Polygon([
        LineString([
            new Point(0, 0),
            new Point(100, 0),
            new Point(100, 50),
            new Point(0, 50)
        ])
    ]),
})

坑3:报错:

LineString is not a function

可是,我在上文进行了声明:

const {Point, LineString, Polygon} = db.Geo

难道db.Geo.LineString不是一个函数?

我进行检查:

console.log('是不是函数?',typeof(LineString))

结果  返回了如下:

是不是函数? undefined

发现:我的wx-server-sdk好久没更新了,还是0.1.3

更新到0.5.0后, LineString就是函数了.

geoWithin

也可用了.

tip:

geoWithin 后面跟的矢量,必须是闭环, 否则无法检索

请官员将文档注明一下版本号 另外,不new一下就不能用, 那也是文档有问题.

1 回复

我试了半天了,终于找到答案了,赞!!!

回到顶部