PHP使用MongoDB存储经纬度,查询距离
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); }
PHP使用MongoDB存储经纬度,查询距离的更多相关文章
- 根据经纬度查询最近距离,mysql查询经纬度附近范围
public class Test{ private static List<LocalAddress> ilist = new ArrayList<LocalAddress> ...
- mongoDB常见的查询索引(三)
1. _id索引 _id索引是绝大多数集合默认建立的索引 对于每个插入的数据,MongoDB会自动生成一条唯一的_id字段. 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- MongoDB 常见的查询索引
常见的查询索引 _id索引 _id 索引是绝大多数集合默认建立的索引.对于每一个插入的数据.MongoDB 会自己主动生成一条唯一的 _id 字段. 1 2 3 4 5 6 7 8 9 ...
- php根据地址的经纬度查询周围的城市例子
目前的工作是需要对用户的一些数据进行分析,每个用户都有若干条记录,每条记录中有用户的一个位置,是用经度和纬度表示的.还有一个给定的数据库,存储的是一些已知地点以及他们的经纬度,内有43W多条的数据.现 ...
- MongoDB 存储引擎和数据模型设计
标签: MongoDB NoSQL MongoDB 存储引擎和数据模型设计 1. 存储引擎 1.1 存储引擎是什么 1.2 MongoDB中的默认存储引擎 2. 数据模型设计 2.1 内嵌和引用 2. ...
- Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程
Asp.Net Core Web Api图片上传及MongoDB存储实例教程(一) 图片或者文件上传相信大家在开发中应该都会用到吧,有的时候还要对图片生成缩略图.那么如何在Asp.Net Core W ...
- 使用 MongoDB 存储日志数据
使用 MongoDB 存储日志数据 线上运行的服务会产生大量的运行及访问日志,日志里会包含一些错误.警告.及用户行为等信息.通常服务会以文本的形式记录日志信息,这样可读性强,方便于日常定位问题 ...
- MongoDB存储引擎选择
MongoDB存储引擎选择 MongoDB存储引擎构架 插件式存储引擎, MongoDB 3.0引入了插件式存储引擎API,为第三方的存储引擎厂商加入MongoDB提供了方便,这一变化无疑参考了MyS ...
- MongoDB存储基础教程
一.MongoDB简介 1. mangodb是一种基于分布式.文件存储的非关系型数据库 2. C++写的,性能高 3. 为web应用提供可扩展的高性能数据存储解决方案 4. 所支持的格式是json格式 ...
随机推荐
- 目录-java并发基础知识
====================== 1.volatile原理 2.ThreadLocal的实现原理(源码级) 3.线程池模型以及核心参数 4.HashMap的实现以及jdk8的改进(源码级) ...
- Clipper库中文文档详解
简介 Clipper Library(以下简称为Clipper库或ClipperLib或Clipper)提供了对线段和多边形的裁剪(Clipping)以及偏置(offseting)的功能 和其他的裁剪 ...
- 一、冒泡排序Bubble sort
https://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html#3824357 #include<iostream> #inclu ...
- py停止工作
# 参考https://blog.csdn.net/w952470866/article/details/79132955 电脑搬动换了网络后打开pycharm显示停止工作解决办法: 将python. ...
- jQuery事件触发前后进行其他的操作
<!-- 事件触发前后执行其他操作的三种方式: 多适用于:公众号的订阅,有订阅的可以收到文章,没有订阅的收不到文章. --> <!DOCTYPE html> <html ...
- 学到了林海峰,武沛齐讲的Day14完
全局变量和局部变量 局部里面定义 global name ======将局部变量变成全局变量 nonlocal name # nonlocal,指定上一级变量,如果没有就继续往上直到找到为止 有 ...
- 通过反射获取DataSource里数据源的账号密码
public Connection getDbConnection() { Connection conn = null; // 获得连接 DataSource ds = null; try { Co ...
- 十一.简单MariaDB数据库的管理
默认端口:3306 1.安装 ]# yum -y install mariadb-server ]# systemctl restart mariadb 2.基本操作 ]# mysql #进入 ]&g ...
- 用python写一个GitHub Trending Api
GitHub 给了开发者相当丰富的 API 接口 https://developer.github.com/v3/,包括认证,搜索,活动等接口,但就是没有提供获取 Trending 的接口.因此,需要 ...
- 均匀量化(lena图)
#include<stdio.h> #include<math.h> #define ROW 512 #define COL 512 typedef unsigned char ...