इस विषय में, Android के लिए Maps SDK टूल का इस्तेमाल करके, Android ऐप्लिकेशन में जोड़े गए मैप को कॉन्फ़िगर करने का तरीका बताया गया है.
खास जानकारी
अपने ऐप्लिकेशन में मैप जोड़ने के बाद, मैप की शुरुआती और रनटाइम सेटिंग को कॉन्फ़िगर किया जा सकता है. शुरुआती सेटिंग को इस आधार पर कॉन्फ़िगर करना होगा कि आपने मैप कंटेनर (SupportMapFragment
या
MapView
) को स्टैटिक तौर पर जोड़ा है या डाइनैमिक तौर पर. अगर मैप कंटेनर को स्टैटिक तौर पर जोड़ा गया था, तो लेआउट फ़ाइल में मैप की शुरुआती सेटिंग कॉन्फ़िगर की जा सकती हैं.
अगर इसे डाइनैमिक तौर पर जोड़ा गया था, तो GoogleMapOptions
ऑब्जेक्ट की मदद से, OnCreate
कॉलबैक में शुरुआती सेटिंग कॉन्फ़िगर की जा सकती हैं.
मैप कंटेनर जोड़ने के बारे में जानने के लिए, मैप जोड़ना लेख पढ़ें.
शुरुआती मैप सेटिंग में ये शामिल हैं:
- कैमरे की पोज़िशन, जिसमें ये शामिल हैं: जगह, ज़ूम, दिशा, और झुकाव. कैमरे की पोज़िशन तय करने से जुड़ी जानकारी के लिए, कैमरा और व्यू देखें.
- मैप का टाइप.
- डिसप्ले के लिए यूज़र इंटरफ़ेस (यूआई) के कॉम्पोनेंट, जैसे कि ज़ूम बटन और कंपास.
- चालू करने के लिए हाथ के जेस्चर.
- लाइट मोड चालू है या नहीं.
रनटाइम के दौरान, इन सेटिंग और कुछ अन्य सेटिंग को कॉन्फ़िगर किया जा सकता है. इसके लिए, 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 टेंप्लेट, आपके प्रोजेक्ट को अपने-आप कॉन्फ़िगर करता है और एक बुनियादी मैप जोड़ता है. फ़्रैगमेंट का इस्तेमाल, मैप कंटेनर के तौर पर किया जाता है और इसे स्टैटिक तौर पर जोड़ा जाता है. ज़्यादा जानकारी के लिए, क्विकस्टार्ट देखें.
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
दबाएं.mapColorScheme
— सामान्य और इलाके के मैप के लिए कलर स्कीम तय करता है. वैल्यू मेंlight
(डिफ़ॉल्ट),dark
, औरfollow_system
शामिल हैं. इसका मतलब है किUI_NIGHT_MODE_MASK
की डिवाइस सेटिंग के आधार पर, मौजूदा सिस्टम सेटिंग का इस्तेमाल किया जाता है. ज़्यादा जानकारी के लिए, मैप की कलर स्कीम लेख पढ़ें.
अपनी लेआउट फ़ाइल में इन कस्टम एट्रिब्यूट का इस्तेमाल करने के लिए, इसमें ये नेमस्पेस का एलान शामिल होना चाहिए. आपके पास कोई भी नेमस्पेस चुनने का विकल्प है. इसके लिए, 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:mapColorScheme="dark"
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)
कन्स्ट्रक्टर का इस्तेमाल करें और अपनी सेटिंग में पास डालें.
अपने मैप को स्थानीय भाषा में उपलब्ध कराना
अपने ऐप्लिकेशन में MapView
या SupportMapFragment
जोड़ने पर, मैप पर मौजूद टेक्स्ट एलिमेंट, उपयोगकर्ता के डिवाइस की सेटिंग और जगह के आधार पर सही भाषा में दिखते हैं. अपनी Gradle फ़ाइल में resConfigs
आइटम जोड़कर, ऐप्लिकेशन में इस्तेमाल की जाने वाली भाषाओं को सीमित किया जा सकता है. यह सुविधा, इस्तेमाल न होने वाली भाषाओं को हटाने के लिए काम की है. इससे आपके ऐप्लिकेशन के बाइनरी साइज़ में भी कमी आती है. उदाहरण के लिए:
defaultConfig {
resConfigs "en", "fr", "es", "zh", "de", "ja", "ru", "ko", "pt", "in"
}
Android ऐप्लिकेशन के कॉन्टेंट को स्थानीय भाषा के हिसाब से लिखने के बारे में ज़्यादा जानें.
ट्रैफ़िक लेयर सेट अप करना
ट्रैफ़िक लेयर को चालू करके, अपने मैप पर ट्रैफ़िक का डेटा दिखाया जा सकता है. 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
होती है. प्रॉडक्ट की जानकारी
आपको इस बारे में जानकारी देगी कि इस तरह के मैप के लिए, इनडोर
मैप की सुविधा कब उपलब्ध नहीं होगी.
यहां एपीआई में इनडोर मैप की सुविधा के बारे में खास जानकारी दी गई है:
GoogleMap.setIndoorEnabled(false)
बोलकर, इनडोर मैप की सुविधा को बंद किया जा सकता है. इनडोर मैप की सुविधा डिफ़ॉल्ट रूप से चालू होती है. इनडोर मैप, एक बार में एक मैप पर दिखाए जाते हैं. डिफ़ॉल्ट रूप से यह आपके ऐप्लिकेशन में जोड़ा गया पहला मैप होता है. किसी दूसरे मैप पर इनडोर मैप दिखाने के लिए, उन्हें पहले मैप पर बंद करें और फिर दूसरे मैप परsetIndoorEnabled(true)
को कॉल करें.- डिफ़ॉल्ट लेवल पिकर (फ़्लोर पिकर) को बंद करने के लिए,
GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false)
को कॉल करें. ज़्यादा जानकारी के लिए, मैप के साथ इंटरैक्ट करना देखें. OnIndoorStateChangeListener
— ऐसे लिसनर तय करता है जो यह पता लगाते हैं कि कोई इमारत फ़ोकस में कब आती है या किसी इमारत में कोई लेवल कब चालू होता है. ज़्यादा जानकारी के लिए, मैप के साथ इंटरैक्ट करना लेख पढ़ें.getFocusedBuilding
— फ़ोकस में मौजूद इमारत की जानकारी दिखाता है. इसके बाद,IndoorBuilding.getActiveLevelIndex()
को कॉल करके ऐक्टिव लेवल देखा जा सकता है.- बुनियादी मैप की स्टाइल से, इनडोर मैप पर कोई असर नहीं पड़ता.
मैप पैडिंग सेट अप करें
इस वीडियो में, मैप पैडिंग का उदाहरण दिया गया है.
Google मैप को इस तरह से डिज़ाइन किया गया है कि वह अपने कंटेनर एलिमेंट, आम तौर पर MapView
या SupportMapFragment
से तय किए गए पूरे इलाके को भर सके. मैप के दिखने और काम करने के कई पहलुओं को, उसके कंटेनर के डाइमेंशन से तय किया जाता है:
- कैमरे के टारगेट में, पैड किए गए हिस्से का बीच का हिस्सा दिखेगा.
- मैप कंट्रोल, मैप के किनारों के हिसाब से दिखाए जाते हैं.
- कानूनी जानकारी, जैसे कि कॉपीराइट स्टेटमेंट या Google का लोगो मैप पर सबसे नीचे दिखता है.
GoogleMap
का इस्तेमाल करके, मैप के किनारों के आस-पास पैडिंग (जगह) जोड़ी जा सकती है.setPadding()
तरीका. मैप पूरे कंटेनर को भरना जारी रखेगा, लेकिन पोज़िशनिंग, मैप जेस्चर, और कैमरे की मूवमेंट को कंट्रोल और कंट्रोल करेगा. ऐसा इस तरह से किया जाएगा, जैसे कि इसे किसी छोटी जगह पर रखा गया हो. इससे ये बदलाव होते हैं:
- एपीआई कॉल या बटन दबाने (जैसे, कंपास, मेरी जगह की जानकारी, ज़ूम बटन) की मदद से कैमरे की मूवमेंट, पैड किए गए हिस्से के हिसाब से होती है.
getCameraPosition
तरीका, पैड किए गए हिस्से का केंद्र दिखाता है.Projection
औरgetVisibleRegion
तरीके, पैड किए गए क्षेत्र की जानकारी दिखाते हैं.- यूज़र इंटरफ़ेस (यूआई) कंट्रोल, कंटेनर के किनारे से तय किए गए पिक्सल की संख्या के हिसाब से ऑफ़सेट होते हैं.
पैडिंग का इस्तेमाल, ऐसे यूज़र इंटरफ़ेस (यूआई) डिज़ाइन करते समय किया जा सकता है जो मैप के किसी हिस्से पर ओवरलैप होते हैं. नीचे दी गई इमेज में, मैप को ऊपर और दाएं किनारों पर पैड किया गया है. मैप के कंट्रोल और कानूनी टेक्स्ट, पैड किए गए हिस्से के किनारों पर दिखेंगे. यह हिस्सा हरे रंग में दिखेगा. वहीं, मैप पूरे कंटेनर में दिखेगा. यह कंटेनर नीले रंग में दिखेगा. इस उदाहरण में, मैप कंट्रोल को धुंधला किए बिना, मैप की दाईं ओर एक मेन्यू फ़्लोट किया जा सकता है.
मैप की कलर स्कीम
सामान्य और इलाके के टाइप वाले मैप के लिए, मैप की कलर स्कीम को डाइनैमिक तौर पर डार्क, लाइट या मौजूदा सिस्टम सेटिंग पर सेट किया जा सकता है. उदाहरण के लिए, दिन के समय या डिवाइस के इनडोर या आउटडोर इस्तेमाल के आधार पर, मैप की कलर स्कीम को गहरे या हल्के रंग में सेट किया जा सकता है.
डिफ़ॉल्ट रूप से, मैप लाइट मोड का इस्तेमाल करता है. सिस्टम की मौजूदा सेटिंग की वैल्यू, UI_NIGHT_MODE_MASK
के लिए डिवाइस की सेटिंग पर आधारित होती है.
Kotlin
mapFragment = SupportMapFragment.newInstance(GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2))
Java
mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2));
GoogleMap.setMapColorScheme()
तरीके का इस्तेमाल करके, कलर स्कीम को टॉगल किया जा सकता है. इससे मौजूदा स्टाइल को गहरे रंग वाले मोड, हल्के रंग वाले मोड पर सेट किया जा सकता है या सिस्टम की सेटिंग का पालन किया जा सकता है.
Kotlin
googleMap.setMapColorScheme(MapColorScheme.DARK) googleMap.setMapColorScheme(MapColorScheme.LIGHT) googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM)
Java
googleMap.setMapColorScheme(MapColorScheme.DARK); googleMap.setMapColorScheme(MapColorScheme.LIGHT); googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM);
बैकग्राउंड का रंग कॉन्फ़िगर करना
डार्क मोड में काम करते समय या मैप व्यू के बीच स्विच करते समय, मैप के डिफ़ॉल्ट बैकग्राउंड कलर को कॉन्फ़िगर करना मददगार हो सकता है. ऐसा करने के लिए, मैप के विकल्प backgroundColor
प्रॉपर्टी को सेट करें.
Kotlin
private val googleMapOptions: GoogleMapOptions = GoogleMapOptions().backgroundColor(Color.argb(255, 255, 0, 0));
Java
private GoogleMapOptions options = new GoogleMapOptions().backgroundColor(Color.argb(255, 255, 0, 0));
बैकग्राउंड का रंग कॉन्फ़िगर करने के लिए, क्लाउड-आधारित मैप स्टाइलिंग का भी इस्तेमाल किया जा सकता है. मैप स्टाइल में सेट किए गए बैकग्राउंड के रंग को, स्थानीय बैकग्राउंड के रंग से ज़्यादा प्राथमिकता दी जाती है. ज़्यादा जानकारी के लिए, क्लाउड पर आधारित मैप स्टाइल के लिए, ऐप्लिकेशन के बैकग्राउंड का रंग बदलना लेख पढ़ें.