Do mapy możesz dodawać różne kształty. Kształt to obiekt na mapie powiązany z układem współrzędnych LatLng. Mapy 3D w interfejsie Maps JavaScript API obsługują dodawanie do mapy linii i wielokątów.
Linie łamane
Aby narysować linię na mapie, użyj linii łamanej. Klasa Polyline3DElement definiuje liniową nakładkę połączonych segmentów linii na mapie. Obiekt Polyline3DElement składa się z tablicy lokalizacji LatLng i tworzy serię segmentów linii, które łączą te lokalizacje w uporządkowaną sekwencję.
Dodawanie linii łamanej
Konstruktor Polyline3DElement przyjmuje zestaw Polyline3DElementOptions określający współrzędne LatLng linii oraz zestaw stylów, które dostosowują wygląd linii łamanej.
Obiekty linii łamanej są rysowane na mapie jako seria prostych segmentów. Podczas tworzenia linii w Polyline3DElementOptions możesz określić spersonalizowane kolory, szerokości, przezroczystości, wysokości i opcje stylów geometrycznych dla jej obrysu. Możesz też zmienić te właściwości po utworzeniu linii. Polilinia obsługuje te style obrysu:
outerColor: szesnastkowy kolor HTML w formacie"#FFFFFF".outerWidth: wartość liczbowa z zakresu od0.0do1.0, która jest interpretowana jako wartość procentowastrokeWidth.strokeColor: szesnastkowy kod koloru HTML w formacie"#FFFFFF".strokeWidth: szerokość linii w pikselach.geodesic: określa, czy krawędzie wielokąta mają być zgodne z krzywizną Ziemi, czy mają być rysowane jako linie proste.altitudeMode: sposób interpretowania komponentów wysokości we współrzędnych.drawsOccludedSegments: wartość logiczna wskazująca, czy mają być rysowane części wielokąta zasłonięte przez obiekty (np. budynki).extruded: wartość logiczna wskazująca, czy linia łamana powinna być połączona z podłożem.
let map; async function init() { const { Map3DElement, Polyline3DElement } = await google.maps.importLibrary('maps3d'); map = new Map3DElement({ center: { lat: 37.7927, lng: -122.402, altitude: 65.93 }, range: 3362.87, tilt: 64.01, heading: 25.0, mode: 'SATELLITE', }); document.body.append(map); const polyline = new Polyline3DElement({ path: [ { 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 }, ], strokeColor: 'blue', outerColor: 'white', strokeWidth: 10, outerWidth: 0.4, altitudeMode: 'RELATIVE_TO_GROUND', // Place it on the ground (as it has no altitude it will just be at ground height). drawsOccludedSegments: true, // Show the line through the buildings or anything else that might get in the way. }); map.append(polyline); } void init();
Interaktywne linie łamane
W tym przykładzie po zarejestrowaniu zdarzenia kliknięcia przełączana jest właściwość drawsOccludedSegments linii łamanej.
let map; async function init() { const { Map3DElement, Polyline3DInteractiveElement } = await google.maps.importLibrary('maps3d'); map = new Map3DElement({ center: { lat: 37.7927, lng: -122.402, altitude: 65.93 }, range: 3362.87, tilt: 64.01, heading: 25.0, mode: 'SATELLITE', }); document.body.append(map); const polyline = new Polyline3DInteractiveElement({ 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 }, ], strokeColor: 'blue', outerColor: 'white', strokeWidth: 10, outerWidth: 0.4, altitudeMode: 'RELATIVE_TO_GROUND', // Place it on the ground (as it has no altitude it will just be at ground height). drawsOccludedSegments: true, // Show the line through the buildings or anything else that might get in the way. }); polyline.addEventListener('gmp-click', function () { // Toggle whether the line draws occluded segments. this.drawsOccludedSegments = !this.drawsOccludedSegments; }); map.append(polyline); } void init();
Wielokąty
Wielokąt reprezentuje obszar zamknięty ścieżką (lub pętlą), który jest zdefiniowany przez serię współrzędnych.
Obiekty Polygon3DElement są podobne do obiektów Polyline3DElement, ponieważ składają się z serii współrzędnych w uporządkowanej sekwencji. Wielokąty są rysowane z obrysem i wypełnieniem. Możesz zdefiniować spersonalizowane kolory i szerokości boków wielokąta (kreski) oraz spersonalizowane kolory i nieprzezroczystość objętego nim obszaru (wypełnienie).
Kolory należy podawać w szesnastkowym formacie HTML. Nazwy kolorów nie są obsługiwane.
Obiekty Polygon3DElement mogą opisywać złożone kształty, w tym:
- Wiele nieprzylegających obszarów zdefiniowanych przez jeden wielokąt.
- Obszary z dziurami.
- Przecięcia co najmniej 1 obszaru.
Aby zdefiniować złożony kształt, użyj wielokąta z wieloma ścieżkami.
Dodaj wielokąt
Ponieważ obszar wielokąta może zawierać kilka oddzielnych ścieżek, właściwość paths obiektu Polygon3DElement określa tablicę tablic. Każda tablica definiuje osobną sekwencję uporządkowanych współrzędnych LatLng.
W przypadku podstawowych wielokątów składających się tylko z jednej ścieżki możesz utworzyć obiekt Polygon3DElement, używając pojedynczej tablicy współrzędnych LatLng. Podczas tworzenia map 3D w interfejsie Maps JavaScript API tablica zostanie przekonwertowana na tablicę tablic, gdy będzie przechowywana we właściwości path.
async function init() { const { Map3DElement, Polygon3DElement } = await google.maps.importLibrary('maps3d'); const map3DElement = new Map3DElement({ center: { lat: 40.6842, lng: -74.0019, altitude: 1000 }, heading: 340, tilt: 70, mode: 'HYBRID', }); const polygonOptions = { strokeColor: '#0000ff80', strokeWidth: 8, fillColor: '#ff000080', drawsOccludedSegments: false, }; const examplePolygon = new Polygon3DElement(polygonOptions); examplePolygon.path = [ { lat: 40.7144, lng: -74.0208 }, { lat: 40.6993, lng: -74.019 }, { lat: 40.7035, lng: -74.0004 }, ]; map3DElement.append(examplePolygon); document.body.append(map3DElement); } void init();
Interaktywne wielokąty
W tym przykładzie po zarejestrowaniu zdarzenia kliknięcia zmieniają się kolory wewnętrzne i zewnętrzne wielokąta.
async function init() { const { Map3DElement, Polygon3DInteractiveElement } = await google.maps.importLibrary('maps3d'); const map = new Map3DElement({ center: { lat: 40.6842, lng: -74.0019, altitude: 1000 }, heading: 340, tilt: 70, mode: 'HYBRID', }); document.body.append(map); const polygonOptions = { strokeColor: '#0000ff80', strokeWidth: 8, fillColor: '#ff000080', drawsOccludedSegments: false, }; const examplePolygon = new Polygon3DInteractiveElement(polygonOptions); examplePolygon.path = [ { lat: 40.7144, lng: -74.0208 }, { lat: 40.6993, lng: -74.019 }, { lat: 40.7035, lng: -74.0004 }, { lat: 40.7144, lng: -74.0208 }, ]; examplePolygon.addEventListener('gmp-click', function (event) { // change the color of the polygon stroke and fill colors to a random alternatives! this.fillColor = randomizeHexColor(this.fillColor); this.strokeColor = randomizeHexColor(this.strokeColor); console.log(event); }); map.append(examplePolygon); } function randomizeHexColor(originalHexColor) { console.log(originalHexColor); const alpha = originalHexColor.substring(7); // Generate random values for Red, Green, Blue (0-255) const r = Math.floor(Math.random() * 256); const g = Math.floor(Math.random() * 256); const b = Math.floor(Math.random() * 256); console.log(r + ' ' + g + ' ' + b); // Convert decimal to 2-digit hex, padding with '0' if needed const rHex = ('0' + r.toString(16)).slice(-2); const gHex = ('0' + g.toString(16)).slice(-2); const bHex = ('0' + b.toString(16)).slice(-2); // Combine parts: '#' + random RGB + original Alpha (if any) return `#${rHex}${gHex}${bHex}${alpha}`; } void init();