צורות וקווים

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

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

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

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

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

ה-constructor של Polyline מקבל קבוצה של Polyline3DElementOptions שמציינת את הקואורדינטות LatLng של הקו, וקבוצה של סגנונות כדי לשנות את ההתנהגות החזותית של קו הפוליגון.

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

  • outerColor: צבע HTML הקסדצימלי בפורמט "#FFFFFF".
  • outerWidth: ערך מספרי בין 0.0 ל-1.0, שמתורגם כאחוז מ-strokeWidth.
  • strokeColor: צבע HTML הקסדצימלי בפורמט "#FFFFFF".
  • strokeWidth: רוחב הקו בפיקסלים.
  • geodesic: אם הקצוות של הפוליגון יהיו לפי עקומת כדור הארץ או יימשכו כקווים ישרים.
  • altitudeMode: האופן שבו מתפרשים רכיבי הגובה בקואורדינטות
  • drawsOccludedSegments: ערך בוליאני שמציין אם יש לצייר חלקים מהפוליגון שמסתירים אובייקטים (כמו בניינים).
  • extruded: ערך בוליאני שמציין אם יש לחבר את קו הפוליגון לקרקע.
async function init() {
    const { Map3DElement, MapMode } = await google.maps.importLibrary("maps3d");

    const map = new Map3DElement({
      center: { lat: 37.772675996068915, lng: -122.3978382542777, altitude: 2500 },
      tilt: 45,
      heading: 5.9743656,
      mode: MapMode.HYBRID,
    });

    const { Polyline3DElement, AltitudeMode } = await google.maps.importLibrary("maps3d");

    const polylineOptions = {
      strokeColor: "#EA433580",
      strokeWidth: 10,
      altitudeMode: "ABSOLUTE",
      extruded: true,
      drawsOccludedSegments: true,
    }
    const polyline = new google.maps.maps3d.Polyline3DElement(polylineOptions)

    polyline.coordinates = [
      {lat: 37.80515638571346, lng: -122.4032569467164},
      {lat: 37.80337073509504, lng: -122.4012878349353},
      {lat: 37.79925208843463, lng: -122.3976697250461},
      {lat: 37.7989102378512, lng: -122.3983408725656},
      {lat: 37.79887832784348, lng: -122.3987094864192},
      {lat: 37.79786443410338, lng: -122.4066878788802},
      {lat: 37.79549248916587, lng: -122.4032992702785},
      {lat: 37.78861484290265, lng: -122.4019489189814},
      {lat: 37.78618687561075, lng: -122.398969592545},
      {lat: 37.7892310309145, lng: -122.3951458683092},
      {lat: 37.7916358762409, lng: -122.3981969390652}
    ];

    map.append(polyline)
    document.body.append(map);
}
init();

קווים פוליגונים אינטראקטיביים

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

async function init() {
  const colors = ["red", "blue", "green", "yellow"];

  const { Map3DElement, MapMode, Polyline3DInteractiveElement } = await google.maps.importLibrary("maps3d");

  const map = new Map3DElement({
    center: {lat: 0, lng: -180, altitude: 15000000},
    mode: MapMode.HYBRID,
  });

  document.body.append(map);

  const polyline = new Polyline3DInteractiveElement({
    coordinates: [
      { lat: 37.772, lng: -122.214 },
      { lat: 21.291, lng: -157.821 },
      { lat: -18.142, lng: 178.431 },
      { lat: -27.467, lng: 153.027 }
    ],
    strokeColor: 'red',
    strokeWidth: 10,
  });

  polyline.addEventListener('gmp-click', (event) => {
    polyline.strokeColor = colors[~~(Math.random() * colors.length)];
  });

  map.append(polyline);
}

init();

פוליגונים

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

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

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

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

הוספת מצולע

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

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

async function init() {
    const { Map3DElement, MapMode } = await google.maps.importLibrary("maps3d");

    const map3DElement = new Map3DElement({
        center: { lat: 43.6425, lng: -79.3871, altitude: 400 },
        range: 1000,
        tilt: 60,
        mode: MapMode.SATELLITE,
    });

    const { Polygon3DElement, AltitudeMode } = await google.maps.importLibrary("maps3d");

    const polygonOptions = {
        strokeColor: "#EA433580",
        strokeWidth: 4,
        fillColor: "#0000FF80",
        altitudeMode: "ABSOLUTE",
        extruded: true,
        drawsOccludedSegments: true,
    }

    const towerPolygon = new google.maps.maps3d.Polygon3DElement(polygonOptions);

    towerPolygon.outerCoordinates = [
        { lat: 43.6427196, lng: -79.3876802, altitude: 600 },
        { lat: 43.6421742, lng: -79.3869184, altitude: 600 },
        { lat: 43.643001, lng: -79.3866475, altitude: 600 }
    ];

    map3DElement.append(towerPolygon);
    document.body.append(map3DElement);
}
init();

פוליגונים אינטראקטיביים

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

async function init() {
  const colors = ["red", "blue", "green", "yellow"];
  const { Map3DElement, MapMode } = await google.maps.importLibrary("maps3d");

  const map3DElement = new Map3DElement({
      center: { lat: 43.6425, lng: -79.3871, altitude: 400 },
      range: 1000,
      tilt: 60,
      mode: MapMode.SATELLITE,
  });

  const { Polygon3DInteractiveElement, AltitudeMode } = await google.maps.importLibrary("maps3d");

  const polygonOptions = {
      strokeColor: "#EA433580",
      strokeWidth: 4,
      fillColor: "#0000FF80",
      altitudeMode: "ABSOLUTE",
      extruded: true,
      drawsOccludedSegments: true,
  }

  const towerPolygon = new google.maps.maps3d.Polygon3DInteractiveElement(polygonOptions);

  towerPolygon.outerCoordinates = [
      { lat: 43.6427196, lng: -79.3876802, altitude: 600 },
      { lat: 43.6421742, lng: -79.3869184, altitude: 600 },
      { lat: 43.643001, lng: -79.3866475, altitude: 600 }
  ];

    towerPolygon.addEventListener('gmp-click', (event) => {
      towerPolygon.strokeColor = colors[~~(Math.random() * colors.length)];
    });

  map3DElement.append(towerPolygon);

  document.body.append(map3DElement);
}

init();