Blazing fast and lightweight PostGIS, MBtiles and PMtiles tile server, tile generation, and mbtiles tooling.
Go to file
Yuri Astrakhan 2cdd373044
Refactor mbtiles lib, mbtiles tool tests & CI (#702)
* Broke up martin-mbtiles into multiple files
* Made all mbtiles functions take a `SqliteExecutor` -- this way they
can be used with any SQLX connection structs - either a pool connection
or an individual non-pooled connection.
* Simplified mbtiles bin a bit - I realized there is really no need to
pretty print the output for the single value retrieval. Easier to just
dump it to console as is.
* Bump martin-mbtiles to v0.2.0
* Minor fixes in tools docs, cargo.toml, and justfile
* MBTiles tool Integration tests and release publishing

Major thanks to the
[stackoverflow](https://stackoverflow.com/questions/76394665/how-to-pass-sqlx-connection-a-mut-trait-as-a-fn-parameter-in-rust/76395111)
quick reply by @cafce25 on how to use generic sql executor!
2023-06-04 00:54:50 +02:00
.cargo-husky/hooks bump to 0.6.2 2022-12-13 20:14:07 -05:00
.github Refactor mbtiles lib, mbtiles tool tests & CI (#702) 2023-06-04 00:54:50 +02:00
benches Require PostGIS 3 and use ST_TileEnvelope (#497) 2022-11-30 18:57:27 +02:00
demo Cleaning up mdbook (#697) 2023-06-02 01:16:41 -04:00
docs Refactor mbtiles lib, mbtiles tool tests & CI (#702) 2023-06-04 00:54:50 +02:00
homebrew-formula add brew Formula (#623) 2023-05-24 00:34:12 -04:00
martin-mbtiles Refactor mbtiles lib, mbtiles tool tests & CI (#702) 2023-06-04 00:54:50 +02:00
martin-tile-utils Refactor mbtiles lib, mbtiles tool tests & CI (#702) 2023-06-04 00:54:50 +02:00
src Refactor mbtiles lib, mbtiles tool tests & CI (#702) 2023-06-04 00:54:50 +02:00
tests Refactor mbtiles lib, mbtiles tool tests & CI (#702) 2023-06-04 00:54:50 +02:00
.dockerignore Improve Coverage tooling (#535) 2022-12-27 06:56:27 +00:00
.gitignore Move files to demo/ 2023-05-29 20:36:24 -04:00
arm64.Dockerfile feat/add arm64 docker support (#613) 2023-03-28 06:28:55 +00:00
Cargo.lock Refactor mbtiles lib, mbtiles tool tests & CI (#702) 2023-06-04 00:54:50 +02:00
Cargo.toml Refactor mbtiles lib, mbtiles tool tests & CI (#702) 2023-06-04 00:54:50 +02:00
CHANGELOG.md Migrate some urbica/martin -> maplibre/martin (#347) 2022-06-11 10:51:41 +03:00
CODE_OF_CONDUCT.md feat: clean up readme and code of conduct (#382) 2022-08-11 07:06:12 -04:00
docker-compose.yml Service startup await clippy lint (#700) 2023-06-02 15:37:19 +00:00
Dockerfile feat/add arm64 docker support (#613) 2023-03-28 06:28:55 +00:00
justfile Refactor mbtiles lib, mbtiles tool tests & CI (#702) 2023-06-04 00:54:50 +02:00
LICENSE-APACHE Clean up licensing per on-boarding (#364) 2022-07-06 08:25:45 -04:00
LICENSE-MIT Clean up licensing per on-boarding (#364) 2022-07-06 08:25:45 -04:00
logo.png docs: ✏️ add notes on debugging 2019-02-04 20:22:04 +03:00
nginx.conf fix: tiles attribute in tilejson with x-rewrite-url (#266) 2021-10-15 18:19:36 +03:00
README.md readme cleanups 2023-06-02 17:00:19 -04:00
release.toml docs: update CHANGELOG.md 2021-10-18 16:15:26 +03:00
rustfmt.toml sort use-statements during fmt (#376) 2022-08-06 12:48:10 -04:00
SECURITY_POLICY.txt Create SECURITY_POLICY.txt (#489) 2023-02-04 19:06:17 -05:00

Martin

Book docs.rs docs Slack chat GitHub crates.io version Security audit CI build

Martin is a tile server able to generate and serve vector tiles on the fly from large PostGIS databases, PMTile, and MBTile files, allowing multiple tile sources to be dynamically combined into one. Martin optimizes for speed and heavy traffic, and is written in Rust.

See Martin book for complete documentation.

Martin

Installation

See installation instructions in the Martin book.

Prerequisites: If using Martin with PostgreSQL database, you must install PostGIS with at least v3.0+, v3.1+ recommended.

You can download martin from GitHub releases page.

Platform Downloads (latest)
Linux 64-bit
macOS 64-bit
Windows 64-bit

If you are using macOS and Homebrew you can install martin using Homebrew tap.

brew tap maplibre/martin https://github.com/maplibre/martin.git
brew install maplibre/martin/martin

Running Martin Service

See running instructions in the Martin book.

Martin supports any number of PostgreSQL/PostGIS database connections with geospatial-enabled tables and tile-producing SQL functions, as well as PMTile and MBTile files as tile sources.

Martin can auto-discover tables and functions using a connection string. A PG connection string can also be passed via the DATABASE_URL environment variable.

Each tile source will have a TileJSON endpoint.

Examples

# publish all tables and functions from a single database
export DATABASE_URL=postgresql://user:password@host:port/database
martin

# same as above, but passing connection string via CLI, together with a directory of .mbtiles/.pmtiles files  
martin postgresql://user:password@host:port/database path/to/dir

# publish all discovered tables/funcs from two DBs
# and generate config file with all detected sources
martin postgres://... postgres://...  --save-config config.yaml

# use configuration file instead of auto-discovery
martin --config config.yaml

Docker Example

See Docker instructions in the Martin book.

Martin is also available as a Docker image. You could either share a configuration file from the host with the container via the -v param, or you can let Martin auto-discover all sources e.g. by passing DATABASE_URL or specifying the .mbtiles/.pmtiles files.

export PGPASSWORD=postgres  # secret!
docker run -p 3000:3000 \
           -e PGPASSWORD \
           -e DATABASE_URL=postgresql://user@host:port/db \
           -v /path/to/config/dir:/config \
           ghcr.io/maplibre/martin --config /config/config.yaml

API

See API documentation in the Martin book.

Martin data is available via the HTTP GET endpoints:

URL Description
/ Status text, that will eventually show web UI
/catalog List of all sources
/{sourceID} Source TileJSON
/{sourceID}/{z}/{x}/{y} Map Tiles
/{source1},...,{sourceN} Composite Source TileJSON
/{source1},...,{sourceN}/{z}/{x}/{y} Composite Source Tiles
/health Martin server health check: returns 200 OK

Documentation

See Martin book for complete documentation.