web-dev-qa-db-ja.com

2点間のMongoDB印刷距離

このクエリをMongoDBで実行すると、指定した座標から500マイルの距離にあるすべての場所が取得されます。しかし、指定した座標と結果の位置との間の正確な距離を知りたいのですが。

db.new_stores.find({ "geometry": { $nearSphere: { $geometry: { type: "Point", coordinates: [ -81.093699, 32.074673 ] }, $maxDistance: 500 * 3963 } } } ).pretty()

私の出力は次のようになります:

{
    "_id" : ObjectId("565172058bc200b0db0f75b1"),
    "type" : "Feature",
    "geometry" : {
        "type" : "Point",
        "coordinates" : [
            -80.148826,
            25.941116
        ]
    },
    "properties" : {
        "Name" : "Anthony's Coal Fired Pizza",
        "Address" : "17901 Biscayne Blvd, Aventura, FL"
    }
}

また、指定した座標からこの場所までの距離も知りたい。ジオメトリに2dsphereインデックスを作成しました。

14
siraj

$geoNear 集約パイプラインステージを使用して、クエリされたポイントからの距離を生成できます。

 db.new_stores.aggregate([
    { "$geoNear": {
        "near": {
            "type": "Point",
            "coordinates": [ -81.093699, 32.074673 ]
        }, 
        "maxDistance": 500 * 1609,
        "spherical": true,
        "distanceField": "distance",
        "distanceMultiplier": 0.000621371
    }}
]).pretty()

これにより、"distanceField"を指定できます。これにより、クエリされたポイントからの距離を含む別のフィールドが出力ドキュメントに生成されます。 "distanceMultiplier"を使用して、必要に応じて出力距離に変換を適用することもできます(つまり、メートルからマイルで、すべてのGeoJSON距離がメートルで返されることに注意してください)

同様のオプションを持つ geoNear コマンドもありますが、もちろん出力としてカーソルを返しません。

22
Blakes Seven