使用 Google Map API 把地址轉換成經緯度座標
2012 Jan 18 未分類
最近的案子有個需求
業主開了很多實體店面
希望客人可以直接在網頁上輸入地址
就可以找出最近的店
資料庫預先記錄了店家的地址清單
我們可以用 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 計算距離
(不過我還沒研究出來 之後再補)
0則留言