दस्तावेज़ / अवधारणा / MapConductor क्यों

MapConductor क्यों

मानचित्र सुविधाओं वाले ऐप्स का कोड आमतौर पर किसी विशिष्ट मानचित्र SDK से गहराई से जुड़ा होता है। बदलने का मन करने पर कोड फिर से लिखना सिर्फ मानचित्र से संबंधित भाग तक सीमित नहीं रहता, बल्कि इसका असर स्क्रीन के लॉजिक तक भी पहुंचता है। MapConductor इस जुड़ाव को एक आम API से बदल देता है।

PROVIDERS
13
PLATFORMS
Android · iOS · Web
LICENSE
Apache 2.0
परिचय वीडियो · मानचित्र ऐप विकास में MapConductor के साथ चुनने की स्वतंत्रता!

01 · समस्या क्या है

01

शुल्क और अनुबंध बदल जाते हैं

मानचित्र API की बिलिंग प्रणाली बदल जाएगी। स्विच करना चाहते हैं, लेकिन ऐप का कोड इसकी अनुमति नहीं देता, इस तरह की स्थिति हो सकती है।

02

एक ही कार्यक्षमता को 3 बार लिखना

Android, iOS, Web पर अलग-अलग मानचित्र SDK का उपयोग करने से, मार्कर का उपचार और कैमरे का अर्थ भी एकसमान नहीं होता। विनिर्देशों पर चर्चा के लिए 3 बार की आवश्यकता होगी।

03

संख्याएं मेल नहीं खातीं

ज़ूम 14 का संकेत करने वाला पैमाना और दो बिंदुओं के बीच की दूरी, दोनों को SDK के उपयोगिता कार्य पर छोड़ देने पर पर्यावरण के अनुसार बदल जाता है। QA में हर बार यह तय करना पड़ेगा कि "कौन सा सही है"।

04

आइटम की संख्या बढ़ने पर व्यवस्था टूट जाती है

जब मार्कर हज़ारों की संख्या में हो जाते हैं, तो साधारण कार्यान्वयन में कैमरा संचालन भारी हो जाता है। समाधान प्रदाता के अनुसार अलग-अलग है, और हर बार फिर से लिखना पड़ता है।

02 · MapConductor का उत्तर

ऐप केवल एकीकृत API पर निर्भर करता है। प्रदाताओं के बीच का अंतर ड्राइवर सोख लेता है, और बदलाव निर्भरता मॉड्यूल और व्यू के प्रकारों को बदलने भर से सीमित हो जाता है।

एक प्रकार

निर्देशांक और स्थिति दोनों समान

GeoPoint, MarkerState, MapCameraPosition तीनों प्लेटफ़ॉर्म पर समान नाम और समान अर्थ रखते हैं। प्रदाता-विशिष्ट प्रकार सामने नहीं आते।

एक मापदंड

ज़ूम और दूरी दोनों मेल खाती हैं

ज़ूम को एक समान मापदंड में सामान्यीकृत किया जाता है, और दूरी, दिशा, और क्षेत्रफल की गणना SDK के स्वयं के कार्यान्वयन द्वारा की जाती है। यदि इनपुट समान है, तो किसी भी प्रदाता से समान मान वापस आता है।

एक लेखन शैली

सिर्फ स्थिति पास करना

"वर्तमान में होने वाली स्थितियों की एक सरणी" पास करने पर, Core पिछली स्थिति से अंतर निकालता है और आवश्यक भाग को मानचित्र में प्रतिबिंबित करता है। जोड़ने, अपडेट करने, या हटाने का प्रबंधन स्वयं करने की आवश्यकता नहीं है।

आइटम की संख्या की समस्या SDK द्वारा हल की जाती है

जब मार्कर 2,000 से अधिक हो जाते हैं, तो आंतरिक रेंडरिंग इंजन स्वचालित रूप से रेखाचित्र शैली को रेस्टर टाइल्स में बदल देता है। हजारों आइटम होने पर भी कैमरा संचालन सुचारू रहता है, और ऐप पक्ष का कोड एक भी पंक्ति नहीं बदलता। सीमा मान मानचित्र दृश्य के विकल्प से बदला जा सकता है।

03 · पतला रैपर नहीं

यदि यह सिर्फ प्रत्येक SDK की विधियों को कॉल करने वाला रैपर होता, तो यह जो कर सकता है वह "सबसे कम सुविधाओं वाले SDK" के अनुरूप हो जाता। MapConductor लुप्त सुविधाओं को स्वयं बनाकर पूरा करता है, इसलिए प्रदाता बदलने पर भी दिखावट और व्यवहार समान रहता है।

जो खुद से उपलब्ध है
जिसकी वजह से समानता आती है
भौगोलिक गणना
दूरी, दिशा, क्षेत्रफल और इंटरपोलेशन को Kotlin / Swift / TypeScript में समान सूत्रों से लागू किया गया है। चूंकि यह SDK के उपयोगिता टूल पर निर्भर नहीं करता, इसलिए प्रदर्शित संख्याओं में प्लेटफ़ॉर्म के आधार पर कोई अंतर नहीं आता।
मार्कर रेंडरिंग इंजन
थोड़ी संख्या में होने पर नेटिव मार्कर, बड़ी संख्या में होने पर रास्टर टाइल। स्थानिक इंडेक्स के साथ टैप पहचान और व्यूपोर्ट निष्कर्षण की गति मदों की संख्या से स्वतंत्र है।
छेद वाला बहुभुज · महान गोलाकार मार्ग
जिन प्रदाताओं के पास नेटिव सुविधा नहीं है, उनके लिए रास्टर टाइल के रूप में आरेखित करके समान दिखावट दिया जाता है। कॉल करने वाले का कोड नहीं बदलता है।
कैमरे का एकीकरण
जूम और कैमरा ऊंचाई को आपस में बदला जाता है और वास्तविक माप के आधार पर कैलिब्रेट किया जाता है। किसी भी प्रदाता पर जूम 14 समान विस्तार देता है।
स्रोत संकेतन
जूम और प्रदर्शन दायरे के अनुसार स्रोत बदलने के नियमों को डिज़ाइन के हिस्से के रूप में रखा जाता है। कस्टम टाइल का उपयोग करते समय भी आवश्यक संकेतन दिया जा सकता है।

04 · टीम पर प्रभाव

एक आम API को बीच में रखने से लिखे जाने वाले कोड की प्रकृति बदल जाती है। वह कोड जिसमें मानचित्र SDK का नाम नहीं आता, प्रदाता बदलने पर या किसी अन्य प्लेटफ़ॉर्म पर स्थानांतरित करने पर भी वैसा ही बना रहता है।

सीखने की लागत

सीखने के लिए API केवल 1 है

मानचित्र SDK का अवधारणा और नामकरण विक्रेता के अनुसार भिन्न होता है, इसलिए हर बार प्रदाता बदलने या प्लेटफ़ॉर्म बदलने पर पुनः सीखना पड़ता है। MapConductor में सीखने के लिए केवल एक API है, जिसे Android, iOS, React कहीं भी समान नाम और समान अर्थ के साथ उपयोग किया जा सकता है। किसी एक प्लेटफ़ॉर्म पर प्राप्त ज्ञान दूसरे प्लेटफ़ॉर्म पर भी उपयोगी होता है, और टीम में नए व्यक्ति आने पर पढ़ने के लिए प्रदाता की संख्या के अनुसार विषय नहीं बढ़ते।

पुन: उपयोग

मानचित्र SDK पर निर्भर न करने वाला कोड

GeoPoint या MarkerState किसी भी मानचित्र SDK के अंतर्गत नहीं आने वाले प्रकार हैं। मार्ग बनाना, निर्धारित करना कि क्या यह सीमा के अंदर है, और क्या प्रदर्शित करना है ── इस तरह के तर्क को मानचित्र SDK के प्रकारों से अलग करके लिखा जा सकता है, इसलिए प्रदाता बदलने पर पुनः लिखने की आवश्यकता नहीं होती। मानचित्र से संबंधित सामान्य घटकों को प्रदाता के अनुसार अलग-अलग बनाने के बजाय एक लाइब्रेरी के रूप में भी निकाला जा सकता है।

05 · डेटा वितरित करने वाले के नज़रिए से

अब तक हमने मानचित्र को एकीकृत करने वाले पक्ष की बात की है। MapConductor का लक्ष्य केवल वेंडर लॉक-इन से मुक्ति हासिल करना नहीं है, बल्कि किसी वेंडर पर निर्भर होने को मानचित्र SDK के चयन से अलग करके तय किए जाने योग्य बनाना भी है।

कभी-कभी चुनने का विकल्प नहीं होता

वाणिज्यिक SDK का उपयोग करना पड़ता है

पूरी तरह से खुले मैप का उपयोग करने की स्थिति को छोड़कर, व्यावहारिक रूप से कहीं न कहीं वाणिज्यिक मैप SDK का उपयोग करना होगा। अनुबंध और खरीद के कारणों से, कभी-कभी विकल्प शुरू से ही केवल एक ही होता है। MapConductor तब काम आता है, जब ऐसी स्थिति में भी आपको अपने मौजूदा संसाधनों को त्यागने की आवश्यकता नहीं होती है।

बंधनों को खोलना

मैप SDK और डेटा को अलग करना

मैप डेटा, जियोकोडिंग, टाइल जैसे संसाधनों का उपयोग, उन्हें प्रदान करने वाले विक्रेता के मैप SDK के साथ सेट के रूप में करने की अपेक्षा की जाती थी। यदि दोनों को अलग किया जा सके, तो उदाहरण के लिए, ArcGIS में संचित सामग्री का उपयोग किसी अन्य मैप SDK की स्क्रीन पर करना संभव हो जाता है।

प्रदर्शन का साधन न रखने वाला प्रदाता

केवल जियोकोडिंग, केवल डेटा

केवल जियोकोडिंग या केवल विशिष्ट क्षेत्र का डेटा रखने वाले प्रदाताओं का उपयोग अपना मैप SDK न होने के कारण सीमित रहा है। यदि प्रदर्शन पक्ष से अलग किया जाए, तो वे किसी भी मैप पर उपयोग किए जा सकते हैं।

इस समय, इस उद्देश्य के लिए कोई विशेषता अभी तक उपलब्ध नहीं है। इसके करीब के रूप में, Android SDK ArcGIS Online की सामग्री लोड कर सकता है, लेकिन यह ArcGIS के व्यू पर प्रदर्शन है। यहाँ जो लिखा गया है वह भविष्य में जोड़ने की दिशा है, वर्तमान विशेषताओं की सूची नहीं है।
डेटा और सेवाओं की उपयोग शर्तों का पालन करना, उन्हें एकीकृत करने वाले डेवलपर की जिम्मेदारी है। तकनीकी रूप से संयोजन किया जा सकना और उस संयोजन की अनुमति दिया जाना अलग बातें हैं।

06 · मानचित्र SDK प्रदाता के नज़रिए से

सामान्य परतें (Common Layer), मानचित्र SDK प्रदान करने वालों के लिए अपनी उपस्थिति को कमजोर करने वाली लग सकती हैं। MapConductor इस तरह से डिज़ाइन नहीं किया गया है। सामान्यीकरण केवल उन हिस्सों के लिए है जो हर प्रदाता में मौजूद हैं, हर कंपनी की ताकत को वैसे ही बाहर निकाला जा रहा है।

प्रवाह

बाहर से आने वाले ग्राहक

जब कई प्रदाताओं को एक ही तरीके से संभाला जा सके, तो अन्य कंपनियों के SDK से बनाए गए ऐप्स से भी आपको विकल्प के रूप में देखा जा सकता है। बदलाव की बाधा कम होना मौजूदा ग्राहकों को रोकने की शक्ति को कमजोर करने की दिशा में भी काम करता है, लेकिन उसके बदले चुने जाने का कारण "बदला नहीं जा सकता" से हटकर, कीमत, कवरेज, और रेंडरिंग गुणवत्ता आदि स्वयं हो जाता है।

न्यूनतम सामान्यीकरण

अपनी ताकत छुपाएं नहीं

सामान्यीकरण केवल उन बुनियादी कार्यों के लिए है जो हर प्रदाता में मौजूद होते हैं। स्टेट ऑब्जेक्ट के getMapViewHolder() को कॉल करके नेटिव मैप व्यू और मैप इंस्टेंस को वैसे ही निकाला जा सकता है, इसलिए उस प्रदाता के लिए विशिष्ट कार्य प्रत्येक कंपनी के API से सीधे लिखे जा सकते हैं। यदि यह पूरी तरह से छिपाने वाला रैपर होता, तो अंतर करने के कारक समाप्त हो जाते, लेकिन ऐसा नहीं है।

पूरा उद्योग

एक साझे आधार पर प्रतिस्पर्धा करना

ब्राउज़र ने HTML5 के साथ कार्यान्वयन को समान करने के बाद, प्रत्येक ब्राउज़र संगतता बनाए रखने के बजाय गति और कार्यक्षमता में ही प्रतिस्पर्धा करने लगा। मैप SDK के साथ भी यही है; एक बार सामान्य इंटरफेस तय हो जाए, तो उस पर कितना तेज़, सटीक और विस्तृत क्षेत्र प्रदर्शित किया जा सकता है, यह पूछा जाएगा। हमारा मानना है कि सामान्यीकरण व्यक्तिगत SDK के विकास को रोकता नहीं, बल्कि विकास की दिशा को संरेखित करता है।

07 · उपयुक्त मामले और अनुपयुक्त मामले

उपयुक्त
  • कई प्लेटफॉर्म पर वही मैप अनुभव देना चाहते हैं
  • भविष्य में प्रदाता बदलने की संभावना रखना चाहते हैं
  • मार्कर, आकृतियाँ, कैमरा आदि जैसे मानक मैप प्रदर्शन मुख्य हैं
  • हजारों से लेकर दसियों हजार मार्कर का प्रबंधन करना
  • दूरी और क्षेत्रफल के प्रदर्शन में संगतता की आवश्यकता है
अनुपयुक्त
  • किसी विशिष्ट प्रदाता के लिए विशिष्ट उन्नत प्रदर्शन मुख्य है (कस्टम शेडर, वेंडर-विशिष्ट लेयर)
  • टर्न-बाय-टर्न नेविगेशन आदि, जहाँ SDK का समर्पित कार्य ही उद्देश्य है
  • 1 प्लेटफ़ॉर्म और 1 प्रदाता पर पूरा होता है, और भविष्य में इसे बदलने की कोई योजना नहीं है

हालाँकि, आंशिक सह-उपयोग संभव है। नेटिव मैप इंस्टेंस तक हमेशा पहुँच होती है, इसलिए केवल विशेष हिस्सों के लिए प्रदाता-विशिष्ट कोड लिखने वाला विन्यास संभव है।

आगे पढ़ने के लिए