java google 地圖 根據經緯度 獲取地址


轉自: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;
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM