根据经纬度获取地理位置

客官°小女子只卖身不卖艺 2022-04-10 13:10 645阅读 0赞

根据经纬度获取地理位置

  1. /**
  2. * 根据经纬度获取地理位置-高德地图
  3. * @param string $lon 经度
  4. * @param string $lat 纬度
  5. * @return array
  6. */
  7. public function regeo($lon, $lat)
  8. {
  9. // Key 是高德Web服务 Key。详细可以参考上方的请求参数说明。
  10. $key = config('app.amap_key');
  11. // location(116.310003,39.991957) 是所需要转换的坐标点经纬度,经度在前,纬度在后,经纬度间以“,”分割
  12. $location = $lon . "," . $lat;
  13. /**
  14. * url:https://restapi.amap.com/v3/geocode/regeo?output=xml&location=116.310003,39.991957&key=<用户的key>&radius=1000&extensions=all
  15. * radius(1000)为返回的附近POI的范围,单位:米
  16. * extensions 参数默认取值是 base,也就是返回基本地址信息 all返回所有
  17. * extensions 参数取值为 all 时会返回基本地址信息、附近 POI 内容、道路信息以及道路交叉口信息。
  18. * output(XML/JSON)用于指定返回数据的格式
  19. */
  20. $url = "https://restapi.amap.com/v3/geocode/regeo?output=JSON&location={$location}&key={$key}&radius=1000&extensions=base";
  21. // 执行请求
  22. $ch = curl_init();
  23. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  24. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  25. curl_setopt($ch, CURLOPT_URL, $url);
  26. $data = curl_exec($ch);
  27. curl_close($ch);
  28. $result = json_decode($data, true);
  29. return $result;
  30. }

根据经纬度计算距离

  1. /**
  2. * 根据经纬度计算距离
  3. *
  4. */
  5. public function getDistance($lat1=32.052639218124, $lng1=118.78637828936, $lat2=31.906570901919, $lng2=118.91701861624)
  6. {
  7. $earthRadius = 6367000; //approximate radius of earth in meters lat1纬度 经度118.91701861624
  8. // print_r($lat2);
  9. // echo "<br>";
  10. // print_r($lng1);
  11. // echo "<br>";
  12. $lat1 = ($lat1 * pi() ) / 180;
  13. $lng1 = ($lng1 * pi() ) / 180;
  14. $lat2 = ($lat2 * pi() ) / 180;
  15. $lng2 = ($lng2 * pi() ) / 180;
  16. $calcLongitude = $lng2 - $lng1;
  17. $calcLatitude = $lat2 - $lat1;
  18. $stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2);
  19. $stepTwo = 2 * asin(min(1, sqrt($stepOne)));
  20. // print_r($stepTwo);
  21. $calculatedDistance = $earthRadius * $stepTwo;
  22. // echo "<br>";
  23. // print_r($calculatedDistance);
  24. return round($calculatedDistance);
  25. }

根据地址获取经纬度

  1. /**
  2. * 根据地址获取经纬度
  3. *
  4. */
  5. public function getLatng($prepAddr)
  6. {
  7. // $prepAddr = "上海徐汇区漕宝70号";
  8. $geocode=file_get_contents("http://api.map.baidu.com/geocoder/v2/?address=$prepAddr&output=json&ak=自己的ak");
  9. $output= json_decode($geocode,true);
  10. // print_r($output);die;
  11. $latng = $output['result']['location'];
  12. return $latng;
  13. }

根据ip获取

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. function ipjwd() {
  4. $getIp=$_SERVER["REMOTE_ADDR"];
  5. if ($getIp=='127.0.0.1') {
  6. $getIp='58.30.228.35';
  7. }
  8. $content = file_get_contents("http://api.map.baidu.com/location/ip?ak=您的密钥");
  9. $json = json_decode($content);
  10. //return $json;
  11. $data='';
  12. $data['ip']=$getIp;
  13. $data['log']=$json->{'content'}->{'point'}->{'x'};//按层级关系提取经度数据
  14. $data['lat']=$json->{'content'}->{'point'}->{'y'};//按层级关系提取纬度数据
  15. $data['address']=$json->{'content'}->{'address'};//按层级关系提取address数据
  16. return $data;
  17. }
  18. var_dump(ipjwd());
  19. ?>

发表评论

表情:
评论列表 (有 0 条评论,645人围观)

还没有评论,来说两句吧...

相关阅读