Google Play服务位置API有时会返回错误的位置

Vin*_*T S 33 android location geolocation google-play-services

我们有一个应用程序,可以使用Google Play服务位置API捕获用户的位置,用于Geotag land等每笔交易,下订单等.

从移动设备捕获这些位置后,我们会将其同步到服务器并在Web仪表板中显示.

我们注意到在少数情况下,在几秒钟内捕获的交易具有不同距离的位置结果.


示例:
用户的位置将在

Mandsaur,Madhya Pradesh,印度,亚洲
(纬度 - 24.057291,经度 - 75.0970672,捕获日期 - 2017-01-04 09:19:48).

但随后的交易将有 6772公里外的

巴黎
(纬度 - 48.8581074,经度 - 2.3525187,截获日期 - 2017-01-04 09:20:01)


有时取指令错误陈述的印度象用户从古吉拉特然后位置比哈尔邦,马哈拉施特拉邦,科威特的获取(从印度)它真的头疼印度开发商


因为这发生在没有用户干扰且用户设备中没有安装模拟位置应用程序的情况下.

任何人都可以解释为什么会这样,我们怎么能避免这些情况?


注意:
这些交易位置通常在开启GPS的情况下捕获,并设置为高精度模式

Fro*_*oyo 9

您从API获得的位置将具有以米为单位的精度.您还应该检查位置的年龄.

https://developer.android.com/reference/android/location/Location.html#getAccuracy()

https://developer.android.com/reference/android/location/Location.html#getTime()

如果准确度大于50或100米,人们通常会丢弃该位置.


为什么会这样?

设备的GPS需要一些时间才能找到卫星并获得信号.此外,API会尝试根据您的网络确定您的位置.它是网络和GPS之间的各种跳跃,直到GPS提供一些准确的数据.


怎么避免这个?

在您的位置监听器中,检查准确性并等到准确性更高.

  • 我们将位置用于带有位置侦听器的时间记录。我们的用户不会接受等待,因此如果准确性不好,我们将不记录任何内容。尽管如此,谷歌有时会提供与现实存在巨大差异(> 10 公里)的位置,并将其标记为准确。我们有一些关于移动无线局域网路由器等的“阴谋论”。如果我必须自己处理准确性,那么来自 Google 的东西根本没有任何意义。 (3认同)

Anu*_*tin 1

我在印度浦那也遇到了同样的问题。用于测试的设备是Swipe平板电脑,

解决方案 :我保留上次经纬度和更新时间,当下次经纬度更新时,计算这两个位置之间的距离,如果距离高于100公里,则不会计算。

我用来计算距离的方法

public static double calculateDistance(double lat1,double lon1,double lat2,double lon2) {

    double theta = lon1 - lon2;
    double dist = Math.sin(deg2rad(lat1))
            * Math.sin(deg2rad(lat2))
            + Math.cos(deg2rad(lat1))
            * Math.cos(deg2rad(lat2))
            * Math.cos(deg2rad(theta));
    dist = Math.acos(dist);
    dist = rad2deg(dist);
    dist = dist * 60 * 1.1515;
    return (dist);
}    
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况

在 Android 设备上有 2 个获取位置的选项

  • 全球定位系统
  • 互联网

GPS (LocationManager.GPS_PROVIDER):与互联网相比速度较慢,但​​比互联网准确,在偏远地区 GPS 连接会较慢,有时难以连接。

互联网(LocationManager.NETWORK_PROVIDER) :比 GPS 快得多,但不如 GPS 准确

如果 GPS 无法访问并且您需要当前位置,则 LocationManager 将为您提供从互联网获取的可用数据。(在这种情况下,您还可以检查位置提供商。)