examples/get-started/pure-js/mapbox/app.js (62 lines of code) (raw):

import {Deck} from '@deck.gl/core'; import {GeoJsonLayer, ArcLayer} from '@deck.gl/layers'; import mapboxgl from 'mapbox-gl'; // 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'; const INITIAL_VIEW_STATE = { latitude: 51.47, longitude: 0.45, zoom: 4, bearing: 0, pitch: 30 }; // Set your mapbox token here mapboxgl.accessToken = process.env.MapboxAccessToken; // eslint-disable-line const map = new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/light-v9', // Note: deck.gl will be in charge of interaction and event handling interactive: false, center: [INITIAL_VIEW_STATE.longitude, INITIAL_VIEW_STATE.latitude], zoom: INITIAL_VIEW_STATE.zoom, bearing: INITIAL_VIEW_STATE.bearing, pitch: INITIAL_VIEW_STATE.pitch }); export const deck = new Deck({ canvas: 'deck-canvas', width: '100%', height: '100%', initialViewState: INITIAL_VIEW_STATE, controller: true, onViewStateChange: ({viewState}) => { map.jumpTo({ center: [viewState.longitude, viewState.latitude], zoom: viewState.zoom, bearing: viewState.bearing, pitch: viewState.pitch }); }, 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 }) ] });