https://blog.csdn.net/qq_40012295/article/details/84861466

https://docs.mongodb.com/manual/reference/command/geoNear/index.html

https://juejin.im/entry/5b7cfe296fb9a019d80a8ed8

<?php

/*
使用命令创建数据库:
use user 使用命令创建集合:
db.createCollection(user) 使用命令创建2dsphere索引:
db.user.createIndex({location: "2dsphere"})
*/ //PHP代码插入经纬度数据:
function uploadMongoDBLocation()
{
$document = [
'name' => '张三',
'location' => [
(float)115.036545,
(float)36.313916,
],
];
$manager = new \MongoDB\Driver\Manager('mongodb://127.0.0.1:27017');
$bulk = new \MongoDB\Driver\BulkWrite;
$bulk->insert($document); // 可连续使用多个insert
$writeConcern = new \MongoDB\Driver\WriteConcern(\MongoDB\Driver\WriteConcern::MAJORITY, );
$res = $manager->executeBulkWrite('user.user', $bulk, $writeConcern);
return $res;
} //PHP代码查询距离:
//注意:这里使用的command根据版本不同,用法可能会有区别,这里使用的MongoDB版本是3.6.5
function findMongoDBLocation()
{
$document = [
'geoNear' => 'user',
'near' => [
'type' => 'Point',
'coordinates' => [(float)'115.042725', (float)'36.312956'],
],
'spherical' => true,
'minDistance' => ,
'maxDistance' => ,
'num' =>
];
$command = new \MongoDB\Driver\Command($document);
$manager = new \MongoDB\Driver\Manager('mongodb://127.0.0.1:27017');
$cursor = $manager->executeCommand('user', $command);
$items = [];
foreach ($cursor as $document) {
$total = count($document->results);
if ($total > ) {
foreach ($document->results as $result) {
$item = json_decode(json_encode($result->obj), true);
$item['distance'] = intval($result->dis);
unset($item['_id']);
$items[] = $item;
}
}
}
return $items;
}

https://zhuanlan.zhihu.com/p/51839804

MongoDB实现附近的人

往数据库中批量插入数据,use mage切换到mage数据库,执行db.user.insertMany(),user是文档名,insertMany()是批量插入命令,里面传入json数组,
{'name':'杨帅哥', 'address':'江西省南昌市青山湖区市场和质量监督管理局', 'gender':, loc:[115.993121,28.676436]}
代表一条用户数据,其中gender:0代表女1,代表男,loc是一个经纬度的数组,当然也可以是loc : { lng : 115.993067 , lat : 28.67606 },但官方推荐数组。 db.user.insertMany([
{'name':'杨帅哥', 'address':'江西省南昌市青山湖区市场和质量监督管理局', 'gender':, loc:[115.993121,28.676436]},
{'name':'王美眉', 'address':'江西省南昌市青山湖区创新一路职位小厨', 'gender':, loc:[116.000093,28.679402]},
{'name':'张美眉', 'address':'江西省南昌市青山湖区紫阳大道1916号', 'gender':, loc:[115.999967,28.679743]},
{'name':'李美眉', 'address':'江西省南昌市青山湖区云中城', 'gender':, loc:[115.995593,28.681632]},
{'name':'彭美眉', 'address':'江西省南昌市青山湖区北京东路1666号', 'gender':, loc:[115.975543,28.679509]},
{'name':'赵美眉', 'address':'江西省南昌市青山湖区市场一路大润发', 'gender':, loc:[115.968428,28.669368]},
{'name':'廖美眉', 'address':'江西省南昌市南昌县奥林匹克中心', 'gender':, loc:[116.035262,28.677037]},
{'name':'余帅哥', 'address':'江西省南昌市南昌县科技学院瑶湖校区', 'gender':, loc:[116.02477,28.68667]},
{'name':'吴帅哥', 'address':'江西省南昌市青山湖区创新一路母婴店', 'gender':, loc:[116.002384,28.683865]},
{'name':'何帅哥', 'address':'江西省南昌市青山湖区紫阳大道2999号', 'gender':, loc:[116.000821,28.68129]},
])

设置2d索引

因为我以二维平面上点的方式存储的数据,想要进行LBS查询,那么要设置2d索引。db.user.createIndex({'loc':"2d"})其中loc是索引的字段。

六、查询附近200米的人

查询附近的人,首先的指导当前用户所在的经纬度,如果不仅想要得到数据还要得到距离,那么可以使用$geoNear指令,如果距离自己去计算可以使用$near或者$geoWithin然后在手动计算距离。此处采用$geoNear指令查询附近2000m的人。

db.user.aggregate({
$geoNear:{
near: [115.999567,28.681813], // 当前坐标
spherical: true, // 计算球面距离
distanceMultiplier: , // 地球半径,单位是米,那么的除的记录也是米
maxDistance: /, // 过滤条件2000米内,需要弧度
distanceField: "distance" // 距离字段别名
}
})
    public function CI_mongodb($data)
{
//near: [115.999567,28.681813], // 当前坐标
//spherical: true, // 计算球面距离
//distanceMultiplier: 6378137, // 地球半径,单位是米,那么的除的记录也是米
//maxDistance: 400/6378137, // 过滤条件2000米内,需要弧度
//distanceField: "distance" // 距离字段别名 $document = [
'geoNear' => 'user',
'near' => [(float)'115.999567', (float)'28.681813'],
'spherical' => true,
'distanceMultiplier' => ,
'maxDistance' => / ,
'num' => ,
];
$res = $this>CI>lib_mongodb>command($document);
PE($res); }

最新文章

  1. [BZOJ1146][CTSC2008]网络管理Network
  2. 建站随手记:about server stack
  3. Prism中使用MEF的例子
  4. 【PHP&amp;&amp;mysqli】
  5. [FMS]FMS流媒体服务器onStatus介绍说明
  6. 315Mhz、433Mhz无线遥控信号的解码分析和模拟
  7. js 中json字符串转化json对象
  8. js 事件监听封装
  9. oracle常见权限分配
  10. Java 类加载机制 ClassLoader Class.forName 内存管理 垃圾回收GC
  11. Unity3D研究院之在MAC上脚本XlsxWriter写入Excel .xlsx格式
  12. 【转】三次握手与accept()函数
  13. Linux shell用法和技巧
  14. uva 371 - Ackermann Functions
  15. iOS 插件化开发汇总 Small框架
  16. asp.net core MVC 过滤器之ActionFilter过滤器(二)
  17. QT之setting注册表项
  18. vs2015 打开项目自动运行 npm install
  19. 正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,如何生成Q中的前几项
  20. thinkphp 配置加载

热门文章

  1. Linux 命令之 ln
  2. Linux命令——set 和 unset
  3. Vue + Springboot 开发的简单的用户管理系统
  4. web开发常见的鉴权方式
  5. markdown demo 学习
  6. MyBatis 3.0_[tp-24-25]_映射文件_参数处理_#与$取值区别_#{}更丰富的用法
  7. main方法中参数&quot;String[ ] args&quot;详解
  8. JavaScript 常用Object
  9. 关于https的五大误区
  10. 将 Django 应用程序部署到生产服务器