具有我自己的OSM数据服务器的OpenLayers


9

我已经通过设置PostGIS,导入Planet.osm数据快照(花了几天时间)以及设置Mapnik / cascadenik等来设置自己的OSM数据库/瓦片服务器的过程。我可以手动呈现自己的generate_image.py我可以用手动制作图块集generate_tiles.py。我花了很多时间使用cascadenik生成自己的自定义样式模板,并从中生成切片,对此我感到非常满意。

我的新问题是使用OpenLayers设置示例滑动图以在同一服务器上运行...

我已经对其进行了一些配置并可以正常工作;设置Apache,mod_python,TileCache等。它将图块渲染到滑动贴图中,但是我认为我在OpenLayers中搞砸了所有参数。这是我目前所拥有的(它在所有缩放级别上都呈现出一片空白):

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <script src="http://openlayers.org/api/OpenLayers.js"></script> 
    <script type="text/javascript">
        var map;

        function init() {
                map = new OpenLayers.Map ("map", {
                        maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
                        maxResolution: 156543.0399,
                        numZoomLevels: 19,
                        units: 'm',
                        projection: new OpenLayers.Projection("EPSG:900913"),
                        displayProjection: new OpenLayers.Projection("EPSG:4326")
                } );

                layer = new OpenLayers.Layer.TMS( "OSM", "/tilecache/tilecache.py/", {layername: 'osm', type: 'png'} );
                map.addLayer(layer);
                map.addControl(new OpenLayers.Control.PanZoomBar());
                map.setCenter(new OpenLayers.LonLat(-82.686195, 27.84788), 12)
        }
        </script> 
  </head>
<body onload="init()">
    <div id="map"></div>
</body>
</html>

我觉得图层选项参数有问题,但是找不到很好的文档来描述用于显示由Mapnik渲染的常规OSM瓷砖的标准参数...

有什么明显的我想念的东西会导致这个问题吗?

这也是我在tilecache.cfg中拥有的所有内容:

[cache]
type=Disk
base=/tmp/tilecache
[osm]
type=Mapnik
spherical_mercator=true
mapfile=/home/user/mapfile.xml

Answers:


8

注意事项:我建议使用mod_wsgi而不是mod_python。重要的是,必须将Apache prefork与mod_python一起使用,或者(理想情况下)在守护程序模式下(线程数= 1,进程数= N,N最好与逻辑处理器的数量匹配)使用mod_wsgi。守护程序模式下的mod_wsgi可以与Apache prefork或worker一起使用。原因是TileCache缓存了mapnik.Map对象,因此不应在线程之间共享它。Mapnik核心是完全线程安全的,但是多线程服务器应用程序需要为每个线程创建一个mapnik.Map对象的实例。Mod_tile和Paleoserver是以这种方式支持多线程渲染的应用程序示例,但TileCache不支持此方法。但是,在线程= 1的情况下运行TileCache + Mapnik + mod_wsgi守护程序模式是一种不错的选择,

至于您的图层配置,请尝试添加“ serviceVersion”:

var tms = new OpenLayers.Layer.TMS(“ TileCache Mapnik Layer”,url,{serviceVersion:“ 1.0.0”,layername:“ osm”,type:“ png”});


谢谢!这解决了问题,但现在setCenter无法正常工作-我认为它将达到正确的缩放级别,但其中心位于ll =(0,0)(非非洲)...米与dec可能存在问题。度?另外,感谢您的建议:re_mod_wsgi。我将以这种方式进行设置,看看是否可以获得更好的性能。我在具有6核和12 GB RAM的VM中运行,因此对于一些快速渲染/缓存来说应该足够了。
colemanm

2
OSM坐标以米为单位,因此您必须将中心设置为投影米。参见docs.openlayers.org/library/…
Christopher Schmidt

谢谢,这似乎是我的问题-将setCenter与米中的坐标一起使用时,它可以工作。
colemanm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.