צורות וקווים

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

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

קווים פוליגונים

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

הוספת קו מרובה

ה-constructor של Polyline מקבל קבוצה של PolylineOptions שמציינת את LatLng של הקו וקבוצה של סגנונות כדי לשנות את ההתנהגות החזותית של הקו.

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

  • strokeColor מציין צבע HTML הקסדצימלי בפורמט "#FFFFFF". בכיתה Polyline אין תמיכה בצבעים עם שם.
  • strokeOpacity מציין ערך מספרי בין 0.0 ל-1.0 כדי לקבוע את האטימות של צבע הקו. ערך ברירת המחדל הוא 1.0.
  • strokeWeight מציין את רוחב הקו בפיקסלים.

המאפיין editable של קו הפוליגון מציין אם המשתמשים יכולים לערוך את הצורה. מידע נוסף זמין בקטע צורות שניתנות לעריכה על ידי משתמשים בהמשך. באופן דומה, אפשר להגדיר את המאפיין draggable כדי לאפשר למשתמשים לגרור את הקו.

TypeScript

// This example creates a 2-pixel-wide red polyline showing the path of
// the first trans-Pacific flight between Oakland, CA, and Brisbane,
// Australia which was made by Charles Kingsford Smith.

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 3,
      center: { lat: 0, lng: -180 },
      mapTypeId: "terrain",
    }
  );

  const flightPlanCoordinates = [
    { lat: 37.772, lng: -122.214 },
    { lat: 21.291, lng: -157.821 },
    { lat: -18.142, lng: 178.431 },
    { lat: -27.467, lng: 153.027 },
  ];
  const flightPath = new google.maps.Polyline({
    path: flightPlanCoordinates,
    geodesic: true,
    strokeColor: "#FF0000",
    strokeOpacity: 1.0,
    strokeWeight: 2,
  });

  flightPath.setMap(map);
}

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

JavaScript

// This example creates a 2-pixel-wide red polyline showing the path of
// the first trans-Pacific flight between Oakland, CA, and Brisbane,
// Australia which was made by Charles Kingsford Smith.
function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 3,
    center: { lat: 0, lng: -180 },
    mapTypeId: "terrain",
  });
  const flightPlanCoordinates = [
    { lat: 37.772, lng: -122.214 },
    { lat: 21.291, lng: -157.821 },
    { lat: -18.142, lng: 178.431 },
    { lat: -27.467, lng: 153.027 },
  ];
  const flightPath = new google.maps.Polyline({
    path: flightPlanCoordinates,
    geodesic: true,
    strokeColor: "#FF0000",
    strokeOpacity: 1.0,
    strokeWeight: 2,
  });

  flightPath.setMap(map);
}

window.initMap = initMap;
להצגת דוגמה

ניסיון של דוגמה

הסרת קו פוליגון

כדי להסיר קו פוליגון מהמפה, צריך לבצע קריאה ל-method‏ setMap() ולהעביר את הערך null כארגומנטים. בדוגמה הבאה, flightPath הוא אובייקט קו מרובע:

flightPath.setMap(null);

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

בדיקה של קו פוליגוני

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

  • getAt() מחזירה את הערך של LatLng בערך נתון של אינדקס שמתחיל ב-0.
  • insertAt() מוסיף את הערך של LatLng שעבר לו בערכים נתונים של אינדקס שמתחיל בספרה אפס. חשוב לזכור שכל הקואורדינטות הקיימות בערך האינדקס הזה מועברות קדימה.
  • removeAt() מסיר LatLng בערך נתון של אינדקס שמתחיל בספרה אפס.

TypeScript

// This example creates an interactive map which constructs a polyline based on
// user clicks. Note that the polyline only appears once its path property
// contains two LatLng coordinates.

let poly: google.maps.Polyline;
let map: google.maps.Map;

function initMap(): void {
  map = new google.maps.Map(document.getElementById("map") as HTMLElement, {
    zoom: 7,
    center: { lat: 41.879, lng: -87.624 }, // Center the map on Chicago, USA.
  });

  poly = new google.maps.Polyline({
    strokeColor: "#000000",
    strokeOpacity: 1.0,
    strokeWeight: 3,
  });
  poly.setMap(map);

  // Add a listener for the click event
  map.addListener("click", addLatLng);
}

// Handles click events on a map, and adds a new point to the Polyline.
function addLatLng(event: google.maps.MapMouseEvent) {
  const path = poly.getPath();

  // Because path is an MVCArray, we can simply append a new coordinate
  // and it will automatically appear.
  path.push(event.latLng as google.maps.LatLng);

  // Add a new marker at the new plotted point on the polyline.
  new google.maps.Marker({
    position: event.latLng,
    title: "#" + path.getLength(),
    map: map,
  });
}

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

JavaScript

// This example creates an interactive map which constructs a polyline based on
// user clicks. Note that the polyline only appears once its path property
// contains two LatLng coordinates.
let poly;
let map;

function initMap() {
  map = new google.maps.Map(document.getElementById("map"), {
    zoom: 7,
    center: { lat: 41.879, lng: -87.624 }, // Center the map on Chicago, USA.
  });
  poly = new google.maps.Polyline({
    strokeColor: "#000000",
    strokeOpacity: 1.0,
    strokeWeight: 3,
  });
  poly.setMap(map);
  // Add a listener for the click event
  map.addListener("click", addLatLng);
}

// Handles click events on a map, and adds a new point to the Polyline.
function addLatLng(event) {
  const path = poly.getPath();

  // Because path is an MVCArray, we can simply append a new coordinate
  // and it will automatically appear.
  path.push(event.latLng);
  // Add a new marker at the new plotted point on the polyline.
  new google.maps.Marker({
    position: event.latLng,
    title: "#" + path.getLength(),
    map: map,
  });
}

window.initMap = initMap;
להצגת דוגמה

ניסיון של דוגמה

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

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

פוליגונים

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

אובייקטים מסוג Polygon יכולים לתאר צורות מורכבות, כולל:

  • מספר אזורים לא צמודים שמוגדרים על ידי פוליגון אחד.
  • אזורים עם חורים.
  • צמתים של אזור אחד או יותר.

כדי להגדיר צורה מורכבת, משתמשים במשולש עם כמה נתיבים.

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

הוספת מצולע

מאחר ששטח פוליגונלי עשוי לכלול כמה נתיבים נפרדים, המאפיין paths של האובייקט Polygon מציין מערך של מערכי משנה, כל אחד מהם מסוג MVCArray. כל מערך מגדיר רצף נפרד של קואורדינטות LatLng מסודרות.

בפוליגונים פשוטים שמכילים רק נתיב אחד, אפשר ליצור Polygon באמצעות מערך אחד של קואורדינטות LatLng. ממשק ה-API של JavaScript במפות Google יהפוך את המערך הפשוט למערך של מערכי בתהליך היצירה, כשיישמר במאפיין paths. ב-API יש method פשוט של getPath() עבור פוליגונים שמכילים נתיב אחד.

המאפיין editable של הפוליגון מציין אם המשתמשים יכולים לערוך את הצורה. מידע נוסף זמין בקטע צורות שניתנות לעריכה על ידי משתמשים בהמשך. באופן דומה, אפשר להגדיר את המאפיין draggable כדי לאפשר למשתמשים לגרור את הצורה.

TypeScript

// This example creates a simple polygon representing the Bermuda Triangle.

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 5,
      center: { lat: 24.886, lng: -70.268 },
      mapTypeId: "terrain",
    }
  );

  // Define the LatLng coordinates for the polygon's path.
  const triangleCoords = [
    { lat: 25.774, lng: -80.19 },
    { lat: 18.466, lng: -66.118 },
    { lat: 32.321, lng: -64.757 },
    { lat: 25.774, lng: -80.19 },
  ];

  // Construct the polygon.
  const bermudaTriangle = new google.maps.Polygon({
    paths: triangleCoords,
    strokeColor: "#FF0000",
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: "#FF0000",
    fillOpacity: 0.35,
  });

  bermudaTriangle.setMap(map);
}

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

JavaScript

// This example creates a simple polygon representing the Bermuda Triangle.
function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 5,
    center: { lat: 24.886, lng: -70.268 },
    mapTypeId: "terrain",
  });
  // Define the LatLng coordinates for the polygon's path.
  const triangleCoords = [
    { lat: 25.774, lng: -80.19 },
    { lat: 18.466, lng: -66.118 },
    { lat: 32.321, lng: -64.757 },
    { lat: 25.774, lng: -80.19 },
  ];
  // Construct the polygon.
  const bermudaTriangle = new google.maps.Polygon({
    paths: triangleCoords,
    strokeColor: "#FF0000",
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: "#FF0000",
    fillOpacity: 0.35,
  });

  bermudaTriangle.setMap(map);
}

window.initMap = initMap;
להצגת דוגמה

ניסיון של דוגמה

השלמה אוטומטית של פוליגונים

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

הדוגמה הבאה זהה לדוגמה הקודמת, מלבד השמטת LatLng האחרון: הצגת דוגמה.

הסרת פוליגון

כדי להסיר פוליגון מהמפה, צריך לבצע קריאה ל-method‏ setMap() ולהעביר את הערך null כארגומנטים. בדוגמה הבאה, bermudaTriangle הוא אובייקט פוליגון:

bermudaTriangle.setMap(null);

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

בדיקת פוליגון

פוליגון מציין את סדרת הקואורדינטות שלו כמערך של מערכי, שבהם כל מערך הוא מסוג MVCArray. כל מערך 'עלה' הוא מערך של קואורדינטות LatLng שמציין נתיב יחיד. כדי לאחזר את הקואורדינטות האלה, צריך לקרוא ל-method‏ getPaths() של האובייקט Polygon. מכיוון שהמערך הוא MVCArray, תצטרכו לבצע בו פעולות ולבדוק אותו באמצעות הפעולות הבאות:

  • getAt() מחזירה את הערך של LatLng בערך נתון של אינדקס שמתחיל ב-0.
  • insertAt() מוסיף את הערך של LatLng שעבר לו בערכים נתונים של אינדקס שמתחיל בספרה אפס. חשוב לזכור שכל הקואורדינטות הקיימות בערך האינדקס הזה מועברות קדימה.
  • removeAt() מסיר LatLng בערך נתון של אינדקס שמתחיל בספרה אפס.

TypeScript

// This example creates a simple polygon representing the Bermuda Triangle.
// When the user clicks on the polygon an info window opens, showing
// information about the polygon's coordinates.

let map: google.maps.Map;

let infoWindow: google.maps.InfoWindow;

function initMap(): void {
  map = new google.maps.Map(document.getElementById("map") as HTMLElement, {
    zoom: 5,
    center: { lat: 24.886, lng: -70.268 },
    mapTypeId: "terrain",
  });

  // Define the LatLng coordinates for the polygon.
  const triangleCoords: google.maps.LatLngLiteral[] = [
    { lat: 25.774, lng: -80.19 },
    { lat: 18.466, lng: -66.118 },
    { lat: 32.321, lng: -64.757 },
  ];

  // Construct the polygon.
  const bermudaTriangle = new google.maps.Polygon({
    paths: triangleCoords,
    strokeColor: "#FF0000",
    strokeOpacity: 0.8,
    strokeWeight: 3,
    fillColor: "#FF0000",
    fillOpacity: 0.35,
  });

  bermudaTriangle.setMap(map);

  // Add a listener for the click event.
  bermudaTriangle.addListener("click", showArrays);

  infoWindow = new google.maps.InfoWindow();
}

function showArrays(event: any) {
  // Since this polygon has only one path, we can call getPath() to return the
  // MVCArray of LatLngs.
  // @ts-ignore
  const polygon = this as google.maps.Polygon;
  const vertices = polygon.getPath();

  let contentString =
    "<b>Bermuda Triangle polygon</b><br>" +
    "Clicked location: <br>" +
    event.latLng.lat() +
    "," +
    event.latLng.lng() +
    "<br>";

  // Iterate over the vertices.
  for (let i = 0; i < vertices.getLength(); i++) {
    const xy = vertices.getAt(i);

    contentString +=
      "<br>" + "Coordinate " + i + ":<br>" + xy.lat() + "," + xy.lng();
  }

  // Replace the info window's content and position.
  infoWindow.setContent(contentString);
  infoWindow.setPosition(event.latLng);

  infoWindow.open(map);
}

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

JavaScript

// This example creates a simple polygon representing the Bermuda Triangle.
// When the user clicks on the polygon an info window opens, showing
// information about the polygon's coordinates.
let map;
let infoWindow;

function initMap() {
  map = new google.maps.Map(document.getElementById("map"), {
    zoom: 5,
    center: { lat: 24.886, lng: -70.268 },
    mapTypeId: "terrain",
  });

  // Define the LatLng coordinates for the polygon.
  const triangleCoords = [
    { lat: 25.774, lng: -80.19 },
    { lat: 18.466, lng: -66.118 },
    { lat: 32.321, lng: -64.757 },
  ];
  // Construct the polygon.
  const bermudaTriangle = new google.maps.Polygon({
    paths: triangleCoords,
    strokeColor: "#FF0000",
    strokeOpacity: 0.8,
    strokeWeight: 3,
    fillColor: "#FF0000",
    fillOpacity: 0.35,
  });

  bermudaTriangle.setMap(map);
  // Add a listener for the click event.
  bermudaTriangle.addListener("click", showArrays);
  infoWindow = new google.maps.InfoWindow();
}

function showArrays(event) {
  // Since this polygon has only one path, we can call getPath() to return the
  // MVCArray of LatLngs.
  // @ts-ignore
  const polygon = this;
  const vertices = polygon.getPath();
  let contentString =
    "<b>Bermuda Triangle polygon</b><br>" +
    "Clicked location: <br>" +
    event.latLng.lat() +
    "," +
    event.latLng.lng() +
    "<br>";

  // Iterate over the vertices.
  for (let i = 0; i < vertices.getLength(); i++) {
    const xy = vertices.getAt(i);

    contentString +=
      "<br>" + "Coordinate " + i + ":<br>" + xy.lat() + "," + xy.lng();
  }

  // Replace the info window's content and position.
  infoWindow.setContent(contentString);
  infoWindow.setPosition(event.latLng);
  infoWindow.open(map);
}

window.initMap = initMap;
להצגת דוגמה

ניסיון של דוגמה

איך יוצרים חור בפוליגון

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

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

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

TypeScript

// This example creates a triangular polygon with a hole in it.

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 5,
      center: { lat: 24.886, lng: -70.268 },
    }
  );

  // Define the LatLng coordinates for the polygon's  outer path.
  const outerCoords = [
    { lat: 25.774, lng: -80.19 },
    { lat: 18.466, lng: -66.118 },
    { lat: 32.321, lng: -64.757 },
  ];

  // Define the LatLng coordinates for the polygon's inner path.
  // Note that the points forming the inner path are wound in the
  // opposite direction to those in the outer path, to form the hole.
  const innerCoords = [
    { lat: 28.745, lng: -70.579 },
    { lat: 29.57, lng: -67.514 },
    { lat: 27.339, lng: -66.668 },
  ];

  // Construct the polygon, including both paths.
  const bermudaTriangle = new google.maps.Polygon({
    paths: [outerCoords, innerCoords],
    strokeColor: "#FFC107",
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: "#FFC107",
    fillOpacity: 0.35,
  });

  bermudaTriangle.setMap(map);
}

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

JavaScript

// This example creates a triangular polygon with a hole in it.
function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 5,
    center: { lat: 24.886, lng: -70.268 },
  });
  // Define the LatLng coordinates for the polygon's  outer path.
  const outerCoords = [
    { lat: 25.774, lng: -80.19 },
    { lat: 18.466, lng: -66.118 },
    { lat: 32.321, lng: -64.757 },
  ];
  // Define the LatLng coordinates for the polygon's inner path.
  // Note that the points forming the inner path are wound in the
  // opposite direction to those in the outer path, to form the hole.
  const innerCoords = [
    { lat: 28.745, lng: -70.579 },
    { lat: 29.57, lng: -67.514 },
    { lat: 27.339, lng: -66.668 },
  ];
  // Construct the polygon, including both paths.
  const bermudaTriangle = new google.maps.Polygon({
    paths: [outerCoords, innerCoords],
    strokeColor: "#FFC107",
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: "#FFC107",
    fillOpacity: 0.35,
  });

  bermudaTriangle.setMap(map);
}

window.initMap = initMap;
להצגת דוגמה

ניסיון של דוגמה

מלבנים

בנוסף לכיתה הגנרית Polygon, ממשק ה-API של JavaScript במפות Google כולל כיתה ספציפית לאובייקטים מסוג Rectangle, כדי לפשט את היצירה שלהם.

הוספת מלבן

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

בניגוד ל-Polygon, לא מגדירים paths ל-Rectangle. במקום זאת, למלבן יש מאפיין bounds שמגדיר את הצורה שלו על ידי ציון google.maps.LatLngBounds למלבן.

המאפיין editable של המלבן מציין אם המשתמשים יכולים לערוך את הצורה. מידע נוסף זמין בקטע צורות שניתנות לעריכה על ידי משתמשים שבהמשך. באופן דומה, אפשר להגדיר את הנכס draggable כדי לאפשר למשתמשים לגרור את המלבן.

TypeScript

// This example adds a red rectangle to a map.

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 11,
      center: { lat: 33.678, lng: -116.243 },
      mapTypeId: "terrain",
    }
  );

  const rectangle = new google.maps.Rectangle({
    strokeColor: "#FF0000",
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: "#FF0000",
    fillOpacity: 0.35,
    map,
    bounds: {
      north: 33.685,
      south: 33.671,
      east: -116.234,
      west: -116.251,
    },
  });
}

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

JavaScript

// This example adds a red rectangle to a map.
function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 11,
    center: { lat: 33.678, lng: -116.243 },
    mapTypeId: "terrain",
  });
  const rectangle = new google.maps.Rectangle({
    strokeColor: "#FF0000",
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: "#FF0000",
    fillOpacity: 0.35,
    map,
    bounds: {
      north: 33.685,
      south: 33.671,
      east: -116.234,
      west: -116.251,
    },
  });
}

window.initMap = initMap;
להצגת דוגמה

ניסיון של דוגמה

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

TypeScript

// This example creates a rectangle based on the viewport
// on any 'zoom-changed' event.

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 11,
      center: { lat: 40.74852, lng: -73.981687 },
      mapTypeId: "terrain",
    }
  );

  const rectangle = new google.maps.Rectangle();

  map.addListener("zoom_changed", () => {
    // Get the current bounds, which reflect the bounds before the zoom.
    rectangle.setOptions({
      strokeColor: "#FF0000",
      strokeOpacity: 0.8,
      strokeWeight: 2,
      fillColor: "#FF0000",
      fillOpacity: 0.35,
      map,
      bounds: map.getBounds() as google.maps.LatLngBounds,
    });
  });
}

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

JavaScript

// This example creates a rectangle based on the viewport
// on any 'zoom-changed' event.
function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 11,
    center: { lat: 40.74852, lng: -73.981687 },
    mapTypeId: "terrain",
  });
  const rectangle = new google.maps.Rectangle();

  map.addListener("zoom_changed", () => {
    // Get the current bounds, which reflect the bounds before the zoom.
    rectangle.setOptions({
      strokeColor: "#FF0000",
      strokeOpacity: 0.8,
      strokeWeight: 2,
      fillColor: "#FF0000",
      fillOpacity: 0.35,
      map,
      bounds: map.getBounds(),
    });
  });
}

window.initMap = initMap;
להצגת דוגמה

ניסיון של דוגמה

הסרת מלבן

כדי להסיר מלבן מהמפה, צריך לבצע קריאה ל-method‏ setMap() ולהעביר את הערך null כארגומנטים.

rectangle.setMap(null);

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

מעגלים

בנוסף לכיתה הגנרית Polygon, ממשק ה-API של JavaScript במפות Google כולל כיתה ספציפית לאובייקטים מסוג Circle, כדי לפשט את היצירה שלהם.

הוספת מעגל

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

בניגוד ל-Polygon, לא מגדירים paths ל-Circle. במקום זאת, לעיגול יש שני מאפיינים נוספים שמגדירים את הצורה שלו:

  • center מציין את google.maps.LatLng של מרכז המעגל.
  • radius מציין את הרדיוס של המעגל, במטרים.

המאפיין editable של העיגול מציין אם המשתמשים יכולים לערוך את הצורה. מידע נוסף זמין בקטע צורות שניתנות לעריכה על ידי משתמשים בהמשך. באופן דומה, אפשר להגדיר את המאפיין draggable כדי לאפשר למשתמשים לגרור את העיגול.

TypeScript

// This example creates circles on the map, representing populations in North
// America.

// First, create an object containing LatLng and population for each city.

interface City {
  center: google.maps.LatLngLiteral;
  population: number;
}

const citymap: Record<string, City> = {
  chicago: {
    center: { lat: 41.878, lng: -87.629 },
    population: 2714856,
  },
  newyork: {
    center: { lat: 40.714, lng: -74.005 },
    population: 8405837,
  },
  losangeles: {
    center: { lat: 34.052, lng: -118.243 },
    population: 3857799,
  },
  vancouver: {
    center: { lat: 49.25, lng: -123.1 },
    population: 603502,
  },
};

function initMap(): void {
  // Create the map.
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 4,
      center: { lat: 37.09, lng: -95.712 },
      mapTypeId: "terrain",
    }
  );

  // Construct the circle for each value in citymap.
  // Note: We scale the area of the circle based on the population.
  for (const city in citymap) {
    // Add the circle for this city to the map.
    const cityCircle = new google.maps.Circle({
      strokeColor: "#FF0000",
      strokeOpacity: 0.8,
      strokeWeight: 2,
      fillColor: "#FF0000",
      fillOpacity: 0.35,
      map,
      center: citymap[city].center,
      radius: Math.sqrt(citymap[city].population) * 100,
    });
  }
}

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

JavaScript

const citymap = {
  chicago: {
    center: { lat: 41.878, lng: -87.629 },
    population: 2714856,
  },
  newyork: {
    center: { lat: 40.714, lng: -74.005 },
    population: 8405837,
  },
  losangeles: {
    center: { lat: 34.052, lng: -118.243 },
    population: 3857799,
  },
  vancouver: {
    center: { lat: 49.25, lng: -123.1 },
    population: 603502,
  },
};

function initMap() {
  // Create the map.
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 4,
    center: { lat: 37.09, lng: -95.712 },
    mapTypeId: "terrain",
  });

  // Construct the circle for each value in citymap.
  // Note: We scale the area of the circle based on the population.
  for (const city in citymap) {
    // Add the circle for this city to the map.
    const cityCircle = new google.maps.Circle({
      strokeColor: "#FF0000",
      strokeOpacity: 0.8,
      strokeWeight: 2,
      fillColor: "#FF0000",
      fillOpacity: 0.35,
      map,
      center: citymap[city].center,
      radius: Math.sqrt(citymap[city].population) * 100,
    });
  }
}

window.initMap = initMap;
להצגת דוגמה

ניסיון של דוגמה

הסרת מעגל

כדי להסיר עיגול מהמפה, צריך לבצע קריאה ל-method‏ setMap() ולהעביר את הערך null כארגומנטים.

circle.setMap(null);

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

צורות שאפשר לערוך ולגרור

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

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

הגדרת צורה כניתנת לעריכה

אפשר להגדיר כל צורה (קווים פוליגונליים, פוליגונים, עיגולים ומלבנים) כצורה שניתנת לעריכה על ידי משתמשים. לשם כך, צריך להגדיר את editable כ-true באפשרויות של הצורה.

var bounds = {
  north: 44.599,
  south: 44.490,
  east: -78.443,
  west: -78.649
};

// Define a rectangle and set its editable property to true.
var rectangle = new google.maps.Rectangle({
  bounds: bounds,
  editable: true
});

להצגת דוגמה

איך הופכים צורה לניתנת לגרירה

כברירת מחדל, הצורה שציירתם במפה תהיה קבועה במיקום שלה. כדי לאפשר למשתמשים לגרור צורה למיקום אחר במפה, צריך להגדיר את הערך של draggable ל-true באפשרויות הצורה.

var redCoords = [
  {lat: 25.774, lng: -80.190},
  {lat: 18.466, lng: -66.118},
  {lat: 32.321, lng: -64.757}
];

// Construct a draggable red triangle with geodesic set to true.
new google.maps.Polygon({
  map: map,
  paths: redCoords,
  strokeColor: '#FF0000',
  strokeOpacity: 0.8,
  strokeWeight: 2,
  fillColor: '#FF0000',
  fillOpacity: 0.35,
  draggable: true,
  geodesic: true
});

כשמפעילים גרירה על פוליגון או קו פוליגוני, כדאי גם להגדיר את הפוליגון או הקו הפוליגוני כגיאודטיים על ידי הגדרת המאפיין geodesic לערך true.

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

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

מידע נוסף על מערכות קואורדינטות זמין במדריך בנושא קואורדינטות של מפה ושל משבצת.

במפה הבאה מוצגים שני משולשים באותו גודל ובאותו פרופורציות. המאפיין geodesic של המשולש האדום מוגדר לערך true. שימו לב איך הצורה משתנה ככל שהוא נע צפונה.

להצגת דוגמה

האזנה לאירועי עריכה

כשעורכים צורה, אירוע מופעל בסיום העריכה. האירועים האלה מפורטים בהמשך.

צורה אירועים
מעגל radius_changed
center_changed
פוליגון insert_at
remove_at
set_at

צריך להגדיר את המאזין בנתיב של הפוליגון. אם לפוליגון יש כמה נתיבים, צריך להגדיר מאזין לכל נתיב.

מצולע פתוח insert_at
remove_at
set_at

צריך להגדיר את המאזין בנתיב של קו הפוליגון.

מלבן bounds_changed

קטעי קוד שימושיים:

google.maps.event.addListener(circle, 'radius_changed', function() {
  console.log(circle.getRadius());
});

google.maps.event.addListener(outerPath, 'set_at', function() {
  console.log('Vertex moved on outer path.');
});

google.maps.event.addListener(innerPath, 'insert_at', function() {
  console.log('Vertex removed from inner path.');
});

google.maps.event.addListener(rectangle, 'bounds_changed', function() {
  console.log('Bounds changed.');
});

דוגמה לטיפול באירוע עריכה על מלבן: הצגת דוגמה.

האזנה לאירועי גרירה

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

אירוע תיאור
dragstart האירוע מופעל כשהמשתמש מתחיל לגרור את הצורה.
drag האירוע מופעל שוב ושוב בזמן שהמשתמש גורר את הצורה.
dragend האירוע מופעל כשהמשתמש מפסיק לגרור את הצורה.

מידע נוסף על טיפול באירועים זמין במסמכי התיעוד בנושא אירועים.