Dokumentation / Grundlagen / Rasterebene

Rasterebene

Geben Sie eine URL-Vorlage für XYZ-Kacheln an, um beliebige Kachelsets über die Karte zu legen. Externe Kacheln wie die des Geospatial Information Authority of Japan können direkt verwendet werden.

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

01 · Verwendung

Übergeben Sie einfach eine URL-Vorlage an die Quelle. Transparenz und Zoombereich werden auf Seitenebene gesteuert.

RasterLayerScreen.kt · Jetpack Compose
val rasterLayerState = RasterLayerState(
    id = "gsi-raster",
    source = RasterLayerSource.UrlTemplate(
        template = "https://cyberjapandata.gsi.go.jp/xyz/relief/{z}/{x}/{y}.png",
        tileSize = 256,
        minZoom = 5,
        maxZoom = 15,
    ),
    opacity = 0.75f,
)

MapLibreMapView(state = mapState) {
    RasterLayer(rasterLayerState)
}

02 · Wichtige Optionen

Option
Default
Beschreibung
template
URL-Vorlage für die Kachel, die {z}/{x}/{y} enthält.
tileSize
512
Anzahl der Pixel an einer Kachelseite.
minZoom / maxZoom
Keine
Zoombereich, in dem die Ebene angezeigt wird. Wenn nicht angegeben, wird sie in allen Zoomstufen angezeigt.
attributionRules
[]
Regeln für die Quellenangabe je nach Zoom und Bereich. Wird in `source` angegeben.
opacity
1.0
Deckkraft der gesamten Ebene (Angabe auf Seitenebene).
visible
true
Umschalten zwischen Anzeigen und Ausblenden.
zIndex
0
Reihenfolge der Überlappung mit anderen Ebenen.
userAgent
MapConductor/…
User-Agent beim Abrufen der Kachel. Die Unterstützung hängt vom Anbieter ab (siehe Tabelle unten).
extraHeaders
Keine
Zusätzliche Header beim Abrufen der Kachel. Z. B. Authentifizierungstoken. Die Unterstützung hängt vom Anbieter ab (siehe Tabelle unten).

03 · Header-Unterstützung

Das Abrufen der Kachel erfolgt über das Map-SDK des jeweiligen Anbieters. Ob es eine Möglichkeit zum Umschreiben von Anfragen gibt, unterscheidet sich je nach SDK. Bei Anbietern ohne solche Möglichkeit werden die Angaben ignoriert und zur Laufzeit Protokolle ausgegeben. Die folgende Tabelle zeigt das Ergebnis der tatsächlichen Überprüfung der Kachelanforderungen (Native auf echten Geräten, Web im Browser).

Im Web funktioniert `userAgent` bei keinem Anbieter. Das liegt daran, dass Browser das Überschreiben des User-Agents verbieten, und es gibt keine Möglichkeit zur Umgehung auf SDK-Seite. Die Eigenschaft selbst bleibt aus Gründen der Kompatibilität mit React Native erhalten; unter RN wird der Wert an das native SDK weitergegeben und funktioniert tatsächlich. Dies ist eine beabsichtigte Designentscheidung, damit derselbe Code sowohl im Web als auch unter RN ausgeführt werden kann.

Provider
iOS
Android
Web(extraHeaders)
Hinweise
MapLibre
iOS verwendet `MLNNetworkConfiguration`, Android den Austausch des `OkHttp`-Clients, Web über `maplibre-gl` `transformRequest`. In allen Fällen werden sie nur bei Anfragen an den Kachel-Verteilungshost eingefügt.
MapTiler
iOS verwendet denselben Mechanismus wie MapLibre. Da das MapTiler SDK von Android auf einer WebView läuft, können Header nicht von der nativen Seite aus ausgetauscht werden.
MapKit
Anbieter exklusiv für iOS.
HERE
iOS verwendet einen lokalen Proxy nur, wenn Header angegeben sind (ein Hop wird hinzugefügt).
Google Maps
userAgent
Android ruft Kacheln selbst ab, sodass beide verwendet werden können. `GMSURLTileLayer` von iOS macht nur `userAgent` öffentlich, `extraHeaders` werden ignoriert.
Mapbox
Das SDK für iOS / Android hat keine öffentliche API zum Umschreiben von Anfragen. Da mapbox-gl im Web transformRequest hat, wird nur Web unterstützt.
ArcGIS
Das Gleiche.
TomTom
Das Gleiche.
Longdo
Das Gleiche.
Leaflet
Nur für Web. Ruft Kacheln mit fetch ab, nur wenn Header angegeben sind, und ersetzt sie durch blob.
OpenLayers
Nur für Web. Das Gleiche (tileLoadFunction ersetzen).
Azure Maps
Nur für Web. Über transformRequest.
Cesium
✓ (nicht gemessen)
Nur für Web. Implementierung, die eine Resource mit headers übergibt, aber sie konnte aufgrund eines anderen Fehlers in der Beispiel-App nicht wirklich gemessen werden.

Wenn Sie einen Kachelserver verwenden, der Header erfordert, wählen Sie einen unterstützten Anbieter. Bei nicht unterstützten Anbietern können Sie ihn nutzen, wenn das Token als URL-Abfrageparameter übergeben wird.

04 · Beispiel

Beispiel für GSI-Kacheln

Das Beispiel wechselt zwischen Schummerungskarte und Standardkarte und ändert die Transparenz mit einem Schieberegler. Die Quellenangabe wird automatisch über attributionRules umgeschaltet.

Implementierung im Video · Android + MapLibreKotlin · Jetpack Compose
var opacity by remember { mutableFloatStateOf(0.75f) }
var relief by remember { mutableStateOf(true) }

val layerState = remember { RasterLayerState(id = "gsi-raster") }

// Both source and opacity can be reassigned; the layer is not rebuilt
LaunchedEffect(relief, opacity) {
    layerState.source = RasterLayerSource.UrlTemplate(
        template = if (relief) {
            "https://cyberjapandata.gsi.go.jp/xyz/relief/{z}/{x}/{y}.png"
        } else {
            "https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png"
        },
        tileSize = 256,
        minZoom = 5,
        maxZoom = 15,
    )
    layerState.opacity = opacity
}

MapLibreMapView(state = mapViewState) {
    RasterLayer(layerState)
}

Slider(value = opacity, onValueChange = { opacity = it })
Switch(checked = relief, onCheckedChange = { relief = it })
Beispielvideo · Rasterkacheln überlagern
Video noch nicht aufgenommenEinen externen Kachelserver überlagern und zeigen, wie Kacheln je nach Zoomstufe ausgetauscht werden.

Verwandte Seiten