एक मैप कॉन्फ़िगर करें

प्लैटफ़ॉर्म चुनें: Android iOS

इस विषय में, 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 बनाने के लिए, यह तरीका अपनाएं:

KotlinJava
val options = GoogleMapOptions()

      
GoogleMapOptions options = new GoogleMapOptions();

      

इसके बाद, इसे इस तरह कॉन्फ़िगर करें:

KotlinJava
options.mapType(GoogleMap.MAP_TYPE_SATELLITE)
    .compassEnabled(false)
    .rotateGesturesEnabled(false)
    .tiltGesturesEnabled(false)

      
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 तरीका कॉल करें. उदाहरण के लिए, उपग्रह मैप दिखाने के लिए:

KotlinJava
// Sets the map type to be "hybrid"
map.mapType = GoogleMap.MAP_TYPE_HYBRID

      
// Sets the map type to be "hybrid"
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);

      

इस इमेज में, सामान्य, हाइब्रिड, और इलाके के हिसाब से बने नक्शे के टाइप की तुलना की गई है:

MapType की तुलना

3D बिल्डिंग सेट अप करना

कई शहरों को करीब से देखने पर, इमारतों को 3D में देखा जा सकता है. जैसे, कनाडा के वैंकूवर की यह इमारत. 3D बिल्डिंग की सुविधा को बंद करने के लिए, GoogleMap.setBuildingsEnabled(false) को बोलें.

कनाडा के वैंकूवर का मैप

इनडोर मैप की सेटिंग सेट अप करना

ज़ूम इन करने पर, मैप में इनडोर जगहों के फ़्लोर प्लान दिखते हैं. जैसे, हवाई अड्डे, शॉपिंग मॉल, बड़े रीटेल स्टोर, और बस, मेट्रो वगैरह के स्टेशन. इन फ़्लोर प्लान को इनडोर मैप कहा जाता है. ये 'सामान्य' और 'सैटलाइट' मैप टाइप (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 के लिए डिवाइस की सेटिंग पर आधारित होती है.

KotlinJava
mapFragment = SupportMapFragment.newInstance(GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2))
mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2));

GoogleMap.setMapColorScheme() के तरीके का इस्तेमाल करके, कलर स्कीम को टॉगल किया जा सकता है. इससे, मौजूदा स्टाइल को गहरे रंग वाले मोड, हल्के रंग वाले मोड या सिस्टम सेटिंग पर सेट किया जा सकता है.

KotlinJava
googleMap.setMapColorScheme(MapColorScheme.DARK)
googleMap.setMapColorScheme(MapColorScheme.LIGHT)
googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM)
googleMap.setMapColorScheme(MapColorScheme.DARK);
googleMap.setMapColorScheme(MapColorScheme.LIGHT);
googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM);

बैकग्राउंड का रंग कॉन्फ़िगर करना

डार्क मोड में काम करते समय या मैप व्यू के बीच स्विच करते समय, मैप के डिफ़ॉल्ट बैकग्राउंड कलर को कॉन्फ़िगर करना मददगार हो सकता है. ऐसा करने के लिए, मैप के विकल्प backgroundColor प्रॉपर्टी को सेट करें.

KotlinJava
private val googleMapOptions: GoogleMapOptions =
    GoogleMapOptions().backgroundColor(Color.argb(255, 255, 0, 0));
private GoogleMapOptions options = new GoogleMapOptions().backgroundColor(Color.argb(255, 255, 0, 0));

बैकग्राउंड का रंग कॉन्फ़िगर करने के लिए, क्लाउड पर मैप की स्टाइलिंग की सुविधाओं का भी इस्तेमाल किया जा सकता है. मैप स्टाइल में सेट किए गए बैकग्राउंड के रंग को, स्थानीय बैकग्राउंड के रंग से ज़्यादा प्राथमिकता दी जाती है. ज़्यादा जानकारी के लिए, क्लाउड पर आधारित मैप स्टाइल के लिए, ऐप्लिकेशन के बैकग्राउंड का रंग बदलना लेख पढ़ें.