PHPIN.NET

 找回密码
 立即注册
查看: 6546|回复: 0

[PHP类\函数] PHP附近地理位置搜索实现

[复制链接]

469

主题

31

回帖

5569

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5569
发表于 2015-9-18 20:03:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
PHP附近地理位置搜索实现

  1. <?php
  2. error_reporting(0);
  3. define(EARTH_RADIUS, 6371);//地球半径,平均半径为6371km
  4. /**
  5. *计算某个经纬度的周围某段距离的正方形的四个点
  6. *
  7. *@param lng float 经度
  8. *@param lat float 纬度
  9. *@param distance float 该点所在圆的半径,该圆与此正方形内切,默认值为0.5千米
  10. *@return array 正方形的四个点的经纬度坐标
  11. */
  12. $lng='111.11';
  13. $lat='222.22';
  14. function returnSquarePoint($lng, $lat,$distance = 0.5){
  15.     $dlng =  2 * asin(sin($distance / (2 * EARTH_RADIUS)) / cos(deg2rad($lat)));
  16.     $dlng = rad2deg($dlng);
  17.     $dlat = $distance/EARTH_RADIUS;
  18.     $dlat = rad2deg($dlat);
  19.     return array(
  20.         'left-top'=>array('lat'=>$lat + $dlat,'lng'=>$lng-$dlng),
  21.         'right-top'=>array('lat'=>$lat + $dlat, 'lng'=>$lng + $dlng),
  22.         'left-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng - $dlng),
  23.         'right-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng + $dlng)
  24.     );
  25. }

  26. //以下为sql
  27. $squares = returnSquarePoint($lng, $lat);
  28. $info_sql = "select id,locateinfo,lat,lng from `lbs_info` where lat<>0 and lat>{$squares['right-bottom']['lat']} and lat<{$squares['left-top']['lat']} and lng>{$squares['left-top']['lng']} and lng<{$squares['right-bottom']['lng']} ";

  29. var_dump($squares);
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|PHPIN.NET ( 冀ICP备12000898号-14 )|网站地图

GMT+8, 2024-10-31 06:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表