Dokumentation / Grundlagen / Marker

Marker

Erstellen Sie für einen Marker einfach ein Zustandsobjekt und platzieren Sie es in der Kartenansicht. Das Zeichnen übernimmt die Rendering-Engine innerhalb des SDK, die die Zeichnungsart je nach Anzahl automatisch wechselt. Standardmäßig bis zu 2.000 Elemente werden als Standard-Marker der jeweiligen Karten-SDK verwendet, darüber hinaus als Rasterkacheln. Dieser Schwellenwert kann geändert werden, indem der Kartenansicht eine Kachel-Zeichnungsoption übergeben wird.

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

01 · Marker-Status

MarkerState stellt einen einzelnen Marker dar. Er verfügt über Position, Symbol, Ereignisse und beliebige Begleitdaten. Änderungen an Eigenschaften werden sofort übernommen. Es gibt keine providerspezifischen Typen.

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
Eigenschaften
Beschreibung
position
Breitengrad und Längengrad. Wenn Sie dies ändern, bewegt sich der Marker.
icon
Symbol. Wenn nicht angegeben, die Standard-Pin.
extra
Beliebige Begleitdaten. Werden beim Klick empfangen und z. B. für Informationsblasen verwendet.
clickable / draggable
Antippbarkeit und Ziehbarkeit.
zIndex
Überlappungsreihenfolge. Der Standard für einzelne Marker ist auf allen drei Plattformen nicht festgelegt (null); wenn nicht festgelegt, überlappen sie automatisch nach Breitengrad. Die gesamte Markerebene wird auf 10 gesetzt.
onClick / onDrag…
Handler für Tippen, Ziehen, Start und Ende der Animation.

02 · Symbol

Wir bieten alles von der einfachen Angabe von Farbe und Beschriftung auf der Standard-Pin bis hin zu Bild-, Canvas- und Sprechblasen-Symbolen. Jedes Symbol sieht über alle Anbieter hinweg gleich aus.

03 · Interne Rendering-Engine

Das Zeichnen von Markern überlassen wir der internen Rendering-Engine des SDK. Bei geringer Anzahl werden die Standard-Marker der einzelnen Karten-SDK direkt verwendet, sodass die nativen Tap-Erkennungen und Animationen voll genutzt werden können.

Wenn die Anzahl der Marker 2.000 überschreitet, wechselt die Engine die Zeichnungsart. Die Markergruppe wird als Kachelbild gerendert und als Rasterebene überlagert, wodurch die Kosten für das Hinzufügen und Aktualisieren einzelner Elemente im nativen SDK entfallen. Der Code auf der App-Seite ändert sich nicht.

Abb. · Die Zeichnungsart wechselt je nach Anzahl
≤ 2,000

Native Marker

Ein nativer Marker pro Zustand. Tippen, Ziehen und Animation verhalten sich genau so wie auf der Plattform.
2,000+
> 2,000

Rasterkacheln

Marker werden in Kacheln gezeichnet und als Rasterebene überlagert. Ohne Aktualisierung je Marker bleibt die Kameraarbeit auch bei Zehntausenden flüssig.
Die Umschaltung geschieht automatisch. Der Schwellwert liegt standardmäßig bei 2.000: Übergeben Sie der Kartenansicht die Optionen (markerTiling auf Android, markerTilingOptions auf iOS und React), um minMarkerCount zu ändern; dieselben Optionen tragen auch Kachel-Cache und Icon-Skalierung je Zoomstufe. Mit Disabled bleiben native Marker bei jeder Anzahl.
Beispielvideo · Kachel-Zeichnung von Markern
Beispiel · Anzeige von 24.526 Elementen auf einmal
minMarkerCount
2000 · Änderbar
cacheSize
8 MB
enabled
true
debugTileOverlay
false
PostOfficeViewModel.kt · 24.526 Elemente
// 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 · Animation

Einfache Animationen sind standardmäßig enthalten. Geben Sie sie bei der Erstellung an oder rufen Sie einfach später animate() auf. Start und Ende können über Handler empfangen werden.

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)
}

Da Marker während einer Animation mit einer speziellen Overlay-Ebene gezeichnet werden, bewegen sie sich auch, wenn die Kachelzeichnung aktiv ist. Die Dauer kann in den SDK-Einstellungen geändert werden.

Verwandte Seiten