LocationManager为相同位置的Lat和Long提供2个不同的值

时间:2014-09-18 13:09:41

标签: android location locationmanager

在我的UI中,我正在使用代码

   // getting location service
    mLocationManager = (LocationManager) getActivity().getApplicationContext().getSystemService(Context.LOCATION_SERVICE);

和他们我正在获取位置

location =  locManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

在我的BroadcastReceiver中,我正在获取位置

Bundle bundle = intent.getExtras();
Location location = (Location)bundle.get(android.location.LocationManager.KEY_LOCATION_CHANGED);

我使用这两种方法为相同的位置获得了2种不同的纬度(和经度)。

我做错了吗?

UPDATE !!! 我发现了一些非常有趣的东西。

在我的Nexus 4和Nexus 7上 -

来自UI - LAT = 18.5798001& LONG = 73.7363223,来自广播接收机LAT = 18.5770622& LONG = 73.7389527 2个地点之间的距离是420米

On My MOTO E

来自UI - LAT = 18.5798001& LONG = 73.7363223,来自广播接收机LAT = 18.5771489& LONG = 73.7391201 2个地点之间的距离约为5米

在我的代码中,我根据距离进行了计算。他们在MOTO E上完美运行,但他们在Nexus 4& Nexus 7!

这是否意味着获得纬度和经度取决于设备?怎么可能?我完全糊涂了。

1 个答案:

答案 0 :(得分:0)

嘛!我想我破解了它。

问题是我在UI和BroadcastReceiver中访问lats和longs的方式不同。

在用户界面中,由于我必须显示地址,因此我使用Geocoder进行反向地理编码。我使用getFromLocation()方法获取了Address对象,我使用这些对象检索我的lats并且很长时间存储在我的数据存储中(这是错误的!)

在BroadcastReceiver中,我使用了Location对象来获取lats和longs。

Geocoder根据使用getFromLocation()方法中提供的lats和long检索的实际地址来更改lats和longs(因为它搜索所有附近的地址并返回最佳匹配)。因此,Address对象中的lats和long基本上是“最佳猜测”,属于数学地址。

很明显,当我将UI中存储的lats和long与我在BroadcastRececiver中获得的Lats和Longs进行比较时,我遇到了问题。

现在我的应用程序在Moto和Nexus设备上都运行良好。

然而,这仍然没有回答一个问题。 Moto E如何能够几乎准确地解决反向地理编码的问题?!! hmmmm ...!无论如何,问题已经解决了。