2013年4月20日 星期六

java google Map api



使用java JSON剖析套件來擷取google map api內重要資訊,包含經緯度、地址、大小、精度等,從中學習如何使用google公開API,以及了解到JSON的格式、運作,因目前網路上傳送資料的方式亦趨使用JSON格式,其容易閱讀、相容性高、支援多資料格式,故盡早了解其內容是必然之趨勢。


1.首先需引用java-json.jar


2.撰寫並引入json Object,並使用google map json api(1)google mp api說明:https://developers.google.com/maps/documentation/geocoding/?hl=zh-tw#JSON,尚包括xml格式,而在此使用json方式解析。(2)Json api 內容:http://maps.googleapis.com/maps/api/geocode/json?address=您想要的地址&sensor=false&language=zh-TW(3)import引用的json jar:

     import org.json.JSONArray;
     import org.json.JSONException;
     import org.json.JSONObject;

3.取得輸入地址及經度、緯度

 public static void main(String[] args) {
        try {
            String sKeyWord = "台北市101";
            URL url  = new URL(String.format("http://maps.googleapis.com/maps/api/geocode/json?address=%s&sensor=false&language=zh-TW", 
            URLEncoder.encode(sKeyWord, "UTF-8")));//p=%s is KeyWord in
             URLConnection connection = url.openConnection();
            String line;
            StringBuilder builder = new StringBuilder();
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8"));
            while ((line = reader.readLine()) != null) {builder.append(line);}
            JSONObject json = new JSONObject(builder.toString()); //轉換json格式
            JSONArray ja = json.getJSONArray("results");//取得json的Array物件
            for (int i = 0; i < ja.length(); i++) {
                  System.out.print("地址:" + ja.getJSONObject(i).getString("formatted_address") + " ");
                  System.out.print("緯度:" + ja.getJSONObject(i).getJSONObject("geometry").getJSONObject("location").getDouble("lat") + " ");
                  System.out.print("經度:" + ja.getJSONObject(i).getJSONObject("geometry").getJSONObject("location").getDouble("lng"));
                  System.out.println("");
            }
        } catch (JSONException ex) {
            Logger.getLogger(test.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(test.class.getName()).log(Level.SEVERE, null, ex);
        } 
    }

3.搜尋結果

4.視窗版(1)首先到google static maps了解如何傳入相關參數以取得靜態標記圖片。(2)而該範例以此格式取之:http://maps.google.com/maps/api/staticmap?center=台北市&zoom=10&size=800x500&sensor=false&markers=color:blue%7Clabel:S%7C110台灣台北市信義區台北101,其中center參數為地圖中心、zoom為縮放等級、size圖片大小、markers則是標記出精確位置。(3)這些參數的相關資訊都可以從上述JSON格式中取之。(4)接著就可以設計出搜尋視窗讓使用者點選地址,並根據JSON資訊來向google static map取圖片並顯示,最後設計JSON格式輸出來了解其內容。



5.檔案下載





3 則留言:

  1. 請問 我直接下載了您的檔案 不過都顯示無法執行和debug(沒有任何紅色驚嘆號的錯誤標示)
    是否是因為我需要下載甚麼套件呢? 我用的開發環境是:NetBeans IDE8.0.2

    回覆刪除
    回覆
    1. 有較具體的畫面嗎?我的NetBeans IDE8.0.2是正常可以執行的,還有你是執行哪隻檔案

      刪除
    2. 剛剛用了另一台電腦就能執行了, 謝謝您的回覆喔~~
      我在繼續研究一下code 感恩~

      刪除