Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

qasem-talaee/python-mbtiles-server

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MBTiles Server with Custom Styles

Overview

This project is a lightweight MBTiles server built with Flask, designed to serve vector tiles from an MBTiles database and render them on a web-based map with custom styling. It leverages a thread pool for efficient tile request handling and includes a Leaflet-based frontend for map visualization. The server delivers .pbf (Protocol Buffer Format) tiles and static files, with zoom-dependent styles defined in styles.js for features like water, landcover, roads, and points of interest (POIs). Sample MBTiles files can be downloaded from https://osm.dbtc.link/mbtiles/.

alt text alt text

Features

  • Flask-based Server: Serves vector tiles via /tiles/<z>/<x>/<y>.pbf.
  • Thread Pool: Manages concurrent tile requests with a custom ThreadPool class.
  • Custom Styling: Defines map feature styles in styles.js based on zoom levels.
  • MBTiles Support: Queries SQLite-based MBTiles databases and decompresses .pbf tiles.
  • Static File Serving: Delivers index.html and other assets for map display.
  • Configurable Environment: Uses a .env file for database path, host, port, and thread settings.

Requirements

Dependencies are listed in req.txt:

  • Flask (3.1.1)
  • blinker (1.9.0)
  • click (8.2.1)
  • colorama (0.4.6)
  • itsdangerous (2.2.0)
  • Jinja2 (3.1.6)
  • MarkupSafe (3.0.2)
  • Werkzeug (3.1.3)

Install them with:

pip install -r req.txt

Setup Instructions

  1. Clone the Repository:

    git clone <repository-url>
    cd <repository-directory>
  2. Download an MBTiles File:

    • Sample MBTiles files are available at https://osm.dbtc.link/mbtiles/. For example, download 2024-12-27-europe.mbtiles or 2025-08-02-planet.mbtiles.
    • Save the file to a data/ directory in the project root (create the directory if it doesn’t exist).
  3. Configure Environment:

    • Edit the .env file to set:
      • DATABASE: Path to the MBTiles file (e.g., data/2024-12-27-europe.mbtiles).
      • HOST: Server host (default: localhost).
      • PORT: Server port (default: 8080).
      • MAX_THREAD: Maximum threads (default: 10).
      • MAX_QUEUE_SIZE: Maximum task queue size (default: 2000).
      • TOKEN: Optional authentication token.
  4. Run the Server:

    python start.py

    The server will start at http://localhost:8080 (or the configured host/port).

  5. Access the Map:

    • Open http://localhost:8080 in a browser to view the demo map using the downloaded MBTiles file.
    • Static files (index.html, styles.js) are served from the Flask static folder.

Project Structure

  • start.py: Main Flask app for serving tiles and static files.
  • thread_pool.py: Custom thread pool for concurrent tile requests.
  • env_parser.py: Parses .env for configuration.
  • database_handler.py: Handles SQLite queries and tile decompression.
  • index.html: Leaflet-based frontend for map visualization.
  • styles.js: Custom styles for map features.
  • req.txt: Python dependencies.
  • .env: Environment configuration.

Custom Styles

The styles.js file defines zoom-dependent styles (0–22) for:

  • Water: Blue fill with varying opacity.
  • Waterways: Styled lines with labels for rivers/canals.
  • Landcover: Colors for forests, grasslands, wetlands, etc.
  • Roads: Varying weights/colors by road type and zoom.
  • POIs: Colored markers for hospitals, schools, etc., with labels.
  • Place Labels: Bold city/town names at higher zooms.

Usage

  • Access tiles at /tiles/<z>/<x>/<y>.pbf for map clients.
  • View the demo map at / with a downloaded MBTiles file.
  • Customize styles.js to adjust map appearance.

Notes

  • Ensure downloaded MBTiles files contain valid, decompressible .pbf tiles.
  • Available sample files at https://osm.dbtc.link/mbtiles/ include regional datasets (e.g., Netherlands, Europe, Africa) and a global planet dataset.
  • Monitor console logs for debugging tile or database issues.

About

A lightweight Flask-based MBTiles server for serving vector tiles from MBTiles databases, with a Leaflet frontend for map visualization and custom zoom-dependent styles

Topics

Resources

Stars

Watchers

Forks

Contributors

Morty Proxy This is a proxified and sanitized view of the page, visit original site.