Documentación / Vista de mapa / Diseño de mapa

Cambiar diseño de mapa (teselas)

La apariencia del mapa se decide solo con mapDesignType. Elija un preset preparado para el proveedor o defina su propio diseño especificando un JSON de estilo y una URL de teselas. El cambio solo requiere asignar la propiedad; no es necesario volver a crear el mapa.

ANDROID
com.mapconductor:core
iOS
MapConductorCore
REACT
@mapconductor/js-sdk-core

01 · Tipo de diseño

Cualquier diseño de proveedor implementa MapDesignTypeInterface (en iOS, MapDesignTypeProtocol). Con solo recordar los tres elementos comunes, la forma de manejarlo es la misma incluso si cambia el proveedor.

id

Valor que identifica el diseño. Un valor nativo del proveedor (como la constante mapType de Google) o una cadena.

getValue()

El valor real que se pasa al motor de mapas del proveedor. Incluye la URL del JSON de estilo o definiciones de mosaicos.

attributionRules

Reglas para cambiar la atribución según el nivel de zoom y el área visible. Obligatorio al usar mosaicos personalizados.

02 · Presets

Los paquetes de cada proveedor incluyen los diseños estándar disponibles para ese proveedor como constantes. La aplicación de ejemplo usa esta lista tal cual como opciones.

Proveedor
Tipo
Preset
Google Maps
GoogleMapDesign
Normal · Satellite · Hybrid · Terrain · None
MapLibre
MapLibreDesign
DemoTiles · OsmBright / En / Ja · MapTilerBasicEn / Ja · MapTilerTonerEn / Ja · OpenMapTiles(9)
MapKit
iOS · React
MapKitMapDesign
Standard · Satellite · Hybrid · SatelliteFlyover · HybridFlyover · MutedStandard
Mapbox
MapboxMapDesign
React: MapboxDesign
Standard · StandardSatellite · Streets · Outdoors · Light · Dark · Satellite · SatelliteStreets · NavigationDay / Night
En React: Streets · Outdoors · Light · Dark · SatelliteStreets, más el JSON de estilo de la familia OsmBright / MapTiler
MapTiler
MapTilerDesign
Streets · StreetsDark · StreetsLight · Basic · Bright · Satellite · Outdoor · Winter · Topo · Toner · Dataviz · Backdrop · Ocean · Landscape · Aquarelle · OpenStreetMap(16)
HERE
HereMapDesign
NormalDay / Night · Satellite · HybridDay / Night · LiteDay / Night · LiteHybridDay / Night · LogisticsDay / Night · LogisticsHybridDay · RoadNetworkDay / Night (14; en iOS son 15, con LogisticsHybridNight)
ArcGIS
ArcGISDesign
iOS / React: ArcGISMapDesign
Streets · Imagery · Topographic · Navigation · Nova · Newspaper · HumanGeography… · OsmStandard …(61)
TomTom
TomTomMapDesign
React: TomTomDesign
Standard · Driving · Satellite
React tiene además StandardLight / Dark · DrivingLight / Dark · MonoLight / Dark
Longdo
LongdoDesign
Normal · Easy · Pastel · PastelGray · Hard · Gray · Light · Night · Dark · Political · Osm · Satellite · Hybrid(13)
Leaflet
React
LeafletDesign
OpenStreetMap · None + cualquier tesela XYZ
OpenLayers
React
OpenLayersDesign
OpenStreetMap · None + cualquier tesela XYZ
Azure Maps
React
AzureMapsDesign
Road · RoadShadedRelief · Blank · BlankAccessible · Satellite · SatelliteRoadLabels · GrayscaleDark / Light · Night · HighContrastDark / Light(12)
Cesium
React
CesiumDesign
Default · None

Solo se señalan las diferencias entre plataformas. Las filas sin notas tienen el mismo nombre de tipo y el mismo nombre de constante de preset en las tres plataformas.

Plataforma

03 · Cambiar

Asigne un valor a mapDesignType del objeto de estado de la vista de mapa. Como el estado se observa, la apariencia del mapa cambia en el momento de la asignación.

MapDesignMapPage.kt · Jetpack Compose
// state es MapViewStateInterface<*>; acótalo al tipo del proveedor antes de asignar
when (state) {
    is GoogleMapViewStateInterface ->
        state.mapDesignType = GoogleMapDesign.Satellite
    is MapLibreViewStateInterface ->
        state.mapDesignType = MapLibreDesign.OsmBrightJa
    is MapTilerViewStateInterface ->
        state.mapDesignType = MapTilerDesign.Toner
}

04 · Definir un diseño personalizado

El tipo de preset está expuesto directamente como constructor. Si pasa un ID y una URL del JSON de estilo (vector) o una plantilla de URL de teselas (ráster), puede usar estilos propios o teselas del GSI igual que los presets.

CustomDesigns.kt · MapLibre / Definir con JSON de estilo
// MapLibreDesign es una data class: dale la URL de un JSON de estilo y ya tienes tu propio diseño
val GsiPale =
    MapLibreDesign(
        id = "gsi-pale",
        styleJsonURL = "https://example.com/styles/gsi-pale/style.json",
        attributionRules =
            listOf(
                AttributionRule(attribution = "Mosaicos del GSI"),
                AttributionRule(attribution = "GEBCO", minZoom = 5, maxZoom = 8),
            ),
    )
MapDesignPageViewModel.kt · Mezclar en las opciones
private val mapLibreDesigns =
    listOf(
        MapDesignOption(label = "OsmBright", design = MapLibreDesign.OsmBright),
        MapDesignOption(label = "GSI Pale", design = GsiPale),
    )
GoogleMapDesign.Custom · Envolver valores nativos
// Envuelve la constante nativa mapType tal cual y solo añade la atribución
val NormalWithNotice =
    GoogleMapDesign.Custom(
        id = MAP_TYPE_NORMAL,
        attributionRules = listOf(AttributionRule(attribution = "Datos propios 2026")),
    )

En proveedores donde el tipo de mapa se decide mediante constantes nativas (como Google Maps), use GoogleMapDesign.Custom y pase una constante a id para reemplazar solo el atribución. MapTiler, Mapbox, HERE, etc., también tienen un constructor de la misma forma.

05 · Notas de origen (attributionRules)

Al usar mosaicos propios, se incluyen las condiciones de notificación del proveedor de mosaicos como reglas. Solo se seleccionan automáticamente las notificaciones necesarias según el zoom y el área visible de la cámara.

attribution
La cadena que se va a mostrar. También se puede pasar HTML con enlaces.
minZoom / maxZoom
El rango de zoom en el que se muestra la notificación. Fuera del rango desaparece automáticamente.
bounds
El área rectangular donde se muestra la notificación. Se usa, por ejemplo, para mosaicos dentro de Japón.

06 · Aplicación de ejemplo

Las 3 plataformas incluyen una interfaz de usuario para cambiar el diseño. La construcción de la interfaz es una implementación directa en cada plataforma; solo el proceso de asignación es común.

Map design ▾
ANDROID · ExposedDropdownMenu
Map design ⌄
iOS · SwiftUI Menu
<select>
REACT · map-design-selector
Implementación mostrada en video · Android + MapLibreKotlin · Jetpack Compose
val mapViewState = rememberMapLibreMapViewState(
    mapDesign = MapLibreDesign.DemoTiles,
    cameraPosition = MapCameraPosition(
        position = GeoPoint.fromLatLong(21.382314, -157.933097),
        zoom = 12.0,
    ),
)

val designs = listOf(
    "Demo" to MapLibreDesign.DemoTiles,
    "OSM Bright" to MapLibreDesign.OsmBrightJa,
    "Toner" to MapLibreDesign.MapTilerTonerJa,
)

MapLibreMapView(state = mapViewState, modifier = Modifier.weight(1f))

Row {
    designs.forEach { (label, design) ->
        // Just an assignment. The map is not rebuilt, so the camera stays where it is
        Button(onClick = { mapViewState.mapDesignType = design }) { Text(label) }
    }
}
Video de ejemplo · Cambiar el diseño
Video aún no grabadoSe cambia mapDesignType en el mismo mapa y se aplica cada preajuste en orden. El momento mismo del cambio es el punto clave.

Páginas relacionadas