2010-03-02 67 views
2

在我的應用程序中,我想通過提供城市來獲取我使用http://www.google.com/ig/api?weather=「」的天氣報告。但對我而言,只有經度和緯度可用通過提供lat和long獲取地點名稱

我怎樣才能得到經緯度的地名。

+4

只是一個小竅門:用一個句子字詞的任意組合「給我德codez PLZ」是一個壞主意,並且是不必要的計算器。 – Epaga 2010-03-02 14:13:47

+1

但是,額外的話真的使問題無效?我們能不能幫助他解析xml字符串的問題,併爲他的開發建議一個省力的路徑? – Kieveli 2010-03-02 14:26:02

+0

@Kieveli好點。我只是刪除了所有的噪音,現在問題讀得更好。 :) – Epaga 2010-03-02 14:43:58

回答

3

僅供參考,您正在做的是稱爲反向地理編碼。

大多數的Geonames web服務都可以使用JSON,包括findNearby。

谷歌也有一個reverse geocoding webservice

什麼你問的是一個不小的事情 - 一個緯度/經度數據庫幾乎肯定會在XML或JSON來呈現,所以它可能是值得投資的一點點時間和努力。 Android必須有xml/json包裝?

+0

解析XML並不難 - 您不要自己動手,而是使用庫。通常情況下,您可以在1-2天內完成工作! – Kieveli 2010-03-02 14:27:18

2

可以使用Location API獲得Address Object並從那裏

+0

偉大的鏈接。喜歡這個答案。上週我剛剛獲得Android。現在我想爲它編碼=) – Kieveli 2010-03-02 14:47:13

1

得到當地Android有一個名爲Geocoder這個東西類。看看getFromLocation的方法。

3

有沒有需要調用Geocoder,這樣的天氣API,這BTW是不公開的,所以你應該小心,citystatecountry只是信息字段,所以您可以使用它像這樣使用它(假常數):

private static final String URL = "http://www.google.com/ig/api?weather=%s,%s,%s,%d,%d"; 
//... 

final String url = String.format(URL, "city", "state", "country", 
    p.getLatitudeE6(), p.getLongitudeE6()); 
2

在您的方法中傳遞經緯度並獲取相應的地名。不要忘記用戶權限:

public static String getUserLocation(String lat, String lon) { 
    String userlocation = null; 
    String readUserFeed = readUserLocationFeed(lat.trim() + "," + lon.trim()); 
    try { 
     JSONObject Strjson = new JSONObject(readUserFeed); 
     JSONArray jsonArray = new JSONArray(Strjson.getString("results")); 
     userlocation = jsonArray.getJSONObject(1) 
      .getString("formatted_address").toString(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    Log.i("User Location ", userlocation); 
    return userlocation; 
} 

public static String readUserLocationFeed(String address) { 
    StringBuilder builder = new StringBuilder(); 
    HttpClient client = new DefaultHttpClient(); 
    HttpGet httpGet = new HttpGet(
     "http://maps.google.com/maps/api/geocode/json?latlng=" + address 
       + "&sensor=false"); 
    try { 
     HttpResponse response = client.execute(httpGet); 
     StatusLine statusLine = response.getStatusLine(); 
     int statusCode = statusLine.getStatusCode(); 
     if (statusCode == 200) { 
     HttpEntity entity = response.getEntity(); 
     InputStream content = entity.getContent(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(
       content)); 
     String line; 
     while ((line = reader.readLine()) != null) { 
      builder.append(line); 
     } 
     } else { 
     Log.e(ReverseGeocode.class.toString(), "Failed to download file"); 
     } 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return builder.toString(); 
} 
相關問題