इस विषय में Android के लिए Maps SDK टूल का इस्तेमाल करके, Android ऐप्लिकेशन में जोड़े गए मैप को कॉन्फ़िगर करने का तरीका बताया गया है.
खास जानकारी
अपने ऐप्लिकेशन में मैप जोड़ने के बाद, मैप की शुरुआती और रनटाइम सेटिंग कॉन्फ़िगर की जा सकती हैं. शुरुआती सेटिंग इस आधार पर कॉन्फ़िगर की जानी चाहिए कि
आपने मैप कंटेनर (SupportMapFragment
या
MapView
) को स्टैटिक तरीके से जोड़ा है या डाइनैमिक. अगर मैप कंटेनर को स्टैटिक रूप से जोड़ा गया, तो लेआउट फ़ाइल में शुरुआती मैप सेटिंग कॉन्फ़िगर की जा सकती हैं.
अगर इसे डाइनैमिक तौर पर जोड़ा गया है, तो OnCreate
कॉलबैक में, GoogleMapOptions
ऑब्जेक्ट की मदद से शुरुआती सेटिंग कॉन्फ़िगर की जा सकती हैं.
मैप कंटेनर जोड़ने के बारे में जानने के लिए, मैप जोड़ें पर जाएं.
शुरुआती मैप सेटिंग में ये शामिल हैं:
- कैमरे की स्थिति, जिसमें जगह की जानकारी, ज़ूम, बेयरिंग, और झुकाना शामिल है. कैमरे की पोज़िशन के बारे में ज़्यादा जानने के लिए, कैमरा और व्यू पर जाएं.
- मैप किस तरह का है.
- दिखाने के लिए यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट, जैसे कि ज़ूम बटन और कंपास.
- चालू करने के लिए हाथ के जेस्चर.
- लाइट मोड चालू है या नहीं.
रनटाइम के दौरान, onMapReady
कॉलबैक में GoogleMap
ऑब्जेक्ट को अपडेट करके, इन सेटिंग के साथ-साथ अन्य सेटिंग को भी कॉन्फ़िगर किया जा सकता है. अतिरिक्त सेटिंग को GoogleMap
क्लास के तरीकों से कॉन्फ़िगर किया जाता है. उदाहरण के लिए, ट्रैफ़िक लेयर और मैप पैडिंग को कॉन्फ़िगर करने वाले तरीके.
उदाहरण
नीचे दिए गए उदाहरण कोड और ऊपर दिए गए स्क्रीनशॉट में, मैप को इन सेटिंग के हिसाब से कॉन्फ़िगर किया गया है.
शुरुआती सेटिंग, लेआउट फ़ाइल में कॉन्फ़िगर की जाती हैं:
- ज़ूम कंट्रोल चालू करें.
- घुमाने के जेस्चर से जुड़े कंट्रोल चालू करें.
- मैप के झुकाव को 30 पर सेट करें.
रनटाइम की सेटिंग:
- कैमरे को क्योटो जापान के बीच में रखें.
- हाइब्रिड मैप टाइप चालू करें.
- ट्रैफ़िक परत चालू करें.
शुरुआती सेटिंग
<?xml version="1.0" encoding="utf-8"?> <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:name="com.google.android.gms.maps.SupportMapFragment" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" map:uiZoomControls="true" map:uiRotateGestures="true" map:cameraTilt="30" />
रनटाइम सेटिंग
package com.example.mapsetup; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } // Update the map configuration at runtime. @Override public void onMapReady(GoogleMap googleMap) { // Set the map coordinates to Kyoto Japan. LatLng kyoto = new LatLng(35.00116, 135.7681); // Set the map type to Hybrid. googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); // Add a marker on the map coordinates. googleMap.addMarker(new MarkerOptions() .position(kyoto) .title("Kyoto")); // Move the camera to the map coordinates and zoom in closer. googleMap.moveCamera(CameraUpdateFactory.newLatLng(kyoto)); googleMap.moveCamera(CameraUpdateFactory.zoomTo(15)); // Display traffic. googleMap.setTrafficEnabled(true); } }
शुरू करने से पहले
शुरू करने से पहले, प्रोजेक्ट सेट अप किया जा सकता है और नीचे दिए गए विकल्पों की मदद से, एक बुनियादी मैप जोड़ा जा सकता है:
Android Studio के लिए Maps टेंप्लेट का इस्तेमाल करके कोई ऐप्लिकेशन बनाएं. Maps टेंप्लेट आपके प्रोजेक्ट को अपने-आप कॉन्फ़िगर करता है और एक बुनियादी मैप जोड़ता है. फ़्रैगमेंट को मैप कंटेनर के तौर पर इस्तेमाल किया जाता है और इसे स्टैटिक रूप से जोड़ा जाता है. ज़्यादा जानकारी के लिए, quickstart देखें.
SDK टूल के लिए, मैन्युअल तरीके से अपना प्रोजेक्ट कॉन्फ़िगर करें और बुनियादी मैप जोड़ें. इससे आप किसी भी Android टेम्प्लेट का उपयोग कर सकते हैं और किसी मौजूदा ऐप्लिकेशन में एक मैप जोड़ सकते हैं.
मैप को स्टैटिक रूप से जोड़ने के बाद उसे कॉन्फ़िगर करें
इस सेक्शन में बताया गया है कि अगर आपने मैप को स्टैटिक रूप से अपनी लेआउट फ़ाइल में जोड़ा है, तो उसकी शुरुआती स्थिति कैसे सेट करें.
Android के लिए Maps SDK टूल, SupportMapFragment
या MapView
के लिए कस्टम एक्सएमएल एट्रिब्यूट का एक सेट तय करता है. इसका इस्तेमाल करके, सीधे लेआउट फ़ाइल से, मैप की शुरुआती स्थिति को कॉन्फ़िगर किया जा सकता है. फ़िलहाल, नीचे दिए गए एट्रिब्यूट
तय किए गए हैं:
mapType
— दिखाने के लिए मैप का टाइप. मान्य वैल्यू में ये शामिल हैं:none
,normal
,hybrid
,satellite
, औरterrain
.cameraTargetLat
,cameraTargetLng
,cameraZoom
,cameraBearing
,cameraTilt
— कैमरे की शुरुआती पोज़िशन. ज़्यादा जानकारी के लिए, कैमरा और व्यू गाइड देखें.uiZoomControls
,uiCompass
— इससे यह पता चलता है कि ज़ूम कंट्रोल और कंपास दिखाए जाते हैं या नहीं. ज़्यादा जानकारी के लिए,UiSettings
पर जाएं.uiZoomGestures
,uiScrollGestures
,uiRotateGestures
,uiTiltGestures
— इससे पता चलता है कि हाथ के खास जेस्चर चालू हैं या नहीं. ज़्यादा जानकारी के लिए,UiSettings
पर जाएं.zOrderOnTop
— इससे पता चलता है कि मैप व्यू की सतह मैप विंडो, मैप कंट्रोल, और विंडो के किसी ऑब्जेक्ट के ऊपर दिखती है या नहीं. ज़्यादा जानकारी के लिए, SurfaceView.setZOrderOnTop(boolean) देखें.useViewLifecycle
— सिर्फ़SupportMapFragment
ऑब्जेक्ट के साथ मान्य है. इससे यह तय होता है कि मैप का लाइफ़साइकल, फ़्रैगमेंट के व्यू से जुड़ा होना चाहिए या फ़्रैगमेंट से. ज़्यादा जानकारी के लिए यहां देखें.liteMode
— लाइट मोड चालू करने के लिएtrue
. अगर ऐसा नहीं है, तोfalse
.
अपनी लेआउट फ़ाइल में इन कस्टम एट्रिब्यूट का इस्तेमाल करने के लिए, आपको
इसमें नेमस्पेस का यह एलान शामिल करना होगा. आप कोई भी नेमस्पेस चुन सकते हैं, यह map
होना ज़रूरी नहीं है:
xmlns:map="http://schemas.android.com/apk/res-auto"
इसके बाद, अपनी लेआउट फ़ाइल में map:
प्रीफ़िक्स के साथ एट्रिब्यूट जोड़े जा सकते हैं.
यह लेआउट फ़ाइल कस्टम मैप एट्रिब्यूट के साथ SupportMapFragment
ऑब्जेक्ट को कॉन्फ़िगर करती है. यही एट्रिब्यूट, MapView
ऑब्जेक्ट पर भी लागू किए जा सकते हैं.
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
map:cameraBearing="112.5"
map:cameraTargetLat="-33.796923"
map:cameraTargetLng="150.922433"
map:cameraTilt="30"
map:cameraZoom="13"
map:mapType="normal"
map:uiCompass="false"
map:uiRotateGestures="true"
map:uiScrollGestures="false"
map:uiTiltGestures="true"
map:uiZoomControls="false"
map:uiZoomGestures="true"/>
मैप को डाइनैमिक तौर पर जोड़ने के बाद, उसे कॉन्फ़िगर करें
इस सेक्शन में बताया गया है कि अगर आपने मैप को डाइनैमिक तौर पर अपने ऐप्लिकेशन में जोड़ा है, तो उसकी शुरुआती स्थिति को कैसे सेट किया जा सकता है.
अगर आपने SupportMapFragment
या MapView
को डाइनैमिक तौर पर जोड़ा है, तो GoogleMapOptions
ऑब्जेक्ट में मैप की शुरुआती स्थिति सेट की जा सकती है. यहां वही विकल्प उपलब्ध हैं जो लेआउट फ़ाइल में उपलब्ध हैं.
GoogleMapOptions
को इस तरह से बनाया जा सकता है:
Kotlin
val options = GoogleMapOptions()
Java
GoogleMapOptions options = new GoogleMapOptions();
इसके बाद, उसे इस तरह कॉन्फ़िगर करें:
Kotlin
options.mapType(GoogleMap.MAP_TYPE_SATELLITE) .compassEnabled(false) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false)
Java
options.mapType(GoogleMap.MAP_TYPE_SATELLITE) .compassEnabled(false) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false);
मैप बनाते समय ये विकल्प लागू करने के लिए, इनमें से कोई एक काम करें:
- अगर
SupportMapFragment
का इस्तेमाल किया जा रहा है, तो फ़्रैगमेंट बनाने और अपनी सेटिंग में पास करने के लिए,SupportMapFragment.newInstance(GoogleMapOptions options)
के स्टैटिक फ़ैक्ट्री तरीके का इस्तेमाल करें. - अगर
MapView
का इस्तेमाल किया जा रहा है, तोMapView(Context, GoogleMapOptions)
कंस्ट्रक्टर का इस्तेमाल करें और अपनी सेटिंग में पास करें.
ट्रैफ़िक लेयर सेट अप करना
ट्रैफ़िक लेयर को चालू करके, ट्रैफ़िक का डेटा अपने मैप पर दिखाया जा सकता है. setTrafficEnabled()
तरीके को कॉल करके, ट्रैफ़िक लेयर को चालू या बंद किया जा सकता है. साथ ही, isTrafficEnabled()
तरीके को कॉल करके यह पता लगाया जा सकता है कि ट्रैफ़िक लेयर अभी चालू है या नहीं. नीचे दिया गया स्क्रीनशॉट, एक मैप दिखाता है, जिसमें ट्रैफ़िक लेयर चालू है.
मैप का टाइप सेट करें
मैप टाइप सेट करने के लिए, setMapType
तरीके को कॉल करें.
उदाहरण के लिए, सैटलाइट मैप दिखाने के लिए:
Kotlin
// Sets the map type to be "hybrid" map.mapType = GoogleMap.MAP_TYPE_HYBRID
Java
// Sets the map type to be "hybrid" map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
नीचे दी गई इमेज में सामान्य, हाइब्रिड, और इलाके के मैप टाइप की तुलना की गई है:
3D बिल्डिंग सेट अप करें
कई शहरों को नज़दीक से देखने पर, 3D बिल्डिंग दिखाई देंगी, जैसा कि वैनकूवर, कनाडा की नीचे दी गई तस्वीर में दिखाई गई है. GoogleMap.setBuildingsEnabled(false)
को कॉल करके, 3D बिल्डिंग बंद की जा सकती हैं.
इनडोर मैप सेटिंग सेट अप करें
बहुत ज़्यादा ज़ूम करने पर, मैप में अंदरूनी जगहों के लिए फ़्लोर प्लान दिखते हैं, जैसे कि हवाई अड्डे, शॉपिंग मॉल, बड़े रीटेल स्टोर, और बस, मेट्रो वगैरह. ये फ़्लोर प्लान जिन्हें इनडोर मैप कहा जाता है, 'सामान्य' और 'सैटलाइट' मैप टाइप (GoogleMap.MAP_TYPE_NORMAL
और
GoogleMap.MAP_TYPE_SATELLITE
) के लिए दिखाए जाते हैं. उपयोगकर्ता के
ज़ूम इन करने पर ये अपने-आप चालू हो जाते हैं और मैप को ज़ूम आउट करने पर वे गायब हो जाते हैं.
रोक लगाने की सूचना: आने वाले समय में, इनडोर मैप सिर्फ़ normal
तरह के मैप में उपलब्ध होंगे. आने वाले समय में रिलीज़ होने वाले इस वर्शन में, इनडोर मैप की सुविधा satellite
, terrain
या hybrid
मैप पर काम नहीं करेगी. भले ही इनडोर के लिए यह सुविधा उपलब्ध न हो, isIndoorEnabled()
की मदद से, वह वैल्यू दिखती रहेगी जो setIndoorEnabled()
से सेट की गई है. डिफ़ॉल्ट रूप से, setIndoorEnabled
, true
होता है. रिलीज़ नोट से
आपको पता चलेगा कि उन मैप टाइप पर इनडोर सहायता कब उपलब्ध होगी.
यहां API में इनडोर मैप की सुविधा की खास जानकारी दी गई है:
- आप
GoogleMap.setIndoorEnabled(false)
पर कॉल करके, इनडोर मैप बंद कर सकते हैं. इनडोर मैप डिफ़ॉल्ट रूप से चालू होते हैं. इनडोर मैप एक बार में एक ही मैप पर दिखाए जाते हैं. डिफ़ॉल्ट रूप से, यह आपके ऐप्लिकेशन में जोड़ा गया पहला मैप होता है. इनडोर मैप को किसी दूसरे मैप पर दिखाने के लिए, उन्हें पहले मैप पर बंद करें. इसके बाद, दूसरे मैप परsetIndoorEnabled(true)
को कॉल करें. - डिफ़ॉल्ट लेवल पिकर (फ़्लोर पिकर) बंद करने के लिए,
GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false)
को कॉल करें. ज़्यादा जानकारी के लिए, मैप के साथ इंटरैक्ट करना देखें. OnIndoorStateChangeListener
— सुनने वालों के बारे में बताता है कि वे पता लगा सकते हैं कि किसी इमारत पर कब फ़ोकस किया जाता है या किसी इमारत में कोई लेवल चालू किया गया है. ज़्यादा जानकारी के लिए, मैप के साथ इंटरैक्ट करना देखें.getFocusedBuilding
— फ़ोकस में मौजूद बिल्डिंग को फिर से हासिल करता है. इसके बाद,IndoorBuilding.getActiveLevelIndex()
पर कॉल करके, ऐक्टिव लेवल की जानकारी देखी जा सकती है.- बेस मैप को स्टाइल करने से, इनडोर मैप पर कोई असर नहीं पड़ता.
मैप पैडिंग (जगह) सेट अप करें
इस वीडियो में मैप पैडिंग का उदाहरण दिया गया है.
Google मैप को इस तरह से डिज़ाइन किया गया है कि उसके कंटेनर एलिमेंट से तय किए गए पूरे क्षेत्र, आम तौर पर MapView
या SupportMapFragment
को भरा जा सके. मैप के दिखने और काम करने के तरीके
के कई पहलू, इसके कंटेनर के डाइमेंशन से तय होते हैं:
- कैमरे का टारगेट, पैड किए गए क्षेत्र के बीच में दिखेगा.
- मैप कंट्रोल, मैप के किनारों के हिसाब से रखे जाते हैं.
- कानूनी जानकारी, जैसे कॉपीराइट स्टेटमेंट या Google लोगो, मैप पर सबसे नीचे दिखते हैं.
GoogleMap
का इस्तेमाल करके, मैप के किनारों के आस-पास पैडिंग (जगह) जोड़ी जा सकती है.setPadding()
तरीका. मैप पूरे कंटेनर को भरता रहेगा, लेकिन टेक्स्ट और उसे कंट्रोल करने की पोज़िशनिंग, मैप के जेस्चर, और कैमरे के मूवमेंट ऐसे काम करेंगे जैसे कि उन्हें किसी छोटी जगह पर रखा गया हो. इसकी वजह से ये बदलाव होते हैं:
- एपीआई कॉल या बटन दबाने (जैसे कि कंपास, मेरी जगह, ज़ूम बटन) के ज़रिए होने वाले कैमरे की गतिविधियां, पैड किए गए क्षेत्र के हिसाब से होती हैं.
getCameraPosition
वाला तरीका, पैड किए गए क्षेत्र के बीच का हिस्सा दिखाता है.Projection
औरgetVisibleRegion
तरीके, पैड किए गए क्षेत्र को दिखाते हैं.- यूज़र इंटरफ़ेस (यूआई) कंट्रोल, कंटेनर के किनारे से पिक्सल की तय संख्या से ऑफ़सेट किए जाते हैं.
मैप के कुछ हिस्से को ओवरलैप करने वाले यूज़र इंटरफ़ेस (यूआई) डिज़ाइन करते समय, पैडिंग की सुविधा फ़ायदेमंद हो सकती है. नीचे दी गई इमेज में, मैप को ऊपर और दाएं किनारों पर पैड किया गया है. दिखने वाले मैप कंट्रोल और लीगल टेक्स्ट, पैड किए गए क्षेत्र के किनारों पर हरे रंग में दिखाए जाएंगे. साथ ही, मैप में पूरा कंटेनर भरता रहेगा, जिसे नीले रंग में दिखाया गया है. इस उदाहरण में, मैप कंट्रोल को रोके बिना, मैप के दाईं ओर एक मेन्यू फ़्लोट किया जा सकता है.