地址解析工具

来源:互联网 发布:淘宝冒用厂名厂址 编辑:程序博客网 时间:2024/06/16 23:16

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

地址解析分为地址正向解析(从地址得到对应的经纬度)和反向解析(通过经纬度得到对应位置),反响解析还好说,毕竟通过经纬度在地图上进行标注,只要和地图相关的软件都支持,如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);    
                        
                    }
                    
                });
.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }

说明: 通过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格式数据返回,然后对结果进行解析
原创粉丝点击