PolylineState
PolylineState gestiona la configuración y el comportamiento de polilíneas (segmentos de línea) en el mapa. Proporciona propiedades reactivas para los puntos, el estilo y las opciones geodésicas.
Constructor
Section titled “Constructor”PolylineState( points: List<GeoPoint>, 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<GeoPoint>: Lista de coordenadas geográficas que definen la líneaextra: Serializable?: Datos adicionales asociados a la polilínea
Propiedades visuales
Section titled “Propiedades visuales”strokeColor: Color: Color de la líneastrokeWidth: Dp: Grosor de la líneageodesic: Boolean: Indica si la línea debe seguir la curvatura de la Tierra
Métodos
Section titled “Métodos”fun copy(...): PolylineState // Crea 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( GeoPointImpl.fromLatLong(37.7749, -122.4194), GeoPointImpl.fromLatLong(37.7849, -122.4094), GeoPointImpl.fromLatLong(37.7949, -122.3994) ), strokeColor = Color.Blue, strokeWidth = 3.dp)
// Sustituye MapView por el proveedor de mapas que prefieras, como GoogleMapView o MapboxMapViewMapView(state = mapViewState) { Polyline(polylineState)}Polilínea dinámica
Section titled “Polilínea dinámica”@Composablefun DynamicPolylineExample() { var polylineState by remember { mutableStateOf( PolylineState( points = listOf( GeoPointImpl.fromLatLong(37.7749, -122.4194), GeoPointImpl.fromLatLong(37.7849, -122.4094) ), strokeColor = Color.Red, strokeWidth = 4.dp ) ) }
// Sustituye MapView por el proveedor de mapas que prefieras, como GoogleMapView o MapboxMapViewMapView( 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( GeoPointImpl.fromLatLong(37.7749, -122.4194), // San Francisco GeoPointImpl.fromLatLong(40.7128, -74.0060) // Nueva York ), strokeColor = Color.Green, strokeWidth = 3.dp, geodesic = true, // Seguir la curvatura de la Tierra extra = "Cross-country route")Ruta con varios segmentos
Section titled “Ruta con varios segmentos”@Composablefun RouteExample() { val routeSegments = remember { listOf( PolylineState( points = highway1Points, strokeColor = Color.Blue, strokeWidth = 6.dp, extra = "Highway segment" ), PolylineState( points = localRoadPoints, strokeColor = Color.Green, strokeWidth = 3.dp, extra = "Local road segment" ), PolylineState( points = walkingPathPoints, strokeColor = Color.Orange, strokeWidth = 2.dp, extra = "Walking path" ) ) }
// Sustituye MapView por el proveedor de mapas que prefieras, como GoogleMapView o MapboxMapViewMapView(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: GeoPoint)
typealias OnPolylineEventHandler = (PolylineEvent) -> UnitBuenas prácticas
Section titled “Buenas prácticas”- Densidad de puntos: Equilibra el detalle y el rendimiento; evita usar demasiados puntos.
- Geodésicas: Usa líneas geodésicas para rutas de larga distancia a fin de representar trayectos más precisos.
- Colores: Utiliza colores distintos para diferenciar tipos de rutas.
- Jerarquía de grosores: Usa el grosor de la línea para indicar la importancia.
- Rendimiento: Considera simplificar polilíneas complejas en distintos niveles de zoom.