Вы можете добавлять на карту различные фигуры. Фигура — это объект на карте, привязанный к системе координат LatLng
. API JavaScript для создания фотореалистичных 3D-карт в Maps поддерживает добавление линий и многоугольников на карту.
Полилинии
Чтобы нарисовать линию на карте, используйте ломаную линию. Класс Polyline3DElement
определяет линейное наложение соединённых отрезков линий на карте. Объект Polyline
состоит из массива точек LatLng
и создаёт серию отрезков линий, соединяющих эти точки в упорядоченной последовательности.
Добавить полилинию
Конструктор 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
объекты могут описывать сложные формы, в том числе:
- Несколько несмежных областей, определенных одним полигоном.
- Места с отверстиями.
- Пересечения одной или нескольких областей.
Чтобы определить сложную форму, используйте многоугольник с несколькими контурами.
Добавить многоугольник
Поскольку многоугольная область может включать несколько отдельных контуров, свойство paths объекта Polygon
определяет массив массивов, каждый из которых имеет тип MVCArray
. Каждый массив определяет отдельную последовательность упорядоченных координат LatLng
.
Для базовых полигонов, состоящих только из одного контура, можно построить Polygon
используя один массив координат LatLng
. API JavaScript для фотореалистичных 3D-карт в Maps преобразует этот массив в массив массивов при построении и сохраняет его в свойстве 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();