Я подаю шейп-файл, преобразовав его в плитку, затем байты, а затем в карту листовки. Все это работает, за одним исключением, широты растягиваются все больше к полюсам при уменьшении, но этот эффект исчезает при увеличении. И розовые, и синие линии принадлежат одному и тому же набору данных.
При увеличении вы получаете следующее:
############################################################
def tile_ul(x, y, z):
n = 2.0 ** z
lon_deg = x / n * 360.0 - 180.0
lat_rad = arctan(sinh(pi * (1 - 2 * y / n)))
lat_deg = degrees(lat_rad)
return lon_deg,lat_deg
############################################################
def get_tile(z,x,y):
xmin, ymin = tile_ul(x, y, z)
xmax, ymax = tile_ul(x + 1, y + 1, z)
query = """SELECT ST_AsMVT(tile) FROM (
SELECT id, ST_AsMVTGeom(geom, ST_MakeEnvelope( %s, %s, %s, %s ,4326), 4096, 256, false ) geom
FROM seaarea ) as tile"""
cursor = db.connection.cursor()
cursor.execute(query,(xmin,ymin,xmax,ymax))
tile = bytes(cursor.fetchone()[0])
cursor.close()
return tile
код клиента:
var url = "http://localhost:5000/tiles/{z}/{x}/{y}"
var mapillaryLayer = L.vectorGrid.protobuf(url, {vectorTileLayerStyles: {
fillColor: 'red'}}).addTo(mymap);
Любые предложения будут с благодарностью.