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.
Constructor
Section titled “Constructor”PolylineState( points: List<GeoPointInterface>, id: String? = null, strokeColor: Color = Color.Black, strokeWidth: Dp = 1.dp, geodesic: Boolean = false, extra: Serializable? = null)Propiedades
Section titled “Propiedades”Propiedades básicas
Section titled “Propiedades básicas”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.
Propiedades visuales
Section titled “Propiedades visuales”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.
Métodos
Section titled “Métodos”fun copy(...): PolylineState // Crear una copia modificadafun fingerPrint(): PolylineFingerPrint // Detección de cambiosfun asFlow(): Flow<PolylineFingerPrint> // Actualizaciones reactivasEjemplos de uso
Section titled “Ejemplos de uso”Polilínea básica
Section titled “Polilínea básica”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)}Polilínea dinámica
Section titled “Polilínea dinámica”@Composablefun 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) }}Polilínea geodésica
Section titled “Polilínea geodésica”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")Ruta con múltiples segmentos
Section titled “Ruta con múltiples segmentos”@Composablefun 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) } }}Manejo de eventos
Section titled “Manejo de eventos”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) -> UnitBuenas prácticas
Section titled “Buenas prácticas”- Densidad de puntos: Equilibra detalle y rendimiento; evita listas de puntos excesivamente densas.
- Geodésicas para rutas largas: Usa polilíneas geodésicas para rutas de larga distancia.
- Codificación por color: Usa colores distintos para diferenciar tipos de rutas.
- Jerarquía de grosores: Usa el grosor de la línea para indicar importancia.
- Rendimiento: Considera simplificar polilíneas complejas según el nivel de zoom.