Skip to content

PolylineState

PolylineState gestiona la configuración y el comportamiento de polilíneas (segmentos de línea) en el mapa. Proporciona propiedades reactivas para puntos, estilo y opciones geodésicas.

PolylineState(
points: List<GeoPointInterface>,
id: String? = null,
strokeColor: Color = Color.Black,
strokeWidth: Dp = 1.dp,
geodesic: Boolean = false,
extra: Serializable? = null
)
  • id: String: Identificador único (se genera automáticamente si no se proporciona).
  • points: List<GeoPointInterface>: Lista de coordenadas geográficas que definen la línea.
  • extra: Serializable?: Datos adicionales asociados a la polilínea.
  • strokeColor: Color: Color de la línea.
  • strokeWidth: Dp: Grosor de la línea.
  • geodesic: Boolean: Indica si se dibujan líneas geodésicas que siguen la curvatura de la Tierra.
fun copy(...): PolylineState // Crear una copia modificada
fun fingerPrint(): PolylineFingerPrint // Detección de cambios
fun asFlow(): Flow<PolylineFingerPrint> // Actualizaciones reactivas
val polylineState = PolylineState(
points = listOf(
GeoPoint.fromLatLong(37.7749, -122.4194),
GeoPoint.fromLatLong(37.7849, -122.4094),
GeoPoint.fromLatLong(37.7949, -122.3994)
),
strokeColor = Color.Blue,
strokeWidth = 3.dp
)
MapView(state = mapViewState) {
Polyline(polylineState)
}
@Composable
fun DynamicPolylineExample() {
var polylineState by remember {
mutableStateOf(
PolylineState(
points = listOf(
GeoPoint.fromLatLong(37.7749, -122.4194),
GeoPoint.fromLatLong(37.7849, -122.4094)
),
strokeColor = Color.Red,
strokeWidth = 4.dp
)
)
}
MapView(
state = mapViewState,
onMapClick = { geoPoint ->
polylineState = polylineState.copy(
points = polylineState.points + geoPoint
)
}
) {
Polyline(polylineState)
}
}
val geodesicPolyline = PolylineState(
points = listOf(
GeoPoint.fromLatLong(37.7749, -122.4194), // San Francisco
GeoPoint.fromLatLong(40.7128, -74.006) // Nueva York
),
strokeColor = Color.Green,
strokeWidth = 3.dp,
geodesic = true, // Sigue la curvatura de la Tierra
extra = "Ruta de costa a costa"
)
@Composable
fun RouteExample() {
val routeSegments = remember {
listOf(
PolylineState(
points = highway1Points,
strokeColor = Color.Blue,
strokeWidth = 6.dp,
extra = "Tramo de autopista"
),
PolylineState(
points = localRoadPoints,
strokeColor = Color.Green,
strokeWidth = 3.dp,
extra = "Tramo de carretera local"
),
PolylineState(
points = walkingPathPoints,
strokeColor = Color.Orange,
strokeWidth = 2.dp,
extra = "Tramo peatonal"
)
)
}
MapView(state = mapViewState) {
routeSegments.forEach { segment ->
Polyline(segment)
}
}
}

Los eventos de polilínea proporcionan tanto el estado como la posición del clic:

data class PolylineEvent(
val state: PolylineState,
val clicked: GeoPointInterface
)
typealias OnPolylineEventHandler = (PolylineEvent) -> Unit
  1. Densidad de puntos: Equilibra detalle y rendimiento; evita listas de puntos excesivamente densas.
  2. Geodésicas para rutas largas: Usa polilíneas geodésicas para rutas de larga distancia.
  3. Codificación por color: Usa colores distintos para diferenciar tipos de rutas.
  4. Jerarquía de grosores: Usa el grosor de la línea para indicar importancia.
  5. Rendimiento: Considera simplificar polilíneas complejas según el nivel de zoom.