Java调用百度API将GPS坐标转为百度地图坐标

本文使用的是百度地图提供的API来进行转换:百度坐标转换API

坐标转换服务每日请求次数上限为10万次,每次最多支持100个坐标点的转换,若需更高配额,请申请开发者认证以获取更高配额和更及时技术支持。

-------------------------------------------------------------------------------------------------------

最近我申请的认证下来啦,可以提高额度至每天30万次,可在服务列表中查看自己的各项服务限制情况,如果不够还可以点击继续申请更高的配额。

Java调用百度API将GPS坐标转为百度地图坐标_第1张图片

-------------------------------------------------------------------------------------------------------

可能申请开发者认证后,调用的配额可能会有所提高吧。

具体的参数我就不说了,直接来事例:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.apache.log4j.Logger;

public class AppSendUtils {
	private static final Logger Log = Logger.getLogger(AppSendUtils.class);
	public static String connectURL(String dest_url, String commString) {
		String rec_string = "";
		URL url = null;
		HttpURLConnection urlconn = null;
		OutputStream out = null;
		BufferedReader rd = null;
		try {
			url = new URL(dest_url);
			urlconn = (HttpURLConnection) url.openConnection();
			urlconn.setReadTimeout(1000 * 30);
			//urlconn.setRequestProperty("content-type", "text/html;charset=UTF-8");
			urlconn.setRequestMethod("POST");
			urlconn.setDoInput(true); 
			urlconn.setDoOutput(true);
			out = urlconn.getOutputStream();
			out.write(commString.getBytes("UTF-8"));
			out.flush(); 
			out.close();
			rd = new BufferedReader(new InputStreamReader(urlconn.getInputStream()));
			StringBuffer sb = new StringBuffer();
			int ch;
			while ((ch = rd.read()) > -1)
				sb.append((char) ch);
			rec_string = sb.toString();
		} catch (Exception e) {
			Log.error(e, e);
			return "";
		} finally {
			try {
				if (out != null) {
					out.close();
				}
				if (urlconn != null) {
					urlconn.disconnect();
				}
				if (rd != null) {
					rd.close();
				}
			} catch (Exception e) {
				Log.error(e, e);
			}
		}
		return rec_string;
	}

	public static void main(String[] args) {
		String coords = "106.6519570767,26.6245856997";
		String result =connectURL("http://api.map.baidu.com/geoconv/v1/?coords="+coords+"&from=1&to=5&output=json&ak=***你的ak***","");
		System.out.println(result);
	}
}
调用结果: {"status":0,"result":[{"x":106.66204066751,"y":26.627042409475}]}

如果你的应用不用特别精准的定位的话,没有必要转换这一次~比如你只需要定位当前城市,就没有必要转换啦。

值得注意的是在批量转换的时候,最后的";"不能要

比如这样的请求:String coords = "106.6523052200,26.6246474700;106.6524859700,26.6251858100;106.6519570767,26.6245856997;";

则会报错:{"status":24,"message":"param error:coords format error","result":[]}

把字符串中最后一个“;”去掉就OK啦。

下面来欣赏一张转换过后跟转换之前的行驶线路图:

Java调用百度API将GPS坐标转为百度地图坐标_第2张图片




-----------------------------------------------------------------------------------------------------------------

另外如果是Android的话,只需要集成百度计算工具的sdk就能直接调用啦:

//将GPS设备采集的原始GPS坐标转换成百度坐标    
				CoordinateConverter converter  = new CoordinateConverter();    
				converter.from(CoordType.GPS);
				//sourceLatLng待转换坐标
				converter.coord(new LatLng(sysGps.getLatitude(),sysGps.getLongitude()));
				LatLng desLatLng = converter.convert();
其中new LatLng(纬度,经度)

得到的desLatLng对象,直接点属性desLatLng.longitude,desLatLng.latitude就能得到对应的经纬度啦。
Java调用百度API将GPS坐标转为百度地图坐标_第3张图片



你可能感兴趣的:(百度地图,GPS)