PHP实现搜索地理位置及计算两点地理位置间距离的实例
地理位置搜寻LBS,存储每个地点的经纬度坐标,搜寻附近的地点,建立地理位置索引可提高查询效率。 mongodb地理位置索引,2d和2dsphere,对应平面和球面。1.创建lbs集合存放地点坐标 db.lbs.insert(
{ loc:{ type: "Point",coordinates: [113.332264,23.156206] },name: "广州东站" } ) db.lbs.insert( db.lbs.insert( 2.创建地理位置索引 3.查询附近的坐标 当前位置为:时代广场, 坐标: 搜寻附近一公里内的点,由近到远排序 搜寻结果: 代码如下: { "_id" : ObjectId("556a651996f1ac2add8928fa"),"loc" : { "type" : "Point","coordinates" : [ 113.330611,23.147234 ] },"name" : "林和西" } php代码如下: selectDB($dbname);
} catch (MongoException $e){
throw new ErrorException('Unable to connect to db server. Error:' . $e->getMessage(),31);
}
return $db;
}
// 插入坐标到mongodb // 搜寻附近的坐标 $coll = $dbconn->selectCollection($tablename); $result = array(); return $result; $db = conn('localhost','lbs','root','123456'); // 随机插入100条坐标纪录 // 搜寻一公里内的点 演示php代码,首先需要在mongodb的lbs中创建用户和执行auth。方法如下: db.auth(
{ "user":"root","pwd":"123456" } ) 计算两点地理坐标的距离功能:根据圆周率和地球半径系数与两点坐标的经纬度,计算两点之间的球面距离。获取两点坐标距离: $EARTH_RADIUS = 6370.996; // 地球半径系数 $PI = 3.1415926; $radLat1 = $latitude1 $PI / 180.0; $radLng1 = $longitude1 $PI / 180.0; $a = $radLat1 - $radLat2; $distance = 2 asin(sqrt(pow(sin($a/2),2) + cos($radLat1) cos($radLat2) pow(sin($b/2),2))); if($unit==2){ return round($distance,$decimal); } // 起点坐标 // 终点坐标 $distance = getDistance($longitude1,1); $distance = getDistance($longitude1,2); ?> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |