कंट्रोल

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

कंट्रोल के बारे में खास जानकारी

Maps JavaScript API की मदद से दिखाए गए मैप में यूज़र इंटरफ़ेस (यूआई) एलिमेंट होते हैं. इनकी मदद से, उपयोगकर्ता मैप के साथ इंटरैक्ट कर सकते हैं. इन एलिमेंट को यह कहा जाता है: controls का इस्तेमाल करें और आप का इस्तेमाल करें. इसके अलावा, कुछ भी किए बिना, Maps JavaScript API को कंट्रोल करने की सुविधा को मैनेज करने दिया जा सकता है.

नीचे दिए गए मैप में, Maps JavaScript API के ज़रिए दिखाए गए कंट्रोल का डिफ़ॉल्ट सेट दिखाया गया है:

यहां उन सभी कंट्रोल की सूची दी गई है जिनका इस्तेमाल आपके मैप में किया जा सकता है:

  • ज़ूम कंट्रोल में, मैप के ज़ूम लेवल को बदलने के लिए "+" और "-" बटन दिखते हैं. यह कंट्रोल, डिफ़ॉल्ट रूप से इसमें दिखता है: क्लिक करें.
  • कैमरा कंट्रोल में ज़ूम करने, दोनों की सुविधाएं हैं साथ ही, पैन कंट्रोल के बारे में भी बताएंगे. साथ ही, इसे डिफ़ॉल्ट रूप से ज़ूम कंट्रोल के बजाय ज़ूम कंट्रोल में दिखाया जाएगा बीटा चैनल.
  • मैप टाइप कंट्रोल, ड्रॉप-डाउन में उपलब्ध होता है या हॉरिज़ॉन्टल बटन बार स्टाइल, जिससे उपयोगकर्ता मैप का टाइप चुन सकता है (ROADMAP, SATELLITE, HYBRID या TERRAIN). यह कंट्रोल, डिफ़ॉल्ट रूप से सबसे ऊपर बाईं ओर दिखता है मैप के कोने में मौजूद है.
  • स्ट्रीट व्यू कंट्रोल में एक पेगमैन आइकॉन होता है जिसे मैप पर खींचकर Street View चालू किया जा सकता है. यह कंट्रोल, मैप के सबसे नीचे दाईं ओर डिफ़ॉल्ट रूप से दिखता है.
  • घुमाएं कंट्रोल तिरछी इमेजरी वाले मैप के लिए झुकाएँ और घुमाएँ. यह नियंत्रण, मैप के नीचे दाईं ओर डिफ़ॉल्ट रूप से दिखता है. यहां जाएं: 45° तस्वीरों के संग्रह पर जाएं.
  • स्केल कंट्रोल, मैप स्केल एलिमेंट दिखाता है. यह कंट्रोल डिफ़ॉल्ट रूप से बंद रहता है.
  • फ़ुलस्क्रीन कंट्रोल की मदद से, मैप को फ़ुलस्क्रीन मोड में देखना. यह कंट्रोल, डेस्कटॉप और ब्राउज़र पर डिफ़ॉल्ट रूप से चालू होता है मोबाइल डिवाइस पर. ध्यान दें: iOS फ़ुलस्क्रीन की सुविधा पर काम नहीं किया जा सकता. इसलिए, फ़ुलस्क्रीन कंट्रोल जो iOS डिवाइसों पर नहीं दिखती है.
  • कीबोर्ड शॉर्टकट कंट्रोल पर, सूची दिखती है का इस्तेमाल किया जा सकता है.

इन मैप कंट्रोल को न तो ऐक्सेस किया जा सकता है और न ही इनमें बदलाव किया जा सकता है. इसके बजाय, आप मैप के MapOptions फ़ील्ड में बदलाव करें, जो विज़िबिलिटी पर असर डालते हैं और कंट्रोल को दिखाया जा सकता है. मैप को तुरंत लागू करने पर, कंट्रोल के प्रज़ेंटेशन में बदलाव किया जा सकता है. इसके लिए, सही MapOptions का इस्तेमाल करें. इसके अलावा, मैप के विकल्पों में बदलाव करने के लिए, setOptions() को कॉल करके मैप में डाइनैमिक तौर पर बदलाव किया जा सकता है.

ये सभी कंट्रोल, डिफ़ॉल्ट रूप से चालू नहीं होते. डिफ़ॉल्ट यूज़र इंटरफ़ेस (यूआई) के बारे में जानने के लिए (और ऐसे व्यवहार को कैसे संशोधित किया जाए), यह देखें डिफ़ॉल्ट यूज़र इंटरफ़ेस (यूआई) नीचे दिया गया है.

डिफ़ॉल्ट यूज़र इंटरफ़ेस (यूआई)

अगर मैप बहुत छोटा (200x200 पिक्सल) है, तो डिफ़ॉल्ट रूप से सभी कंट्रोल गायब हो जाते हैं. इस व्यवहार को बदला जा सकता है. इसके लिए, कंट्रोल को साफ़ तौर पर दिखने के लिए सेट करें. मैप.

कंट्रोल, सभी मोबाइल डिवाइसों पर एक जैसा ही दिखते हैं और डेस्कटॉप डिवाइस, लेकिन फ़ुलस्क्रीन कंट्रोल को छोड़कर (यह सेटिंग देखें कंट्रोल की सूची में बताया गया है).

इसके अलावा, कीबोर्ड मैनेज करने की सुविधा सभी डिवाइसों पर डिफ़ॉल्ट रूप से चालू रहती है.

डिफ़ॉल्ट यूज़र इंटरफ़ेस (यूआई) को बंद करना

आपके पास एपीआई के डिफ़ॉल्ट यूज़र इंटरफ़ेस (यूआई) बटन को पूरी तरह से बंद करने का विकल्प है. ऐसा करने के लिए, MapOptions ऑब्जेक्ट में मैप की disableDefaultUI प्रॉपर्टी को true पर सेट करें. यह प्रॉपर्टी, Maps JavaScript API के यूज़र इंटरफ़ेस (यूआई) कंट्रोल बटन को बंद कर देती है. हालांकि, इससे मुख्य मैप पर माउस जेस्चर या कीबोर्ड शॉर्टकट पर कोई असर नहीं पड़ता. इन्हें gestureHandling और keyboardShortcuts प्रॉपर्टी से कंट्रोल किया जाता है.

नीचे दिया गया कोड, यूज़र इंटरफ़ेस (यूआई) बटन को बंद करता है:

TypeScript

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 4,
      center: { lat: -33, lng: 151 },
      disableDefaultUI: true,
    }
  );
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 4,
    center: { lat: -33, lng: 151 },
    disableDefaultUI: true,
  });
}

window.initMap = initMap;
उदाहरण देखें

सैंपल आज़माएं

मैप पर कंट्रोल जोड़ें

यूज़र इंटरफ़ेस (यूआई) के व्यवहार या कंट्रोल को हटाकर, जोड़कर या उनमें बदलाव करके, अपने इंटरफ़ेस को पसंद के मुताबिक बनाया जा सकता है. साथ ही, यह पक्का किया जा सकता है कि आने वाले समय में होने वाले अपडेट से इस व्यवहार में कोई बदलाव न हो. अगर आपको सिर्फ़ मौजूदा व्यवहार को जोड़ना या उसमें बदलाव करना है, तो आपको यह पक्का करना होगा कि कंट्रोल को आपके ऐप्लिकेशन में साफ़ तौर पर जोड़ा गया हो.

कुछ कंट्रोल, मैप पर डिफ़ॉल्ट रूप से दिखते हैं और कुछ नहीं जब तक कि आप उनसे खास तौर पर अनुरोध न करें. इस मैप की जानकारी नीचे दिए गए MapOptions ऑब्जेक्ट में दी गई है फ़ील्ड, जिसे आपने दिखाने के लिए true पर सेट किया है या इस पर सेट किया है उन्हें छिपाने के लिए false:

{
  zoomControl: boolean,
  cameraControl: boolean,
  mapTypeControl: boolean,
  scaleControl: boolean,
  streetViewControl: boolean,
  rotateControl: boolean,
  fullscreenControl: boolean
}

अगर मैप का साइज़ 200x200 पिक्सल से छोटा है, तो डिफ़ॉल्ट रूप से सभी कंट्रोल गायब हो जाते हैं. आप नियंत्रण को स्पष्ट रूप से दृश्य. उदाहरण के लिए, नीचे दी गई टेबल से पता चलता है कि ज़ूम कंट्रोल दिखाई दे या न हो, जो मैप के आकार और सेटिंग के अनुसार zoomControl फ़ील्ड:

मैप आकार zoomControl दिख रहा है?
कोई भी false नहीं
कोई भी true हां
200 x 200 पिक्सल undefined हां
< 200x200 पिक्सल undefined नहीं

यहां दिए गए उदाहरण में, 'ज़ूम करें' को छिपाने के लिए मैप सेट किया गया है स्केल कंट्रोल को कंट्रोल और डिसप्ले करने के लिए. ध्यान दें कि हम कम शब्दों में जानकारी देने के लिए, डिफ़ॉल्ट यूज़र इंटरफ़ेस (यूआई) को बंद करता है, ताकि ये बदलाव डिफ़ॉल्ट यूज़र इंटरफ़ेस (यूआई) से अलग हो जाएं व्यवहार.

TypeScript

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 4,
      center: { lat: -33, lng: 151 },
      zoomControl: false,
      scaleControl: true,
    }
  );
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 4,
    center: { lat: -33, lng: 151 },
    zoomControl: false,
    scaleControl: true,
  });
}

window.initMap = initMap;
उदाहरण देखें

सैंपल आज़माएं

नियंत्रण के विकल्प

कई कंट्रोल कॉन्फ़िगर किए जा सकते हैं. इनसे, उनका व्यवहार बदला जा सकता है या उनका रंग-रूप बदल सके. उदाहरण के लिए, मैप टाइप कंट्रोल, हॉरिज़ॉन्टल बार या ड्रॉप-डाउन मेन्यू के तौर पर दिख सकता है.

इन कंट्रोल में बदलाव करने के लिए, कंट्रोल के सही विकल्प में बदलाव किया जाता है फ़ील्ड बनाने के बाद, MapOptions ऑब्जेक्ट के अंदर फ़ील्ड.

उदाहरण के लिए, मैप टाइप कंट्रोल में बदलाव करने के विकल्प, mapTypeControlOptions फ़ील्ड में दिखाए जाते हैं. मैप प्रकार नियंत्रण इसमें दिखाई दे सकता है इनमें से कोई एक style विकल्प:

  • google.maps.MapTypeControlStyle.HORIZONTAL_BAR, कंट्रोल के ऐरे को हॉरिज़ॉन्टल बार में बटन के तौर पर दिखाता है, जैसा कि Google Maps पर दिखाया गया है.
  • google.maps.MapTypeControlStyle.DROPDOWN_MENU दिखाता है कि सिंगल बटन कंट्रोल की मदद से, ड्रॉप-डाउन का इस्तेमाल करके मैप का टाइप चुना जा सकता है मेन्यू.
  • google.maps.MapTypeControlStyle.DEFAULT, स्क्रीन के साइज़ के हिसाब से डिफ़ॉल्ट तरीके से काम करता है. यह तरीका, एपीआई के आने वाले वर्शन में बदल सकता है.

ध्यान दें कि अगर आप किसी भी कंट्रोल विकल्प में बदलाव करते हैं, तो आपको साफ़ तौर पर कंट्रोल और MapOptions की सही वैल्यू सेट करके true तक. उदाहरण के लिए, मैप टाइप कंट्रोल सेट करने के लिए DROPDOWN_MENU शैली दिखाने के लिए, इसके अंदर नीचे दिए गए कोड का इस्तेमाल करें MapOptions ऑब्जेक्ट:

  ...
  mapTypeControl: true,
  mapTypeControlOptions: {
    style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
  }
  ...

नीचे दिए गए उदाहरण में डिफ़ॉल्ट जगह बदलने और अलग-अलग तरह के कंट्रोल.

TypeScript

// You can set control options to change the default position or style of many
// of the map controls.

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 4,
      center: { lat: -33, lng: 151 },
      mapTypeControl: true,
      mapTypeControlOptions: {
        style: google.maps.MapTypeControlStyle.DROPDOWN_MENU,
        mapTypeIds: ["roadmap", "terrain"],
      },
    }
  );
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

// You can set control options to change the default position or style of many
// of the map controls.
function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 4,
    center: { lat: -33, lng: 151 },
    mapTypeControl: true,
    mapTypeControlOptions: {
      style: google.maps.MapTypeControlStyle.DROPDOWN_MENU,
      mapTypeIds: ["roadmap", "terrain"],
    },
  });
}

window.initMap = initMap;
उदाहरण देखें

सैंपल आज़माएं

कंट्रोल, आम तौर पर मैप बनाते समय कॉन्फ़िगर किए जाते हैं. हालांकि, कंट्रोल के प्रज़ेंटेशन को डाइनैमिक तरीके से बदला जा सकता है. इसके लिए Map के setOptions() तरीके को कॉल करेंगे, उसे नए नियंत्रण विकल्प पास कर रही हूँ.

कंट्रोल में बदलाव करें

अपना मैप बनाते समय, किसी कंट्रोल का प्रज़ेंटेशन तय किया जाता है मैप के MapOptions ऑब्जेक्ट में फ़ील्ड के ज़रिए. इन फ़ील्ड के बारे में यहां बताया गया है:

  • zoomControl, ज़ूम कंट्रोल को चालू/बंद करता है. डिफ़ॉल्ट रूप से, यह कंट्रोल दिखता है और मैप के सबसे नीचे दाईं ओर दिखता है. zoomControlOptions फ़ील्ड से, इस कंट्रोल के लिए इस्तेमाल किए जाने वाले ZoomControlOptions के बारे में भी पता चलता है.
  • cameraControl, कैमरा कंट्रोल को चालू/बंद करता है. यह कंट्रोल, बीटा चैनल का इस्तेमाल करने वाले मैप पर डिफ़ॉल्ट रूप से दिखता है. cameraControlOptions फ़ील्ड से यह भी पता चलता है कि इस कंट्रोल के लिए, CameraControlOptions का इस्तेमाल करना है.
  • mapTypeControl, मैप टाइप कंट्रोल को चालू/बंद करता है इससे उपयोगकर्ता, मैप टाइप (जैसे, मैप और सैटलाइट) के बीच टॉगल कर सकता है. डिफ़ॉल्ट रूप से, यह कंट्रोल दिखता है और सबसे ऊपर बाईं ओर दिखता है मैप के कोने में मौजूद है. mapTypeControlOptions फ़ील्ड अतिरिक्त तौर पर MapTypeControlOptions के बारे में बताता है का इस्तेमाल करें.
  • streetViewControl, पेगमैन कंट्रोल को चालू/बंद करता है जिससे उपयोगकर्ता Street View पैनोरमा को चालू कर सकता है. डिफ़ॉल्ट रूप से, यह कंट्रोल दिखता है और यह मैप के सबसे नीचे दाईं ओर दिखता है. streetViewControlOptions फ़ील्ड अतिरिक्त तौर पर StreetViewControlOptions के बारे में बताता है का इस्तेमाल करें.
  • rotateControl, 45° इमेजरी का अभिविन्यास नियंत्रित करने के लिए नियंत्रण को घुमाएं. डिफ़ॉल्ट रूप से, कंट्रोल की मौजूदगी का पता, मौजूदा ज़ूम और जगह पर दिए गए मैप टाइप के लिए, 45° वाली इमेज के मौजूद होने या न होने से चलता है. मैप के rotateControlOptions को सेट करके, कंट्रोल के व्यवहार में बदलाव किया जा सकता है. इससे, इस्तेमाल किए जाने वाले RotateControlOptions की जानकारी मिलती है. अगर 45° वाली कोई इमेज उपलब्ध नहीं है, तो कंट्रोल नहीं दिखेगा.
  • scaleControl, स्केल कंट्रोल को चालू/बंद करता है. इससे मैप का स्केल पता चलता है. डिफ़ॉल्ट रूप से, यह कंट्रोल नहीं दिखता. चालू होने पर, यह हमेशा मैप के सबसे नीचे दाएं कोने में दिखेगा. scaleControlOptions, इस कंट्रोल के लिए इस्तेमाल किए जाने वाले ScaleControlOptions के बारे में भी बताता है.
  • fullscreenControl, खुलने वाले कंट्रोल को चालू/बंद करता है मैप को फ़ुलस्क्रीन मोड में देखना. यह कंट्रोल, डिफ़ॉल्ट रूप से चालू रहता है डेस्कटॉप और Android डिवाइसों पर करते हैं. चालू होने पर, यह कंट्रोल मैप के सबसे ऊपर दाईं ओर दिखता है. fullscreenControlOptions, इस कंट्रोल के लिए इस्तेमाल किए जाने वाले FullscreenControlOptions के बारे में भी बताता है.

ध्यान दें कि शुरुआत में बंद किए गए कंट्रोल के लिए, विकल्प तय किए जा सकते हैं.

स्थिति निर्धारण को नियंत्रित करें

कंट्रोल के ज़्यादातर विकल्पों में position प्रॉपर्टी होती है (ControlPosition टाइप का) जो बताता है कि मैप पर कहां है कंट्रोल लगा सकते हैं. इन कंट्रोल की जगह तय नहीं की गई है. इसके बजाय, एपीआई कंट्रोल को बेहतर तरीके से व्यवस्थित करेगा. इसके लिए, वह उन्हें मैप के मौजूदा एलिमेंट या अन्य कंट्रोल के आस-पास, तय सीमाओं (जैसे कि मैप का साइज़) के हिसाब से फ़्लो करेगा.

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

कंट्रोल की ये पोज़िशन इस्तेमाल की जा सकती हैं:

  • TOP_CENTER से पता चलता है कि कंट्रोल को पर क्लिक करें.
  • TOP_LEFT से पता चलता है कि कंट्रोल को साथ में रखा जाना चाहिए मैप के शीर्ष बाईं ओर, नियंत्रण "फ़्लोइंग" के किसी भी उप-तत्व के साथ को टैप करें.
  • TOP_RIGHT से पता चलता है कि कंट्रोल को साथ में रखा जाना चाहिए नियंत्रण "फ़्लोइंग" के किसी भी उप-तत्व के साथ मैप के शीर्ष दाईं ओर को टैप करें.
  • LEFT_TOP से पता चलता है कि कंट्रोल को साथ में रखा जाना चाहिए मैप के ऊपर बाईं ओर, लेकिन TOP_LEFT एलिमेंट के नीचे.
  • RIGHT_TOP से पता चलता है कि कंट्रोल को साथ में रखा जाना चाहिए मैप के शीर्ष दाईं ओर, लेकिन TOP_RIGHT के नीचे एलिमेंट.
  • LEFT_CENTER से पता चलता है कि कंट्रोल को मैप की बाईं ओर, TOP_LEFT और BOTTOM_LEFT के बीच में रखा जाना चाहिए.
  • RIGHT_CENTER से पता चलता है कि कंट्रोल को मैप की दाईं ओर, TOP_RIGHT और BOTTOM_RIGHT के बीच के बीच में रखा जाना चाहिए.
  • LEFT_BOTTOM से पता चलता है कि कंट्रोल को मैप के सबसे नीचे बाईं ओर, लेकिन किसी BOTTOM_LEFT के ऊपर एलिमेंट.
  • RIGHT_BOTTOM से पता चलता है कि कंट्रोल को मैप के सबसे नीचे दाईं ओर, लेकिन किसी भी BOTTOM_RIGHT एलिमेंट के ऊपर रखा जाना चाहिए.
  • BOTTOM_CENTER से पता चलता है कि कंट्रोल को मैप के सबसे नीचे, बीच में रखा जाना चाहिए.
  • BOTTOM_LEFT से पता चलता है कि कंट्रोल को मैप पर सबसे नीचे बाईं ओर, कंट्रोल के किसी भी सब-एलिमेंट के साथ "फ़्लोइंग" कॉपी करें.
  • BOTTOM_RIGHT से पता चलता है कि कंट्रोल को मैप के सबसे नीचे दाईं ओर रखा जाना चाहिए. साथ ही, कंट्रोल के किसी भी सब-एलिमेंट को सबसे नीचे बीच में "फ़्लो" किया जाना चाहिए.

ध्यान दें कि ये पोज़िशन, यूज़र इंटरफ़ेस (यूआई) के उन एलिमेंट की पोज़िशन से मेल खा सकती हैं जिनके प्लेसमेंट में बदलाव नहीं किया जा सकता. जैसे, कॉपीराइट और Google का लोगो. ऐसे मामलों में, कंट्रोल हर पोज़िशन के लिए बताए गए लॉजिक के हिसाब से फ़्लो करेंगे और अपनी बताई गई पोज़िशन के आस-पास दिखेंगे.

नीचे दिए गए उदाहरण में, एक आसान मैप दिखाया गया है. इसमें सभी कंट्रोल चालू हैं अलग-अलग पोज़िशन में.

TypeScript

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 12,
      center: { lat: -28.643387, lng: 153.612224 },
      mapTypeControl: true,
      mapTypeControlOptions: {
        style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
        position: google.maps.ControlPosition.TOP_CENTER,
      },
      zoomControl: true,
      zoomControlOptions: {
        position: google.maps.ControlPosition.LEFT_CENTER,
      },
      scaleControl: true,
      streetViewControl: true,
      streetViewControlOptions: {
        position: google.maps.ControlPosition.LEFT_TOP,
      },
      fullscreenControl: true,
    }
  );
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 12,
    center: { lat: -28.643387, lng: 153.612224 },
    mapTypeControl: true,
    mapTypeControlOptions: {
      style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
      position: google.maps.ControlPosition.TOP_CENTER,
    },
    zoomControl: true,
    zoomControlOptions: {
      position: google.maps.ControlPosition.LEFT_CENTER,
    },
    scaleControl: true,
    streetViewControl: true,
    streetViewControlOptions: {
      position: google.maps.ControlPosition.LEFT_TOP,
    },
    fullscreenControl: true,
  });
}

window.initMap = initMap;
उदाहरण देखें

सैंपल आज़माएं

कस्टम कंट्रोल

मौजूदा एपीआई कंट्रोल के स्टाइल और पोज़िशन में बदलाव करने के साथ-साथ, उपयोगकर्ता के साथ इंटरैक्शन को मैनेज करने के लिए, आपके पास खुद के कंट्रोल बनाने का विकल्प भी होता है. कंट्रोल, स्थिर विजेट होते हैं, जो मैप के ऊपर एक तय जगह पर फ़्लोट करते हैं. ये ओवरले से अलग होते हैं, जो मैप के साथ-साथ चलते हैं. ज़्यादा देखें बुनियादी तौर पर, कंट्रोल एक <div> एलिमेंट होता है, जो मैप पर बिलकुल सटीक जगह दिखाता हो, उपयोगकर्ता को कोई यूज़र इंटरफ़ेस (यूआई) दिखाता हो और उपयोगकर्ता या मैप के साथ इंटरैक्शन को हैंडल करता है. आम तौर पर, यह किसी इवेंट के ज़रिए होता है हैंडलर.

अपनी पसंद के मुताबिक कंट्रोल बनाने के लिए, कुछ नियमों का पालन करना ज़रूरी है. हालांकि, ये दिशा-निर्देश सबसे सही तरीके के तौर पर काम कर सकते हैं:

  • कंट्रोल एलिमेंट को दिखाने के लिए, सही सीएसएस तय करें.
  • इनके लिए इवेंट हैंडलर के ज़रिए उपयोगकर्ता या मैप के साथ इंटरैक्शन मैनेज करना प्रॉपर्टी में हुए बदलावों या उपयोगकर्ता इवेंट को मैप करने की सुविधा देता है (उदाहरण के लिए, 'click' इवेंट).
  • कंट्रोल को होल्ड करने के लिए <div> एलिमेंट बनाएं और इस एलिमेंट को Map की controls प्रॉपर्टी में जोड़ें.

इन सभी समस्याओं के बारे में यहां बताया गया है.

ड्रॉइंग के लिए पसंद के मुताबिक बनाए गए कंट्रोल

कंट्रोल को अपने हिसाब से ड्रॉ किया जा सकता है. आम तौर पर, हमारा सुझाव है कि आप अपने सभी कंट्रोल प्रज़ेंटेशन को एक ही <div> एलिमेंट में रखें, ताकि आप अपने कंट्रोल को एक यूनिट के तौर पर मैनेज कर सकें. हम इस डिज़ाइन पैटर्न का इस्तेमाल, नीचे दिए गए सैंपल में करेंगे.

आकर्षक कंट्रोल डिज़ाइन करने के लिए, सीएसएस और डीओएम स्ट्रक्चर के बारे में कुछ जानकारी होनी चाहिए. यहां दिया गया कोड, बटन एलिमेंट बनाने के लिए एक फ़ंक्शन दिखाता है. यह फ़ंक्शन, मैप को शिकागो के बीच में दिखाने के लिए पैन करता है.

function createCenterControl(map) {
  const controlButton = document.createElement("button");

  // Set CSS for the control.
  controlButton.style.backgroundColor = "#fff";
  controlButton.style.border = "2px solid #fff";
  controlButton.style.borderRadius = "3px";
  controlButton.style.boxShadow = "0 2px 6px rgba(0,0,0,.3)";
  controlButton.style.color = "rgb(25,25,25)";
  controlButton.style.cursor = "pointer";
  controlButton.style.fontFamily = "Roboto,Arial,sans-serif";
  controlButton.style.fontSize = "16px";
  controlButton.style.lineHeight = "38px";
  controlButton.style.margin = "8px 0 22px";
  controlButton.style.padding = "0 5px";
  controlButton.style.textAlign = "center";

  controlButton.textContent = "Center Map";
  controlButton.title = "Click to recenter the map";
  controlButton.type = "button";

  // Setup the click event listeners: simply set the map to Chicago.
  controlButton.addEventListener("click", () => {
    map.setCenter(chicago);
  });

  return controlButton;
}

कस्टम कंट्रोल से इवेंट मैनेज करना

किसी कंट्रोल को कारगर बनाने के लिए, उसे कुछ न कुछ करना ही होता है. यह कंट्रोल क्या करता है, यह आपके ऊपर है. कंट्रोल, उपयोगकर्ता के इनपुट का जवाब दे सकता है या जवाब दे सकता है Map की स्थिति में बदलाव होने पर.

उपयोगकर्ता के इनपुट का जवाब देने के लिए, addEventListener() का इस्तेमाल करें. यह काम करने वाले डीओएम इवेंट मैनेज करता है. यहां दिया गया कोड स्निपेट, ब्राउज़र के 'click' इवेंट के लिए एक लिसनर जोड़ता है. ध्यान दें कि यह इवेंट, मैप से नहीं, बल्कि डीओएम से मिलता है.

// Setup the click event listener: set the map to center on Chicago
var chicago = {lat: 41.850, lng: -87.650};

controlButton.addEventListener('click', () => {
  map.setCenter(chicago);
});

कस्टम कंट्रोल को ऐक्सेस करने की सुविधा जोड़ना

यह पक्का करने के लिए कि कंट्रोल को कीबोर्ड इवेंट मिलें और स्क्रीन रीडर को सही तरीके से दिखें:

  • बटन, फ़ॉर्म एलिमेंट, और लेबल के लिए हमेशा नेटिव एचटीएमएल एलिमेंट का इस्तेमाल करें. केवल DIV का उपयोग करें नेटिव कंट्रोल को होल्ड करने के लिए एलिमेंट के तौर पर; किसी DIV को इंटरैक्टिव यूज़र इंटरफ़ेस (यूआई) के रूप में फिर से इस्तेमाल न करें एलिमेंट.
  • यूज़र इंटरफ़ेस (यूआई) एलिमेंट के बारे में जानकारी देने के लिए, label एलिमेंट, title एट्रिब्यूट या aria-label एट्रिब्यूट का इस्तेमाल करें.

स्थिति निर्धारण कस्टम नियंत्रण

कस्टम कंट्रोल, मैप पर सही जगह पर दिखते हैं Map ऑब्जेक्ट के controls में पोज़िशन प्रॉपर्टी. इस प्रॉपर्टी में, google.maps.ControlPositions का एक कलेक्शन होता है. मैप में कस्टम कंट्रोल जोड़ने के लिए, ControlPosition में Node (आम तौर पर <div>) जोड़ें. (इनकी जानकारी के लिए स्थिति के लिए, स्थिति-निर्धारण नियंत्रण देखें above.)

हर ControlPosition, उस पोज़िशन में दिखाए गए कंट्रोल का MVCArray स्टोर करता है. इसलिए, जब कंट्रोल जोड़े जाते हैं या किसी पोज़िशन से हटाए जाते हैं, तो एपीआई उन कंट्रोल को अपडेट कर देगा.

एपीआई, हर पोज़िशन पर कंट्रोल को index प्रॉपर्टी; कम इंडेक्स वाले कंट्रोल को पहले रखा जाता है. उदाहरण के लिए, BOTTOM_RIGHT पोज़िशन पर मौजूद दो कस्टम कंट्रोल रिपोर्ट को इस इंडेक्स ऑर्डर के हिसाब से दिखाया जाता है. इसमें कम इंडेक्स वैल्यू प्राथमिकता. डिफ़ॉल्ट रूप से, सभी कस्टम नियंत्रण, प्लेसमेंट के बाद रखे जाते हैं कोई भी एपीआई डिफ़ॉल्ट कंट्रोल. आप सेट करके इस व्यवहार को बदल सकते हैं: कंट्रोल की index प्रॉपर्टी को नेगेटिव वैल्यू के तौर पर सेट करें. कस्टम कंट्रोल लोगो की बाईं या दाईं ओर नहीं रखा जा सकता कॉपीराइट.

यह कोड एक नया कस्टम कंट्रोल बनाता है (इसका कंस्ट्रक्टर दिखाया जाता है) और इसे मैप पर TOP_RIGHT पोज़िशन में जोड़ देता है.

var map = new google.maps.Map(document.getElementById('map'), mapOptions);

// Create a DIV to attach the control UI to the Map.
const centerControlDiv = document.createElement("div");

// Create the control. This code calls a function that
// creates a new instance of a button control.
const centerControl = createCenterControl(map);

// Append the control to the DIV.
centerControlDiv.appendChild(centerControl);

// Add the control to the map at a designated control position
// by pushing it on the position's array. This code will
// implicitly add the control to the DOM, through the Map
// object. You should not attach the control manually.
map.controls[google.maps.ControlPosition.TOP_CENTER].push(centerControlDiv);

कस्टम कंट्रोल का उदाहरण

यहां दिया गया कंट्रोल आसान है (हालांकि, यह खास तौर पर काम का नहीं है). इसमें ऊपर दिखाए गए पैटर्न को जोड़ा गया है. यह कंट्रोल, DOM का जवाब देता है मैप को किसी डिफ़ॉल्ट जगह पर रखकर 'click' इवेंट स्थान:

TypeScript

let map: google.maps.Map;

const chicago = { lat: 41.85, lng: -87.65 };

/**
 * Creates a control that recenters the map on Chicago.
 */
 function createCenterControl(map) {
  const controlButton = document.createElement('button');

  // Set CSS for the control.
  controlButton.style.backgroundColor = '#fff';
  controlButton.style.border = '2px solid #fff';
  controlButton.style.borderRadius = '3px';
  controlButton.style.boxShadow = '0 2px 6px rgba(0,0,0,.3)';
  controlButton.style.color = 'rgb(25,25,25)';
  controlButton.style.cursor = 'pointer';
  controlButton.style.fontFamily = 'Roboto,Arial,sans-serif';
  controlButton.style.fontSize = '16px';
  controlButton.style.lineHeight = '38px';
  controlButton.style.margin = '8px 0 22px';
  controlButton.style.padding = '0 5px';
  controlButton.style.textAlign = 'center';

  controlButton.textContent = 'Center Map';
  controlButton.title = 'Click to recenter the map';
  controlButton.type = 'button';

  // Setup the click event listeners: simply set the map to Chicago.
  controlButton.addEventListener('click', () => {
    map.setCenter(chicago);
  });

  return controlButton;
}

function initMap() {
  map = new google.maps.Map(document.getElementById('map') as HTMLElement, {
    zoom: 12,
    center: chicago,
  });

  // Create the DIV to hold the control.
  const centerControlDiv = document.createElement('div');
  // Create the control.
  const centerControl = createCenterControl(map);
  // Append the control to the DIV.
  centerControlDiv.appendChild(centerControl);

  map.controls[google.maps.ControlPosition.TOP_CENTER].push(centerControlDiv);
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

let map;
const chicago = { lat: 41.85, lng: -87.65 };

/**
 * Creates a control that recenters the map on Chicago.
 */
function createCenterControl(map) {
  const controlButton = document.createElement("button");

  // Set CSS for the control.
  controlButton.style.backgroundColor = "#fff";
  controlButton.style.border = "2px solid #fff";
  controlButton.style.borderRadius = "3px";
  controlButton.style.boxShadow = "0 2px 6px rgba(0,0,0,.3)";
  controlButton.style.color = "rgb(25,25,25)";
  controlButton.style.cursor = "pointer";
  controlButton.style.fontFamily = "Roboto,Arial,sans-serif";
  controlButton.style.fontSize = "16px";
  controlButton.style.lineHeight = "38px";
  controlButton.style.margin = "8px 0 22px";
  controlButton.style.padding = "0 5px";
  controlButton.style.textAlign = "center";
  controlButton.textContent = "Center Map";
  controlButton.title = "Click to recenter the map";
  controlButton.type = "button";
  // Setup the click event listeners: simply set the map to Chicago.
  controlButton.addEventListener("click", () => {
    map.setCenter(chicago);
  });
  return controlButton;
}

function initMap() {
  map = new google.maps.Map(document.getElementById("map"), {
    zoom: 12,
    center: chicago,
  });

  // Create the DIV to hold the control.
  const centerControlDiv = document.createElement("div");
  // Create the control.
  const centerControl = createCenterControl(map);

  // Append the control to the DIV.
  centerControlDiv.appendChild(centerControl);
  map.controls[google.maps.ControlPosition.TOP_CENTER].push(centerControlDiv);
}

window.initMap = initMap;
उदाहरण देखें

सैंपल आज़माएं

कंट्रोल में स्टेटस जोड़ा जा रहा है

कंट्रोल में स्टेटस भी सेव किया जा सकता है. यह उदाहरण, पहले दिए गए उदाहरण से मिलता-जुलता है. हालांकि, कंट्रोल में एक और "होम सेट करें" बटन है. यह बटन, कंट्रोल को होम की नई जगह दिखाने के लिए सेट करता है. हम ऐसा करने के लिए, कंट्रोल में एक home_ प्रॉपर्टी बनाते हैं, ताकि इस स्टेटस को सेव किया जा सके और उस स्टेटस के लिए गेट्टर और सेटर उपलब्ध कराए जा सकें.

TypeScript

let map: google.maps.Map;

const chicago: google.maps.LatLngLiteral = { lat: 41.85, lng: -87.65 };

/**
 * The CenterControl adds a control to the map that recenters the map on
 * Chicago.
 */
class CenterControl {
  private map_: google.maps.Map;
  private center_: google.maps.LatLng;
  constructor(
    controlDiv: HTMLElement,
    map: google.maps.Map,
    center: google.maps.LatLngLiteral
  ) {
    this.map_ = map;
    // Set the center property upon construction
    this.center_ = new google.maps.LatLng(center);
    controlDiv.style.clear = "both";

    // Set CSS for the control border
    const goCenterUI = document.createElement("button");

    goCenterUI.id = "goCenterUI";
    goCenterUI.title = "Click to recenter the map";
    controlDiv.appendChild(goCenterUI);

    // Set CSS for the control interior
    const goCenterText = document.createElement("div");

    goCenterText.id = "goCenterText";
    goCenterText.innerHTML = "Center Map";
    goCenterUI.appendChild(goCenterText);

    // Set CSS for the setCenter control border
    const setCenterUI = document.createElement("button");

    setCenterUI.id = "setCenterUI";
    setCenterUI.title = "Click to change the center of the map";
    controlDiv.appendChild(setCenterUI);

    // Set CSS for the control interior
    const setCenterText = document.createElement("div");

    setCenterText.id = "setCenterText";
    setCenterText.innerHTML = "Set Center";
    setCenterUI.appendChild(setCenterText);

    // Set up the click event listener for 'Center Map': Set the center of
    // the map
    // to the current center of the control.
    goCenterUI.addEventListener("click", () => {
      const currentCenter = this.center_;

      this.map_.setCenter(currentCenter);
    });

    // Set up the click event listener for 'Set Center': Set the center of
    // the control to the current center of the map.
    setCenterUI.addEventListener("click", () => {
      const newCenter = this.map_.getCenter()!;

      if (newCenter) {
        this.center_ = newCenter;
      }
    });
  }
}

function initMap(): void {
  map = new google.maps.Map(document.getElementById("map") as HTMLElement, {
    zoom: 12,
    center: chicago,
  });

  // Create the DIV to hold the control and call the CenterControl()
  // constructor passing in this DIV.
  const centerControlDiv = document.createElement("div");
  const control = new CenterControl(centerControlDiv, map, chicago);

  // @ts-ignore
  centerControlDiv.index = 1;
  centerControlDiv.style.paddingTop = "10px";
  map.controls[google.maps.ControlPosition.TOP_CENTER].push(centerControlDiv);
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

let map;
const chicago = { lat: 41.85, lng: -87.65 };

/**
 * The CenterControl adds a control to the map that recenters the map on
 * Chicago.
 */
class CenterControl {
  map_;
  center_;
  constructor(controlDiv, map, center) {
    this.map_ = map;
    // Set the center property upon construction
    this.center_ = new google.maps.LatLng(center);
    controlDiv.style.clear = "both";

    // Set CSS for the control border
    const goCenterUI = document.createElement("button");

    goCenterUI.id = "goCenterUI";
    goCenterUI.title = "Click to recenter the map";
    controlDiv.appendChild(goCenterUI);

    // Set CSS for the control interior
    const goCenterText = document.createElement("div");

    goCenterText.id = "goCenterText";
    goCenterText.innerHTML = "Center Map";
    goCenterUI.appendChild(goCenterText);

    // Set CSS for the setCenter control border
    const setCenterUI = document.createElement("button");

    setCenterUI.id = "setCenterUI";
    setCenterUI.title = "Click to change the center of the map";
    controlDiv.appendChild(setCenterUI);

    // Set CSS for the control interior
    const setCenterText = document.createElement("div");

    setCenterText.id = "setCenterText";
    setCenterText.innerHTML = "Set Center";
    setCenterUI.appendChild(setCenterText);
    // Set up the click event listener for 'Center Map': Set the center of
    // the map
    // to the current center of the control.
    goCenterUI.addEventListener("click", () => {
      const currentCenter = this.center_;

      this.map_.setCenter(currentCenter);
    });
    // Set up the click event listener for 'Set Center': Set the center of
    // the control to the current center of the map.
    setCenterUI.addEventListener("click", () => {
      const newCenter = this.map_.getCenter();

      if (newCenter) {
        this.center_ = newCenter;
      }
    });
  }
}

function initMap() {
  map = new google.maps.Map(document.getElementById("map"), {
    zoom: 12,
    center: chicago,
  });

  // Create the DIV to hold the control and call the CenterControl()
  // constructor passing in this DIV.
  const centerControlDiv = document.createElement("div");
  const control = new CenterControl(centerControlDiv, map, chicago);

  // @ts-ignore
  centerControlDiv.index = 1;
  centerControlDiv.style.paddingTop = "10px";
  map.controls[google.maps.ControlPosition.TOP_CENTER].push(centerControlDiv);
}

window.initMap = initMap;
उदाहरण देखें

सैंपल आज़माएं