2

查询地理空间数据时,我有一个奇怪的行为。

文档

我们目前不处理极点处或经度从 -180° 到 +180° 的过渡处的环绕,但是我们会检测搜索何时会环绕并引发错误。

但是,我有一个对象,[179,0]如果我查询[-179,0]最大距离为 0.9 的附近对象,则返回该对象并且计算的距离为 2 度。不会引发错误。

如果我查询相同的位置,但最大距离为 1.0,则不会返回对象并且仍然没有错误。

这是一个错误还是我错过了什么?我在 jira 上找不到任何报告的错误。

PRIMARY> version()
version: 2.0.7
PRIMARY> db.runCommand({geoNear:"GeoBug",near:[-179,0],spherical:true,maxDistance:1.0})
{
  "ns" : "mydb.GeoBug",
  "near" : "0100000000000000100010100010100000000000100010100010",
  "results" : [
    {
      "dis" : 0.03490658503988567, (2 degrees)
      "obj" : {
        "_id" : ObjectId("5098e71b744eca2df1b325f2"),
        "location" : {
          "lonlat" : [
            179,
            0
          ]
        }
      }
    }
  ],
  "stats" : {
    "time" : 0,
    "btreelocs" : 0,
    "nscanned" : 2,
    "objectsLoaded" : 1,
    "avgDistance" : 0.03490658503988567,
    "maxDistance" : 0.03490689563235392
  },
  "ok" : 1
}
PRIMARY> db.runCommand({geoNear:"GeoBug",near:[-179,0],spherical:true,maxDistance:0.9})
{
  "ns" : "mydb.GeoBug",
  "near" : "0100000000000000100010100010100000000000100010100010",
  "results" : [ ],
  "stats" : {
    "time" : 0,
    "btreelocs" : 0,
    "nscanned" : 1,
    "objectsLoaded" : 0,
    "avgDistance" : NaN,
    "maxDistance" : 0
  },
  "ok" : 1
}
4

2 回答 2

1

我在 2.0.7 和 2.2.1 上都试过了,我得到了一些与你不同的行为。

我对两个版本都这样做了:

t = db.test
t.drop()
t.insert({geo: [179,0]})
t.ensureIndex({geo: "2d"})

在 2.0.7 中,我运行:

db.runCommand({geoNear:"test", near:[-179,0], spherical:true, maxDistance:1.0})
db.runCommand({geoNear:"test", near:[-179,0], spherical:true, maxDistance:0.9})

每个都返回一个结果。

但是,对于 2.2.1,搜索都没有返回结果。这表明 2.2.1 中没有记录的环绕,但在 2.0.7 中有环绕。

于 2012-11-13T17:32:02.437 回答
0

这很荒谬,但请尝试使用“sperical”而不是“spherical”。

它适用于我的情况。

我不知道为什么,现在我正在寻找答案,但我找不到任何答案。

于 2013-02-05T12:09:54.767 回答