Pregunta

Estoy usando mapserver para crear un mapa que se mostrará con la API de Google Map. Estoy encontrando problemas de rendimiento.

Mis mapas están todos en formato shapefile.

Realizo pruebas para obtener tiempo para renderizar mapas.

Al representar un mapa con la herramienta shp2img, mediante la línea de comandos

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

Obtengo las siguientes métricas de los archivos de 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

Al renderizar el mismo mapa a través de mapserver, usando

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

el archivo de registro está dando esto:

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

Para el mismo mapa, la herramienta shp2img está representando el mapa 10 veces más rápido que mapserver. Al agregar más capas y usar el modo de mosaico para google map, puede ser de hasta 10 segundos.

¿Alguien sabe por qué mapserver está rindiendo esto tan lento? ¿Hay alguna solución?

¿Fue útil?

Solución

Hay un par de diferencias entre la solicitud shp2img y mapserv:

1) shp2img crea una sola imagen, su solicitud mapserv genera mosaicos. Esto significa que podría tener que renderizar 9 mosaicos para el cuadro delimitador de samen en lugar de 1. Esto genera una sobrecarga. Intente renderizar sin la opción de mosaicos establecida y ejecute su prueba nuevamente.

2) Tienes una pequeña sobrecarga para la solicitud de cgi en mapserv 3) Mapserv está empujando la imagen a través de http, mientras que shp2img está escribiendo directamente en el disco. 4) No especificó la capa en la solicitud de mapserv, lo que significa que mapserv va a buscar capas.

Otros consejos

Puedes leer esto: http://mapserver.org/optimization/index.html

  • Uno de los puntos más importantes es eliminar las proyecciones no utilizadas en el archivo EPSG. P.ej. bajo RedHat 6 / usr / share / proj / epsg tengo 3 proyecciones.
  • Eliminar fuentes no utilizadas
  • El analizador de mapas de mapas lee el archivo de arriba a abajo, por lo tanto, coloca las capas más utilizadas en la parte superior del archivo (el analizador EPSG funciona de la misma manera)

Los archivos de forma " deberían tener " la misma proyección de la persona que llama, de lo contrario Mapserver tiene que reproyectarlos sobre la marcha.

E.G. Desde mi código OpenLayers (900913):

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

Todos mis archivos de formas están basados ??en la proyección 900913.

Tengo un par de sugerencias, pero no respuestas duras, no he hecho mucha configuración de mapserver, pero he trabajado con personas que lo han hecho.

  1. Hay muchas optimizaciones que puedes hacer con mapserver, revisaría la lista de correo.
  2. Haga el archivo de mapas lo más pequeño posible, ya que abrir y analizar el archivo de mapas puede llevar mucho tiempo para los servidores de mapas.
  3. Cree todos los mosaicos antes de tiempo y solo use mapserver para obtener los archivos. Hacer mosaico sobre la marcha no es muy rápido.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top