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

Reply via email to