Hi
distanceTo() works perfect, but bearingTo() doesn't works for me.
myLocation.bearingTo(BuildingLocation) gives me 0º if i am facing the
Building and North direction, gives me 90º if i am facing the Building
and East Direction, gives me -180º if i am facing the Building and
South direction.
Then bearingTo doesn't works for me
i need that when the user faces to the direction of the Building
(facing north, facing south, facing east and facing west), 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.
On 26 sep, 22:31, gjs <[email protected]> wrote:
> Hi again,
>
> Also Location has bearingTo() & distanceTo() methods
>
> http://developer.android.com/reference/android/location/Location.html...)
>
> try that.
>
> Regards
>
> On Sep 26, 8:57 pm, saex <[email protected]> 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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en