A TypeScript/React test application for quickly testing deck.gl with different basemap providers and configurations. Uses React function components throughout.
- Multiple Basemap Providers: Google Maps, Mapbox, MapLibre, and MapLibre Globe
- Framework Variants: Pure JS and React implementations (configurations from get-started examples)
- Interleaved Mode Toggle: Test both interleaved (shared GL context) and overlaid modes
- Live Metrics: Monitor Device Pixel Ratio and canvas dimensions in real-time
- TypeScript: Fully typed for better development experience
The basemap-browser uses a two-React-roots architecture:
src/
├── types.ts # TypeScript type definitions
├── constants.ts # Shared constants
├── layers.ts # Shared layer configurations
├── examples/
│ └── index.ts # Example configurations
├── examples-pure-js/ # Pure JS implementations
│ ├── google-maps.ts
│ ├── mapbox.ts
│ ├── maplibre.ts
│ └── index.ts
├── examples-react/ # React implementations
│ ├── google-maps-component.tsx
│ ├── mapbox-component.tsx
│ ├── maplibre-component.tsx
│ └── index.ts
├── control-panel.tsx # Control panel (separate React root)
└── index.tsx # Entry point
# From the examples/basemap-browser directory
yarn
yarn start-localOpen http://localhost:8080 in your browser.
-
Window Resize Test: Resize your browser window and verify that:
- Layers redraw correctly
- Canvas dimensions update
- No visual artifacts appear
-
Device Pixel Ratio Test: Move the browser window between screens with different pixel ratios (e.g., from Retina to non-Retina display) and verify that:
- DPR value updates in the control panel
- Layers scale correctly without blur
- Canvas drawing buffer dimensions adjust
-
Interleaved vs Overlaid: Toggle the "Interleaved Mode" checkbox and verify:
- Both modes work correctly
- Resize and DPR changes work in both modes
- Layers render correctly in both modes
The basemap browser covers these configurations:
| Provider | Framework | Interleaved |
|---|---|---|
| Google Maps | Pure JS | true |
| Google Maps | Pure JS | false |
| Google Maps | React | true |
| Google Maps | React | false |
| Mapbox | Pure JS | true |
| Mapbox | Pure JS | false |
| Mapbox | React | true |
| Mapbox | React | false |
| MapLibre | Pure JS | true |
| MapLibre | Pure JS | false |
| MapLibre | React | true |
| MapLibre | React | false |
| MapLibre Globe | Pure JS | true |
| MapLibre Globe | Pure JS | false |
| MapLibre Globe | React | true |
| MapLibre Globe | React | false |
To test Google Maps examples, you need to set environment variables:
export GoogleMapsAPIKey="your-api-key"
export GoogleMapsMapId="your-map-id"Or add them to your .env file. The vite config will automatically inject them.
To add a new basemap example:
- Add layer configuration to
src/layers.tsif needed - Add example config to
src/examples/index.ts:
'New Example': {
name: 'New Example',
mapType: 'maplibre', // or 'mapbox' or 'google-maps'
framework: 'react', // or 'pure-js'
mapStyle: MAPLIBRE_STYLE,
initialViewState: {
latitude: 51.47,
longitude: 0.45,
zoom: 4,
bearing: 0,
pitch: 30
},
getLayers: getAirportLayers
}This browser extracts the core layer configurations from the get-started examples into reusable functions:
- Layer configs in
src/layers.tsmatch those inexamples/get-started/*/app.js - Constants in
src/constants.tsare shared across all examples - Example configurations in
src/examples/index.tsuse the same initial view states
- Google Maps in overlaid mode (interleaved: false) may show a blank canvas when entering fullscreen