日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:32日期:2022-08-09 09:30:02
目錄1獲取兩個地址間距離2起始點、中轉點、終點距離實現3導出Excel文件4封裝成客戶端工具1獲取兩個地址間距離

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

private static String getLonLat(String address)throws Exception{//返回輸入地址address的經緯度信息, 格式是 經度,緯度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+'//'+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起始點、中轉點、終點距離實現

距離支持中轉站,代碼如下:

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())){//沒有中轉點String startLonLat = getLonLat(start);String endLonLat = getLonLat(end);dis = getDistance(startLonLat, endLonLat);map.put('middle','');map.put('distance',dis+''); }else{//有中轉點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導出Excel文件

導出Excel文件的默認如下,共四列,包含起始點,途徑點,終點以及距離

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

直接上代碼

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');// 凍結標題(width * height)// sheet.createFreezePane(15, 1);// 給單子名稱一個長度sheet.setDefaultColumnWidth((short) 15);// 生成一個樣式HSSFCellStyle style = wb.createCellStyle();// 設置表頭顏色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);// 設置邊框style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下邊框style.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左邊框style.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上邊框style.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右邊框// 創建第一行(也可以稱為表頭)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;} /** * * 功能描述:創建工單title. * */private void createExcelTitle(HSSFRow row, HSSFCellStyle style) {String[] titles = { '起始點','途徑點','終點','起點到終點距離(米)' };for (int i = 0; i < titles.length; i++) {String title = titles[i];// 給表頭第一行一次創建單元格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封裝,封裝后的界面如下:

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

代碼如下

public class AreaUI extends JFrame { private JButton btn; private JPanel contentPane; //內容面板 private JTextField textField; //文本框 JButton okBtn ;//地址獲取按鈕 public AreaUI() {setTitle('批量獲取地址間距離工具'); //設置窗體的標題setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //設置窗體退出時操作setBounds(100, 100, 800, 400); //設置窗體位置和大小 contentPane = new JPanel(); //創建內容面板contentPane.setBorder(new EmptyBorder(100, 5, 5, 5)); //設置面板的邊框contentPane.setLayout(new BorderLayout(0, 0)); //設置內容面板為邊界布局setContentPane(contentPane); //應用內容面板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(); //設置選擇器chooser.setMultiSelectionEnabled(true); //設為多選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','轉化后.xls'); }else if(suffix.equals('xls')){exportPath=filepath.replaceAll('.xls','轉化后.xls'); } exportData2Excel.exportExcel(pageDataList,exportPath); JOptionPane.showMessageDialog(getContentPane(), '獲取后文件保存地址:'+exportPath,'提示', JOptionPane.INFORMATION_MESSAGE);} catch (Exception e1) { e1.printStackTrace();}okBtn.setText('地址獲取'); } }); } /* 打開對應的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');//設置日期格式 return df.format(new Date()); } public static void main(String[] args) {AreaUI ui= new AreaUI(); }

到此這篇關于Java 批量獲取地址間距離工具(支持中轉站)的文章就介紹到這了,更多相關Java 批量獲取地址間距離 內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩午夜av在线| 激情五月综合| 久久国产精品色av免费看| 91精品福利| 婷婷综合五月| 国产模特精品视频久久久久| 欧美精品一线| 亚洲有吗中文字幕| 日韩一区二区三区免费视频| 日韩高清一区在线| 久久不卡国产精品一区二区| 免费在线播放第一区高清av| 久久久久久色 | 日韩欧美1区| 久久久精品五月天| 婷婷综合亚洲| 婷婷精品在线观看| 国产精品2区| 日本а中文在线天堂| 亚洲二区精品| 中文不卡在线| 国产福利一区二区精品秒拍 | 国产毛片精品| 大香伊人久久精品一区二区| 日本欧美不卡| 水蜜桃久久夜色精品一区的特点| 日本成人在线视频网站| 久久精品一区二区三区中文字幕| 夜鲁夜鲁夜鲁视频在线播放| 中文在线不卡| 国产日韩中文在线中文字幕| 日韩精品永久网址| 久久亚洲欧美| 国产精品mv在线观看| 日韩和的一区二在线| 妖精视频成人观看www| 亚洲一二av| 麻豆91小视频| 欧美日韩黑人| 国产精品日本一区二区三区在线| 欧美日韩免费看片| 综合一区在线| 91日韩欧美| 影音先锋久久精品| 麻豆国产91在线播放| 欧美1区2区3区| 欧美日韩中出| 亚洲国产专区校园欧美| 欧美日韩午夜| 免费视频国产一区| 欧美在线91| 国产精品7m凸凹视频分类| 亚洲区第一页| 日本不良网站在线观看| 视频精品一区| 午夜影院一区| 日韩欧美三区| 久久九九精品| 国产日产一区| 99在线|亚洲一区二区| 精品国产亚洲一区二区三区在线| 久久亚洲一区| 日韩综合精品| 国产精品九九| 亚洲一区导航| 久久一级电影| 精品国产一区二区三区性色av| 午夜久久tv| 国产精品13p| 国产午夜久久av| 亚洲一区二区成人| 日韩一区电影| 欧美aⅴ一区二区三区视频| 偷拍欧美精品| 成人亚洲精品| 欧美片第1页综合| 一本一本久久| 欧洲av一区二区| 蜜桃久久久久| 日韩高清欧美激情| 亚洲免费在线| 欧美日韩在线播放视频| 国产九九精品| 亚洲三级精品| 红桃视频亚洲| 精品成人免费一区二区在线播放| 国产精品theporn| 日本亚洲视频在线| 制服诱惑一区二区| 香蕉久久99| 免费在线小视频| 日韩成人免费| 欧美激情麻豆| 国产日韩一区二区三区在线播放| 日韩专区一卡二卡| 欧美国产91| 国产日韩电影| 麻豆精品av| 国产精品色在线网站| 日韩中文字幕| 亚洲综合图色| 西西人体一区二区| 亚洲成人三区| 伊人精品一区| 久久裸体视频| 高清av不卡| 水蜜桃精品av一区二区| 国产精品2023| 国产极品一区| 老牛国内精品亚洲成av人片| 欧美片第1页综合| 日本视频在线一区| 天海翼亚洲一区二区三区| 一区二区91| 日韩在线网址| 日韩一二三区在线观看| 亚洲三级精品| 日本aⅴ精品一区二区三区| 亚洲1区在线观看| 日韩在线视频一区二区三区| 亚洲美女久久| 日韩高清一区在线| 国产亚洲久久| 欧美成a人片免费观看久久五月天| 国产精品a久久久久| 久久99视频| 国产丝袜一区| 久久国内精品视频| 久久久91麻豆精品国产一区| 久久精品一区二区三区中文字幕| 精品美女在线视频| 精品欧美日韩精品| 欧美久久天堂| 伊人久久大香线蕉av不卡| 女同性一区二区三区人了人一| 怡红院精品视频在线观看极品| 性一交一乱一区二区洋洋av| 亚洲精品在线二区| 日本91福利区| 久久精品亚洲一区二区| 92国产精品| 欧美/亚洲一区| 亚洲二区免费| 亚洲丝袜美腿一区| 国产精区一区二区| 亚洲黄色中文字幕| 一区免费在线| 青草国产精品| 国产福利片在线观看| 婷婷成人基地| 日韩欧美高清一区二区三区| 国产精品久久久久久久免费软件| 国产激情在线播放| 九九综合九九| 日韩三级久久| 精品国产不卡一区二区| 久久精品欧美一区| 国产婷婷精品| 国产欧美日韩精品一区二区免费 | 亚洲成a人片| 视频一区欧美精品| 国产福利亚洲| 婷婷亚洲五月| 国产亚洲欧美日韩精品一区二区三区 | 国产日本精品| av资源中文在线| 99riav1国产精品视频| 亚洲制服一区| 精品一区二区男人吃奶| 欧美丝袜一区| 国产亚洲一区二区三区啪| 日韩中文在线电影| 亚洲精品美女| 日韩精品dvd| 亚洲久久视频| 成人亚洲一区二区| 在线一区二区三区视频| 久久免费精品| 首页国产欧美久久| 九九九精品视频| 一本色道精品久久一区二区三区| 国产精品毛片久久久| 欧美日韩精品免费观看视欧美高清免费大片| 久久香蕉精品| 麻豆视频在线看| 日日摸夜夜添夜夜添国产精品| 精品国产18久久久久久二百| 老司机精品久久| 国产在线看片免费视频在线观看| 三级欧美在线一区| 黄色在线网站噜噜噜| 亚州av一区| 日本精品影院| 国产精品宾馆| 久久成人国产| 桃色av一区二区| 国产欧美自拍一区| 亚洲在线观看| 国产成人精品一区二区三区视频| 免费视频一区二区|