【问题标题】:MongoDb- distance calculation between two coordinatesMongoDb-两个坐标之间的距离计算
【发布时间】:2018-06-12 17:34:51
【问题描述】:

当我在 MongoDB 上触发此查询时,我会在 maxDistanceInKm 内获取指定坐标 { "coordinates", new BsonArray { longitude, latitude } } 附近的所有位置。

BsonDocument geoNearStep = new BsonDocument {
    { "$geoNear", new BsonDocument {
        { "near", new BsonDocument {
            { "type", "Point" },
            { "coordinates", new BsonArray { longitude, latitude } }
        }},
        { "spherical", true },
        { "query", andQuery},
        { "limit", 200 },
        { "maxDistance", maxDistanceInKm * 1000 },
        { "distanceField", "Location.distance" }
    }}
};

现在我想使用结果位置并计算每个位置与我拥有的另一个坐标的距离为{ "NewCoordinates", new BsonArray { NewLongitude, NewLatitude } }

我不知道如何查询 MongoDb 以使其从新坐标计算查询中找到的位置的各个距离。请指教。

【问题讨论】:

  • 所以让我正确理解这一点。您想找到距某个点一定距离内的位置,然后计算这些点到另一个位置的距离吗?我认为您目前无法在 MongoDB 中完成所有这些操作。为什么不在应用程序中进行第二次比较?不过,请确保您使用的是正确的测地线计算。
  • 嗨凯文,是的,这个要求是正确的(奇怪,我知道)但显然我需要计算与不同位置的距离。

标签: mongodb


【解决方案1】:

事实证明这在当前版本的 MongoDb 中是不可能的,我们最终在 .net 端实现了它。

【讨论】:

    【解决方案2】:
    {
        "$addFields": {
            "distance": {
                "$multiply": [
                    {
                        "$radiansToDegrees": {
                            "$acos": {
                                "$add": [
                                    {
                                        "$multiply": [
                                            {
                                                "$sin": {
                                                    "$degreesToRadians": "$lat2"
                                                }
                                            },
                                            {
                                                "$sin": {
                                                    "$degreesToRadians": "$lat1"
                                                }
                                            }
                                        ]
                                    },
                                    {
                                        "$multiply": [
                                            {
                                                "$cos": {
                                                    "$degreesToRadians": {
                                                        "$subtract": [
                                                            "$lng2",
                                                            "$lng1"
                                                        ]
                                                    }
                                                }
                                            },
                                            {
                                                "$cos": {
                                                    "$degreesToRadians": "$lat2"
                                                }
                                            },
                                            {
                                                "$cos": {
                                                    "$degreesToRadians": "$lat1"
                                                }
                                            }
                                        ]
                                    }
                                ]
                            }
                        }
                    },
                    111.18957696
                ]
            }
        }
    }
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center