From 63029e717b91e1b9744c6c50a6edd83860e02532 Mon Sep 17 00:00:00 2001 From: Rub21 Date: Fri, 15 Mar 2024 18:12:31 -0500 Subject: [PATCH 1/4] Update env vars staging configs --- .github/workflows/chartpress.yaml | 16 ++++++++-------- values.staging.template.yaml | 6 +++--- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/chartpress.yaml b/.github/workflows/chartpress.yaml index deb70199..13c7fc87 100644 --- a/.github/workflows/chartpress.yaml +++ b/.github/workflows/chartpress.yaml @@ -50,14 +50,14 @@ jobs: STAGING_OAUTH_CLIENT_ID: ${{ secrets.STAGING_OAUTH_CLIENT_ID }} STAGING_OAUTH_KEY: ${{ secrets.STAGING_OAUTH_KEY }} STAGING_S3_BUCKET: ${{ secrets.STAGING_S3_BUCKET }} - STAGING_TILER_DB: ${{ secrets.STAGING_TILER_DB }} - STAGING_TILER_DB_EBS: ${{ secrets.STAGING_TILER_DB_EBS }} - STAGING_TILER_DB_HOST: ${{ secrets.STAGING_TILER_DB_HOST }} + # STAGING_TILER_DB: ${{ secrets.STAGING_TILER_DB }} + # STAGING_TILER_DB_EBS: ${{ secrets.STAGING_TILER_DB_EBS }} + # STAGING_TILER_DB_HOST: ${{ secrets.STAGING_TILER_DB_HOST }} STAGING_TILER_DB_PASSWORD: ${{ secrets.STAGING_TILER_DB_PASSWORD }} - STAGING_TILER_DB_USER: ${{ secrets.STAGING_TILER_DB_USER }} - STAGING_TILER_IMPOSM_EBS: ${{ secrets.STAGING_TILER_IMPOSM_EBS }} + # STAGING_TILER_DB_USER: ${{ secrets.STAGING_TILER_DB_USER }} + # STAGING_TILER_IMPOSM_EBS: ${{ secrets.STAGING_TILER_IMPOSM_EBS }} STAGING_TILER_IMPOSM_REPLICATION_URL: ${{ secrets.STAGING_TILER_IMPOSM_REPLICATION_URL }} - STAGING_TILER_SERVER_EBS: ${{ secrets.STAGING_TILER_SERVER_EBS }} + # STAGING_TILER_SERVER_EBS: ${{ secrets.STAGING_TILER_SERVER_EBS }} STAGING_TILER_CACHE_AWS_ACCESS_KEY_ID: ${{ secrets.STAGING_TILER_CACHE_AWS_ACCESS_KEY_ID }} STAGING_TILER_CACHE_AWS_SECRET_ACCESS_KEY: ${{ secrets.STAGING_TILER_CACHE_AWS_SECRET_ACCESS_KEY }} STAGING_TM_API_CONSUMER_KEY: ${{ secrets.STAGING_TM_API_CONSUMER_KEY }} @@ -67,12 +67,12 @@ jobs: STAGING_TM_API_DB_PASSWORD: ${{ secrets.STAGING_TM_API_DB_PASSWORD }} STAGING_TM_API_DB_USER: ${{ secrets.STAGING_TM_API_DB_USER }} STAGING_TM_API_SECRET: ${{ secrets.STAGING_TM_API_SECRET }} - STAGING_NOMINATIM_DB_EBS: ${{ secrets.STAGING_NOMINATIM_DB_EBS }} + # STAGING_NOMINATIM_DB_EBS: ${{ secrets.STAGING_NOMINATIM_DB_EBS }} # STAGING_NOMINATIM_PG_PORT: ${{ secrets.STAGING_NOMINATIM_PG_PORT }} # STAGING_NOMINATIM_PG_USER: ${{ secrets.STAGING_NOMINATIM_PG_USER }} STAGING_NOMINATIM_PG_PASSWORD: ${{ secrets.STAGING_NOMINATIM_PG_PASSWORD }} # STAGING_NOMINATIM_PG_DATABASE: ${{ secrets.STAGING_NOMINATIM_PG_DATABASE }} - STAGING_OVERPASS_API_DB_EBS: ${{ secrets.STAGING_OVERPASS_API_DB_EBS }} + # STAGING_OVERPASS_API_DB_EBS: ${{ secrets.STAGING_OVERPASS_API_DB_EBS }} STAGING_NEW_RELIC_LICENSE_KEY: ${{ secrets.STAGING_NEW_RELIC_LICENSE_KEY }} STAGING_NEW_RELIC_APP_NAME: ${{ secrets.STAGING_NEW_RELIC_APP_NAME }} STAGING_OSMCHA_PG_USER: ${{ secrets.STAGING_OSMCHA_PG_USER }} diff --git a/values.staging.template.yaml b/values.staging.template.yaml index ee81f010..b8eefed8 100644 --- a/values.staging.template.yaml +++ b/values.staging.template.yaml @@ -344,9 +344,9 @@ osm-seed: tilerDb: enabled: true env: - POSTGRES_HOST: {{STAGING_TILER_DB_HOST}} - POSTGRES_DB: {{STAGING_TILER_DB}} - POSTGRES_USER: {{STAGING_TILER_DB_USER}} + POSTGRES_HOST: staging-tiler-db + POSTGRES_DB: tiler-osm + POSTGRES_USER: postgres POSTGRES_PASSWORD: {{STAGING_TILER_DB_PASSWORD}} POSTGRES_PORT: 5432 # for 20Gi From 51a14e16f3317a499827f83b5c3d999d79857d39 Mon Sep 17 00:00:00 2001 From: Rub21 Date: Fri, 15 Mar 2024 18:34:35 -0500 Subject: [PATCH 2/4] Add rapid github action --- .github/workflows/frontend-rapid.yaml | 91 +++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 .github/workflows/frontend-rapid.yaml diff --git a/.github/workflows/frontend-rapid.yaml b/.github/workflows/frontend-rapid.yaml new file mode 100644 index 00000000..0ded9cce --- /dev/null +++ b/.github/workflows/frontend-rapid.yaml @@ -0,0 +1,91 @@ +name: Build and Publish Rapid site +on: + push: + branches: + - 'main' + - 'staging' + - 'deploy/rapid' +jobs: + rapid: + runs-on: ubuntu-latest + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.8.0 + with: + access_token: ${{ github.token }} + - name: Set environment variables - Staging + if: github.ref == 'refs/heads/staging' || github.ref == 'refs/heads/deploy/rapid' + uses: allenevans/set-env@v2.0.0 + with: + RAPID_BUCKET: rapid-staging.openhistoricalmap.org + CLOUDFRONT_DISTRIBUTION_ID: E12LU6N0NDXVAX + OHM_URL: https://staging.openhistoricalmap.org + OHM_API_URL: https://staging.openhistoricalmap.org + OHM_CLIENT_ID: vwLXYrZ29YiwxWR5LvAcsiG9paLwE7hBod27O-tl16Q + OHM_CLIENT_SECRET: ${{ secrets.STAGING_RAPID_CLIENT_SECRET }} + - name: Set environment variables - Production + if: github.ref == 'refs/heads/main' + uses: allenevans/set-env@v2.0.0 + with: + RAPID_BUCKET: rapid.openhistoricalmap.org + CLOUDFRONT_DISTRIBUTION_ID: E3VOVJ6DH8HALM + OHM_URL: https://www.openhistoricalmap.org + OHM_API_URL: https://www.openhistoricalmap.org + OHM_CLIENT_ID: RIIz9U-oZmYzi_LXCKMHwHPgbJxALWAZRcgk9F8cppk + OHM_CLIENT_SECRET: ${{ secrets.PRODUCTION_RAPID_CLIENT_SECRET }} + - name: Checkout rapid repo + uses: actions/checkout@v2 + with: + repository: OpenHistoricalMap/Rapid + ref: 042f2e27ab0b9a5192549fc17a1ee0f91acab67f + - name: Use Node.js 18 + uses: actions/setup-node@v1 + with: + node-version: 18 + - name: Cache node modules + id: cache-node-modules + uses: actions/cache@v2 + env: + cache-name: cache-node-modules + with: + path: node_modules + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Install modules + if: steps.cache-node-modules.outputs.cache-hit != 'true' + run: npm install + - name: Build rapid frontend + run: | + export OSM_URL=https://www.openstreetmap.org + export OSM_API_URL=https://api.openstreetmap.org + export OSM_CLIENT_ID=O3g0mOUuA2WY5Fs826j5tP260qR3DDX7cIIE2R2WWSc + export OSM_CLIENT_SECRET=b4aeHD1cNeapPPQTrvpPoExqQRjybit6JBlNnxh62uE + files=("modules/services/OsmService.js" "dist/index.html" "dist/latest.html" "index.html") + for file in "${files[@]}"; do + sed -e "s|${OSM_URL}|${OHM_URL}|g" "$file" > tmpfile && mv tmpfile "$file" + sed -e "s|${OSM_API_URL}|${OHM_API_URL}|g" "$file" > tmpfile && mv tmpfile "$file" + sed -e "s|${OSM_CLIENT_ID}|${OHM_CLIENT_ID}|g" "$file" > tmpfile && mv tmpfile "$file" + sed -e "s|${OSM_CLIENT_SECRET}|${OHM_CLIENT_SECRET}|g" "$file" > tmpfile && mv tmpfile "$file" + done + npm run clean + npm run build + npm run dist + sed -e "s|i.client_id|i.client_id,client_secret:\"${OHM_CLIENT_SECRET}\"|g" dist/rapid.min.js > tmpfile && mv tmpfile dist/rapid.min.js + - uses: actions/setup-python@v2 + with: + python-version: '3.8' + - name: Install aws cli + run: | + python -m pip install --upgrade pip + pip install awscli + - name: Push data to s3 and clean cloudfront cache + if: ${{ success() }} + run: | + aws s3 sync dist/ s3://${RAPID_BUCKET}/ + aws cloudfront create-invalidation --distribution-id=${CLOUDFRONT_DISTRIBUTION_ID} --paths=/ + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} From a6a78fa73e6b2fa2071a4cdcd92fc6050f36b5a6 Mon Sep 17 00:00:00 2001 From: Rub21 Date: Sat, 16 Mar 2024 10:31:36 -0500 Subject: [PATCH 3/4] Add a usage attribute to the transport_line --- images/tiler-server/config/config.toml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/images/tiler-server/config/config.toml b/images/tiler-server/config/config.toml index 645662b3..3d752189 100644 --- a/images/tiler-server/config/config.toml +++ b/images/tiler-server/config/config.toml @@ -245,14 +245,14 @@ max_connections = 40 geometry_fieldname = "geometry" geometry_type = "linestring" id_fieldname = "osm_id" - sql = "SELECT ST_AsMVTGeom(geometry,!BBOX!) AS geometry, ABS(osm_id) as osm_id, type, tunnel, bridge, ref, tags->'start_date' as start_date, tags->'end_date' as end_date, isodatetodecimaldate(pad_date(tags->'start_date', 'start'), FALSE) AS start_decdate, isodatetodecimaldate(pad_date(tags->'end_date', 'end'), FALSE) AS end_decdate FROM osm_transport_lines_gen0 WHERE type IN ('motorway','trunk','motorway_link','trunk_link','primary') AND tunnel = 0 AND bridge = 0 AND geometry && !BBOX!" + sql = "SELECT ST_AsMVTGeom(geometry,!BBOX!) AS geometry, ABS(osm_id) as osm_id, type, tunnel, bridge, ref, tags->'usage' as usage, tags->'start_date' as start_date, tags->'end_date' as end_date, isodatetodecimaldate(pad_date(tags->'start_date', 'start'), FALSE) AS start_decdate, isodatetodecimaldate(pad_date(tags->'end_date', 'end'), FALSE) AS end_decdate FROM osm_transport_lines_gen0 WHERE type IN ('motorway','trunk','motorway_link','trunk_link','primary') AND tunnel = 0 AND bridge = 0 AND geometry && !BBOX!" [[providers.layers]] name = "transport_lines_gen1" geometry_fieldname = "geometry" geometry_type = "linestring" id_fieldname = "osm_id" - sql = """SELECT ST_AsMVTGeom(geometry,!BBOX!) AS geometry, osm_id, ref, class, type, tags->'start_date' as start_date, tags->'end_date' as end_date, isodatetodecimaldate(pad_date(tags->'start_date', 'start'), FALSE) AS start_decdate, isodatetodecimaldate(pad_date(tags->'end_date', 'end'), FALSE) AS end_decdate + sql = """SELECT ST_AsMVTGeom(geometry,!BBOX!) AS geometry, osm_id, ref, class, type, tags->'usage' as usage, tags->'start_date' as start_date, tags->'end_date' as end_date, isodatetodecimaldate(pad_date(tags->'start_date', 'start'), FALSE) AS start_decdate, isodatetodecimaldate(pad_date(tags->'end_date', 'end'), FALSE) AS end_decdate FROM osm_transport_lines_gen1 WHERE type IN ('motorway', 'trunk', 'primary', 'primary_link', 'secondary', 'motorway_link', 'trunk_link', 'rail', 'subway', 'light_rail', 'tram', 'narrow_gauge', 'monorail', 'preserved', 'miniature', 'funicular', 'taxiway', 'runway', 'proposed', 'construction', 'disused', 'abandoned', 'razed', 'ferry') AND geometry && !BBOX!""" @@ -262,7 +262,7 @@ max_connections = 40 geometry_fieldname = "geometry" geometry_type = "linestring" id_fieldname = "osm_id" - sql = """SELECT ST_AsMVTGeom(geometry,!BBOX!) AS geometry, osm_id, name, ref, class, type, tunnel, bridge, access, service, ford, tags->'construction' as construction, tags->'start_date' as start_date, tags->'end_date' as end_date, isodatetodecimaldate(pad_date(tags->'start_date', 'start'), FALSE) AS start_decdate, isodatetodecimaldate(pad_date(tags->'end_date', 'end'), FALSE) AS end_decdate + sql = """SELECT ST_AsMVTGeom(geometry,!BBOX!) AS geometry, osm_id, name, ref, class, type, tunnel, bridge, access, service, ford, tags->'construction' as construction, tags->'usage' as usage, tags->'start_date' as start_date, tags->'end_date' as end_date, isodatetodecimaldate(pad_date(tags->'start_date', 'start'), FALSE) AS start_decdate, isodatetodecimaldate(pad_date(tags->'end_date', 'end'), FALSE) AS end_decdate FROM osm_transport_lines WHERE type IN ('motorway', 'motorway_link', 'trunk', 'trunk_link', 'primary', 'primary_link', 'secondary', 'secondary_link', 'tertiary', 'tertiary_link', 'rail', 'subway', 'light_rail', 'tram', 'narrow_gauge', 'monorail', 'preserved', 'miniature', 'funicular', 'taxiway', 'runway', 'proposed', 'construction', 'disused', 'abandoned', 'razed', 'apron', 'ferry') AND geometry && !BBOX!""" @@ -272,7 +272,7 @@ max_connections = 40 geometry_fieldname = "geometry" geometry_type = "linestring" id_fieldname = "id" - sql = """SELECT ST_AsMVTGeom(geometry,!BBOX!) AS geometry, id, osm_id, name, ref, class, type, tunnel, bridge, access, service, ford, tags->'construction' as construction, tags->'start_date' as start_date, tags->'end_date' as end_date, isodatetodecimaldate(pad_date(tags->'start_date', 'start'), FALSE) AS start_decdate, isodatetodecimaldate(pad_date(tags->'end_date', 'end'), FALSE) AS end_decdate + sql = """SELECT ST_AsMVTGeom(geometry,!BBOX!) AS geometry, id, osm_id, name, ref, class, type, tunnel, bridge, access, service, ford, tags->'construction' as construction, tags->'usage' as usage, tags->'start_date' as start_date, tags->'end_date' as end_date, isodatetodecimaldate(pad_date(tags->'start_date', 'start'), FALSE) AS start_decdate, isodatetodecimaldate(pad_date(tags->'end_date', 'end'), FALSE) AS end_decdate FROM osm_transport_lines WHERE type IN ('motorway', 'motorway_link', 'trunk', 'trunk_link', 'primary', 'primary_link', 'secondary', 'secondary_link', 'tertiary', 'tertiary_link', 'rail', 'subway', 'light_rail', 'tram', 'narrow_gauge', 'monorail', 'preserved', 'miniature', 'funicular', 'taxiway', 'runway', 'residential', 'taxiway', 'runway', 'proposed', 'construction', 'disused', 'abandoned', 'razed', 'apron', 'ferry') AND geometry && !BBOX!""" @@ -282,7 +282,7 @@ max_connections = 40 geometry_fieldname = "geometry" geometry_type = "linestring" id_fieldname = "id" - sql = """SELECT ST_AsMVTGeom(geometry,!BBOX!) AS geometry, id, osm_id, name, ref, class, type, tunnel, bridge, access, service, ford, tags->'construction' as construction, tags->'start_date' as start_date, tags->'end_date' as end_date, isodatetodecimaldate(pad_date(tags->'start_date', 'start'), FALSE) AS start_decdate, isodatetodecimaldate(pad_date(tags->'end_date', 'end'), FALSE) AS end_decdate + sql = """SELECT ST_AsMVTGeom(geometry,!BBOX!) AS geometry, id, osm_id, name, ref, class, type, tunnel, bridge, access, service, ford, tags->'construction' as construction, tags->'usage' as usage, tags->'start_date' as start_date, tags->'end_date' as end_date, isodatetodecimaldate(pad_date(tags->'start_date', 'start'), FALSE) AS start_decdate, isodatetodecimaldate(pad_date(tags->'end_date', 'end'), FALSE) AS end_decdate FROM osm_transport_lines WHERE geometry && !BBOX!""" From e21e72919db6e674e7d14d3e32da2e3e28a33b9a Mon Sep 17 00:00:00 2001 From: Rub21 Date: Tue, 19 Mar 2024 11:30:02 -0500 Subject: [PATCH 4/4] Adjust Simplification in tiler. Update config to use var envs files Set --acl public-read for rapid bucket files Remove deployment rapid in branch deploy/rapid Update helm deployment for staging and production --- .github/workflows/chartpress.yaml | 6 +++++- .github/workflows/frontend-rapid.yaml | 5 ++--- .gitignore | 4 +++- compose/tiler.yml | 2 +- compose/web.yml | 4 ++-- images/tiler-server/config/config.toml | 10 +++++----- 6 files changed, 18 insertions(+), 13 deletions(-) diff --git a/.github/workflows/chartpress.yaml b/.github/workflows/chartpress.yaml index 13c7fc87..1d33ac80 100644 --- a/.github/workflows/chartpress.yaml +++ b/.github/workflows/chartpress.yaml @@ -1,5 +1,9 @@ name: Chartpress Publish and Deploy -on: push +on: + push: + branches: + - 'main' + - 'staging' jobs: build: runs-on: ubuntu-20.04 diff --git a/.github/workflows/frontend-rapid.yaml b/.github/workflows/frontend-rapid.yaml index 0ded9cce..6b99c4b5 100644 --- a/.github/workflows/frontend-rapid.yaml +++ b/.github/workflows/frontend-rapid.yaml @@ -4,7 +4,6 @@ on: branches: - 'main' - 'staging' - - 'deploy/rapid' jobs: rapid: runs-on: ubuntu-latest @@ -14,7 +13,7 @@ jobs: with: access_token: ${{ github.token }} - name: Set environment variables - Staging - if: github.ref == 'refs/heads/staging' || github.ref == 'refs/heads/deploy/rapid' + if: github.ref == 'refs/heads/staging' uses: allenevans/set-env@v2.0.0 with: RAPID_BUCKET: rapid-staging.openhistoricalmap.org @@ -84,7 +83,7 @@ jobs: - name: Push data to s3 and clean cloudfront cache if: ${{ success() }} run: | - aws s3 sync dist/ s3://${RAPID_BUCKET}/ + aws s3 sync dist/ s3://${RAPID_BUCKET}/ --acl public-read aws cloudfront create-invalidation --distribution-id=${CLOUDFRONT_DISTRIBUTION_ID} --paths=/ env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} diff --git a/.gitignore b/.gitignore index e4531d40..418eec33 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,6 @@ images/.env images/tiler.yml values.dev.yaml secrets -tegola \ No newline at end of file +tegola +envs/.env.tiler +envs/.env.web \ No newline at end of file diff --git a/compose/tiler.yml b/compose/tiler.yml index 054efd6b..335d4aa6 100644 --- a/compose/tiler.yml +++ b/compose/tiler.yml @@ -11,5 +11,5 @@ services: ports: - "9090:9090" env_file: - - ../envs/.env.tiler.example + - ../envs/.env.tiler restart: always diff --git a/compose/web.yml b/compose/web.yml index ad5c56a3..e825d9b6 100644 --- a/compose/web.yml +++ b/compose/web.yml @@ -11,7 +11,7 @@ services: volumes: - ./data/db-data:/var/lib/postgresql/data env_file: - - ./.env.web.example + - ./.env.web web: image: osmseed-web:v1 build: @@ -20,7 +20,7 @@ services: ports: - '80:80' env_file: - - ./.env.web.example + - ./.env.web ####### Enable for development mode # volumes: # - ./../../ohm-website:/var/www diff --git a/images/tiler-server/config/config.toml b/images/tiler-server/config/config.toml index 3d752189..af103e03 100644 --- a/images/tiler-server/config/config.toml +++ b/images/tiler-server/config/config.toml @@ -36,35 +36,35 @@ max_connections = 40 geometry_fieldname = "geometry" geometry_type = "multipolygon" id_fieldname = "ogc_fid" - sql = "SELECT ST_AsMVTGeom(ST_Simplify(wkb_geometry, 750),!BBOX!) AS geometry, ogc_fid FROM land_polygons WHERE wkb_geometry && !BBOX!" + sql = "SELECT ST_AsMVTGeom(ST_Simplify(wkb_geometry, 500),!BBOX!) AS geometry, ogc_fid FROM land_polygons WHERE wkb_geometry && !BBOX!" [[providers.layers]] name = "land_3-5" geometry_fieldname = "geometry" geometry_type = "multipolygon" id_fieldname = "ogc_fid" - sql = "SELECT ST_AsMVTGeom(ST_Simplify(wkb_geometry, 300),!BBOX!) AS geometry, ogc_fid FROM land_polygons WHERE wkb_geometry && !BBOX!" + sql = "SELECT ST_AsMVTGeom(ST_Simplify(wkb_geometry, 200),!BBOX!) AS geometry, ogc_fid FROM land_polygons WHERE wkb_geometry && !BBOX!" [[providers.layers]] name = "land_6-7" geometry_fieldname = "geometry" geometry_type = "multipolygon" id_fieldname = "ogc_fid" - sql = "SELECT ST_AsMVTGeom(ST_Simplify(wkb_geometry, 150),!BBOX!) AS geometry, ogc_fid FROM land_polygons WHERE wkb_geometry && !BBOX!" + sql = "SELECT ST_AsMVTGeom(ST_Simplify(wkb_geometry, 70),!BBOX!) AS geometry, ogc_fid FROM land_polygons WHERE wkb_geometry && !BBOX!" [[providers.layers]] name = "land_8-9" geometry_fieldname = "geometry" geometry_type = "multipolygon" id_fieldname = "ogc_fid" - sql = "SELECT ST_AsMVTGeom(ST_Simplify(wkb_geometry, 75),!BBOX!) AS geometry, ogc_fid FROM land_polygons WHERE wkb_geometry && !BBOX!" + sql = "SELECT ST_AsMVTGeom(ST_Simplify(wkb_geometry, 30),!BBOX!) AS geometry, ogc_fid FROM land_polygons WHERE wkb_geometry && !BBOX!" [[providers.layers]] name = "land_10-12" geometry_fieldname = "geometry" geometry_type = "multipolygon" id_fieldname = "ogc_fid" - sql = "SELECT ST_AsMVTGeom(ST_Simplify(wkb_geometry, 30),!BBOX!) AS geometry, ogc_fid FROM land_polygons WHERE wkb_geometry && !BBOX!" + sql = "SELECT ST_AsMVTGeom(ST_Simplify(wkb_geometry, 10),!BBOX!) AS geometry, ogc_fid FROM land_polygons WHERE wkb_geometry && !BBOX!" [[providers.layers]] name = "land_13-15"