Google Geocoding API 有查詢限制,每天最多發出 2,500 個地理位置要求 ,如果是Google Maps API for Business 使用者每天最多可執行 100,000 個要求
Google Geocoding API又提供JSON以及XML的資料型態,我在這邊的範例是選擇用JSON來做講解
Google Geocoding API又有他自己的格式,如果是用JSON的朋友就用以下的語法
http://maps.googleapis.com/maps/api/geocode/json?
如果是選擇XML的朋友就使用以下的語法
http://maps.googleapis.com/maps/api/geocode/xml?
因為我們要透過地址去查詢取得一個JSON檔案,所以我們將語法改成如下
http://maps.googleapis.com/maps/api/geocode/json?address=台灣高雄市三民區建國二路318號&sensor=false
把該語法貼到網址列,就會得到一個JSON
{ "results" : [ { "address_components" : [ { "long_name" : "318", "short_name" : "318", "types" : [ "street_number" ] }, { "long_name" : "Jiànguó 2nd Road", "short_name" : "Jiànguó 2nd Road", "types" : [ "route" ] }, { "long_name" : "港西里", "short_name" : "港西里", "types" : [ "sublocality", "political" ] }, { "long_name" : "Sanmin District", "short_name" : "Sanmin District", "types" : [ "locality", "political" ] }, { "long_name" : "Kaohsiung City", "short_name" : "Kaohsiung City", "types" : [ "administrative_area_level_2", "political" ] }, { "long_name" : "Taiwan", "short_name" : "TW", "types" : [ "country", "political" ] }, { "long_name" : "807", "short_name" : "807", "types" : [ "postal_code" ] } ], "formatted_address" : "No. 318, Jiànguó 2nd Road, Sanmin District, Kaohsiung City, Taiwan 807", "geometry" : { "location" : { "lat" : 22.63961980, "lng" : 120.30211060 }, "location_type" : "ROOFTOP", "viewport" : { "northeast" : { "lat" : 22.64096878029150, "lng" : 120.3034595802915 }, "southwest" : { "lat" : 22.63827081970850, "lng" : 120.3007616197085 } } }, "partial_match" : true, "types" : [ "street_address" ] } ], "status" : "OK" }
這樣就能取得Google Map的JSON,在透過location去取得經緯度。
不過要注意最下面有一個status,status狀態是『OK』才算是取得,其他的可以參考『狀態碼』
接著,我要講解我的程式碼了
index.html使用了jQuery.js及Google Maps JavaScript API,還使用自定義的Script.js以及test.css檔案,分別在標頭內用外部連接方式套用到index.html
Body內有包涵了兩個div,map及panel。map是用來顯示地圖的,panel只是用來包住input及button
Body在載入時呼叫Script.js內的initialize()函式,該函式只是將初始位置設定在樹德科技大學,並且將id為map的元件設定為Google Map而已
點擊button元件,則會呼叫Script.js內的btnClick()函式。
該函式是先判斷是否有將資料填寫完全,在透過jQuery.ajax()的方法由Google Geocoding API語法得到一個JSON,取得之後先判斷地圖是否可以使用。地址如果正確,就可以將地圖位置移至新地圖
HTML:
<!DOCTYPE html> <html lang="zh-tw"> <head> <meta charset="utf-8" /> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <link rel="stylesheet" type="text/css" href="./css/test.css"> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=Key number&sensor=false®ion=zh-tw"></script> <script type="text/javascript" src="./js/Script.js"></script> </head> <body onload = "initialize()" > <div id="map"></div> <div id = "panel"> <input id="address" value="高雄市燕巢區橫山路59號"> <button onclick="btnClick()">Button</button> </div> </body> </html>
Javascript:
function initialize() { var mapOptions = { zoom: 20, center: new google.maps.LatLng(22.76758770, 120.37921390), mapTypeId: google.maps.MapTypeId.ROADMAP } var map = new google.maps.Map(document.getElementById("map"), mapOptions); }; function btnClick(){ if (address.value.length >= 1) { $.ajax({ type: "post", dataType: "json", url: "https://maps.googleapis.com/maps/api/geocode/json?address=" + address.value + "&sensor=false&language=zh-tw", success: function (data) { if (data.status == "OK") { var mapOptions = { zoom: 16, center: new google.maps.LatLng(data.results[0].geometry.location.lat, data.results[0].geometry.location.lng), mapTypeId: google.maps.MapTypeId.ROADMAP } var map = new google.maps.Map(document.getElementById("map"), mapOptions); } else { alert("沒有地圖資料"); } }, error: function () { alert("資料錯誤"); } }); } else { alert("請輸入正確地址"); document.getElementById('#address').focus() } };
CSS:
html { height: 100% } body { height: 100%; margin: 0; padding: 0 } #map { height: 95% ; width: 100% } #address { width:40% }
以下為執行結果:
查詢後的結果:
參考資料:
https://developers.google.com/maps/documentation/javascript/basics?hl=zh-tw
https://developers.google.com/maps/documentation/javascript/tutorial?hl=zh-tw
https://developers.google.com/maps/documentation/geocoding/?hl=zh-tw
https://developers.google.com/maps/documentation/geocoding/?hl=zh-tw#StatusCodes
http://api.jquery.com/jQuery.ajax/
http://writecodepeople.blogspot.tw/2013/07/google-maps-api-v3-api-key.html
http://www.json.org/json-zh.html
http://j796160836.pixnet.net/blog/post/30530326
你不可不知的 JSON 基本介紹
http://blog.darkthread.net/post-2012-06-15-geocoding-api.aspx