我尝试在Python中获取我的Android手机的GPS位置(使用QPython3应用程序)。这种方式是可行的,但看起来安卓系统中有几个LocationProviders:
。
网络问题:当我运行我的脚本(如下所示)时,我只能得到“”提供的位置,这是不够准确的。
但是我找不到一种方法来强制一个特定的LocationProvider。
代码:
# 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()
示例输出(伪坐标):
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
Summarization:如何在安卓系统中使用Python获得精确的位置?
提前感谢大家!
编辑:已测试:
发布于 2015-05-02 02:14:37
我也有同样的问题。如果要将GPS强制为LocationProvider,则可以执行以下操作
import android, time
droid = android.Android()
droid.startLocating()
print('reading GPS ...')
event=droid.eventWaitFor('location', 10000)
while 1:
try :
provider = event.result['data']['gps']['provider']
if provider == 'gps':
lat = str(event['data']['gps']['latitude'])
lng = str(event['data']['gps']['longitude'])
latlng = 'lat: ' + lat + ' lng: ' + lng
print(latlng)
break
else: continue
except KeyError:
continue
发布于 2017-08-25 07:31:45
我今天试着做一些类似的事情,我也遇到了类似的问题。我一次又一次地得到相同的输出。长话短说,我发现了这个。把这个放在循环的底部应该可以解决这个问题。
droid.eventClearBuffer()
如果您查看原始的post样例输出,您将注意到时间戳都是相同的。清除缓冲区将重置'location‘事件返回的对象。
发布于 2019-10-18 06:36:10
droid = android.Android()
droid.startLocating(0, 0)
event = droid.eventWait(1000).result
if event['name'] == "location":
print(event['data']['gps'])
droid.stopLocating()
https://stackoverflow.com/questions/29797435
复制相似问题