在Android中创建一个具有纬度和经度值的位置对象

160

我有一个程序,其中一个地点的纬度和经度值存储在数据库中,我下载了这些信息。

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

Location类有一个简单的方法来查找两个Location对象之间的距离,因此我想创建一个具有这些坐标的Location对象,然后调用该方法。

有没有一种简单的方法可以做到这一点?如果有另一个可靠的、相当简单的方程,不会使事情过于复杂,那也可以。谢谢。

(android.location.Location)


请访问https://dev59.com/NWsz5IYBdhLWcg3wOVH5 了解更多相关信息。 - Paul Thompson
4个回答

358

假设您已经拥有一个位置对象并且包含您当前的位置信息。

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
尽管这个回答中的评论简洁明了,但实际上非常有帮助。谢谢 @Exception Al. - Subby
3
这份针对Android的文档示例非常糟糕,我在上面浪费了很多时间。我的另一个问题是,如果我提供一个有效的提供者(如GPS),它会给我提供当前位置吗?换句话说,提供者的重要性是什么? - Utsav Gupta
如果您需要为Location对象设置默认值,而且由于无法使用lat/lon进行初始化,我建议在静态初始化程序中设置它们,例如 static { location.setLatitude(0.0d); location.setLongitude(0.0d); } - Jason Hartley
是的,我漏写了“d”,所以我无法创建位置对象。愚蠢的小错误。 - zulkarnain shah
1
为什么在单元测试中,当我设置Location对象的Lat和Lon时,没有任何影响。Location对象似乎为空!?! - Ewoks
显示剩余3条评论

34
您可以使用构造函数创建位置,然后设置纬度和经度值。
final Location location = new Location("yourprovidername");
location.setLatitude(1.2345d);
location.setLongitude(1.2345d);

1
@dst,“yourprovidername”是什么? - ban-geoengineering
1
@ban-geoengineering 留空 "" 不必要。 - Alp Altunel

16

我重新回答一遍,因为很多像我一样的人不知道"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
还有两个,分别是PASSIVE和NETWORK_PROVIDER。下面是关于为什么以及何时使用它们的详细说明。 https://dev59.com/9Ww15IYBdhLWcg3wLIzI - Vijay E
2
如果location对象是手动创建的,那么使用空字符串而不是LocationManager.GPS_PROVIDERLocationManager.PASSIVELocationManager.NETWORK_PROVIDER更为合适,对吗? - ban-geoengineering

1

Kotlin版本:

val location = Location("")
location.latitude = 1.2345 // data type is Double
location.longitude = 1.2345 // data type is Double

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