一、前言
之前一篇寫過 php根據IP獲取IP所在城市 ,但是還想再精確一點,獲取這個IP所在的經緯度信息,該怎么辦呢?
百度地圖為我提供了一種解決方案(當然還有其他的解決方案)。
先總的來說一下,想使用百度地圖的接口,除了你要寫一些php(其他代碼當然也能實現,本文寫的是php實現)代碼之外,唯一需要的就是申請一個百度地圖的 密鑰(免費申請,過程簡單)。有了這個密鑰,就相當於百度給你了一個訪問百度地圖api的通行證了。
百度地圖的接口也分很多種,我的需求是:打開一個php頁面就獲取IP以及經緯度。
二、具體過程:
我會從頭到尾,一步一步寫出開發的過程,好了擼開袖子開干吧:
1.申請密鑰(密鑰和語言無關):
先訪問接口文檔 高精度IP定位API·Web服務API ,這個頁面有個“產品介紹”小節,里面有個“申請密鑰”的超鏈接:
單擊它,跳轉到申請蜜鑰的頁面:
然后單擊“創建應用”,到創建頁面:
然后填寫一個自定義的名稱、寫一個IP白名單(根據自己需求,可選),然后提交。
TIP:如果是第一次申請的話,百度會發手機驗證碼進行驗證.
2.擼代碼
有了密鑰,看看接口文檔,就開始擼代碼吧。
如下:
<?php
header("Content-type: text/html; charset=utf-8");
?>
<?php
$user_ip= $_SERVER["REMOTE_ADDR"];//獲取客戶端IP
get_lat_and_lng_ByIP($user_ip);
//根據IP獲取經緯度
function get_lat_and_lng_ByIP($ip)
{
if(empty($ip))
{
return 'IP不能為空';
}
$content = file_get_contents("http://api.map.baidu.com/highacciploc/v1?qcip=$ip&qterm=pc&ak=請輸入您的AK&coord=bd09ll");
$json = json_decode($content);
$lng=$json->{'content'}->{'location'}->{'lng'};//提取經度數據
$lat=$json->{'content'}->{'location'}->{'lat'};//提取緯度數據
echo "當前經度:".$lng;
echo "<br/>";
echo "當前緯度:".$lat;
}
訪問效果:
這個接口電腦端訪問的定位還是挺准的;但是手機端訪問就不准會差很多,最多只能到城市級別的精確度,請注意,至於原因本人也很困惑,有知道的大俠希望能夠指點一下~
