by Guest » 24 Dec 2024, 21:04
Ich versuche, den GPS-Standort meines Android-Telefons in Python zu ermitteln (mithilfe der QPython3-App). Das funktioniert zwar, aber es scheint, dass es in Android mehrere LocationProviders gibt:
- gps: reiner GPS-Standort, langsam, energieaufwändig, aber sehr genau
und genau das, was ich brauche.
- Netzwerk: Mischung aus GPS und WLAN/Mobiltelefonortung, schneller, aber weniger genau
- passiv: wie oben aber ganz ohne GPS
Problem:
Wenn ich mein Skript (unten) ausführe, habe ich Mein Standort wird nur vom „Netzwerk“ bereitgestellt,
was nicht genau genug ist.
Aber ich kann keine Möglichkeit finden, einen bestimmten LocationProvider zu erzwingen.
Code:
Code: Select all
# import needed modules
import android
import time
import sys, select, os #for loop exit
#Initiate android-module
droid = android.Android()
#notify me
droid.makeToast("fetching GPS data")
print("start gps-sensor...")
droid.startLocating()
while True:
#exit loop hook
if sys.stdin in select.select([sys.stdin], [], [], 0)[0]:
line = input()
print("exit endless loop...")
break
#wait for location-event
event = droid.eventWaitFor('location',10000).result
if event['name'] == "location":
try:
#try to get gps location data
timestamp = repr(event['data']['gps']['time'])
longitude = repr(event['data']['gps']['longitude'])
latitude = repr(event['data']['gps']['latitude'])
altitude = repr(event['data']['gps']['altitude'])
speed = repr(event['data']['gps']['speed'])
accuracy = repr(event['data']['gps']['accuracy'])
loctype = "gps"
except KeyError:
#if no gps data, get the network location instead (inaccurate)
timestamp = repr(event['data']['network']['time'])
longitude = repr(event['data']['network']['longitude'])
latitude = repr(event['data']['network']['latitude'])
altitude = repr(event['data']['network']['altitude'])
speed = repr(event['data']['network']['speed'])
accuracy = repr(event['data']['network']['accuracy'])
loctype = "net"
data = loctype + ";" + timestamp + ";" + longitude + ";" + latitude + ";" + altitude + ";" + speed + ";" + accuracy
print(data) #logging
time.sleep(5) #wait for 5 seconds
print("stop gps-sensor...")
droid.stopLocating()
Beispielausgabe (gefälschte Koordinaten):
Code: Select all
net;1429704519675;37.235065;-115.811117;0;0;23
net;1429704519675;37.235065;-115.811117;0;0;23
net;1429704519675;37.235065;-115.811117;0;0;23
Zusammenfassung:
Wie erhalte ich in Android mit Python einen genauen GPS-Standort?
Vielen Dank im Voraus an alle!
EDIT: bereits getestet:
- innen / außen
- aktiviert / deaktiviert
- WiFi GPS aktiviert (vor dem Ausführen des Skripts)
Ich versuche, den GPS-Standort meines Android-Telefons in Python zu ermitteln (mithilfe der QPython3-App). Das funktioniert zwar, aber es scheint, dass es in Android mehrere LocationProviders gibt:
[list]
[*][b]gps:[/b] reiner GPS-Standort, langsam, energieaufwändig, aber sehr genau
und genau das, was ich brauche.
[*][b]Netzwerk:[/b] Mischung aus GPS und WLAN/Mobiltelefonortung, schneller, aber weniger genau
[*][b]passiv:[/b] wie oben aber ganz ohne GPS
[/list]
[b]Problem:[/b]
Wenn ich mein Skript (unten) ausführe, habe ich Mein Standort wird nur vom „Netzwerk“ bereitgestellt,
was nicht genau genug ist.
Aber ich kann keine Möglichkeit finden, einen bestimmten LocationProvider zu erzwingen.
[b]Code:[/b]
[code]# import needed modules
import android
import time
import sys, select, os #for loop exit
#Initiate android-module
droid = android.Android()
#notify me
droid.makeToast("fetching GPS data")
print("start gps-sensor...")
droid.startLocating()
while True:
#exit loop hook
if sys.stdin in select.select([sys.stdin], [], [], 0)[0]:
line = input()
print("exit endless loop...")
break
#wait for location-event
event = droid.eventWaitFor('location',10000).result
if event['name'] == "location":
try:
#try to get gps location data
timestamp = repr(event['data']['gps']['time'])
longitude = repr(event['data']['gps']['longitude'])
latitude = repr(event['data']['gps']['latitude'])
altitude = repr(event['data']['gps']['altitude'])
speed = repr(event['data']['gps']['speed'])
accuracy = repr(event['data']['gps']['accuracy'])
loctype = "gps"
except KeyError:
#if no gps data, get the network location instead (inaccurate)
timestamp = repr(event['data']['network']['time'])
longitude = repr(event['data']['network']['longitude'])
latitude = repr(event['data']['network']['latitude'])
altitude = repr(event['data']['network']['altitude'])
speed = repr(event['data']['network']['speed'])
accuracy = repr(event['data']['network']['accuracy'])
loctype = "net"
data = loctype + ";" + timestamp + ";" + longitude + ";" + latitude + ";" + altitude + ";" + speed + ";" + accuracy
print(data) #logging
time.sleep(5) #wait for 5 seconds
print("stop gps-sensor...")
droid.stopLocating()
[/code]
[b]Beispielausgabe (gefälschte Koordinaten):[/b]
[code]net;1429704519675;37.235065;-115.811117;0;0;23
net;1429704519675;37.235065;-115.811117;0;0;23
net;1429704519675;37.235065;-115.811117;0;0;23
[/code]
[b]Zusammenfassung:[/b]
Wie erhalte ich in Android mit Python einen genauen GPS-Standort?
Vielen Dank im Voraus an alle!
EDIT: bereits getestet:
[list]
[*]innen / außen
[*]aktiviert / deaktiviert
[*]WiFi GPS aktiviert (vor dem Ausführen des Skripts)
[/list]