gpt4 book ai didi

MongoDB geoNear 命令结果距离(以千米为单位)

转载 作者:可可西里 更新时间:2023-11-01 09:07:06 25 4
gpt4 key购买 nike

我正在使用 mongoDB 将 GPS 位置数据存储为这个 GeoJSON 文档

{“类型”:“点”,“坐标”:[33.313183,44.465632]}

{“类型”:“点”,“坐标”:[33.2926487,44.4159651]}

更新:我还确保 2dspher 索引如下

db.test.ensureIndex( { loc : "2dsphere" } )

我从谷歌地图上得到了坐标现在,如果我使用此命令进行搜索,我无法将结果中的距离转换为千米

db.runCommand({geoNear: 'test', spherical: true, near: {type: "Point" , coordinates: [33.2926487, 44.4159651]}})

结果如下

"results" : [
{
"dis" : 0.0033427770982422957,
"obj" : {
"_id" : ObjectId("54a96f348fa05fcaed637a22"),
"loc" : {
"type" : "Point",
"coordinates" : [
33.2926487,
44.4159651
]
}
}
},
{
"dis" : 5764.7060911604085,
"obj" : {
"_id" : ObjectId("54a96f4c8fa05fcaed637a23"),
"loc" : {
"type" : "Point",
"coordinates" : [
33.313183,
44.465632
]
}
}
}
]

第一个结果预计为零,因为它是我想要从源 = 目标坐标获得距离的同一点,但仍然有值(value)。

我无法将第二个值转换为公里,在 Google 距离计算器中约为 5.26KM。

最佳答案

当我继续研究这个问题时,我发现了这个积分有两种存储方式

作为这种格式的遗留点

db.test2.insert({location: [33.313183, 44.465632]})

和 GeoJSON 指向这种格式

db.test.insert({location: {"type" : "Point", "coordinates" : [33.313183, 44.465632]}})

如果我们使用旧点,结果将以弧度为单位,因此我们将使用此语句将其转换为公里

db.runCommand({geoNear: 'test2', spherical: true, near: [33.2926487, 44.4159651], distanceMultiplier: 6371})

如果我们使用 GeoJSON 点,结果将以米为单位,因此我们将使用此语句作为此问题的答案将其转换为千米

db.runCommand({geoNear: 'test', spherical: true, near: {type: "Point" , coordinates: [33.2926487, 44.4159651]}, distanceMultiplier: 0.001})

solution in case of GeoJSON point format

for more details check this link, a bug report to MongoDB that explains it all.

关于MongoDB geoNear 命令结果距离(以千米为单位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27769348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com