PHP通过计算经纬度获取附近的数据信息
2015-12-30 09:34
711 查看
[code]/** *计算某个经纬度的周围某段距离的正方形的四个点 * *@param lng float 经度 *@param lat float 纬度 *@param distance float 该点所在圆的半径,该圆与此正方形内切,默认值为0.5千米 *@return array 正方形的四个点的经纬度坐标 */ function returnSquarePoint($lng, $lat,$distance = 0.5){ define(EARTH_RADIUS, 6371);//地球半径,平均半径为6371km $dlng = 2 * asin(sin($distance / (2 * EARTH_RADIUS)) / cos(deg2rad($lat))); $dlng = rad2deg($dlng); $dlat = $distance/EARTH_RADIUS; $dlat = rad2deg($dlat); return array( 'left-top'=>array('lat'=>$lat + $dlat,'lng'=>$lng-$dlng), 'right-top'=>array('lat'=>$lat + $dlat, 'lng'=>$lng + $dlng), 'left-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng - $dlng), 'right-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng + $dlng) ); } function getdistance($lng1,$lat1,$lng2,$lat2){//根据经纬度计算距离 单位为公里 //将角度转为狐度 $radLat1=deg2rad($lat1); $radLat2=deg2rad($lat2); $radLng1=deg2rad($lng1); $radLng2=deg2rad($lng2); $a=$radLat1-$radLat2;//两纬度之差,纬度<90 $b=$radLng1-$radLng2;//两经度之差纬度<180 $s=2*asin(sqrt(pow(sin($a/2),2)+cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)))*6378.137; return $s; }
函数 returnSquarePoint 是用来获取某个坐标点附近0.5KM之内的正方形的四个点,通过此办法获取附近的面积,并通过此函数组合出所需的SQL语句,如:
[code]$squares = returnSquarePoint($lng, $lat, 100); $condition = "location_x<>0 and location_x>{$squares['right-bottom']['lat']} and location_x<{$squares['left-top']['lat']} and location_y>{$squares['left-top']['lng']} and location_y<{$squares['right-bottom']['lng']}";
函数 getdistance 是根据数据库中经录的坐标点计算两个坐标点之间的距离
相关文章推荐
- PHP运行环境之IIS FastCGI 进程意外退出解决办法
- PHP json_decode 对 JSON 格式的字符串进行编码并获取对应的值
- Thinkphp 使用过程中,模型中使用其它表却总是没起作用的解决办法
- PHP实现懒加载
- x86 TargetPlatform with XBAPs
- php获取当前页面完整URL地址
- PHP代码优化的40条建议
- STP PVST+
- php命令行查看已安装的模块的方式
- 编译php系统的一个小问题
- 使用PHP如何实现高效安全的ftp服务器(二)
- PHP汉字转换拼音的函数代码
- 如何写php守护进程(Daemon)
- 分享PHP守护进程类
- PHP使用strtotime获取上个月、下个月、本月的日期
- thinkPHP导出csv文件及用表格输出excel的方法
- 详解PHP中的null合并运算符
- thinkphp命名空间用法实例详解
- thinkphp多层MVC用法分析
- php 依赖注入