前置条件
由于我们是使用百度提供的地理API接口,所以事先我们需要创建百度账号,并创建百度应用(因为我们要用应用到的ak)~~~~ 免费 不要钱的…
我们先来创建百度应用
百度链接: http://lbsyun.baidu.com/apiconsole/key
创建完毕之后我们就可以正式的开发了 |
---|
*通过本章节你将了解到
*
1,通过地理位置,获取到详细的经纬度
先导入一下我们的httpclient
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
代码语言:javascript复制 /**
* http://lbsyun.baidu.com/apiconsole/key
* <百度开发者>用户申请注册的key,自v2开始参数修改为“ak”,之前版本参数为“key” 申请ak
*/
final static String AK = "edGc5mIugVxx7lwUx9YpraKeWmExG64o";
/**
* 地理编码 URL
*/
final static String ADDRESS_TO_LONGITUDEA_URL = "http://api.map.baidu.com/geocoding/v3/?output=json&location=showLocation";
/**
* 地理编码
* @param address (广东省广州市黄埔区)
* 详细的位置信息
* @return
*/
public ReturnLocationBean AddressTolongitudea(String address) {
if(StringUtils.isBlank(address)){
return null;
}
String url = ADDRESS_TO_LONGITUDEA_URL "&ak=" AK "&address=" address;
log.info("请求url:" url);
HttpClient client = HttpClients.createDefault(); // 创建默认http连接
HttpPost post = new HttpPost(url);// 创建一个post请求
try {
HttpResponse response = client.execute(post);// 用http连接去执行get请求并且获得http响应
HttpEntity entity = response.getEntity();// 从response中取到响实体
String html = EntityUtils.toString(entity);// 把响应实体转成文本
log.info("返回信息:" html);
// JSON转对象
return JSON.parseObject(html, ReturnLocationBean.class);
} catch (Exception e) {
log.error("地理编码[异常],", e);
return null;
}
返回信息
2,通过经纬度,获取到详细地理位置信息**
代码语言:javascript复制 /**
* 逆地理编码 URL
*/
final static String LONGITUDE_TO_ADDRESS_URL = "http://api.map.baidu.com/reverse_geocoding/v3/?output=json&coordtype=BD09&pois=1";
/**
* 逆地理编码
* @param lat
* 纬度 23.1067,
* @param lng
* 经度 113.325
* @return
*/
public ReturnLocationBean longitudeToAddress(float lat, float lng) {
String url = LONGITUDE_TO_ADDRESS_URL "&ak=" AK "&location=" lat "," lng;
log.info("请求url:" url);
HttpClient client = HttpClients.createDefault(); // 创建默认http连接
HttpPost post = new HttpPost(url);// 创建一个post请求
try {
HttpResponse response = client.execute(post);// 用http连接去执行get请求并且获得http响应
HttpEntity entity = response.getEntity();// 从response中取到响实体
String html = EntityUtils.toString(entity);// 把响应实体转成文本
log.info("返回信息:" html);
// JSON转对象
return JSON.parseObject(html, ReturnLocationBean.class);
} catch (Exception e) {
log.error("逆地理编码[异常],", e);
return null;
}
}
返回信息如下
3,不通源坐标之间的相互转换
代码语言:javascript复制 之所以会写这个是因为我公众号的经纬度是腾讯提供的。。。。所以要转一次。。。。。
代码语言:javascript复制 void fun() throws IOException{
String url = "http://api.map.baidu.com/geoconv/v1/?coords=113.538248,23.132953&from=1&to=5&ak=edGc5mIugVxx7lwUx9YpraKeWmExG64o";
HttpClient client = HttpClients.createDefault();// 创建默认http连接
HttpPost post = new HttpPost(url);// 创建一个post请求
HttpResponse response = client.execute(post);// 用http连接去执行get请求并且获得http响应
HttpEntity entity = response.getEntity();// 从response中取到响实体
String html = EntityUtils.toString(entity);// 把响应实体转成文本
System.out.println("返回信息" html);
}
from参数说明 源坐标类型: 1:GPS设备获取的角度坐标,WGS84坐标; 2:GPS获取的米制坐标、sogou地图所用坐标; 3:google地图、soso地图、aliyun地图、mapabc地图和amap地图所用坐标,国测局(GCJ02)坐标; 4:3中列表地图坐标对应的米制坐标; 5:百度地图采用的经纬度坐标; 6:百度地图采用的米制坐标; 7:mapbar地图坐标; 8:51地图坐标 返回信息
{“status”:0,“result”:[{“x”:113.54988989895114,“y”:23.13628309504525}]}
x float 经度 y float 纬度