פקדים

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
בחירת פלטפורמה: Android iOS JavaScript

סקירה כללית של הפקדים

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

המפה הבאה מציגה את קבוצת בקרות ברירת המחדל שמוצגת על ידי 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 כן
>= 200x200px undefined כן
< 200x200px 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;
לצפייה בדוגמה

דוגמה

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

שינוי פקדים

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

  • zoomControl מפעילה/משביתה את בקרת הזום. כברירת מחדל, הפקד הזה גלוי ומופיע ליד הפינה השמאלית התחתונה של המפה. השדה 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> עם מיקום מוחלט במפה, שמציג למשתמש ממשק משתמש מסוים ומטפל באינטראקציה עם המשתמש או המפה – בדרך כלל באמצעות handler של אירוע.

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

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

כל אחד מהחששות האלה מפורט בהמשך.

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

אתם קובעים איך לצייר את הפקד. באופן כללי, מומלץ למקם את כל מצגת הבקרה בתוך רכיב אחד <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&#39.

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

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

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

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

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

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

דוגמה