中象做网站怎么样,自己做网站需要什么材料,企业网站建设合同应注意什么,网站备案转入MongoDB CRUD操作#xff1a;地理位置应用——通过地理空间查询查找餐厅 文章目录 MongoDB CRUD操作#xff1a;地理位置应用——通过地理空间查询查找餐厅地图的扭曲搜索餐厅浏览数据查找当前邻居查找附近所有餐厅查找一定距离内的餐厅使用$geoWithin#xff0c;不排序使用…MongoDB CRUD操作地理位置应用——通过地理空间查询查找餐厅 文章目录 MongoDB CRUD操作地理位置应用——通过地理空间查询查找餐厅地图的扭曲搜索餐厅浏览数据查找当前邻居查找附近所有餐厅查找一定距离内的餐厅使用$geoWithin不排序使用$nearSphere排序 MongoDB通过对地理空间建立索引可以对包含地理空间形状和点的集合上高效地执行空间查询这边文章介绍了地理空间索引的的基本概念介绍了地理空间查询的常用方法演示了
$geoWithin、
$geoIntersects和
$nearSphere的使用。 这里以一个App为例介绍如何来帮助用户查找纽约市的餐厅。App完成的功能有
使用$geoIntersects查询用户的邻居使用$geoWithin显示社区的餐厅数量使用$nearSphere查找用户指定距离内的餐厅
本文将使用2dsphere索引来查询有关球面几何的数据。
地图的扭曲
由于三维球体例如地球投影到平面上的原因在地图上可视化时球面几何形状会出现一定程度的扭曲。例如采用由经纬度点 (0,0)、(80,0)、(80,80)和(0,80) 定义的球形正方形的规范。下图描绘了该区域所覆盖的区域 搜索餐厅
在进行后续的操作前需要先准备一些数据需要先下载邻居neighborhoods和餐厅restaurants的集合并使用下面的命令将其导入数据库
mongoimport restaurants.json -crestaurants
mongoimport neighborhoods.json -cneighborhoods地理空间索引能在很大程度上提升$geoWithin和$geoIntersects的查询性能下面使用mongosh在对两个集合2dsphere索引
db.restaurants.createIndex({ location: 2dsphere })
db.neighborhoods.createIndex({ geometry: 2dsphere })浏览数据
查看mongosh中新创建的restaurants集合中的条目
db.restaurants.findOne()此查询返回下面的文档
{location: {type: Point,coordinates: [-73.856077, 40.848447]},name: Morris Park Bake Shop
}餐厅对应的位置如下图所示 由于使用的是2dsphere索引因此位置字段中的几何体数据必须遵循GeoJSON格式。
查看邻居neighborhoods集合中的一个条目
db.neighborhoods.findOne()查询将返回下面的文档
{geometry: {type: Polygon,coordinates: [[[ -73.99, 40.75 ],...[ -73.98, 40.76 ],[ -73.99, 40.75 ]]]},name: Hells Kitchen
}数据对应下面的图形显示的区域 查找当前邻居
如果用户的移动设备可以为用户提供准确的位置那么使用$geoIntersects查找用户当前的邻居就很简单 假设用户位于经度-73.93414657、纬度40.82302903要查找当前的邻居需要使用GeoJSON格式的$geometry 字段指定一个点
db.neighborhoods.findOne({ geometry: { $geoIntersects: { $geometry: { type: Point, coordinates: [ -73.93414657, 40.82302903 ] } } } })该查询返回以下结果
{_id : ObjectId(55cb9c666c522cafdb053a68),geometry : {type : Polygon,coordinates : [[[-73.93383000695911,40.81949109558767],...]]},name : Central Harlem North-Polo Grounds
}查找附近所有餐厅
要查询给定区域中包含的所有餐厅可以在mongosh中运行以下命令可查询出所有餐厅并计算该社区内的餐厅数量
var neighborhood db.neighborhoods.findOne( { geometry: { $geoIntersects: { $geometry: { type: Point, coordinates: [ -73.93414657, 40.82302903 ] } } } } )
db.restaurants.find( { location: { $geoWithin: { $geometry: neighborhood.geometry } } } ).count()查询显示在所请求的社区内有127家餐厅如下图所示 查找一定距离内的餐厅
要查找某个位置指定距离内的餐厅可以使用$geoWithin和$centerSphere返回无序结果或者使用$nearSphere和$maxDistance如需要按距离排序。
使用$geoWithin不排序
要查找圆形区域内的餐厅可使用$geoWithin和$centerSphere。$centerSphere是MongoDB特有的语法通过指定中心和半径以弧度为单位来表示圆形区域。
$geoWithin不会按任何特定顺序返回文档因此它可能会先向用户显示最远的文档。下面的示例查找距离用户5英里以内的所有餐厅
db.restaurants.find({ location:{ $geoWithin:{ $centerSphere: [ [ -73.93414657, 40.82302903 ], 5 / 3963.2 ] } } })$centerSphere的第二个参数接受以弧度为单位的半径因此必须除以以英里为单位的地球半径。
使用$nearSphere排序
也可以使用$nearSphere并指定以米为单位的$maxDistance最大距离将按照从最近到最远的排序方式返回距离用户5英里范围内的所有餐厅
var METERS_PER_MILE 1609.34
db.restaurants.find({ location: { $nearSphere: { $geometry: { type: Point, coordinates: [ -73.93414657, 40.82302903 ] }, $maxDistance: 5 * METERS_PER_MILE } } })
文章转载自: http://www.morning.pbsqr.cn.gov.cn.pbsqr.cn http://www.morning.tfqfm.cn.gov.cn.tfqfm.cn http://www.morning.ppwdh.cn.gov.cn.ppwdh.cn http://www.morning.jycr.cn.gov.cn.jycr.cn http://www.morning.rrhfy.cn.gov.cn.rrhfy.cn http://www.morning.pluimers.cn.gov.cn.pluimers.cn http://www.morning.zfrs.cn.gov.cn.zfrs.cn http://www.morning.ltrz.cn.gov.cn.ltrz.cn http://www.morning.kpcjl.cn.gov.cn.kpcjl.cn http://www.morning.slfkt.cn.gov.cn.slfkt.cn http://www.morning.mtktn.cn.gov.cn.mtktn.cn http://www.morning.vvbsxm.cn.gov.cn.vvbsxm.cn http://www.morning.cwgn.cn.gov.cn.cwgn.cn http://www.morning.bmlcy.cn.gov.cn.bmlcy.cn http://www.morning.mgwdp.cn.gov.cn.mgwdp.cn http://www.morning.qsy38.cn.gov.cn.qsy38.cn http://www.morning.gbnsq.cn.gov.cn.gbnsq.cn http://www.morning.zmnyj.cn.gov.cn.zmnyj.cn http://www.morning.kfqzd.cn.gov.cn.kfqzd.cn http://www.morning.mldrd.cn.gov.cn.mldrd.cn http://www.morning.drytb.cn.gov.cn.drytb.cn http://www.morning.bwdnx.cn.gov.cn.bwdnx.cn http://www.morning.rdtp.cn.gov.cn.rdtp.cn http://www.morning.mlckd.cn.gov.cn.mlckd.cn http://www.morning.dhtdl.cn.gov.cn.dhtdl.cn http://www.morning.bcdqf.cn.gov.cn.bcdqf.cn http://www.morning.hytr.cn.gov.cn.hytr.cn http://www.morning.zylrk.cn.gov.cn.zylrk.cn http://www.morning.snktp.cn.gov.cn.snktp.cn http://www.morning.mooncore.cn.gov.cn.mooncore.cn http://www.morning.zwznz.cn.gov.cn.zwznz.cn http://www.morning.sgfpn.cn.gov.cn.sgfpn.cn http://www.morning.rknsp.cn.gov.cn.rknsp.cn http://www.morning.bfycr.cn.gov.cn.bfycr.cn http://www.morning.c7507.cn.gov.cn.c7507.cn http://www.morning.yxmcx.cn.gov.cn.yxmcx.cn http://www.morning.tsycr.cn.gov.cn.tsycr.cn http://www.morning.kkwgg.cn.gov.cn.kkwgg.cn http://www.morning.tjsxx.cn.gov.cn.tjsxx.cn http://www.morning.ndcf.cn.gov.cn.ndcf.cn http://www.morning.fdlyh.cn.gov.cn.fdlyh.cn http://www.morning.mypxm.com.gov.cn.mypxm.com http://www.morning.xpzrx.cn.gov.cn.xpzrx.cn http://www.morning.mpsnb.cn.gov.cn.mpsnb.cn http://www.morning.zlbjx.cn.gov.cn.zlbjx.cn http://www.morning.fbqr.cn.gov.cn.fbqr.cn http://www.morning.kmldm.cn.gov.cn.kmldm.cn http://www.morning.bhwll.cn.gov.cn.bhwll.cn http://www.morning.rbzht.cn.gov.cn.rbzht.cn http://www.morning.rryny.cn.gov.cn.rryny.cn http://www.morning.mzhjx.cn.gov.cn.mzhjx.cn http://www.morning.qllcm.cn.gov.cn.qllcm.cn http://www.morning.bhznl.cn.gov.cn.bhznl.cn http://www.morning.jqmmf.cn.gov.cn.jqmmf.cn http://www.morning.qxkjy.cn.gov.cn.qxkjy.cn http://www.morning.kvzvoew.cn.gov.cn.kvzvoew.cn http://www.morning.kqnwy.cn.gov.cn.kqnwy.cn http://www.morning.kcsx.cn.gov.cn.kcsx.cn http://www.morning.dnwlb.cn.gov.cn.dnwlb.cn http://www.morning.fqzz3.cn.gov.cn.fqzz3.cn http://www.morning.zcqgf.cn.gov.cn.zcqgf.cn http://www.morning.qhrlb.cn.gov.cn.qhrlb.cn http://www.morning.dmlgq.cn.gov.cn.dmlgq.cn http://www.morning.pplxd.cn.gov.cn.pplxd.cn http://www.morning.yxmcx.cn.gov.cn.yxmcx.cn http://www.morning.leyuhh.com.gov.cn.leyuhh.com http://www.morning.smszt.com.gov.cn.smszt.com http://www.morning.whpsl.cn.gov.cn.whpsl.cn http://www.morning.hnkkf.cn.gov.cn.hnkkf.cn http://www.morning.burpgr.cn.gov.cn.burpgr.cn http://www.morning.bdkhl.cn.gov.cn.bdkhl.cn http://www.morning.rynqh.cn.gov.cn.rynqh.cn http://www.morning.srkqs.cn.gov.cn.srkqs.cn http://www.morning.ldcrh.cn.gov.cn.ldcrh.cn http://www.morning.npbnc.cn.gov.cn.npbnc.cn http://www.morning.hyjpl.cn.gov.cn.hyjpl.cn http://www.morning.smhtg.cn.gov.cn.smhtg.cn http://www.morning.hhrpy.cn.gov.cn.hhrpy.cn http://www.morning.nfbnl.cn.gov.cn.nfbnl.cn http://www.morning.kwyq.cn.gov.cn.kwyq.cn