Innbyggðar viðbætur
MapConductor vefur ekki hvern einasta eiginleika hvers korta-SDK. Þegar þú þarft eitthvað sem sameinaða API-ið lýsir ekki eru til tvær leiðir niður sem kosta þig ekki abstraktionina. Hvora sem þú velur heldur restin af skjánum áfram á sameiginlega API-inu.
01 · Þar sem abstraktionin endar
Sameinaða API-ið nær yfir hugtök sem eru til alls staðar. Útdregnar 3D-byggingar, umferðarlag eins framleiðanda, sérsmíðaður skyggir — það er af ásetningi utan sviðs. Að vefja allt myndi gera sameiginlega API-ið að minnsta samfeldi og óþægilegt í notkun.
Fáðu hlutinn sjálfan að láni
Dragðu fram innbyggða kortatilvikið og kallaðu beint á það SDK. Til staðar á öllum þremur vettvöngunum.
Skjóttu inn eiginleika
Viðbótareining skráir eiginleika sinn undir gerðarbundnum lykli án þess að breyta Core. Þetta er búnaðurinn til að víkka SDK-ið sjálft.
02 · Að ná til innbyggða kortsins
getMapViewHolder() á stöðuhlutnum skilar haldara sem ber sýn og kortatilvik þess þjónustuaðila. Þrengdu gerðina og þú ert kominn á hrátt SDK. Haldarinn sér líka um umreikning hnita ⇄ skjápixla.
// Eftir þrengingu er allt héðan í frá hreint Google Maps SDK
val holder = mapViewState.getMapViewHolder()
if (holder is GoogleMapViewHolder) {
holder.map.isTrafficEnabled = true
}// Þrengdu úr AnyMapViewHolder í raunverulega haldarann
if let holder = mapState.getMapViewHolder() as? MapKitViewHolder {
holder.mapView.showsTraffic = true
}// map í sameiginlega viðmótinu er unknown — þrengdu það að gerð þjónustuaðilans áður en það er notað
const holder = mapViewState.getMapViewHolder();
const map = holder?.map as maplibregl.Map | undefined;
map?.addLayer({ id: 'buildings', type: 'fill-extrusion', source: 'composite' });Haldarinn er ekki til fyrr en kortið hefur frumstillt sig — hann skilar null fram að því, svo kallaðu á hann inni í onMapLoaded eða síðar.
03 · Að tengja inn einingu
MapServiceRegistry er saumurinn sem viðbótareining notar til að skjóta inn eiginleika sínum án þess að breyta Core: skráðu undir gerðarbundnum lykli, sæktu með sama lykli, og af því lykillinn ber gerðina þarf engu að varpa á leiðinni út. Þyrping merkja er það sem notar hann í dag — hún sækir MarkerRenderingSupport sem þjónustuaðilinn skráði og teiknar gegnum hann.
MapServiceRegistry
Skilgreindu MapServiceKey<T> sem einstæðing, settu hann inn í MutableMapServiceRegistry og sæktu hann aftur þar sem þarf. Á Android er kortabundna skráin nálguð gegnum CompositionLocal-gildið LocalMapServiceRegistry.
MapServiceRegistryScope
Lyklar eru gerðir sem uppfylla MapServiceKey, settir inn í MutableMapServiceRegistry. Skráin býr á stöðuhlutnum (MapViewState.serviceRegistry) og þjónustuaðilinn gerir hana sýnilega með MapServiceRegistryScope.with(...) nákvæmlega á meðan content er sett saman. Þetta er ekki SwiftUI-Environment-gildi af því kortainnihaldið er gildi af gerðinni MapViewContent, ekki sýnastigveldi.
// Kotlin: skilgreindu lykilinn sem singleton object
object MarkerRenderingSupportKey : MapServiceKey<MarkerRenderingSupport<*>>
registry.put(MarkerRenderingSupportKey, support)
val support = registry.get(MarkerRenderingSupportKey) // Það kemur til baka með gerðina ósnerta
// Swift: skilgreindu lykilinn sem gerð sem uppfyllir MapServiceKey
enum MarkerRenderingSupportKey: MapServiceKey {
typealias Value = any MarkerRenderingSupport
}
registry.put(MarkerRenderingSupportKey.self, support)
let support = registry.get(MarkerRenderingSupportKey.self)
// TypeScript: búðu lykilinn til með createMapServiceKey<T>()
const MarkerRenderingSupportKey = createMapServiceKey<MarkerRenderingSupport>();Öll þrjú draga kóða sem er bundinn þjónustuaðila inn á skjáinn þinn — þann hluta sem hættir að virka þegar skipt er um þjónustuaðila. Haltu stöðunum þar sem þú notar þau saman á bak við eina grein.