Documentación / Conceptos básicos / Marcador

Marcador

Para un marcador, simplemente cree un objeto de estado y colóquelo en la vista del mapa. El dibujo lo maneja el motor de renderizado dentro del SDK, que cambia automáticamente el método de dibujo según la cantidad. De manera predeterminada, hasta 2.000 elementos son los marcadores estándar de cada SDK de mapa; más allá de eso, son teselas ráster. Este valor umbral se puede cambiar pasando una opción de dibujo de teselas a la vista del mapa.

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

01 · Estado del marcador

MarkerState representa un solo marcador. Tiene posición, ícono, eventos y datos adjuntos arbitrarios; si se modifican las propiedades, se reflejan de inmediato. No hay tipos específicos del proveedor.

MarkerState · Jetpack Compose
val marker =
    MarkerState(
        position = GeoPoint.fromLatLong(21.3069, -157.8583),
        icon = DefaultMarkerIcon(fillColor = Color.Red, label = "A"),
        extra = postOffice,
        onClick = { clicked -> viewModel.onMarkerClick(clicked) },
    )

// Assigning to a property is all it takes to redraw
marker.position = nextPoint
Propiedades
Descripción
position
Latitud y longitud. Si se cambia, el marcador se mueve.
icon
Ícono. Si no se especifica, el pin predeterminado.
extra
Datos adjuntos arbitrarios. Se reciben al hacer clic y se usan, por ejemplo, en burbujas de información.
clickable / draggable
Posibilidad de tocar y arrastrar.
zIndex
Orden de superposición. El predeterminado para cada marcador individual no está establecido (null) en las 3 plataformas; cuando no está establecido, se superponen automáticamente por latitud. Toda la capa de marcadores se coloca en 10.
onClick / onDrag…
Controladores para tocar, arrastrar, y el inicio y final de la animación.

02 · Ícono

Desde simplemente especificar color y etiqueta en el pin predeterminado hasta imágenes, lienzos e íconos de tipo bocadillo. Todos los íconos tienen el mismo aspecto en todos los proveedores.

03 · Motor de renderizado interno

El dibujo de marcadores se deja al motor de renderizado interno del SDK. Mientras la cantidad es pequeña, se usan directamente los marcadores estándar de cada SDK de mapa, aprovechando al máximo la detección de toque nativa y las animaciones.

Cuando los marcadores superan los 2.000, el motor cambia la forma de dibujo. El grupo de marcadores se representa como una imagen de tesela y se superpone como una capa ráster, eliminando el costo de agregar y actualizar uno por uno en el SDK nativo. El código del lado de la aplicación no cambia en nada.

Fig. · La forma de dibujo cambia según la cantidad
≤ 2,000

Marcadores nativos

Un marcador nativo por estado. Tocar, arrastrar y animar se comportan exactamente como en la plataforma.
2,000+
> 2,000

Teselas ráster

Los marcadores se dibujan en teselas y se superponen como capa ráster. Sin actualizaciones por marcador, el movimiento de cámara sigue fluido con decenas de miles.
El cambio es automático. El umbral es 2000 por defecto: pasa las opciones a la vista de mapa (markerTiling en Android, markerTilingOptions en iOS y React) para cambiar minMarkerCount; esas mismas opciones llevan la caché de teselas y la escala del icono por zoom. Con Disabled se mantienen los marcadores nativos con cualquier cantidad.
Video de ejemplo · Dibujo de teselas de marcadores
Ejemplo · Mostrando 24.526 elementos a la vez
minMarkerCount
2000 · Cambiable
cacheSize
8 MB
enabled
true
debugTileOverlay
false
PostOfficeViewModel.kt · 24.526 elementos
// On by default; pass it to the map view to change the threshold
// (the Android parameter is called markerTiling)
val markerTiling =
    MarkerTilingOptions.Default.copy(
        minMarkerCount = 500, // switch to tile rendering from 500 markers
        iconScaleCallback = { _, zoom ->
            if (zoom > 10) 0.8 else if (zoom > 5) 0.5 else 0.2
        },
    )

GoogleMapView(state = mapViewState, markerTiling = markerTiling) { /* markers */ }

// Disable it to keep native markers at any count
val plain = MarkerTilingOptions.Disabled

04 · Animación

Las animaciones simples están incluidas de forma predeterminada. Especifíquelas al crear o simplemente llame a animate() más tarde. El inicio y el final se pueden recibir a través de controladores.

AnimationPageViewModel.kt
// Set one at creation, or call animate() later
MarkerState(position = point, animation = MarkerAnimation.Bounce)

override fun onMarkerClick(clicked: MarkerState) {
    clicked.animate(clicked.extra as? MarkerAnimation)
}

Dado que los marcadores durante una animación se dibujan con una superposición dedicada, se mueven incluso cuando el estado ha cambiado al dibujo de mosaicos. La duración se puede cambiar en la configuración del SDK.

Páginas relacionadas