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

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

इस विषय में, Android के लिए Maps SDK टूल का इस्तेमाल करके, किसी Android ऐप्लिकेशन में जोड़े गए मैप को कॉन्फ़िगर करने का तरीका बताया गया है.

खास जानकारी

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

  • 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) कंस्ट्रक्टर का इस्तेमाल करें और अपनी सेटिंग में पास करें.

ट्रैफ़िक लेयर सेट अप करना

ट्रैफ़िक लेयर को चालू करके, अपने मैप पर ट्रैफ़िक का डेटा दिखाया जा सकता है. 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);

      

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

MapType तुलना

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) को कॉल करें. ज़्यादा जानकारी के लिए, Maps के साथ इंटरैक्ट करना लेख पढ़ें.
  • 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);