An interactive web application for visualizing and managing data about districts and district-like cities in Belarus. The project collects, processes, and displays comprehensive information including:
- Area (square kilometers)
- Population
- Administrative centers
- District boundaries (GeoJSON)
- Bordering districts and cities
- Regional groupings
- Interactive Map: Leaflet-based web interface for exploring district boundaries
- Data Visualization: SVG maps with district groupings and adjacency information
- Regional Management: Create and manage custom regional groupings
- REST API: Flask backend providing district data in multiple formats
- Automated Data Collection: Web scraping from Wikipedia sources
belmap/
├── src/
│ ├── collectors/ # Data collection scripts
│ │ ├── collect_districts.py # Scrape district data from Wikipedia
│ │ ├── fetch_district_boundaries.py # Fetch GeoJSON boundaries
│ │ └── generate_geojson.py # Generate GeoJSON data
│ ├── models/ # Data models (Pydantic)
│ │ └── district.py
│ ├── server/ # Flask web server
│ │ └── app.py
│ └── web/ # Frontend application
│ ├── index.html # Interactive map interface
│ ├── app.js # Frontend logic
│ ├── styles.css
│ └── assets/ # SVG maps and visualizations
├── data/ # Processed data files
│ ├── districts.json # District information
│ ├── district_boundaries.json # Boundary coordinates
│ └── mappings.csv # District code mappings
├── districts.json # Main district data
├── district_adjacency.json # District neighbor information
└── requirements.txt # Python dependencies
The data is automatically collected from official Wikipedia pages for all regions of Belarus:
- Clone the repository:
git clone <repository-url>
cd belmap- Create and activate virtual environment:
python3 -m venv venv
source venv/bin/activate # On Linux/Mac
# or
venv\Scripts\activate # On Windows- Install dependencies:
pip install -r requirements.txtStart the Flask development server:
python src/server/app.pyThe application will be available at http://localhost:5000
Collect district information from Wikipedia:
python src/collectors/collect_districts.pyFetch district boundaries (GeoJSON):
python src/collectors/fetch_district_boundaries.pyGenerate GeoJSON for mapping:
python src/collectors/generate_geojson.pyProcess district neighbor relationships:
python extract_adjacency.pyConvert and transform district data formats:
python transform_districts.pyGET /- Main web interfaceGET /api/districts- Get all districts dataGET /api/districts/geojson- Get districts in GeoJSON formatGET /data/mappings.csv- Get district code mappingsPOST /api/regions- Save regional groupings
- Backend: Python 3.12, Flask
- Data Processing: BeautifulSoup4, Requests, Pydantic, NumPy, SciPy, Shapely
- Frontend: HTML5, JavaScript, Leaflet.js
- Data Formats: JSON, GeoJSON, CSV, SVG
districts.json- Complete district databasedistrict_adjacency.json- District neighbor relationshipsbeldist.svg- SVG visualization of districtsdata/district_boundaries.json- Geographic boundary datadata/regions.json- Custom regional groupings
This project is for educational and informational purposes.