Java百度地图经纬度纠偏
在国内使用电子地图获取到的经纬度都不是真实的经纬度,而是经过一定的算法在真实的经纬度上添加了一个偏移量,且不同的地图有不同的算法。现在告诉大家在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方法进行批量消偏,代码如下:
import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import net.sf.json.JSONObject; public class Remove {
public static void main(String[] args) {
try {
//这里只有一条数据,有多条数据的话可以用循环,然后拼接url字符串
String url = "http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=113.540124&y=23.517846";
JSONObject json = getAllEmployee(url);
//将经纬度解码后进行打印
String latitude = decode(json.getString("x"));
String longitude = decode(json.getString("y"));
System.out.println("经度为:" + latitude);
System.out.println("纬度为:" + longitude);
} catch (Exception e) {
e.printStackTrace();
}
} /**
* Java后台访问url链接,返回JSON格式的数据
* @return
*/
public static JSONObject getAllEmployee(String url) {
try {
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
ResponseHandler<JSONObject> responseHandler = new ResponseHandler<JSONObject>() {
// 成功调用连接后,对返回数据进行的操作
public JSONObject handleResponse(final HttpResponse response)
throws ClientProtocolException, IOException {
int status = response.getStatusLine().getStatusCode();
if (status >= 200 && status < 300) {
// 获得调用成功后 返回的数据
HttpEntity entity = response.getEntity();
if (null != entity) {
String result = EntityUtils.toString(entity);
// 根据字符串生成JSON对象
JSONObject resultObj = JSONObject.fromObject(result);
return resultObj;
} else {
return null;
}
} else {
throw new ClientProtocolException("Unexpected response status: " + status);
}
}
};
// 返回的json对象
JSONObject responseBody = httpclient.execute(httpPost, responseHandler);
return responseBody;
} catch (Exception e) {
e.printStackTrace();
return null;
}
} /**
* Base64解码
* @param str
* @return
*/
public static String decode(String str) {
byte[] bt = null;
String s= "";
try {
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
bt = decoder.decodeBuffer(str);
s = new String(bt, "GB2312");
} catch (IOException e) {
e.printStackTrace();
}
return s;
}
}
三、运行上述代码所需的jar包如下:
1、http://pan.baidu.com/s/1qX7Zipe 密码:0rqq
Java百度地图经纬度纠偏的更多相关文章
- 百度地图坐标纠偏和转换工具和DLL
百度一直以来都是个即想装出一副拥抱互联网开放的样子,又为了短期商业利益封闭自己的公司,模仿谷歌地图,开放了自己的百度地图 API,为了防止别人盗用其数据和用户自由迁移,地图相比于火星坐标,又更加封闭, ...
- 百度地图经纬度转换JS版
//百度地图的坐标转换,由于百度地图在GCJ02协议的基础上又做了一次处理,变为 BD09协议的坐标,以下是坐标的转化方式,可以方便和其他平台转化 jQuery.MapConvert = { x_pi ...
- [转贴]JAVA 百度地图SDK地图学习——实现定位功能
之前已经完成了百度地图SDK和百度定位SDK的配置. http://my.oschina.net/u/1051634/blog/180880 实现百度定位的功能,最好仔细看看官方的文档,看了好几次才有 ...
- 百度地图经纬度批量查找功能XGeocoding使用手册
<XGeocoding使用手册> 1.下载XGeocoding V2 http://www.gpsspg.com/xgeocoding/download/ 2.解压XGeocoding_v ...
- 百度地图经纬度和地址互转(Java代码)
这是基于springmvc+mybatis 的一个controller.如果不是这个框架,可以把方法实体抽到自己写的一个类中,然后再测试 package com.uwitec.controller.s ...
- java 百度地图判断两点距离1
package baiduApi; /** * 类名称:PointToDistance * 类描述:两个百度经纬度坐标点,计算两点距离 * 创建人:钟志铖 * 创建时间:2014-9-7 上午10:1 ...
- 爬虫——python——百度地图经纬度查询——经纬度查看地点地名——利用百度API获取地名经纬度——爬取所有的中国地址
import requests address = '40.8587960,86.866991' url = 'http://api.map.baidu.com/geocoder?output=jso ...
- python3根据地址批量获取百度地图经纬度
python3代码如下: import requests import time def get_mercator(addr): url= 'http://api.map.baidu.com/geoc ...
- java 百度地图判断两点距离2
package baiduApi; public class BaiDuMap { static double DEF_PI = 3.14159265359; // PI static double ...
随机推荐
- SaltStack 的远程执行机制
html,body { font-size: 15px } body { font-family: Helvetica, "Hiragino Sans GB", "微软雅 ...
- TensorFlow实战之Softmax Regression识别手写数字
关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2018年02月21日 23:10:04所撰写内容(http://blog.c ...
- HTML 5.2 新特性介绍
本文译自 What's New in HTML 5.2? 作者 Ire Aderinokun,是一位前端开发者和 UI 设计师. 就在不到一个月之前,HTML 5.2 成为了 W3C 的官方推荐规范( ...
- Websocket原理及使用场景[转载]
WebSocket的使用场景 社交聊天.弹幕.多玩家游戏.协同编辑.股票基金实时报价.体育实况更新.视频会议/聊天.基于位置的应用.在线教育.智能家居等需要高实时的场景 由轮询到WebSocket 1 ...
- Java线程池ThreadPoolExector的源码分析
前言:线程是我们在学习java过程中非常重要的也是绕不开的一个知识点,它的重要程度可以说是java的核心之一,线程具有不可轻视的作用,对于我们提高程序的运行效率.压榨CPU处理能力.多条线路同时运行等 ...
- php 生成缩略图
$src = '4.jpg'; list($width,$height) = getimagesize($src); $im = imagecreatefromjpeg($src); $panl = ...
- golang GET 出现 x509: certificate signed by unknown authority
我们编写一个Go程序来尝试与这个HTTPS server建立连接并通信. //gohttps/4-https/client1.gopackage main import ( "fmt& ...
- ansible实践4- 管理配置文件
生产环境中大多时候是需要管理配置文件的,安装软件包只是在初始化环境的时候用一下.下面我们来写个管理nginx配置文件的playbook mkdir -p /etc/ansible/nginx_c ...
- 五分钟了解Hash算法
Hash算法详解 想象一下如果高级语言(Java,C++ ,C#)中如果没有实现类似List.Map等数据结构,企业级应用开发将是多么痛苦的事吧? Key-Value这种数据结构对于数据处理非常方便. ...
- 获取登陆用户的ip
function getip(){ static $ip = null; if($ip !=null) return $ip; if(getenv('REMOTE_ADDR') ...