2

地理空間データのクエリを実行すると、奇妙な動作が発生します。

ドキュメントから:

現在、極または経度 -180° から +180° への遷移でのラップは処理していませんが、検索がラップしてエラーを発生させるタイミングを検出します。

ただし、オブジェクトが 1 つあり、最大距離が 0.9 の[179,0]近くのオブジェクトをクエリすると、オブジェクトが返され、計算された距離は 2 度です。[-179,0]エラーは発生しません。

同じ場所をクエリしても、最大距離が 1.0 の場合、オブジェクトは返されず、エラーも発生しません。

これはバグですか、それとも何か見逃していますか? ジラでそれについて報告されたバグは見つかりませんでした。

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

非常にばかげていますが、「球体」ではなく「球体」で試してみてください。

私の場合はうまくいきます。

理由はわかりませんが、今答えを探していますが、何も見つかりませんでした。

于 2013-02-05T12:09:54.767 に答える