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
相关推荐
guoyanga 2020-11-10
ALLENJIAO 2020-06-13
shilongdred 2019-11-19
nellson 2019-11-19
songyaping0 2011-07-19
xcjing 2015-11-12
有梦就能实现 2019-09-03
随手一记 2013-08-08
xiaoshe 2014-07-10
deusrwvf 2011-10-08
minggehenhao 2019-06-30
wildelf 2015-09-17
submarineas 2019-06-30
ZZZhangbingyi 2019-06-29
Donutsapps 2019-06-28
silencexiao 2015-11-12
zhaocen0 2019-06-19
xing00 2009-08-11