【问题标题】:Location.distanceBetween shows 0Location.distanceBetween 显示 0
【发布时间】:2020-01-19 07:39:34
【问题描述】:

我想做一个计算跑步者距离的应用程序,但是 LocationManager 提供的 distanceBetween 仍然显示为 0。我有速度并且工作正常,所以 onLocationChanged 函数很好,但是我在获取距离时做错了。

override fun onLocationChanged(location: Location?) {
    val speed : Double = (location!!.speed * 3600 / 1000).toDouble()
    updateUI(speed)

    lat_text_view.text = location.latitude.toString()
    lon_text_view.text = location.longitude.toString()

    val startLat: Double = location.latitude
    val startLon: Double = location.longitude
    val endLat: Double = location.latitude
    val endLon: Double = location.longitude

    val results = FloatArray(1)
    Location.distanceBetween(startLat, startLon, endLat, endLon, results)

    distance_text_view.text = results[0].toString()
}

【问题讨论】:

  • 您的endLatstartLat 相同,endLonendLon 相同
  • 从哪里获取其他值?
  • 你更清楚。距离取决于 2 个LatLng 值。首先决定你需要哪 2 个LatLng 距离。
  • “从哪里获取其他值?” 您将把起始位置的坐标存储在范围在onLocationChanged() 方法之外的变量中。因此,它们可能是 onLocationChanged() 所在的类的成员。
  • 你是对的!非常感谢您的帮助。

标签: android kotlin android-location


【解决方案1】:

我是一个java程序员..所以我给你一个java解决方案请在kotlin中转换..

 //here arguments should be latlng objects.   
 double distance = SphericalUtil.computeDistanceBetween(firstLatLong, SecondLatLng);

在java中latlong对象可以形成如下..你也可以转换它kotlin。

LatLng firstLatLong = new LatLng(firstlocationObject.getLat(), firstlocationObject.getLon());

【讨论】:

  • 我不确定,但 SphericalUtil 不是很准确。我将等待 distanceBetween 的答案。如果没有人解决我的问题,我会使用你的代码
  • 您的距离方法给出了两点之间的路线距离。我的方法给出了球面距离(与路线无关)很可能是最短的距离。这就是区别。希望你得到它
  • “你的距离方法给出了两点之间的路线距离” 不,它没有。 (如果我正确理解“路线距离”的意思。)Location 类对街道、道路和路线一无所知。
  • 谢谢兄弟.. stackoverflow.com/questions/44018852/… ,这个链接清除了一切。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2014-06-10
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
相关资源
最近更新 更多