package com.util;
/**
 * @author 作者姓名: dubaohui
 * @version 创建时间：2015-10-8 下午3:45:59
 * 类说明:百度地址反解析
 */
import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.net.URL;  
import java.net.URLEncoder;  
import java.util.HashMap;  
import java.util.Map;  
  
import org.apache.commons.lang.StringUtils;  
  
public class BaiduLatitudeUtils {  
      
    public static final String KEY_1 = "46aaaddd44217ffb415f20a5a4466bcd";  
  
      
    /** 
     * 返回输入地址的经纬度坐标 
     * key lng(经度),lat(纬度) 
     */  
    public static Map<String,String> getGeocoderLatitude(String address){  
        BufferedReader in = null; 
        Map<String,String> map = new HashMap<String,String>();  
        try {  
            //将地址转换成utf-8的16进制  
            address = URLEncoder.encode(address, "UTF-8");  
//       如果有代理，要设置代理，没代理可注释  
//      System.setProperty("http.proxyHost","192.168.1.188");  
//      System.setProperty("http.proxyPort","3128");  
            URL tirc = new URL("http://api.map.baidu.com/geocoder?address="+ address +"&output=json&key="+ KEY_1);  

            in = new BufferedReader(new InputStreamReader(tirc.openStream(),"UTF-8"));  
            String res;  
            StringBuilder sb = new StringBuilder("");  
            while((res = in.readLine())!=null){  
                sb.append(res.trim());  
            }  
            String str = sb.toString();  
           
            if(StringUtils.isNotEmpty(str)){  
                int lngStart = str.indexOf("lng\":");  
                int lngEnd = str.indexOf(",\"lat");  
                int latEnd = str.indexOf("},\"precise");  
                if(lngStart > 0 && lngEnd > 0 && latEnd > 0){  
                    String  lng =str.substring(lngStart+5, lngEnd); 
                    String lat = str.substring(lngEnd+7, latEnd);  
                    map.put("lng", lng);  //经度
                    map.put("lat", lat);  //纬度
                }else{
                    map.put("lng", "0");  //经度
                    map.put("lat", "0");  //纬度
                } 
            }else{
                map.put("lng", "0");  //经度
                map.put("lat", "0");  //纬度
            }  
        }catch (Exception e) {  
            e.printStackTrace();  
        }finally{  
            try {  
                in.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
        return map;   
    }  
    public static void main(String args[]){  
        Map<String, String> json = BaiduLatitudeUtils.getGeocoderLatitude("上海沪南路2419弄");  
        System.out.println("lng : "+json.get("lng"));  //经度
        System.out.println("lat : "+json.get("lat"));  //纬度
    }  
      
}  
