我有一个边界从-180º到180º的经度,但纬度从-90º到83.64513º。在使用leaflet
的前端应用程序中,当它要求mapnik
服务器显示图块时,我将图块位置转换为经度/纬度。经度适用,但纬度不适用。我使用这个formula转换:Mapnik没有-85.0511º到85.0511º形状问题
lat = arctan(sinh(pi*(1 - 2*y/2^zoom))) * 180/pi
问题(我真的不知道,如果这是问题...)的是,这个公式也承认,纬度去从-85.0511º到85.0511º ,然后我得到错误回报这样的形象:
我能做什么来解决这个问题呢?改变形状的大小(那我该怎么做?),也许有一个通用的公式,我可以通过任何纬度或我错过了一些步骤。
而不是使用上面的公式,我也尝试使用此code与GoogleTile
方法。得到了相同的结果...
这里是我使用的代码:
@app.route('/tiles/<z>/<x>/<y>', methods=['GET'])
def tiles(z, x, y):
filename = tiles_path + r"tile_%s_%s_%s.png" % (z, x, y,)
filename = filename.encode('ascii', 'ignore')
z = float(z); x = int(x); y = int(y)
if not os.path.isfile(filename):
x_1, y_1 = num2deg(x, y, z)
x_2, y_2 = num2deg(x + 1, y + 1, z)
envelope = mapnik.Envelope(x_1, y_1, x_2, y_2)
mapnik_map.zoom_to_box(envelope)
mapnik.render_to_file(mapnik_map, filename, "png")
return send_file(filename)
def num2deg(xtile, ytile, zoom):
n = 2.0 ** zoom
lon_deg = xtile/n * 360.0 - 180.0
lat_rad = atan(sinh(pi * (1 - 2 * ytile/n)))
lat_deg = degrees(lat_rad)
return lon_deg, lat_deg
如果我改变aspect_fix_mode
到ADJUST_CANVAS_HEIGHT
:
mapnik_map.aspect_fix_mode = mapnik.aspect_fix_mode.ADJUST_CANVAS_HEIGHT
我没有以上问题,但设置这个,我得到地图延伸出 和扭曲。我正在使用的是shapefile。
编辑:
Mapnik的默认的投影:
map_obj.srs
>>> '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'
map_obj.layers[0].srs
>>> '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'
编辑2:
试图修改这样的地图,并层srs
:
mapnik_map = mapnik.Map(256, 256, "+init=epsg:3857")
...
layer = mapnik.Layer("layer_name", "+init=epsg:4326")
但是,什么时候在地图srs
设置专门呈现。
关于Mapnik的不知道,不是吗在[Pseudo-Mercator](http://epsg.io/3857)中指定瓷砖?数据似乎在[EPSG:4326](http://epsg.io/4326)中,它是您参考的代码中支持的Tile格式之一'TMS Global Geodetic Profile' – user27874
请参阅编辑。 [Here](https://github.com/mapnik/mapnik/wiki/GettingStartedInPython),这是说:_'map.srs'是地图的目标投影,可以是任何你想要的。 –