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

📄 mapdemo.java

📁 一个基于PlaceLab的室内和室外的智能导航系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package org.placelab.demo.mapview;import java.io.FileOutputStream;import java.io.IOException;import java.util.Enumeration;import java.util.Hashtable;import java.util.Vector;import org.eclipse.jface.dialogs.MessageDialog;import org.eclipse.swt.SWT;import org.eclipse.swt.events.KeyAdapter;import org.eclipse.swt.events.KeyEvent;import org.eclipse.swt.events.SelectionEvent;import org.eclipse.swt.events.SelectionListener;import org.eclipse.swt.graphics.Point;import org.eclipse.swt.graphics.Rectangle;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.layout.GridLayout;import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.FileDialog;import org.eclipse.swt.widgets.Menu;import org.eclipse.swt.widgets.MenuItem;import org.eclipse.swt.widgets.Shell;import org.placelab.client.PlacelabWithProxy;import org.placelab.client.tracker.CentroidTracker;import org.placelab.client.tracker.Tracker;import org.placelab.eventsystem.SWTEventSystem;import org.placelab.mapper.CompoundMapper;import org.placelab.mapper.Mapper;import org.placelab.spotter.LogSpotter;import org.placelab.spotter.PlacelabStumblerLogSpotter;import org.placelab.spotter.Spotter;import org.placelab.spotter.SpotterException;import org.placelab.spotter.WiFiSpotter;import org.placelab.util.Cmdline;/** * A map application. */public class MapDemo {	protected PlacelabWithProxy daemon;		protected Display display;	protected Shell shell;	protected TrackedMapView mapView;	protected Menu bar;		protected Vector placeItems;		public WadData data;		protected Spotter sp;			protected Tracker createTracker(Mapper m) {		Tracker t = new CentroidTracker(m);		return t;//		CompoundTracker ct = new CompoundTracker();//		BeaconAndGPSParticleFilterTracker t = new BeaconAndGPSParticleFilterTracker(m, 1000, 10000);//		t.getParticleFilter().setMotionModel(new WeightedMotionModel());//		t.getParticleFilter().setSensorModel(new UniformSensorModel(m));//		t.getParticleFilter().setSensorModel(new LogRRSensorModel(m));//		BeaconAndGPSParticleFilterTracker t = new BeaconAndGPSParticleFilterTracker(m, 1000, 10000);//		t.getParticleFilter().setMotionModel(new WeightedMotionModel());//		ParticleFilterTracker t = new ParticleFilterTracker(m);//		t.getParticleFilter().setSensorModel(new LogRRSensorModel(m));//		t.getParticleFilter().setMotionModel(new WeightedMotionModel());//		ParticleFilterTracker t = new ParticleFilterTracker(m);		//t.getParticleFilter().setSensorModel(new The914MhzSensorModel(m));//		t.getParticleFilter().setMotionModel(new HybridMotionModel());//		ct.addTracker(t);//		ct.addTracker(new PositionTracker());//		return ct;	}		protected MapDemo() { }		public MapDemo(String logfile, String mapArchive, String mapName, Mapper m) throws IOException {		if (m==null) m = CompoundMapper.createDefaultMapper(true, true);		buildShell();				sp = null;		if(logfile == null) {			sp = new WiFiSpotter(250);		} else {			sp = LogSpotter.newSpotter(logfile);		}				/*if (logfile==null) {			daemon = new PlacelabWithProxy(createTracker(m), m, -1); 		} else {			PlacelabStumblerLogSpotter sp = new PlacelabStumblerLogSpotter(logfile);			sp.setOutputStumblerMeasurements(false);//			Spotter sp = LogSpotter.newSpotter(logfile);			daemon = new PlacelabWithProxy(sp, createTracker(m), m, -1); 		}*/		Tracker t = createTracker(m);		if(sp != null) sp.addListener(t);		mapView = new TrackedMapView(shell, SWT.NONE, t, m);		mapView.getHolder().addKeyListener(new KeyAdapter() {			public void keyPressed(KeyEvent e) {				if((e.character == '+') || (e.character == '=')) {					if(sp instanceof LogSpotter) {						LogSpotter log = (LogSpotter)sp;						if(log.getRate() < 1600) 							((LogSpotter)sp).setRate(log.getRate() * 2);					}				} else if(e.character == '-') {					if(sp instanceof LogSpotter) {						LogSpotter log = (LogSpotter)sp;						if(log.getRate() > 2) 							((LogSpotter)sp).setRate(log.getRate() / 2);					}				}			}		});		mapView.setLayoutData(new GridData(GridData.FILL_BOTH));		mapView.setShowBeacons(false);		loadWad(mapArchive, mapName);				if(Cmdline.getArg("zoom") != null) {			try {				double zoom = Double.parseDouble(Cmdline.getArg("zoom"));				if(zoom > 0) {					mapView.setZoom(zoom);				}			} catch (NumberFormatException nfe) {				mapView.setZoom(1.0);			}		}		resize();		shell.open();	}		protected void loadWad() {		loadWad(null, null);	}		protected void loadWad(String path, String mapName) {		WadData temp;		if(path == null) {			path = askUserForFile();			// if path is still null, user doesn't want to			// load a wad.  so be it.			if(path == null) {				buildMenu();					return; 			} 		}		try {			temp = new WadData(path);		} catch (Exception e) {			errorDialog("Couldn't load mapwad", e);			return;		}		MapBacking mapBack = null;		if (mapName != null) {			mapBack = temp.getMap(mapName);			if (mapBack == null) {				// print this stuff on the console since its only going to result				// from incorrect cmdline args				System.out.println("Map: " + mapName + " not found. Available maps are:\n");				for (Enumeration en = temp.getMaps().keys(); en.hasMoreElements();) {					System.out.println("  - " + en.nextElement().toString());				}				//System.exit(1);				System.out.println("Choosing an arbitrary map instead");				mapName = null;			}		if(mapName == null)			mapBack = temp.getDefaultMap();		}		Hashtable defaultPlaces = temp.getDefaultPlaceSets();		if(mapBack == null) {			// render the first map if there is no default			try {				mapBack = (MapBacking)temp.getMaps().elements().nextElement();			} catch (java.util.NoSuchElementException e) {				errorDialog("That mapwad doesn't have any maps!");				return;			}		}		if(mapBack == null) {			errorDialog("That mapwad doesn't have any maps!");			return;		}		if(defaultPlaces == null) defaultPlaces = new Hashtable();		data = temp;				mapView.setMapData(mapBack);		mapView.setPlaceSets(defaultPlaces);		// XXX: hacked regions in here		RegionOverlay ro = new RegionOverlay(mapView);		ro.addRegions(data.getRegions());		shell.setText(mapBack.getName());		buildMenu();	}		protected String askUserForFile() {		FileDialog fd = new FileDialog(shell, SWT.OPEN);		String path = fd.open();		return path;	}		protected void errorDialog(String msg) {		errorDialog(msg, null);	}	protected void errorDialog(String msg, Throwable e) {	    if(e != null) e.printStackTrace();		MessageDialog d = new MessageDialog(shell,				e == null ? "Error" : msg, null, 				e == null ? msg : e.toString(), MessageDialog.ERROR,				new String[]{"OK"}, 0);		d.open();	}		protected void buildShell() {		int flag = SWT.SHELL_TRIM;		if(System.getProperty("os.name").equalsIgnoreCase				("Windows CE")) flag = SWT.NO_TRIM;		Display.setAppName("Placelab XMapDemo");		display = Display.getCurrent();		if(display == null) display = new Display();		shell = new Shell(display, flag);		GridLayout layout = new GridLayout();		layout.marginWidth = layout.marginHeight = 0;		shell.setLayout(layout);	}	protected void buildMenu() {		// building menus by hand is a crime		// but alas, this is how its done in swt		int commandKey = SWT.CONTROL;		if(BrowserControl.isMacPlatform()) commandKey = SWT.COMMAND;		bar = new Menu(shell, SWT.BAR);		shell.setMenuBar(bar);				// build file menu		MenuItem fileItem = new MenuItem(bar, SWT.CASCADE);		fileItem.setText("File");		Menu fileMenu = new Menu(bar);		MenuItem openItem = new MenuItem(fileMenu, SWT.PUSH);		openItem.setText("Open...");		openItem.setAccelerator(commandKey | 'O');		openItem.addSelectionListener(new SelectionListener() {			public void widgetSelected(SelectionEvent e) {				loadWad();			}			public void widgetDefaultSelected(SelectionEvent e) {				loadWad();			}		});		MenuItem saveItem = new MenuItem(fileMenu, SWT.PUSH);		saveItem.setText("Save");		saveItem.setAccelerator(commandKey | 'S');		saveItem.addSelectionListener(new SelectionListener() {			public void widgetSelected(SelectionEvent e) {				saveWad();			}			public void widgetDefaultSelected(SelectionEvent e) {				saveWad();			}		});		MenuItem saveAsItem = new MenuItem(fileMenu, SWT.PUSH);		saveAsItem.setText("Save As...");		saveAsItem.setAccelerator(commandKey | SWT.SHIFT | 'S');		saveAsItem.addSelectionListener(new SelectionListener() {			public void widgetSelected(SelectionEvent e) {				saveAsWad();			}			public void widgetDefaultSelected(SelectionEvent e) {				saveAsWad();			}		});		if(!BrowserControl.isMacPlatform()) {			MenuItem exitItem = new MenuItem(fileMenu, SWT.PUSH);			exitItem.setText("Exit");			exitItem.setAccelerator(SWT.ALT | SWT.F4);			exitItem.addSelectionListener(new SelectionListener() {				public void widgetSelected(SelectionEvent e) {					shutdown();				}

⌨️ 快捷键说明

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