examples/get-started/pure-js/google-maps/app.js (50 lines of code) (raw):

/* global document, google */ import {GoogleMapsOverlay as DeckOverlay} from '@deck.gl/google-maps'; import {GeoJsonLayer, ArcLayer} from '@deck.gl/layers'; // source: Natural Earth http://www.naturalearthdata.com/ via geojson.xyz const AIR_PORTS = 'https://d2ad6b4ur7yvpq.cloudfront.net/naturalearth-3.3.0/ne_10m_airports.geojson'; // Set your Google Maps API key here or via environment variable const GOOGLE_MAPS_API_KEY = process.env.GoogleMapsAPIKey; // eslint-disable-line const GOOGLE_MAPS_API_URL = `https://maps.googleapis.com/maps/api/js?key=${GOOGLE_MAPS_API_KEY}&libraries=visualization&v=3.39`; function loadScript(url) { const script = document.createElement('script'); script.type = 'text/javascript'; script.src = url; const head = document.querySelector('head'); head.appendChild(script); return new Promise(resolve => { script.onload = resolve; }); } loadScript(GOOGLE_MAPS_API_URL).then(() => { const map = new google.maps.Map(document.getElementById('map'), { center: {lat: 51.47, lng: 0.45}, zoom: 5 }); const overlay = new DeckOverlay({ layers: [ new GeoJsonLayer({ id: 'airports', data: AIR_PORTS, // Styles filled: true, pointRadiusMinPixels: 2, pointRadiusScale: 2000, getRadius: f => 11 - f.properties.scalerank, getFillColor: [200, 0, 80, 180], // Interactive props pickable: true, autoHighlight: true, onClick: info => // eslint-disable-next-line info.object && alert(`${info.object.properties.name} (${info.object.properties.abbrev})`) }), new ArcLayer({ id: 'arcs', data: AIR_PORTS, dataTransform: d => d.features.filter(f => f.properties.scalerank < 4), // Styles getSourcePosition: f => [-0.4531566, 51.4709959], // London getTargetPosition: f => f.geometry.coordinates, getSourceColor: [0, 128, 200], getTargetColor: [200, 0, 80], getWidth: 1 }) ] }); overlay.setMap(map); });