Я в процессе создания тайлового сервера, и у меня есть приведенный ниже оператор SQL, который идеально создает тайлы. Я только изучаю SqlAlchemy и GeoAlchemy и хотел бы получить несколько указателей о том, где начать преобразование приведенного ниже запроса в запрос GeoAlchemy.
У меня есть функции, которых обычно не существует в GeoAlchemey:
class ST_AsMVTGeom(GenericFunction):
name = 'ST_AsMVTGeom'
type = Geometry
class ST_AsMVT(functions.GenericFunction):
type = BYTEA
Нижеприведенный оператор используется в настоящее время:
def envelopeToSQL(tbl, z, x, y):
#https://github.com/pramsey/minimal-mvt/blob/8b736e342ada89c5c2c9b1c77bfcbcfde7aa8d82/minimal-mvt.py#L119-L137
env = tileToEnvelope(z,x,y)
tbl = {**tbl, **env}
# Materialize the bounds, select the relevant geometry and clip to MVT bounds, convert to MVT format
sql_tmpl= """WITH webmercator(envelope) AS (
SELECT ST_Segmentize(ST_MakeEnvelope({xmin}, {ymin}, {xmax}, {ymax}, 3857),{segSize}) AS geom,
ST_Segmentize(ST_MakeEnvelope({xmin}, {ymin}, {xmax}, {ymax}, 3857),{segSize})::box2d AS b2d
),
wgs84(envelope) AS (
SELECT ST_Transform((SELECT envelope FROM webmercator), {srid})
),
geometries({attrColumns}, geom) AS (
SELECT {attrColumns}, ST_Transform(ST_Intersection(geom, ST_MakeEnvelope(-180, -89.9, 180, 89.9, {srid})), 3857)
FROM {tableName}
WHERE geom && (SELECT envelope FROM wgs84) -- do not read objects outside the tile
)
SELECT ST_AsMVT(tile) FROM (
SELECT {attrColumns}, ST_AsMVTGeom(geom, (SELECT envelope FROM webmercator), {extent}, 256, false)
FROM geometries
) AS tile"""#.format(**tbl)#.format(z, x, y, TableName)
return sql_tmpl.format(**tbl)
Есть предложения, где начать преобразование его в оператор геоалхимии?