1:html5获取用户当前的地理位置,即经纬度。

在你需要获取用户的地理位置时,浏览器会询问用户,是否同意。在该用户同意后才能获取地理位置。

浏览器发起的询问

1.jpg

以下资料来自w3school。

HTML5 Geolocation API 用于获得用户的地理位置。鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的。

浏览器支持

Internet Explorer 9、Firefox、Chrome、Safari 以及 Opera 支持地理定位。对于拥有 GPS 的设备,比如 iPhone,地理定位更加精确。

示例:

var x=document.getElementById("demo");
function getLocation()
  {
  if (navigator.geolocation)
    {
    navigator.geolocation.getCurrentPosition(showPosition);
    }
  else{x.innerHTML="Geolocation is not supported by this browser.";}
  }
function showPosition(position)
  {
  x.innerHTML="Latitude: " + position.coords.latitude +"Longitude: " + position.coords.longitude;
  }

2:php实现查找附近的人

假设已经存在表A,该表内有id,uid,lat,lng字段。

我们的需求是搜索附近地点,例如,坐标(39.91, 116.37)附近500米内的人,首先算出“给定坐标附近500米”这个范围的坐标范围。 虽然它是个圆,但我们可以先求出该圆的外接正方形,然后拿正方形的经纬度范围去搜索数据库。红色部分为要求的搜索范围,绿色部分为实际搜索范围。

distance-map.png

假设已知点的经纬度分别为$lng, $lat,先实现经度范围的查询。

参考wiki百科上的一些球面计算公式。Haversine formula。

用php代码实现即为:

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);
 
$squares = 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)
                );
$info_sql = "select * from `A` 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']} ";

标签: php, html5

添加新评论