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

转载 2015年07月09日 23:23:42
#仅支持myisam

CREATETABLE address (
 
    addressCHAR(80)NOTNULL,
 
    address_loc POINT NOTNULL,
 
    PRIMARYKEY(address)
 
);

ALTERTABLE address ADDSPATIAL INDEX(address_loc);

INSERTINTO address VALUES('Foobar street 12', GeomFromText('POINT(30.620076 104.067221)'));
 
INSERTINTO 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实现


相关文章推荐

java设置一段代码执行的超时时间的简单方法 间接实现获取Connection超时问题

博客分类:  Java 工作中问题 javathreadconnection超时  最近有个需求, 当DB压力过大时获取Connction的时间过慢长时间不返回的话, 就不连接DB...

一段封装mongodb连接的代码

主要目的是对客户端代码屏蔽mongodb connection,避免客户端自行打开和关闭连接 exports.doWithMongo = doWithMongo; var globalConnect...
  • kyfxbl
  • kyfxbl
  • 2014年02月11日 20:49
  • 892

分享一段代码来实现对孩子的监督

public class BootBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceive(...

一段简单的贪食蛇游戏的代码

  • 2009年01月07日 22:28
  • 2KB
  • 下载

一段MYSQL的插入代码

程序一: import java.io.File; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.n...

一段简单的printf使用示例代码

  • 2014年01月05日 12:57
  • 2KB
  • 下载

分享哈我测试MongoDB数据库的简单代码

分享哈我测试MongoDB数据库的简单代码 源代码下载地址:http://www.zuidaima.com/share/1550463424236544.htm...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分享一段mysql,mongodb 实现LBS搜索的简单代码
举报原因:
原因补充:

(最多只允许输入30个字)