Dokumentation / Grundlagen / GroundImage

GroundImage ― Bild auf der Karte platzieren

Bestimmen Sie einen Bereich mit zwei Punkten (Südwesten und Nordosten) und legen Sie dort ein einzelnes Bild aus. Etagenpläne von Einrichtungen, historische Karten, Luftbilder, selbst erstellte farbkodierte Karten usw. können unverkachelte Bilder direkt auf der Karte überlagert werden. Bereich und Transparenz können später geändert werden; das Bild bleibt bei Kamerabewegungen am Boden haften und wird entsprechend angezeigt.

BOUNDS
SW / NE
IMAGE
image / url
OPACITY
0.0 – 1.0
TILE SIZE
512 · Nur beim Kachel-Rendering
Plattform

01 · Status von GroundImage

GroundImageState stellt ein einzelnes Bild dar. Es enthält einen Bereich, ein Bild, eine Transparenz und einen Tap-Handler. Sie können das Bild auf jede plattformspezifisch natürliche Weise übergeben (Android: Drawable, iOS: UIImage, Web: URL).

GroundImageMapPageViewModel.kt · Jetpack Compose
val groundImageState =
    GroundImageState(
        id = "groundImage",
        bounds =
            GeoRectBounds(
                southWest = southWestPosition,
                northEast = northEastPosition,
            ),
        image = drawable,       // Das Drawable direkt übergeben
        opacity = 0.5f,
        onClick = this::onGroundImageClick,
    )

GroundImage(groundImageState)
Eigenschaft
Beschreibung
bounds
Der rechteckige Bereich, in dem das Bild ausgelegt wird. Er wird durch zwei Punkte (Südwesten und Nordosten) bestimmt.
image / imageUrl
Das anzuzeigende Bild. Übergeben Sie es unter Android als Drawable, unter iOS als UIImage und im Web als Bild-URL.
opacity
Deckkraft. Bei 0.0 vollständig transparent, bei 1.0 undurchsichtig. Verringern Sie den Wert, wenn Sie es mit der Basiskarte überlagern möchten.
tileSize
Die Länge einer Kachelseite beim Rendern als Rasterkachel. Wird nicht von Anbietern verwendet, die native Bildüberlagerungen zeichnen. Sie können beim Standardwert 512 bleiben.
extra
Beliebige begleitende Daten. Können beim Antippen empfangen werden.
onClick
Tap-Handler. Empfängt den Status des Bildes und die angetippten Koordinaten.

02 · Bereich und Transparenz

Der Bereich ist ein Rechteck. Wenn das Seitenverhältnis des Bildes und das des Bereichs unterschiedlich sind, wird das Bild an den Bereich angepasst gestreckt. Geben Sie daher einen Bereich an, der zum Seitenverhältnis der Zeichnung passt, die Sie platzieren möchten. Bereich, Transparenz und Bild können alle später geändert werden; die Änderungen werden sofort im Rendering übernommen.

SW
NE
Die Punkte Südwest (SW) und Nordost (NE) legen das Rechteck fest. Umriss und Marker im Bild stammen aus dem Code der Beispiel-App.
BOUNDS

Bereich durch Ziehen neu erstellen

Wenn bounds durch Ziehen von zwei Markierungen ausgetauscht wird, folgt das Bild. Die Fähigkeit zur kontinuierlichen Aktualisierung variiert jedoch je nach Anbieter.

OPACITY

Mit der Basiskarte überlagern

Wenn die Transparenz verringert wird, werden Straßen und Ortsnamen der zugrunde liegenden Karte sichtbar. Je nach Engine gibt es Einschränkungen hinsichtlich des Zeitpunkts und der Wirkung der Änderung.

Beispiel · Ein historischer Kartenbild, passend zum Bereich überlagert
Bereich und Transparenz ändern
// Die Eck-Marker ziehen, um die Grenzen neu zu bilden
override fun onMarkerDrag(dragged: MarkerState) {
    when (dragged.id) {
        "south_west" -> southWestPosition = GeoPoint.from(dragged.position)
        "north_east" -> northEastPosition = GeoPoint.from(dragged.position)
    }
    bounds = GeoRectBounds(southWest = southWestPosition, northEast = northEastPosition)
}

// Die Deckkraft wird einfach zugewiesen
groundImageState.opacity = sliderOpacity

03 · Bei jedem Anbieter gleich aussehen

GroundImage ist die Funktion mit den größten Implementierungsunterschieden zwischen den verschiedenen KartensDK-Treibern. Der Mechanismus der Bildüberlagerung variiert je nach Engine stark; einige verfügen überhaupt nicht über eine vergleichbare Funktion. MapConductor gleicht diese Unterschiede nach Möglichkeit aus, aber bei manchen Anbietern verbleiben Einschränkungen bei dynamischen Änderungen.

PLACEMENT

Gleicher Bereich, gleiche Streckung

Das Bild wird entsprechend dem angegebenen Bereich platziert. Unabhängig von Unterschieden im Koordinatensystem für Bildüberlagerungen der Engine wird es an derselben Position und in derselben Größe angezeigt.

NATIVE FIRST

Zuerst mit nativen Funktionen zeichnen

Jeder Treiber zeichnet, wann immer möglich, optimal unter Verwendung der bildüberlagerrungsspezifischen Funktionen des jeweiligen Karten-SDK (z.B. MediaLayer + ImageElement für ArcGIS, Bildmaterial für Rectangle bei Cesium). Nur für Engines, die keine gleichwertigen Funktionen haben, werden Bildausschnitte als Tiles bereitgestellt und als Raster-Layer überlagert. Der Anwendungscode bleibt bei beiden Pfaden unverändert.

LIMITATIONS

Einschränkungen je nach Anbieter

Das Neu erstellen des Bereichs (kontinuierliche Aktualisierung während des Ziehens) oder das Ändern der Transparenz kann aufgrund von Einschränkungen der Engine eingeschränkt sein. Die statische Platzierung ist bei allen Anbietern gleich, aber für dynamische Änderungen wird empfohlen, dies beim entsprechenden Anbieter zu überprüfen.

HIT TEST

Tap-Erkennung ebenfalls gemeinsam

Da die Tap-Erkennung mit einer gemeinsamen Logik durchgeführt wird, wird onClick aufgerufen, unabhängig davon, ob die Engine das Tippen auf Bildüberlagerungen unterstützt.

04 · Antippen

onClick empfängt den Status des Bildes und die angetippten Koordinaten. Im Beispiel wird das Bild selbst durch Antippen ausgetauscht, um die Anzeige umzuschalten.

Bild durch Antippen austauschen
// Beim Antippen das Bild austauschen
override fun onGroundImageClick(clicked: GroundImageEvent) {
    val isBase = clicked.state.image == imageResources.image
    image = if (isBase) imageResources.clickedImage else imageResources.image
}
event.state

Der Status des getippten Bildes. Auf das aktuelle Bild und extra kann verwiesen werden.

event.clicked

Die geografischen Koordinaten des getippten Punkts. Es ist erkennbar, wo innerhalb des Bereichs getippt wurde.

Auch transparente Bereiche des Bildes gehören zum Tippbereich. Wenn transparente Bereiche nicht reagieren sollen, passen Sie den Bereich an die tatsächliche Bildfläche an oder verwenden Sie zusätzlich ein Polygon.

Verwandte Seiten