Geolocation 如何使用lng和lat获得地球上两点之间的距离或弧度?

Geolocation 如何使用lng和lat获得地球上两点之间的距离或弧度?,geolocation,geometry,geospatial,Geolocation,Geometry,Geospatial,如何使用lng和lat获得地球上两点之间的距离或弧度?在这种情况下,您可能不希望使用mapReduce,但实际上是。除了一般的第一阶段查询外,您还可以通过哪个更有效地执行查询 db.places.aggregate([ {“$geoNear”:{ “近”:{ “类型”:“点”, “坐标”:[-88,30] }, “距离字段”:“距离” }}, {“$match”:{ “loc”:{ “$centerSphere”:[-88,30],0.1] } }} ]) 或者坦率地说,由于初始的$geoNe

如何使用lng和lat获得地球上两点之间的距离或弧度?

在这种情况下,您可能不希望使用
mapReduce
,但实际上是。除了一般的第一阶段查询外,您还可以通过哪个更有效地执行查询

db.places.aggregate([
{“$geoNear”:{
“近”:{
“类型”:“点”,
“坐标”:[-88,30]
},
“距离字段”:“距离”
}},
{“$match”:{
“loc”:{
“$centerSphere”:[-88,30],0.1]
}
}}
])
或者坦率地说,由于初始的
$geoNear
阶段将在文档中“投影”一个附加字段,该字段包含与查询的“原点”的“距离”,因此您可以在后续阶段对该元素进行“过滤”:

db.places.aggregate([
{“$geoNear”:{
“近”:{
“类型”:“点”,
“坐标”:[-88,30]
},
“距离字段”:“距离”
}},
{“$match”:{
“dist”:{“$lte”:0.1}
}}
])
因为这是一个选项,可以“生成/投影”一个表示结果中距离的值,然后满足您的第一个标准。“聚合框架”的“链接”特性允许“附加过滤”或在过滤初始查询后需要执行的任何其他操作

因此,
$geointen
$match
阶段下的聚合框架中的效果与在任何标准查询中的效果一样好,因为它不“依赖”于要显示的地理空间原点的“索引”。它在一个初始查询中执行得更好,但并不需要它

由于您的要求是距离原点的“距离”,因此最合乎逻辑的做法是执行一个将返回此类信息的操作。就像这样

我很想在这个回复中包含所有相关链接,但作为一个新的回复者,我现在只允许两个链接


另一个相关说明:

任何操作中“距离”或“半径”的测量取决于数据的存储方式。如果是“传统”或“密钥/对或普通数组”格式,则值将以“弧度”表示,否则,如果数据在“位置”上以GeoJSON格式表示,则“距离数据”将以“米”表示


考虑到MongoDB服务实现的库以及它如何与存储的数据交互,这是一个重要的考虑因素。当然,官方资源中有关于这一点的文档,如果您愿意仔细查看的话。再说一次,我现在不能添加这些链接,除非这个响应看到了一些急需的爱。

在这种情况下,您可能不想要
mapReduce
,但实际上是。除了一般的第一阶段查询外,您还可以通过哪个更有效地执行查询

db.places.aggregate([
{“$geoNear”:{
“近”:{
“类型”:“点”,
“坐标”:[-88,30]
},
“距离字段”:“距离”
}},
{“$match”:{
“loc”:{
“$centerSphere”:[-88,30],0.1]
}
}}
])
或者坦率地说,由于初始的
$geoNear
阶段将在文档中“投影”一个附加字段,该字段包含与查询的“原点”的“距离”,因此您可以在后续阶段对该元素进行“过滤”:

db.places.aggregate([
{“$geoNear”:{
“近”:{
“类型”:“点”,
“坐标”:[-88,30]
},
“距离字段”:“距离”
}},
{“$match”:{
“dist”:{“$lte”:0.1}
}}
])
因为这是一个选项,可以“生成/投影”一个表示结果中距离的值,然后满足您的第一个标准。“聚合框架”的“链接”特性允许“附加过滤”或在过滤初始查询后需要执行的任何其他操作

因此,
$geointen
$match
阶段下的聚合框架中的效果与在任何标准查询中的效果一样好,因为它不“依赖”于要显示的地理空间原点的“索引”。它在一个初始查询中执行得更好,但并不需要它

由于您的要求是距离原点的“距离”,因此最合乎逻辑的做法是执行一个将返回此类信息的操作。就像这样

我很想在这个回复中包含所有相关链接,但作为一个新的回复者,我现在只允许两个链接


另一个相关说明:

任何操作中“距离”或“半径”的测量取决于数据的存储方式。如果是“传统”或“密钥/对或普通数组”格式,则值将以“弧度”表示,否则,如果数据在“位置”上以GeoJSON格式表示,则“距离数据”将以“米”表示


考虑到MongoDB服务实现的库以及它如何与存储的数据交互,这是一个重要的考虑因素。当然,官方资源中有关于这一点的文档,如果您愿意仔细查看的话。再说一次,我现在不能添加这些链接,除非这个响应看到了一些急需的爱。

在这种情况下,您可能不想要
mapReduce
,但实际上是。除了一般的第一阶段查询外,您还可以通过哪个更有效地执行查询

db.places.aggregate([
{“$geoNear”:{
“近”:{
“类型”:“点”,
“坐标”:[-88,30]
},
“距离字段”:“距离”
}},
{“$match”:{
“loc”:{
“$centerSphere”:[-88,30],0.1]