用Python获取精确的Android GPS位置

4
我尝试在 Python 中(使用 QPython3 应用程序)获取我的 Android 手机的 GPS 位置。这种方法有些有效,但是似乎在 Android 中有几个 LocationProvider:
  • gps:纯 GPS 位置,速度慢、耗电量大,但非常精确,正是我需要的。
  • network:GPS 和 WiFi/蜂窝定位的混合,速度更快,但精度较低。
  • passive:与上述类似,但完全不使用 GPS。
问题: 当我运行下面的脚本时,我只能得到由“网络”提供的位置,这不够准确。
但我找不到强制特定 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

总结:

我如何在 Android 上使用 Python 获取精确的 GPS 位置?

谢谢大家的帮助!

编辑:

  • 内部/外部
  • 启用/禁用
  • WiFi GPS 已启用(在运行脚本之前)
3个回答

0

我曾经遇到过同样的问题。如果你想强制使用GPS作为位置提供者,可以尝试这样做。

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

如何导入Android? - Arun Pal

0
droid = android.Android()
droid.startLocating(0, 0)
event = droid.eventWait(1000).result
if event['name'] == "location":
  print(event['data']['gps'])
droid.stopLocating()

0
今天我试图做类似的事情,但遇到了相似的问题。我一直在不断地得到相同的输出结果。长话短说,我发现了这个问题所在。将其放置在循环的底部应该可以解决这个问题。

droid.eventClearBuffer()

如果您查看原始帖子的示例输出,您会注意到时间戳都是相同的。清除缓冲区将重置由“位置”事件返回的对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接