本文主要是介绍分享一段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} }) db.runCommand({ geoNear : "user", near : [104.065847, 30.657554], spherical : true, maxDistance : 5/6371, distanceMultiplier: 6371})
#php实现
这篇关于分享一段mysql,mongodb 实现LBS搜索的简单代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!