├── .dockerignore ├── .github └── workflows │ ├── build-deploy-docs.yml │ ├── ci.yml │ └── docker.yml ├── .gitignore ├── .gitmodules ├── CHANGELOG.md ├── Cargo.lock ├── Cargo.toml ├── LICENSE-APACHE ├── LICENSE-MIT ├── README.md ├── assets ├── .gitignore ├── Makefile ├── NetherlandsRDNewQuad.json ├── custom-grid-lv95.json ├── helloworld.db ├── helloworld.qgs ├── liechtenstein.mbtiles ├── maplibre.html ├── mapserver.conf ├── mbtiles_mvt_fl-style.json ├── mvtbench.gpkg ├── mvtbench.pmtiles ├── mvtbench_t_rex.toml ├── natural-earth-countries-style.json ├── ne.map ├── ne.qgs ├── ne_extracts.gpkg ├── ne_extracts.qgz ├── ol-ogc-tiles.html ├── railway-test.gpkg └── usergrid.html ├── bbox-asset-server ├── Cargo.toml ├── README.md └── src │ ├── config.rs │ ├── endpoints.rs │ ├── lib.rs │ ├── main.rs │ ├── qgis_plugins.rs │ ├── runtime_templates.rs │ ├── service.rs │ ├── static │ └── plugins.xsl │ └── templates │ └── plugins.xml ├── bbox-core ├── Cargo.toml ├── README.md ├── fixtures │ ├── dc.webp │ ├── world.jpg │ └── world.png ├── src │ ├── api.rs │ ├── auth │ │ ├── mod.rs │ │ └── oidc.rs │ ├── cli.rs │ ├── config.rs │ ├── empty │ │ └── .gitkeep │ ├── endpoints.rs │ ├── file_search.rs │ ├── formats.rs │ ├── lib.rs │ ├── logger.rs │ ├── metrics.rs │ ├── ogcapi.rs │ ├── openapi.yaml │ ├── pg_ds.rs │ ├── service.rs │ ├── service_utils.rs │ ├── static_assets.rs │ ├── static_files.rs │ ├── templates.rs │ ├── tile_response.rs │ └── tls.rs ├── static │ └── core │ │ └── favicon.ico └── templates │ ├── base.html │ └── collections.html ├── bbox-feature-server ├── .gitignore ├── Cargo.toml ├── README.md ├── src │ ├── config.rs │ ├── datasource │ │ ├── gpkg.rs │ │ ├── mod.rs │ │ └── postgis.rs │ ├── endpoints.rs │ ├── error.rs │ ├── filter_params.rs │ ├── inventory.rs │ ├── lib.rs │ ├── main.rs │ ├── openapi.yaml │ └── service.rs └── templates │ ├── collection.html │ ├── feature.html │ ├── features.html │ └── queryables.html ├── bbox-frontend ├── Cargo.toml ├── Makefile ├── README.md ├── src │ ├── endpoints.rs │ ├── lib.rs │ └── qwc2_config.rs ├── static │ ├── frontend │ │ └── bbox.css │ ├── maplibre │ │ ├── maplibre-gl.css │ │ └── maplibre-gl.js │ ├── ol │ │ ├── ol.min.css │ │ └── ol.min.js │ ├── proj │ │ └── proj4.min.js │ ├── qwc2 │ │ ├── assets │ │ │ ├── css │ │ │ │ └── qwc2.css │ │ │ ├── forms │ │ │ │ └── form.ui │ │ │ ├── img │ │ │ │ ├── app_icon.png │ │ │ │ ├── app_icon_114.png │ │ │ │ ├── app_icon_144.png │ │ │ │ ├── app_icon_72.png │ │ │ │ ├── favicon.ico │ │ │ │ ├── logo-mobile.svg │ │ │ │ ├── logo.svg │ │ │ │ └── mapthumbs │ │ │ │ │ ├── default.jpg │ │ │ │ │ └── mapnik.jpg │ │ │ └── templates │ │ │ │ └── legendprint.html │ │ ├── config.json │ │ ├── index.html │ │ ├── js │ │ │ └── QWC2App.js │ │ └── translations │ │ │ ├── data.cs-CZ │ │ │ ├── data.de-CH │ │ │ ├── data.de-DE │ │ │ ├── data.en-US │ │ │ ├── data.es-ES │ │ │ ├── data.fr-FR │ │ │ ├── data.it-IT │ │ │ ├── data.pl-PL │ │ │ ├── data.pt-BR │ │ │ ├── data.ro-RO │ │ │ ├── data.ru-RU │ │ │ ├── data.sv-SE │ │ │ └── data.tr-TR │ ├── redoc │ │ └── redoc.standalone.js │ └── swagger │ │ ├── swagger-ui-bundle.js │ │ └── swagger-ui.css ├── templates │ ├── index.html │ ├── redoc.html │ ├── scalar.html │ └── swaggerui.html └── ui │ ├── .gitignore │ ├── Makefile │ ├── package.json │ ├── src │ └── bbox.css │ └── tailwind.config.js ├── bbox-map-server ├── Cargo.toml ├── README.md ├── bench │ ├── .gitignore │ ├── Makefile │ ├── bbox-bench.toml │ ├── httpbench.lua │ ├── paths.txt │ ├── paths_baseline.txt │ └── results │ │ ├── Makefile │ │ ├── http-quick.g │ │ └── http.g ├── mock-fcgi-wms │ ├── Cargo.toml │ ├── README.md │ └── src │ │ └── main.rs ├── qgis │ └── plugins │ │ ├── ClearCapabilities │ │ ├── __init__.py │ │ ├── clear_capabilities.py │ │ └── metadata.txt │ │ └── Instrumentation │ │ ├── Instrumentation.py │ │ ├── __init__.py │ │ └── metadata.txt └── src │ ├── config.rs │ ├── dispatcher │ ├── mod.rs │ ├── rand.rs │ ├── round_robin.rs │ └── wms_optimized.rs │ ├── endpoints.rs │ ├── fcgi_process.rs │ ├── inventory.rs │ ├── lib.rs │ ├── main.rs │ ├── metrics.rs │ ├── openapi.yaml │ ├── service.rs │ ├── wms_capabilities.rs │ └── wms_fcgi_backend.rs ├── bbox-processes-server ├── Cargo.toml ├── README.md └── src │ ├── config.rs │ ├── dagster.rs │ ├── endpoints.rs │ ├── error.rs │ ├── lib.rs │ ├── main.rs │ ├── models.rs │ ├── openapi.yaml │ └── service.rs ├── bbox-routing-server ├── Cargo.toml ├── README.md └── src │ ├── config.rs │ ├── ds.rs │ ├── endpoints.rs │ ├── engine.rs │ ├── error.rs │ ├── lib.rs │ ├── main.rs │ ├── openapi.yaml │ └── service.rs ├── bbox-server ├── Cargo.toml ├── README.md └── src │ └── main.rs ├── bbox-tile-server ├── .gitignore ├── Cargo.toml ├── README.md ├── bbox-mvtbench.toml ├── justfile ├── performance.md └── src │ ├── cli.rs │ ├── config.rs │ ├── config_t_rex.rs │ ├── datasource │ ├── mbtiles.rs │ ├── mod.rs │ ├── mvt.rs │ ├── pmtiles.rs │ ├── postgis.rs │ ├── postgis_queries.rs │ ├── wms_fcgi.rs │ └── wms_http.rs │ ├── endpoints.rs │ ├── filter_params.rs │ ├── lib.rs │ ├── main.rs │ ├── mbtiles_ds.rs │ ├── openapi.yaml │ ├── seed.rs │ ├── service.rs │ └── store │ ├── files.rs │ ├── mbtiles.rs │ ├── mod.rs │ ├── pmtiles.rs │ ├── s3.rs │ └── s3putfiles.rs ├── bbox.toml ├── docker ├── Dockerfile ├── Dockerfile-mapserver ├── Dockerfile-qgis-server └── bbox │ ├── .gitignore │ ├── Makefile │ ├── README.md │ ├── bbox-full.toml │ ├── create-multiple-postgresql-databases.sh │ ├── docker-compose.yml │ ├── init-windmill-as-superuser.sql │ ├── instrumentation │ ├── grafana │ │ ├── dashboards │ │ │ └── system │ │ │ │ ├── bbox.json │ │ │ │ └── prom.json │ │ ├── grafana.ini │ │ └── provisioning │ │ │ ├── dashboards │ │ │ └── dashboards.yml │ │ │ ├── datasources │ │ │ └── prometheus.yml │ │ │ └── notifiers │ │ │ └── telegram.yml │ └── prometheus.yml │ ├── nginx │ ├── authentik.conf.template │ ├── default.conf.template │ └── windmill.conf.template │ └── template.env ├── justfile ├── plugins └── instantprint.zip ├── templates ├── maplibre-asset-style.html └── maplibre.html └── website ├── .gitignore ├── assets └── css │ └── custom.css ├── config.toml ├── content ├── _index.md ├── bbox-services.png └── docs │ ├── _index.md │ ├── api-endpoints.md │ ├── asset-server │ ├── _index.md │ └── configuration.md │ ├── core │ ├── _index.md │ └── configuration.md │ ├── feature-server │ ├── _index.md │ ├── configuration.md │ └── endpoints.md │ ├── installation.md │ ├── instrumentation.md │ ├── map-server │ ├── _index.md │ ├── configuration.md │ └── endpoints.md │ ├── processes-server │ ├── _index.md │ ├── configuration.md │ └── endpoints.md │ ├── routing-server │ ├── _index.md │ ├── configuration.md │ └── endpoints.md │ ├── running.md │ └── tile-server │ ├── _index.md │ ├── configuration.md │ ├── endpoints.md │ ├── guides.md │ ├── installation.md │ ├── running.md │ ├── seeding.md │ └── styling.md ├── i18n └── en.yaml ├── justfile ├── layouts └── partials │ └── custom │ └── head-end.html └── static ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── apple-touch-icon.png ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon-dark.svg ├── favicon.ico ├── favicon.svg └── site.webmanifest /.dockerignore: -------------------------------------------------------------------------------- 1 | /.git 2 | /target 3 | /.gitlab-ci.yml 4 | /.github 5 | /docker 6 | README.md 7 | /bbox.toml 8 | /assets 9 | /bbox.sublime-* 10 | /bbox-tile-server/s3data 11 | -------------------------------------------------------------------------------- /.github/workflows/build-deploy-docs.yml: -------------------------------------------------------------------------------- 1 | name: Documentation 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | 8 | permissions: 9 | contents: write 10 | 11 | jobs: 12 | build-docs: 13 | name: Build Docs 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v4 17 | with: 18 | submodules: true 19 | 20 | - name: Install just 21 | uses: taiki-e/install-action@v2 22 | with: { tool: just } 23 | 24 | - name: Install nightly toolchain 25 | uses: dtolnay/rust-toolchain@master 26 | with: 27 | toolchain: nightly-2024-09-23 28 | 29 | - name: Install protoc 30 | uses: arduino/setup-protoc@v3 31 | with: 32 | repo-token: ${{ secrets.GITHUB_TOKEN }} 33 | 34 | - name: Install Python build dependencies 35 | run: python -m pip install jmespath 36 | 37 | - name: Install Hugo 38 | uses: peaceiris/actions-hugo@v3 39 | with: 40 | hugo-version: "0.111.3" 41 | # extended: true 42 | 43 | - name: Generate reference documentation 44 | run: cd website && just refdoc 45 | 46 | - name: Build site 47 | run: cd website && just build 48 | 49 | - name: Deploy 50 | uses: peaceiris/actions-gh-pages@v3 51 | if: github.ref == 'refs/heads/main' 52 | with: 53 | github_token: ${{ secrets.GITHUB_TOKEN }} 54 | publish_dir: ./website/public 55 | cname: www.bbox.earth 56 | -------------------------------------------------------------------------------- /.github/workflows/docker.yml: -------------------------------------------------------------------------------- 1 | name: Docker images 2 | 3 | on: 4 | # push: 5 | # branches: [main] 6 | release: 7 | types: [published] 8 | workflow_dispatch: 9 | 10 | jobs: 11 | 12 | build: 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | 17 | - uses: actions/checkout@v4 18 | 19 | - name: Get version tag 20 | id: get_tag 21 | run: | 22 | if [ ${{ startsWith(github.ref, 'refs/tags/') }} = true ]; then 23 | echo "tag=latest,${GITHUB_REF:10}" >>$GITHUB_OUTPUT 24 | else 25 | echo "tag=latest" >>$GITHUB_OUTPUT 26 | fi 27 | 28 | - name: Build and Publish bbox-server-qgis 29 | uses: elgohr/Publish-Docker-Github-Action@v5 30 | with: 31 | name: sourcepole/bbox-server-qgis 32 | username: ${{ secrets.DOCKER_HUB_USER }} 33 | password: ${{ secrets.DOCKER_HUB_PASSWORD }} 34 | tags: "${{ steps.get_tag.outputs.tag }}" 35 | dockerfile: docker/Dockerfile-qgis-server 36 | 37 | - name: Build and Publish bbox-map-server-qgis 38 | uses: elgohr/Publish-Docker-Github-Action@v5 39 | env: 40 | BUILD_DIR: bbox-map-server 41 | with: 42 | name: sourcepole/bbox-map-server-qgis 43 | username: ${{ secrets.DOCKER_HUB_USER }} 44 | password: ${{ secrets.DOCKER_HUB_PASSWORD }} 45 | buildargs: BUILD_DIR 46 | tags: "${{ steps.get_tag.outputs.tag }}" 47 | dockerfile: docker/Dockerfile-qgis-server 48 | 49 | - name: Build and Publish bbox-tile-server 50 | uses: elgohr/Publish-Docker-Github-Action@v5 51 | env: 52 | BUILD_DIR: bbox-tile-server 53 | with: 54 | name: sourcepole/bbox-tile-server 55 | username: ${{ secrets.DOCKER_HUB_USER }} 56 | password: ${{ secrets.DOCKER_HUB_PASSWORD }} 57 | buildargs: BUILD_DIR 58 | tags: "${{ steps.get_tag.outputs.tag }}" 59 | dockerfile: docker/Dockerfile 60 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /*.pem 3 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "website/themes/hextra"] 2 | path = website/themes/hextra 3 | url = https://github.com/pka/hextra 4 | branch = backport-debian 5 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | members = [ 3 | "bbox-asset-server", 4 | "bbox-core", 5 | "bbox-feature-server", 6 | "bbox-frontend", 7 | "bbox-map-server", 8 | "bbox-map-server/mock-fcgi-wms", 9 | "bbox-processes-server", 10 | "bbox-routing-server", 11 | "bbox-server", 12 | "bbox-tile-server", 13 | ] 14 | default-members = ["bbox-server"] 15 | resolver = "2" 16 | 17 | [workspace.package] 18 | edition = "2021" 19 | rust-version = "1.65" 20 | repository = "https://github.com/bbox-services/bbox" 21 | homepage = "https://www.bbox.earth" 22 | license = "MIT OR Apache-2.0" 23 | 24 | [workspace.dependencies] 25 | actix-web = { version = "4.0.0", features = ["rustls"] } 26 | async-stream = "0.3.4" 27 | async-trait = "0.1.65" 28 | awc = "3.0.0" # features = ["rustls"] 29 | clap = { version = "4.2.1", features = ["derive"] } 30 | chrono = "0.4" 31 | futures = "0.3.21" 32 | geozero = { version = "0.11.0" } 33 | log = "0.4.17" 34 | minijinja = { version = "2.2.0", features = ["loader"] } 35 | num_cpus = "1.13.1" 36 | once_cell = "1.12.0" 37 | opentelemetry = { version = "0.18", default-features = false, features = [ 38 | "trace", 39 | "metrics", 40 | "rt-tokio", 41 | ] } 42 | prometheus = { version = "0.13", default-features = false } 43 | reqwest = { version = "0.11.11", default-features = false, features = [ 44 | "rustls-tls", 45 | ] } 46 | rust-embed = { version = "6.8.1", features = ["compression"] } 47 | serde = { version = "1.0", features = ["derive"] } 48 | serde_json = "1.0.57" 49 | serde_urlencoded = "0.7.1" 50 | sqlx = { version = "0.7.0", default-features = false, features = [ 51 | "runtime-tokio-rustls", 52 | "sqlite", 53 | "postgres", 54 | "chrono", 55 | ] } 56 | tempfile = "3.8.1" 57 | thiserror = "1.0.31" 58 | tokio = { version = "1.19.2" } 59 | 60 | [patch.crates-io] 61 | #tile-grid = { path = "../tile-grid" } 62 | #geozero = { path = "../geozero/geozero" } 63 | #fast_paths = { path = "../fast_paths" } 64 | -------------------------------------------------------------------------------- /LICENSE-MIT: -------------------------------------------------------------------------------- 1 | Copyright (c) 2020 Pirmin Kalberer 2 | 3 | Permission is hereby granted, free of charge, to any 4 | person obtaining a copy of this software and associated 5 | documentation files (the "Software"), to deal in the 6 | Software without restriction, including without 7 | limitation the rights to use, copy, modify, merge, 8 | publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software 10 | is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice 14 | shall be included in all copies or substantial portions 15 | of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 18 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 19 | TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 20 | PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT 21 | SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 22 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 23 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 24 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 | DEALINGS IN THE SOFTWARE. 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BBOX services 2 | 3 | Composable spatial services. 4 | 5 | [](https://www.bbox.earth/) 6 | [](https://github.com/bbox-services/bbox/actions) 7 | [](https://hub.docker.com/r/sourcepole/bbox-server-qgis) 8 | 9 | ``` 10 | ___ ___ _____ __ 11 | | _ ) _ )/ _ \ \/ / 12 | | _ \ _ \ (_) > < 13 | |___/___/\___/_/\_\ 14 | ``` 15 | 16 | Components: 17 | * [BBOX Feature server](bbox-feature-server): OGC API Features service 18 | * [BBOX Map server](bbox-map-server): OGC API Map service 19 | * [BBOX Tile server](bbox-tile-server): OGC API Tile service 20 | * [BBOX Asset server](bbox-asset-server): Serving static and templated files 21 | * [BBOX Processes server](bbox-processes-server): OGC API Processes service 22 | * [BBOX Routing server](bbox-routing-server): OGC API Routing service (experimental) 23 | 24 | Features: 25 | * Built-in high performance HTTP server 26 | * QWC2 Map viewer 27 | * Instrumentation: Prometheus and Jaeger tracing 28 | * Healths endpoints for Docker and Kubernetes hosting 29 | 30 | 31 | See [Documentation](https://www.bbox.earth/) for detailed information. 32 | 33 | ## Installation 34 | 35 | See [Documentation](https://www.bbox.earth/docs/installation/) for instructions. 36 | 37 | ## Docker 38 | 39 | docker run -p 8080:8080 sourcepole/bbox-server-qgis 40 | 41 | Serve tiles from file: 42 | 43 | docker run -p 8080:8080 -v $PWD/assets:/assets:ro sourcepole/bbox-server-qgis bbox-server serve /assets/liechtenstein.mbtiles 44 | 45 | Run with configuration file: 46 | 47 | docker run -p 8080:8080 -v $PWD/bbox.toml:/var/www/bbox.toml:ro -v $PWD/assets:/assets:ro sourcepole/bbox-server-qgis 48 | 49 | ## License 50 | 51 | Licensed under either of 52 | 53 | * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) 54 | * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) 55 | 56 | at your option. 57 | 58 | ### Contribution 59 | 60 | Unless you explicitly state otherwise, any contribution intentionally submitted 61 | for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. 62 | -------------------------------------------------------------------------------- /assets/.gitignore: -------------------------------------------------------------------------------- 1 | /download 2 | /maputnik 3 | /*.bin 4 | -------------------------------------------------------------------------------- /assets/Makefile: -------------------------------------------------------------------------------- 1 | # Download and prapare data 2 | 3 | all: ne_extracts.gpkg 4 | 5 | download/natural_earth_vector.gpkg.zip: 6 | mkdir -p download 7 | wget -O $@ https://naciscdn.org/naturalearth/packages/natural_earth_vector.gpkg.zip 8 | 9 | download/packages/natural_earth_vector.gpkg: download/natural_earth_vector.gpkg.zip 10 | unzip -d download $< 11 | touch $@ 12 | 13 | ne_extracts.gpkg: download/packages/natural_earth_vector.gpkg 14 | ogr2ogr -f GPKG -select scalerank,featurecla,name -nlt PROMOTE_TO_MULTI $@ $< ne_10m_rivers_lake_centerlines 15 | ogr2ogr -update -select scalerank,featurecla,name -nlt PROMOTE_TO_MULTI $@ $< ne_10m_lakes 16 | ogr2ogr -update -select scalerank,labelrank,featurecla,name $@ $< ne_10m_populated_places 17 | 18 | # For reverting mvtbench.gpkg add the following .git/hooks/pre-commit file: 19 | # #!/bin/sh 20 | # 21 | # if [ -f data/mvtbench.gpkg-wal ]; then 22 | # echo Revert mvtbench.gpkg 23 | # git checkout 2c96bb5 data/mvtbench.gpkg 24 | # rm data/mvtbench.gpkg-* 25 | # fi 26 | 27 | 28 | # Setup PostgreSQL database 29 | 30 | DBNAME = bbox_tests 31 | 32 | createdb: 33 | psql postgres -c "DROP DATABASE IF EXISTS $(DBNAME)" 34 | psql postgres -c "CREATE DATABASE $(DBNAME)" 35 | psql $(DBNAME) -c "CREATE EXTENSION postgis" 36 | psql $(DBNAME) -c "CREATE SCHEMA ne" 37 | 38 | loaddata: 39 | ogr2ogr -f PostgreSQL PG:dbname=$(DBNAME) -lco SCHEMA=ne ne_extracts.gpkg 40 | 41 | 42 | # Misc targets 43 | 44 | mvtbench: 45 | # docker run -p 127.0.0.1:5439:5432 -d --name mvtbenchdb --rm sourcepole/mvtbenchdb 46 | cd ../bbox-tile-server && cargo run -- --t-rex-config=../assets/mvtbench_t_rex.toml serve 47 | # curl -o /tmp/tile.mvt http://localhost:8080/xyz/ne_countries/0/0/0.pbf 48 | 49 | t_rex_multi: 50 | # docker run -p 127.0.0.1:5439:5432 -d --name trextestdb --rm sourcepole/trextestdb 51 | cd ../bbox-tile-server && cargo run -- --t-rex-config=../../t-rex/examples/multiple-ds.toml serve 52 | 53 | t_rex_grid: 54 | cd ../bbox-tile-server && cargo run -- --t-rex-config=../../t-rex/examples/utmgrid.toml serve 55 | -------------------------------------------------------------------------------- /assets/helloworld.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bbox-services/bbox/921d23bd54f5ac49a29307a2840161a5e8b18e75/assets/helloworld.db -------------------------------------------------------------------------------- /assets/liechtenstein.mbtiles: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bbox-services/bbox/921d23bd54f5ac49a29307a2840161a5e8b18e75/assets/liechtenstein.mbtiles -------------------------------------------------------------------------------- /assets/maplibre.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |Collection | 12 |Description | 13 |
---|---|
{{ collection.title }} | 19 |{{ collection.description }} | 20 |
property | 15 |value | 16 |
---|---|
id | 21 |{{ feature.id }} | 22 |
{{prop}} | 26 |{{feature.properties[prop]}} | 27 |
id | 17 | {% for prop in first_feature.properties %} 18 |{{prop}} | 19 | {% endfor %} 20 | {% endif %} 21 |
---|---|
{{ feature.id }} | 27 | {% for prop in first_feature.properties %} 28 |{{feature.properties[prop]}} | 29 | {% endfor %} 30 |