Skjölun / Kortasýn / Skipt um þjónustuaðila

Skipt um þjónustuaðila

Nákvæmlega þrennt er ólíkt milli þjónustuaðila: viðfangið, gerð kortasýnarinnar og gerð stöðuhlutarins. Merki og form, myndavélaraðgerðir og atburðir eru skrifuð eins. Þú getur meira að segja haft fleiri en einn þjónustuaðila á sama skjá og skipt á keyrslutíma.

ANDROID
8 þjónustuaðilar
iOS
9 þjónustuaðilar
REACT
13 þjónustuaðilar

01 · Hvað breytist, hvað ekki

BREYTIST
  • Viðfangið (for-maplibre → for-googlemaps)
  • Gerð kortasýnarinnar (MapLibreMapView → GoogleMapView)
  • Gerð stöðuhlutarins og verksmiðja hans
  • Hönnunarfastinn sem mapDesignType fær
  • Hvernig API-lykillinn fæst og SDK-ið er frumstillt
HELST ÓBREYTT
  • GeoPoint · GeoRectBounds · MapCameraPosition
  • MarkerState · PolylineState · PolygonState · CircleState …
  • moveCameraTo() · fitBounds() · atburðastjórar
  • Landmælingar (fjarlægð, stefna, flatarmál)
  • Viðbótarlög (þyrping, hitakort, GeoJSON)

Stöðugerðirnar eru bundnar hverjum þjónustuaðila, en þær útfæra allar eitt sameiginlegt viðmót — MapViewStateInterface á Android og React, MapViewStateProtocol á iOS. Myndavélarvinnu og hönnunarskipti má skrifa gegnum það viðmót.

Mynd · hvað hver þjónustuaðili teiknar raunverulega, úr sýnisforritunum
GOOGLE MAPS
MAPLIBRE
MAPBOX
HERE
ARCGIS

02 · Gerðir eftir þjónustuaðilum

Það sem hver pakki þjónustuaðila flytur raunverulega út. Af sögulegum ástæðum eru heitin ekki fullkomlega samhverf, svo þessi tafla telur upp útfluttu táknin orðrétt.

Provider
Android
iOS
React
Google Maps
GoogleMapView
rememberGoogleMapViewState
GoogleMapViewState
GoogleMapView
GoogleMapViewState
GoogleMapView2D / GoogleMapView
useGoogleMapViewState
MapLibre
MapLibreMapView
rememberMapLibreMapViewState
MapLibreViewState
MapLibreMapView
MapLibreViewState
MapLibreMapView2D
useMapLibreViewState
Mapbox
MapboxMapView
rememberMapboxMapViewState
MapboxViewState
MapboxMapView
MapboxViewState
MapBoxMapView2D / MapBoxMapView
useMapboxViewState
HERE
HereMapView
rememberHereMapViewState
HereViewState
HereMapView
HereMapViewState
HereMapView2D
useHereViewState
ArcGIS
ArcGISMapView / 2D
rememberArcGISMapViewState
ArcGISMapViewState
ArcGISMapView / 2D
ArcGISMapViewState
ArcGISMapView2D / ArcGISMapView
useArcGISViewState
MapTiler
MapTilerMapView
rememberMapTilerMapViewState
MapTilerViewState
MapTilerMapView
MapTilerViewState
MapTilerMapView2D
useMapTilerViewState
TomTom
TomTomMapView
rememberTomTomMapViewState
TomTomMapViewState
TomTomMapView
TomTomMapViewState
TomTomMapView2D
useTomTomViewState
Longdo
LongdoMapView
rememberLongdoMapViewState
LongdoViewState
LongdoMapView
LongdoViewState
LongdoMapView2D
useLongdoViewState
Apple MapKit
MapKitMapView
MapKitViewState
MapKitMapView
useMapKitViewState
Leaflet
LeafletMapView
useLeafletMapViewState
OpenLayers
OpenLayersMapView
useOpenLayersMapViewState
Azure Maps
AzureMapsMapView
useAzureMapsViewState
Cesium
CesiumMapView
useCesiumMapViewState

„/ 2D“ merkir að pakkinn býður bæði 3D- og 2D-sýn. Þær deila einum stöðuhlut; í 2D er halli alltaf 0.

Vettvangur

03 · Að skrifa skiptin

Til að skipta á keyrslutíma skaltu halda einum stöðuhlut á hvern þjónustuaðila og greina aðeins um hvaða sýn er teiknuð. Yfirlagslýsingarnar standa utan greinarinnar. Þetta er nákvæmlega formið sem sýnisforritin nota.

MapViewContainer.kt · Jetpack Compose
@Composable
fun MapViewContainer(
    modifier: Modifier = Modifier,
    state: MapViewStateInterface<*>? = null,
    content: (@Composable MapViewScope.() -> Unit)? = null,
) {
    when (state) {
        is GoogleMapViewState -> GoogleMapView(modifier, state, content = content)
        is MapLibreViewState -> MapLibreMapView(modifier, state, content = content)
        is MapboxViewState -> MapboxMapView(modifier, state, content = content)
        is HereViewState -> HereMapView(modifier, state, content = content)
        else -> { /* not selected */ }
    }
}

// Kallandinn skrifar aðeins yfirlögin
MapViewContainer(state = selectedState) {
    Markers(markerStates)
}

React leyfir ekki að röð hook-kalla breytist, svo örugga formið er ein lítil eining á hvern þjónustuaðila sem kallar á sinn eigin hook. Mappan providers/ í sýnisforritinu er byggð þannig.

Það sem myndbandið sýnir · Android + MapLibreKotlin · Jetpack Compose
// One state per provider
val maplibre = rememberMapLibreMapViewState(
    mapDesign = MapLibreDesign.OsmBrightJa,
    cameraPosition = MapCameraPosition(
        position = GeoPoint.fromLatLong(35.6812, 139.7671),
        zoom = 12.0,
    ),
)
val googlemaps = rememberGoogleMapViewState(
    cameraPosition = MapCameraPosition(
        position = GeoPoint.fromLatLong(35.6812, 139.7671),
        zoom = 12.0,
    ),
)
var useMapLibre by remember { mutableStateOf(true) }

// The overlays are declared outside the branch, so swapping does not touch them
val overlays: @Composable MapViewScope.() -> Unit = {
    Marker(markerState)
    Polyline(routeState)
}

// Hand the camera you were just looking at to the side you are switching to
LaunchedEffect(useMapLibre) {
    if (useMapLibre) {
        maplibre.moveCameraTo(googlemaps.cameraPosition)
    } else {
        googlemaps.moveCameraTo(maplibre.cameraPosition)
    }
}

if (useMapLibre) {
    MapLibreMapView(state = maplibre, content = overlays)
} else {
    GoogleMapView(state = googlemaps, content = overlays)
}
Sýnidæmi á myndbandi · skipt um þjónustuaðila á keyrslutíma
Myndband ekki tekið upp ennSýnisforritið skiptir aðeins um kortasýnina á meðan yfirlögin standa óbreytt. Punkturinn kemst til skila þegar sést að merkin og fjöllínurnar eru á sömu stöðum fyrir og eftir skiptin.

04 · Að fást við mun milli þjónustuaðila

Ekki geta öll korta-SDK allt. MapConductor brúar bilið þar sem það getur og setur annað í staðinn þar sem það getur ekki.

1 · STAÐGENGILL

Þar sem innbyggða SDK-ið vantar eiginleika teiknar SDK-ið hann sem rasterflísar í staðinn — göt í marghyrningum og mjög stór merkjasöfn fara þessa leið. Kallstaðirnir þínir breytast ekki.

2 · GERÐARBUNDIÐ

Eining sem þjónustuaðili ræður ekki við á einfaldlega engan teiknara í þeim rekli. Hvort hún sé í boði sést við þýðingu, eða af gerð stöðuhlutarins.

3 · NEYÐARÚTGANGUR

Ef þú þarft í alvöru eitthvað sem er bundið þjónustuaðilanum, dragðu innbyggða kortatilvikið út úr MapViewHolder og kallaðu beint á það.

API KEYS

Lyklar og frumstilling haldast eftir þjónustuaðilum

MapConductor geymir aldrei API-lykilinn þinn. Hverju korta-SDK er matað eins og það ætlast til — Android-lýsingin, sdkInitialize-lokunin á iOS, stillingahlutur á vefnum. MapLibre, Leaflet og OpenLayers þurfa engan lykil; þar velurðu aðeins hvaðan flísarnar koma.

Tengdar síður