Openlayers + Mapnik + Tilecache 配置问题

1 投票
2 回答
2750 浏览
提问于 2025-04-15 16:17

我正在尝试设置 Mapnik 和 tilecache,但在浏览器中设置了 bbox 参数后看不到任何地图瓦片。不过,当我不指定 bbox 时,一切都正常,我可以看到实际的地图瓦片。

我想知道有没有人能指出代码中的问题。我觉得我已经尝试了所有能想到的方法(在我有限的能力范围内),但还是不明白为什么它不工作。顺便提一下,所有的地图图层(用于 Mapnik 样式)都是从 PostGIS 数据库中获取的,并且在运行时由 Mapnik 进行不同的投影转换。

OpenLayers 代码:

     var map, layer;

     function init(){
        var map, layer;

            var options =     {
                    numZoomLevels:20,
                    maxResolution: 360/512,
                    projection: "EPSG:4326",
                    maxExtent: new OpenLayers.Bounds(-2.0,50.0,2.0,54.0)
                    //not working when uncommented
                };

        map = new OpenLayers.Map( 'map', options);
        layer = new OpenLayers.Layer.WMS( "Map24","tilecache.py?",
                                    {
                                        layers:'mapnik24',
                                        format: 'image/png',
                                        srs: 'EPSG:4326'
                                    } );
        map.addLayer(layer);
        map.addControl( new OpenLayers.Control.PanZoomBar());
        map.addControl( new OpenLayers.Control.MousePosition());
        map.addControl( new OpenLayers.Control.LayerSwitcher());
        map.addControl( new OpenLayers.Control.Permalink("permalink"));

        if (!map.getCenter()) map.zoomToMaxExtent();
   }

Tilecache.cfg:

[mapnik24]

type=Mapnik

mapfile=/somedit/map24.xml

bbox=-2.0,50.0,2.0,54.0

levels=20

srs=EPSG:4326

projection=+proj=latlong +datum=WGS84

--

谢谢,

A

2 个回答

1

从你的代码来看,我觉得你是在询问一个区域,这个区域的经度在东经50度到54度之间,纬度在南纬2度到北纬2度之间。这样理解对吗?

如果是这样的话,我觉得你的范围设置反了。南纬2度应该在下面,北纬2度应该在上面。所以正确的边界应该是 2.0,50.0,-2.0,54.0

另外,在OpenStreetMap上查看这个区域,似乎那里没什么东西,你真的想要这个区域吗?

3

OpenLayers.Bounds这个构造函数的参数顺序是:左、下、右、上。根据你正在使用的边界,把你的JavaScript代码改成这样:

            var options =     {
                numZoomLevels:20,
                maxResolution: 360/512,
                projection: "EPSG:4326",
                maxExtent: new OpenLayers.Bounds(50.0,-2.0,54.0,2.0)
                //not working when uncommented
            };

你有没有尝试直接把tilecache.py的参数填进去,看看能否生成一个瓦片?

撰写回答