दस्तावेज़ / अन्य / नेटिव एक्सटेंशन

नेटिव एक्सटेंशन

MapConductor प्रत्येक मानचित्र SDK की सभी कार्यक्षमताओं को रैप नहीं करता है। जब एकीकृत API में अनुपस्थित अभिव्यक्ति की आवश्यकता होती है, तो अमूर्तता को त्यागे बिना नीचे उतरने के लिए दो रास्ते प्रदान किए गए हैं। जिसे भी आप उपयोग करते हैं, उस स्क्रीन के अन्य भाग सामान्य API के साथ काम करते रहेंगे।

1 · HOLDER
Android · iOS · React
2 · REGISTRY
Android · iOS · React

01 · अमूर्तता का अंत

एकीकृत API केवल उन अवधारणाओं को संभालता है जो सभी प्रदाताओं में समान हैं। 3D इमारतों का एक्सट्रूज़न, विशिष्ट विक्रेता के ट्रैफिक लेयर, और कस्टम शेडर जैसी चीज़ें जानबूझकर इसके दायरे से बाहर रखी गई हैं। सब कुछ लपेटने की कोशिश करने पर, सामान्य API सबसे छोटा सामान्य गुणज (LCM) बन जाएगा और इसका उपयोग करना कठिन हो जाएगा।

1 · MapViewHolder

एंटिटी को यथावत उधार लेना

नेटिव मैप इंस्टेंस निकालें और उस SDK के API को सीधे कॉल करें। यह सभी 3 प्लेटफॉर्म पर मौजूद है।

2 · MapServiceRegistry

फीचर प्लग-इन करना

अतिरिक्त मॉड्यूल, Core को संशोधित किए बिना अपनी कार्यक्षमता को टाइप किए गए कुंजी के साथ पंजीकृत करते हैं। यह SDK का विस्तार करने वाले पक्ष के लिए एक तंत्र है।

प्लेटफ़ॉर्म

02 · नेटिव मानचित्र को छूना

स्टेट ऑब्जेक्ट से getMapViewHolder() को कॉल करने पर, उस प्रदाता के मानचित्र व्यू और मानचित्र इंस्टेंस रखने वाला एक होल्डर वापस आता है। प्रकार को संकीर्ण करने के बाद, यह शुद्ध SDK है। निर्देशांक और स्क्रीन पिक्सेल के बीच परस्पर रूपांतरण भी इस होल्डर के पास है।

सदस्य
विवरण
mapView
प्रदाता का व्यू (MKMapView · MapView · maplibregl.Map कंटेनर आदि)।
map
मानचित्र का स्वयं का इंस्टेंस। SDK का API यहाँ से कॉल किया जाता है।
toScreenOffset(position)
निर्देशांक से स्क्रीन पिक्सेल में। झुकाव और घुमाव प्रतिबिंबित होता है।
fromScreenOffset(offset)
स्क्रीन पिक्सेल से निर्देशांक में। एसिंक्रोनस और सिंक्रोनस संस्करण उपलब्ध हैं।
Kotlin
// टाइप सीमित कर लेने के बाद, आगे सब सादा Google Maps SDK है
val holder = mapViewState.getMapViewHolder()
if (holder is GoogleMapViewHolder) {
    holder.map.isTrafficEnabled = true
}

होल्डर का उपयोग तब तक नहीं किया जा सकता जब तक मानचित्र का आरंभीकरण न हो जाए। आरंभीकरण से पहले null लौटाया जाता है, इसलिए कृपया इसे onMapLoaded के अंदर या उसके बाद के ऑपरेशन में कॉल करें।

03 · मॉड्यूल डालना

MapServiceRegistry एक बिंदु है जिसके माध्यम से अतिरिक्त मॉड्यूल, Core को संशोधित किए बिना अपनी कार्यक्षमता सम्मिलित कर सकते हैं। इसे टाइप किए गए कुंजी के साथ पंजीकृत किया जाता है, और आवश्यक पक्ष उसी कुंजी से इसे प्राप्त करता है। चूंकि कुंजी का एक प्रकार होता है, इसलिए प्राप्त मान को कास्ट करने की आवश्यकता नहीं होती है। वर्तमान में इसका उपयोग मार्कर क्लस्टरिंग द्वारा किया जाता है, जो प्रदाता द्वारा पंजीकृत MarkerRenderingSupport को प्राप्त करके रेंडर करता है।

Android · React

MapServiceRegistry

MapServiceKey<T> को एक सिंगलटन के रूप में परिभाषित करें, MutableMapServiceRegistry में put करें, और उपयोगकर्ता इसे get से प्राप्त करता है। Android में, CompositionLocal (LocalMapServiceRegistry) से मैप स्कोप के रजिस्ट्री का संदर्भ लिया जाता है।

iOS

MapServiceRegistryScope

कुंजी को MapServiceKey के अनुरूप एक प्रकार के रूप में परिभाषित करें और MutableMapServiceRegistry में put करें। रजिस्ट्री स्टेट ऑब्जेक्ट (MapViewState.serviceRegistry) रखता है, और प्रदाता इसे केवल content को बनाते समय MapServiceRegistryScope.with(...) के साथ दृश्यमान बनाता है। यह SwiftUI का Environment इसलिए नहीं है, क्योंकि मैप की आंतरिक सामग्री MapViewContent नाम का एक मान है, व्यू हैरार्की नहीं।

map/MapServiceRegistry · टाइप किए गए कुंजी का रूप
// 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) के अंदर समूहित करें।

संबंधित पृष्ठ