database - Geo Json Query - 通过检查给定的地理点是否位于记录的地理点的半径内来列出所有记录
问题描述
我正在构建一个应用程序,用户根据位置搜索服务提供商。
需要考虑以下几点
- 我为所有服务提供商保存纬度,长距离,他们的服务区域半径为 5 公里
- 用户可以从任何位置搜索服务提供商,我从我的前端获取用户当前位置的纬度、长度。
让我们考虑一下我有以下细节
服务商:S1:{lat:xxxx,long:xxxx,半径:5km} S2:{lat:xxxx,long:xxxx,半径:6km}
等等..
现在,当用户从特定的 lat,long 搜索时,我需要以用户的 lat,long 落在服务提供商半径内的方式列出所有服务提供商。
那就是我需要列出用户的地理位置和提供商的地理位置之间的距离小于提供商半径的所有服务提供商
如何使用 mongodb geoSpatial 查询来实现这一点?
解决方案
为了使用 MongoDB 地理查询,您需要将坐标存储在旧坐标对中,
{loc:[long, lat], radius: 5}
或作为GeoJson 对象
{loc:{type:"point",[long, lat]}, radius: 5}
您还需要在字段上使用2dsphere 索引loc
搜索时,首先使用$geoNear,指定字段名称distanceField
和地球的半径distanceMultiplier
(使用与文档中的半径字段相同的单位)。然后用于$match
仅返回比其相应半径更近的文档。
例如,如果集合包含以下文档:
{Name:"Prem Fast Food Corner",
loc:{type:"Point",
coordinates:[77.2069656,28.6143675]},
radius:15},
{Name:"The Black Beetle",
loc:{type:"Point",
coordinates:[77.0693677,28.5842962]},
radius:10}
并且有一个 2dsphere 索引loc
,我们可以使用聚合查询,发现 Cariappa Parade Ground 仅在其中一家餐厅的送货半径内。
db.geo.aggregate([
{$geoNear:{
near:[77.1385933,28.6653018],
distanceField:"distance",
distanceMultiplier:6378,
spherical:true
}},
{$match:{
$expr:{
$lte:[ "$distance", "$radius" ]
}
}}
])
推荐阅读
- javascript - javascript获取第二个索引相同的数字
- java - 使用百里香片段时如何使字符集起作用?
- sql - 对 XML 输出的 SQL 查询出错。格式类似于文本文件
- python - 我可以在 TensorFlow 上同时运行 AMD GPU 和 NVIDIA GPU 吗?
- python - 用空格替换浮点列中的 NaN,同时保持数据类型
- android - viewPager 2 和 TabLayout 不再存在 Fragment
- macos - 如何从我的 Swift 项目中的 Next.js 项目运行 yarn dev?
- reactjs - 哪个是存储二进制图像和搜索的最佳选择:单独的弹性搜索 (ES) 或带有 ES 的二进制文件存储系统
- python - 无法用 seaborn 绘制时间序列
- google-play-console - 我的应用因 webView 上的捐赠而被拒绝