使用纬度和经度值在Android中制作Location对象


138

我有一个程序,其中某个位置的纬度和经度值存储在我下载的数据库中。

我想获取这些坐标与当前位置之间的距离。

Location类有一个简单的方法来查找两个Location对象之间的距离,因此我想将一个带有坐标的Location对象制成,然后调用该方法。

是否有捷径可寻?另外,如果还有另一个可靠,相当简单的方程式不会使事情过于混乱,那么它也将起作用。谢谢。

(android.location.Location)


Answers:


309

假设您已经有一个带有当前位置的位置对象。

Location targetLocation = new Location("");//provider name is unnecessary
targetLocation.setLatitude(0.0d);//your coords of course
targetLocation.setLongitude(0.0d);

float distanceInMeters =  targetLocation.distanceTo(myLocation);

1
+1作为该答案中的注释,尽管简短而简单,但实际上非常有帮助。谢谢@Exception Al
2014年

2
真正糟糕的Android文档示例,为此浪费了很多时间。我的另一个问题是,假设我提供了像gps这样的有效提供程序,它将给我当前位置吗?换句话说,提供者的意义是什么
Utsav Gupta

如果您需要Location对象的默认值,并且由于无法使用经纬度对其进行初始化,建议您将其设置为静态初始值设定项,例如static { location.setLatitude(0.0d); location.setLongitude(0.0d); }
Jason Hartley

是的,我错过了写'd'的操作,但是我无法创建定位对象。愚蠢的小错误
zulkarnain shah

1
为什么在单元测试中,当我在Location对象上设置Lat和Lon时,它没有任何作用。位置对象以某种方式为null!?!?
Ewoks

30

您可以使用其构造函数创建位置,然后设置latutude和经度值。

final Location location = new Location("yourprovidername");
location.setLatitude(1.2345d);
location.setLongitude(1.2345d);

1
@dst是什么"yourprovidername"
ban-geoengineering

@ ban-geoengineering无需留空“”。
Alp Altunel

13

我再回答一次,因为像我这样的许多人不知道"providername"实际上是什么。下面的代码回答了这个问题:

Location location = new Location(LocationManager.GPS_PROVIDER);
location.setLatitude(23.5678);
location.setLongitude(34.456);

在这里,我使用LocationManager.GPS_PROVIDER提供者名称。


我们为什么LocationManager.GPS_PROVIDER会考虑并且还有其他选择?
ban-geoengineering

1
还有2个是PASSIVE和NETWORK_PROVIDER。这是为什么和使用什么的很好的解释。stackoverflow.com/questions/6775257/...
维杰Ë

1
但是,如果location是手动创建对象,使用空字符串而不是LocationManager.GPS_PROVIDERLocationManager.PASSIVE还是更合适LocationManager.NETWORK_PROVIDER
ban-geoengineering
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.