最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 批量獲取地址間距離工具(支持中轉(zhuǎn)站)

 更新時間:2021年07月11日 12:01:34   作者:秋9  
本文主要介紹了Java批量獲取地址間距離,獲取兩個地址間距離,實現(xiàn)方式比較多,具有一定的參考價值,感興趣的小伙伴們可以參考一下

1獲取兩個地址間距離

獲取兩個地址間距離,實現(xiàn)方式比較多,例如基于百度地圖api,高德地圖api,下面基于高德地圖api實現(xiàn),代碼如下:

    private static String getLonLat(String address)throws Exception{
//返回輸入地址address的經(jīng)緯度信息, 格式是 經(jīng)度,緯度
        String address2 = URLEncoder.encode(address,"UTF-8");
        String queryUrl = "http://restapi.amap.com/v3/geocode/geo?key=aba6ce2149823adf738cdbe6fbb&address="+address2;
 
        String queryResult = getResponse(queryUrl); //高德接品返回的是JSON格式的字符串
       // System.out.println(address+"http://"+queryResult);
        JSONObject jo = new JSONObject().fromObject(queryResult);
 
        JSONArray ja = jo.getJSONArray("geocodes");
 
 
        return new JSONObject().fromObject(ja.getString(0)).get("location").toString();
 
    }
 
    private static Long getDistance(String startLonLat, String endLonLat){
//返回起始地startAddr與目的地endAddr之間的距離,單位:米
 
        Long result = new Long(0);
 
        String queryUrl = "http://restapi.amap.com/v3/distance?key=aba6ce2149823adf738cdbe6fbb&origins="+startLonLat+"&destination="+endLonLat;
 
        String queryResult = getResponse(queryUrl);
 
        JSONObject jo = new JSONObject().fromObject(queryResult);
 
        JSONArray ja = jo.getJSONArray("results");
 
        result = Long.parseLong(new JSONObject().fromObject(ja.getString(0)).get("distance").toString());
 
        return result;
 
 
    }
 
    private static String getResponse(String serverUrl){
 
        StringBuffer result = new StringBuffer();
 
        try {
            URL url = new URL(serverUrl);
 
            URLConnection conn = url.openConnection();
 
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
 
            String line;
 
            while((line = in.readLine()) != null){
                result.append(line);
 
            }
 
            in.close();
 
        } catch (MalformedURLException e) {
            e.printStackTrace();
 
        } catch (IOException e) {
            e.printStackTrace();
 
        }
 
        return result.toString();
 
    }

2起始點、中轉(zhuǎn)點、終點距離實現(xiàn)

距離支持中轉(zhuǎn)站,代碼如下:

    public static Map<String,String> getDis(String start, String middle, String end){
        Map<String,String> map=new Hashtable<String,String>();
        map.put("start",start);
        if(middle!=null){
            map.put("middle",middle);
        }
        map.put("end",end);
        if(start==null||"".equals(start.trim())){
            map.put("distance","起點不能為空");
            return map;
        }
        if(end==null||"".equals(end.trim())){
            map.put("distance","終點不能為空");
            return map;
        }
        Long dis=0l;
        try {
            if(middle==null||"".equals(middle.trim())){//沒有中轉(zhuǎn)點
                String startLonLat = getLonLat(start);
                String endLonLat = getLonLat(end);
                dis = getDistance(startLonLat, endLonLat);
                map.put("middle","");
                map.put("distance",dis+"");
            }else{//有中轉(zhuǎn)點
                String startLonLat = getLonLat(start);
                String middleLonLat = getLonLat(middle);
                String endLonLat = getLonLat(end);
                dis = getDistance(startLonLat, middleLonLat);
                dis =dis+ getDistance(middleLonLat, endLonLat);
                map.put("distance",dis+"");
            }
 
        }catch (Exception e){
            //e.printStackTrace();
            map.put("distance","獲取失敗");
        }
        //System.out.println(dis);
        return map;
    }

3導(dǎo)出Excel文件

導(dǎo)出Excel文件的默認(rèn)如下,共四列,包含起始點,途徑點,終點以及距離

起始點 途徑點 終點 起點到終點距離(米)
北京   石家莊  
北京 天津 石家莊  
浙江省杭州市西湖區(qū)   石家莊藁城市  

直接上代碼

	public void exportExcel(List<Map<String,String>> resultlist,String exportPath)throws Exception{
		ExportData2Excel excel=new ExportData2Excel();
		HSSFWorkbook workbook = excel.generateWorkbook(resultlist);
		File xlsFile = new File(exportPath);
		if(!xlsFile.exists()){
			xlsFile.createNewFile();
		}
		FileOutputStream xlsStream = new FileOutputStream(xlsFile);
		workbook.write(xlsStream);
 
		xlsStream.close();
		xlsStream.flush();
	}
	public HSSFWorkbook generateWorkbook(List<Map<String,String>> orderList)
			throws Exception {
		// 聲明一個工作薄
		HSSFWorkbook wb = new HSSFWorkbook();
		// 聲明一個單子并命名
		HSSFSheet sheet = wb.createSheet("sheet1");
		// 凍結(jié)標(biāo)題(width * height)
		// sheet.createFreezePane(15, 1);
		// 給單子名稱一個長度
		sheet.setDefaultColumnWidth((short) 15);
		// 生成一個樣式
		HSSFCellStyle style = wb.createCellStyle();
		// 設(shè)置表頭顏色
		HSSFFont font = wb.createFont();
		font.setColor(HSSFColor.BLUE.index);
		style.setFont(font);
		// 水平布局 居中
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// 上下居中
		style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		// 不鎖定
		style.setLocked(false);
		// 設(shè)置邊框
		style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下邊框
		style.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左邊框
		style.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上邊框
		style.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右邊框
		// 創(chuàng)建第一行(也可以稱為表頭)
		HSSFRow row = sheet.createRow(0);
		// 樣式字體居中
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		this.createExcelTitle(row, style);
		int k = 0;
		int orderSize = orderList == null ? 0 : orderList.size();
		for (int i = 0; i < orderSize; i++) {
			k++;
			row = sheet.createRow(k);
			this.addExcelContent(row, orderList.get(i));
			// row.createCell((short) 1).setCellValue(new
			// HSSFRichTextString(StringUtil.isNullObject(orderList.get(i).get("orderId")+"")));
			// System.out.println(orderList.get(i));
		}
		return wb;
	}
 
	/**
	 * 
	 * 功能描述:創(chuàng)建工單title.
	 * 
	 */
	private void createExcelTitle(HSSFRow row, HSSFCellStyle style) {
		String[] titles = { "起始點","途徑點","終點","起點到終點距離(米)" };
		for (int i = 0; i < titles.length; i++) {
			String title = titles[i];
			// 給表頭第一行一次創(chuàng)建單元格
			HSSFCell cell = row.createCell((short) i);
			cell.setCellValue(title);
			cell.setCellStyle(style);
		}
	}
 
 
	private void addExcelContent(HSSFRow row, Map<String,String> pageData) {
		String[] fields = { "start","middle", "end" ,"distance"};
		for (int i = 0; i < fields.length; i++) {
			String field = fields[i];
			row.createCell((short) i).setCellValue(
					new HSSFRichTextString(pageData
							.get(field) + ""));
		}
	}

4封裝成客戶端工具

下面就用JFrame封裝,封裝后的界面如下:

代碼如下

public class AreaUI extends JFrame {
    private JButton btn;
    private JPanel contentPane;    //內(nèi)容面板
    private JTextField textField;    //文本框
    JButton okBtn ;//地址獲取按鈕
    public AreaUI() {
        setTitle("批量獲取地址間距離工具");    //設(shè)置窗體的標(biāo)題
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    //設(shè)置窗體退出時操作
        setBounds(100, 100, 800, 400);    //設(shè)置窗體位置和大小
 
        contentPane = new JPanel();    //創(chuàng)建內(nèi)容面板
        contentPane.setBorder(new EmptyBorder(100, 5, 5, 5));    //設(shè)置面板的邊框
        contentPane.setLayout(new BorderLayout(0, 0));    //設(shè)置內(nèi)容面板為邊界布局
        setContentPane(contentPane);    //應(yīng)用內(nèi)容面板
        JPanel panel1 = new JPanel();    //新建面板用于保存文本框
        panel1.setBounds(5, 100, 800, 100);
        contentPane.add(panel1, BorderLayout.NORTH);    //將面板放置在邊界布局的北部
        textField = new JTextField();    //新建文本框
        panel1.add(textField);    //將文本框增加到面板中
        textField.setPreferredSize(new Dimension(400, 40));
        final JButton btn = new JButton("選擇文件");
        btn.setPreferredSize(new Dimension(100, 40));
        panel1.add(btn);
        JPanel panel2 = new JPanel();    //新建面板用于保存按鈕
        contentPane.add(panel2, BorderLayout.CENTER);    //將面板放置在邊界布局的中央
        okBtn = new JButton("批量獲取");
 
        okBtn.setPreferredSize(new Dimension(100, 40));
        panel2.add(okBtn);
        setVisible(true);
        btn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //按鈕點擊事件
                JFileChooser chooser = new JFileChooser();             //設(shè)置選擇器
                chooser.setMultiSelectionEnabled(true);             //設(shè)為多選
                int returnVal = chooser.showOpenDialog(btn);        //是否打開文件選擇框
                if (returnVal == JFileChooser.APPROVE_OPTION) {          //如果符合文件類型
                    String filepath = chooser.getSelectedFile().getAbsolutePath();      //獲取絕對路徑
                    //System.out.println(filepath);
                    textField.setText(filepath);
                }
            }
        });
 
 
        /* 確定點擊 */
        okBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
 
                String filepath = textField.getText();
                if ("".equals(filepath) || filepath == null) {
                    JOptionPane.showMessageDialog(getContentPane(), "請先選擇文件","警告", JOptionPane.WARNING_MESSAGE);
                    return;
                }
 
                String suffix = filepath.substring(filepath.lastIndexOf(".") + 1);
                if (!(suffix.equals("xlsx") || (suffix.equals("xls")))) {
                    JOptionPane.showMessageDialog(getContentPane(), "請選擇Excel文件","警告", JOptionPane.WARNING_MESSAGE);
                    return;
                }
                File exitFile=new File(filepath);
                if(!exitFile.exists()){
                    JOptionPane.showMessageDialog(getContentPane(), "文件地址不存在","警告", JOptionPane.WARNING_MESSAGE);
                    return;
                }
                try {
                    List<DistanceVO> list =openFile(filepath); /* 打開文件 */
                    if(list==null||list.isEmpty()){
                        JOptionPane.showMessageDialog(getContentPane(), "解析Excel失敗","警告", JOptionPane.WARNING_MESSAGE);
                        return;
                    }
 
                    List<Map<String,String>> pageDataList=new ArrayList<Map<String,String>>();
                    int listSize=list.size();
                    int listIndexNum=0;
                    System.out.println("共需要獲取"+listSize+"個");
                    for(DistanceVO distanceVO:list){
                        listIndexNum++;
                        Map<String,String> map=DistanceUtil.getDis(distanceVO.getStart(),distanceVO.getMiddle(),distanceVO.getEnd());
                        pageDataList.add(map);
                        if(listIndexNum%100==0){
                            System.out.println(getCurTime()+"使勁獲取中,共"+listSize+"已獲取"+listIndexNum+"個");
                        }
                    }
                    System.out.println("地址已全部獲取完成……");
                    ExportData2Excel exportData2Excel=new ExportData2Excel();
                    String exportPath="";
                    if (suffix.equals("xlsx")){
                        exportPath=filepath.replaceAll(".xlsx","轉(zhuǎn)化后.xls");
                    }else if(suffix.equals("xls")){
                        exportPath=filepath.replaceAll(".xls","轉(zhuǎn)化后.xls");
                    }
                    exportData2Excel.exportExcel(pageDataList,exportPath);
 
                    JOptionPane.showMessageDialog(getContentPane(), "獲取后文件保存地址:"+exportPath,"提示", JOptionPane.INFORMATION_MESSAGE);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
                okBtn.setText("地址獲取");
            }
 
        });
    }
 
    /* 打開對應(yīng)的Excel文件 */
    public List<DistanceVO> openFile(String filepath) throws IOException {
        FileInputStream fileInputStream = new FileInputStream(new File(filepath));
        XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
        List<DistanceVO> list= queryRows(workbook);
        if(fileInputStream!=null){
            fileInputStream.close();
        }
        return list;
    }
 
    /* 檢索需要信息 */
    public List<DistanceVO> queryRows(XSSFWorkbook workbook) {
        List<DistanceVO> list = new ArrayList<>();
        XSSFSheet sheet = workbook.getSheetAt(0);
        for (int i = 1; i <= sheet.getLastRowNum(); i++) {
            //System.out.println(sheet.getRow(i).getCell(0).getStringCellValue());
            DistanceVO vo=new DistanceVO();
            vo.setStart(sheet.getRow(i).getCell(0).getStringCellValue());
            try {
                vo.setMiddle(sheet.getRow(i).getCell(1).getStringCellValue());
            }catch (Exception e){}
            vo.setEnd(sheet.getRow(i).getCell(2).getStringCellValue());
            list.add(vo);
        }
        return list;
    }
 
    private String getCurTime(){
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//設(shè)置日期格式
       return df.format(new Date());
    }
    public static void main(String[] args) {
        AreaUI ui= new AreaUI();
    }

到此這篇關(guān)于Java 批量獲取地址間距離工具(支持中轉(zhuǎn)站)的文章就介紹到這了,更多相關(guān)Java 批量獲取地址間距離 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java?泛型的上界和下界通配符示例詳解

    Java?泛型的上界和下界通配符示例詳解

    這篇文章主要為大家通過示例介紹了Java?泛型的上界和下界通配符,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • spring?boot項目自定義參數(shù)校驗規(guī)則示例詳解

    spring?boot項目自定義參數(shù)校驗規(guī)則示例詳解

    這篇文章主要介紹了spring boot項目如何自定義參數(shù)校驗規(guī)則,自定義校驗規(guī)則和自帶的規(guī)則實現(xiàn)方式一樣,先自定義一個注解,然后指定校驗類,在校驗類里實現(xiàn)具體的校驗規(guī)則,本文結(jié)合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • Java?8中的18個常用日期處理(收藏)

    Java?8中的18個常用日期處理(收藏)

    伴隨lambda表達式、streams以及一系列小優(yōu)化,Java 8 推出了全新的日期時間API,這篇文章主要介紹了Java?8的18個常用日期處理,需要的朋友可以參考下
    2022-04-04
  • java 中死鎖問題的實例詳解

    java 中死鎖問題的實例詳解

    這篇文章主要介紹了java 中死鎖問題的實例詳解的相關(guān)資料,希望通過本文大家能夠理解掌握死鎖的問題,需要的朋友可以參考下
    2017-09-09
  • 解決lombok 父類和子類builder不兼容的問題

    解決lombok 父類和子類builder不兼容的問題

    這篇文章主要介紹了解決lombok 父類和子類builder不兼容的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • spring boot中多線程開發(fā)的注意事項總結(jié)

    spring boot中多線程開發(fā)的注意事項總結(jié)

    spring boot 通過任務(wù)執(zhí)行器 taskexecutor 來實現(xiàn)多線程和并發(fā)編程。下面這篇文章主要給大家介紹了關(guān)于spring boot中多線程開發(fā)的注意事項,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-09-09
  • MyBatis Plus 實現(xiàn)多表分頁查詢功能的示例代碼

    MyBatis Plus 實現(xiàn)多表分頁查詢功能的示例代碼

    這篇文章主要介紹了MyBatis Plus 實現(xiàn)多表分頁查詢功能,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • java實現(xiàn)哈夫曼壓縮的實例

    java實現(xiàn)哈夫曼壓縮的實例

    這篇文章主要介紹了java實現(xiàn)哈夫曼壓縮的實例的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 面試官:詳細談?wù)凧ava對象的4種引用方式

    面試官:詳細談?wù)凧ava對象的4種引用方式

    這篇文章主要給大家介紹了java面試官常會問到的,關(guān)于Java對象的4種引用方式的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 使用 Spring Boot 實現(xiàn) WebSocket實時通信

    使用 Spring Boot 實現(xiàn) WebSocket實時通信

    本篇文章主要介紹了使用 Spring Boot 實現(xiàn) WebSocket實時通信,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10

最新評論

略阳县| 聊城市| 德安县| 邮箱| 呼玛县| 潮州市| 桂平市| 城步| 泰州市| 濮阳市| 宁乡县| 远安县| 禹州市| 上犹县| 乌兰察布市| 上虞市| 临海市| 苏尼特右旗| 闵行区| 石景山区| 满城县| 化德县| 北宁市| 曲周县| 太和县| 同仁县| 古丈县| 珲春市| 嘉荫县| 蓝田县| 子洲县| 鱼台县| 宝应县| 稻城县| 当阳市| 乌兰县| 湛江市| 棋牌| 双桥区| 苏尼特右旗| 萨迦县|