-
-
Notifications
You must be signed in to change notification settings - Fork 197
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
440 changed files
with
47,953 additions
and
10,965 deletions.
There are no files selected for viewing
Validating CODEOWNERS rules …
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
// +build !noHanaProvider | ||
|
||
package atlas | ||
|
||
// The point of this file is to load and register the HANA provider. | ||
// the HANA provider can be excluded during the build with the `noHanaProvider` build flag | ||
// for example from the cmd/tegola directory: | ||
// | ||
// go build -tags 'noHanaProvider' | ||
import ( | ||
_ "github.com/go-spatial/tegola/provider/hana" | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
# HANA MVT Provider | ||
|
||
The HANA MVT provider manages querying for tile requests against a HANA database with [Vector Tiles support](https://help.sap.com/docs/HANA_CLOUD_DATABASE/bc9e455fe75541b8a248b4c09b086cf5/8cd683c4bb664fd8a71fc3f19ffa7e42.html) to handle the MVT encoding at the database. | ||
|
||
The connection between tegola and HANA is configured in a `tegola.toml` file. An example minimum connection config: | ||
|
||
|
||
```toml | ||
[[providers]] | ||
name = "test_hana" # provider name is referenced from map layers (required) | ||
type = "mvt_hana" # the type of data provider must be "mvt_hana" for this data provider (required) | ||
uri = "hdb://myuser:[email protected]:443?" # HANA connection string (required) | ||
``` | ||
|
||
### Connection Properties | ||
|
||
- `uri` (string): [Required] HANA connection string | ||
- `name` (string): [Required] provider name is referenced from map layers | ||
- `type` (string): [Required] the type of data provider. must be "hana" to use this data provider | ||
- `srid` (int): [Optional] The default SRID for the provider. Defaults to WebMercator (3857) but also supports WGS84 (4326) | ||
|
||
#### Connection string properties | ||
|
||
**Example** | ||
|
||
``` | ||
# {protocol}://{user}:{password}@{host}:{port}/{database}?{options}= | ||
hdb://myuser:[email protected]:443?TLSInsecureSkipVerify&timeout=3600&max_connections=30 | ||
``` | ||
|
||
**Options** | ||
|
||
- `timeout`: [Optional] Driver side connection timeout in seconds. | ||
- `TLSRootCAFile` [Optional] Path,- filename to root certificate(s). | ||
- `TLSServerName` [Optional] ServerName to verify the hostname. By setting TLSServerName=host, the provider will set TLSServerName same as 'host' value in `uri`. | ||
- `TLSInsecureSkipVerify` [Optional] Controls whether a client verifies the server's certificate chain and host name. | ||
- `max_connections`: [Optional] The max connections to maintain in the connection pool. Defaults to 100. 0 means no max. | ||
- `max_connection_idle_time`: [Optional] The maximum time an idle connection is kept alive. Defaults to "30m". | ||
- `max_connection_life_time` [Optional] The maximum time a connection lives before it is terminated and recreated. Defaults to "1h". | ||
|
||
## Provider Layers | ||
|
||
In addition to the connection configuration above, Provider Layers need to be configured. A Provider Layer tells tegola how to query HANA for a certain layer. When using the HANA MVT Provider the `ST_AsMVTGeom()` MUST be used. An example minimum config using the `sql` config option: | ||
|
||
```toml | ||
[[providers.layers]] | ||
name = "landuse" | ||
# MVT data provider can use both table names and SQL statements. Internally, the provider wraps an SQL query by using | ||
# ST_AsMVT and ST_AsMVTGeom functions. | ||
tablename = "gis.zoning_base_3857" | ||
``` | ||
|
||
### Provider Layers Properties | ||
|
||
- `name` (string): [Required] the name of the layer. This is used to reference this layer from map layers. | ||
- `geometry_fieldname` (string): [Optional] the name of the filed which contains the geometry for the feature. Defaults to `geom`. | ||
- `id_fieldname` (string): [Optional] the name of the feature id field. defaults to `gid`. | ||
- `geometry_type` (string): [Optional] the layer geometry type. If not set, the table will be inspected at startup to try and infer the gemetry type. Valid values are: `Point`, `LineString`, `Polygon`, `MultiPoint`, `MultiLineString`, `MultiPolygon`, `GeometryCollection`. | ||
- `srid` (int): [Optional] the SRID of the layer. Supports `3857` (WebMercator) only. | ||
- `sql` (string): [Required] custom SQL to use use. Supports the following tokens: | ||
- `!BBOX!` - [Required] will be replaced with the bounding box of the tile before the query is sent to the database. `!bbox!` and`!BOX!` are supported as well for compatibilitiy with queries from Mapnik and MapServer styles. | ||
- `!X!` - [Optional] will replaced with the "X" value of the requested tile. | ||
- `!Y!` - [Optional] will replaced with the "Y" value of the requested tile. | ||
- `!Z!` - [Optional] will replaced with the "Z" value of the requested tile. | ||
- `!ZOOM!` - [Optional] will be replaced with the "Z" (zoom) value of the requested tile. | ||
- `!SCALE_DENOMINATOR!` - [Optional] scale denominator, assuming 90.7 DPI (i.e. 0.28mm pixel size) | ||
- `!PIXEL_WIDTH!` - [Optional] the pixel width in meters, assuming 256x256 tiles | ||
- `!PIXEL_HEIGHT!` - [Optional] the pixel height in meters, assuming 256x256 tiles | ||
- `!ID_FIELD!` - [Optional] the id field name | ||
- `!GEOM_FIELD!` - [Optional] the geom field name | ||
- `!GEOM_TYPE!` - [Optional] the geom type if defined otherwise "" | ||
- `buffer` (int): [Optional] the buffer distance by which the clipped geometry may exceed the tile's area. Defaults to 256. | ||
- `clip_geometry` (bool): [Optional] the flag to control whether the geometry is clipped to the tile bounds or not. Defaults to `TRUE`. | ||
|
||
## Example mvt_hana and map config | ||
|
||
```toml | ||
[[providers]] | ||
name = "test_hana" | ||
type = "mvt_hana" | ||
uri = "hdb://myuser:[email protected]:443?" # HANA connection string (required) | ||
srid = 3857 # The only supported srid is 3857 (optional) | ||
|
||
[[providers.layers]] | ||
name = "landuse" | ||
sql = "SELECT geom, gid FROM gis.landuse WHERE !BBOX!" | ||
|
||
[[maps]] | ||
name = "cities" | ||
center = [-90.2,38.6,3.0] # where to center of the map (lon, lat, zoom) | ||
|
||
[[maps.layers]] | ||
name = "landuse" | ||
provider_layer = "test_hana.landuse" | ||
min_zoom = 0 | ||
max_zoom = 14 | ||
``` | ||
|
||
## Example mvt_hana and map config for SRID 4326 | ||
|
||
When using a 4326 projection with ST_AsMVT the SQL statement needs to be modified. `ST_AsMVTGeom` is expecting data in 3857 projection so the geometries and the `!BBOX!` token need to be transformed prior to `ST_AsMVTGeom` processing them. For example: | ||
|
||
```toml | ||
[[providers]] | ||
name = "test_hana" | ||
type = "mvt_hana" | ||
uri = "hdb://myuser:[email protected]:443?" # HANA connection string (required) | ||
srid = 3857 # The only supported srid is 3857 (optional) | ||
|
||
[[providers.layers]] | ||
name = "landuse" | ||
sql = "SELECT * FROM (SELECT id, name, geom.ST_Transform(3857) AS geom FROM ne_50m_rivers_lake_centerlines) AS sub WHERE !BBOX!" | ||
|
||
[[maps]] | ||
name = "cities" | ||
center = [-90.2,38.6,3.0] # where to center of the map (lon, lat, zoom) | ||
|
||
[[maps.layers]] | ||
name = "landuse" | ||
provider_layer = "test_hana.landuse" | ||
min_zoom = 0 | ||
max_zoom = 14 | ||
``` | ||
|
||
## Testing | ||
|
||
Testing is designed to work against a live SAP HANA database. To see how to set up a database check this [github actions script](https://github.com/go-spatial/tegola/blob/master/.github/worksflows/on_pr_push.yml). To run the HANA tests, the following environment variables need to be set: | ||
|
||
```bash | ||
$ export RUN_HANA_TESTS=yes | ||
$ export HANA_CONNECTION_STRING="hdb://myuser:[email protected]:443?TLSInsecureSkipVerify" | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
// Package hana is a placeholder for the SAP HANA database. | ||
// The hana provider is provided by the provider.Hana provider | ||
// please consult that for information on how to use it. | ||
// please note that the provider type will be mvt_hana | ||
package hana |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
# HANA | ||
The HANA provider manages querying for tile requests against an [SAP HANA](https://www.sap.com/products/hana.html) database. The connection between tegola and HANA is configured in a `tegola.toml` file. An example minimum connection config: | ||
|
||
|
||
```toml | ||
[[providers]] | ||
name = "test_hana" # provider name is referenced from map layers (required) | ||
type = "hana" # the type of data provider must be "hana" for this data provider (required) | ||
uri = "hdb://myuser:[email protected]:443?" # HANA connection string (required) | ||
``` | ||
|
||
### Connection Properties | ||
|
||
- `uri` (string): [Required] HANA connection string | ||
- `name` (string): [Required] provider name is referenced from map layers | ||
- `type` (string): [Required] the type of data provider. must be "hana" to use this data provider | ||
- `srid` (int): [Optional] The default SRID for the provider. Defaults to WebMercator (3857) but also supports WGS84 (4326) | ||
|
||
#### Connection string properties | ||
|
||
**Example** | ||
|
||
``` | ||
# {protocol}://{user}:{password}@{host}:{port}/{database}?{options}= | ||
hdb://myuser:[email protected]:443?TLSInsecureSkipVerify&timeout=3600&max_connections=30 | ||
``` | ||
|
||
**Options** | ||
|
||
- `timeout`: [Optional] Driver side connection timeout in seconds. | ||
- `TLSRootCAFile` [Optional] Path,- filename to root certificate(s). | ||
- `TLSServerName` [Optional] ServerName to verify the hostname. By setting TLSServerName=host, the provider will set TLSServerName same as 'host' value in `uri`. | ||
- `TLSInsecureSkipVerify` [Optional] Controls whether a client verifies the server's certificate chain and host name. | ||
- `max_connections`: [Optional] The max connections to maintain in the connection pool. Defaults to 100. 0 means no max. | ||
- `max_connection_idle_time`: [Optional] The maximum time an idle connection is kept alive. Defaults to "30m". | ||
- `max_connection_life_time` [Optional] The maximum time a connection lives before it is terminated and recreated. Defaults to "1h". | ||
|
||
## Provider Layers | ||
In addition to the connection configuration above, Provider Layers need to be configured. A Provider Layer tells tegola how to query HANA for a certain layer. An example minimum config: | ||
|
||
```toml | ||
[[providers.layers]] | ||
name = "landuse" | ||
# this table uses "geom" for the geometry_fieldname and "gid" for the id_fieldname so they don't need to be configured | ||
tablename = "gis.zoning_base_3857" | ||
``` | ||
|
||
### Provider Layers Properties | ||
|
||
- `name` (string): [Required] the name of the layer. This is used to reference this layer from map layers. | ||
- `tablename` (string): [*Required] the name of the database table to query against. Required if `sql` is not defined. | ||
- `geometry_fieldname` (string): [Optional] the name of the filed which contains the geometry for the feature. defaults to `geom`. | ||
- `id_fieldname` (string): [Optional] the name of the feature id field. defaults to `gid`. | ||
- `fields` ([]string): [Optional] a list of fields to include alongside the feature. Can be used if `sql` is not defined. | ||
- `srid` (int): [Optional] the SRID of the layer. Supports `3857` (WebMercator) or `4326` (WGS84). | ||
- `geometry_type` (string): [Optional] the layer geometry type. If not set, the table will be inspected at startup to try and infer the gemetry type. Valid values are: `Point`, `LineString`, `Polygon`, `MultiPoint`, `MultiLineString`, `MultiPolygon`, `GeometryCollection`. | ||
- `sql` (string): [*Required] custom SQL to use use. Required if `tablename` is not defined. Supports the following tokens: | ||
- `!BBOX!` - [Required] will be replaced with the bounding box of the tile before the query is sent to the database. `!bbox!` and`!BOX!` are supported as well for compatibilitiy with queries from Mapnik and MapServer styles. | ||
- `!ZOOM!` - [Optional] will be replaced with the "Z" (zoom) value of the requested tile. | ||
- `!X!` - [Optional] will be replaced with the "X" value of the requested tile. | ||
- `!Y!` - [Optional] will be replaced with the "Y" value of the requested tile. | ||
- `!Z!` - [Optional] will be replaced with the "Z" value of the requested tile. | ||
- `!SCALE_DENOMINATOR!` - [Optional] scale denominator, assuming 90.7 DPI (i.e. 0.28mm pixel size). | ||
- `!PIXEL_WIDTH!` - [Optional] the pixel width in meters, assuming 256x256 tiles. | ||
- `!PIXEL_HEIGHT!` - [Optional] the pixel height in meters, assuming 256x256 tiles. | ||
- `!ID_FIELD!` - [Optional] the id field name. | ||
- `!GEOM_FIELD!` - [Optional] the geom field name. | ||
- `!GEOM_TYPE!` - [Optional] the geom type field name. | ||
|
||
`*Required`: either the `tablename` or `sql` must be defined, but not both. | ||
|
||
**Example minimum custom SQL config** | ||
|
||
```toml | ||
[[providers.layers]] | ||
name = "rivers" | ||
# Custom sql to be used for this layer as a sub query. ST_AsBinary and !BBOX! filter are applied automatically. | ||
sql = "(SELECT id, geom FROM gis.rivers) AS sub" | ||
``` | ||
|
||
## Environment Variable support | ||
Helpful debugging environment variables: | ||
|
||
- `TEGOLA_SQL_DEBUG`: specify the type of SQL debug information to output. Supports the following values: | ||
- `LAYER_SQL`: print layer SQL as they’re 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. | ||
- `LAYER_SQL:EXECUTE_SQL`: print `LAYER_SQL` and `EXECUTE_SQL`. | ||
|
||
Example: | ||
|
||
``` | ||
$ TEGOLA_SQL_DEBUG=LAYER_SQL tegola serve --config=/path/to/conf.toml | ||
``` | ||
|
||
## Testing | ||
Testing is designed to work against a live SAP HANA database. To see how to set up a database check this [github actions script](https://github.com/go-spatial/tegola/blob/master/.github/worksflows/on_pr_push.yml). To run the HANA tests, the following environment variables need to be set: | ||
|
||
```bash | ||
$ export RUN_HANA_TESTS=yes | ||
$ export HANA_CONNECTION_STRING="hdb://myuser:[email protected]:443?TLSInsecureSkipVerify" | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package hana | ||
|
||
import ( | ||
"os" | ||
"strings" | ||
) | ||
|
||
// debug determines weather extra debugging output is enabled. | ||
// change debug to true to enable additional debugging output | ||
// for this package | ||
const debug = false | ||
|
||
const ( | ||
EnvSQLDebugName = "TEGOLA_SQL_DEBUG" | ||
EnvSQLDebugLayer = "LAYER_SQL" | ||
EnvSQLDebugExecute = "EXECUTE_SQL" | ||
) | ||
|
||
var ( | ||
debugLayerSQL bool | ||
debugExecuteSQL bool | ||
) | ||
|
||
func init() { | ||
debugLayerSQL = strings.Contains(os.Getenv(EnvSQLDebugName), EnvSQLDebugLayer) | ||
debugExecuteSQL = strings.Contains(os.Getenv(EnvSQLDebugName), EnvSQLDebugExecute) | ||
} |
Oops, something went wrong.