php百度地圖座標繪製矩形 呼叫百度poi搜尋矩形區域內資料
阿新 • • 發佈:2018-11-29
首先貼出三個重要的方法
/**
* @date:2017-07-12 9:23
* @auth:網路搜尋
* @parame :百度地圖php版呼叫方法
*/
function caculateAKSN($ak, $sk, $url, $querystring_arrays, $method = 'GET')
{
if ($method === 'POST'){
ksort($querystring_arrays);
}
$querystring = http_build_query($querystring_arrays);
return md5(urlencode($url.'?'.$querystring.$sk));
}
/**
* @date:2017-07-12 10:57
* @auth:百度地圖文件
* 百度座標系轉換成標準GPS坐系
* @param float $lnglat 座標(如:106.426, 29.553404)
* @return string 轉換後的標準GPS值:
*/
function BD09LLtoWGS84($lnglat){ // 經度,緯度
$lnglat = explode(',', $lnglat);
list($x,$y) = $lnglat;
$Baidu_Server = "http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x={$x}&y={$y}";
$result = @file_get_contents($Baidu_Server);
$json = json_decode($result);
if($json->error == 0){
$bx = base64_decode($json->x);
$by = base64_decode($json->y);
$GPS_x = 2 * $x - $bx;
$GPS_y = 2 * $y - $by;
return $GPS_x.','.$GPS_y;//經度,緯度
}else
return $lnglat;
}
/**
* @date:2017-07-12 11:34
* @auth:leishaofa
*@parame根據gps一個座標繪製一個矩形
* @parame$lng 經度
* @parame$lat 緯度
* @parame $distance一千米
*/
function resultmap($lng,$lat,$distance=1){
$fEARTH_RADIUS=6371;//地球平均半徑
$dlng=2*asin(sin($distance / (2*$fEARTH_RADIUS))/cos(deg2rad($lat)));
$dlng=rad2deg($dlng);
$dlat=$distance/$fEARTH_RADIUS;
$dlat=rad2deg($dlat);
return array(
'left-top'=>array('lat'=>$lat+$dlng,'lng'=>$lng-$dlng),
'right-top'=>array('lat'=>$lat+$dlng,'lng'=>$lng+$dlng),
'left-bottom'=>array('lat'=>$lat-$dlng,'lng'=>$lng-$dlng),
'right-bottom'=>array('lat'=>$lat-$dlng,'lng'=>$lng+$dlng)
);
}
在來看控制器方法
$gps=explode(',',$this->BD09LLtoWGS84('114.282167,30.553489')); $dao=$this->resultmap($gps[0],$gps[1]);
$url="http://api.map.baidu.com/place/v2/search?query=便利店,&bounds=".$dao['left-bottom']['lat'].",
".$dao['left-bottom']['lng'].",".$dao['right-top']['lat'].",".$dao['right-top']['lng'].
"&output=json&page_size=10&page_num=1&ak="C('BAIDUAK');
$ch
= curl_init()
;
curl_setopt(
$ch
,
CURLOPT_URL
,
$url
)
;
curl_setopt(
$ch
,
CURLOPT_HEADER
,
false
)
;
//表示需要response header
curl_setopt(
$ch
,
CURLOPT_NOBODY
,
false
)
;
//表示需要response body
curl_setopt(
$ch
,
CURLOPT_RETURNTRANSFER
,
TRUE
)
;
curl_setopt(
$ch
,
CURLOPT_FOLLOWLOCATION
,
FALSE
)
;
curl_setopt(
$ch
,
CURLOPT_AUTOREFERER
,
TRUE
)
;
curl_setopt(
$ch
,
CURLOPT_TIMEOUT
,
120
)
;
$result
= curl_exec(
$ch
)
;
print_r(
$result
)
;
嘗試ns失敗只有用ak方式ip來搞了