Pergunta

Eu estou usando mapserver para criar um mapa que será exibido com o google map api. Eu estou encontrando problemas performances.

Os meus mapas são todos em formato shapefile.

Eu executar testes para obter tempo para renderizar mapas.

Ao renderizar um mapa com a ferramenta shp2img, usando linha de comando

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

Eu recebo as seguintes métricas a partir dos arquivos de log:

[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

Ao renderizar o mesmo mapa através mapserver, usando

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

arquivo de log está dando o seguinte:

[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 o mesmo mapa, a ferramenta shp2img está prestando mapa 10 vezes mais rápido do que mapserver. Ao adicionar mais camadas e usando o modo de ladrilhos para google map, pode ser de até 10 segundos.

É alguém sabe por que mapserver está prestando esta lenta? Existe uma solução?

Foi útil?

Solução

Existem algumas diferenças entre o shp2img eo pedido mapserv:

1) shp2img cria uma única imagem, o seu pedido mapserv gera telhas. Isso significa que ele pode ter que prestar 9 azulejos para as samen caixa delimitadora em vez de 1. Isto gera sobrecarga. Tente renderizar sem a opção definida telhas e executar o teste novamente.

2) Você tem uma pequena sobrecarga para o pedido de CGI em mapserv 3) Mapserv está empurrando a imagem sobre http enquanto shp2img está escrevendo diretamente para o disco. 4) Você não especificou a camada no pedido mapserv o que significa que mapserv vai à procura de camadas.

Outras dicas

Você pode ler este: http://mapserver.org/optimization/index.html

  • Um dos ponto mais importante é remover as projeções não utilizados no arquivo EPSG. Por exemplo. sob RedHat 6 / usr / share / proj / EPSG Eu tenho 3 projeções.
  • Remover fontes não usadas
  • O analisador mapfile lê o arquivo de cima para baixo, portanto, colocar as camadas mais utilizados no topo do arquivo (as obras analisador EPSG da mesma forma)

Os arquivos de forma "deve ter" a mesma projeção chamador, caso contrário Mapserver tem reprojetar los em tempo real.

por exemplo. Do meu código OpenLayers (900913):

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

Todos os meus arquivos de forma são 900.913 projeção baseada.

Eu tenho um par de sugestões, mas há respostas duras, eu não tenho feito muito configuração mapserver mas eu tenho trabalhado com pessoas que têm.

  1. Há uma série de otimizações que você pode fazer para mapserver, eu iria verificar a lista de discussão.
  2. Faça o mapfile tão pequeno quanto possível, como abertura e analisar o mapfile pode ser demorado para mapserver.
  3. Criar todos os azulejos antes do tempo e só usar mapserver obter os arquivos. Ladrilhos na mosca não é muito rápido.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top