2017-04-11 5 views
1

私はMongoDBのコレクションに以下のようにレコードを有していが返され

/* 1 */ 
{ 
    "_id" : ObjectId("58ecf141624bc0798ee5882d"), 
    "username" : "user.sthlm", 
    "location" : [ 
     18.0686, 
     59.3293 
    ] 
} 

/* 2 */ 
{ 
    "_id" : ObjectId("58ecf141624bc0798ee5882e"), 
    "username" : "user.malmo", 
    "location" : [ 
     13.0038, 
     55.605 
    ] 
} 

/* 3 */ 
{ 
    "_id" : ObjectId("58ecf141624bc0798ee5882f"), 
    "username" : "user.la", 
    "location" : [ 
     -118.2437, 
     34.0522 
    ] 
} 

「位置」が「2dsphere」タイプであり、それは順番にある[経度、緯度]

今は=所与の点

(ストックホルム座標) 経度= 18.0686 緯度との距離を取得するために、以下のように59.3293

012 pymongoクエリを使用していストックホルムとLAとの間の距離は1.393869662777678として戻されるクエリに応答して

{ 
     "distance": 0, 
     "username": "user.sthlm" 
    }, 
    { 
     "distance": 0.08048218816530191, 
     "username": "user.malmo" 
    }, 
    { 
     "distance": 1.393869662777678, 
     "username": "user.la" 
    } 

を次のように

for doc in self.users.aggregate([{"$geoNear": {"near": [longitude, latitude], 
                  "distanceField":"distance", 
                  "distanceMultiplier": 1.0, 
                  "num": int(count), 
                  "spherical": True}}]): 

結果です。

Googleマップから、座標間の距離は8,875 kmまたは5,515マイルであり、1.3938はどちらの請求書にも当てはまらない。 mongoDBのドキュメントから、結果はラジアンで返されません。だから私はクエリ応答から何を参照するのだろうかと思っています。

おかげ

答えて

1

距離はラジアンで返されます。 6371を掛けることによって、(非常に)ラジアンをkmに変換します。

6371 * 1.393 = 8874 km、予想通りです。

+0

これは機能します。 6371にどうやって到着したのか分かりますか? – slysid

+0

https://www.google.com/search?q=convert+radians+to+kilometers –

関連する問題