자바 주소 간 거리 도구 일괄 가 져 오기(중간 역 지원)

15556 단어 Java주소 간거리.
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 파일 내 보 내기 기본 값 은 다음 과 같 습 니 다.모두 4 열 로 시작 점,경로 점,종점 및 거 리 를 포함 합 니 다.
시발점
경로 점
종 착 점
출발점 에서 종점 거리(미터)
중국 북경
 
석가장
 
중국 북경
중국 천진
석가장
 
웨스트 레이크 구,항주,저장 성
 
석가장 고성 시
 
직접 코드

	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 로 봉 합 니 다.봉 인 된 화면 은 다음 과 같 습 니 다.

코드 는 다음 과 같다.

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();
    }
자바 가 주소 간 거리 도구(중계 역 지원)를 대량으로 가 져 오 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 가 주소 간 거리 내용 을 대량으로 가 져 오 는 것 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 저 희 를 많이 지지 해 주세요!

좋은 웹페이지 즐겨찾기