אמצעי בקרה

בחירת פלטפורמה: Android iOS JavaScript

סקירה כללית של אמצעי הבקרה

המפות שמוצגות דרך Maps JavaScript API מכילות רכיבי ממשק משתמש שמאפשרים למשתמשים לבצע אינטראקציה עם המפה. הרכיבים האלה נקראים אמצעי בקרה, ואפשר לכלול גרסאות שלהם באפליקציה. לחלופין, אפשר לא לעשות דבר ולאפשר ל-Maps JavaScript API לטפל בכל התנהגות הבקרה.

במפה הבאה מוצגת קבוצת ברירת המחדל של אמצעי הבקרה שמוצגים על ידי Maps JavaScript API:

בהמשך מופיעה רשימה של כל אמצעי הבקרה שבהם אפשר להשתמש במפות:

  • בפקד מרחק התצוגה מוצגים הלחצנים "+" ו-"-" לשינוי רמת הזום של המפה. אמצעי הבקרה הזה מופיע כברירת מחדל בפינה השמאלית התחתונה של המפה.
  • הפקד סוג המפה זמין בסגנון של סרגל לחצנים אופקי או נפתח, כך שהמשתמש יכול לבחור את סוג המפה (ROADMAP, SATELLITE, HYBRID, או TERRAIN). הפקד הזה מופיע כברירת מחדל בפינה השמאלית העליונה של המפה.
  • הפקד Street View מכיל את סמל האטב-איש שניתן לגרור אל המפה כדי להפעיל את Street View. אמצעי הבקרה הזה מופיע כברירת מחדל ליד הפינה השמאלית התחתונה של המפה.
  • בקרת הסיבוב מספקת שילוב של אפשרויות הטיה וסיבוב למפות שמכילות צילומים לא ישרים. אמצעי הבקרה הזה מופיע כברירת מחדל בפינה השמאלית התחתונה של המפה. למידע נוסף, אפשר לעיין בתמונות 45°.
  • פקד קנה המידה מציג רכיב של קנה המידה של המפה. אמצעי הבקרה הזה מושבת כברירת מחדל.
  • בפקד במסך מלא אפשר לפתוח את המפה במצב מסך מלא. אמצעי הבקרה הזה מופעל כברירת מחדל במחשבים ובמכשירים ניידים. הערה: ב-iOS אין תמיכה בתכונה 'מסך מלא'. לכן השליטה במסך מלא לא גלויה במכשירי iOS.
  • בקרת מקשי הקיצור מציגה רשימה של מקשי קיצור לאינטראקציה עם המפה.

לא ניתן לגשת אל פקדי המפה האלה או לשנות אותם ישירות. במקום זאת, אפשר לשנות את השדות MapOptions במפה, וזה משפיע על החשיפה וההצגה של הפקדים. אפשר להתאים את מצגת הבקרה על ידי יצירת המפה (באמצעות MapOptions מתאים) או לשנות את המפה באופן דינמי על ידי קריאה ל-setOptions() כדי לשנות את אפשרויות המפה.

לא כל הפקדים האלה מופעלים כברירת מחדל. למידע נוסף על התנהגות ברירת המחדל של ממשק המשתמש (ואיך לשנות את ההתנהגות הזו), ראו ממשק המשתמש המוגדר כברירת מחדל שבהמשך.

ממשק המשתמש שמוגדר כברירת מחדל

כברירת מחדל, כל הפקדים ייעלמו אם המפה קטנה מדי (200x200 פיקסלים). כדי לשנות את ההתנהגות הזו אפשר להגדיר באופן מפורש את הפקד כגלוי. ראו הוספת פקדים למפה.

ההתנהגות והמראה של הפקדים זהים במכשירים ניידים ובמחשבים, למעט השליטה במסך מלא (אפשר לעיין בהתנהגות המתוארת ברשימת הפקדים).

בנוסף, הטיפול באמצעות המקלדת פועל בכל המכשירים כברירת מחדל.

השבתה של ממשק המשתמש המוגדר כברירת מחדל

מומלץ להשבית לגמרי את לחצני ברירת המחדל של ממשק ה-API. כדי לעשות זאת, צריך להגדיר את מאפיין disableDefaultUI של המפה (בתוך האובייקט MapOptions) ל-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,
  mapTypeControl: boolean,
  scaleControl: boolean,
  streetViewControl: boolean,
  rotateControl: boolean,
  fullscreenControl: boolean
}

כברירת מחדל, כל הפקדים ייעלמו אם המפה קטנה מ-200x200 פיקסלים. כדי לשנות את ההתנהגות הזו אפשר להגדיר באופן מפורש את הפקד כגלוי. לדוגמה, הטבלה הבאה מראה אם פקד הזום גלוי או לא, בהתאם לגודל המפה ולהגדרה של השדה zoomControl:

גודל מפה zoomControl גלוי?
ללא הגבלת תאריך false לא
ללא הגבלת תאריך true כן
>= 200x200 פיקסלים 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.
  • ב-google.maps.MapTypeControlStyle.DROPDOWN_MENU מוצג פקד של לחצן יחיד שמאפשר לבחור את סוג המפה מתפריט נפתח.
  • פעולת ברירת המחדל של google.maps.MapTypeControlStyle.DEFAULT מוצגת. התנהגות ברירת המחדל תלויה בגודל המסך. ההתנהגות הזו עשויה להשתנות בגרסאות עתידיות של ה-API.

שימו לב שאם בכל זאת משנים אפשרויות בקרה, עליכם להפעיל אותן באופן מפורש גם על ידי הגדרת הערך המתאים של 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;
להצגת דוגמה

כדאי לנסות דוגמה

הפקדים מוגדרים בדרך כלל כשיוצרים את המפה. אבל אפשר לשנות את ההצגה של הפקדים באופן דינמי באמצעות קריאה ל-method setOptions() של Map, והעברת אפשרויות הבקרה החדשות.

שינוי פקדים

מציינים את ההצגה של אמצעי הבקרה כשיוצרים את המפה דרך שדות בתוך אובייקט MapOptions של המפה. השדות האלה מסומנים כאן:

  • התכונה zoomControl מפעילה/משביתה את הפקד Zoom. כברירת מחדל, אמצעי הבקרה הזה גלוי ומופיע ליד הפינה השמאלית התחתונה של המפה. השדה zoomControlOptions מציין גם את ה-ZoomControlOptions שבו צריך להשתמש בשביל אמצעי הבקרה הזה.
  • mapTypeControl מפעיל או משבית את אפשרות הבקרה 'סוג המפה' שמאפשרת למשתמש לעבור בין סוגי המפות (כמו מפה ולוויין). כברירת מחדל, הפקד הזה גלוי ומופיע בפינה הימנית העליונה של המפה. השדה mapTypeControlOptions מציין גם את ה-MapTypeControlOptions שבו צריך להשתמש בשביל אמצעי הבקרה הזה.
  • האפליקציה streetViewControl מפעילה או משביתה את פקד האטב-איש שמאפשר למשתמש להפעיל תמונת פנורמה של Street View. כברירת מחדל, הפקד הזה גלוי ומופיע ליד הפינה השמאלית התחתונה של המפה. השדה streetViewControlOptions מציין גם את ה-StreetViewControlOptions שבו צריך להשתמש בשביל אמצעי הבקרה הזה.
  • הפונקציה rotateControl מפעילה/משביתה את המראה של פקד הסיבוב לצורך שליטה בכיוון של תמונות ב-45°. כברירת מחדל, נוכחות אמצעי הבקרה נקבעת על סמך נוכחות או היעדר של תמונות בזווית של 45° לסוג המפה הנתון במיקום ובזום הנוכחיים. אפשר לשנות את אופן הפעולה של אמצעי הבקרה על ידי הגדרת הערך rotateControlOptions במפה כך שיציין את ה-RotateControlOptions שבו צריך להשתמש. אי אפשר להציג את הפקד אם אין כרגע תמונות ב-45°.
  • scaleControl מפעיל או משבית את פקד קנה המידה שמספק קנה מידה פשוט במפה. כברירת מחדל, אמצעי הבקרה הזה לא גלוי. כשהאפשרות מופעלת, היא תופיע תמיד בפינה השמאלית התחתונה של המפה. השדה scaleControlOptions מציין גם את ה-ScaleControlOptions שבו צריך להשתמש בשביל אמצעי הבקרה הזה.
  • fullscreenControl מפעיל או משבית את הפקד לפתיחת המפה במצב מסך מלא. אמצעי הבקרה הזה מופעל כברירת מחדל במחשבים ובמכשירי Android. כשהאפשרות מופעלת, הפקד מופיע ליד הפינה השמאלית העליונה של המפה. השדה fullscreenControlOptions מציין גם את ה-FullscreenControlOptions שבו צריך להשתמש בשביל אמצעי הבקרה הזה.

שימו לב: אתם יכולים להגדיר אפשרויות לאמצעי הבקרה שאתם משביתים בהתחלה.

שליטה במיקום

רוב אפשרויות הבקרה מכילות מאפיין position (מסוג ControlPosition) שמציין איפה במפה למקם את הרכיב. המיקום של הפקדים האלה אינו מוחלט. במקום זאת, ה-API יפרוס את הפקדים בצורה חכמה על ידי העברתם סביב רכיבי מפה קיימים או פקדים אחרים, במסגרת מגבלות נתונים (כמו גודל המפה).

הערה: אי אפשר להבטיח שאמצעי הבקרה לא יחפפו בגלל פריסות מורכבות, אבל ה-API ינסה לארגן אותן בצורה חכמה.

מיקומי הבקרה הבאים נתמכים:

  • 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;
להצגת דוגמה

כדאי לנסות דוגמה

אמצעי בקרה בהתאמה אישית

אפשר גם לשנות את הסגנון והמיקום של בקרות ה-API הקיימות, ליצור אמצעי בקרה משלכם לטיפול באינטראקציה עם המשתמש. פקדים הם ווידג'טים נייחים שצפים מעל מפה במיקומים מוחלטים, בניגוד לשכבות-על, שנעות עם המפה הבסיסית. בעיקרון, בקרה הוא רכיב <div> שיש לו מיקום מוחלט במפה, מציג ממשק משתמש מסוים למשתמש ומטפל באינטראקציה עם המשתמש או עם המפה, בדרך כלל באמצעות גורם שמטפל באירוע.

כדי ליצור פקד מותאם אישית משלכם, יש צורך בכמה כללים. עם זאת, אלה ההנחיות הבאות הן שיטות מומלצות:

  • הגדרת CSS מתאים להצגה של רכיבי הבקרה.
  • טיפול באינטראקציה עם המשתמש או עם המפה באמצעות גורמים מטפלים באירועים עבור שינויים בנכס מפה או אירועי משתמש (לדוגמה, אירועי 'click').
  • צריך ליצור רכיב <div> כדי להחזיק את הפקד ולהוסיף את הרכיב הזה למאפיין controls של Map.

בהמשך נדון בכל אחד מהחששות האלה.

שרטוט פקדים מותאמים אישית

אתם קובעים איך לשרטט את השליטה. באופן כללי, מומלץ למקם את כל מצגת הבקרה ברכיב <div> אחד כדי שאפשר יהיה לשנות את הבקרה כיחידה אחת. נשתמש בדפוס העיצוב הזה בדוגמאות הבאות.

כדי לעצב פקדים אטרקטיביים צריך ידע מסוים במבנה CSS ו-DOM. הקוד הבא מציג פונקציה ליצירת רכיב לחצן שמזיז את המפה כך שתמרכז בשיקגו.

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(), שמטפל באירועי DOM נתמכים. קטע הקוד הבא מוסיף listener לאירוע 'click' של הדפדפן. חשוב לשים לב שהאירוע הזה התקבל מה-DOM ולא מהמפה.

// 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);
});

הפיכת אמצעי בקרה בהתאמה אישית לנגישים

כדי לוודא שהפקדים מקבלים אירועי מקלדת ומוצגים כמו שצריך בקוראי מסך:

  • השתמשו תמיד ברכיבי HTML מותאמים ללחצנים, לרכיבי טופס ולתוויות. צריך להשתמש באלמנט DIV בלבד כקונטיינר כדי לשמור פקדים מקוריים. אף פעם לא משתמשים ב-DIV כרכיב אינטראקטיבי של ממשק משתמש.
  • כדי לספק מידע על רכיב בממשק המשתמש, אפשר להשתמש ברכיב label, במאפיין title או במאפיין aria-label במקרים הרלוונטיים.

מיקום פקדים מותאמים אישית

אמצעי בקרה מותאמים אישית ממוקמים במפה על ידי הצבתם במיקומים המתאימים בתוך המאפיין controls של האובייקט Map. הנכס הזה מכיל מערך של google.maps.ControlPosition. כדי להוסיף אמצעי בקרה בהתאמה אישית למפה, מוסיפים את Node (בדרך כלל <div>) ל-ControlPosition מתאים. (למידע על המיקומים האלו, ראו בקרה על המיקום למעלה).

כל ControlPosition שומר MVCArray מהפקדים שמוצגים במיקום הזה. לכן, כשמוסיפים פקדים למיקום או מסירים אותם מהמיקום, ה-API יעדכן את הפקדים בהתאם.

ה-API ממקם את אמצעי הבקרה בכל מיקום לפי הסדר של נכס index. פקדים עם אינדקס נמוך יותר מוצבים קודם. לדוגמה, שני פקדים מותאמים אישית במיקום BOTTOM_RIGHT יוצגו בהתאם לסדר האינדקסים הזה, כאשר ערכי אינדקס נמוכים יותר יקבלו קדימות. כברירת מחדל, כל אמצעי הבקרה בהתאמה אישית ממוקמים אחרי שמוסיפים את בקרות ברירת המחדל של ה-API. כדי לשנות את ההתנהגות הזו, אפשר להגדיר את המאפיין index של הפקד כערך שלילי. לא ניתן למקם פקדים בהתאמה אישית משמאל ללוגו או מימין לזכויות היוצרים.

הקוד הבא יוצר פקד חדש בהתאמה אישית (ה-constructor שלו לא מוצג) ומוסיף אותו למפה במיקום 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);

דוגמה לבקרה מותאמת אישית

הבקרה הבאה היא פשוטה (אבל לא מועילה במיוחד) והיא משלבת את הדפוסים שמוצגים למעלה. אמצעי הבקרה הזה מגיב לאירועי 'click' DOM על ידי מרכוז המפה במיקום מסוים שמוגדר כברירת מחדל:

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;
להצגת דוגמה

כדאי לנסות דוגמה