如何计算MongoDB的总行进距离

时间:2017-07-17 14:55:26

标签: mongodb 2dsphere

我需要计算一组点之间的总行进距离。他们都有一个时间戳,以正确的顺序让他们。我只允许使用MongoDB。

样品采集:

{
    "_id" : ObjectId("596cd354241aa3174056fb98"),
    "spelerID" : 1,
    "timestamp" : ISODate("2017-02-01T19:00:00.000Z"),
    "coordinates" : {
        "type" : "Point",
        "coordinates" : [ 
            4.29870386367084, 
            50.8357637566422
        ]
    }
}

/* 2 */
{
    "_id" : ObjectId("596cd354241aa3174056fbb4"),
    "spelerID" : 1,
    "timestamp" : ISODate("2017-02-01T19:00:01.000Z"),
    "coordinates" : {
        "type" : "Point",
        "coordinates" : [ 
            4.29868458167181, 
            50.8357575419868
        ]
    }
}

/* 3 */
{
    "_id" : ObjectId("596cd354241aa3174056fbce"),
    "spelerID" : 1,
    "timestamp" : ISODate("2017-02-01T19:00:02.000Z"),
    "coordinates" : {
        "type" : "Point",
        "coordinates" : [ 
            4.29867536067721, 
            50.8357376028214
        ]
    }
}

我不知道如何以正确的顺序计算这些点之间的距离。

1 个答案:

答案 0 :(得分:0)

MongoDB可以使用$ near或$ geoNear来表现两点之间的距离。

按照接近指定点的顺序返回文档,从最近到最远。 geoNear需要地理空间索引。 https://docs.mongodb.com/manual/reference/command/geoNear/

在您的情况下,我认为这不会解决问题,因为您想要在多个点之间执行多个距离计算。

可以使用 MapReduce 指示MongoDB创建非常复杂的算法。即使我不是GIS应用程序的专家,您也可以尝试使用函数创建MapReduce例程,该函数可以根据需要计算多个点之间的距离。

MongoDB - MapReduce

此链接可以帮助您编写要在Map Reduce中使用的JS函数: Calculate distance between two latitude-longitude points? (Haversine formula)

祝你好运!