266 lines
8.5 KiB
Markdown
266 lines
8.5 KiB
Markdown
# Globe Visualization 4: Global Digital Infrastructure
|
|
|
|
**Multi-Layer Mapbox Globe Visualization - Iteration 4**
|
|
|
|
This is the fourth iteration in a progressive learning series demonstrating advanced Mapbox GL JS techniques with globe projection. This iteration synthesizes all previous learnings and introduces multi-layer composition with choropleth maps.
|
|
|
|
## 🌍 Theme: Global Digital Infrastructure & Connectivity
|
|
|
|
This visualization showcases the global digital landscape by combining multiple data layers:
|
|
|
|
- **Internet penetration rates** by country (choropleth/fill layer)
|
|
- **Major tech hubs and internet exchange points** (circle layer)
|
|
- **International connectivity links** between major hubs (line layer)
|
|
- **City labels** for top-tier tech centers (symbol layer)
|
|
|
|
## 📚 Learning Progression
|
|
|
|
### Previous Iterations:
|
|
1. **Iteration 1**: Population circles - Single layer visualization with basic circle styling
|
|
2. **Iteration 2**: Temperature heatmap - Single layer with heatmap type and color gradients
|
|
3. **Iteration 3**: Economic data-driven styling - Advanced expressions and conditional styling
|
|
4. **Iteration 4** (this): Multi-layer composition synthesizing all techniques
|
|
|
|
## 🔬 Web-Enhanced Learning
|
|
|
|
**Research Source**: Mapbox GL JS Choropleth Documentation
|
|
**URL**: https://docs.mapbox.com/mapbox-gl-js/example/updating-choropleth/
|
|
|
|
### Key Choropleth Techniques Learned:
|
|
|
|
1. **Fill Layer Configuration**
|
|
- Using `type: 'fill'` for geographic region visualization
|
|
- Applying filters to show/hide specific features
|
|
- Managing multiple fill layers with different zoom levels
|
|
|
|
2. **Data-Driven Styling**
|
|
- `interpolate` expressions for smooth color gradients
|
|
- Linear color scales mapping data values to visual properties
|
|
- Dynamic paint properties based on feature attributes
|
|
|
|
3. **Layer Composition**
|
|
- Combining fill, circle, line, and symbol layers
|
|
- Managing layer order and visibility
|
|
- Coordinating opacity across multiple layers
|
|
|
|
4. **Interactive Features**
|
|
- Zoom-based layer visibility
|
|
- Dynamic legend updates
|
|
- Filter-based layer management
|
|
|
|
## 🎨 Multi-Layer Architecture
|
|
|
|
### Layer 1: Country Choropleth (Fill as Circles)
|
|
- **Data**: 100+ countries with internet penetration percentages
|
|
- **Styling**: Color interpolation from red (low) to green (high)
|
|
- **Features**: Data-driven circle sizing based on population
|
|
- **Expression**: Linear interpolation across 8 color stops (0-100%)
|
|
|
|
### Layer 2: Tech Hub Circles
|
|
- **Data**: 80 major tech cities and internet exchange points
|
|
- **Styling**: Size based on importance score (4-18px radius)
|
|
- **Colors**:
|
|
- Tech Hubs: #4ecdc4 (cyan)
|
|
- Internet Exchanges: #ff6b6b (red)
|
|
- **Expression**: Categorical matching for hub types
|
|
|
|
### Layer 3: Connection Lines
|
|
- **Data**: International links between Tier 1 hubs (importance ≥ 85)
|
|
- **Styling**: Gradient lines with data-driven width
|
|
- **Features**: Line gradient from cyan to green
|
|
- **Expression**: Width based on connection strength (400-1000 range)
|
|
|
|
### Layer 4: City Labels
|
|
- **Data**: Labels for top tech hubs (importance ≥ 75)
|
|
- **Styling**: Size scaled by importance (10-14px)
|
|
- **Features**: White text with black halo for readability
|
|
|
|
## 🎛️ Advanced Features
|
|
|
|
### Interactive Controls
|
|
|
|
**Layer Toggles**:
|
|
- Show/hide countries, cities, connections, and labels independently
|
|
- Real-time layer visibility management
|
|
|
|
**Filter Controls**:
|
|
- **Region Filter**: View specific continents (6 regions + all)
|
|
- **Metric Filter**: Switch between internet penetration and digital index
|
|
- Dynamic legend updates based on selected metric
|
|
|
|
**Opacity Sliders**:
|
|
- Independent opacity control for each layer type
|
|
- Real-time visual feedback with percentage display
|
|
- Range: 0-100% for fine-tuned transparency
|
|
|
|
### Visual Design
|
|
|
|
**Color Schemes**:
|
|
- **Internet Penetration**: 8-stop gradient (red → yellow → green)
|
|
- **Digital Index**: 4-stop grayscale gradient
|
|
- **Tech Hubs**: Cyan for hubs, red for exchanges
|
|
- **Connections**: Cyan-to-green gradient lines
|
|
|
|
**Globe Features**:
|
|
- Atmosphere with space-color and star-intensity
|
|
- Auto-rotation when not interacting
|
|
- Smooth transitions between data views
|
|
|
|
### Data Visualization
|
|
|
|
**Country Data** (100+ countries):
|
|
- Internet penetration: 15-99%
|
|
- Digital infrastructure index: 25-95
|
|
- Population: 1.2M - 1.4B
|
|
- Regional grouping: 6 regions
|
|
|
|
**City Data** (80 tech hubs):
|
|
- Tier 1 (90-100): 8 global capitals
|
|
- Tier 2 (75-89): 16 major centers
|
|
- Tier 3 (60-74): 26 emerging cities
|
|
- Tier 4 (45-59): 30 regional centers
|
|
|
|
**Connection Network**:
|
|
- Automatic generation between Tier 1 hubs
|
|
- Cross-country connections only
|
|
- Strength-based line width
|
|
|
|
## 🔧 Technical Implementation
|
|
|
|
### Multi-Layer Composition Pattern
|
|
|
|
```javascript
|
|
// Layer ordering (bottom to top):
|
|
1. country-fills (choropleth base)
|
|
2. hub-connections (lines)
|
|
3. tech-hubs (circles)
|
|
4. city-labels (symbols)
|
|
```
|
|
|
|
### Data-Driven Expression Examples
|
|
|
|
**Choropleth Color Interpolation**:
|
|
```javascript
|
|
'circle-color': [
|
|
'interpolate',
|
|
['linear'],
|
|
['get', 'internetPenetration'],
|
|
0, '#cc0000', // Dark red
|
|
30, '#ff3300', // Red-orange
|
|
50, '#ff9900', // Orange
|
|
70, '#33cc33', // Light green
|
|
90, '#004d00' // Dark green
|
|
]
|
|
```
|
|
|
|
**Size-Based Scaling**:
|
|
```javascript
|
|
'circle-radius': [
|
|
'interpolate',
|
|
['linear'],
|
|
['get', 'importance'],
|
|
45, 4, // Small cities
|
|
75, 9, // Medium cities
|
|
100, 18 // Major hubs
|
|
]
|
|
```
|
|
|
|
**Categorical Styling**:
|
|
```javascript
|
|
'circle-color': [
|
|
'match',
|
|
['get', 'type'],
|
|
'Internet Exchange', '#ff6b6b',
|
|
'Tech Hub', '#4ecdc4',
|
|
'#95e1d3' // fallback
|
|
]
|
|
```
|
|
|
|
### Filter Implementation
|
|
|
|
**Region-Based Filtering**:
|
|
```javascript
|
|
// Countries
|
|
map.setFilter('country-fills', ['==', ['get', 'region'], region]);
|
|
|
|
// Cities (join with country data)
|
|
const regionCountries = countriesData.features
|
|
.filter(f => f.properties.region === region)
|
|
.map(f => f.properties.country);
|
|
map.setFilter('tech-hubs', ['in', ['get', 'country'], ['literal', regionCountries]]);
|
|
```
|
|
|
|
## 📊 Statistics Dashboard
|
|
|
|
**Global Metrics Display**:
|
|
- Total countries: 100+
|
|
- Average internet penetration: ~66%
|
|
- Total tech hubs: 80
|
|
- Tier 1 hubs: 8
|
|
- International links: Dynamic count
|
|
|
|
## 🎯 Synthesis of Learning
|
|
|
|
This visualization demonstrates cumulative mastery of:
|
|
|
|
1. **From Iteration 1**: Circle layer fundamentals, basic styling, globe projection
|
|
2. **From Iteration 2**: Color gradients, data-driven opacity, visual layering
|
|
3. **From Iteration 3**: Advanced expressions, conditional styling, property matching
|
|
4. **New in Iteration 4**:
|
|
- Multi-layer composition and ordering
|
|
- Choropleth/fill techniques adapted for circles
|
|
- Layer visibility management
|
|
- Cross-layer filtering and coordination
|
|
- Multiple simultaneous data sources
|
|
- Advanced UI control integration
|
|
|
|
## 🚀 Usage
|
|
|
|
1. Open `index.html` in a modern web browser
|
|
2. Use layer toggles to show/hide different visualization layers
|
|
3. Apply region filters to focus on specific continents
|
|
4. Switch metrics to view different country-level data
|
|
5. Adjust opacity sliders for optimal visual composition
|
|
6. Click countries or cities for detailed information
|
|
7. Let the globe auto-rotate or interact manually
|
|
|
|
## 📁 Project Structure
|
|
|
|
```
|
|
mapbox_globe_4/
|
|
├── index.html # Main visualization page
|
|
├── src/
|
|
│ ├── index.js # Multi-layer orchestration logic
|
|
│ └── data/
|
|
│ ├── countries-data.js # 100+ countries with metrics
|
|
│ └── cities-data.js # 80 tech hubs with connections
|
|
├── README.md # This documentation
|
|
└── CLAUDE.md # Development context
|
|
```
|
|
|
|
## 🎓 Key Takeaways
|
|
|
|
**Multi-Layer Mastery**:
|
|
- Successfully combined 4 different layer types (circle, line, symbol)
|
|
- Implemented coordinated visibility and opacity controls
|
|
- Created dynamic filtering across multiple data sources
|
|
|
|
**Choropleth Techniques**:
|
|
- Adapted fill layer concepts to circle-based visualization
|
|
- Implemented smooth color interpolation for data representation
|
|
- Created responsive legends that update with metric changes
|
|
|
|
**Advanced Interactivity**:
|
|
- Layer-specific controls with real-time feedback
|
|
- Cross-layer filtering maintaining data relationships
|
|
- Comprehensive popup information for both countries and cities
|
|
|
|
**Design Excellence**:
|
|
- Professional dark theme with glassmorphism effects
|
|
- Gradient-based connection visualization
|
|
- Sophisticated color schemes for multiple data dimensions
|
|
|
|
---
|
|
|
|
*This iteration represents the culmination of progressive Mapbox learning, combining single-layer mastery with multi-layer composition to create a comprehensive, interactive global visualization.*
|