如何使用实时导航在Kotlin的Google地图上绘制最短路径?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用实时导航在Kotlin的Google地图上绘制最短路径?相关的知识,希望对你有一定的参考价值。

任何人都可以帮我在地图上使用Kotlin绘制最短路径并在导航时更新我的​​路径或更新我的LatLng。我必须在类似于驾驶室导航的OLA上实现这一点。但我能够在两点之间绘制最短路径,即驱动程序和用户。

提前致谢

答案

试试此代码:

在gradle文件中添加依赖项

 compile 'org.jetbrains.anko:anko-sdk15:0.8.2'
 compile 'com.beust:klaxon:0.30'



override fun onMapReady(googleMap: GoogleMap) {
mMap = googleMap
val sydney = LatLng(-34.0, 151.0)
val opera = LatLng(-33.9320447,151.1597271)
mMap!!.addMarker(MarkerOptions().position(sydney).title("Marker in Sydney"))
mMap!!.addMarker(MarkerOptions().position(opera).title("Opera House"))        
}

下一步是创建一个PolylineOptions对象,设置颜色和宽度。我们稍后将使用此对象添加点。

val options = PolylineOptions()
options.color(Color.RED)
options.width(5f)

现在,我们需要构建用于进行API调用的URL。我们可以将它放在一个单独的函数中以使它不受影响:

private fun getURL(from : LatLng, to : LatLng) : String {
    val origin = "origin=" + from.latitude + "," + from.longitude
    val dest = "destination=" + to.latitude + "," + to.longitude
    val sensor = "sensor=false"
    val params = "$origin&$dest&$sensor"
 return "https://maps.googleapis.com/maps/api/directions/json?$params"
 }
  And, of course, we call it by doing:

  val url = getURL(sydney, opera)

 async {
   val result = URL(url).readText()
   uiThread {
   // this will execute in the main thread, after the async call is done }
 }

一旦我们将字符串存储并准备就绪,代码的uiThread部分就会执行,其余的代码也会出现。现在我们准备从字符串中提取JSON对象,我们将使用klaxon。这也很简单:

 val parser: Parser = Parser()
 val stringBuilder: StringBuilder = StringBuilder(result)
 val json: JsonObject = parser.parse(stringBuilder) as JsonObject

实际上遍历JSON对象以获得积分相当容易。 klaxon易于使用,其JSON数组可以像任何Kotlin List一样使用。

 val routes = json.array<JsonObject>("routes")
 val points = routes!!["legs"]["steps"][0] as JsonArray<JsonObject>

  val polypts = points.map { it.obj("polyline")?.string("points")!!  }
  val polypts = points.flatMap { decodePoly(it.obj("polyline")?.string("points")!!)  
   }

  //polyline
  options.add(sydney)
 for (point in polypts) options.add(point)
 options.add(opera)
  mMap!!.addPolyline(options)

 mMap!!.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 100))

请参阅:https://medium.com/@irenenaya/drawing-path-between-two-points-in-google-maps-with-kotlin-in-android-app-af2f08992877

以上是关于如何使用实时导航在Kotlin的Google地图上绘制最短路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何在百度地图上查询公交车实时位置

如何在 iPhone 上使用 EAS 版本修复 Google 地图错误?

如何直接从我的应用程序使用 Google 地图导航

用小姐姐的声音为你指路,实时语音导航功能如何实现?

高德地图怎么使用导航

手绘地图制作的关键点之“实时导航”