在国内使用电子地图获取到的经纬度都不是真实的经纬度,而是经过一定的算法在真实的经纬度上添加了一个偏移量,且不同的地图有不同的算法。现在告诉大家在java中怎样对百度地图进行纠偏,主要实现将真实的经纬度在百度地图上进行显示,消除偏差。

一、若需要消偏的经纬度较少,则直接在浏览器中进行即可,百度提供了相应的API接口

  1、API地址:http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=113.240324&y=23.817349

       from=0:代表传入的是真实经纬度

to=4:代表返回是百度纠偏后,能在百度地图上正确显示出该地址的经纬度

x:经度          y:纬度

返回数据:{"error":0,"x":"MTEzLjI1MjIyMjUxOTg1","y":"MjMuODIwNjM5MTEyNDgy"}

返回的数据经过Base64加密,在网上找个在线Base64解密的网站就可以了

二、若数据量较大,则通过上述方式就不方便了,这里提供Java方法进行批量消偏,代码如下:

  1. import java.io.IOException;
  2. import org.apache.http.HttpEntity;
  3. import org.apache.http.HttpResponse;
  4. import org.apache.http.client.ClientProtocolException;
  5. import org.apache.http.client.ResponseHandler;
  6. import org.apache.http.client.methods.HttpPost;
  7. import org.apache.http.impl.client.CloseableHttpClient;
  8. import org.apache.http.impl.client.HttpClients;
  9. import org.apache.http.util.EntityUtils;
  10. import net.sf.json.JSONObject;
  11.  
  12. public class Remove {
  13. public static void main(String[] args) {
  14. try {
  15. //这里只有一条数据,有多条数据的话可以用循环,然后拼接url字符串
  16. String url = "http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=113.540124&y=23.517846";
  17. JSONObject json = getAllEmployee(url);
  18. //将经纬度解码后进行打印
  19. String latitude = decode(json.getString("x"));
  20. String longitude = decode(json.getString("y"));
  21. System.out.println("经度为:" + latitude);
  22. System.out.println("纬度为:" + longitude);
  23. } catch (Exception e) {
  24. e.printStackTrace();
  25. }
  26. }
  27.  
  28. /**
  29. * Java后台访问url链接,返回JSON格式的数据
  30. * @return
  31. */
  32. public static JSONObject getAllEmployee(String url) {
  33. try {
  34. CloseableHttpClient httpclient = HttpClients.createDefault();
  35. HttpPost httpPost = new HttpPost(url);
  36. ResponseHandler<JSONObject> responseHandler = new ResponseHandler<JSONObject>() {
  37. // 成功调用连接后,对返回数据进行的操作
  38. public JSONObject handleResponse(final HttpResponse response)
  39. throws ClientProtocolException, IOException {
  40. int status = response.getStatusLine().getStatusCode();
  41. if (status >= 200 && status < 300) {
  42. // 获得调用成功后 返回的数据
  43. HttpEntity entity = response.getEntity();
  44. if (null != entity) {
  45. String result = EntityUtils.toString(entity);
  46. // 根据字符串生成JSON对象
  47. JSONObject resultObj = JSONObject.fromObject(result);
  48. return resultObj;
  49. } else {
  50. return null;
  51. }
  52. } else {
  53. throw new ClientProtocolException("Unexpected response status: " + status);
  54. }
  55. }
  56. };
  57. // 返回的json对象
  58. JSONObject responseBody = httpclient.execute(httpPost, responseHandler);
  59. return responseBody;
  60. } catch (Exception e) {
  61. e.printStackTrace();
  62. return null;
  63. }
  64. }
  65.  
  66. /**
  67. * Base64解码
  68. * @param str
  69. * @return
  70. */
  71. public static String decode(String str) {
  72. byte[] bt = null;
  73. String s= "";
  74. try {
  75. sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
  76. bt = decoder.decodeBuffer(str);
  77. s = new String(bt, "GB2312");
  78. } catch (IOException e) {
  79. e.printStackTrace();
  80. }
  81. return s;
  82. }
  83. }

三、运行上述代码所需的jar包如下:

1、http://pan.baidu.com/s/1qX7Zipe        密码:0rqq

Java百度地图经纬度纠偏的更多相关文章

  1. 百度地图坐标纠偏和转换工具和DLL

    百度一直以来都是个即想装出一副拥抱互联网开放的样子,又为了短期商业利益封闭自己的公司,模仿谷歌地图,开放了自己的百度地图 API,为了防止别人盗用其数据和用户自由迁移,地图相比于火星坐标,又更加封闭, ...

  2. 百度地图经纬度转换JS版

    //百度地图的坐标转换,由于百度地图在GCJ02协议的基础上又做了一次处理,变为 BD09协议的坐标,以下是坐标的转化方式,可以方便和其他平台转化 jQuery.MapConvert = { x_pi ...

  3. [转贴]JAVA 百度地图SDK地图学习——实现定位功能

    之前已经完成了百度地图SDK和百度定位SDK的配置. http://my.oschina.net/u/1051634/blog/180880 实现百度定位的功能,最好仔细看看官方的文档,看了好几次才有 ...

  4. 百度地图经纬度批量查找功能XGeocoding使用手册

    <XGeocoding使用手册> 1.下载XGeocoding V2 http://www.gpsspg.com/xgeocoding/download/ 2.解压XGeocoding_v ...

  5. 百度地图经纬度和地址互转(Java代码)

    这是基于springmvc+mybatis 的一个controller.如果不是这个框架,可以把方法实体抽到自己写的一个类中,然后再测试 package com.uwitec.controller.s ...

  6. java 百度地图判断两点距离1

    package baiduApi; /** * 类名称:PointToDistance * 类描述:两个百度经纬度坐标点,计算两点距离 * 创建人:钟志铖 * 创建时间:2014-9-7 上午10:1 ...

  7. 爬虫——python——百度地图经纬度查询——经纬度查看地点地名——利用百度API获取地名经纬度——爬取所有的中国地址

    import requests address = '40.8587960,86.866991' url = 'http://api.map.baidu.com/geocoder?output=jso ...

  8. python3根据地址批量获取百度地图经纬度

    python3代码如下: import requests import time def get_mercator(addr): url= 'http://api.map.baidu.com/geoc ...

  9. java 百度地图判断两点距离2

    package baiduApi; public class BaiDuMap { static double DEF_PI = 3.14159265359; // PI static double ...

随机推荐

  1. Ubuntu下Nginx启动、停止等常用命令

    本文详细介绍Ubuntu下Nginx启动.停止等常用命令.在开发过程中,我们会经常的修改Nginx的配置文件,每次修改配置文件都可以先测试下本次修改的配置文件是否正确,可以利用以下命令: servic ...

  2. [Python Study Notes]文件操作

    文件操作 对文件操作流程 打开文件,可添加filepath打开某绝对路径下的文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 # The_author = 'liu66' # -* ...

  3. [经典] 使用Python批量重命名iPhone拍摄的照片-按照拍摄时间重命名

    #!/usr/bin/env python # -*- coding: utf-8 -*- ''' 批量修改照片文件名称的Python脚本程序. 遍历指定目录(含子目录)的照片文件,根据拍照时间将照片 ...

  4. 使用EL表达式调用java方法

    首先,新建一个类,类中写一个静态方法 public class PrivilegeUtils { public static Boolean checkPrivilegeByName(User use ...

  5. AVFoundation 框架初探究(四)

    叨叨两句 动手写这篇总结时候也是二月底过完年回来上班了,又开始新的一年了,今年会是什么样子?这问题可能得年底再回答自己了.在家窝了那么久,上班还是的接着看我们要看的东西,毕竟我们要做的事还真的太多的. ...

  6. linux shell 和linux 命令的区别?windows shell 和 windows 命令呢?

    shell翻译成壳的意思,它是包裹在linux内核外层的,一个可通过一系列的linux命令对操作系统发出相关指令的人机界面. shell可以通过其条件语句和循环语句等,把一系列linux命令结合在一起 ...

  7. MysqL 磁盘写入策略之innodb_flush_log_at_trx_commit

    本文从参数含义,性能,安全角度阐述两个参数为不同的值时对db 性能,数据的影响,引擎是Innodb的前提下. 取值:0/1/2 innodb_flush_log_at_trx_commit=0,表示每 ...

  8. #pragma预处理命令

    #pragma comment(lib,"XXX.lib") 表示链接XXX.lib这个库,和在工程设置里写上XXX.lib的效果一样. #pragma comment(linke ...

  9. hihoCoder 1015 KMP算法

    题意:经典字符串匹配算法.给定原串和模式串,求模式串在原串中出现的次数.算法讲解 AC代码 #include <cstdio> #include <cmath> #includ ...

  10. D. Number of Parallelograms

    D. Number of Parallelograms 原题链接 time limit per test 4 seconds memory limit per test 256 megabytes Y ...