Hi again, Also Location has bearingTo() & distanceTo() methods
http://developer.android.com/reference/android/location/Location.html#bearingTo(android.location.Location) try that. Regards On Sep 26, 8:57 pm, saex <elpablos...@gmail.com> wrote: > I have a Augmented Reality App that simply shows the camera view and > get's the user GPS position, azimuth, direction, inclination, etc... > Also i have stored the GPS position of a famous building of my City. > Now i need that when the user faces to the direction of the Building, > a textview ("Building") or a image (the easiest one) must be draw on > the screen pointing the Building position. For this, i need to know if > the phone is facing to the GPS position of the building. > > ¿How can i do it? I readed some accelerometer/compass/gps tutorials > but all of them are poorly explained and didn't show me how to do > this, for example:http://www.devx.com/wireless/article/42482/1954 > this tutorial is very poorly explained and it didn't works when i use > the code, Also doesn't gives me explanations of how to show a point > when u face the object and how to calculate distances > > Good tutorials for doing this, and code examples, are welcome. > > This is the code i have done. Captures user GPS position (`location`), > azimuth, direction, inclination, etc... and also have stored the > position of the building (`BuildingLat` & `BuildingLon`). > > Help will be apreciated > > The code (CustomCameraView class is a default camera view class, the > code for that class is in the tutorial of the link i posted some lines > up): > > public class AugmentedRealitySampleActivity extends Activity { > private CustomCameraView cv=null; > private TextView tv1; > private TextView tv2; > > public static SensorManager sensorMan; > > private Location location; //gps > public volatile float inclination; //accelerometer > > double BuildingLat; > double BuildingLon; > > private static final int matrix_size = 16; > float[] R = new float[matrix_size]; > float[] outR = new float[matrix_size]; > float[] I = new float[matrix_size]; > float[] values = new float[3]; > private float[] mags; > private float[] accels; > private float azimuth; > private float incValue; > > LocationManager mLocationManager; > MyLocationListener mLocationListener; > > public void onCreate(Bundle savedInstanceState) > { > super.onCreate(savedInstanceState); > cv = new CustomCameraView(this.getApplicationContext()); > FrameLayout rl = new > FrameLayout(this.getApplicationContext()); > LinearLayout ll= new > LinearLayout(this.getApplicationContext()); > ll.setOrientation(LinearLayout.VERTICAL); > > setContentView(rl); > rl.addView(cv); > rl.addView(ll); > > tv1=new TextView(getApplicationContext()); > tv2=new TextView(getApplicationContext()); > > ll.addView(tv1); > ll.addView(tv2); > > sensorMan = (SensorManager) > getSystemService(Context.SENSOR_SERVICE); > sensorMan.registerListener(SensorListener, > sensorMan.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), > SensorManager.SENSOR_DELAY_UI); > sensorMan.registerListener(SensorListener, > sensorMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), > SensorManager.SENSOR_DELAY_UI); > > mLocationListener = new MyLocationListener(); > mLocationManager = > (LocationManager)getSystemService(Context.LOCATION_SERVICE); > > mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, > 2000, 3, mLocationListener); > > //getLatitude(); getLongitude(); bearingTo(); distanceTo(); > tv1.setText("Test1"); > tv1.setBackgroundColor(Color.BLACK); > tv2.setText("Test2"); > > String coordinates2[] = {"39.48333", "-0.36667"}; > BuildingLat = Double.parseDouble(coordinates2[0]); > BuildingLon = Double.parseDouble(coordinates2[1]); > } > > /////////////////////// > GPS ///////////////////////////////////////////// > private class MyLocationListener implements LocationListener > { > public void onLocationChanged(Location loc) { > if (loc!=null) > { > tv1.setText("Location= " + loc.getLatitude()+" > "+loc.getLongitude()); > location=loc; //stores current location > } > else > tv1.setText("null :("); > } > public void onProviderDisabled(String provider) { } > public void onProviderEnabled(String provider) { } > public void onStatusChanged(String provider, int status, > Bundle extras) { } > } > > //////////////////// COMPASS & > ACCELEROMETER //////////////////////////// > SensorEventListener SensorListener = new SensorEventListener() > { > public void onAccuracyChanged(Sensor arg0, int accuracy){ } > public void onSensorChanged(SensorEvent event) > { > if (event.accuracy == > SensorManager.SENSOR_STATUS_UNRELIABLE) > return; > switch (event.sensor.getType()) > { > case Sensor.TYPE_MAGNETIC_FIELD: > mags = event.values.clone(); > break; > case Sensor.TYPE_ACCELEROMETER: > accels = event.values.clone(); > break; > } > if (mags != null && accels != null) > { > SensorManager.getRotationMatrix(R, I, accels, > mags); > //Correct if screen is in Landscape > > SensorManager.remapCoordinateSystem(R,SensorManager.AXIS_X,SensorManager.AX > IS_Z, > outR); > SensorManager.getOrientation(outR, values); > incValue=SensorManager.getInclination(I); > azimuth = (float) > Math.round((Math.toDegrees(values[0]))*2)/2; > //Adjust the range: 0 < range <= 360 (from: > -180 < range <= 180). > azimuth = ( azimuth + 360)%360; // > alternative: mAzimuth = > mAzimuth>=0 ? mAzimuth : mAzimuth+360; > tv2.setText("Azimuth (deg)= " + azimuth); > tv2.append("\n Azimuth (rad)= " + values[0]); > inclination=-Math.round((float) > (values[1]*(360/(2*Math.PI)))); > tv2.append("\n Pitch (rad)= " + values[1]); > tv2.append("\n Pitch (deg)= " + inclination); > tv2.append("\n Roll (rad)= " + > (values[2]*(360/(2*Math.PI)))); > } > } > }; > } -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en