簡體   English   中英

如何使用mongoDB和mongoose計算2個用戶之間的距離

[英]How to calculate distance between 2 users using mongoDB and mongoose

我有一個用戶模式(貓鼬),其字段為“位置”-它由[經度,緯度]數組組成

現在,我希望使用地理空間服務查詢數據庫,以查找從user1到user2的距離

我怎么做?

這應該讓您開始

您需要在架構中定義一個屬性:

'location' : {
    type: { type: String },
    coordinates: []
},

並將屬性索引為2dsphere

yourSchema.index({'location' : "2dsphere"})

比您可以執行以下操作:

//Model.geoNear(GeoJSON, options, [callback]) need a GeoJSON point to search in radius
    var point = { type : "Point", coordinates : [data.coordinates.long, data.coordinates.lat] };
        YourModel.geoNear(point, { maxDistance : data.distance /coordinatesUtils.earthRadius, spherical : true }, function(err, results, stats) {
            res.status(200);
            res.json(results);
        });

但是有幾件事要注意:

為了使球形查詢運算符正常運行,必須將距離轉換為弧度,並將弧度轉換為應用程序使用的距離單位。

轉換:距離到弧度:將距離除以球體(例如地球)的半徑,以與距離測量相同的單位。

弧度到距離:將弧度乘以要轉換距離的單位制中球體(例如地球)的半徑。

地球半徑約為3959英里(6371公里)。

這里取

貓鼬中有一個錯誤 ,該錯誤將GeoJSON中的坐標剝離,並將它們像舊對一樣發送到mongo,這導致近距離運算以弧度而不是米為單位。

現在可能已修復,但我不確定。

您還可以在貓鼬api網站中閱讀geoNear的文檔

您可以在此處閱讀有關GeoJson的信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM