All Projects → go-spatial → Tegola

go-spatial / Tegola

Licence: mit
Tegola is a Mapbox Vector Tile server written in Go

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Tegola

HMap
:earth: HMap | 基于openlayers的封装组件
Stars: ✭ 64 (-91.51%)
Mutual labels:  vector-tiles, gis, openlayers
cloud-tileserver
Serve mapbox vectortiles via AWS stack
Stars: ✭ 48 (-93.63%)
Mutual labels:  vector-tiles, gis, postgis
postile
Project migrated to: https://gitlab.com/Oslandia/postile
Stars: ✭ 67 (-91.11%)
Mutual labels:  vector-tiles, gis, postgis
Geography for hackers
Geography for Hackers - Teaching all how to hack geography, use GIS, and think spatially
Stars: ✭ 25 (-96.68%)
Mutual labels:  postgis, gis, openlayers
timvt
PostGIS based Vector Tile server.
Stars: ✭ 113 (-85.01%)
Mutual labels:  vector-tiles, postgis
Itowns
A Three.js-based framework written in Javascript/WebGL for visualizing 3D geospatial data
Stars: ✭ 517 (-31.43%)
Mutual labels:  gis, vector-tiles
farmOS-map
farmOS Map is an OpenLayers wrapper library designed for agricultural mapping needs. It can be used in any project that has similar requirements.
Stars: ✭ 18 (-97.61%)
Mutual labels:  gis, openlayers
gismanager
Publish Your GIS Data(Vector Data) to PostGIS and Geoserver
Stars: ✭ 45 (-94.03%)
Mutual labels:  gis, postgis
lopocs
Migrated to: https://gitlab.com/Oslandia/lopocs
Stars: ✭ 78 (-89.66%)
Mutual labels:  gis, postgis
school-navigator
Navigate the Durham, NC public school system
Stars: ✭ 25 (-96.68%)
Mutual labels:  gis, postgis
Spatial
Neo4j Spatial is a library of utilities for Neo4j that faciliates the enabling of spatial operations on data. In particular you can add spatial indexes to already located data, and perform spatial operations on the data like searching for data within specified regions or within a specified distance of a point of interest. In addition classes are provided to expose the data to geotools and thereby to geotools enabled applications like geoserver and uDig.
Stars: ✭ 695 (-7.82%)
Mutual labels:  postgis, gis
twkb
A small GO parser for the TWKB format
Stars: ✭ 17 (-97.75%)
Mutual labels:  gis, postgis
mergin-db-sync
A tool for two-way synchronization between Mergin and a PostGIS database
Stars: ✭ 29 (-96.15%)
Mutual labels:  gis, postgis
Geotrek-admin
Paths management for National Parks and Tourism organizations
Stars: ✭ 103 (-86.34%)
Mutual labels:  gis, postgis
Iclient Javascript
Modern GIS Web Client for JavaScript, based on Leaflet\OpenLayers\MapboxGL-JS\Classic(iClient8C), enhanced with ECharts\D3\MapV etc. Contributed by SuperMap & community.
Stars: ✭ 593 (-21.35%)
Mutual labels:  gis, openlayers
tilelive-postgis
Implements the tilelive API for generating vector tiles from PostGIS
Stars: ✭ 48 (-93.63%)
Mutual labels:  vector-tiles, postgis
Martin
Blazing fast and lightweight PostGIS vector tiles server
Stars: ✭ 540 (-28.38%)
Mutual labels:  postgis, vector-tiles
olturf
A Turf toolbar for OpenLayers.
Stars: ✭ 30 (-96.02%)
Mutual labels:  gis, openlayers
mapguide-react-layout
An openlayers-based modern map viewer for MapGuide
Stars: ✭ 54 (-92.84%)
Mutual labels:  gis, openlayers
victor
Turn mapbox vector tiles into static maps in R
Stars: ✭ 28 (-96.29%)
Mutual labels:  vector-tiles, gis

Tegola

On push Report Card Coverage Status Godoc license

Tegola is a vector tile server delivering Mapbox Vector Tiles with support for PostGIS and GeoPackage data providers. User documentation can be found at tegola.io

Features

  • Native geometry processing (simplification, clipping, make valid, intersection, contains, scaling, translation)
  • Mapbox Vector Tile v2 specification compliant.
  • Embedded viewer with auto generated style for quick data visualization and inspection.
  • Support for PostGIS and GeoPackage data providers. Extensible design to support additional data providers.
  • Support for several cache backends: file, s3, redis, azure blob store.
  • Cache seeding and invalidation via individual tiles (ZXY), lat / lon bounds and ZXY tile list.
  • Parallelized tile serving and geometry processing.
  • Support for Web Mercator (3857) and WGS84 (4326) projections.
  • Support for AWS Lambda.
  • Support for serving HTTPS.
  • Support for PostGIS ST_AsMVT.

Usage

tegola is a vector tile server
Version: v0.12.0

Usage:
  tegola [command]

Available Commands:
  cache       Manipulate the tile cache
  help        Help about any command
  serve       Use tegola as a tile server
  version     Print the version number of tegola

Flags:
      --config string   path to config file (default "config.toml")
  -h, --help            help for tegola

Use "tegola [command] --help" for more information about a command.

Running tegola as a vector tile server

  1. Download the appropriate binary of tegola for your platform via the release page.
  2. Setup your config file and run. Dy default tegola looks for a config.toml in the same directory as the binary. You can set a different location for the config.toml using a command flag:
./tegola serve --config=/path/to/config.toml

Server Endpoints

/

The server root will display a built in viewer with an auto generated style. For example:

tegola built in viewer

/maps/:map_name/:z/:x/:y

Return vector tiles for a map. The URI supports the following variables:

  • :map_name is the name of the map as defined in the config.toml file.
  • :z is the zoom level of the map.
  • :x is the row of the tile at the zoom level.
  • :y is the column of the tile at the zoom level.
/maps/:map_name/:layer_name/:z/:x/:y

Return vector tiles for a map layer. The URI supports the same variables as the map URI with the additional variable:

  • :layer_name is the name of the map layer as defined in the config.toml file.
/capabilities

Return a JSON encoded list of the server's configured maps and layers with various attributes.

/capabilities/:map_name

Return TileJSON details about the map.

/maps/:map_name/style.json

Return an auto generated Mapbox GL Style for the configured map.

Configuration

The tegola config file uses the TOML format. The following example shows how to configure a PostGIS data provider with two layers. The first layer includes a tablename, geometry_field and an id_field. The second layer uses a custom sql statement instead of the tablename property.

Under the maps section, map layers are associated with data provider layers and their min_zoom and max_zoom values are defined. Optionally, default_tags can be setup which will be encoded into the layer. If the same tags are returned from a data provider, the data provider's values will take precedence.

Example config file:

[webserver]
port = ":9090"              # port to bind the web server to. defaults ":8080"
ssl_cert = "fullchain.pem"  # ssl cert for serving by https
ssl_key = "privkey.pem"     # ssl key for serving by https

  [webserver.headers]
  Access-Control-Allow-Origin = "*"
  Cache-Control = "no-cache, no-store, must-revalidate"

[cache]                     # configure a tile cache
type = "file"               # a file cache will cache to the local file system
basepath = "/tmp/tegola"    # where to write the file cache

# register data providers
[[providers]]
name = "test_postgis"       # provider name is referenced from map layers (required)
type = "postgis"            # the type of data provider. currently only supports postgis (required)
host = "localhost"          # postgis database host (required)
port = 5432                 # postgis database port (required)
database = "tegola"         # postgis database name (required)
user = "tegola"             # postgis database user (required)
password = ""               # postgis database password (required)
srid = 3857                 # The default srid for this provider. Defaults to WebMercator (3857) (optional)
max_connections = 50        # The max connections to maintain in the connection pool. Default is 100. (optional)
ssl_mode = "prefer"         # PostgreSQL SSL mode*. Default is "disable". (optional)

  [[providers.layers]]
  name = "landuse"                    # will be encoded as the layer name in the tile
  tablename = "gis.zoning_base_3857"  # sql or tablename are required
  geometry_fieldname = "geom"         # geom field. default is geom
  id_fieldname = "gid"                # geom id field. default is gid
  srid = 4326                         # the srid of table's geo data. Defaults to WebMercator (3857)

  [[providers.layers]]
  name = "roads"                      # will be encoded as the layer name in the tile
  tablename = "gis.zoning_base_3857"  # sql or tablename are required
  geometry_fieldname = "geom"         # geom field. default is geom
  geometry_type = "linestring"        # geometry type. if not set, tables are inspected at startup to try and infer the gemetry type
  id_fieldname = "gid"                # geom id field. default is gid
  fields = [ "class", "name" ]        # Additional fields to include in the select statement.

  [[providers.layers]]
  name = "rivers"                     # will be encoded as the layer name in the tile
  geometry_fieldname = "geom"         # geom field. default is geom
  id_fieldname = "gid"                # geom id field. default is gid
  # Custom sql to be used for this layer. Note: that the geometery field is wraped
  # in a ST_AsBinary() and the use of the !BBOX! token
  sql = "SELECT gid, ST_AsBinary(geom) AS geom FROM gis.rivers WHERE geom && !BBOX!"

  [[providers.layers]]
  name = "buildings"                  # will be encoded as the layer name in the tile
  geometry_fieldname = "geom"         # geom field. default is geom
  id_fieldname = "gid"                # geom id field. default is gid
  # Custom sql to be used for this layer as a sub query. ST_AsBinary and
  # !BBOX! filter are applied automatically.
  sql = "(SELECT gid, geom, type FROM buildings WHERE scalerank = !ZOOM! LIMIT 1000) AS sub"

# maps are made up of layers
[[maps]]
name = "zoning"                              # used in the URL to reference this map (/maps/zoning)

  [[maps.layers]]
  name = "landuse"                         # name is optional. If it's not defined the name of the ProviderLayer will be used.
	                                         # It can also be used to group multiple ProviderLayers under the same namespace.
  provider_layer = "test_postgis.landuse"  # must match a data provider layer
  min_zoom = 12                            # minimum zoom level to include this layer
  max_zoom = 16                            # maximum zoom level to include this layer

    [maps.layers.default_tags]           # table of default tags to encode in the tile. SQL statements will override
    class = "park"

  [[maps.layers]]
  name = "rivers"                          # name is optional. If it's not defined the name of the ProviderLayer will be used.
                                           # It can also be used to group multiple ProviderLayers under the same namespace.
  provider_layer = "test_postgis.rivers"   # must match a data provider layer
  dont_simplify = true                     # optionally, turn off simplification for this layer. Default is false.
  dont_clip = true                         # optionally, turn off clipping for this layer. Default is false.
  min_zoom = 10                            # minimum zoom level to include this layer
  max_zoom = 18                            # maximum zoom level to include this layer

* more on PostgreSQL SSL mode here. The postgis config also supports "ssl_cert" and "ssl_key" options are required, corresponding semantically with "PGSSLKEY" and "PGSSLCERT". These options do not check for environment variables automatically. See the section below on injecting environment variables into the config.

Example config using Postres 12 / PostGIS 3.0 ST_AsMVT():

# register a MVT data provider. MVT data providers have the prefix "mvt_" in their type
# note mvt data providers can not be conflated with any other providers of any type in a map
# thus a map may only contain a single mvt provider.
[[providers]]
name = "my_postgis"         # provider name is referenced from map layers (required). 
type = "mvt_postgis"        # the type of data provider must be "mvt_postgis" for this data provider (required)
host = "localhost"          # PostGIS database host (required)
port = 5432                 # PostGIS database port (required)
database = "tegola"         # PostGIS database name (required)
user = "tegola"             # PostGIS database user (required)
password = ""               # PostGIS database password (required

  [[providers.layers]]
  name = "landuse"
  # MVT data provider must use SQL statements
  # this table uses "geom" for the geometry_fieldname and "gid" for the id_fieldname so they don't need to be configured
  # Wrapping the geom with ST_AsMVTGeom is required. 
  sql = "SELECT ST_AsMVTGeom(geom,!BBOX!) AS geom, gid FROM gis.landuse WHERE geom && !BBOX!"

# maps are made up of layers
[[maps]]
name = "zoning"                           # used in the URL to reference this map (/maps/zoning)

  [[maps.layers]]
  name = "landuse"                        # name is optional. If it's not defined the name of the ProviderLayer will be used.
  provider_layer = "my_postgis.landuse"   # must match a data provider layer
  min_zoom = 10                           # minimum zoom level to include this layer
  max_zoom = 16                           # maximum zoom level to include this layer

Environment Variables

Config TOML

Environment variables can be injected into the configuration file. One caveat is that the injection has to be within a string, though the value it represents does not have to be a string.

The above config example could be written as:

# register data providers
[[providers]]
name = "test_postgis"
type = "postgis"
host = "${POSTGIS_HOST}"    # postgis database host (required)
port = "${POSTGIS_PORT}"    # recall this value must be an int
database = "${POSTGIS_DB}"
user = "tegola"
password = ""
srid = 3857
max_connections = "${POSTGIS_MAX_CONN}"

SQL Debugging

The following environment variables can be used for debugging:

TEGOLA_SQL_DEBUG specify the type of SQL debug information to output. Currently support two values:

  • LAYER_SQL: print layer SQL as they are parsed from the config file.
  • EXECUTE_SQL: print SQL that is executed for each tile request and the number of items it returns or an error.

Usage

$ TEGOLA_SQL_DEBUG=LAYER_SQL tegola serve --config=/path/to/conf.toml

The following environment variables can be used to control various runtime options:

TEGOLA_OPTIONS specify a set of options comma or space delimited. Supports the following options

  • DontSimplifyGeo to turn off simplification for all layers.
  • SimplifyMaxZoom={{int}} to set the max zoom that simplification will apply to. (14 is default)

Client side debugging

When debugging client side, it's often helpful to to see an outline of a tile along with it's Z/X/Y values. To encode a debug layer into every tile add the query string variable debug=true to the URL template being used to request tiles. For example:

http://localhost:8080/maps/mymap/{z}/{x}/{y}.vector.pbf?debug=true

The requested tile will be encode a layer with the name value set to debug and include two features:

  • debug_outline: a line feature that traces the border of the tile
  • debug_text: a point feature in the middle of the tile with the following tags:
    • zxy: a string with the Z, X and Y values formatted as: Z:0, X:0, Y:0

Building from source

Tegola is written in Go and requires Go 1.14 to compile from source. (We support the two newest versions of Go.) To build tegola from source, make sure you have Go installed and have cloned the repository. Navigate to the repository then run the following command:

cd cmd/tegola/ && go build -mod vendor

You will now have a binary named tegola in the current directory which is ready for running.

Build Flags The following build flags can be used to turn off certain features of tegola:

  • noAzblobCache - turn off the Azure Blob cache back end.
  • noS3Cache - turn off the AWS S3 cache back end.
  • noRedisCache - turn off the Redis cache back end.
  • noPostgisProvider - turn off the PostGIS data provider.
  • noGpkgProvider - turn off the GeoPackage data provider. Note, GeoPackage uses CGO and will be turned off if the environment variable CGO_ENABLED=0 is set prior to building.
  • noViewer - turn off the built in viewer.
  • pprof - enable Go profiler. Start profile server by setting the environment TEGOLA_HTTP_PPROF_BIND environment (e.g. TEGOLA_HTTP_PPROF_BIND=localhost:6060).

Example of using the build flags to turn of the Redis cache back end, the GeoPackage provider and the built in viewer.

go build -tags 'noRedisCache noGpkgProvider noViewer'

License

See license file in repo.

Looking for a vector tile style editor?

Once you have tegola running you're likely going to want to work on your map's cartography. Give fresco a try!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].