אפשר להוסיף מפת Google לדף אינטרנט באמצעות קוד HTML, CSS ו-JavaScript. בדף הזה מוסבר איך להוסיף מפה לדף אינטרנט, ואז לגשת למופע של המפה באופן פרוגרמטי.
- הוספת מפה באמצעות רכיב
gmp-map - הוספת מפה באמצעות רכיב
divו-JavaScript - הגדרה וקבלת מאפיינים במופע של המפה
סקירה כללית
כדי לטעון מפה, דף האינטרנט צריך לבצע את הפעולות הבאות:
- טוענים את Maps JavaScript API באמצעות רכיב טעינה להפעלת API. כאן מועבר מפתח ה-API. אפשר להוסיף אותו לקובצי המקור של HTML או JavaScript.
- מוסיפים את המפה לדף ה-HTML ומוסיפים את סגנונות ה-CSS הנדרשים.
- טוענים את הספרייה
mapsומפעילים את המפה.
הוספת מפה באמצעות רכיב gmp-map
השיטה המומלצת להוספת מפת Google לדף אינטרנט היא באמצעות הרכיב gmp-map.
זהו רכיב HTML בהתאמה אישית שנוצר באמצעות רכיבי אינטרנט. כדי להוסיף מפה לדף אינטרנט באמצעות רכיב gmp-map, פועלים לפי השלבים הבאים.
מוסיפים רכיב
scriptשמכיל את ה-bootstrap לדף HTML, או מוסיפים אותו לקובץ מקור של JavaScript או TypeScript בלי הרכיבscript. מגדירים את ה-bootstrap עם מפתח ה-API ואפשרויות אחרות. אתם יכולים לבחור בין ייבוא דינמי של ספרייה לבין טעינה ישירה של סקריפט. בדוגמה הזו מוצגת הוספה של טעינת סקריפט דינמי של Bootstrap לדף HTML:<script> (g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({ key: "YOUR_API_KEY", v: "weekly", // Use the 'v' parameter to indicate the version to use (weekly, beta, alpha, etc.). // Add other bootstrap parameters as needed, using camel case. }); </script>
בדף ה-HTML, מוסיפים רכיב
gmp-map. מציינים קווי אורך ורוחב שלcenter(חובה), ערך זום שלzoom(חובה) ו-map-idאם צריך (חובה לציין אותו בתכונות מסוימות כמו סמנים מתקדמים).
<gmp-map center="-34.397,150.644" zoom="8" mapId="DEMO_MAP_ID"> </gmp-map>
קוד לדוגמה מלא
TypeScript
async function init(): Promise<void> { // Import the needed libraries. await google.maps.importLibrary('maps'); // Access the map. const mapElement = document.querySelector('gmp-map')!; // Access the underlying map object. const innerMap = mapElement.innerMap; console.log({ mapElement, innerMap }); } void init();
JavaScript
async function init() { // Import the needed libraries. await google.maps.importLibrary('maps'); // Access the map. const mapElement = document.querySelector('gmp-map'); // Access the underlying map object. const innerMap = mapElement.innerMap; console.log({ mapElement, innerMap }); } void init();
CSS
/* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; }
HTML
<html>
<head>
<title>Simple Map</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
<script>
// prettier-ignore
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
key: "GOOGLE_MAPS_API_KEY"
});
</script>
</head>
<body>
<gmp-map center="-34.397,150.644" zoom="8" mapId="DEMO_MAP_ID">
</gmp-map>
</body>
</html>הוספת מפה באמצעות רכיב div ו-JavaScript
כדי להוסיף מפה לדף אינטרנט באמצעות רכיב div, מבצעים את השלבים הבאים.
מוסיפים רכיב
scriptשמכיל את ה-bootstrap לדף HTML, או מוסיפים אותו לקובץ מקור של JavaScript או TypeScript בלי הרכיבscript. מגדירים את ה-bootstrap עם מפתח ה-API ואפשרויות אחרות. אתם יכולים לבחור בין ייבוא ספרייה דינמית לבין טעינת סקריפט ישירה. בדוגמה הזו מוצגת הוספה של ה-bootstrap הדינמי לדף HTML:<script> (g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({ key: "YOUR_API_KEY", v: "weekly", // Use the 'v' parameter to indicate the version to use (weekly, beta, alpha, etc.). // Add other bootstrap parameters as needed, using camel case. }); </script>
בדף ה-HTML, מוסיפים רכיב
divשיכיל את המפה.<div id="map"></div>
ב-CSS, מגדירים את הגובה של
html,bodyו-#mapל-100%. המאפייןheightשל CSS נדרש כדי שהמפה תהיה גלויה, כי רכיביdivריקים מוגדרים כברירת מחדל לגובה0. מכיוון שהגבהים שמבוססים על אחוזים מועברים בירושה מהאלמנטים של ההורה במצב קפדני, הגדרתheight: 100%ב-htmlוב-bodyוגם ב-#mapמבטיחה שרשרת רציפה של ירושת גובה מאזור התצוגה ועד למאגר המפה בכל הדפדפנים.html, body, #map { height: 100%; margin: 0; padding: 0; }
בקובץ JS או TS, יוצרים פונקציה כדי לטעון את הספרייה
mapsולהפעיל את המפה. מציינים את הקואורדינטות של קו הרוחב וקו האורך שלcenter, ואת רמת הזום שלzoom. אם צריך, מוסיפים מזהה מפה באמצעות המאפייןmapId. כברירת מחדל, המפה תהיה מפת רסטר, לכן צריך לבקש מפה וקטורית על ידי ציון האפשרות "VECTOR". מומלץ להשתמש בסוג המפה הווקטורית כדי לספק את חוויית המשתמש הטובה ביותר, כי היא מספקת נאמנות חזותית משופרת וגם את היכולת לשלוט בהטיה ובכיוון במפה.TypeScript
let map: google.maps.Map; async function init(): Promise<void> { // Import the needed libraries const { Map } = await google.maps.importLibrary('maps'); // Create a new map from the div with id="map". map = new Map(document.getElementById('map')!, { center: { lat: -34.397, lng: 150.644 }, zoom: 8, renderingType: 'VECTOR', }); console.log(map); } void init();
JavaScript
let map; async function init() { // Import the needed libraries const { Map } = await google.maps.importLibrary('maps'); // Create a new map from the div with id="map". map = new Map(document.getElementById('map'), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, renderingType: 'VECTOR', }); console.log(map); } void init();
קוד מקור מלא לדוגמה
TypeScript
let map: google.maps.Map; async function init(): Promise<void> { // Import the needed libraries const { Map } = await google.maps.importLibrary('maps'); // Create a new map from the div with id="map". map = new Map(document.getElementById('map')!, { center: { lat: -34.397, lng: 150.644 }, zoom: 8, renderingType: 'VECTOR', }); console.log(map); } void init();
JavaScript
let map; async function init() { // Import the needed libraries const { Map } = await google.maps.importLibrary('maps'); // Create a new map from the div with id="map". map = new Map(document.getElementById('map'), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, renderingType: 'VECTOR', }); console.log(map); } void init();
CSS
/* * 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; }
HTML
<html>
<head>
<title>Simple Map</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
<script>
// prettier-ignore
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
key: "GOOGLE_MAPS_API_KEY"
});
</script>
</head>
<body>
<div id="map"></div>
</body>
</html>הגדרה וקבלת מאפיינים במופע של המפה
כדי ליצור אינטראקציה עם מופע המפה, בוחרים את הרכיב שמכיל אותה. הקוד שצריך להוסיף משתנה בהתאם לרכיב שבו השתמשתם: gmp-map או div.
קבלת מופע של מפה מרכיב gmp-map
כדי לקבל את מופע המפה כשמשתמשים ברכיב gmp-map, משתמשים ב-document.querySelector כדי לאחזר מופע mapElement, כמו שמוצג כאן.
const mapElement = document.querySelector('gmp-map') as google.maps.MapElement;
לאחר מכן מגדירים מאפיינים במופע של mapElement:
mapElement.zoom = 8;
הכיתה MapElement משתמשת בכיתה Map באופן פנימי. אפשר לגשת לכיתה Map באמצעות המאפיין MapElement.innerMap, כמו שמוצג כאן:
mapElement.innerMap.setOptions({
mapTypeControl: false,
});
קבלת מופע של מפה מרכיב div
כשמשתמשים ברכיב div, צריך לקבל את המופע של המפה ולהגדיר אפשרויות בזמן האתחול:
map = new google.maps.Map(document.getElementById("map"), {
center: { lat: -34.397, lng: 150.644 },
zoom: 8,
mapTypeControl: false,
});
אחרי האתחול, מגדירים את האפשרויות במופע map כמו שמוצג כאן:
map.setOptions({
zoom: 8,
});