项目要求:
1.使用定位,获取gps信息
2.获取当前所在城市
3.从该城市中取数据,按照距离我的当前位置远近排序
方案
1:使用js获取当前位置信息,然后使用cookie或者session存储
function showPosition(position) { var lat = position.coords.latitude; var lon = position.coords.longitude; var baseUrl = '{|:U(GROUP_NAME.'/Index/position')|}'; //baseUrl += '?lat='+position.coords.latitude+'&lon='+position.coords.longitude; $.post(baseUrl,{lat:lat,lon:lon},function(data){ location.reload(); // alert(data); }); } //js调用函数 function getLocation() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(showPosition); } }
2、将gps坐标转换成高德坐标,并获取所在城市 直辖市的city为空(保存在province属性中)
http://restapi.amap.com/v3/geocode/regeo?location=108.948711,34.230511&key=b7e6f37cfbf325818525241fc3616e7f&s=rsv3&radius=1000&extensions=all 注意:1.经纬度小数点后只能6位 2.extensions 可取 base(当前位置基本信息) all(周边信息) Php //根据高德坐标获取所在城市 function getAmapCity($lng,$lat,$default='北京'){ $res = file_get_contents('http://restapi.amap.com/v3/geocode/regeo?location='.$lng.','.$lat.'&key=b7e6f37cfbf325818525241fc3616e7f&s=rsv3&radius=1000&extensions=base'); $res = json_decode($res); if($res->info == 'OK'){ return explode('市',$res->regeocode->addressComponent->city)[0]; }else{ return $default; } }
3、计算两个坐标的距离
//计算地图两点间距离 function getShortDistance ( $lngx, $latx, $lngy, $laty ) { $DEF_PI = 3.14159265359; // pi(); $DEF_2PI = 6.28318530712; // 2 * $DEF_PI; $DEF_PI180 = 0.01745329252; // $DEF_PI/180.0; $DEF_R = 6378.137; // radius of earth // 角度换弧度 $radLat1 = $lngx * $DEF_PI180; $radLat2 = $lngy * $DEF_PI180; $a = $radLat1 - $radLat2; $b = ( $latx * $DEF_PI180 ) - ( $laty * $DEF_PI180 ); $s = 2 * sin(sqrt(pow(sin($a/2),2) + cos($radLat1)*cos($radLat2)*pow(sin($b/2),2))); $s = $s * $DEF_R; $distance = round($s * 1000); return $distance; }
上一篇: 《建站管家》二次开发文档
下一篇: 常用的正则表达式大全