地图开发--逆地理编码regeocoding

来源:互联网 发布:sql注入测试网站 编辑:程序博客网 时间:2024/05/29 07:20

      应“远才科技公司”需求,开发一个将在服务器上将gps坐标转换成地理名(主要是坐标的道路名)的功能,也就是逆地理编码的功能。

      网上很容易找到JS版本的逆地理编码程序,百度、阿里都是现在的例子、网页源代码可以看。可要是不通过JS、网页方式逆地理编码,就要花点心思去找找了。经过一阵子的百度、谷歌,没有现成的材料。在比较各大地图API时发现,阿里地图API说明极少,显得好可怜,百度地图有正儿八经的文档,详细的说明。可偏偏在逆地理编码方面,百度地图提供的访问调用方式比阿里的要麻烦,并且效果远不如阿里地图的regeocoding。如下所示:

阿里的逆地理编码regeocoding请求:

http://gc.ditu.aliyun.com/regeocoding?l=39.938133,116.395739&type=001

阿里的这个请求每天不限次数。


百度的逆地理编码regeocoding请求:

http://api.map.baidu.com/geocoder/v2/?ak=E4805d16520de693a3fe707cdc962045&callback=renderReverse&location=39.983424,116.322987&output=xml&pois=1 
百度的这个请求,需要申请ak(key),并且每天只能访问5000次,几乎只可以学个作业玩玩。

对比之后,果断选用阿里的逆地理编码,参考学习地址: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

包,就会报错,得把这些包都引用进来。


    以上就是今天的心得,写完了。感谢阿里,感谢马云,感谢我的远才科技的兄弟们!



0 0
原创粉丝点击