Попробуйте этот код:
в зависимости от добавления файла 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)
Теперь нам нужно создать URL-адрес, который мы будем использовать для вызова API.Мы можем поместить его в отдельную функцию, чтобы убрать его с пути:
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.
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