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