OpenLayers con il mio server dati OSM


9

Ho completato il processo di impostazione del mio database OSM / server di tessere configurando PostGIS, importando l'istantanea dei dati Planet.osm (impiegando alcuni giorni) e installando Mapnik / cascadenik, ecc. Posso renderizzare manualmente il mio campioni con generate_image.pye posso produrre manualmente set di piastrelle con generate_tiles.py. Ho trascorso una discreta quantità di tempo a generare il mio modello di stile personalizzato usando cascadenik e da esso ho generato piastrelle, di cui sono abbastanza contento.

Il mio nuovo problema è l'impostazione di una mappa slippy di esempio con OpenLayers per l'esecuzione sullo stesso server ...

L'ho in qualche modo configurato e funzionante; setup Apache, mod_python, TileCache, ecc. Rende i riquadri nella mappa slippy, ma penso di avere tutti i parametri rovinati in OpenLayers. Ecco quello che ho attualmente (che rende ciò che sembra oceano vuoto a tutti i livelli di 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>

Sento che c'è qualcosa che non va nei parametri delle opzioni del livello, ma non riesco a trovare una buona documentazione che descriva i parametri standard da utilizzare per visualizzare i riquadri OSM generali resi da Mapnik ...

C'è qualcosa di ovvio che mi manca che causerebbe questo problema?

Ecco tutto quello che ho anche su tilecache.cfg:

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

Risposte:


8

Una nota: consiglio mod_wsgi su mod_python. Ed è importante utilizzare Apache prefork con mod_python o (idealmente) mod_wsgi in modalità demone con thread = 1 e processi = N (dove N è meglio abbinato al numero di processori logici). mod_wsgi in modalità demone può essere usato con Apache prefork o worker. La ragione di ciò è che TileCache memorizza nella cache l'oggetto mapnik.Map e non deve quindi essere condiviso tra i thread. Il core di Mapnik è perfettamente sicuro per i thread, ma le applicazioni server multithread devono creare un'istanza di un oggetto mapnik.Map per thread. Mod_tile e Paleoserver sono esempi di applicazioni che supportano il rendering multithread in questo modo, ma TileCache non lo supporta. Tuttavia, eseguire la modalità demone TileCache + Mapnik + mod_wsgi con thread = 1 è un percorso valido,

Per quanto riguarda la configurazione del livello, prova ad aggiungere "serviceVersion":

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


Grazie! Ciò ha risolto il problema, ma ora setCenter non funziona - penso che raggiungerà il livello di zoom corretto, ma è centrato su ll = (0, 0) (fuori dall'Africa) ... Forse un problema con metri vs. dec . gradi? Inoltre, grazie per il consiglio re: mod_wsgi. Lo sistemerò in questo modo e vedrò se posso ottenere prestazioni migliori. Sono in esecuzione in una macchina virtuale con 6 core e 12 GB di RAM, quindi dovrebbe essere sufficiente per un rendering / memorizzazione nella cache veloce.
Colemanm,

2
Le coordinate OSM sono in metri, quindi dovrai impostare il centro in metri proiettati. Vedi docs.openlayers.org/library/… .
Christopher Schmidt,

Grazie, sembra che questo sia stato il mio problema - quando si utilizza setCenter con coords in metri funziona.
Colemanm,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.