android安卓根据地名查找经纬度(百度地图)

来源:互联网 发布:mac系统适用的游戏 编辑:程序博客网 时间:2024/05/17 06:49
// 开启一个子线程,进行网络操作,等待有返回结果,使用handler通知UI,senon
    new Thread(newworkTask).start();   


    Map<String, Double> myMap ;
    Map<String, Double> myMap2 ;
    public void getLatAndLngByAddress(String addr){
        String address = "";
        String lat = "";
        String lng = "";
        try {
            address = java.net.URLEncoder.encode(addr,"UTF-8");
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();
        }
        String url = String.format("http://api.map.baidu.com/geocoder/v2/?"
                +"ak=4rcKAZKG9OIl0wDkICSLx8BA&output=json&address=%s",address);
        URL myURL = null;
        URLConnection httpsConn = null;
        //进行转码
        try {
            myURL = new URL(url);
        } catch (MalformedURLException e) {


        }
        try {
            httpsConn = (URLConnection) myURL.openConnection();
            if (httpsConn != null) {
                InputStreamReader insr = new InputStreamReader(
                        httpsConn.getInputStream(), "UTF-8");
                BufferedReader br = new BufferedReader(insr);
                String data = null;
                if ((data = br.readLine()) != null) {
                    //判断查询到的数据是否可用,status=0正确,status=1为未查询到
                    Log.e("msg","这是获取到的地理信息"+data);
                    if(data.substring(data.indexOf("\"status\":")+("\"status\":").length(),data.indexOf(",\"")).equals("0")){
                        lat = data.substring(data.indexOf("\"lat\":")
                                + ("\"lat\":").length(), data.indexOf("},\"precise\""));
                        lng = data.substring(data.indexOf("\"lng\":")
                                + ("\"lng\":").length(), data.indexOf(",\"lat\""));
                    }else{
                        lat = ""+0;
                        lng = ""+0;
                    }
                }
                insr.close();
            }
        } catch (IOException e) {


        }
        Map<String, Double> map = new HashMap<String, Double>();
        map.put("lat", Double.parseDouble(lat));
        map.put("lng", Double.parseDouble(lng));
        myMap =map;
    }
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Log.e("msgg",myMap.get("lat")+"   "+myMap.get("lng"));
            Log.e("msgg",myMap2.get("lat")+"   "+myMap2.get("lng"));
            // UI界面的更新等相关操作
            startLat = new LatLng(myMap.get("lat"),myMap.get("lng"));
            endLat = new LatLng(myMap2.get("lat"),myMap2.get("lng"));
   //根据经纬度去获取导航路线的方法
            SearchButtonProcess(startLat,endLat);
        }
    };
    /**
     * 网络操作相关的子线程,senon
     */
    Runnable networkTask = new Runnable() {
        @Override
        public void run() {
            // TODO
            // 在这里进行 http request.网络请求相关操作
            getLatAndLngByAddress(startPlace);
            getLatAndLngByAddress2(endPlace);
            Message msg = Message.obtain();
            Bundle data = new Bundle();
            data.putString("value", "请求结果");
            msg.setData(data);
            handler.sendMessage(msg);
        }
    };