Commit Graph

107 Commits

Author SHA1 Message Date
Yuri Astrakhan
a5c5505713
Add dynamic sprites support (#715)
Dynamically create image sprites for MapLibre rendering, given a
directory with images.

### TODO
* [x] Work with @flother to merge these PRs
  * [x] https://github.com/flother/spreet/pull/59  (must have)
  * [x] https://github.com/flother/spreet/pull/57
  * [x] https://github.com/flother/spreet/pull/56
* [ ] https://github.com/flother/spreet/pull/62 (not required but nice
to have, can upgrade later without any code changes)
* [x] Add docs to the book
* [x] Add CLI param, e.g. `--sprite <dir_path>`
* [x] Don't output `.sprites` in auto-genned config when not in use

### API
Per [MapLibre sprites
API](https://maplibre.org/maplibre-style-spec/sprite/), we need to
support the following:
* `/sprite/<sprite_id>.json` metadata about the sprite file - all coming
from a single directory
* `/sprite/<sprite_id>.png` all images combined into a single PNG
* `/sprite/<sprite_id>@2x.json` same but for high DPI devices
* `/sprite/<sprite_id>@2x.png`

Multiple sprite_id values can be combined into one sprite with the same
pattern as for tile joining:
`/sprite/<sprite_id1>,<sprite_id2>,...,<sprite_idN>[.json|.png|@2x.json|@2x.png]`.
No ID renaming is done, so identical names will override one another.

### Configuration
[Config file](https://maplibre.org/martin/config-file.html) and possibly
CLI should have a simple option to serve sprites. The configuration may
look similar to how mbtiles and pmtiles are configured:

```yaml
# Publish sprite images
sprites:
  paths:
    # scan this whole dir, matching all image files, and publishing it as "my_images" sprite source
    - /path/to/my_images
  sources:
    # named source matching source name to a directory
    my_sprites: /path/to/some_dir
```

Implement #705
2023-06-16 08:19:47 -04:00
taiebnoe
9c07fc9150
Update README.md export command (#708)
Quoting DATABASE_URL content variable prevents an issue from the command
export. In case of a string (i.e. password) with given characters (i.e.
'('), it can make the command fail. Quoting it prevents that from
happening.
The issue happened on MacOS with an M1 chip.
2023-06-07 12:53:24 -04:00
Yuri Astrakhan
290a7c18fa readme cleanups 2023-06-02 17:00:19 -04:00
Yuri Astrakhan
81bb9582ed
Cleaning up mdbook (#697)
A lot of book content cleanup, making it a bit shorter and "logical"
(whatever that even means)

To try, run `just mdbook`
2023-06-02 01:16:41 -04:00
Yuri Astrakhan
5d87b086fe improving readme/docs 2023-06-01 16:15:05 -04:00
Yuri Astrakhan
f401152770 API docs cleanup 2023-06-01 11:36:03 -04:00
baishikele
ea3dd46538
simplify readme (#693)
- [x] add slack chat icon 
- [x] merging maplibre/leaflet/mapbox demos into `using with clients`
- [x] cut off a lot contents 
- [x] downgrade contents from h1 to h2 
- [x] remove TOC .[GitHub will now automatically generate a table of
contents in the header when there are 2 or more
headings](https://github.blog/changelog/2021-04-13-table-of-contents-support-in-markdown-files/)
- [x] add link to the book in readme

---------

Co-authored-by: Yuri Astrakhan <yuriastrakhan@gmail.com>
2023-06-01 10:11:42 -04:00
tomeronen
8f020aa6f6
add brew Formula (#623)
Closes:

-  #616
-  #618
2023-05-24 00:34:12 -04:00
baishikele
3b41458493
Update doc about table source naming convention (#672)
#670
2023-05-23 23:13:20 -04:00
baishikele
fe6c207094
In auto-discover, hide geocolumns from tables with multiple ones (#663)
Hi @nyurik I'm trying to resolve #627 .But it's a little bit hard battle
against rust😂
2023-05-22 09:44:21 -04:00
Yuri Astrakhan
39c19c0369 Print connection str from justfile
* update readme with the missing justfile CLI commands
* add `print-conn-str` command to show the full DB connection string
2023-05-16 14:12:24 -04:00
Stepan Kuzmin
79c8ccb452
Migrate to GitHub Docker registry (#602)
Publishes Martin Docker Image to GitHub Docker Registry as
[`ghcr.io/maplibre/martin`](https://ghcr.io/maplibre/martin)

Closes https://github.com/maplibre/martin/issues/601

---------

Co-authored-by: Yuri Astrakhan <YuriAstrakhan@gmail.com>
2023-03-16 16:01:33 -04:00
Yuri Astrakhan
50462d5fbc
[breaking] Use table name as the layer ID for PG tables (#598)
* [BREAKING] Use source ID (table name) as the default layer ID, instead
of `schema.table.column`
* Add support for the optional `layer_id` table config parameter

Fix #595
2023-03-13 07:41:25 -04:00
Yuri Astrakhan
e92722708f
PG TileJSON changes, add vector_layers (#584)
* make tilejson's `name` be the same as the ID of the source (even if
aliased)
* `/catalog` will always show ID, but now it will hide the `name` if it
is the same as the `id`
* make `description` be the longer version, e.g. `public.table.column`
format - not guaranteed to be stable
* make `vector_layers` have the fields auto-discovered in the PG table
* preserve the order of the serialized json fields

Fixes #583
2023-02-22 16:25:48 +00:00
Bart Louwers
6a5595651b
Fix dead link (#581)
I was going through the README when I stumbled upon a dead link. I
_think_ this is the new URL.
2023-02-20 16:00:50 -05:00
Yuri Astrakhan
3fcad46500
fix (re-)compression of images (#579)
Compression middleware turned out to be hard to use for image cases - it
simply looks at the content-encoding, and if not set, tries to compress
if accepted by the client.

Instead, now individual routes are configured with either that
middleware, or for tiles, I decompress and optionally recompress if
applicable.

Now encoding is tracked separately from the tile content, making it
cleaner too. Plus lots of tests for mbtiles & pmtiles.

Fixes #577
2023-02-20 10:44:22 -05:00
Yuri Astrakhan
1f0ca167bc
Feat: max_feature_count query limit (#576)
Implements #384 - ability to limit the number of features included in a
tile from a Postgres table/view.

This allows zoomed-out view of a table with a reasonable speed because
each tile could be limited in size, rather than include millions of
features.

If set on a CLI, overrides whatever is set in the config file (if
given).

Any naming suggestions?
2023-02-17 11:11:16 -05:00
Yuri Astrakhan
23553cccaf cleanup readme versions 2023-02-16 21:20:03 -05:00
Yuri Astrakhan
2d2ede550e release 0.7.0 2023-02-16 20:46:21 -05:00
Yuri Astrakhan
e658258b0e Move README to another file 2022-12-28 22:34:31 -05:00
Yuri Astrakhan
b780defe4a
Fix readme, bump deps (#545)
Fixes #544
2022-12-28 22:23:48 -05:00
Yuri Astrakhan
555a1fccdd
Improve Coverage tooling (#535)
* added manual coverage justfile command
* a lot of small refactorings of config and argument parsing
* feature: support jsonb query param for functions
* cleaned up public/private access
* make all tests populate with a predefined values to avoid issues with
random data
2022-12-27 06:56:27 +00:00
Yuri Astrakhan
2b240b3a34
Implement multi-sourced postgres (#511)
* Support `postgres` config key to be either a list or an object
* Use `PathBuf` instead of `String` where dealing with files
* Merge `SrvConfigBuilder` into `SrvConfig`
* Parse keep_alive as u64
* More config tests
2022-12-22 06:35:29 +00:00
Yuri Astrakhan
476799e431
link to v0.6 docs 2022-12-16 16:39:57 -05:00
Yuri Astrakhan
126005bea0 bump to 0.6.2 2022-12-13 20:14:07 -05:00
Yuri Astrakhan
faf73ffe70 update to v0.6.1 docker compose 2022-12-12 17:35:37 -05:00
Yuri Astrakhan
1d7ce7ba06 readme fix 2022-12-12 10:16:23 -05:00
Yuri Astrakhan
2ee517d135
Support z,x,y and record-returning funcs, table rework (#380)
Can now handle several additional Postgres functions to get a tile, plus
tons of small fixes

### Multiple result variants
* `getmvt(z,x,y) -> [bytea,md5]`  (single row with two columns)
* `getmvt(z,x,y) -> [bytea]` (single row with a single column)
* `getmvt(z,x,y) -> bytea` (value)

### Multiple input parameter variants
* `getmvt(z, x, y)` or `getmvt(zoom, x, y)` (all 3 vars must be
integers)
* `getmvt(z, x, y, url_query)`, where instead of `url_query` it could be
any other name, but must be of type JSON

### Breaking
* srid is now the same type as PG -- `i32`
* renamed config vals `table_sources` and `function_sources` into
`tables` and `functions`

### Features and fixes
* if postgis is v3.1+, uses margin parameter to extend the search box by
the size of the buffer. I think we should make 3.1 minimal required.
* fixes feature ID issue from #466
* fixes mixed case names for schemas, tables and columns, functions and
parameter names per #389
 

### Notes
* More dynamic SQL generation in code instead of using external SQL
files. Those should only be used when they are not parametrized.
* The new function/table discovery mechanism: query for all functions in
the database, and match up those functions with the ones configured (if
any), plus adds all the rest of the un-declared ones if discovery mode
is on.
* During table and function discovery, the code generates a map of
`(PgSqlInfo, FunctionInfo)` (or table) tupples containing SQL needed to
get the tile.
* Auto-discovery mode is currently hidden - the discovery is on only
when no tables or functions are configured. TBD - how to configure it in
the future
* The new system allows for an easy way to auto-discover for the
specific schemas only, solving #47
* predictable order of table/function instantiation
* bounding boxes computed in parallel for all tables (when not
configured)
* proper identifier escaping
* test cleanup

fixes #378
fixes #466
fixes #65
fixes #389
2022-12-10 16:20:42 +02:00
Yuri Astrakhan
ff7c31e16f
Improve pre-push hook and debug page (#509)
* write custom git pre-push via justfile
* fix tests/debug.html incorrectly loading test page
* minor cleanup of the obsolete just targets
2022-12-10 09:40:01 +02:00
Yuri Astrakhan
cfc31fae1b
Update minimal legacy db (#500)
* bump docker compose to use latest supported db and postgis
* update justfile to allow simple legacy testing
* update readme

Followup: implement CI testing -- see #502
2022-12-04 14:34:44 +09:00
Yuri Astrakhan
c1b65796f6
Require PostGIS 3 and use ST_TileEnvelope (#497)
* All tests and internal code now uses ST_TileEnvelope function
* Remove `tile_bbox`
* Rename test function sources for clarity - this will be needed in a
subsequent PR to add other function tests
2022-11-30 18:57:27 +02:00
Yuri Astrakhan
66b7fdc4ea
Multi-source support, new path structure (#456)
Partial implementation of the #430

* New endpoint structure:
  * `GET /` -- a placeholder for the future home page
* `GET /catalog` -- get a list of available sources, as a list of json
blobs.
* `[{id, name, description, attribution, vector_layer}, ...]` (some
fields might be missing)
* `GET /<id>` -- get tilejson for the given source, or a combination of
sources. No `.json` extension
  * `GET /<id>/<z>/<x>/<y>` -- get a tile. No format extension.
  * `GET /health` -- healthcheck
* Introduce a new tile format support crate (using code from the
maplibre/mbtileserve project)
* Removed the `/rpc/...` routes - all source IDs are accessed in the
same way
* Can print auto-generated configuration or save it to a file
* Refactored to support multiple sources from multiple backends, with a
proper naming conflict resolution

TODO:
* benchmarks need to be rewritten - they were relying on some internal
structures that are no longer there. This might be done as a separate PR
due to a very different internal architecture - might need to rethink
benchmarking approaches.
2022-11-26 04:46:40 -05:00
Yuri Astrakhan
b8ac719be8
Rework and consolidate CI (#467)
Rework CI to run tests locally using the VM-installed Postgres on all
target platforms.

### CI jobs
* Build release versions on Linux/Win/Mac and save build results as
output artifacts
* In a separate VMs (Linux/Win/Mac)
* use
[nyurik/action-setup-postgis](https://github.com/nyurik/action-setup-postgis)
to install postgis and run tests using the built artifacts
  * run `cargo test` on Linux only
* copy built artifacts from the build step, and run tests using the
release martin binary
  * package and publish if this is a release

### Other changes
* Port some minor changes from the rewrite to porting easier
* minor cleanups
* remove all "expected" data files - too unstable to be usable
2022-10-31 16:28:21 -04:00
Yuri Astrakhan
a0a411f088
Consolidate DB init and tests (#463)
* Add justfile to simplify running all the tests
* Save all PBF outputs to the text files
* Consolidate all tests to reuse the same code
* Consolidate database initialization
* updated readme with the new instructions

Note that while this PR creates "expected" files, the CI cannot validate
the generated results because the output is not stable. Eventually we
may try to output just the non-geometry values to have reasonable tests
comparing against the expected results.
2022-10-28 14:52:39 -04:00
Yuri Astrakhan
5fb3d50b73
v0.6rc1, MapLibre docs, (#407)
* Migrate to MapLibre documentation
* Changed version to v0.6rc1

getting ready for a release
2022-10-07 17:58:30 +00:00
Yuri Astrakhan
47ed143d8f
Clean up configuration system to use Clap (#415)
* Use latest Clap-derive (currently v4rc, but should be public within a few days)
* reorganize configuration to streamline different config sources into one Config (using multiple ConfigBuilders)
2022-09-28 04:19:23 -04:00
Yuri Astrakhan
5ab2cec8f9
Attempt to migrate CI to maplibre/martin (#408)
Note that I manually published [maplibre/martin:latest](https://hub.docker.com/r/maplibre/martin) to docker, so it might be able to pass CI ok.  I have not looked deeply into the existing CI workflow - @stepankuzmin any suggestions on changes to that?  The github actions are now setup

P.S. I am not certain what that whole `brew/tap` thing is - don't know enough about Macs
2022-09-26 21:48:46 -04:00
Yuri Astrakhan
e8ef2597e3
feat: clean up readme and code of conduct (#382) 2022-08-11 07:06:12 -04:00
Yuri Astrakhan
7a14d6a3ed
feat!: remove --watch support (#381)
BREAKING CHANGE: Remove --watch support and ignore the command line parameter
2022-08-10 12:23:44 -04:00
Devin Norgarb
25442cc972
typo in README.md (#361) 2022-07-02 12:44:24 +00:00
Yuri Astrakhan
0126c5f595
Migrate some urbica/martin -> maplibre/martin (#347)
* Migrate some urbica/martin -> maplibre/martin
2022-06-11 10:51:41 +03:00
zhangzhang
5e2b6279b9
add maplibre example (#340) (h/t @sharkAndshark) 2022-05-29 20:00:05 +03:00
Stepan Kuzmin
b3401785b2
feat: add default SRID support (#308)
* feat: add default SRID support
2022-02-13 15:43:52 +03:00
Stepan Kuzmin
396e563fd1
chore: update dependencies (#278)
* chore: update dependencies

* chore: use main instead of master
2021-11-07 17:28:21 +03:00
Stepan Kuzmin
fc9170d164
feat: add multiple geometry columns support in table sources (#269)
* feat: add multiple geometry columns support in table sources

* test: add multiple geometry tests
2021-10-21 12:20:33 +03:00
Stepan Kuzmin
0ecf3551f8
docs: add using with DigitalOcean PostgreSQL 2021-10-18 14:42:11 +03:00
Stepan Kuzmin
7ad7f1ab8b
feat: use openssl for tls connections, add CA_ROOT_FILE support (#268) (h/t @kapcsandi) 2021-10-18 14:35:08 +03:00
Stepan Kuzmin
d4d101c7f9
docs: add using with Heroku Postgres recipe 2021-10-17 17:30:35 +03:00
Stepan Kuzmin
f2d56c2f7d
fix: tiles attribute in tilejson with x-rewrite-url (#266) 2021-10-15 18:19:36 +03:00
Stepan Kuzmin
194a83e63f
feat: add minzoom and maxzoom support (#265) 2021-10-13 14:51:29 +03:00