- importjava.io.BufferedReader;
- importjava.io.IOException;
- importjava.io.InputStreamReader;
- importjava.io.UnsupportedEncodingException;
- importjava.net.MalformedURLException;
- importjava.net.URL;
- importjava.net.URLConnection;
- publicclassDemo{
- publicstaticvoidmain(String[]args){
- Stringaddr=GetAddr("35.8616600","104.1953970");
- System.out.println(addr);
- //getCoordinate("中国");
- }
- /**
- *根据经纬度反向解析地址,有时需要多尝试几次
- *注意:(摘自:http://code.google.com/intl/zh-CN/apis/maps/faq.html
- *提交的地址解析请求次数是否有限制?)如果在24小时时段内收到来自一个IP地址超过2500个地址解析请求,或从一个IP
- *地址提交的地址解析请求速率过快,Google地图API编码器将用620状态代码开始响应。如果地址解析器的使用仍然过多,则从该IP
- *地址对Google地图API地址解析器的访问可能被永久阻止。
- *
- *@paramlatitude
- *纬度
- *@paramlongitude
- *经度
- *@return
- */
- publicstaticStringGetAddr(Stringlatitude,Stringlongitude){
- Stringaddr="";
- //也可以是http://maps.google.cn/maps/geo?output=csv&key=abcdef&q=%s,%s,不过解析出来的是英文地址
- //密钥可以随便写一个key=abc
- //output=csv,也可以是xml或json,不过使用csv返回的数据最简洁方便解析
- Stringurl=String.format(
- "http://ditu.google.cn/maps/geo?output=csv&key=abcdef&q=%s,%s",
- latitude,longitude);
- URLmyURL=null;
- URLConnectionhttpsConn=null;
- try{
- myURL=newURL(url);
- }catch(MalformedURLExceptione){
- e.printStackTrace();
- returnnull;
- }
- try{
- httpsConn=(URLConnection)myURL.openConnection();
- if(httpsConn!=null){
- InputStreamReaderinsr=newInputStreamReader(
- httpsConn.getInputStream(),"UTF-8");
- BufferedReaderbr=newBufferedReader(insr);
- Stringdata=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(IOExceptione){
- e.printStackTrace();
- returnnull;
- }
- returnaddr;
- }
- publicstaticvoidgetCoordinate(Stringaddr)
- {
- Stringaddrs="";
- Stringaddress=null;
- try{
- address=java.net.URLEncoder.encode(addr,"UTF-8");
- }catch(UnsupportedEncodingExceptione1){
- e1.printStackTrace();
- };
- Stringoutput="csv";
- Stringkey="abc";
- Stringurl=String.format("http://maps.google.com/maps/geo?q=%s&output=%s&key=%s",address,output,key);
- URLmyURL=null;
- URLConnectionhttpsConn=null;
- //进行转码
- try{
- myURL=newURL(url);
- }catch(MalformedURLExceptione){
- e.printStackTrace();
- }
- try{
- httpsConn=(URLConnection)myURL.openConnection();
- if(httpsConn!=null){
- InputStreamReaderinsr=newInputStreamReader(
- httpsConn.getInputStream(),"UTF-8");
- BufferedReaderbr=newBufferedReader(insr);
- Stringdata=null;
- if((data=br.readLine())!=null){
- System.out.println(data);
- String[]retList=data.split(",");
- /*
- Stringlatitude=retList[2];
- Stringlongitude=retList[3];
- System.out.println("纬度"+latitude);
- System.out.println("经度"+longitude);
- */
- if(retList.length>2&&("200".equals(retList[0]))){
- addrs=retList[2];
- addrs=addr.replace("/"","");
- }else{
- addrs="";
- }
- }
- insr.close();
- }
- }catch(IOExceptione){
- e.printStackTrace();
- }
- System.out.println(addrs);
- }
- }
- ============================
- 国内的详细地址有其他地址解析服务器提供更加详细的地址解析服务,或者把数据请求后放到自己服务器,下次用户请求先从自己服务器请求,找不到地址时再去Google请求。
注:<uses-permission android:name="android.permission.INTERNET" />
google的查询不精确而且速度非常慢 ,有一些地址查询不到会报错
但是用国内的ditu.google.cn开头的既精确速度快,本人目前测试还没有出现问题