नेटिव एक्सटेंशन
MapConductor प्रत्येक मानचित्र SDK की सभी कार्यक्षमताओं को रैप नहीं करता है। जब एकीकृत API में अनुपस्थित अभिव्यक्ति की आवश्यकता होती है, तो अमूर्तता को त्यागे बिना नीचे उतरने के लिए दो रास्ते प्रदान किए गए हैं। जिसे भी आप उपयोग करते हैं, उस स्क्रीन के अन्य भाग सामान्य API के साथ काम करते रहेंगे।
01 · अमूर्तता का अंत
एकीकृत API केवल उन अवधारणाओं को संभालता है जो सभी प्रदाताओं में समान हैं। 3D इमारतों का एक्सट्रूज़न, विशिष्ट विक्रेता के ट्रैफिक लेयर, और कस्टम शेडर जैसी चीज़ें जानबूझकर इसके दायरे से बाहर रखी गई हैं। सब कुछ लपेटने की कोशिश करने पर, सामान्य API सबसे छोटा सामान्य गुणज (LCM) बन जाएगा और इसका उपयोग करना कठिन हो जाएगा।
एंटिटी को यथावत उधार लेना
नेटिव मैप इंस्टेंस निकालें और उस SDK के API को सीधे कॉल करें। यह सभी 3 प्लेटफॉर्म पर मौजूद है।
फीचर प्लग-इन करना
अतिरिक्त मॉड्यूल, Core को संशोधित किए बिना अपनी कार्यक्षमता को टाइप किए गए कुंजी के साथ पंजीकृत करते हैं। यह SDK का विस्तार करने वाले पक्ष के लिए एक तंत्र है।
02 · नेटिव मानचित्र को छूना
स्टेट ऑब्जेक्ट से getMapViewHolder() को कॉल करने पर, उस प्रदाता के मानचित्र व्यू और मानचित्र इंस्टेंस रखने वाला एक होल्डर वापस आता है। प्रकार को संकीर्ण करने के बाद, यह शुद्ध SDK है। निर्देशांक और स्क्रीन पिक्सेल के बीच परस्पर रूपांतरण भी इस होल्डर के पास है।
// टाइप सीमित कर लेने के बाद, आगे सब सादा Google Maps SDK है
val holder = mapViewState.getMapViewHolder()
if (holder is GoogleMapViewHolder) {
holder.map.isTrafficEnabled = true
}// AnyMapViewHolder से ठोस होल्डर तक सीमित करें
if let holder = mapState.getMapViewHolder() as? MapKitViewHolder {
holder.mapView.showsTraffic = true
}// साझा इंटरफ़ेस का map unknown है — इस्तेमाल से पहले प्रोवाइडर के टाइप तक सीमित करें
const holder = mapViewState.getMapViewHolder();
const map = holder?.map as maplibregl.Map | undefined;
map?.addLayer({ id: 'buildings', type: 'fill-extrusion', source: 'composite' });होल्डर का उपयोग तब तक नहीं किया जा सकता जब तक मानचित्र का आरंभीकरण न हो जाए। आरंभीकरण से पहले null लौटाया जाता है, इसलिए कृपया इसे onMapLoaded के अंदर या उसके बाद के ऑपरेशन में कॉल करें।
03 · मॉड्यूल डालना
MapServiceRegistry एक बिंदु है जिसके माध्यम से अतिरिक्त मॉड्यूल, Core को संशोधित किए बिना अपनी कार्यक्षमता सम्मिलित कर सकते हैं। इसे टाइप किए गए कुंजी के साथ पंजीकृत किया जाता है, और आवश्यक पक्ष उसी कुंजी से इसे प्राप्त करता है। चूंकि कुंजी का एक प्रकार होता है, इसलिए प्राप्त मान को कास्ट करने की आवश्यकता नहीं होती है। वर्तमान में इसका उपयोग मार्कर क्लस्टरिंग द्वारा किया जाता है, जो प्रदाता द्वारा पंजीकृत MarkerRenderingSupport को प्राप्त करके रेंडर करता है।
MapServiceRegistry
MapServiceKey<T> को एक सिंगलटन के रूप में परिभाषित करें, MutableMapServiceRegistry में put करें, और उपयोगकर्ता इसे get से प्राप्त करता है। Android में, CompositionLocal (LocalMapServiceRegistry) से मैप स्कोप के रजिस्ट्री का संदर्भ लिया जाता है।
MapServiceRegistryScope
कुंजी को MapServiceKey के अनुरूप एक प्रकार के रूप में परिभाषित करें और MutableMapServiceRegistry में put करें। रजिस्ट्री स्टेट ऑब्जेक्ट (MapViewState.serviceRegistry) रखता है, और प्रदाता इसे केवल content को बनाते समय MapServiceRegistryScope.with(...) के साथ दृश्यमान बनाता है। यह SwiftUI का Environment इसलिए नहीं है, क्योंकि मैप की आंतरिक सामग्री MapViewContent नाम का एक मान है, व्यू हैरार्की नहीं।
// Kotlin: कुंजी को सिंगलटन object के रूप में परिभाषित करें
object MarkerRenderingSupportKey : MapServiceKey<MarkerRenderingSupport<*>>
registry.put(MarkerRenderingSupportKey, support)
val support = registry.get(MarkerRenderingSupportKey) // अपने टाइप के साथ ही वापस आता है
// Swift: कुंजी को MapServiceKey के अनुरूप टाइप के रूप में परिभाषित करें
enum MarkerRenderingSupportKey: MapServiceKey {
typealias Value = any MarkerRenderingSupport
}
registry.put(MarkerRenderingSupportKey.self, support)
let support = registry.get(MarkerRenderingSupportKey.self)
// TypeScript: कुंजी createMapServiceKey<T>() से बनाएँ
const MarkerRenderingSupportKey = createMapServiceKey<MarkerRenderingSupport>();यहाँ उल्लिखित तीनों में से कोई भी, स्क्रीन पर प्रदाता-विशिष्ट कोड लाता है। चूंकि यह वह हिस्सा बन जाएगा जो प्रदाता को बदलने पर काम नहीं करेगा, इसलिए अनुशंसा की जाती है कि इसका उपयोग किए गए स्थानों को शाखा (branch) के अंदर समूहित करें।