OpenLayers com meu próprio servidor de dados OSM

9

Passei pelo processo de configuração do meu próprio banco de dados / servidor OSM, configurando o PostGIS, importando o instantâneo de dados Planet.osm (demorou alguns dias) e configurando o Mapnik / cascadenik, etc. amostra de peças com generate_image.pye eu posso produzir manualmente conjuntos de peças com generate_tiles.py. Passei um tempo decente gerando meu próprio modelo de estilo personalizado usando o cascadenik e gerando blocos a partir dele, com o que estou muito feliz.

Meu novo problema é a configuração de um exemplo de mapa escorregadio com o OpenLayers para execução no mesmo servidor ...

Eu tenho um pouco configurado e funcionando; configure o Apache, mod_python, TileCache, etc. Ele renderiza blocos no mapa deslizante, mas acho que tenho todos os parâmetros errados no OpenLayers. Aqui está o que eu tenho atualmente (que processa o que parece um oceano vazio em todos os níveis de zoom):

<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>

Sinto que há algo errado com os parâmetros de opções da camada, mas não consigo encontrar uma boa documentação descrevendo os parâmetros padrão a serem usados ​​para exibir blocos OSM gerais renderizados pelo Mapnik ...

Há algo óbvio que estou faltando que poderia causar esse problema?

Aqui está tudo o que tenho no tilecache.cfg também:

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

Respostas:

8

Uma observação: eu recomendo o mod_wsgi sobre o mod_python. E é importante usar o Apache prefork com mod_python ou (idealmente) mod_wsgi no modo daemon com threads = 1 e processos = N (onde N é melhor correspondido ao número de processadores lógicos). O mod_wsgi no modo daemon pode ser usado com o Apache prefork ou worker. A razão para isso é que o TileCache armazena em cache o objeto mapnik.Map e, portanto, não deve ser compartilhado entre os threads. O núcleo do Mapnik é perfeitamente seguro para threads, mas aplicativos de servidor multithread precisam criar uma instância de um objeto mapnik.Map por thread. Mod_tile e Paleoserver são exemplos de aplicativos que suportam renderização multithread dessa maneira, mas o TileCache não suporta isso. No entanto, a execução do modo daemon TileCache + Mapnik + mod_wsgi com threads = 1 é uma boa rota,

Na configuração da sua camada, tente adicionar "serviceVersion":

var tms = new OpenLayers.Layer.TMS ("Layer Mapnik TileCache", url, {serviceVersion: "1.0.0", nome do arquivo: "osm", tipo: "png"});

Dane Springmeyer
fonte
Obrigado! Isso resolveu o problema, mas agora o setCenter não está funcionando - acho que está no nível correto de zoom, mas está centrado em ll = (0, 0) (fora da África) ... Possivelmente um problema com metros vs. dec . graus? Além disso, obrigado pelo conselho re: mod_wsgi. Vou configurá-lo dessa maneira e ver se consigo um melhor desempenho. Estou executando em uma VM com 6 núcleos e 12 GB de RAM, por isso deve ser suficiente para renderização / cache rápidos.
Colemanm 22/10/10
2
As coordenadas do OSM estão em metros, portanto você terá que definir o centro em metros projetados. Veja docs.openlayers.org/library/… .
Christopher Schmidt
Obrigado, parece que esse foi o meu problema - ao usar o setCenter com cabos em metros, ele funciona.
Colemanm 26/10/10