Geocodding API的 官网地址:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
json示例:
http://api.map.baidu.com/geocoder/v2/?ak=E4805d16520de693a3fe707cdc962045&callback=renderReverse&location=39.983424,116.322987&output=json&pois=1
首先,解释一下上面的url,
ak=百度密匙(根据AK的不同url所带的参数也不同http://api.map.baidu.com/geocoder/v2/?ak=pA2N9r3tH7RFaElIfst6CzlY&callback=renderReverse&location=39.949152,116.443112&output=json&pois=1 ,是不需要参数mcode的)
callback=renderReverse 好像是固定格式
location=39.983424,116.322987 这是纬度和经度
output=返回json或者xml
这里的示例里面并没有提到关于MCODE参数. 就这样直接使用的话,会发现服务器返回如下错误
{“status”:102,”message”:”MCODE参数不存在,mobile类型mcode参数必需”}
后来我发现,其实在ak的后面需要加一个mcode参数,这个参数里面的内容是”SHA1;包名”
eg:http://api.map.baidu.com/geocoder/v2/?
ak=xxxx&
mcode=A:AB:03:E3:62:0B:BF:05:F6:6E;com.xxxx.app.util&
callback=renderReverse&location=39.984578
,116.451345&output=json&pois=1
可能出现的问题,根据返回的string 对象创建Json数据时出现错误,即:
JSONObject obj = new JSONObject(jsonStr);
一个简简单的json解析居然报错!!并且json字符串没错!!!!
是因为UTF-8的BOM头。
解决办法是:
public String JSONTokener(String in) {
// consume an optional byte order mark (BOM) if it exists
if (in != null && in.startsWith(“\ufeff”)) {
in = in.substring(1);
}
return in;
}
SONObject obj = new JSONObject(JSONTokener(jsonStr));
就可以了