mongodb计算距离5400个文档的坐标的距离

时间:2017-08-01 15:42:09

标签: mongodb geolocation gps

我有一个包含5400个文档的集合。我在足球比赛中保留了1名球员的数据。每一秒我从玩家那里得到长和拉特。现在我想要游戏中玩家的总距离。

有些想法?

这是一个文件的例子:

    {
    "_id" : ObjectId("59807a01702661033d918e8e"),
    "playerId" : 1,
    "timestamp" : ISODate("2017-08-01T11:11:45.078Z")
    "loc" : {
        "type" : "Point",
        "coordinates" : [ 
            4.94193, 
            51.32447
        ]
    }
}

1 个答案:

答案 0 :(得分:0)

您可以获取播放器的所有点,计算它们之间的距离,并将距离加起来。 对于距离计算,你可以使用这个算法(使用php,希望它没关系)

class Geo
{
    const R = 6371000;

    /**
     * @param float[] $point1 latitude and longitude
     * @param float[] $point2  latitude and longitude
     * @return float
     */
    static public function calculateDistance($point1, $point2)
    {
        $latRad1 = deg2rad($point1[0]);
        $latRad2 = deg2rad($point2[0]);
        $deltaLat = deg2rad($point2[0] - $point1[0]);
        $deltaLon = deg2rad($point2[1] - $point1[1]);

        $a = sin($deltaLat/2) * sin($deltaLat/2) +
            cos($latRad1) * cos($latRad2) *
            sin($deltaLon/2) * sin($deltaLon/2);
        $c = 2 * atan2(sqrt($a), sqrt(1 - $a));

        return self::R * $c;
    }
}

希望它有用。