分享一段mysql,mongodb 实现LBS搜索的简单代码

2024-03-01 09:18

本文主要是介绍分享一段mysql,mongodb 实现LBS搜索的简单代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#仅支持myisam

CREATE TABLE  address (
     address CHAR (80) NOT NULL ,
     address_loc POINT  NOT NULL ,
     PRIMARY KEY (address)
);

ALTER TABLE  address  ADD SPATIAL  INDEX (address_loc);

INSERT INTO  address  VALUES ( 'Foobar street 12' , GeomFromText( 'POINT(30.620076 104.067221)' ));
INSERT INTO  address  VALUES ( 'Foobar street 13' , GeomFromText( 'POINT(31.720076 105.167221)' ));

查询10公里内的
SELECT  *
     FROM    address
     WHERE   MBRContains
                     (
                     LineString
                             (
                             Point
                                     (
                                     30.620076 + 10 / ( 111.1 / COS(RADIANS(104.067221))),
                                     104.067221 + 10 / 111.1
                                     ),
                             Point
                                     (
                                     30.620076 - 10 / ( 111.1 / COS(RADIANS(104.067221))),
                                     104.067221 - 10 / 111.1
                                     )
                             ),
                     address_loc
<?php
$m = new MongoClient();
$d = $m->user;
$r = $d->command(array('geoNear' => "user",       // 在 poiConcat 集合中'near' => array(104.065847, 30.657554), // 经纬度附近'spherical' => true,              // 启用特殊搜索 弧度'maxDistance' => 1.5/6371,              // 搜索区域'distanceMultiplier' => 6371,           // 返回公里数,自动转换'num' => 5,                             // 最多返回5个文档
));
print_r($r);

                     )

MongoDb

1、先建立一张简单的集合user,两条数据如下:

{
   "_id" : ObjectId( "518b1f1a83ba88ca60000001" ),
   "account" : "simplephp1@163.com" ,
   "gps" : [
     104.067221,
     30.620076
   ]
}
{
   "_id" : ObjectId( "518b1dae83ba88d660000000" ),
   "account" : "simplephp6@163.com" ,
   "gps" : [
     104.07958,
     30.653936
   ]

db. user .ensureIndex({ "gps" : "2d" },{ "min" :-180, "max" :180})

#查询5公里内的,只返回常规数据
db. user .find({ gps :{ $near : [104.065847, 30.657554] , $maxDistance : 5/111.12} })
#查询5公里内的,且返回距离
db.runCommand({ geoNear : "user", near : [104.065847, 30.657554], spherical : true, maxDistance : 5/6371, distanceMultiplier: 6371})

#php实现


这篇关于分享一段mysql,mongodb 实现LBS搜索的简单代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/761943

相关文章

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u