之前有一篇是寫「計算兩地址的距離(使用PHP、Google Map)」,在文章內有用到google map 的api來獲取經緯度,但那時候獲取經緯度的功能,不需要API KEY,如今已經強制要求要API KEY了。

獲取地址經緯度(新版)

要實現此功能,需要完成兩大步驟。

  1. 取得API KEY

  2. 改寫程式

Google Map Api Key

https://cloud.google.com/maps-platform/

進入google maps platform 後,點選「開始使用」。

google map platform開始使用

再來會彈出一個視窗,問你需要用到哪些功能,[地圖]、[路徑]、[地方資訊]。勾選每項都會開啟相關的api服務,若不確定可以都勾起來。勾好後,就點[繼續]。

google map 開通api服務

接著,它會問你要放置在哪個專案(project),可以選擇現有的或是新建一個。

google map 選擇project

再來這個部分就比較麻煩一點,它要求要新增帳單資訊。(如果之前已經有添加過這部分可省略)

建立帳單帳戶

google platform建立帳單帳戶

選擇[國家](理論上會自動代入),勾選[同意條款],[同意並繼續]。

建立帳單帳戶同意條款

這部分就比較麻煩一點,假如你是[公司],它會要求填「加值稅編號」(應該是統編)。

google 加值稅編號

個人的話,可以選[已登記稅籍的個人:需填加值稅編號]或[未登記稅籍的個人]。一般來說,選[未登記稅籍的個人]。

未登記稅籍的個人

接著,就是要填寫[信用卡資訊],這部分沒信用卡恐怕申請不過去。而且用信用卡號生成器是沒用的,它似乎會實際去刷卡再退刷,確認卡片是有效的。

google 信用卡帳單

啟用API服務

成功建立帳單帳戶後,就會進入到啟用API服務的頁面。首先它會跟你確認,總共會開啟的API服務數量。沒問題就直接按[下一步]。

啟用map api服務

馬上就會獲得一組API KEY了。

提醒:API KEY 不要任意公開,避免被人盜用,導致帳單費用暴增哦~

10.PNG

Google Map API地址轉經緯度程式碼(PHP)

<?php 
/* *
 * 類名:MapCalc
 * 功能:google map 地址轉經緯度  
 * 建立者:Aidec
 * 說明:  
 */
 
class MapCalc
{
  
    function getPageData($url){ 
        $ch = curl_init(); 
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);  
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect: '));
        curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        //curl_setopt($ch, CURLOPT_HEADER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_NOBODY, false);
        curl_setopt($ch, CURLOPT_FILETIME, true);
        curl_setopt($ch, CURLOPT_REFERER, $url);
        
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 4);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
        //取得原始碼
        $result['data'] = curl_exec($ch);
        //$info_tmp = curl_getinfo($ch);
        //取得info資訊
        //$result['info'] = $info_tmp;
        unset($info_tmp);
        curl_close($ch);
         
        return $result;
     }
    /** 
     * 初始化 
     * @param $apikey 金鑰 
     */ 
     function __construct($apikey=''){   
         $this->apikey = $apikey;
     } 
    /* 
     * 獲取地址經緯度 - 從google map
     */  
    public function getAddressLatLng($addr='',$apikey=''){
      $apikey = ($apikey=='') ? $this->apikey : $apikey;
 
      $url = 'http://maps.google.com/maps/api/geocode/json?address='.$addr.'&sensor=false&APIKEY='.$apikey;
      $geocode=$this->getPageData($url);
      if(isset($geocode['data'])){
        $geocode = $geocode['data'];
      } 
 
      $output= json_decode($geocode); 
      $latitude = $output->results[0]->geometry->location->lat;
      $longitude = $output->results[0]->geometry->location->lng; 
    
      return array('lat'=>$latitude,'lng'=>$longitude);
    } 
}
//使用方式
$gmap = new MapCalc('AIzaSy.................'); //填入金鑰
$data = $gmap->getAddressLatLng('高雄市'); //填入地址
?>



文章轉載或引用,請先告知並保留原文出處與連結!!(單純分享或非營利的只需保留原文出處,不用告知)

原文連結:
https://blog.aidec.tw/post/google-mpa-api-geocode