`
hyshucom
  • 浏览: 808254 次
文章分类
社区版块
存档分类
最新评论

利用GoogleApi根据经纬度查询地名,和根据地名查询经纬度Java代码

 
阅读更多

  1. importjava.io.BufferedReader;
  2. importjava.io.IOException;
  3. importjava.io.InputStreamReader;
  4. importjava.io.UnsupportedEncodingException;
  5. importjava.net.MalformedURLException;
  6. importjava.net.URL;
  7. importjava.net.URLConnection;
  8. publicclassDemo{
  9. publicstaticvoidmain(String[]args){
  10. Stringaddr=GetAddr("35.8616600","104.1953970");
  11. System.out.println(addr);
  12. //getCoordinate("中国");
  13. }
  14. /**
  15. *根据经纬度反向解析地址,有时需要多尝试几次
  16. *注意:(摘自:http://code.google.com/intl/zh-CN/apis/maps/faq.html
  17. *提交的地址解析请求次数是否有限制?)如果在24小时时段内收到来自一个IP地址超过2500个地址解析请求,或从一个IP
  18. *地址提交的地址解析请求速率过快,Google地图API编码器将用620状态代码开始响应。如果地址解析器的使用仍然过多,则从该IP
  19. *地址对Google地图API地址解析器的访问可能被永久阻止。
  20. *
  21. *@paramlatitude
  22. *纬度
  23. *@paramlongitude
  24. *经度
  25. *@return
  26. */
  27. publicstaticStringGetAddr(Stringlatitude,Stringlongitude){
  28. Stringaddr="";
  29. //也可以是http://maps.google.cn/maps/geo?output=csv&key=abcdef&q=%s,%s,不过解析出来的是英文地址
  30. //密钥可以随便写一个key=abc
  31. //output=csv,也可以是xml或json,不过使用csv返回的数据最简洁方便解析
  32. Stringurl=String.format(
  33. "http://ditu.google.cn/maps/geo?output=csv&key=abcdef&q=%s,%s",
  34. latitude,longitude);
  35. URLmyURL=null;
  36. URLConnectionhttpsConn=null;
  37. try{
  38. myURL=newURL(url);
  39. }catch(MalformedURLExceptione){
  40. e.printStackTrace();
  41. returnnull;
  42. }
  43. try{
  44. httpsConn=(URLConnection)myURL.openConnection();
  45. if(httpsConn!=null){
  46. InputStreamReaderinsr=newInputStreamReader(
  47. httpsConn.getInputStream(),"UTF-8");
  48. BufferedReaderbr=newBufferedReader(insr);
  49. Stringdata=null;
  50. if((data=br.readLine())!=null){
  51. System.out.println(data);
  52. String[]retList=data.split(",");
  53. if(retList.length>2&&("200".equals(retList[0]))){
  54. addr=retList[2];
  55. addr=addr.replace("/"","");
  56. }else{
  57. addr="";
  58. }
  59. }
  60. insr.close();
  61. }
  62. }catch(IOExceptione){
  63. e.printStackTrace();
  64. returnnull;
  65. }
  66. returnaddr;
  67. }
  68. publicstaticvoidgetCoordinate(Stringaddr)
  69. {
  70. Stringaddrs="";
  71. Stringaddress=null;
  72. try{
  73. address=java.net.URLEncoder.encode(addr,"UTF-8");
  74. }catch(UnsupportedEncodingExceptione1){
  75. e1.printStackTrace();
  76. };
  77. Stringoutput="csv";
  78. Stringkey="abc";
  79. Stringurl=String.format("http://maps.google.com/maps/geo?q=%s&output=%s&key=%s",address,output,key);
  80. URLmyURL=null;
  81. URLConnectionhttpsConn=null;
  82. //进行转码
  83. try{
  84. myURL=newURL(url);
  85. }catch(MalformedURLExceptione){
  86. e.printStackTrace();
  87. }
  88. try{
  89. httpsConn=(URLConnection)myURL.openConnection();
  90. if(httpsConn!=null){
  91. InputStreamReaderinsr=newInputStreamReader(
  92. httpsConn.getInputStream(),"UTF-8");
  93. BufferedReaderbr=newBufferedReader(insr);
  94. Stringdata=null;
  95. if((data=br.readLine())!=null){
  96. System.out.println(data);
  97. String[]retList=data.split(",");
  98. /*
  99. Stringlatitude=retList[2];
  100. Stringlongitude=retList[3];
  101. System.out.println("纬度"+latitude);
  102. System.out.println("经度"+longitude);
  103. */
  104. if(retList.length>2&&("200".equals(retList[0]))){
  105. addrs=retList[2];
  106. addrs=addr.replace("/"","");
  107. }else{
  108. addrs="";
  109. }
  110. }
  111. insr.close();
  112. }
  113. }catch(IOExceptione){
  114. e.printStackTrace();
  115. }
  116. System.out.println(addrs);
  117. }
  118. }
  119. ============================
  120. 国内的详细地址有其他地址解析服务器提供更加详细的地址解析服务,或者把数据请求后放到自己服务器,下次用户请求先从自己服务器请求,找不到地址时再去Google请求。

注:<uses-permission android:name="android.permission.INTERNET" />

google的查询不精确而且速度非常慢 ,有一些地址查询不到会报错

但是用国内的ditu.google.cn开头的既精确速度快,本人目前测试还没有出现问题

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics