搜尋此網誌

2015年12月11日 星期五

google 地圖搜尋 api 鄰近地點地方資訊搜尋

在之前的
在 Android 上加上搜尋地理位置的功能 Google Places API (地方資訊挑選器 PlacePicker )
這篇我們有提到, PlacesPicker 雖然方便但是有使用上的限制,其實 1,000 次的使用量可是一下子就用完了呢!所以官方也推薦我們直接用 JavaScript 的 API 或是 http 的 API 來使用。

這些也都是有使用限制的,不過 http 的限制額度是算在使用者自己的額度上而不是以我們的 APP 來計算所以相對非常足夠。

API 文件連結

首先我們仍然是要去申請一支api金鑰 (因為和 Android 使用的不同權限所以要另外申請喔)

接著就是重頭戲了:api 輸入和輸出的值就不解釋了,請看官方文件,有超清楚的中文範例。

要注意的有幾點:

  • 這個 API 只有接受 HTTP GET 不接受 POST
  • 經緯度是必填所以在呼叫這支 API 前要搭配 Android 取得經緯度範例 服用
下面是範例:

public class SearchPoi  extends AppCompatActivity {
    AQuery aQuery = new AQuery(this);
    private static final String TAG = "LocationActivity";
    GPSTracker gps;

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        // 宣告使用 GPSTracker
        gps = new GPSTracker(this);
        if(gps.canGetLocation()){
            //取得經緯度
            double latitude = gps.getLatitude();
            double longitude = gps.getLongitude();
            //設定API
            String ListApi = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?key="+getString(R.string.web_api_key)+"&radius=500&location=" + latitude +","+ longitude;
            
            // 呼叫 API
            aQuery.ajax(ListApi, null, JSONObject.class, new AjaxCallback() {
                @Override
                public void callback(String url, JSONObject object, AjaxStatus status) {
                    super.callback(url, object, status);
                    System.out.println("===url===" + url);
                    System.out.println("==obj==" + object);
                    System.out.println("=status=" + status);


                    try {
                        //取得地理位置名稱
                        for(int i = 0;i<=object.getJSONArray("results").length();i++){
                            Log.e("results name",object.getJSONArray("results").getJSONObject(i).getString("name"));
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }
            });
        }else{
            Toast.makeText(this,"error",Toast.LENGTH_SHORT).show();
        }
        

    }

}

沒有留言:

張貼留言