Select platform: [Android](https://developers.google.com/maps/documentation/maps-3d/android-sdk/add-polylines.md.txt "View this page for the Android platform docs.") [iOS](https://developers.google.com/maps/documentation/maps-3d/ios-sdk/add-polylines.md.txt "View this page for the iOS platform docs.") [JavaScript](https://developers.google.com/maps/documentation/javascript/3d/shapes-lines.md.txt "View this page for the JavaScript platform docs.")

<br />

![A polyline on a 3D map](https://developers.google.com/static/maps/documentation/maps-3d/android-sdk/images/add-polyline.png)

The following code sample demonstrates how to add a polyline and position it in
3D space by calling the
[`addPolyline`](https://developers.google.com/maps/documentation/maps-3d/android-sdk/reference/com/google/android/gms/maps3d/GoogleMap3D.md.txt#addPolyline(com.google.android.gms.maps3d.model.PolylineOptions))
method. To use this code sample, follow the instructions in
[Setup](https://developers.google.com/maps/documentation/maps-3d/android-sdk/setup.md.txt) and [Add a 3D map to your
app](https://developers.google.com/maps/documentation/maps-3d/android-sdk/add-a-3d-map) to set up your
Android Studio project with a basic 3D map. Then, add the following code to the
`MainActivity.kt` file:

```kotlin
// Add imports
import com.google.android.gms.maps3d.model.Map3DMode
import com.google.android.gms.maps3d.model.latLngAltitude

...

// Add to the onMap3DViewReady method, after the googleMap3D object has been initialized
googleMap3D.setMapMode(Map3DMode.HYBRID)
googleMap3D.setCamera(
    camera {
        center = latLngAltitude {
            latitude = 40.029349
            longitude = -105.300354
            altitude = 1833.9
        }
        heading = 326.0
        tilt = 75.0
        range = 3757.0
    }
)
internal val trailLocations = """
    40.0201040, -105.2976640
    40.0201080, -105.2976450
    40.0201640, -105.2975120
    40.0202200, -105.2973740
    40.0202500, -105.2972760
    40.0202960, -105.2971410
    40.0203080, -105.2970990
    40.0203320, -105.2970070
    40.0203640, -105.2969400
    40.0203710, -105.2969250
    40.0203770, -105.2969220
    40.0203910, -105.2969130
    40.0203940, -105.2969120
    40.0204200, -105.2969130
    40.0204630, -105.2968910
    40.0205270, -105.2968280
    40.0206030, -105.2967570
    40.0206590, -105.2966100
    40.0206990, -105.2964870
""".trimIndent().split("\n").map {
    val (lat, lng) = it.split(",")
    latLngAltitude {
        latitude = lat.toDouble()
        longitude = lng.toDouble()
        altitude = 0.0  // The trail will be clamped to the ground
    }
}

val trailPolylineOptions = polylineOptions {
    coordinates = trailLocations
    strokeColor = Color.RED
    strokeWidth = 7.0
    altitudeMode = AltitudeMode.CLAMP_TO_GROUND
    zIndex = 5
    drawsOccludedSegments = true
}

googleMap3D.addPolyline(trailPolylineOptions)
```

## Listen for polyline click events

To listen for click events on a polyline, call `setClickListener` on
the polyline object. The following example shows how to set a click listener on
a polyline:

```kotlin
polyline.setClickListener {
    lifecycleScope.launch(Dispatchers.Main) {
        Toast.makeText(this@PolylinesActivity, "Hiking time!", Toast.LENGTH_SHORT).show()
    }
}
```

Note that the click handler does not run on the Main (or UI) thread. If you
want to make changes to the UI (such as showing a Toast message), you must
switch to the Main thread. For Kotlin, you can do this using
`lifecycleScope.launch(Dispatchers.Main)`.