GPS + Canvas

3 respostas
diogofabri

Olá… Estou com uma pequena duvida, tenho que fazer um programa onde a partir de um Codigo GPS comum, onde eu altero valores pelo emulador (wireless Tolkit) possa fazer um ponto no display, e conforme a latitude e longetude for alterada o ponto se move.
Peço ajuda urgente!!!
Obrigado desde já!

3 Respostas

javaAurelio

Utilize translate(x, y);

.
.
.

g.translate(x, y);

.
.
.

Assim o ponto na tela mexe…

Talve isso ajuda.

diogofabri
O Código do GPS seria esse:
import java.io.IOException;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.location.AddressInfo;
import javax.microedition.location.Coordinates;
import javax.microedition.location.Criteria;
import javax.microedition.location.Landmark;
import javax.microedition.location.LandmarkException;
import javax.microedition.location.LandmarkStore;
import javax.microedition.location.Location;
import javax.microedition.location.LocationException;
import javax.microedition.location.LocationListener;
import javax.microedition.location.LocationProvider;
import javax.microedition.location.ProximityListener;
import javax.microedition.location.QualifiedCoordinates;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;


public class Localiza extends MIDlet implements CommandListener, ProximityListener, LocationListener{

	private Command c1;
	private LocationProvider lp;
	private Location l;
	private Criteria cr;
	private Coordinates coord;
	private LandmarkStore store;
	public Localiza() {
		// TODO Auto-generated constructor stub
	}

	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
		// TODO Auto-generated method stub

	}

	protected void pauseApp() {
		// TODO Auto-generated method stub

	}

	protected void startApp() throws MIDletStateChangeException {
		// TODO Auto-generated method stub
		Display display = Display.getDisplay(this);
		
//		 Seta os critérios para o provedor de localizacao:
//		 precisao de 500 m horizontalmente, ...
		cr= new Criteria();
		cr.setHorizontalAccuracy(500);
		cr.setVerticalAccuracy(25); // 25m 
/*		cr.setPreferredResponseTime(Criteria.NO_REQUIREMENT); 
		cr.setPreferredPowerConsumption(Criteria.NO_REQUIREMENT); 
		cr.setCostAllowed(false); 
		cr.setSpeedAndCourseRequired(true); 
		cr.setAltitudeRequired(true); 
		cr.setAddressInfoRequired(true);  
*/

//		 Requisita localizacao com 1 minuto de timeout
		try {
			lp = LocationProvider.getInstance(cr);
			l = lp.getLocation(60);
			Coordinates c = l.getQualifiedCoordinates();
			System.out.println(l.getCourse());
			System.out.println(l.getSpeed());
			if(c != null ) {
			  // Use coordinate information
			  double lat = c.getLatitude();
			  double lon = c.getLongitude();
			  System.out.println("latitude: "+lat+" longitude: "+lon);	  
			}
		} catch (LocationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//
		// cria informações de endereços para um marco
		//
		AddressInfo address = new AddressInfo();
		address.setField(AddressInfo.CITY, "CIDADE".trim());
		address.setField(AddressInfo.COUNTRY, "PAÍS".trim());
		address.setField(AddressInfo.PHONE_NUMBER, "TELEFONE".trim());
		address.setField(AddressInfo.POSTAL_CODE, "CEP".trim());
		address.setField(AddressInfo.STATE, "ESTADO".trim());
		address.setField(AddressInfo.STREET, "RUA".trim());
		//
		// Recupera armazem de marcos (landmark) 
		//
		try {
			store = LandmarkStore.getInstance("armazem");
		}
		catch (NullPointerException npe)
		{}
		//
		// Cria armazem de marcos (landmark) se não houver algum
		//
		if (store == null)
		{
			try
			{
				LandmarkStore.createLandmarkStore("armazem");
				store = LandmarkStore.getInstance("armazem");
			}
			catch (IllegalArgumentException iae)
			{}
			catch (IOException e)
			{}
			catch (LandmarkException e)
			{}
		} 
		
		// Define coordenadas do marco (corresponde às 
		// coordenadas atuais)
		Coordinates c = l.getQualifiedCoordinates();
		Landmark lmk = new Landmark("Minha casa".trim(), 
		"Endereco residencial", (QualifiedCoordinates) c, address);

		try {
			store.addLandmark(lmk, null);
			System.out.println("Inseriu marco");
			
			LocationProvider.addProximityListener(this, c,
					(float) 0.01);
			System.out.println("Ativou Proximity listener");
			// a acada 10 seg,  com time-out adicional de 5 seg, e com posição obtida a menos de 20 seg
			lp = LocationProvider.getInstance(cr);
			lp.setLocationListener(this, -1, 5, 1);
			//lp.setLocationListener(this, -1, 0, 0);
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (LocationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		
		setaComando(display);
	}
    void setaComando(Display d){
		
		Form form = new Form("Posicionamento");
		c1 = new Command("Le Coordenadas", Command.EXIT, 0);
		
		
		form.addCommand(c1);

		form.setCommandListener(this);
		d.setCurrent(form);
	}
    public void commandAction(Command c, Displayable d){
		
		if (c == c1){
			String label = c.getLabel();
			//System.out.println("Lendo coordenadas "+label);
			try {
				lp = LocationProvider.getInstance(cr);
				l = lp.getLocation(60);
				
				// curso (direção) do movimento em graus (0-360 em relação 
				// ao Norte geográfico ou verdadeiro)
				System.out.println("Curso: "+l.getCourse()); 
				System.out.println("Velocidade: "+l.getSpeed());
				coord = l.getQualifiedCoordinates();

				if(c != null ) {
				  // Use coordinate information
				  double lat = coord.getLatitude();
				  double lon = coord.getLongitude();
				  System.out.println("latitude: "+lat+" longitude: "+lon);	  
				}
			} catch (LocationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public void monitoringStateChanged(boolean arg0) {
		// TODO Auto-generated method stub
		
	}

	public void proximityEvent(Coordinates coord, Location loc) {
		
		//Landmark lm = findNearestLandMark(coord);
		System.out.println("Aviso: Você está próximo de um landmark");
		//		" "+lm.getName()+
		//". Descricao: "+lm.getDescription());
	}

	public void locationUpdated(LocationProvider lp, Location l) {
		System.out.println("Aviso: posição mudou");
		QualifiedCoordinates c = l.getQualifiedCoordinates();
		
		System.out.println("Latitude: "+c.getLatitude());
		System.out.println("Longitude: "+c.getLongitude());	
	}

	public void providerStateChanged(LocationProvider arg0, int arg1) {
		// TODO Auto-generated method stub
		
	}
}

Como poderia fazer um marco de um ponto....representando a movimentação?

javaAurelio

To no trabalho agora.
vou testa seu codigo em casa !

Criado 23 de novembro de 2008
Ultima resposta 25 de nov. de 2008
Respostas 3
Participantes 2