如何在手機應用程式中使用Google地圖資料

這一篇是我在How to use Google Maps data in mobile applications的中文翻譯,網址在如何在手機應用程式中使用Google地圖資料
為了備份,並轉貼在此:

這篇文章會解是在手機應用程式中如何使用Google地圖的資料。
Google地圖提供允許用簡單的HTTP請求來存取其表象化狀態轉變(REST)的服務,所以這樣可以很容易地整合到手機應用程式中。

Contents

[hide]

申請Google地圖API金鑰

注意:使用這個免費的Google地圖APU金鑰程式會違反Google的條款和條件 (10.8節),假如你想要使用這個例子中的Google地圖API你應該購買企業許可證。

首先你需要在這一頁申請:
http://code.google.com/apis/maps/signup.html
一旦你申請了,你會取得一把金鑰(一個簡單的字串)這樣你就可以使用來查詢Google的地圖服務。

靜態地圖

標準的Google地圖程式碼是可以用於Web應用程式的,然而,它包括了很多的Ajax函式,假如你想要建構手機應用程式的話可能不太有用,解決的方法是使用靜態地圖服務可以允許擷取單一的影像,這些影像可以容易地用在手機應用程式中。

靜態地圖服務支援不同的影像格式(png32、GIF、JPG)及自訂的影像尺寸,這樣你就可以取得不同目的的完美影像,舉一個例,假如你想要擷取位置在:

  • 緯度: 41.867878
  • 經度: 12.471516

你可以用HTTP GET的請求方式來簡單地擷取這個URL:

http://maps.google.com/staticmap?center=41.867878,12.471516&format=png32&zoom=8&size=240x320&key=<API_KEY>

這個方式可以取得一個寬240像素高320像素的PNG32的影像,其中心點在(41.867878,12.471516),並且其縮放及別為8(縮放的範圍從0到19)
Image:Google_staticmap.jpg

Geocode一個地址

從Google地圖文件:
Geocoding是轉換地址(像是"320台灣桃園縣中壢市永泰街129號")為地理座標(像是緯度24.958686,經度121.231145)的程序

下面的範例描述建構一個應用程式來顯示使用者輸入的地址,首先你需要geocode地址到地理座標,
要這樣作,Google地圖提供另一個表象化狀態轉變服務可以容易地用簡單的HTTP請求存取,

假如你想要地理編碼這個地址
320台灣桃園縣中壢市永泰街129號
從你的程式碼請求這個URL

http://maps.google.com/maps/geo?q=320台灣桃園縣中壢市永泰街129號&output=csv&key=<API_KEY>

然後你會取得這個輸出:

200,6,24.958686,121.231145

在這裡:

  • 第一個數字是一個編碼,在這裡(200)意思是地理編碼是成功的(完整的狀態編碼列表見:[1])
  • 第二個數字給定地理編碼的精確度(從0到9 – 最大精確度)
  • 第3個及第4個數字表示地理編碼地址的緯度及經度,所以這些座標可以用來透過靜態地圖服務擷取地圖。

還有你會看見在地理編碼請求中有一個’output’參數,這個意指你可以選擇你喜歡的輸出格式,支援的格式有:

  • xml
  • kml (跟xml相同但是不同的Content-Type)
  • json (對手機應用程式不是真正有用)
  • csv (逗號分隔值)

代理伺服器的使用限制

因為你的Google地圖API金鑰受限於一個特定的URL才能存取地圖服務,所以你需需要設定一個代理伺服器這樣才可以從手機應用程式接收HTTP請求然後並轉送這些請求給Google Maps REST URLs,接著Google回應給行動客戶端。

另外也要知道每天的請求數目的限制,包括靜態地圖及地理編碼,對於個人使用來說是夠用的,但是你假如你計畫開發商業服務時需要知道這一點。

範例應用程式

Image:j2me_google_maps.jpg
一個J2ME範例應用程式,使用上述的方法,可以在這一頁下載: Google Maps J2ME 測試
在這例子裡使用的Google Maps J2ME API原始碼可以在這裡下載:J2ME Google Maps API

相關內容

2 Comments to “如何在手機應用程式中使用Google地圖資料”

  1. 在地ㄚ晟 說道:

    恭喜獲得藍眼關注哦,ㄚ晟投一票支持你!

  2. ㄚ琪 說道:

    噫?這是怎麼一回事?我什麼時候被關注的?不過感謝您的告知及支持喔?

Leave a Reply