Maps JavaScript API, मैप को दो अलग-अलग तरीकों से लागू करने की सुविधा देता है: रेस्टर और वेक्टर. रेस्टर मैप, मैप को पिक्सल पर आधारित रेस्टर इमेज टाइल के ग्रिड के तौर पर लोड करता है. ये टाइल, Google Maps Platform के सर्वर साइड से जनरेट होती हैं और फिर आपके वेब ऐप्लिकेशन पर भेजी जाती हैं. वेक्टर मैप, वेक्टर पर आधारित टाइल से बना होता है. ये टाइल, क्लाइंट-साइड पर लोड होने के समय WebGL का इस्तेमाल करके बनाई जाती हैं. WebGL एक वेब टेक्नोलॉजी है, जिसकी मदद से ब्राउज़र, उपयोगकर्ता के डिवाइस पर मौजूद GPU को ऐक्सेस करके 2D और 3D ग्राफ़िक रेंडर कर सकता है.
वेक्टर मैप वही Google मैप है जिसका इस्तेमाल आपके उपयोगकर्ता करते हैं. यह डिफ़ॉल्ट रेस्टर टाइल मैप की तुलना में कई फ़ायदे देता है. इनमें, वेक्टर पर आधारित इमेज की बेहतर क्वालिटी और ज़ूम लेवल को कम करके 3D इमेज में इमारतें देखने की सुविधा शामिल है. वेक्टर मैप में ये सुविधाएं काम करती हैं:
- प्रोग्राम के हिसाब से झुकाव और हेडिंग कंट्रोल
- बेहतर कैमरा कंट्रोल
- ज़ूम करने के लिए, फ़्रैक्शनल ज़ूम की सुविधा
div
एलिमेंट और JavaScript का इस्तेमाल करके लोड किए गए मैप के लिए, डिफ़ॉल्ट रेंडरिंग टाइपgoogle.maps.RenderingType.RASTER
होता है.gmp-map
एलिमेंट का इस्तेमाल करके लोड किए गए मैप के लिए, डिफ़ॉल्ट रेंडरिंग टाइपgoogle.maps.RenderingType.VECTOR
होता है. इसमें, टिल्ट और हेडिंग कंट्रोल चालू होता है.
वेक्टर मैप का इस्तेमाल शुरू करना
झुकाना और घुमाना
वेक्टर मैप पर झुकाव और घुमाव (हेडिंग) सेट किया जा सकता है. इसके लिए, मैप को शुरू करते समय heading
और tilt
प्रॉपर्टी शामिल करें. इसके अलावा, मैप पर setTilt
और setHeading
तरीकों को कॉल करें. नीचे दिए गए उदाहरण में, मैप में कुछ बटन जोड़े गए हैं. इनसे, प्रोग्राम के हिसाब से झुकाव और हेडिंग को 20 डिग्री के हिसाब से अडजस्ट किया जा सकता है.
TypeScript
function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { center: { lat: 37.7893719, lng: -122.3942, }, zoom: 16, heading: 320, tilt: 47.5, mapId: "90f87356969d889c", } ); const buttons: [string, string, number, google.maps.ControlPosition][] = [ ["Rotate Left", "rotate", 20, google.maps.ControlPosition.LEFT_CENTER], ["Rotate Right", "rotate", -20, google.maps.ControlPosition.RIGHT_CENTER], ["Tilt Down", "tilt", 20, google.maps.ControlPosition.TOP_CENTER], ["Tilt Up", "tilt", -20, google.maps.ControlPosition.BOTTOM_CENTER], ]; buttons.forEach(([text, mode, amount, position]) => { const controlDiv = document.createElement("div"); const controlUI = document.createElement("button"); controlUI.classList.add("ui-button"); controlUI.innerText = `${text}`; controlUI.addEventListener("click", () => { adjustMap(mode, amount); }); controlDiv.appendChild(controlUI); map.controls[position].push(controlDiv); }); const adjustMap = function (mode: string, amount: number) { switch (mode) { case "tilt": map.setTilt(map.getTilt()! + amount); break; case "rotate": map.setHeading(map.getHeading()! + amount); break; default: break; } }; } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const map = new google.maps.Map(document.getElementById("map"), { center: { lat: 37.7893719, lng: -122.3942, }, zoom: 16, heading: 320, tilt: 47.5, mapId: "90f87356969d889c", }); const buttons = [ ["Rotate Left", "rotate", 20, google.maps.ControlPosition.LEFT_CENTER], ["Rotate Right", "rotate", -20, google.maps.ControlPosition.RIGHT_CENTER], ["Tilt Down", "tilt", 20, google.maps.ControlPosition.TOP_CENTER], ["Tilt Up", "tilt", -20, google.maps.ControlPosition.BOTTOM_CENTER], ]; buttons.forEach(([text, mode, amount, position]) => { const controlDiv = document.createElement("div"); const controlUI = document.createElement("button"); controlUI.classList.add("ui-button"); controlUI.innerText = `${text}`; controlUI.addEventListener("click", () => { adjustMap(mode, amount); }); controlDiv.appendChild(controlUI); map.controls[position].push(controlDiv); }); const adjustMap = function (mode, amount) { switch (mode) { case "tilt": map.setTilt(map.getTilt() + amount); break; case "rotate": map.setHeading(map.getHeading() + amount); break; default: break; } }; } window.initMap = initMap;
सीएसएस
/* * Always set the map height explicitly to define the size of the div element * that contains the map. */ #map { height: 100%; } /* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; } .ui-button { background-color: #fff; border: 0; border-radius: 2px; box-shadow: 0 1px 4px -1px rgba(0, 0, 0, 0.3); margin: 10px; padding: 0 0.5em; font: 400 18px Roboto, Arial, sans-serif; overflow: hidden; height: 40px; cursor: pointer; } .ui-button:hover { background: rgb(235, 235, 235); }
एचटीएमएल
<html> <head> <title>Tilt and Rotation</title> <link rel="stylesheet" type="text/css" href="./style.css" /> <script type="module" src="./index.js"></script> </head> <body> <div id="map"></div> <!-- The `defer` attribute causes the script to execute after the full HTML document has been parsed. For non-blocking uses, avoiding race conditions, and consistent behavior across browsers, consider loading using Promises. See https://developers.google.com/maps/documentation/javascript/load-maps-js-api for more information. --> <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg&callback=initMap&v=weekly" defer ></script> </body> </html>
सैंपल आज़माएं
माउस और कीबोर्ड के जेस्चर का इस्तेमाल करना
अगर टिल्ट और रोटेशन (हेडिंग) के लिए उपयोगकर्ता इंटरैक्शन की सुविधा चालू की गई है (प्रोग्राम के ज़रिए या Google Cloud Console में), तो उपयोगकर्ता माउस और कीबोर्ड का इस्तेमाल करके टिल्ट और रोटेशन में बदलाव कर सकते हैं:
- माउस का इस्तेमाल करके, Shift बटन को दबाकर रखें. इसके बाद, झुकाव में बदलाव करने के लिए माउस को ऊपर और नीचे की ओर खींचें और छोड़ें. हेडिंग में बदलाव करने के लिए, माउस को दाएं और बाएं की ओर खींचें और छोड़ें.
- कीबोर्ड का इस्तेमाल करके, Shift बटन को दबाकर रखें. इसके बाद, झुकाव में बदलाव करने के लिए ऊपर और नीचे वाले ऐरो बटन का इस्तेमाल करें. साथ ही, हेडिंग में बदलाव करने के लिए, दाएं और बाएं ऐरो बटन का इस्तेमाल करें.
प्रोग्राम के हिसाब से झुकाव और हेडिंग में बदलाव करना
वेक्टर मैप पर झुकाव और दिशा को प्रोग्राम के हिसाब से अडजस्ट करने के लिए, setTilt()
और setHeading()
तरीकों का इस्तेमाल करें. हेडिंग से पता चलता है कि कैमरा किस दिशा में है. यह दिशा, उत्तर से शुरू होकर घड़ी की सुई के घूमने की दिशा में डिग्री में बताई जाती है. इसलिए, map.setHeading(90)
का इस्तेमाल करके मैप को घुमाया जा सकता है, ताकि पूर्व की ओर वाला हिस्सा ऊपर दिखे. झुकाव के कोण को ज़ेनिट से मेज़र किया जाता है, इसलिए map.setTilt(0)
सीधे नीचे की ओर देख रहा है, जबकि map.setTilt(45)
से झुकाव वाला व्यू दिखेगा.
- मैप के झुकाव का कोण सेट करने के लिए,
setTilt()
को कॉल करें. मौजूदा झुकाव की वैल्यू पाने के लिए,getTilt()
का इस्तेमाल करें. - मैप का हेडिंग सेट करने के लिए,
setHeading()
को कॉल करें. मौजूदा हेडिंग की वैल्यू पाने के लिए,getHeading()
का इस्तेमाल करें.
झुकाव और हेडिंग को बनाए रखते हुए, मैप के बीच में मौजूद जगह को बदलने के लिए,
map.setCenter()
या map.panBy()
का इस्तेमाल करें.
ध्यान दें कि इस्तेमाल किए जा सकने वाले ऐंगल की रेंज, ज़ूम के मौजूदा लेवल के हिसाब से अलग-अलग होती है. इस सीमा से बाहर की वैल्यू को, फ़िलहाल अनुमति वाली सीमा में बदल दिया जाएगा.
हेडिंग, झुकाव, सेंटर, और ज़ूम को प्रोग्राम के हिसाब से बदलने के लिए, moveCamera
तरीके का भी इस्तेमाल किया जा सकता है. ज़्यादा जानें.
अन्य तरीकों पर असर
जब मैप पर झुकाव या घुमाव लागू किया जाता है, तो Maps JavaScript API के अन्य तरीकों के व्यवहार पर असर पड़ता है:
map.getBounds()
हमेशा सबसे छोटा बाउंडिंग बॉक्स दिखाता है, जिसमें दिखने वाला क्षेत्र शामिल होता है. जब टिल्ट लागू होता है, तो दिखाए गए बॉर्डर, मैप के व्यूपोर्ट के दिखने वाले क्षेत्र से बड़े क्षेत्र को दिखा सकते हैं.map.fitBounds()
, सीमाओं को फ़िट करने से पहले, झुकाव और हेडिंग को शून्य पर रीसेट कर देगा.map.panToBounds()
, पैन करने से पहले झुकाव और हेडिंग को शून्य पर रीसेट कर देगा.map.setTilt()
में कोई भी वैल्यू डाली जा सकती है. हालांकि, मैप के मौजूदा ज़ूम लेवल के आधार पर, ज़्यादा से ज़्यादा झुकाव पर पाबंदी होती है.map.setHeading()
किसी भी वैल्यू को स्वीकार करता है और उसे [0, 360] की रेंज में फ़िट करने के लिए बदल देगा.
कैमरे को कंट्रोल करना
कैमरे की किसी भी प्रॉपर्टी के कॉम्बिनेशन को एक साथ अपडेट करने के लिए, map.moveCamera()
फ़ंक्शन का इस्तेमाल करें. map.moveCamera()
एक पैरामीटर स्वीकार करता है, जिसमें अपडेट करने के लिए कैमरे की सभी प्रॉपर्टी होती हैं. नीचे दिए गए उदाहरण में, center
, zoom
, heading
, और tilt
को एक साथ सेट करने के लिए, map.moveCamera()
को कॉल करने का तरीका बताया गया है:
map.moveCamera({
center: new google.maps.LatLng(37.7893719, -122.3942),
zoom: 16,
heading: 320,
tilt: 47.5
});
कैमरे की प्रॉपर्टी को ऐनिमेट करने के लिए, ऐनिमेशन लूप के साथ map.moveCamera()
को कॉल करें, जैसा कि यहां दिखाया गया है:
const degreesPerSecond = 3;
function animateCamera(time) {
// Update the heading, leave everything else as-is.
map.moveCamera({
heading: (time / 1000) * degreesPerSecond
});
requestAnimationFrame(animateCamera);
}
// Start the animation.
requestAnimationFrame(animateCamera);
कैमरे की स्थिति
मैप व्यू को कैमरे के तौर पर मॉडल किया गया है, जो किसी सपाट मैदान को नीचे से देख रहा है. कैमरे की पोज़िशन (इसलिए, मैप का रेंडरिंग) इन प्रॉपर्टी से तय होती है: टारगेट (अक्षांश/देशांतर की जगह), बियरिंग, टिल्ट, और ज़ूम.
टारगेट (जगह)
कैमरे का टारगेट, मैप के बीच में मौजूद जगह होती है. इसे अक्षांश और देशांतर के निर्देशांक के तौर पर दिखाया जाता है.
अक्षांश -85 से 85 डिग्री के बीच हो सकता है. इस सीमा से ऊपर या नीचे की वैल्यू, इस सीमा में मौजूद सबसे करीब की वैल्यू पर सेट कर दी जाएंगी. उदाहरण के लिए, अक्षांश की वैल्यू 100 डालने पर, वैल्यू 85 पर सेट हो जाएगी. देशांतर की वैल्यू, -180 से 180 डिग्री के बीच होनी चाहिए. इस रेंज से ऊपर या नीचे की वैल्यू को इस तरह रैप किया जाएगा कि वे (-180, 180) की रेंज में आ जाएं. उदाहरण के लिए, 480, 840, और 1200 को 120 डिग्री पर रैप किया जाएगा.बीयरिंग (ओरिएंटेशन)
कैमरे की बियरिंग से कंपास की दिशा का पता चलता है. इसे मैप के सबसे ऊपरी किनारे से, उत्तर की दिशा से डिग्री में मेज़र किया जाता है. अगर मैप के बीच से लेकर सबसे ऊपर तक वर्टिकल लाइन खींची जाती है, तो यह लाइन, 'ट्रू नॉर्थ' के हिसाब से कैमरे की हेडिंग (डिग्री में मेज़र की जाती है) से मेल खाती है.
बियरिंग 0 होने का मतलब है कि मैप का सबसे ऊपरी हिस्सा, असल उत्तर दिशा की ओर है. अगर दिशा की वैल्यू 90 है, तो इसका मतलब है कि नक्शे का सबसे ऊपरी हिस्सा पूर्व की ओर है (कम्पास पर 90 डिग्री). अगर वैल्यू 180 है, तो इसका मतलब है कि मैप के सबसे ऊपरी हिस्से से दक्षिण की ओर इशारा किया जा रहा है.
Maps API की मदद से, मैप की दिशा बदली जा सकती है. उदाहरण के लिए, कार चलाने वाला व्यक्ति अक्सर सड़क के मैप को अपनी यात्रा की दिशा के हिसाब से अलाइन करता है. वहीं, मैप और कंपास का इस्तेमाल करने वाले लोग, आम तौर पर मैप को इस तरह से अलाइन करते हैं कि वर्टिकल लाइन उत्तर की ओर हो.
झुकाव (देखने का ऐंगल)
टिल्ट से, मैप के बीच में मौजूद कैमरे की पोज़िशन का पता चलता है. इसे नादिर (कैमरे के ठीक नीचे की दिशा) से डिग्री में मेज़र किया जाता है. 0 की वैल्यू का मतलब है कि कैमरा सीधे नीचे की ओर है. 0 से ज़्यादा की वैल्यू, ऐसे कैमरे से जुड़ी होती है जिसे तय डिग्री के हिसाब से, क्षितिज की ओर झुकाया गया हो. व्यू ऐंगल बदलने पर, मैप पर दूर की चीज़ें छोटी और आस-पास की चीज़ें बड़ी दिखती हैं. नीचे दिए गए उदाहरणों में इस बारे में बताया गया है.
नीचे दी गई इमेज में, व्यूइंग ऐंगल 0 डिग्री है. पहली इमेज में इसका स्कीमैटिक दिखाया गया है. इसमें, पोज़िशन 1 कैमरे की पोज़िशन है और पोज़िशन 2 मैप की मौजूदा पोज़िशन है. इसके बाद, नतीजा दिखाने वाला मैप नीचे दिखेगा.
नीचे दी गई इमेज में, व्यूइंग ऐंगल 45 डिग्री है. ध्यान दें कि कैमरा 3 पोज़िशन पर जाने के लिए, सीधे ऊपर (0 डिग्री) और ज़मीन (90 डिग्री) के बीच आर्क के आधे हिस्से तक चलता है. कैमरा अब भी मैप के सेंटर पॉइंट पर है, लेकिन 4 पोज़िशन पर लाइन से दिखाया गया इलाका अब दिख रहा है.
इस स्क्रीनशॉट में मौजूद मैप, अब भी उसी पॉइंट पर सेंटर किया गया है जिस पर मूल मैप में था. हालांकि, मैप के सबसे ऊपर ज़्यादा सुविधाएं दिख रही हैं. 45 डिग्री से ज़्यादा का ऐंगल चुनने पर, कैमरे और मैप की पोज़िशन के बीच की चीज़ें, अनुपात के हिसाब से बड़ी दिखती हैं. वहीं, मैप की पोज़िशन से आगे की चीज़ें, अनुपात के हिसाब से छोटी दिखती हैं. इससे 3D इफ़ेक्ट मिलता है.
ज़ूम करें
कैमरे के ज़ूम लेवल से, मैप का स्केल तय होता है. ज़ूम करने पर, स्क्रीन पर ज़्यादा जानकारी दिखती है. वहीं, ज़ूम करने पर, स्क्रीन पर दुनिया का ज़्यादा हिस्सा दिखता है.
ज़ूम लेवल के लिए, पूर्णांक होना ज़रूरी नहीं है. मैप पर ज़ूम करने की अनुमति वाली रेंज, कई बातों पर निर्भर करती है. जैसे, टारगेट, मैप टाइप, और स्क्रीन साइज़. रेंज से बाहर की कोई भी संख्या, सबसे करीब की मान्य वैल्यू में बदल जाएगी. यह वैल्यू, ज़ूम का कम से कम या ज़्यादा से ज़्यादा लेवल हो सकता है. नीचे दी गई सूची से पता चलता है कि हर ज़ूम लेवल पर आपको कितनी जानकारी दिख सकती है:
- 1: दुनिया
- 5: देश/महाद्वीप
- 10: शहर
- 15: सड़कें
- 20: इमारतें
ज़ूम करने के लिए फ़्रैक्शनल पैनल
वेक्टर मैप में, फ़्रैक्शनल ज़ूम की सुविधा काम करती है. इसकी मदद से, पूर्णांक के बजाय फ़्रैक्शनल वैल्यू का इस्तेमाल करके ज़ूम किया जा सकता है. रेस्टर और वेक्टर, दोनों तरह के मैप में फ़्रैक्शनल ज़ूम की सुविधा काम करती है. हालांकि, वेक्टर मैप के लिए फ़्रैक्शनल ज़ूम डिफ़ॉल्ट रूप से चालू होता है और रेस्टर मैप के लिए डिफ़ॉल्ट रूप से बंद होता है. isFractionalZoomEnabled
मैप विकल्प का इस्तेमाल करके, ज़ूम को थोड़ा बढ़ाने या घटाने की सुविधा को चालू और बंद करें.
यहां दिए गए उदाहरण में, मैप को शुरू करते समय ज़ूम करने की सुविधा चालू करने का तरीका बताया गया है:
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: -34.397, lng: 150.644},
zoom: 8,
isFractionalZoomEnabled: true
});
isFractionalZoomEnabled
मैप के विकल्प को यहां दिखाए गए तरीके से सेट करके, फ़्रैक्शनल ज़ूम को चालू और बंद भी किया जा सकता है:
// Using map.set
map.set('isFractionalZoomEnabled', true);
// Using map.setOptions
map.setOptions({isFractionalZoomEnabled: true});
फ़्रैक्शनल ज़ूम चालू है या नहीं, यह पता लगाने के लिए एक लिसनर सेट किया जा सकता है. यह तब सबसे ज़्यादा काम आता है, जब आपने isFractionalZoomEnabled
को true
या false
पर साफ़ तौर पर सेट न किया हो. यहां दिए गए उदाहरण के कोड से यह पता चलता है कि फ़्रैक्शनल ज़ूम चालू है या नहीं:
map.addListener('isfractionalzoomenabled_changed', () => {
const isFractionalZoomEnabled = map.get('isFractionalZoomEnabled');
if (isFractionalZoomEnabled === false) {
console.log('not using fractional zoom');
} else if (isFractionalZoomEnabled === true) {
console.log('using fractional zoom');
} else {
console.log('map not done initializing yet');
}
});