地址解析工具

  最近由于需要,完成了一个地址批量解析的工具,有一些收获,在这做一些记录
  地址解析分为地址正向解析(从地址得到对应的经纬度)和反向解析(通过经纬度得到对应位置),反响解析还好说,毕竟通过经纬度在地图上进行标注,只要和地图相关的软件都支持,如fusionMap和ammapMap。
  地址正向解析,简称地址解析,我使用的是google提供的api。 具体内容可参考官网。其中有 Api2和Api1,对于免费用户我感觉区别不大。
  我写了两个程序,一个是服务器端,一个是客户端。当时写flex客户端是为了进行测试。服务器端才是为了批量解析,但是在批量解析过程中,碰到一个问题: 解析地址过多会出现错误,刚开始我加入了间隔2秒,没有效果,当时猜测:难道自己解析太频繁,google把我给封了,后来在不同的时间段运行效果并未好转,后来从新将间隔改为2min才搞定,切记切记。而且有些不能批量解析的,在客户端手动却能实现解析,很奇怪。
  客户端代码: var geocoder:ClientGeocoder = new ClientGeocoder(); geocoder.geocode(address.text); geocoder.addEventListener( GeocodingEvent.GEOCODING_SUCCESS,function(event:GeocodingEvent):void {var placemarks:Array = event.response.placemarks;for(var i:int=0;ivar placemark:Placemark=placemarks[0]; result.text=event.target+": "+placemark.address+","+placemark.point; trace(event.target+": "+placemark.address+","+placemark.point); } }); geocoder.addEventListener( GeocodingEvent.GEOCODING_FAILURE,function(event:GeocodingEvent):void { trace(event.target+"Geocoding failed"); result.text=event.toString(); }); loader.addEventListener(Event.COMPLETE,function(event:Event) {var loader:URLLoader=URLLoader(event.target);var datas:XML=XML(loader.data) ;for each (var data:XML in datas.province) { geocoder.geocode(data.@NAME); } });
  说明: 通过text组件输入地址,在EventComplete事件中实现监听,完成地址的解析。
  服务器端代码: private String geoCodeByGoogle(String address) throws IOException, ClientProtocolException { String result="解析失败"; String key="ABQIAAAA0AL-b41DvVq2yvYvsRu7iBTwM0brOpm-All5BF6Poa KBxRWWERQkkZEcWl9sx6981Q5nE3NYh4sd7w"; StringBuilder urlStr=new StringBuilder("http://maps.google.com/maps/geo"); urlStr.append("?q="+address); urlStr.append("&sensor=false&output=csv"); urlStr.append("&key="+key); HttpClient client=new DefaultHttpClient(); if(logger.isDebugEnabled()) { logger.debug("url字符串"+urlStr.toString()); } //System.out.println("url字符串"+urlStr.toString()); HttpGet get=new HttpGet(urlStr.toString()); HttpResponse response=client.execute(get); HttpEntity entity=response.getEntity(); if(entity != null) { result=EntityUtils.toString(entity); entity.consumeContent(); } if(logger.isDebugEnabled()) { logger.debug("google传回结果"+result); } return result; }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值