天天看點

調用百度API擷取具體位置的經緯度資訊

import java.io.BufferedReader;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.net.URL;

import java.net.URLConnection;

import java.net.URLEncoder;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import jxl.Cell;

import jxl.Sheet;

import jxl.Workbook;

import jxl.write.Label;

import jxl.write.WritableSheet;

import jxl.write.WritableWorkbook;

public class GetLatLng {

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        List<String> addressList = new ArrayList<String>();

        String address = null;

        try {

            InputStream is = new FileInputStream("D:\\address.xls");

//            System.out.println("1111");

//            Workbook rwb = Workbook.getWorkbook(is);

            Workbook rwb = Workbook.getWorkbook(is);

//            System.out.println("2222");

            Sheet st = rwb.getSheet(0);

            int rows = st.getRows();

//            System.out.println(rows);

            for(int i=0;i<rows;i++){

                Cell c00 = st.getCell(0,i);//先列後行,從0列1行開始,0列0行是“address”                

                address = c00.getContents();

//                System.out.println(address);

                addressList.add(address);

            }

//            System.out.println(addressList.size());

        } catch (Exception e) {

            // TODO: handle exception

            System.out.println("讀取檔案失敗");

        }

        OutputStream os;

        java.io.File filewrite = new java.io.File("D:/result.xls");

        Map<String,String> map = null;

        try {

            filewrite.createNewFile();

            System.out.println(33333);

             os = new FileOutputStream(filewrite);

             System.out.println(66666);

             WritableWorkbook wwb = Workbook.createWorkbook(os);

             WritableSheet ws = wwb.createSheet("result", 0);

             for(int j=0;j<addressList.size();j++){

//                 System.out.println(j);

//                 System.out.println(addressList.get(j));

                 map = LatitudeUtils.getLatLng(addressList.get(j));

                 if(map!=null){

//                     Label label1= new Label(0,j,addressList.get(j));

//                     ws.addCell(label1);

                     Label label2= new Label(1,j,map.get("lng"));//參數分别是列 行 内容

                     System.out.println(map.get("lng"));

                     ws.addCell(label2);                 

                     Label label3= new Label(2,j,map.get("lat"));

                     System.out.println(map.get("lat"));

                     ws.addCell(label3);

//                     Label label4= new Label(3,j,map.get("precise"));

//                     ws.addCell(label4);

//                     Label label5= new Label(4,j,map.get("confidence"));

//                     ws.addCell(label5);

                 }else{

                     Label label1= new Label(0,j,addressList.get(j));

                     ws.addCell(label1);

                 }

             }

             wwb.write();

             wwb.close();

        } catch (Exception e) {

            // TODO: handle exception

            System.out.println("寫入檔案失敗");

        }

//        System.out.println(addressList.size());

    }

    public static class LatitudeUtils{

        public static final String key = "你自己的Key";

        public static  Map<String,String> getLatLng(String address){

            try{

            address = URLEncoder.encode(address,"UTF-8");

            URL resjson = new URL("https://api.map.baidu.com/geocoder/v2/?address="

                    +address+"&output=json&ak="+key+"&callback=showLocation");

//            URLConnection connect = resjson.openConnection();

//            connect.connect();

            BufferedReader in = null;

            if(resjson.openStream()!=null){

                in = new BufferedReader(new InputStreamReader(resjson.openStream()));

            }

            String res;

            StringBuilder sb = new StringBuilder("");

            while ((res=in.readLine())!=null) {

                sb.append(res.trim());

            }

            in.close();

            String str = sb.toString();

//            System.out.println("return json:"+str);

            Map<String,String> map = null;

            if(str!=null)

            {

                int lngStart = str.indexOf("lng\":");

//                System.out.println(lngStart);

                int lngEnd = str.indexOf(",\"lat");

//                System.out.println(lngEnd);

                int latEnd = str.indexOf("},\"precise");

//                System.out.println(latEnd);

                int preciseEnd = str.indexOf(",\"confidence");

//                System.out.println(preciseEnd);

                int confidenceEnd = str.indexOf(",\"level");

//                System.out.println(confidenceEnd);

                if(lngStart>0&&lngEnd>0&&latEnd>0){

                    String lng = str.substring(lngStart+5,lngEnd);

                    String lat = str.substring(lngEnd+7,latEnd);

                    String precise = str.substring(latEnd+12,preciseEnd);

                    String confidence = str.substring(preciseEnd+14,confidenceEnd);

                    map = new HashMap<String, String>();

                    map.put("lng", lng);

                    map.put("lat", lat);

                    map.put("precise", precise);

                    map.put("confidence", confidence);

                    return map;

                }

            }

            }catch(Exception e){

                e.printStackTrace();

            }

            return null;

        }

    }

}