Domanda

Sto usando mapserver per creare una mappa che verrà visualizzata con l'API di Google Map. Sto riscontrando problemi di performance.

Le mie mappe sono tutte in formato shapefile.

Eseguo test per ottenere il tempo necessario per il rendering delle mappe.

Quando si esegue il rendering di una mappa con lo strumento shp2img, utilizzando la riga di comando

shp2img -i gif -m C:\myfolder\mymapfile.map -o C:\myfolder\test.gif -all_debug 5 -map_debug 5

Ottengo le seguenti metriche dai file di registro:

[Thu Apr 30 13:50:19 2009].148000 msLoadMap(): 0.000s
[Thu Apr 30 13:50:19 2009].180000 msDrawMap(): Layer 0 (PWorld2), 0.032s
[Thu Apr 30 13:50:19 2009].180000 msDrawMap(): Drawing Label Cache, 0.000s
[Thu Apr 30 13:50:19 2009].180000 msDrawMap() total time: 0.032s
[Thu Apr 30 13:50:19 2009].195000 msSaveImage() total time: 0.015s
[Thu Apr 30 13:50:19 2009].195000 msFreeMap(): freeing map at 01595E18.
[Thu Apr 30 13:50:19 2009].195000 freeLayer(): freeing layer at 0159CD00.
[Thu Apr 30 13:50:19 2009].195000 shp2img total time: 0.047s

Quando si esegue il rendering della stessa mappa tramite mapserver, utilizzando

http://localhost/cgi-bin/mapserv.exe?mymapfile.map&layers=&mode=tile&tilemode=gmap&tile=1+1+2

il file di registro sta dando questo:

[Thu Apr 30 13:51:50 2009].664000 CGI Request 1 on process 3520
[Thu Apr 30 13:51:50 2009].664000 msTileSetExtent (-10013744.792915, 8348.961808) (-5009.377085, 10010405.208192)
[Thu Apr 30 13:51:51 2009].23000 msDrawMap(): Layer 0 (PWorld2), 0.359s
[Thu Apr 30 13:51:51 2009].23000 msDrawMap(): Drawing Label Cache, 0.000s
[Thu Apr 30 13:51:51 2009].23000 msDrawMap() total time: 0.359s
[Thu Apr 30 13:51:51 2009].23000 msSaveImage() total time: 0.000s
[Thu Apr 30 13:51:51 2009].23000 mapserv request processing time (loadmap not incl.): 0.359s
[Thu Apr 30 13:51:51 2009].23000 msFreeMap(): freeing map at 01598690.

Per la stessa mappa, lo strumento shp2img rende la mappa 10 volte più veloce di mapserver. Quando aggiungi più livelli e usi la modalità di piastrellatura per google map, può essere massimo di 10 secondi.

Qualcuno sa perché Mapserver sta rallentando così tanto? C'è una soluzione alternativa?

È stato utile?

Soluzione

Esistono un paio di differenze tra shp2img e la richiesta di mapserv:

1) shp2img crea una singola immagine, la tua richiesta di mapserv genera riquadri. Ciò significa che potrebbe essere necessario eseguire il rendering di 9 riquadri per il rettangolo di selezione di Samen anziché 1. Questo genera overhead. Prova a eseguire il rendering senza l'opzione di riquadri impostata ed esegui nuovamente il test.

2) Hai un piccolo overhead per la richiesta cgi in mapserv 3) Mapserv sta spingendo l'immagine su http mentre shp2img sta scrivendo direttamente sul disco. 4) Non hai specificato il layer nella richiesta di mapserv, il che significa che mapserv va alla ricerca di layer.

Altri suggerimenti

Puoi leggere questo: http://mapserver.org/optimization/index.html

  • Uno dei punti più importanti è rimuovere le proiezioni non utilizzate nel file EPSG. Per esempio. sotto RedHat 6 / usr / share / proj / epsg ho 3 proiezioni.
  • Rimuovi caratteri non utilizzati
  • Il parser mapfile legge il file dall'alto verso il basso, quindi posiziona i livelli più utilizzati nella parte superiore del file (il parser EPSG funziona allo stesso modo)

I file di forma " dovrebbero avere " la stessa proiezione del chiamante, altrimenti Mapserver deve riproiettarli al volo.

es. Dal mio codice OpenLayers (900913):

var options = {
    projection: new OpenLayers.Projection('EPSG:900913'), //aka  EPSG:3785
    displayProjection: new OpenLayers.Projection('EPSG:4326'), //geographic 

Tutti i miei file di forma sono basati sulla proiezione 900913.

Ho un paio di suggerimenti ma nessuna risposta difficile, non ho fatto molta configurazione di mapserver ma ho lavorato con persone che hanno.

  1. Ci sono molte ottimizzazioni che puoi fare a mapserver, controllerei la mailing list.
  2. Rendi il file map il più piccolo possibile, poiché l'apertura e l'analisi del file map può richiedere molto tempo per mapserver.
  3. Crea tutte le tessere in anticipo e usa semplicemente mapserver per ottenere i file. La piastrellatura al volo non è molto veloce.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top