本文使用的是百度地图提供的API来进行转换:百度坐标转换API
坐标转换服务每日请求次数上限为10万次,每次最多支持100个坐标点的转换,若需更高配额,请申请开发者认证以获取更高配额和更及时技术支持。
-------------------------------------------------------------------------------------------------------
最近我申请的认证下来啦,可以提高额度至每天30万次,可在服务列表中查看自己的各项服务限制情况,如果不够还可以点击继续申请更高的配额。
-------------------------------------------------------------------------------------------------------
可能申请开发者认证后,调用的配额可能会有所提高吧。
具体的参数我就不说了,直接来事例:
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啦。
下面来欣赏一张转换过后跟转换之前的行驶线路图:
-----------------------------------------------------------------------------------------------------------------
另外如果是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就能得到对应的经纬度啦。