⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gpsdatalogger.java

📁 gpsLogger是一个基于手机或PDA的个人移动导航(车载导航)系统中记录gps信息的小工具
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		File f = new File("gpsDataLogger_"+szDateTime+".csv",File.CREATE);//change file name to gpsDataLogger <timestamp>.csv
		
		ResultSet rs = driver.executeQuery("select rowid,time_stamp,species,surveycount,location,terrain,latitude,latns,longitude,longew,sky,water,overall,live from surveyDB");
		rs.first();
		
		int iRowCount = rs.getRowCount();			
		int i = 0;
		while(i <= iRowCount) {
			if (iFlag !=0){		
				sb=(rs.getString("time_stamp"));
				sb=sb+","+(rs.getString("species"));
				sb=sb+","+(rs.getString("surveycount"));
				sb=sb+","+(rs.getString("location"));
				sb=sb+","+(rs.getString("terrain"));
				sb=sb+","+(rs.getString("latitude"));
				sb=sb+","+(rs.getString("latns"));
				sb=sb+","+(rs.getString("longitude"));
				sb=sb+","+(rs.getString("longew"));
				sb=sb+","+(rs.getString("sky"));
				sb=sb+","+(rs.getString("water"));
				sb=sb+","+(rs.getString("overall"));
				sb=sb+","+(rs.getString("live"));	
				sb=sb+","+(rs.getString("rowid"));
				rs.next();
			}else{
			}
			byte []buf = sb.getBytes();
			f.writeBytes(buf,0,buf.length);
			f.writeBytes(enter,0,2);
			++i;
			iFlag = 1;
		} rs.close();	  			 			    			 
	}
	
	/*********************************************************************************
	 *           Makes .csv file on the device of the trackLog data table
	 **********************************************************************************/	
	protected void makeCsvFileTrackLog(){ 
		int iTrackLogFlag = 0;//sets up header row on first iteration through while loop
		
		String sb = "Time_stamp,Latitude,N-S,Longitude,E-W,RowID";
		
		String szDateTime;		//creates timestamp for the filename
		long T = new Time().getTimeLong();
		szDateTime = Convert.toString(T,1);		  
		File f = new File("trackLog_"+szDateTime+".csv",File.CREATE);
		ResultSet rs = driver.executeQuery("select rowid,time_stamp,latitude,latns,longitude,longew from trackLog");
		rs.first();
		
		int iRowCount = rs.getRowCount();			
		int i = 0;
		while(i <= iRowCount) {
			if (iTrackLogFlag !=0){		
				sb=(rs.getString("time_stamp"));
				sb=sb+","+(rs.getString("latitude"));
				sb=sb+","+(rs.getString("latns"));
				sb=sb+","+(rs.getString("longitude"));
				sb=sb+","+(rs.getString("longew"));	
				sb=sb+","+(rs.getString("rowid"));
				rs.next();
			}else{
			}
			byte []buf = sb.getBytes();
			f.writeBytes(buf,0,buf.length);
			f.writeBytes(enter,0,2);
			++i;
			iTrackLogFlag = 1;
		} rs.close();	  			 			    			 
	}	
	public void InterceptSystemKeys(){		
		//Vm.interceptSystemKeys(Vm.SK_ALL | Vm.SK_LAUNCH);		
		waba.sys.Vm.interceptSystemKeys(		
				//WinCE
				waba.sys.Vm.SK_HARD1 | 
				waba.sys.Vm.SK_HARD2 | 
				waba.sys.Vm.SK_HARD3 | 
				waba.sys.Vm.SK_HARD4 | 
				waba.sys.Vm.SK_PAGE_DOWN | 
				waba.sys.Vm.SK_PAGE_LEFT | 
				waba.sys.Vm.SK_PAGE_RIGHT | 
				waba.sys.Vm.SK_PAGE_UP|		
				//additional palmOS silkscreened keys		
				waba.sys.Vm.SK_SYNC | // Hotsync
				waba.sys.Vm.SK_FIND | // Search/Find
				waba.sys.Vm.SK_CALC | // Calculator
				waba.sys.Vm.SK_LAUNCH);//Home
	}	
	public void onEvent(Event e){
		switch (e.type){ 
		/***********************************************************************
		 * Hardware Button Logic:
		 * Palm hard buttons are: Calendar(HARD1),Contacts(HARD2),Todo(HARD3),
		 * MemoPad(HARD4)
		 * Palm silk screened buttons are: Home(LAUNCH), Dropdown(MENU),
		 * Hotsync(SYNC),Find(FIND)
		 * 
		 * 5-way navigation buttons are IKeys.LEFT,RIGHT,PAGE_UP,PAGE_DOWN and ENTER
		 * 
		 * WinCE buttons are: HARD1, HARD2, HARD3, HARD4
		 * Application Tabs are:
		 * 		Case #0 = dataCapture
		 * 		Case #1 = dataEntry
		 * 		Case #2 = grid
		 * 		Case #? = gisData
		 ***********************************************************************/
		case KeyEvent.KEY_PRESS:			
			KeyEvent ke = (KeyEvent)e;
			//5-way navigation buttons
			if (ke.key == IKeys.LEFT && tp.getActiveTab() == 0){
				dataCapture.PreviousSpecies();
				break;}
			else if (ke.key == IKeys.RIGHT && tp.getActiveTab() == 0){
				dataCapture.NextSpecies();break;}
			else if ((ke.key == IKeys.PAGE_UP || ke.key == IKeys.UP)&& tp.getActiveTab() == 0){				
				dataCapture.PreviousLocation();break;}
			else if ((ke.key == IKeys.PAGE_DOWN ||ke.key == IKeys.DOWN )&& tp.getActiveTab() == 0){
				dataCapture.NextLocation();break;} 	
			else if (ke.key == IKeys.ENTER && tp.getActiveTab() == 0){
				/**************Problem Here*******************
				 * The center button on the 5-way control is not actuating.
				 * It worked in an earlier test version to toggle between 
				 * live/dead observations.
				 *********************************************/
				//new MessageBox("Debug","5-Way center pressed").popupModal();							
				dataCapture.LiveDeadToggle();
				break;}
			//These are the standard 4 hardware buttons common to Palm and Windows devices
			else if (ke.key == IKeys.HARD1 && tp.getActiveTab() == 0){//counts 1 sighting
				dataCapture.szCount = "1";
				dataCapture.Count();break;}
			else if (ke.key == IKeys.HARD2 && tp.getActiveTab() == 0){//counts 10 sightings
				dataCapture.szCount = "10";
				dataCapture.Count();break;}		    	 
			else if (ke.key == IKeys.HARD3 && tp.getActiveTab() == 0){//counts 100 sightings
				dataCapture.szCount = "100";
				dataCapture.Count();break;}
			else if (ke.key == IKeys.HARD4 && tp.getActiveTab() == 0){//counts 1000 sightings
				dataCapture.szCount = "1000";
				dataCapture.Count();break;}		    	 
		case ControlEvent.WINDOW_CLOSED:
			String sel = null;
			if (e.target == speciesEdit){//This is called from gpsDataLogger Main, so window_close event is posted here.
				dataCapture.updateSpeciesComboBox();
				dataCapture.cbSpecies.repaintNow();break;}
			else if (e.target == locationEdit){//This is called from gpsDataLogger Main, so window_close event is posted here.
				dataCapture.updateLocationComboBox();
				dataCapture.cbLocation.repaintNow();break;}			
			else if (e.target == mbar){
				switch (mbar.getSelectedMenuItem()){
				case  -1: break; // no item selected
				case   001: //File Menu --> Open location edit popup container
					locationEdit.popupBlockingModal();break;  //Settings menu --> locationEdit lookup table edit
					
				case   002: //File Menu --> Open species edit popup container
					speciesEdit.popupBlockingModal();break;  //Settings menu --> speciesEdit lookup table edit
					
				case   003: //File Menu --> Purge Main Table
					String []szButtonArray = {"Yes","No"};//Settings menu --> purge data table, first WARNING window
					mbPurgeMainTable = new MessageBox("Table DELETE WARNING #1","Do you really want to purge | the Main table???", szButtonArray);				 					
					mbPurgeMainTable.popupBlockingModal();
					int idx = mbPurgeMainTable.getPressedButtonIndex();				 											
					if (idx == 0){//Operator chooses 'Yes', goes to second WARNING popup window
						String []szButtonArray2 = {"OK","Cancel"};//Settings menu --> purge data table
						mbPurgeMainTable = new MessageBox("Table DELETE WARNING #2","This will permanently delete the|ENTIRE set of collected data. ||Make damn sure that this is|what you REALLY want to do.|| Press 'OK' to delete your data,|or 'Cancel' to abort delete.|", szButtonArray2);				 					
						mbPurgeMainTable.popupBlockingModal();
						int idx2 = mbPurgeMainTable.getPressedButtonIndex();//fetches user choice from second warning, 0 = dump, 1 = cancel.
						if (idx2 == 0){//dumps main table, then recreates it
							PurgeMainTable();
							CreateMainTable();
							CreateMainTableIndexes();					
							invalidateRS();//refresh grid
							dataCapture.clear();
							switch (tp.getActiveTab()){//below cleans up shown display tab after main table is purged
							case 0:break;//dataCapture count fields are cleared by datacapture.clear() above
							case 1:dataEdit.clear();break;// dataEdit clears dataEdit tab if that is displayed tab												                 			                  
							case 2: break;// grid is displayed tab, refresh will be done by invalidateRS()}
							}//show below message for about 3 seconds						
							mbMainTableDeleted = new MessageBox("Attention","Main data table|has been cleared.",null);			
							mbMainTableDeleted.popupModal();
							waba.sys.Vm.sleep(2000);
							mbMainTableDeleted.unpop();						
							break;}}
					else if (idx == 1){}break;//operator has chosen NOT to delete from Delete Warning #1 message box
					
				case   004: //File Menu --> Purge TrackLog Table
					String []szClearTrackLogButtonArray = {"Yes","No"};//Settings menu --> purge TrackLog data table, first WARNING window
					mbPurgeTrackLog = new MessageBox("Table DELETE WARNING #1","Do you really want to purge | the TrackLog table???", szClearTrackLogButtonArray);				 					
					mbPurgeTrackLog.popupBlockingModal();
					int idClearTrackLog = mbPurgeTrackLog.getPressedButtonIndex();				 											
					if (idClearTrackLog == 0){//Operator chooses 'Yes', goes to second WARNING popup window
						String []szClearTrackLogButtonArray2 = {"OK","Cancel"};//Settings menu --> purge data table
						mbPurgeTrackLog = new MessageBox("Table DELETE WARNING #2","This will permanently delete the |ENTIRE set of collected TrackLog data.||Make damn sure that this is |what you REALLY want to do.|| Press 'OK' to delete your data,|or 'Cancel' to abort delete.|", szClearTrackLogButtonArray2);				 					
						mbPurgeTrackLog.popupBlockingModal();
						int idx2 = mbPurgeTrackLog.getPressedButtonIndex();//fetches user choice from second warning, 0 = dump, 1 = cancel.
						if (idx2 == 0){//dumps TrackLog table, then recreates it
							PurgeTrackLogTable();
							CreateTrackLogTable();									
							mbTrackLogTableDeleted = new MessageBox("Attention","TrackLog data table|has been cleared.",null);			
							mbTrackLogTableDeleted.popupModal();
							waba.sys.Vm.sleep(2000);
							mbTrackLogTableDeleted.unpop();						
							break;}}
					else if (idClearTrackLog == 1){}break;//operator has chosen NOT to delete from Delete Warning #1 message box
					
				case   005://File menu --> create *.csv file
					String []szCreateCsvFileButtonArray = {"Yes","No"};
					mbCreateCsvFile = new MessageBox("Attention","Do you really want to create |a .csv copy of the data tables?||This WILL NOT delete the |tables from the PDA. ", szCreateCsvFileButtonArray);				 					
					mbCreateCsvFile.popupBlockingModal();
					int idxCsvFile = mbCreateCsvFile.getPressedButtonIndex();				 											
					if (idxCsvFile == 0){//creates csv file on device
						makeCsvFileSurveyDB(); 
						makeCsvFileTrackLog();
						break; }
					else{break;} //don't make .csv file, back to application
					
				case   006:// File menu --> Exit selection				
					String []szExitButtonArray = {"Yes","No"};
					mbExitApplication = new MessageBox("Attention","Do you really want to exit|the application?", szExitButtonArray);				 					
					mbExitApplication.setUnpopDelay(3000);
					mbExitApplication.popupBlockingModal();
					int idxExit = mbExitApplication.getPressedButtonIndex();				 											
					if (idxExit == 0){//exits application
						MainWindow.getMainWindow().exit(0); break; }
					else{break;} //don't exit, back to app
											
				case   101: //Settings menu --> reset COM port, restart bluetooth serial connection
					InputDialog id = new InputDialog("Reset COM port", " Please enter a different| COM port number, or leave| the current one and press,|         'Restart'. | The default COM port is 8.",Convert.toString(iPortNumber), new String[]{"Restart","Cancel"});
					id.popupBlockingModal();
					if (id.getPressedButtonIndex()==0){
						String szTemp = id.getValue();
						iPortNumber = Convert.toInt(szTemp);
						//new MessageBox("Attention","iPortNumber is: "+iPortNumber).popupModal();				
						dataCapture.edTime.requestFocus();
						dataCapture.edTime.setText("");		
						dataCapture.edTime.repaintNow();	
						dataGps.restartGps(); }break;
						
				case   102: //Settings menu --> Starts trackLog collection, allows user to modify interval
					int iTrackLogSeconds = iTrackLogInterval/1000;
					
					String []szTrackLogButtonArray = {"Start","Cancel/Stop"};
					InputDialog idTrackLog = new InputDialog("Start TrackLog", " Please enter the desired Track |Log interval in seconds for |Lat/Long coordinates and then |press 'Start'.| The default interval 15 seconds.",Convert.toString(iTrackLogSeconds),szTrackLogButtonArray);							                                              
					idTrackLog.popupBlockingModal();
					int idxTrackLog = idTrackLog.getPressedButtonIndex();													
					if (idxTrackLog == 0){//starts trackLog()
						String szTemp = idTrackLog.getValue();
						iTrackLogSeconds = Convert.toInt(szTemp);
						iTrackLogInterval = iTrackLogSeconds*1000;//converts seconds to milliseconds						
						dataEdit.CreateTrackLogTimer();
						iTrackLogFlag = 1;//trips On indicator on dataCapture tab
						dataCapture.LoadTrackLogIndicator();
						break; }
					else{ //don't start TrackLog, cancel if running, back to app
						dataEdit.removeTimer(dataEdit.trackLogTimer);
						iTrackLogFlag = 0;
						dataCapture.LoadTrackLogIndicator();
						break;}						
                //Info menu -->gpsDataLogger, SuperWaba, OS/Device, General Instructions, changelog 
				case   201: //about gpsDataLogger, changelog popup	
				String []szAboutGpsDataLogger = {"Close","Show Change Log"};
				mbAboutGpsDataLogger = new MessageBox("About gpsDataLogger 0.12","|The purpose of this application|is to allow for recording of|field data with only minimal visual|contact with the PDA device |during data collection. | ", szAboutGpsDataLogger);				 					
				mbAboutGpsDataLogger.setUnpopDelay(5000);
				mbAboutGpsDataLogger.popupBlockingModal();
				int idxAboutGpsDataLogger = mbAboutGpsDataLogger.getPressedButtonIndex();				 											
				if (idxAboutGpsDataLogger == 0){//0 = closes popup and return to app					
					break; }
				else if (idxAboutGpsDataLogger == 1){//1 = pops up change log, text is left aligned.
				    mbChangeLog = new MessageBox("Change Log",szChangeLog);
					mbChangeLog.setTextAlignment(2);
					mbChangeLog.popupBlockingModal();
					break;} 			
				case   202: new MessageBox("About SuperWaba","SuperWaba Virtual Machine 5.8 | Copyright (c)2000-2007 | Guilherme Campos Hazan,| SuperWaba Ltda,| Rio de Janeiro, Brazil| Phone: +55 21 2239-6695 | www.superwaba.com|| SuperWaba is an enhanced version | of the Waba Virtual Machine | Copyright (c) 1998,1999 WabaSoft | www.wabasoft.com").popupModal(); break;                  
				case   203: new MessageBox("OS/screensize",szPlatform + " | " +szHeight + "H "+ "x" + szWidth +"W").popupModal(); break;
				case   204: new MessageBox("General Instructions","To modify fields in the location| or species listboxs on dataCapture|tab, tap the menubar, |select 'Edit Lookup Table'. This |window allows users to browse, add, |update or even delete the lookup |table. Users can edit data in the |main table on the Data Edit tab. |The main table can be deleted |by selecting the menubar followed | by 'Purge Main Table'. |   Have fun, and be careful!.").popupModal(); break;								
				}break;	
			}
		case ControlEvent.PRESSED:
			if (e.target == grid){//target is grid
				GridEvent ge = (GridEvent)e;
				if (false) Vm.debug(ge.col+","+ge.row);
			}                                 
			else if (e.target == tp)//target is one of the three tab panels, (GPS panel no event...)
				switch (tp.getActiveTab()){
				case 0: // dataCapture tab     
					dataCapture.updateSpeciesComboBox();
					dataCapture.cbSpecies.repaintNow();
					dataCapture.updateLocationComboBox();
					dataCapture.cbLocation.repaintNow();
					break;						
				case 1: // dataEdit tab              	  
					String []item = grid.getSelectedItem();
					if (item == null)
						dataEdit.clear();
					else
						dataEdit.show(item[0]);
					break;
				case 2: // grid tab
					invalidateRS(); // update the grid
				}break; 
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -