使用 Google Map API 把地址轉換成經緯度座標

最近的案子有個需求
業主開了很多實體店面
希望客人可以直接在網頁上輸入地址
就可以找出最近的店

資料庫預先記錄了店家的地址清單
我們可以用 Google Map 的 API 來查詢地址的對應經緯度座標

首先 要到 Google API 的頁面申請
http://code.google.com/intl/zh-TW/apis/maps/signup.html
只要輸入你要使用這個服務的網域
並且按下確定即可

Google API 會給你一組金鑰
這是用來跟 Google API 溝通用的
Google API 會記錄你的使用狀況
(包括一天不能超過限制的使用次數 超過要付費 等等…)

我們要使用的查詢功能
在 Google 官方的服務 叫做 地理編碼服務 (Google Geocoding API)
可以參考這個網頁
http://code.google.com/intl/zh-TW/apis/maps/documentation/geocoding/

最快的方法是直接在剛剛給金鑰的那頁的最底下

http://maps.google.com/maps/geo?q=地址&output=json&oe=utf8&sensor=false&key=你的金鑰

紅色的部份(地址/金鑰) 就填入你要查詢的地址 跟剛剛拿到的金鑰
地址要用 php 的 urlencode 以免發生意外

使用這個 URL 去發一個 HTTP 的 GET request 會收到一個 json 的回覆

{
  "name": "台北市凱達格蘭大道",
  "Status": {
    "code": 200,
    "request": "geocode"
  },
  "Placemark": [ {
    "id": "p1",
    "address": "100台灣台北市中正區凱達格蘭大道",
    "AddressDetails": {
   "Accuracy" : 6,
   "Country" : {
      "AdministrativeArea" : {
         "AdministrativeAreaName" : "台北市",
         "Locality" : {
            "LocalityName" : "中正區",
            "PostalCode" : {
               "PostalCodeNumber" : "100"
            },
            "Thoroughfare" : {
               "ThoroughfareName" : "凱達格蘭大道"
            }
         }
      },
      "CountryName" : "台灣",
      "CountryNameCode" : "TW"
   }
},
    "ExtendedData": {
      "LatLonBox": {
        "north": 25.0422222,
        "south": 25.0381900,
        "east": 121.5174532,
        "west": 121.5129631
      }
    },
    "Point": {
      "coordinates": [ 121.5155764, 25.0396327, 0 ]
    }
  } ]
}

裡面有個 Point -> Coordinates 就是經緯度座標
然後只要拿兩個座標來做距離運算
就可以算出 “約略直線” 的距離
再來就是抓最近的 就是最近的店啦

管理者輸入的店地址 基本上是固定的
所以可以在把地址存到資料庫的時候 就一併把座標存到資料庫內

現在 MySQL 也有支援座標的資料格式
甚至可以直接 query 最近的點
這樣就不用另外寫 code 計算距離
(不過我還沒研究出來 之後再補)

使用 Google Map API 把地址轉換成經緯度座標 有 “ 4 則迴響 ”

  1. hi 你好 不好意思回文有點晚
    我的 code 是 php
    就一個 file_get_contents($url) 把文章裡面的 URL 的內容拉回來而已
    不曉得對你的專案有沒有幫助

    另外盡量避免在留言裡面提及私人資料喔(像是email)

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料