电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:3日期: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
相關文章:
主站蜘蛛池模板: 苏州工作服定做-工作服定制-工作服厂家网站-尺品服饰科技(苏州)有限公司 | 贴片电容-贴片电阻-二三极管-国巨|三星|风华贴片电容代理商-深圳伟哲电子 | 氢氧化钙设备_厂家-淄博工贸有限公司 | 深圳离婚律师咨询「在线免费」华荣深圳婚姻律师事务所专办离婚纠纷案件 | 体视显微镜_荧光生物显微镜_显微镜报价-微仪光电生命科学显微镜有限公司 | 协议书_协议合同格式模板范本大全 | 广州番禺搬家公司_天河黄埔搬家公司_企业工厂搬迁_日式搬家_广州搬家公司_厚道搬迁搬家公司 | 不锈钢散热器,冷却翅片管散热器厂家-无锡市烨晟化工装备科技有限公司 | 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 元拓建材集团官方网站 | (中山|佛山|江门)环氧地坪漆,停车场地板漆,车库地板漆,聚氨酯地板漆-中山永旺地坪漆厂家 | 广东高华家具-公寓床|学生宿舍双层铁床厂家【质保十年】 | 杭州画室_十大画室_白墙画室_杭州美术培训_国美附中培训_附中考前培训_升学率高的画室_美术中考集训美术高考集训基地 | Jaeaiot捷易科技-英伟达AI显卡模组/GPU整机服务器供应商 | 瑞典Blueair空气净化器租赁服务中心-专注新装修办公室除醛去异味服务! | 盐水蒸发器,水洗盐设备,冷凝结晶切片机,转鼓切片机,絮凝剂加药系统-无锡瑞司恩机械有限公司 | 南京展台搭建-南京展会设计-南京展览设计公司-南京展厅展示设计-南京汇雅展览工程有限公司 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 政府园区专业委托招商平台_助力企业选址项目快速落地_东方龙商务集团 | 轴承振动测量仪电箱-轴承测振动仪器-测试仪厂家-杭州居易电气 | PCB接线端子_栅板式端子_线路板连接器_端子排生产厂家-置恒电气 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 假肢-假肢价格-假肢厂家-河南假肢-郑州市力康假肢矫形器有限公司 | 钢格栅板_钢格板网_格栅板-做专业的热镀锌钢格栅板厂家-安平县迎瑞丝网制造有限公司 | 冷水机-工业冷水机-冷水机组-欧科隆品牌保障 | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 山东集装箱活动房|济南集装箱活动房-济南利森集装箱有限公司 | 砍排机-锯骨机-冻肉切丁机-熟肉切片机-预制菜生产线一站式服务厂商 - 广州市祥九瑞盈机械设备有限公司 | 路面机械厂家| 校车_校车价格_19座幼儿园校车_幼儿园校车_大鼻子校车 | 东亚液氮罐-液氮生物容器-乐山市东亚机电工贸有限公司 | 阴离子_阳离子聚丙烯酰胺厂家_聚合氯化铝价格_水处理絮凝剂_巩义市江源净水材料有限公司 | 两头忙,井下装载机,伸缩臂装载机,30装载机/铲车,50装载机/铲车厂家_价格-莱州巨浪机械有限公司 | 乳化沥青设备_改性沥青设备_沥青加温罐_德州市昊通路桥工程有限公司 | 轻型地埋电缆故障测试仪,频响法绕组变形测试仪,静荷式卧式拉力试验机-扬州苏电 | 杭州|上海贴标机-百科| 四合院设计_四合院装修_四合院会所设计-四合院古建设计与建造中心1 | 红酒招商加盟-葡萄酒加盟-进口红酒代理-青岛枞木酒业有限公司 | 山东信蓝建设有限公司官网| 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 精密机械零件加工_CNC加工_精密加工_数控车床加工_精密机械加工_机械零部件加工厂 | 展厅装修公司|企业展厅设计|展厅制作|展厅搭建—广州展厅装饰公司 | 成都热收缩包装机_袖口式膜包机_高速塑封机价格_全自动封切机器_大型套膜机厂家 |