轉自:http://www.myexception.cn/mobile/645417.html
java google map 根據經緯度 獲取地址
今天使用android自帶的Geocoder類 發現獲取的地址信息總是為空,查了半天沒找到原因,
還是用url接口吧
下面的是代碼示例
google map 的反響地址解析是指在已知經緯度的條件下由google map解析出該地址的具體位置。
舉個例子來說,在知道經緯度(”31.71099194″,”120.4019789″)解析后的結果是“中華人民共和國江蘇省無錫市江陰市富南路江陰市針織服裝廠”。
google map提供的反向地址解析的地址有兩個,一個是http://maps.google.cn還有一個是http://ditu.google.cn,這兩個我都做了測試,前一個地址對於大部分中國的地址都能夠正常解析,但有少部分解析出的結果是亂碼(比如上面的地址),第二個ditu.google.cn目前測試還沒有發現問題,地址都能正常解析。下面給出代碼,希望對大家有所幫助,如在測試過程中遇到問題也請與我聯系
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class Test {
public static void main(String[] args) {
String addr = geocodeAddr("31.71099194", "120.4019789");// (38.9146943,121.612382);
System.out.println(addr);
}
/**
* 根據經緯度反向解析地址,有時需要多嘗試幾次
* 注意:(摘自:http://code.google.com/intl/zh-CN/apis/maps/faq.html
* 提交的地址解析請求次數是否有限制?) 如果在 24 小時時段內收到來自一個 IP 地址超過 15,000 個地址解析請求, 或從一個 IP
* 地址提交的地址解析請求速率過快,Google 地圖 API 編碼器將用 620 狀態代碼開始響應。 如果地址解析器的使用仍然過多,則從該 IP
* 地址對 Google 地圖 API 地址解析器的訪問可能被永久阻止。
*
* @param latitude
* 緯度
* @param longitude
* 經度
* @return
*/
public static String geocodeAddr(String latitude, String longitude) {
String addr = "";
// 也可以是http://maps.google.cn/maps/geo?output=csv&key=abcdef&q=%s,%s,不過解析出來的是英文地址
// 密鑰可以隨便寫一個key=abc
// output=csv,也可以是xml或json,不過使用csv返回的數據最簡潔方便解析
String url = String.format("http://ditu.google.cn/maps/geo?output=csv&key=abcdef&q=%s,%s",latitude, longitude);
URL myURL = null;
URLConnection httpsConn = null;
try {
myURL = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
return null;
}
try {
httpsConn = (URLConnection) myURL.openConnection();
if (httpsConn != null) {
InputStreamReader insr = new InputStreamReader(httpsConn.getInputStream(), "UTF-8");
BufferedReader br = new BufferedReader(insr);
String data = null;
if ((data = br.readLine()) != null) {
System.out.println(data);
String[] retList = data.split(",");
if (retList.length > 2 && ("200".equals(retList[0]))) {
addr = retList[2];
addr = addr.replace("\"", "");
} else {
addr = "";
}
}
insr.close();
}
} catch (IOException e) {
e.printStackTrace();
return null;
}
return addr;
}
}