Read compass under IOS and Android

Hello
I would like to read the compass into my iPhone, now there is an example in NS Basic App Studio, unfortunately the original example program does not work because it is probably out of date. Can someone help me how I can read the compass value 0-360° in Basic under IOS 15?
Kind regards, Marcus

grafik

iOS now requires the user to give permission before the compass functions can be used.

To add this, do the following:

  1. Add a new button to your screen called btnCompass. Title it “Allow Compass Use”.

  2. Add this code to your app:

Function btnCompass_onclick()
  DeviceMotionEvent.requestPermission()
End Function

The compass heading will now show and be updated.

We have added this to the sample in the next build of AS9.

Thank you very much, now at least it works on Apple iPhone, if I also need it on an Android, do I just leave out the line or is there another call?

Yes, there is a different call on Android. The sample has this comment:

// This sample works On iOS only.
// A solution For Android is here:
// http://stackoverflow.com/questions/16048514/can-i-use-JavaScript-To-get-the-Compass-heading-For-ios-And-android

Yes, thanks, I read that, unfortunately the code is in Java and as a beginner I have problems translating Java into Basic. I probably only need a single function to get an angle in degrees on Android.

Here’s a more recent article:

You can include JavaScript code in your BASIC app as follows:

'BASIC code...

JavaScript
   // JavaScript code...
End JavaScript

`more BASIC code...

Now I copied the code into Hello World, unfortunately without success.

Function Button1_onclick()
  MsgBox "Thanks for clicking!"
End Function

JavaScript
   ' JavaScript code...
TrackOrientation() {

    '// starts tracking on deviceready, updates value on currentCompass$ (fallback for ios13+ at "compassPremissioniOS13" funtion)
    if (typeof DeviceOrientationEvent['requestPermission'] !== 'function') {
      const deviceOrientationLestener = (event) => {
        if (this.globals.iphone) {
          this.currentCompass$.next(event['webkitCompassHeading']);
        } else {
          if (event.absolute) {
            this.currentCompass$.next(360 - event.alpha);
          } else {
            window.removeEventListener('deviceorientation', deviceOrientationLestener);
            window.addEventListener('deviceorientationabsolute', (eventB) => {
              this.currentCompass$.next(360 - eventB['alpha']);
            }, true);
          }
        }
      };
      window.addEventListener('deviceorientation', deviceOrientationLestener);
    } 
  }
End JavaScript

This StackOverflow article has a different approach. It’s linked from the previous SO article referenced above.

Here are some docs from MDN which may help.

Detecting device orientation

Window: deviceorientationabsolute event

Window: deviceorientation event

Here’s how this could work, translated to BASIC:

' For Android
window.addEventListener("deviceorientationabsolute", getOrientation, True);

Function getOrientation(event)
  compassbearing = Number(360 - event.alpha).toFixed(1);
  console.log(event);
End Function

Here’s a improvement to the code to request permission on iOS. It checks to see if the permission function exists before calling it:

Function btnCompass_onclick()
  If typeof(DeviceMotionEvent.requestPermission) <> "undefined" Then
    DeviceMotionEvent.requestPermission()
  End If
End Function

Thanks for the tip, I’ve already solved this problem in another way, by asking whether it’s an Apple browser, that should work too, but I haven’t gotten any further with the Android compass querying the angle.

´´´
If Left(navigator.vendor,5)=“Apple” Then Button1.disabled = False
´´´

I just tested the Android Compass, it works great, thank you very much.
Now value the variable compassbearing. I don’t quite understand what the command console.log(event) does yet.
Thank you again

Marcuse
Can you post the whole code that worked for you so we can all benefit?
Or just zip up the whole Hello World that you used?

Thanks very much,
Paul

Here’s the AppStudio Wiki entry on the console statement.

Briefly, it outputs text to the browse console.

Yes, with pleasure, unfortunately I don’t really know where to put it yet, is there an extra area?
So far I have only seen a few source code programs from other users. Is there an area?
Yesterday evening I looked at the tutorials on you tube, unfortunately there are only very few and some of them are almost 10 years old. There is nothing current, or am I looking in the wrong way?
In other forums everyone can upload their program and you can then optimize it together.

I think there will not be much code so I think you could post it here. Just remember to put those three little tick marks around the code: (upper left corner of your keyboard)

code

To attach a zip file, I think all you have to do is drag and drop the file here.

I have written a small program for Amateur Radio operators here.
It’s my first program in NS Basic App Studio
The program runs on Android and Apple.
It gets the current GPS data and converts it into the Meadenhead Locator that is common for amateur radio operators. This representation consists of 2 letters + 2 numbers + 2 letters, my program is even more precise and also shows the nanofields (approx. 30mX30m)
It also calculates the distance between 2 locators and the direction in which the 2 locators are located.
The program consists of demo parts and calculations and is far from finished.
The display on different devices still needs to be improved. I would also like to activate the 2nd shape when I turn my cell phone and display the 2 locators on a map, maybe someone can help me…
The program also evaluates the first 4 characters (call suffix) of an amateur radio call sign and names the country in which the amateur radio operator is located.

' V10 geändert nun noch Kompass eingefügt und Richtung unter IOS
' Optimierung
' mit Android Kompass
' Set up global variables


Dim gps:Dim Wheel:Dim Z(9):Dim Toggle:Dim Toggle2:Dim Toggle3
Dim STX:Dim lg:Dim bg:Dim LZ:Dim lg0:Dim bg0

'Locator REV 
Dim Z2(9):Dim Loc_REV:Dim I:Dim bg2:Dim lg2
Dim dlat:Dim dlon:Dim a:Dim C
'kompass
Dim pos="0"
Dim pos_a=0
Dim POS2

'Anfang Richtung
Dim Grad 
Dim HL ' Home Locator Länge (-14)
Dim HB 'Home Locator Breite
Dim LL 'Locator Länge
Dim LB 'Locator Breite
Dim DIST 'Entfernung
Dim Winkel 'Winkel Ausgabe
Dim BOG 'Bogenmass
BOG = Math.PI/180
Dim Apple
'Ende Richtung

Dim Land
Dim X
Dim RUF
Dim timerRef

Sub Main()
  longitude = -79.20989561
  latitude = 43.73768353
  lastRefresh=0
  Wheel=0
  Image2.Visible = False:Label2.Visible = False
  Label5.Visible = False

  'neu
  'This starts scanning the current location. It checks it every 5 seconds.
  'If it gets the data successfully, the handler function is called.
  'If not, errorCallBack is called.
  options={timeout: 5000, maximumAge: 5000, enableHighAccuracy: True}
  gps=navigator.geolocation.watchPosition(onGeolocation, errorCallBack, options)
  
  'disable the stop button, enable the start button
'  btnStart.disabled=True
  btnStop.disabled=False
  'bis hier
  If Left(navigator.vendor,5)="Apple" Then
    Apple = True
   
    Button1.disabled = False 'Abfrage ob es ein Apple ist
  Else
    window.addEventListener("deviceorientationabsolute", getOrientation, True);
    Apple = False
    Button1.disabled = False 
  End If
End Sub

Function errorCallBack(Error)
  'unable to get the geolocation data
  'MsgBox Error.message
End Function

Function ButtonCopy_onclick()
  'Copy Button
  Input2.value = Input1.value 
  Input4.value = Input3.value 
End Function

Function btnStop_onclick() 'GPS Button
  Toggle = Not Toggle
  If Toggle = True Then 
    btnStop.value ="Start GPS"
    navigator.geolocation.clearWatch(gps)
    Label2.textContent =" "
    STX=""
    Textarea1.value = STX
    Image1.Visible = False
  End If
  If Toggle = False Then
    btnStop.value ="Stop GPS"
    options={timeout: 5000, maximumAge: 5000, enableHighAccuracy: True}
    gps=navigator.geolocation.watchPosition(onGeolocation, errorCallBack, options)
    Image1.Visible = True
  End If
 
End Function

Function onGeolocation(location)
  lg = location.coords.longitude
  bg = location.coords.latitude
  'Übergabe des aktuellen Wertes für die Entfernugsberechnung
  lg0 = lg
  bg0 = bg
  
  If IsNumeric(location.timestamp) Then
    gpsDate=new Date(location.timestamp)
  Else
    gpsDate=location.timestamp
  End If
  'Textarea1.value = s & "Timestamp: " + gpsDate
  STX = "Längengrad: "& Int(lg*100000)/100000 & "°" & vbCRLF & "Breitengrad: "& Int(bg*100000)/100000 &"°"& vbCRLF 
  STX = STX & "Geschwindigkeit: " & Int((location.coords.speed *3.6)*100)/100  & " km/h" & vbCRLF
  STX = STX & "Höhe: " & Int(location.coords.altitude*100)/100 & " m" & vbCRLF
  
  Textarea1.value = STX
  
  drehen()
  Meadenhead_zu_LB
  LG_ZU_MEADENHEAD
  Entfernung

End Function

Sub Meadenhead_zu_LB  
  'Konvertiere längen und Breitengrad zum 10 stelligen Meadenhead Locator 
  ' Berechne Längengrad
    LZ = Int((lg + 180) / 20)
    Z(0) = Chr(LZ + 65)
    lg = lg - LZ * 20
    
    LZ = Int((lg + 180) / 2)
    Z(2) = CStr(LZ)
    lg = lg - LZ * 2
    
    LZ = Int((lg + 180) / (5 / 60))
    Z(4) = Chr(LZ + 97)
    lg = lg - LZ * (5 / 60)
    
    ' Berechne Microgrid
    LZ = Int((lg + 180) / (1 / 120))
    Z(6) = CStr(LZ)
    
    lg = lg - LZ * (1 / 120)
    ' Berechne Nanofelder Längengrad LZ darf nur zwischen 1...24 sein
    LZ = Int((lg + 180) / (1 / 2880))
    Z(8) = Chr(LZ + 97)
    
   '********************************************** 
    ' Berechne Breitengrad
    LZ = Int((bg + 90) / 10)
    Z(1) = Chr(LZ + 65)
    bg = bg - LZ * 10
    
    LZ = Int((bg + 90) / 1)
    Z(3) = CStr(LZ)
    bg = bg - LZ
    
    LZ = Int((bg + 90) / (2.5 / 60))
    Z(5) = Chr(LZ + 97)
    bg = bg - LZ * (2.5 / 60)
    
    ' Berechne Microgrid
    LZ = Int((bg + 90) / (0.5 / 120))
    Z(7) = CStr(LZ)
    
    bg = bg - LZ * (0.5 / 120)
    ' Berechne Nanofelder Längengrad LZ darf nur zwischen 1...24 sein + Ascii von a
    LZ = Int((bg + 90) / (0.5 / 2880))
    Z(9) = Chr(LZ + 97)
    
    ' Assemble the Maidenhead Locator
    Input1.value = Z(0) & Z(1) & Z(2) & Z(3) & Z(4) & Z(5) 
    Input3.value = Z(6) & Z(7) & Z(8) & Z(9)
End Sub
 '--------------------------------------------------------------------------------------------------
Sub LG_ZU_MEADENHEAD
 'Rechne Meadenhead Locator in Längen und Breitengrad um
  
 Loc_REV = UCase(Input2.value +Input4.value) 
  
 For I = 0 To 9
  Z(I) = Mid(Loc_REV, I+1, 1)
 Next I
'Label1.value = Z(0)+Z(1)+Z(2)+Z(3)+Z(4)+Z(5)+Z(6)+Z(7)
    
 If Asc(Z(0)) < Asc("A") Or Asc(Z(0)) > Asc("R") Then Exit Sub
 If Asc(Z(1)) < Asc("A") Or Asc(Z(1)) > Asc("R") Then Exit Sub
 If Asc(Z(2)) < Asc("0") Or Asc(Z(2)) > Asc("9") Then Exit Sub
 If Asc(Z(3)) < Asc("0") Or Asc(Z(3)) > Asc("9") Then Exit Sub
 If Asc(Z(4)) < Asc("A") Or Asc(Z(4)) > Asc("X") Then Exit Sub
 If Asc(Z(5)) < Asc("A") Or Asc(Z(5)) > Asc("X") Then Exit Sub
 If Asc(Z(6)) < Asc("0") Or Asc(Z(6)) > Asc("9") Then Exit Sub
 If Asc(Z(7)) < Asc("0") Or Asc(Z(7)) > Asc("9") Then Exit Sub
 If Asc(Z(8)) < Asc("A") Or Asc(Z(8)) > Asc("X") Then Exit Sub
 If Asc(Z(9)) < Asc("A") Or Asc(Z(9)) > Asc("X") Then Exit Sub
    
 lg2 = -180
 bg2 = -90

    ' Berechnung Längengrad
    lg2 = lg2 + (Asc(Z(0)) - 65) * 20
    lg2 = lg2 + Number(Z(2)) * 2
    lg2 = lg2 + (Asc(Z(4)) - 65) * (5 / 60)
    lg2 = lg2 + Number(Z(6)) * (1 / 120)
    lg2 = lg2 + (Asc(Z(8)) - 65) * (1 / 2880)

    'Berechnung Breitengrad
    bg2 = bg2 + (Asc(Z(1)) - 65) * 10
    
    If Asc(Z(1)) < Asc("I") Then
    bg2 = bg2 - Number(Z(3))
    Else
    bg2 = bg2 + Number(Z(3))
    End If
    
    bg2 = bg2 + (Asc(Z(5)) - 65) * (2.5 / 60)
    bg2 = bg2 + Number(Z(7)) * (0.5 / 120)
    bg2 = bg2 + (Asc(Z(9)) - 65) * (0.5 / 2880)

    'Label1.value = "Länge " & lg0 "  breite: " & bg0
End Sub  
'----------------------------------------------------------------------------------
Sub Entfernung
'Berechnung Entfernung

    dlat = (bg2 - bg0) * (BOG)
    dlon = (lg2 - lg0) * (BOG)

    a = Sin(dlat / 2) * Sin(dlat / 2) + Cos(bg0 * (BOG)) * Cos(bg2 * (BOG)) * Sin(dlon / 2) * Sin(dlon / 2)
    C = 2 * Atn(Sqr(a / (1 - a)))
    
    'Winkelberechnung
    HL = lg0 'Home Locator Längengrad 
    HB = bg0 'Home Locator Breitengrad

   LL = lg2  'Längengrad Locator 2
   LB = bg2  'Breitengrad Locator 2
   
   DIST = Int(6371.299 * C * 1000) / 1000    'Entfernung

    Winkel = Abs(360*(((LL-HL)-Abs(LL-HL))/(LL-HL)/2)-Math.acos((Cos((90-LB)*BOG)- Cos(DIST* 360/2/6371000.299/Math.PI*1000*BOG)* Cos((90-HB)*BOG)) /Sin(DIST*360/2/6371000.299/Math.PI*1000*BOG)/ Sin((90-HB)*BOG))*180/Math.PI)
    Winkel= Int(Winkel*10)/10
 If Input2.value = Input1.value And Input4.value = Input3.value Then
  Label1.value = "Entfernung: 0.000 km"
  Label3.value =""
  Else
  Label1.value = "Entfernung: "& String(Int(6371.299 * C * 1000) / 1000) + " km"
  Label3.value = "Richtung: " + Winkel + "°"
 End If
End Sub

Sub drehen()
  Wheel = Wheel + 30
  If Wheel>=360 Then Wheel=0
  Image1.style.webkitTransform="rotate(" & Wheel & "deg)"
End Sub


Function Button1_onclick()
  Toggle2 = Not Toggle2
  If Toggle2 = True Then Compass_off
  If Toggle2 = False Then Compass_on
End Function

Sub Compass_on
 Button1.value = "Compass on"
 Image2.Visible = False
 Label2.Visible = False
End Sub

Sub Compass_off
  Button1.value = "Compass off"
  If Apple = True Then DeviceMotionEvent.requestPermission() 'für Apple neu
  Input6.fadeOut(0)
  Label5.Visible =False
  Image2.Visible = True
  Label2.Visible =True
End Sub  


Function Button3_onclick()' Call Suffix button
 Toggle3= Not Toggle3
 If Toggle3 = True Then Suffix_on
 If Toggle3 = False Then Suffix_off
End Function

Sub Suffix_on
 Button3.value ="Suffix off"
 Compass_on
 Toggle2 = False
 Input6.fadeIn(0)
 Label5.Visible=True
 timerRef = SetInterval(nextAction, 500)
End Sub

Sub Suffix_off
  Button3.value ="Suffix on"
 Input6.fadeOut(0)
 Label5.Visible=False
 timerRef = ClearInterval
End Sub
'--------------------------------------------------------------------------------

Function getOrientation(event)
  
  pos_a = Winkel
  pos = Number(360 - event.alpha).toFixed(1);
  POS2 = pos - pos_a
  If POS2<0 Then POS2=POS2+359
  If POS2>359 Then POS2=POS2-359
  Label2.text = "Richtung "+Int(pos)+"°"
  Image2.style.webkitTransform="rotate(" & POS2 & "deg)"
  Image2.style.webkitTransform="rotate(-" & POS2 & "deg)"
  
  
  
  ''console.log(event);
End Function
'--------------------------------------------------------------------


Function window_ondeviceorientation(e)
  
  ' Label1.text=e.webkitCompassHeading
  ' If Label1.text="undefined" Then 
  ' Label1.text="Compass not supported"
  ' Image2.Visible = False
  ' Label2.Visible = False
  ' Button1.Visible= False
  ' Else  
  ' Label1.text=""
  ' End If
  
  pos_a = Winkel
  pos = e.webkitCompassHeading
  POS2 = pos - pos_a
  
  If POS2<0 Then POS2=POS2+359
  If POS2>359 Then POS2=POS2-359
  
  Label2.text = "Richtung "+Int(pos)+"°"
  Image2.style.webkitTransform="rotate(" & POS2 & "deg)"
  Image2.style.webkitTransform="rotate(-" & POS2 & "deg)"
End Function

'---------------------------------------------------------

Function nextAction()
  
RUF= UCase(Input6.value)
Land = ""
X = Left(RUF , 1)
If X = "I" Then Land = "Italien"
If X = "F" Then Land = "Frankreich"
If X = "B" Then Land = "China"
If X = "G" Or X = "M" Or X = "2" Then Land = "Ver.Königreich"
If X = "R" Then Land = "Russland"
If X = "K" Or X = "N" Or X = "W" Then Land = "USA"
X = Left(RUF , 2)
If X = "AA" Or X = "AB" Or X = "AC" Or X = "AD" Or X = "AE" Or X = "AF" Or X = "AG" Or X = "AH" Or X = "AI" Or X = "AJ" Or X = "AK" Or X = "AL" Then Land = "USA"
If X = "AM" Or X = "AN" Or X = "AO" Or X = "EA" Or X = "EB" Or X = "EC" Or X = "ED" Or X = "EE" Or X = "EG" Or X = "EH" Then Land = "Spanien"
If X = "AP" Or X = "AQ" Or X = "AR" Or X = "AS" Or X = "6P" Or X = "6Q" Or X = "6R" Or X = "6S" Then Land = "Pakistan"
If X = "AT" Or X = "AU" Or X = "AV" Or X = "AW" Or X = "VT" Or X = "VU" Or X = "VV" Or X = "VW" Or X = "8T" Or X = "8U" Or X = "8V" Or X = "8W" Or X = "8X" Or X = "8Y" Then Land = "Indien"
If X = "AX" Or X = "VH" Or X = "VI" Or X = "VJ" Or X = "VK" Or X = "VL" Or X = "VL" Or X = "VN" Or X = "VZ" Then Land = "Australien"
If X = "AY" Or X = "AZ" Or X = "L2" Or X = "L3" Or X = "L4" Or X = "L5" Or X = "L6" Or X = "L7" Or X = "L8" Or X = "L9" Then Land = "Argentinien"
If X = "LO" Or X = "LP" Or X = "LQ" Or X = "LR" Or X = "LS" Or X = "LT" Or X = "LU" Or X = "LV" Or X = "LW" Then Land = "Argentinien"
If X = "A2" Or X = "80" Then Land = "Botswana"
If X = "A3" Then Land = "Tonga"
If X = "A4" Then Land = "Oman"
If X = "A5" Then Land = "Bhutan"
If X = "A6" Then Land = "Ver.Arab.Emirate"
If X = "A7" Then Land = "Katar"
If X = "A8" Or X = "D5" Or X = "EL" Or X = "5L" Or X = "5M" Then Land = "Liberia"
If X = "A9" Then Land = "Bahrein"
If X = "XS" Or X = "3H" Or X = "3I" Or X = "3J" Or X = "3K" Or X = "3L" Or X = "3M" Or X = "3N" Or X = "3O" Then Land = "China"
If X = "3P" Or X = "3Q" Or X = "3R" Or X = "3S" Or X = "3T" Or X = "3U" Then Land = "China"
If X = "BM" Or X = "BN" Or X = "BO" Or X = "BP" Or X = "BQ" Or X = "BU" Or X = "BV" Or X = "BW" Or X = "BX" Then Land = "Taiwan"
If X = "CA" Or X = "CB" Or X = "CC" Or X = "CD" Or X = "CE" Or X = "XQ" Or X = "XR" Or X = "3G" Then Land = "Chile"
If X = "CF" Or X = "CG" Or X = "CH" Or X = "CI" Or X = "CJ" Or X = "CK" Or X = "CY" Or X = "CZ" Or X = "VA" Then Land = "Kanada"
If X = "VB" Or X = "VC" Or X = "VD" Or X = "VE" Or X = "VF" Or X = "VG" Or X = "VO" Or X = "VX" Or X = "VY" Then Land = "Kanada"
If X = "XJ" Or X = "XK" Or X = "XL" Or X = "XM" Or X = "XN" Or X = "XO" Then Land = "Kanada"""
If X = "CN" Or X = "5C" Or X = "5D" Or X = "5E" Or X = "5F" Or X = "5G" Then Land = "Marokko"
If X = "CP" Then Land = "Bolivien"
If X = "CQ" Or X = "CR" Or X = "CS" Or X = "CT" Or X = "CU" Then Land = "Portugal"
If X = "CV" Or X = "CW" Or X = "CX" Then Land = "Uruguay"
If X = "C2" Then Land = "Nauru"
If X = "C3" Then Land = "Andorra"
If X = "C5" Then Land = "Gambia"
If X = "C6" Then Land = "Bahamas"
If X = "C8" Or X = "C9" Then Land = "Mosambik"
If X = "DA" Or X = "DB" Or X = "DC" Or X = "DD" Or X = "DE" Or X = "DF" Or X = "DG" Or X = "DH" Or X = "DI" Or X = "DJ" Or X = "DK" Or X = "DL" Or X = "DM" Or X = "DN" Then Land = "Deutschland"
If X = "DO" Or X = "DP" Or X = "DQ" Or X = "DR" Or X = "Y2" Or X = "Y3" Or X = "Y4" Or X = "Y5" Or X = "Y6" Or X = "Y7" Or X = "Y8" Or X = "Y9" Then Land = "Deutschland"
If X = "DS" Or X = "DT" Or X = "D7" Or X = "D8" Or X = "D9" Or X = "HL" Or X = "6K" Or X = "6L" Or X = "6M" Or X = "6N" Then Land = "Südkorea"
If X = "DU" Or X = "DV" Or X = "DW" Or X = "DX" Or X = "DY" Or X = "DZ" Or X = "4D" Or X = "4E" Or X = "4F" Or X = "4G" Or X = "4H" Or X = "4I" Then Land = "Philippinen"
If X = "D2" Or X = "D3" Then Land = "Angola"
If X = "D4" Then Land = "Kap Verde"
If X = "D6" Then Land = "Komoren"
If X = "EI" Or X = "EJ" Then Land = "Irland"
If X = "EK" Then Land = "Armenien"
If X = "EP" Or X = "EQ" Or X = "9B" Or X = "9C" Or X = "9D" Then Land = "Iran"
If X = "ER" Then Land = "Moldawien"
If X = "ES" Then Land = "Estland"
If X = "ET" Then Land = "Äthiopien"
If X = "EU" Or X = "EV" Or X = "EW" Then Land = "Belarus"
If X = "EX" Then Land = "Kirgisistan"
If X = "EY" Then Land = "Tadschikistan"
If X = "EZ" Then Land = "Turkmenistan"
If X = "E3" Then Land = "Eritrea"
If X = "E4" Then Land = "Palestina"
If X = "E5" Then Land = "Cookinseln"
If X = "E7" Then Land = "Bosnien"
If X = "HW" Or X = "HX" Or X = "HY" Or X = "TH" Or X = "TK" Or X = "TM" Or X = "TV" Or X = "TW" Then Land = "Frankreich"
If X = "TX" Or X = "TO" Or X = "TP" Or X = "TQ" Then Land = "Frankreich"
If X = "VP" Or X = "VQ" Or X = "VS" Or X = "ZB" Or X = "ZC" Or X = "ZD" Or X = "ZE" Or X = "ZF" Then Land = "Ver.Königreich"
If X = "ZG" Or X = "ZH" Or X = "ZI" Or X = "ZJ" Or X = "ZN" Or X = "ZO" Or X = "ZQ" Then Land = "Ver.Königreich"
If X = "HA" Or X = "HG" Then Land = "Ungarn"
If X = "HB" Or X = "HE" Then Land = "Schweiz"
If X = "HC" Or X = "HD" Then Land = "Ecuador"
If X = "HF" Or X = "SN" Or X = "SO" Or X = "SP" Or X = "SQ" Or X = "SR" Or X = "3Z" Then Land = "Polen"
If X = "HH" Or X = "4V" Then Land = "Haiti"
If X = "HI" Then Land = "Dominik.Repu."
If X = "HJ" Or X = "HK" Or X = "5J" Or X = "5K" Then Land = "Kolumbien"
If X = "HM" Or X = "P5" Or X = "P6" Or X = "P7" Or X = "P8" Or X = "P9" Then Land = "Nordkorea"
If X = "HN" Or X = "YI" Then Land = "Irak"
If X = "HO" Or X = "HP" Or X = "H3" Or X = "H8" Or X = "H9" Or X = "3E" Or X = "3F" Then Land = "Panama"
If X = "HQ" Or X = "HR" Then Land = "Honduras"
If X = "HS" Or X = "E2" Then Land = "Thailand"
If X = "HT" Or X = "H6" Or X = "H7" Or X = "YN" Then Land = "Nicaragua"
If X = "HU" Or X = "YS" Then Land = "Salvador"
If X = "HV" Then Land = "Vatikan"
If X = "HZ" Or X = "7Z" Or X = "8Z" Then Land = "Saudi Arabien"
If X = "H2" Or X = "C4" Or X = "P3" Or X = "5B" Then Land = "Rep. Zypern"
If X = "H4" Then Land = "Salomonen"
If X = "JA" Or X = "JB" Or X = "JC" Or X = "JD" Or X = "JE" Or X = "JF" Or X = "JG" Or X = "JH" Or X = "JI" Or X = "JJ" Or X = "JK" Or X = "JL" Then Land = "Japan"
If X = "JM" Or X = "JN" Or X = "JO" Or X = "JP" Or X = "JQ" Or X = "JR" Or X = "JS" Or X = "7J" Or X = "7K" Or X = "7L" Or X = "7M" Or X = "7N" Then Land = "Japan"
If X = "8J" Or X = "8K" Or X = "8L" Or X = "8M" Or X = "8N" Then Land = "Japan"
If X = "JT" Or X = "JU" Or X = "JV" Then Land = "Mongolei"
If X = "JW" Or X = "JX" Or X = "LA" Or X = "LB" Or X = "LC" Or X = "LD" Or X = "LE" Or X = "LF" Or X = "LG" Or X = "LH" Then Land = "Norwegen"
If X = "LI" Or X = "LJ" Or X = "LK" Or X = "LL" Or X = "LM" Or X = "LN" Or X = "3Y" Then Land = "Norwegen"
If X = "JY" Then Land = "Jordanien"
If X = "J2" Then Land = "Dschibuti"
If X = "J3" Then Land = "Grenada"
If X = "J5" Then Land = "Guinea-Bissau"
If X = "J6" Then Land = "St.Lucia"
If X = "J7" Then Land = "Dominica"""
If X = "J8" Then Land = "St.Vincent"
If X = "LX" Then Land = "Luxenburg"
If X = "LY" Then Land = "Litauen"
If X = "LZ" Then Land = "Bulgarien"
If X = "OA" Or X = "OB" Or X = "OC" Or X = "4T" Then Land = "Peru"
If X = "OD" Then Land = "Libanon"
If X = "OE" Then Land = "Österreich"
If X = "OF" Or X = "OG" Or X = "OH" Or X = "OI" Or X = "OJ" Then Land = "Finnland"
If X = "OK" Or X = "OL" Then Land = "Tschechien"
If X = "OM" Then Land = "Slowakei"
If X = "ON" Or X = "OT" Or X = "OR" Then Land = "Belgien"
If X = "OU" Or X = "OV" Or X = "OW" Or X = "OX" Or X = "OY" Or X = "OZ" Or X = "XP" Or X = "5P" Or X = "5Q" Then Land = "Dänemark"
If X = "PA" Or X = "PB" Or X = "PC" Or X = "PD" Or X = "PE" Or X = "PF" Or X = "PG" Or X = "PH" Or X = "PI" Then Land = "Niederlande"
If X = "PP" Or X = "PQ" Or X = "PR" Or X = "PS" Or X = "PT" Or X = "PU" Or X = "PV" Or X = "PW" Or X = "PX" Then Land = "Brasilien"
If X = "PY" Or X = "ZV" Or X = "ZW" Or X = "ZX" Or X = "ZY" Or X = "ZZ" Then Land = "Brasilien"
If X = "PJ" Then Land = "Antillen"
If X = "PK" Or X = "PL" Or X = "PN" Or X = "PM" Or X = "PO" Or X = "JZ" Or X = "YB" Or X = "YC" Or X = "YD" Or X = "YE" Or X = "YF" Or X = "YG" Then Land = "Indonesien"
If X = "YH" Or X = "7A" Or X = "7B" Or X = "7C" Or X = "7D" Or X = "7E" Or X = "7F" Or X = "7G" Or X = "7H" Or X = "7I" Or X = "8A" Or X = "8B" Then Land = "Indonesien"
If X = "8C" Or X = "8D" Or X = "8E" Or X = "8F" Or X = "8G" Or X = "8H" Or X = "8I" Then Land = "Indonesien"
If X = "PZ" Then Land = "Suriname"
If X = "P2" Then Land = "Neuguinea"
If X = "P4" Then Land = "Aruba"
If X = "UA" Or X = "UB" Or X = "UC" Or X = "UD" Or X = "UE" Or X = "UF" Or X = "UG" Or X = "UH" Or X = "UI" Then Land = "Russland"
If X = "SA" Or X = "SB" Or X = "SC" Or X = "SD" Or X = "SE" Or X = "SF" Or X = "SG" Or X = "SH" Or X = "SI" Or X = "SJ" Or X = "SK" Or X = "SL" Then Land = "Schweden"
If X = "SN" Or X = "SM" Or X = "7S" Or X = "8S" Then Land = "Schweden"
If X = "SU" Or X = "6A" Or X = "6B" Then Land = "Ägypten"
If X = "6T" Or X = "6U" Or X = "ST" Then Land = "Sudan"
If X = "SV" Or X = "SW" Or X = "SX" Or X = "SY" Or X = "SZ" Or X = "J4" Then Land = "Griechenland"
If X = "S0" Then Land = "Sahara"
If X = "S2" Or X = "S3" Then Land = "Bangladesch"
If X = "S5" Then Land = "Slowenien"
If X = "S6" Or X = "9V" Then Land = "Singapur"
If X = "S7" Then Land = "Sychellen"
If X = "S8" Or X = "ZR" Or X = "ZS" Or X = "ZT" Or X = "ZU" Then Land = "Südafrika"
If X = "S9" Then Land = "Sao Tome"
If X = "TA" Or X = "TB" Or X = "TC" Or X = "YM" Then Land = "Türkei"
If X = "TD" Or X = "TG" Then Land = "Guatemala"
If X = "TE" Or X = "TI" Then Land = "Costa Rica"
If X = "TF" Then Land = "Island"
If X = "TJ" Then Land = "Kamerun"
If X = "TL" Then Land = "Zentr. Afrik. Rep."
If X = "TN" Or X = "9O" Or X = "9P" Or X = "9R" Or X = "9S" Or X = "9T" Then Land = "Kongo"
If X = "TR" Then Land = "Gabun"
If X = "TS" Or X = "3V" Then Land = "Tunesien"
If X = "TT" Then Land = "Tschad"
If X = "TU" Then Land = "Elfenbeinküste"
If X = "TY" Then Land = "Benin"
If X = "TZ" Then Land = "Mali"
If X = "T2" Then Land = "Tuvalu"
If X = "T3" Then Land = "Kiribati"
If X = "T4" Or X = "CL" Or X = "CM" Or X = "CO" Then Land = "Kuba"
If X = "T5" Or X = "6O" Then Land = "Somalia"
If X = "T6" Or X = "YA" Then Land = "Afganistan"
If X = "T7" Then Land = "San Marino"
If X = "T8" Then Land = "Palau"
If X = "UJ" Or X = "UK" Or X = "UL" Or X = "UM" Then Land = "Usbekistan"
If X = "UN" Or X = "UO" Or X = "UP" Or X = "UQ" Then Land = "Kasachstan"
If X = "UR" Or X = "US" Or X = "UT" Or X = "UU" Or X = "UV" Or X = "UW" Or X = "UX" Or X = "UY" Or X = "UZ" Then Land = "Ukraine"
If X = "EM" Or X = "EN" Or X = "EO" Then Land = "Ukraine"
If X = "VP" Or X = "VQ" Then Land = "Verein.Königreich"
If X = "VR" Then Land = "Hongkong"
If X = "VS" Then Land = "Verein.Königreich"
If X = "VZ" Then Land = "Australien"
If X = "V2" Then Land = "Antigua"
If X = "V3" Then Land = "Belize"
If X = "V4" Then Land = "St.Kitts"
If X = "V5" Then Land = "Namibia"
If X = "V6" Then Land = "Micronesien"
If X = "V7" Then Land = "Marshallinseln"
If X = "V8" Then Land = "Brunei"
If X = "XA" Or X = "XB" Or X = "XC" Or X = "XD" Or X = "XE" Or X = "XF" Or X = "6D" Or X = "6E" Or X = "6F" Then Land = "Mexico"
If X = "XG" Or X = "XH" Or X = "XI" Or X = "6G" Or X = "6H" Or X = "6I" Or X = "6J" Or X = "4A" Or X = "4B" Or X = "4C" Then Land = "Mexico"
If X = "XT" Then Land = "Burkina Faso"
If X = "XU" Then Land = "Kambodscha"
If X = "XV" Or X = "3W" Then Land = "Vietnam"
If X = "XW" Then Land = "Laos"
If X = "XX" Then Land = "Macou"
If X = "XY" Or X = "XZ" Then Land = "Myarmar"
If X = "YJ" Then Land = "Vanatu"
If X = "YK" Or X = "6C" Then Land = "Syrien"
If X = "YL" Then Land = "Lettland"
If X = "YO" Or X = "YP" Or X = "YQ" Or X = "YR" Then Land = "Rumänien"
If X = "YT" Or X = "YU" Then Land = "Serbien"
If X = "YV" Or X = "YW" Or X = "YX" Or X = "YY" Or X = "4M" Then Land = "Venezuela"
If X = "ZA" Then Land = "Albanien"
If X = "ZB" Or X = "ZC" Or X = "ZD" Or X = "ZE" Or X = "ZF" Or X = "ZG" Or X = "ZH" Or X = "ZI" Or X = "ZJ" Then Land = "Verein.Königreich"
If X = "ZK" Or X = "ZL" Or X = "ZN" Or X = "ZM" Then Land = "Neuseeland"
If X = "ZN" Or X = "ZM" Or X = "ZO" Then Land = "Verein.Königreich"
If X = "ZP" Then Land = "Paraguay"
If X = "ZQ" Then Land = "Verein.Königreich"
If X = "Z2" Then Land = "Simbawe"
If X = "Z3" Then Land = "Mazedonien"
If X = "Z8" Then Land = "Süd Sudan"
If X = "3A" Then Land = "Monaco"
If X = "3B" Then Land = "Mauritius"
If X = "3C" Then Land = "Äquatoria Gui."
If X = "3X" Then Land = "Guinea"
If X = "4J" Or X = "4K" Then Land = "Aserbeidschan"
If X = "4L" Then Land = "Georgien"
If X = "4O" Then Land = "Montenegro"
If X = "4P" Or X = "4Q" Or X = "4R" Or X = "4S" Then Land = "Sri Lanka"
If X = "4U" Then Land = "Vereinte Nationen"
If X = "4W" Then Land = "Osttimor"
If X = "4X" Or X = "4Z" Then Land = "Israel"
If X = "5A" Then Land = "Libyen"
If X = "5H" Or X = "5I" Then Land = "Tansania"
If X = "5L" Or X = "5M" Then Land = "Liberia"
If X = "5N" Or X = "5O" Then Land = "Nigeria"
If X = "5T" Then Land = "Mauretanien"
If X = "5U" Then Land = "Niger"
If X = "5V" Then Land = "Togo"
If X = "5W" Then Land = "Samoa"
If X = "5X" Then Land = "Uganda"
If X = "5Y" Or X = "5Z" Then Land = "Kenia"
If X = "6V" Or X = "6W" Then Land = "Senegal"
If X = "6X" Then Land = "Madagaskar"
If X = "6Y" Then Land = "Jamaika"
If X = "6Z" Then Land = "Liberia"
If X = "7O" Then Land = "Jemen"
If X = "7P" Then Land = "Lesotho"
If X = "7Q" Then Land = "Malawi"
If X = "7T" Or X = "7U" Or X = "7V" Or X = "7W" Or X = "7X" Or X = "7Y" Or X = "7R" Then Land = "Algerien"
If X = "8P" Then Land = "Barbados"
If X = "8Q" Then Land = "Malediven"
If X = "8R" Then Land = "Guyana"
If X = "9A" Then Land = "Kroatien"
If X = "9E" Or X = "9F" Then Land = "Äthiopien"
If X = "9G" Then Land = "Ghana"
If X = "9H" Then Land = "Malta"
If X = "9I" Or X = "9J" Then Land = "Sambia"
If X = "9k" Then Land = "Kuwait"
If X = "9L" Then Land = "Sierra Leone"
If X = "9M" Then Land = "Malaysia"
If X = "9N" Then Land = "Nepal"
If X = "9U" Then Land = "Burundi"
If X = "9W" Then Land = "Malaysia"
If X = "9X" Then Land = "Ruanda"
If X = "9Y" Or X = "9Z" Then Land = "Trinidad"
X = Left(RUF , 3)
If X = "SSA" Or X = "SSB" Or X = "SSC" Or X = "SSD" Or X = "SSE" Or X = "SSF" Or X = "SSG" Then Land = "Ägypten"
If X = "SSH" Or X = "SSI" Or X = "SSJ" Or X = "SSK" Or X = "SSL" Or X = "SSM" Then Land = "Ägypten"
If X = "SSN" Or X = "STZ" Then Land = "Sudan"
If X = "VP8" Then Land = "Falkland"
If X = "HB0" Or X = "HBL" Then Land = "Liechtenstein"
If X = "3DA" Or X = "3DM" Then Land = "Swasiland"
If X = "3DN" Or X = "3DZ" Then Land = "Fitschi"
If X = "EA8"  Then Land = "Spanien Kanaren"

X = Left(RUF , 4)
If X = "HB3Y" Then Land = "Liechtenstein"

If Land <> "" Then Label5.Caption  = "Call from: " + Land Else Label5.Caption  = ""
End Function

I somehow can’t figure out the triple black ticks thing, sorry

Meadenhead Locator V10.appstudio.zip (66.2 KB)

Tip : If you’re pasting code, html or config files, surround the code with triple back ticks (```), before the first line and after the last one. It will be formatted properly. (We fixed it for you this time)

Hello
Can someone tell me why Google Maps sample doesn’t work?
maps

An error message appears. Where can I get an API key?
key

In the Properties menu for the under Common you will sse … this is where you put your Google Maps apiKey.

To get your apiKey … goto:

It has a step by step tutorial and a little video of how to get the aipKey.