java调用百度地图API根据地理位置获取经纬度

前置条件

由于我们是使用百度提供的地理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>
	/**
	 * 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,通过经纬度,获取到详细地理位置信息**

	/**
	 * 逆地理编码 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,不通源坐标之间的相互转换

 之所以会写这个是因为我公众号的经纬度是腾讯提供的。。。。所以要转一次。。。。。
 
  
     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 纬度


  • 15
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
您可以使用百度地图API的地理编码服务实现该功能,具体步骤如下: 1. 创建百度开发者账号并申请地图API权限。 2. 在Java项目中引入百度地图APIJava SDK。 3. 调用地理编码服务的API,传入地址参数即可获取对应的经纬度信息。 以下是Java代码示例: ``` import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.utils.CoordinateConverter; import com.baidu.mapapi.utils.CoordinateConverter.CoordType; import com.baidu.mapapi.utils.HttpUtil; public class GeoCoder { private static final String GEOCODER_URL = "http://api.map.baidu.com/geocoder/v2/"; private static final String AK = "your_ak"; // 替换成申请的AK public static LatLng getLatLng(String address) { String url = GEOCODER_URL + "?address=" + address + "&output=json&ak=" + AK; String response = HttpUtil.get(url, "utf-8"); JSONObject jsonObject = JSONObject.parseObject(response); int status = jsonObject.getInteger("status"); if (status == 0) { JSONObject result = jsonObject.getJSONObject("result"); JSONObject location = result.getJSONObject("location"); double lat = location.getDouble("lat"); double lng = location.getDouble("lng"); // 将百度地图坐标转换为GPS坐标 LatLng baiduLatLng = new LatLng(lat, lng); CoordinateConverter converter = new CoordinateConverter(); converter.from(CoordType.COMMON); converter.coord(baiduLatLng); LatLng gpsLatLng = converter.convert(); return gpsLatLng; } else { return null; } } } ``` 其中,AK是百度地图API的密钥,需要替换成您自己申请的密钥。该代码实现了将百度地图坐标转换为GPS坐标,如果不需要转换可以去掉相应的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

终有链响

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值