国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

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

瀏覽:2日期: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
相關文章:
主站蜘蛛池模板: 欧美亚洲国产成人高清在线 | 亚洲第一页在线 | 久久国产影视 | 日本www免费 | 日本加勒比高清一本大道 | 亚洲国产精品久久久久666 | 精品99久久 | 高清毛片aaaaaaaaa片 | 黄色三级免费 | 亚洲在成人网在线看 | 欧美另类69xxxxx 视频 | 日韩一级片播放 | 国内精品伊人久久久影视 | 亚洲一区二区久久 | 欧美精品一区视频 | 国产aⅴ精品一区二区三区久久 | 私人玩物福利 | 三级视频在线 | 男人天堂网在线 | 免费高清特级毛片 | 全午夜免费一级毛片 | 欧美日韩精品一区二区三区视频在线 | 欧美巨乳在线 | 日韩不卡一级毛片免费 | 国产91在线精品 | 三级毛片网 | 欧美做a一级视频免费观看 欧美做爱毛片 | 乱人伦中文视频在线观看免费 | 黄色三级免费 | 亚洲天堂男人在线 | 天天躁日日躁狠狠躁一级毛片 | 精品一区二区久久 | 在线精品欧美日韩 | 男人女人真曰批视频播放 | 久久视频精品36线视频在线观看 | 看全黄男人和女人视频 | 亚洲天堂小视频 | 亚洲午夜精品在线 | 欧美成人一区二区三区在线视频 | 国产一区亚洲二区三区毛片 | 在线はじめてのおるすばん |