地址解析工具

最近由于需要,完成了一个地址批量解析的工具,有一些收获,在这做一些记录

地址解析分为地址正向解析(从地址得到对应的经纬度)和反向解析(通过经纬度得到对应位置),反响解析还好说,毕竟通过经纬度在地图上进行标注,只要和地图相关的软件都支持,如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;i
  
  

  
   
   
                            var 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-All5BF6PoaKBxRWWERQkkZEcWl9sx6981Q5nE3NYh4sd7w";

		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;
	}
通过HttpClient调用 http://maps.google.com/maps/geo,得到csv格式数据返回,然后对结果进行解析
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值