根据经纬度获取地理位置

根据经纬度获取地理位置

/**
     * 根据经纬度获取地理位置-高德地图
     * @param string $lon 经度
     * @param string $lat 纬度
     * @return array
     */
    public function regeo($lon, $lat)
    {
        // Key 是高德Web服务 Key。详细可以参考上方的请求参数说明。
        $key = config('app.amap_key');
        // location(116.310003,39.991957) 是所需要转换的坐标点经纬度,经度在前,纬度在后,经纬度间以“,”分割
        $location = $lon . "," . $lat;
        /**
         * url:https://restapi.amap.com/v3/geocode/regeo?output=xml&location=116.310003,39.991957&key=<用户的key>&radius=1000&extensions=all
         * radius(1000)为返回的附近POI的范围,单位:米
         * extensions 参数默认取值是 base,也就是返回基本地址信息 all返回所有
         * extensions 参数取值为 all 时会返回基本地址信息、附近 POI 内容、道路信息以及道路交叉口信息。
         * output(XML/JSON)用于指定返回数据的格式
         */
        $url = "https://restapi.amap.com/v3/geocode/regeo?output=JSON&location={$location}&key={$key}&radius=1000&extensions=base";

        // 执行请求
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_URL, $url);
        $data = curl_exec($ch);
        curl_close($ch);
        $result = json_decode($data, true);

        return $result;
    }

根据经纬度计算距离

/**
     * 根据经纬度计算距离 
     *
     */
    public function getDistance($lat1=32.052639218124, $lng1=118.78637828936, $lat2=31.906570901919, $lng2=118.91701861624) 
    { 
      $earthRadius = 6367000; //approximate radius of earth in meters lat1纬度 经度118.91701861624
       // print_r($lat2);
       // echo "<br>";
       // print_r($lng1);
       // echo "<br>";
      $lat1 = ($lat1 * pi() ) / 180; 
      $lng1 = ($lng1 * pi() ) / 180; 
       
      $lat2 = ($lat2 * pi() ) / 180; 
      $lng2 = ($lng2 * pi() ) / 180; 
 
       
      $calcLongitude = $lng2 - $lng1; 
      $calcLatitude = $lat2 - $lat1; 
      $stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2); 
      $stepTwo = 2 * asin(min(1, sqrt($stepOne))); 
      // print_r($stepTwo);
      $calculatedDistance = $earthRadius * $stepTwo; 
    // echo "<br>";
    //    print_r($calculatedDistance);
      return round($calculatedDistance); 
    }

根据地址获取经纬度

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

根据ip获取

<?php
header("content-type:text/html;charset=utf-8");
function ipjwd() {
$getIp=$_SERVER["REMOTE_ADDR"];
if ($getIp=='127.0.0.1') {
$getIp='58.30.228.35';
}
 
$content = file_get_contents("http://api.map.baidu.com/location/ip?ak=您的密钥");
$json = json_decode($content);
//return $json;
$data='';
$data['ip']=$getIp;
$data['log']=$json->{'content'}->{'point'}->{'x'};//按层级关系提取经度数据
$data['lat']=$json->{'content'}->{'point'}->{'y'};//按层级关系提取纬度数据
$data['address']=$json->{'content'}->{'address'};//按层级关系提取address数据
return $data;
}
var_dump(ipjwd());
?>

猜你喜欢

转载自blog.csdn.net/ahaotata/article/details/86001878