# Android Question[SOLVED] Indicating when you are facing the direction of a latitude and longitude

#### rleiman

##### Well-Known Member
Longtime User
Hi Everyone,

I this possible with B4A?

This is the latitude and longitude for a particular location.

Place Name Latitude Longitude
Tewksbury, MA, USA 42.610649 -71.234222

This is the latitude and longitude for where I'm at.

Place Name Latitude Longitude
Lowell, MA, USA 42.640999 -71.316711

I would like to know if there is a B4A library that can tell me when I'm facing towards Tewksbury, MA from Lowell, MA. I plan to use the coding from Erel at https://www.b4x.com/android/forum/threads/orientation-and-accelerometer.6647/page-6#post-476271 to get my heading but don't know how to figure out when I'm facing Tewksbury, MA.

Thanks.

#### Syd Wright

##### Well-Known Member
If the distance between point A an B is not so great (e.g. < 100 km) you can assume that this part of the world is flat.
All you have to do is calculate the angle between A and B (relative to North).
Draw A and B on a piece of paper with X scale is 71 to 72 and Y scale is 42 to 43. This should give you insight how to calculate the angle.
To determine which way you are facing use the built-in magnetic sensors of your device or use GPS. In case of GPS you will have to move about 10 meters for the GPS to be able to determine your direction (bearing).
If both angles are the same then you are facing Tewksbury.

#### rleiman

##### Well-Known Member
Longtime User
If the distance between point A an B is not so great (e.g. < 100 km) you can assume that this part of the world is flat.
All you have to do is calculate the angle between A and B (relative to North).
Draw A and B on a piece of paper with X scale is 71 to 72 and Y scale is 42 to 43. This should give you insight how to calculate the angle.
To determine which way you are facing use the built-in magnetic sensors of your device or use GPS. In case of GPS you will have to move about 10 meters for the GPS to be able to determine your direction (bearing).
If both angles are the same then you are facing Tewksbury.

Hi Syd,

The location will be over 500 miles away. I don't think the user will want to move forward any amount. They would be turning left or right without moving forward or backwards.

I think I will try the GPS library with location.BearingTo() later to see what happens.

Are there any other libraries I can use?

Thanks.

#### Erel

##### B4X founder
Staff member
Longtime User
Are there any other libraries I can use?
You don't need any other library for this.

#### Syd Wright

##### Well-Known Member
Hi Syd,

The location will be over 500 miles away. I don't think the user will want to move forward any amount. They would be turning left or right without moving forward or backwards.

I think I will try the GPS library with location.BearingTo() later to see what happens.

Are there any other libraries I can use?

Thanks.
How accurate do you want it to be? You can still do what I suggested at distances of 500km. I don't think a couple of degrees wrong will really matter. The closer the user gets to Tewksbury the more accurate it wll become.

Please bear in mind that GPS can only determine a direction after the user has moved (in a straight line) 5 to 10 meters (or more) because it needs the Lat and Lon of two points to calculate the angle. This also applies to 'location.BearingTo()'.
If the user pivots on the same spot then GPS will not show the correct direction, nor will the angle it shows change.

Last edited:

#### rleiman

##### Well-Known Member
Longtime User
Hi Everyone,

Thanks for the replies. I will be using the phone library and the GPS library to do it.

My target coordinates to face are at latitude 29.907371 and longitude 31.184603 so I used this from the GPS library by adding the following code to the GPS library sample app.

B4X:
``````#Region Module Attributes
#FullScreen: False
#IncludeTitle: True
#ApplicationLabel: GPS
#VersionCode: 1
#VersionName:
#SupportedOrientations: unspecified
#End Region
#BridgeLogger: true
Sub Process_Globals

End Sub

Sub Globals
Dim lblLon As Label
Dim lblLat As Label
Dim lblSpeed As Label
Dim lblSatellites As Label
Private LabelQibla As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
End Sub

Sub Activity_Resume
If Starter.GPS1.GPSEnabled = False Then
ToastMessageShow("Please enable the GPS device.", True)
StartActivity(Starter.GPS1.LocationSettingsIntent) 'Will open the relevant settings screen.
Else
Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION)
Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
If Result Then CallSubDelayed(Starter, "StartGPS")
End If
End Sub

Sub Activity_Pause (UserClosed As Boolean)
CallSubDelayed(Starter, "StopGPS")
End Sub

Public Sub GpsStatus (Satellites As List)
Dim sb As StringBuilder
sb.Initialize
sb.Append("Satellites:").Append(CRLF)
For i = 0 To Satellites.Size - 1
Dim Satellite As GPSSatellite = Satellites.Get(i)
sb.Append(CRLF).Append(Satellite.Prn).Append(\$" \$1.2{Satellite.Snr}"\$).Append(" ").Append(Satellite.UsedInFix)
sb.Append(" ").Append(\$" \$1.2{Satellite.Azimuth}"\$).Append(\$" \$1.2{Satellite.Elevation}"\$)
Next
lblSatellites.Text = sb.ToString
End Sub

Public Sub LocationChanged(Location1 As Location)
Dim locQibla As Location
locQibla.Initialize2("29.907371", "31.184603")

lblLat.Text = "Lat = " & Location1.ConvertToMinutes(Location1.Latitude)
lblLon.Text = "Lon = " & Location1.ConvertToMinutes(Location1.Longitude)
lblSpeed.Text = \$"Speed = \$1.2{Location1.Speed} m/s "\$
LabelQibla.Text = "Qibla = " & Location1.BearingTo(locQibla)
End Sub``````

This above coding returned 58.6 degrees. I also checked a web site that calculates the same thing and it came up with 60 degrees. I imagine the GPS library was more accurate.

I got the phone bearing using this coding:

B4X:
``````#Region  Project Attributes
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: portrait
#CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region

Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.

End Sub

Sub Globals
'These global variables will be redeclared each time the activity is created.
'These variables can only be accessed from this module.

End Sub

Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
End Sub

Sub Activity_Resume
End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub Emad2_OrientationChanged (Azimuth As Float, Pitch As Float, Roll As Float)
End Sub``````

When my bearing was at 59 degrees. I achieved what I needed.

Thanks Erel for that GPS and phone library.

Thanks Syd for the link on calibrating the compass. I will read it to see if it can be done. I was actually going ask about that on another thread.

#### Syd Wright

##### Well-Known Member
Thanks Syd for the link on calibrating the compass. I will read it to see if it can be done. I was actually going ask about that on another thread.
Now everyone will be able to face accurately towards the Kaaba in Mekka, not Tewksbury

Replies
5
Views
1K
Replies
3
Views
271
Replies
1
Views
2K
Android Example MapsDecodePolyline
Replies
25
Views
11K
Replies
5
Views
4K