应“远才科技公司”需求,开发一个将在服务器上将gps坐标转换成地理名(主要是坐标的道路名)的功能,也就是逆地理编码的功能。
网上很容易找到JS版本的逆地理编码程序,百度、阿里都是现在的例子、网页源代码可以看。可要是不通过JS、网页方式逆地理编码,就要花点心思去找找了。经过一阵子的百度、谷歌,没有现成的材料。在比较各大地图API时发现,阿里地图API说明极少,显得好可怜,百度地图有正儿八经的文档,详细的说明。可偏偏在逆地理编码方面,百度地图提供的访问调用方式比阿里的要麻烦,并且效果远不如阿里地图的regeocoding。如下所示:
阿里的逆地理编码regeocoding请求:
阿里的这个请求每天不限次数。
百度的逆地理编码regeocoding请求:
对比之后,果断选用阿里的逆地理编码,参考学习地址:http://ditu.aliyun.com/jsdoc/geocode_api.html#a1_5。
找好方向和方法后,就开始coding了,直接上代码:
public void testUrlRes(String lat,String lng) throws IOException{
//type 001 (100代表道路,010代表POI,001代表门址,111可以同时显示前三项)
String path="http://gc.ditu.aliyun.com/regeocoding?l="+lat+","+lng+"&type=100";
//参数直接加载url后面
URL url=new URL(path);
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
if(conn.getResponseCode()==200){ //200表示请求成功
InputStream is=conn.getInputStream(); //以输入流的形式返回
//将输入流转换成字符串
ByteArrayOutputStream baos=new ByteArrayOutputStream();
byte [] buffer=new byte[1024];
int len=0;
while((len=is.read(buffer))!=-1){
baos.write(buffer, 0, len);
}
if(baos.size() < 1){
LogUtil.log("坐标请求异常.");
return;
}
//得出整个坐标反馈信息
String jsonString=baos.toString();
LogUtil.log(jsonString);
baos.close();
is.close();
//转换成json数据处理
//{"queryLocation":[39.938133,116.395739],"addrList":[{"type":"doorPlate","status":1,"name":"地安门外大街万年胡同1号","admCode":"110102","admName":"北京市,北京市,西城区,","addr":"","nearestPoint":[116.39546,39.93850],"distance":45.804}]}
JSONObject jsonObject = JSONObject.fromObject(jsonString);
String addrList = jsonObject.getString("addrList");
LogUtil.log(addrList); //地址信息
JSONArray jsonarry = JSONArray.fromObject(addrList);
for(int i = 0;i<jsonarry.size();i++){
JSONObject jsonObject2 = jsonarry.getJSONObject(i);
String roadName = jsonObject2.getString("name"); //路名(这才是我最终想要的)
LogUtil.log(roadName);
}
}
}
以上代码说明:1.LogUtil .log()是的写的一个通用方法,相当于System.out.println();2.使用的JSON相关的包文件有:
commons-beanutils-1.7.jar,commons-collections.jar,commons-lang.jar,commons-logging-1.1.1.jar,ezmorph.jar,json-lib-2.4-jdk15.jar,特意贴出这些
JSON相关的包,是因为我在开发中就出现了问题。我是jdk是1.7的,而最新的JSON相关包我只找对jdk1.5版本的,若是只引入json-lib-2.4-jdk15.jar
包,就会报错,得把这些包都引用进来。
以上就是今天的心得,写完了。感谢阿里,感谢马云,感谢我的远才科技的兄弟们!