Estoy construyendo un pequeño servicio de azulejos para presentar datos postgis sobre la marcha a un mapa de folletos.
para las pruebas estoy utilizando el conjunto de datos ne_110m_admin_0_countries
El primer problema es la extensión de las baldosas devueltas, muchas presentan errores en patrones predecibles. Por ejemplo, en el zoom 0 no se dibuja ningún mosaico por debajo del ecuador.
entre zoom 0 y 3 Nueva Zelanda no existe
y también en el zoom 3 no aparece nada por debajo de 41 grados sur, sin embargo este comportamiento no existe reflejado en el hemisferio norte.
Estoy usando el siguiente para servir a los azulejos en un servidor de matraz:
@app.route('/tiles/test/<int:z>/<int:x>/<int:y>', methods=['GET'])
@login_required
def tiles(z=0, x=0, y=0):
tile = get_tile(z, x, y, 'ne_110m_admin_0_countries')
if tile != None:
response = make_response(tile)
response.headers['Content-Type'] = "application/octet-stream"
return response
else:
return ('', 502)
def get_tile(z,x,y,TableName):
cursor = db.connection.cursor()
query= """WITH webmercator(envelope) AS (
SELECT ST_TileEnvelope({},{},{}) -- z, x, y
),
wgs84(envelope) AS (
SELECT ST_Transform((SELECT envelope FROM webmercator), 4326)
),
geometries(id, geom) AS (
SELECT id, ST_Transform(geom, 3857)
FROM {}
WHERE geom && (SELECT envelope FROM wgs84) -- do not read objects outside the tile
)
SELECT ST_AsMVT(tile) FROM (
SELECT id, ST_AsMVTGeom(geom, (SELECT envelope FROM webmercator))
FROM geometries
) AS tile""".format(z, x, y, TableName)
try:
cursor.execute(query)#,(z,x,y))
tile = bytes(cursor.fetchone()[0])
cursor.close()
return tile
except:
cursor.execute("rollback")
En zonas horarias de tierra natural también muestran problemas extraños cuando se aleja el zoom. Por ejemplo, en el nivel de zoom 4 la longitud de las baldosas es de hasta 158 grados este/oeste, en el zoom 3 es de 135 grados, y en el zoom 2 se restringe aún más a sólo 90 grados este/oeste.
¿Alguna sugerencia sobre por qué el zoom podría estar afectando a los azulejos mostrados?
Cuídense todos.