A GeoJSON-based Geography Game meta dataset with browser-based editing tools.
GG-GeoJSON/
├── data/
│   ├── original/          # Original GeoJSON files (untouched)
│   │   ├── countries.geojson
│   │   ├── countries-original.geojson
│   │   ├── countries-test.geojson
│   │   └── countries-simplified.geojson
│   └── geometa/           # GeoMeta dataset files (for editing)
│       ├── GG-countries-test.geojson
│       └── GG-countries-test-null.geojson
├── schemas/               # JSON schemas for validation
│   ├── geometa-schema.json
│   └── geojson-with-geometa-schema.json
├── scripts/               # Node.js processing scripts
│   ├── create-null-geometa.js
│   ├── add-geometa.js
│   └── add-geometa-simplified.js
└── README.md
countries.geojson(23MB) - Original world countries GeoJSON (Natural Earth)countries-test.geojson(20KB) - Test subset with 5 countriescountries-simplified.geojson(2MB) - Simplified polygons for browser performance
GG-countries-test.geojson(25KB) - Test file with sample GeoMeta dataGG-countries-test-null.geojson(21KB) - Test file with null GeoMeta values
geometa-schema.json- Standalone GeoMeta property schemageojson-with-geometa-schema.json- Complete GeoJSON schema with GeoMeta
Each GeoJSON feature can have a geo_meta property with the following fields:
{
  "driving_side": ["left", "right"],           // Array or null
  "hemisphere": ["N", "S", "E"],               // Array or null
  "road_lines": {                              // Object or null
    "inner": [{"number": "single", "color": "white", "pattern": "solid"}],
    "outer": [{"number": "single", "color": "white", "pattern": "solid"}]
  },
  "road_quality": ["maintained", "poor"],      // Array or null
  "has_official_coverage": true,               // Boolean or null
  "arid_lush": {"min": 1, "max": 5},          // Quintile scale or null
  "cold_hot": {"min": 1, "max": 5},           // Quintile scale or null
  "flat_mountainous": {"min": 1, "max": 5},   // Quintile scale or null
  "soil_color": ["red", "brown", "gray", "black", "other"] // Array or null
}# Create test file with null values
node scripts/create-null-geometa.js
# Create test file with sample data
node scripts/add-geometa.js
# Create simplified file with default data
node scripts/add-geometa-simplified.jsUse the files in data/geometa/ for browser-based editing:
- Start with 
GG-countries-test-null.geojsonfor empty data entry - Use 
GG-countries-test.geojsonfor testing with sample data 
Development Setup:
# Start development server from project root
python3 -m http.server 8000
# Then access the application at:
# http://localhost:8000/web/The web interface includes a Schema Manager tab for viewing and editing the GeoMeta schema:
- View Schema: See the current schema structure in JSON format
 - Edit Fields: Click "Edit" on any field to modify its properties
 - Add Fields: Click "Add Field" to create new GeoMeta fields
 - Delete Fields: Remove fields from the schema (with confirmation)
 - Export Schemas: Download updated schema files for use in the project
 
Supported field types:
- String: Simple text fields
 - Number: Numeric values
 - Boolean: True/false values
 - Array: Lists of values
 - Enum: Predefined value lists
 - Range: Min/max numeric ranges
 - Object: Complex nested structures
 
Schema changes automatically update the data editor interface.
- All fields support null values for gradual data entry
 - Quintile scales use 1-5 range (1=lowest, 5=highest)
 - Arrays support multiple values per country
 - Original files are never modified, only copied to geometa folder
 - Large original GeoJSON files are excluded from git (see .gitignore)