# Mapbox 3D Globe Visualization - Progressive Web-Enhanced Specification
## Core Challenge
Create progressively sophisticated Mapbox GL JS 3D globe visualizations that improve with each iteration by integrating knowledge from Mapbox documentation, tutorials, and examples. Each iteration should represent a measurable improvement in visual design, interactivity, data handling, or technical implementation using the globe projection feature.
## Output Requirements
**Directory Naming**: `mapbox_globe_[iteration_number]/`
**Content Structure**: Multi-file Mapbox application
```
mapbox_globe_[iteration_number]/
├── index.html # Main HTML with Mapbox GL JS setup
├── src/
│ ├── index.js # Core visualization logic
│ └── data/
│ └── data.js # Embedded GeoJSON or data
├── README.md # Documentation of iteration
└── CLAUDE.md # Project guidelines
```
### index.html Template
```html
Globe Viz [N]: [Descriptive Title]
```
### src/index.js Template
```js
// Mapbox access token (use public example token or placeholder)
mapboxgl.accessToken = 'pk.example...';
// Initialize map with globe projection
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/[style]',
projection: 'globe',
center: [lng, lat],
zoom: 1.5
});
map.on('load', () => {
// Configure globe atmosphere
map.setFog({...});
// Add data source
map.addSource('data-source', {...});
// Add visualization layers
map.addLayer({...});
// Add interactions
// Popups, filters, animations
});
// Add controls
map.addControl(new mapboxgl.NavigationControl());
```
## Progressive Enhancement Dimensions
### **Visual Complexity Evolution**
- **Iteration 1-3**: Single layer visualizations (heatmap OR points OR choropleth)
- **Iteration 4-6**: Multi-layer compositions (heatmap + points, choropleth + labels)
- **Iteration 7-10**: Advanced features (3D extrusions, custom markers, animations)
- **Iteration 11+**: Innovative techniques (custom shaders, WebGL layers, data-driven styling)
### **Data Handling Sophistication**
- **Basic**: Static GeoJSON with <100 features, simple properties
- **Intermediate**: Multiple data sources, 100-1000 features, property-based styling
- **Advanced**: Dynamic data loading, large datasets (1000+ features), spatial queries
- **Expert**: Real-time data, vector tiles, spatial analysis, clustering
### **Interactivity Progression**
- **Basic**: Hover popups, basic zoom/pan
- **Intermediate**: Click events, filtering, layer toggling, search
- **Advanced**: Timeline scrubbing, multi-view coordination, custom controls
- **Expert**: Data-driven animations, user data input, export capabilities
### **Technical Implementation**
- **Foundation**: Basic globe setup, single data source, simple layer
- **Intermediate**: Multiple layers, Mapbox expressions, custom styling
- **Advanced**: 3D features, custom projections, performance optimization
- **Expert**: Custom sources, WebGL integration, advanced expressions
## Web Research Integration Strategy
### **Initial Priming Phase URLs**
The priming agent should research these foundational topics:
1. Mapbox GL JS overview and globe projection
2. GeoJSON format and data structures
3. Mapbox expression syntax fundamentals
4. Layer types and their use cases
5. Performance best practices
### **Iteration URL Strategy**
**URL Categories for Progressive Learning:**
1. **Foundation URLs (Iterations 1-5)**
- Mapbox GL JS getting started guide
- Globe projection documentation
- Basic layer types (circle, heatmap, fill)
- GeoJSON data format
- Simple popup and interaction patterns
2. **Intermediate URLs (Iterations 6-12)**
- Advanced layer styling with expressions
- Multiple data sources and layers
- Custom controls and UI elements
- Data-driven styling techniques
- Filter and query features
- Color ramps and visual variables
3. **Advanced URLs (Iterations 13-20)**
- 3D extrusions and fill-extrusion layers
- Custom markers and symbols
- Animation techniques (flyTo, easeTo, camera animations)
- Vector tiles integration
- Spatial queries and analysis
- Performance optimization for large datasets
4. **Expert URLs (Iterations 21+)**
- Custom WebGL layers
- Advanced projections
- Real-time data integration
- Custom shaders and rendering
- Complex spatial analysis
- Multi-map coordination
### **Dynamic URL Discovery**
Each iteration can also perform targeted web searches:
- "Mapbox GL JS [specific technique] example"
- "Mapbox globe [feature] tutorial"
- "Mapbox expressions [use case]"
- "Mapbox performance optimization [context]"
## Visualization Themes to Explore
### **Economic & Development**
- Global GDP, income distribution, trade flows
- Economic indicators, development indices
- Stock market data, cryptocurrency adoption
- Tourism, remittances, foreign investment
### **Environmental & Climate**
- Temperature anomalies, climate zones
- Deforestation, biodiversity hotspots
- Carbon emissions, renewable energy adoption
- Ocean currents, air quality, pollution
### **Demographic & Social**
- Population density, urbanization
- Life expectancy, health indicators
- Education levels, literacy rates
- Migration patterns, refugee flows
### **Infrastructure & Technology**
- Internet penetration, mobile usage
- Transportation networks, airports
- Renewable energy installations
- Satellite coverage, telecommunications
### **Political & Historical**
- Election results, democracy indices
- Conflict zones, peace agreements
- Colonial history, independence dates
- Language families, cultural regions
### **Natural Phenomena**
- Earthquake activity, volcanic zones
- Hurricane/typhoon tracks
- Meteor impact sites
- Magnetic field variations
## Data Format Requirements
### **GeoJSON Structure**
```javascript
const data = {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point", // or Polygon, LineString
"coordinates": [longitude, latitude]
},
"properties": {
"name": "Country/Region Name",
"value": 12345,
"category": "Type",
"year": 2024,
// Additional properties for styling/popups
}
}
]
};
```
### **Data Quality Standards**
- Accurate geographic coordinates (longitude, latitude order)
- Meaningful property names
- Realistic values appropriate to theme
- 50-500 features for most visualizations
- Include metadata (year, source, data type)
## Quality Standards
### **Code Quality**
- **Mapbox Best Practices**: Proper layer ordering, efficient expressions, appropriate layer types
- **Performance**: Smooth 60fps rotation, efficient rendering for large datasets
- **Accessibility**: Keyboard navigation, screen reader support where applicable
- **Responsive**: Works on desktop and mobile with appropriate touch controls
- **Clean Code**: Well-organized, commented, maintainable JavaScript
### **Visual Excellence**
- **Clarity**: Data patterns immediately apparent on the globe
- **Aesthetics**: Professional color schemes, appropriate visual hierarchy
- **Globe Features**: Proper atmosphere, stars, fog effects
- **Innovation**: Creative visualization approaches for data
- **Usability**: Intuitive controls, clear legends, informative popups
### **Web Integration Quality**
- **Source Attribution**: Each iteration credits the web source
- **Knowledge Application**: Demonstrates specific Mapbox technique learned
- **Progressive Learning**: Shows clear improvement over previous iteration
- **Novel Synthesis**: Combines multiple web sources creatively
## Iteration Evolution Pattern
### **Knowledge Accumulation Strategy**
**Wave 1 (Iterations 1-5): Foundation Building**
- Master basic globe setup and projection
- Learn fundamental layer types (circle, heatmap, fill)
- Establish data handling and GeoJSON patterns
- Focus: Technical competence with globe basics
**Wave 2 (Iterations 6-12): Enhancement & Styling**
- Advanced expression syntax
- Multi-layer compositions
- Interactive controls and filtering
- Focus: Visual sophistication and user experience
**Wave 3 (Iterations 13-20): Advanced Features**
- 3D extrusions and depth
- Custom markers and symbols
- Animation and camera control
- Focus: Technical excellence and innovation
**Wave 4 (Iterations 21+): Mastery & Experimentation**
- Custom WebGL layers
- Real-time data integration
- Novel visualization techniques
- Focus: Pushing Mapbox boundaries
### **Improvement Metrics**
Each iteration should improve on at least one dimension:
- **Visual Design**: Better colors, styling, visual hierarchy
- **Interactivity**: New interaction patterns, smoother animations
- **Data Handling**: More complex data, better transformations
- **Performance**: Faster rendering, optimized expressions
- **Features**: New Mapbox capabilities, creative techniques
- **Code Quality**: Cleaner architecture, better patterns
## Mapbox-Specific Techniques
### **Globe Projection Features**
```js
// Atmosphere and space effects
map.setFog({
color: 'rgba(12, 20, 39, 0.9)',
'high-color': 'rgba(36, 92, 223, 0.4)',
'horizon-blend': 0.4,
'space-color': '#000000',
'star-intensity': 0.6
});
// Globe-specific camera positioning
map.flyTo({
center: [lng, lat],
zoom: 2,
pitch: 45, // Tilt for 3D effect
bearing: -17.6 // Rotation
});
```
### **Layer Types for Global Data**
- **Heatmap**: Density visualization (temperature, population, incidents)
- **Circle**: Point data with size/color encoding (cities, events, locations)
- **Fill**: Choropleth maps (country-level statistics)
- **Fill-extrusion**: 3D country/region extrusions
- **Line**: Connections, routes, boundaries
- **Symbol**: Labels, custom markers, icons
### **Expression Patterns**
```js
// Data-driven styling with expressions
'circle-radius': [
'interpolate',
['linear'],
['get', 'value'],
0, 5,
1000, 20
]
// Conditional styling
'circle-color': [
'step',
['get', 'value'],
'#green', 100,
'#yellow', 500,
'#red'
]
// Zoom-based styling
'circle-opacity': [
'interpolate',
['linear'],
['zoom'],
1, 0.8,
5, 1
]
```
## Web Research Directive
### **For Each Iteration**
**Before Generating:**
1. Fetch assigned Mapbox web URL
2. Analyze the content for:
- New Mapbox GL JS techniques or APIs
- Layer types and styling patterns
- Expression syntax examples
- Interaction patterns
- Performance considerations
3. Identify 1-3 specific learnings to apply
4. Plan how to integrate with globe projection
**During Generation:**
1. Apply new technique from web source
2. Maintain globe projection focus
3. Document what was learned
4. Ensure genuine improvement
**After Generation:**
1. Document web source in README
2. Explain improvement over previous iteration
3. Note future exploration opportunities
## Data Strategy
### **Embedded Data Requirements**
- Use realistic, meaningful global datasets
- Data appropriate for globe-scale visualization
- Include enough features to demonstrate technique (50-500 typically)
- Proper GeoJSON format with valid coordinates
- Include metadata for popups and legends
### **Example Data Domains**
- **Economic**: GDP, trade, wages, development indices
- **Climate**: Temperature, precipitation, emissions
- **Social**: Population, education, health metrics
- **Infrastructure**: Cities, airports, networks
- **Natural**: Earthquakes, volcanoes, resources
- **Political**: Elections, conflicts, boundaries
## Ultra-Thinking Directive
Before each iteration, deeply consider:
**Web Source Integration:**
- What Mapbox technique does the URL teach?
- How can this improve globe visualizations?
- What makes this technique globe-appropriate?
- How can I adapt this learning creatively?
**Progressive Improvement:**
- What was limiting in the previous iteration?
- How does this represent genuine progress?
- What new Mapbox capability am I adding?
- How am I building on accumulated knowledge?
**Globe-Specific Design:**
- Does this work well on a spherical projection?
- How does data appear from different angles?
- Are interactions intuitive for globe navigation?
- How do layers compose in 3D space?
**Technical Excellence:**
- Am I using Mapbox expressions correctly?
- Is performance optimized for globe rendering?
- Are layer types appropriate for the data?
- What edge cases should I handle?
**Visual Communication:**
- Does the globe effectively show global patterns?
- Are visual encodings clear and intuitive?
- Do colors work on the dark globe style?
- What story does this visualization tell?
## Success Criteria
A successful Mapbox globe iteration demonstrates:
1. **Web Learning Applied**: Specific Mapbox technique from URL implemented correctly
2. **Measurable Improvement**: Clear advancement over previous iteration
3. **Globe-Appropriate**: Design works well with spherical projection
4. **Technical Quality**: Proper Mapbox patterns, performant rendering
5. **Visual Excellence**: Professional design, effective data communication
6. **Self-Contained**: Works perfectly as standalone application
7. **Documented**: Clear explanation of improvements and web source attribution
## File Organization Standards
### **index.html**
- Minimal, semantic HTML structure
- Mapbox GL JS v3.0+ CDN links
- Style block for overlays and UI
- Script loading order: data → main
### **src/index.js**
- Map initialization with globe projection
- Fog/atmosphere configuration
- Data source and layer setup
- Interaction handlers
- Control additions
- Well-commented code
### **src/data/data.js**
- Properly formatted GeoJSON
- Realistic data values
- Descriptive property names
- Exposed as global variable
### **README.md**
- Iteration number and title
- Web source attribution
- Techniques learned and applied
- How to run locally
- Data sources
- Improvement over previous iteration
### **CLAUDE.md**
- Local server commands
- Code guidelines
- Mapbox-specific patterns
- Project structure notes
Generate globe visualizations that progressively evolve from basic global data displays to masterful, interactive 3D visualizations through systematic web-enhanced learning of Mapbox GL JS capabilities.
---
## Shared Architecture (Added 2025)
### **Problem Identified**
Iterations 10-13 encountered critical failures:
- **Invalid Mapbox tokens**: Placeholder strings instead of valid tokens
- **Layer type mismatches**: Fill layers (requires Polygons) used with Point data
- **Inconsistent data generation**: Each demo generated data differently
- **No validation**: Silent failures with no error messages
### **Solution: Shared Module Architecture**
A centralized architecture was created in `mapbox_test/shared/` to ensure reliability across all visualizations:
```
mapbox_test/
├── shared/ # Shared infrastructure for all demos
│ ├── mapbox-config.js # Token management & validation
│ ├── data-generator.js # Unified data generation
│ └── layer-factory.js # Best-practice layer creation
│
├── mapbox_globe_10/ # Uses shared architecture
├── mapbox_globe_11/ # Uses shared architecture
├── mapbox_globe_12/ # Uses shared architecture
├── mapbox_globe_13/ # Uses shared architecture
└── mapbox_globe_14/ # Reference implementation
```
#### **1. mapbox-config.js** - Token Management
- Centralized token storage (uses validated token from globe_14)
- Automatic validation on startup
- User-friendly error messages for invalid tokens
- Auto-applies token to mapboxgl when imported
```javascript
import { MAPBOX_CONFIG } from '../shared/mapbox-config.js';
MAPBOX_CONFIG.applyToken(); // Validates and applies
```
#### **2. data-generator.js** - Unified Data Generation
- 60+ countries with accurate geographic centroids
- Consistent Point geometry structure (no Polygon issues)
- Realistic vaccine-specific metrics
- WHO regions and income level classifications
- Exports: `generateVaccineData(vaccineType)`
```javascript
import { generateVaccineData } from '../shared/data-generator.js';
const polioData = generateVaccineData('polio');
```
Supported vaccine types:
- `'polio'` - Coverage by year (1980-2020), eradication status
- `'measles'` - Dose 1/2 coverage, cases, deaths (2023)
- `'smallpox'` - Endemic status by decade (1950-1980)
- `'dtp3'` - Coverage, zero-dose children, mortality rates
- `'hpv'` - Coverage, cancer prevention metrics
#### **3. layer-factory.js** - Best-Practice Layers
- Pre-configured circle layers (work with Point geometries)
- Color scales: coverage, diverging, purple, blue-orange
- Atmosphere presets: default, dark, medical, purple
- Helper methods: legends, popups, hover effects
```javascript
import { LayerFactory, COLOR_SCALES } from '../shared/layer-factory.js';
const factory = new LayerFactory(map);
// Apply atmosphere
factory.applyGlobeAtmosphere({ theme: 'medical' });
// Create optimized circle layer
const layer = factory.createCircleLayer({
id: 'vaccine-circles',
source: 'vaccine-data',
sizeProperty: 'population',
colorProperty: 'coverage_2020',
colorScale: 'coverage'
});
```
### **Migration Pattern**
**Updated HTML:**
```html
```
**Updated JavaScript:**
```javascript
import { MAPBOX_CONFIG } from '../../shared/mapbox-config.js';
import { generateVaccineData } from '../../shared/data-generator.js';
import { LayerFactory, COLOR_SCALES } from '../../shared/layer-factory.js';
// Generate data (Point geometries)
const vaccineData = generateVaccineData('polio');
// Initialize map with validated config
const map = new mapboxgl.Map({
container: 'map',
...MAPBOX_CONFIG.getMapOptions({
center: [20, 20],
zoom: 1.5
})
});
map.on('load', () => {
const factory = new LayerFactory(map);
factory.applyGlobeAtmosphere({ theme: 'medical' });
// Add data source
map.addSource('vaccine-data', {
type: 'geojson',
data: vaccineData
});
// Create circle layer (not fill!)
const layer = factory.createCircleLayer({
id: 'vaccine-circles',
source: 'vaccine-data',
colorProperty: 'coverage_2020',
colorScale: 'coverage'
});
map.addLayer(layer);
});
```
### **Key Benefits**
✅ **Reliability**: Valid token guaranteed across all demos
✅ **Consistency**: All demos use same data structure and patterns
✅ **Maintainability**: Fix bugs in shared modules, not individual demos
✅ **Performance**: Best-practice layers with optimized expressions
✅ **Validation**: Automatic error detection and user feedback
✅ **Scalability**: Easy to add new vaccine types or demos
### **Documentation**
Complete migration guide available at:
`mapbox_test/CRITICAL_FIXES_GUIDE.md`
### **Additional Fixes (Null Handling & Color Scales)**
**Problem**: Mapbox expressions failed when encountering null/undefined property values:
- Console errors: `Expected value to be of type number, but found null instead`
- Invalid filter configurations: `array expected, null found`
- Color scales semantically reversed (high coverage showed red instead of green)
**Solutions Applied**:
1. **Null Value Handling with Coalesce**:
- All `['get', 'property']` expressions wrapped with `['coalesce', ['get', 'property'], 0]`
- Applies to: size expressions, color expressions, filter expressions
- Defaults null/undefined to 0 to prevent expression failures
2. **Conditional Filter Assignment**:
- Layer factory only adds `filter` property when truthy (not null)
- Prevents Mapbox validation errors for null filters
3. **Color Scale Correction**:
- `coverageReverse` scale colors were backwards
- **Before**: 0% = green, 100% = red (inverted semantics)
- **After**: 0-20% = red (bad), 80-100% = green (good)
- Now correctly shows high coverage as green (positive) and low coverage as red (critical)
**Code Examples**:
```javascript
// Fixed: Color expression with coalesce
createColorExpression(property, scaleName) {
const expression = [
'interpolate',
['linear'],
['coalesce', ['get', property], 0] // ✅ Handles null values
];
// ... add color stops
return expression;
}
// Fixed: Conditional filter assignment
const layer = { id, type: 'circle', source, paint: {...} };
if (filter) { // ✅ Only add if not null
layer.filter = filter;
}
return layer;
// Fixed: coverageReverse scale
coverageReverse: {
domain: [0, 100],
colors: ['#d73027', '#fc8d59', '#fee08b', '#d9ef8b', '#91cf60', '#1a9850'],
// Red (0%) → Orange → Yellow → Lt.Green → Green (100%)
stops: [0, 20, 40, 60, 80, 100]
}
```
### **Status**
- **Fixed**: globe_10 (Polio), globe_11 (Measles), globe_12 (Smallpox), globe_13 (DTP3)
- **Null Handling**: All shared layer factory expressions now resilient to null values
- **Color Semantics**: Coverage scales correctly show green=good, red=bad
- **Reference**: globe_14 (HPV) - original working implementation
- **All demos now render correctly with visible, properly-colored data on the globe**