
इस पेज पर, Android के लिए Maps 3D SDK का इस्तेमाल करके, किसी Android ऐप्लिकेशन में बुनियादी 3D मैप जोड़ने का तरीका बताया गया है. इस पेज पर दिए गए निर्देशों में यह माना गया है कि आपने सेटअप पेज पर दिए गए चरणों को पहले ही पूरा कर लिया है. साथ ही, आपके पास ये चीज़ें हैं:
- Maps 3D SDK for Android की सुविधा वाला Google Cloud प्रोजेक्ट
- Android के लिए Maps 3D SDK के साथ इस्तेमाल करने के लिए कॉन्फ़िगर किया गया एपीआई पासकोड
- Android Studio प्रोजेक्ट, जिसे Android के लिए Maps 3D SDK के साथ इस्तेमाल किया जा सकता हो
इन ज़रूरी शर्तों के बारे में ज़्यादा जानकारी के लिए, सेटअप देखें.
पहला चरण: Map3DView कॉम्पोनेंट जोड़ने के लिए, लेआउट फ़ाइल (activity_main.xml) को अपडेट करना
Map3DView कॉम्पोनेंट, ऐप्लिकेशन में 3D मैप रेंडर करने वाला व्यू है.
यहां दिए गए चरणों में, कॉम्पोनेंट को जोड़ने और मैप की शुरुआती स्थिति को कॉन्फ़िगर करने का तरीका बताया गया है. इसमें कैमरे की पोज़िशन और उससे जुड़े एट्रिब्यूट शामिल हैं:
अपनी मुख्य गतिविधि की लेआउट फ़ाइल खोलें. यह आम तौर पर
app/src/main/res/layout/activity_main.xmlपर मौजूद होती है.रूट
ConstraintLayout(या रूट लेआउट एलिमेंट) में,map3dएक्सएमएल नेमस्पेस जोड़ें:xmlns:map3d="http://schemas.android.com/apk/res-auto"डिफ़ॉल्ट
<TextView>को मिटा दें, जो "Hello World!" दिखाता है.अपने लेआउट में
Map3DViewकॉम्पोनेंट जोड़ें. कैमरे की पोज़िशन और अन्य एट्रिब्यूट को पसंद के मुताबिक बनाया जा सकता है:<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:map3d="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <com.google.android.gms.maps3d.Map3DView android:id="@+id/map3dView" android:layout_width="match_parent" android:layout_height="match_parent" map3d:mode="hybrid" map3d:centerLat="38.544012" map3d:centerLng="-107.670428" map3d:centerAlt="2427.6" map3d:heading="310" map3d:tilt="63" map3d:range="8266" map3d:roll="0" map3d:minAltitude="0" map3d:maxAltitude="1000000" map3d:minHeading="0" map3d:maxHeading="360" map3d:minTilt="0" map3d:maxTilt="90" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
दूसरा भाग: MainActivity.kt को अपडेट करना
यहां दिए गए चरणों से, पार्ट 1 में activity_main.xml फ़ाइल में जोड़े गए Map3DView कॉम्पोनेंट को शुरू किया जाता है. साथ ही, कॉम्पोनेंट के लाइफ़साइकल इवेंट मैनेज किए जाते हैं.
ध्यान दें कि Android के लिए Maps 3D SDK, एक समय पर सिर्फ़ एक Map3DView
चालू इंस्टेंस के साथ काम करता है. एक साथ कई Map3DView इंस्टेंस दिखाना
(जैसे, एक ही लेआउट या अलग-अलग दिखने वाली ऐक्टिविटी या फ़्रैगमेंट में) काम नहीं करता.इससे रेंडरिंग से जुड़ी समस्याएं हो सकती हैं. जैसे, सेकंडरी व्यू पर काली स्क्रीन दिखना.
इसके अलावा, सभी Map3DView एक ही मैप स्टेट (जैसे, कैमरे की पोज़िशन, जोड़े गए मार्कर, पॉलीगॉन वगैरह) को शेयर और रिफ़्लेक्ट करेंगे. यह तब भी बनी रहेगी, जब एक Map3DView को onDestroy का इस्तेमाल करके मिटा दिया जाता है और दूसरा बनाया जाता है. हालांकि, इसे मैन्युअल तरीके से मिटाया जा सकता है. उदाहरण के लिए, अगर आपने Map3DView1 में मार्कर जोड़े हैं, तो उन्हें मिटाकर Map3DView2 बनाने पर भी, वे मार्कर Map3DView2 में मौजूद रहेंगे.
डेवलपर की ज़िम्मेदारियां:
- एक बार में एक व्यू: पक्का करें कि किसी भी समय, आपकी व्यू हैरारकी के ऐक्टिव हिस्से में सिर्फ़ एक
Map3DViewहो. - मैन्युअल तरीके से क्लीनअप करना: एक
Map3DView(जैसे,Map3DView1) से दूसरेMap3DView(जैसे,Map3DView2) पर स्विच करते समय, आपको पुराने इंस्टेंस (Map3DView1) परonDestroy()को कॉल करना होगा. मैप की मौजूदा स्थिति शेयर की जाती है. इसलिए, यह पक्का करने के लिए किMap3DView2नई या खास स्थिति से शुरू हो, आपकोMap3DView1से सेट की गई किसी भी स्थिति को मैन्युअल तरीके से मिटाना होगा. इसमें मार्कर, ओवरले वगैरह हटाना शामिल है. साथ ही,OnMap3DViewReadyCallbackमें मिलेGoogleMap3Dऑब्जेक्ट का इस्तेमाल करके, कैमरे की पोज़िशन को रीसेट करना भी शामिल है.
अपनी
MainActivity.ktफ़ाइल खोलें. यह आम तौर परapp/src/main/java/com/example/yourpackagename/MainActivity.ktपर मौजूद होती है.Android के लिए Maps 3D SDK के लिए ज़रूरी इंपोर्ट जोड़ें:
import com.google.android.gms.maps3d.GoogleMap3D import com.google.android.gms.maps3d.Map3DView import com.google.android.gms.maps3d.OnMap3DViewReadyCallbackOnMap3DViewReadyCallbackलागू करने के लिए,MainActivityक्लास में बदलाव करें:class MainActivity : AppCompatActivity(), OnMap3DViewReadyCallback {Map3DViewऔरGoogleMap3Dके लिए वैरिएबल तय करें:private lateinit var map3DView: Map3DView private var googleMap3D: GoogleMap3D? = nullonCreateतरीके में,setContentView(...)औरViewCompat.setOnApplyWindowInsetsListenerब्लॉक के बाद,map3DViewको शुरू करें. इसकेonCreateलाइफ़साइकल तरीके को कॉल करें और मैप के लिए एसिंक्रोनस तरीके से अनुरोध करें:override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContentView(R.layout.activity_main) ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) insets } map3DView = findViewById(R.id.map3dView) map3DView.onCreate(savedInstanceState) map3DView.getMap3DViewAsync(this) }onMap3DViewReadyतरीके को बदलें. इस कॉलबैक को तब ट्रिगर किया जाता है, जब मैप इस्तेमाल के लिए तैयार हो जाता है:override fun onMap3DViewReady(googleMap3D: GoogleMap3D) { // Interact with the googleMap3D object here this.googleMap3D = googleMap3D // You can now make calls to the googleMap3D object, e.g., // googleMap3D.cameraController.flyTo(camera { ... }) }अपनी गतिविधि से लाइफ़साइकल इवेंट को
Map3DViewपर फ़ॉरवर्ड करें. इसके लिए,Map3DViewमें ये ओवरराइड जोड़ें:MainActivityoverride fun onStart() { super.onStart() map3DView.onStart() } override fun onResume() { super.onResume() map3DView.onResume() } override fun onPause() { map3DView.onPause() super.onPause() } override fun onStop() { map3DView.onStop() super.onStop() } override fun onDestroy() { map3DView.onDestroy() super.onDestroy() } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) map3DView.onSaveInstanceState(outState) } override fun onLowMemory() { super.onLowMemory() map3DView.onLowMemory() }
तीसरा भाग: Gradle और Run को सिंक करना
ऐप्लिकेशन के लेआउट और गतिविधि को अपडेट करने के बाद, अब ऐप्लिकेशन को बनाया और चलाया जा सकता है. इससे 3D मैप व्यू देखा जा सकता है.
अपने प्रोजेक्ट को Gradle के साथ सिंक करने के लिए, फ़ाइल > प्रोजेक्ट को Gradle फ़ाइलों के साथ सिंक करें को चुनें.
किसी एम्युलेटर या फ़िज़िकल डिवाइस पर अपना ऐप्लिकेशन बनाने और उसे चलाने के लिए, चलाएं > चलाएं को चुनें.
अगर सब कुछ सही तरीके से कॉन्फ़िगर किया गया है, तो आपको अपने ऐप्लिकेशन में 3D मैप दिखेगा. यह मैप, activity_main.xml में दिए गए निर्देशांकों के आस-पास दिखेगा.
अगले चरण
अब आपने अपने ऐप्लिकेशन में बुनियादी 3D मैप जोड़ लिया है. अब Android के लिए Maps 3D SDK टूल की ज़्यादा बेहतर सुविधाओं का इस्तेमाल किया जा सकता है. जैसे, कैमरे के पाथ के ऐनिमेशन, 3D मार्कर या पॉलीगॉन.
मैप पर क्लिक करने से जुड़े इवेंट को मॉनिटर करने की अनुमति
मैप पर क्लिक इवेंट सुनने के लिए, GoogleMap3D.setMap3DClickListener का इस्तेमाल करें. जब कोई उपयोगकर्ता मैप पर क्लिक करता है, तब यह लिसनर ट्रिगर होता है. साथ ही, यह क्लिक किए गए पॉइंट की जगह और प्लेस आईडी की जानकारी देता है.
यहां दिए गए उदाहरण में, मैप क्लिक लिसनर सेट करने का तरीका बताया गया है:
googleMap3D.setMap3DClickListener { location, placeId ->
lifecycleScope.launch(Dispatchers.Main) {
if (placeId != null) {
Toast.makeText(this@MainActivity, "Clicked on place with ID: $placeId", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this@MainActivity, "Clicked on location: $location", Toast.LENGTH_SHORT).show()
}
}
}
ध्यान दें कि क्लिक हैंडलर, मुख्य (या यूज़र इंटरफ़ेस) थ्रेड पर नहीं चलता है. अगर आपको यूज़र इंटरफ़ेस (यूआई) में बदलाव करने हैं (जैसे, कोई सूचना दिखाना), तो आपको मुख्य थ्रेड पर स्विच करना होगा. Kotlin के लिए, lifecycleScope.launch(Dispatchers.Main) का इस्तेमाल करके ऐसा किया जा सकता है.