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
|