BUI logo BBjGeolocation::getCurrentPosition

Description

In BBj 11.0 and higher, this method requests that the browser pass back geolocation information in a subsequent BBjGeolocationEvent.

Syntax

Return Value

Method

void

getCurrentPosition()

Parameters

None.

Return Value

None.

Remarks

This method does not directly return geolocation information; it requests that the information be returned in a subsequent BBjGeolocationEvent. To prepare to receive this event, register an ON_GEOLOCATION_POSITION callback.

Example

rem ' geo.txt

rem ' See: http://mapki.com/wiki/Google_Map_Parameters
rem ' t=type (m=map, k=satellite, h=hybrid, p=terrain, e=Google Earth)
url$ = "http://maps.google.com/?t=m&output=embed&hl="+stbl("!LOCALE")
loc$ = "35.150036,-106.593957"; rem ' BASIS

rem ' Background information about the Geolocation spec:
rem ' See: https://dev.w3.org/geo/api/spec-source.html
rem ' See: https://diveintohtml5.org/geolocation.html
rem ' See: http://benwerd.com/lab/geo.php
precision 6
sysgui = unt
open (sysgui)"X0"
sysgui! = bbjapi().getSysGui()
window! = sysgui!.addWindow(10,10,800,500,"BBj BUI Geolocation",$00090003$)
window!.setCallback(window!.ON_CLOSE,"eoj")
getCurrentPosition! = window!.addButton(1,10,10,100,25,"Get Location",$$)
getCurrentPosition!.setCallback(getCurrentPosition!.ON_BUTTON_PUSH,"getCurrentPosition")
window!.addStaticText(199,250,15,40,25,"URL:",$8000$)
url! = window!.addEditBox(99,300,10,490,25,url$,$$)
highAccuracy! = window!.addCheckBox(100,120,10,120,25,"High Accuracy",$0004$)
window!.addStaticText(201,10,45,100,25,"Max Age (seconds):",$8000$)
maximumAge! = window!.addInputN(101,120,40,100,25,$$,"###,###.000",$$,300,300)
window!.addStaticText(202,10,75,100,25,"Timeout (seconds):",$8000$)
timeout! = window!.addInputN(102,120,70,100,25,$$,"###,###.000",$$,60,60)
window!.addStaticText(203,10,105,100,25,"Status:",$8000$)
status! = window!.addStaticText(103,120,105,170,25,"",$$)
tooltip$ = "(0=Success, 1=Permission denied, 2=Position unavailable, 3=Timeout"
status!.setToolTipText(tooltip$)
window!.addStaticText(204,10,135,100,25,"Message:",$8000$)
message! = window!.addStaticText(104,120,135,170,25,"",$$)
window!.addStaticText(205,10,165,100,25,"Timestamp:",$8000$)
timestamp! = window!.addStaticText(105,120,165,170,25,"",$$)
window!.addStaticText(206,10,195,100,25,"Latitude:",$8000$)
latitude! = window!.addStaticText(106,120,195,170,25,"",$$)
window!.addStaticText(207,10,225,100,25,"Longitude:",$8000$)
longitude! = window!.addStaticText(107,120,225,170,25,"",$$)
window!.addStaticText(208,10,255,100,25,"Accuracy:",$8000$)
accuracy! = window!.addStaticText(108,120,255,170,25,"",$$)
window!.addStaticText(209,10,285,100,25,"Altitude:",$8000$)
altitude! = window!.addStaticText(109,120,285,170,25,"",$$)
window!.addStaticText(210,10,315,100,25,"Altitude Accuracy:",$8000$)
altitudeAccuracy! = window!.addStaticText(110,120,315,170,25,"",$$)
window!.addStaticText(211,10,345,100,25,"Heading:",$8000$)
heading! = window!.addStaticText(111,120,345,170,25,"",$$)
window!.addStaticText(212,10,375,100,25,"Speed:",$8000$)
speed! = window!.addStaticText(112,120,375,170,25,"",$$)
watchPosition! = window!.addButton(113,10,400,100,25,"Watch Position",$$)
watchPosition!.setCallback(getCurrentPosition!.ON_BUTTON_PUSH,"watchPosition")
watchPositionMessage! = window!.addStaticText(213,120,405,170,25,"",$$)
clearWatch! = window!.addButton(114,10,430,100,25,"Clear Watch",$$)
clearWatch!.setEnabled(0)
clearWatch!.setCallback(getCurrentPosition!.ON_BUTTON_PUSH,"clearWatch")
clearWatchMessage! = window!.addStaticText(214,120,435,170,25,"",$$)
map! = window!.addHtmlView(999,300,40,490,450,"")
geolocation! = sysgui!.getGeolocation(err=unavailable)
dim z[0:21]
m = 10; for z = 21 to 0 step -1; z[z] = m; m = m * 2; next z
process_events

unavailable:
    i = msgbox("Geolocation is not available.",16,"Unavailable")

eoj:
release

getCurrentPosition:
    geolocation!.setCallback(geolocation!.ON_GEOLOCATION_POSITION,"geo")
    geolocation!.setHighAccuracy(highAccuracy!.isSelected())
    geolocation!.setMaximumAge(maximumAge!.getValue())
    geolocation!.setTimeout(timeout!.getValue())
    geolocation!.getCurrentPosition()
return

watchPosition:
    geolocation!.setCallback(geolocation!.ON_GEOLOCATION_WATCH,"geo")
    geolocation!.setHighAccuracy(highAccuracy!.isSelected())
    geolocation!.setMaximumAge(maximumAge!.getValue())
    geolocation!.setTimeout(timeout!.getValue())
    watchPositionMessage!.setText("Watching position...")
    watchPosition!.setEnabled(0)
    clearWatch!.setEnabled(1)
endif
return

clearWatch:
    geolocation!.clearCallback(geolocation!.ON_GEOLOCATION_WATCH)
    clearWatchMessage!.setText("Stopped watching position.")
    watchPosition!.setEnabled(1)
    clearWatch!.setEnabled(0)
return

geo:
    geo! = sysgui!.getLastEvent()
    url$ = url!.getText()

    rem ' status (0, 1, 2, 3)
    val! = geo!.getStatus()
    switch val!
        case 0; status$ = "Success"; break
        case 1; status$ = "Permission denied by user"; break
        case 2; status$ = "Position unavailable"; break
        case 3; status$ = "Timeout"; break
        case default; status$ = "Unknown code "+str(val!); break
    swend
    status!.setText(status$)

    rem ' message (error message or null)
    val! = geo!.getMessage()
    if val! = null()
        message!.setText("")
    else
        message!.setText(str(val!))
    endif

    rem ' timestamp (may be null)
    val! = geo!.getTimestamp()
    if val! = null()
        timestamp!.setText("N/A")
    else
        date! = new java.util.Date(val!.longValue())
        timestamp!.setText(str(date!))
    endif

    rem ' latitude
    val! = geo!.getLatitude()
    if val! = null()
        latitude!.setText("N/A")
    else
        latitude!.setText(str(val!))
    endif

    rem ' longitude
    val! = geo!.getLongitude()
    if val! = null()
        longitude!.setText("N/A")
    else
        longitude!.setText(str(val!))
    endif

    rem ' location accuracy, measured in metres
    val! = geo!.getAccuracy()
    if val! = null()
        accuracy = 99999999
        accuracy!.setText("N/A")
    else
        accuracy = val!
        feet = round(val!*3.2808399,0)
        accuracy!.setText(str(val!)+" metres ("+str(feet)+" feet)")
    endif

    rem ' altitude in metres
    val! = geo!.getAltitude()
    if val! = null()
        altitude!.setText("N/A")
    else
        feet = round(val!*3.2808399,0)
        altitude!.setText(str(val!)+" metres ("+str(feet)+" feet)")
    endif
    val! = geo!.getAltitudeAccuracy()
    if val! = null()
        altitudeAccuracy!.setText("N/A")
    else
        feet = round(val!*3.2808399,0)
        altitudeAccuracy!.setText(str(val!)+" metres ("+str(feet)+" feet)")
    endif
    val! = geo!.getHeading()
    if val! = null()
        heading!.setText("N/A")
    else
        heading!.setText(str(val!)+" degrees")
    endif
    val! = geo!.getSpeed()
    if val! = null()
        speed!.setText("N/A")
    else
        kmh = round(val!*3.6,0)
        mph = round(val!*2.2369362920544,0)
        speed!.setText(str(val!)+" m/s ("+str(kmh)+" km/h; "+str(mph)+" mph)")
    endif
    if (geo!.getLatitude()<>null() and geo!.getLongitude()<>null) then
        loc$ = str(geo!.getLatitude())+","+str(geo!.getLongitude())
    endif
    for z = 21 to 1 step -1
        if z[z] > accuracy then break
    next z
    window!.setTitle("BBj BUI Geolocation: "+loc$)
    map!.setUrl(url$+"+&z="+str(z)+"&q="+loc$)
return

See Also

Geolocation API Specification

BBj Object Diagram for an illustration of the relationship between BBjObjects.