Hi Jeetu
Below is an example that seems to work for me. Tell me how that goes for you.
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
from sqlalchemy.sql import functions, select, func, column
from sqlalchemy.dialects.postgresql import BYTEA
from geoalchemy2 import Geometry
from geoalchemy2.functions import GenericFunction
import mercantile
class ST_AsMVTGeom(GenericFunction):
name = 'ST_AsMVTGeom'
type = Geometry
class ST_AsMVT(functions.GenericFunction):
type = BYTEA
metadata = MetaData()
arrond = Table('arrond', metadata,
Column('gid', Integer, primary_key=True),
Column('nom', String),
Column('geom3857', Geometry('MultiPolygon', 3857))
)
engine = create_engine('postgresql://localhost:5432/formation', echo=True)
xmin, ymin, xmax, ymax = mercantile.xy_bounds(8, 5, 4)
subq = select([
func.ST_AsMVTGeom(arrond.c.geom3857,
func.ST_MakeBox2D(func.ST_Point(xmin, ymin),
func.ST_Point(xmax,
ymax))).label('geom')
])
subq = subq.alias('q')
q = select([func.ST_AsMVT(column('q'), 'layer', 4096,
'geom')]).select_from(subq)
conn = engine.connect()
tile = conn.scalar(q)
with open('tile.mvt', 'wb') as f:
f.write(tile)
--
Eric