2009-04-30 32 views
2

mapserverを使用してGoogleマップAPIで表示されるマップを作成しています。私は公演の問題に遭遇している。MapServerのパフォーマンスが遅い

マイマップはすべてシェイプファイル形式です。

マップをレンダリングするためのテストを実行します。

コマンドラインを使用して、shp2imgツールを使用してマップをレンダリング

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

私は、ログファイルから次のメトリックを得る:

[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 

を使用して、MapServerの通じ同じマップをレンダリング
http://localhost/cgi-bin/mapserv.exe?mymapfile.map&layers=&mode=tile&tilemode=gmap&tile=1+1+2 

ログファイルは次のようになります。

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

同じマップの場合、shp2imgツールはmapserverよりも10倍速いレンダリングマップです。より多くのレイヤーを追加し、Googleマップのタイリングモードを使用する場合、最大10秒になることができます。

mapserverがなぜこのように遅くレンダリングしているのか誰かが知っていますか?回避策はありますか?

答えて

2

shp2imgとmapserv要求間の違いがいくつかあります:

1)shp2imgは、単一の画像を作成し、あなたのmapserv要求はタイルを生成します。これは、1ではなく、3つのバウンディングボックスに9つのタイルをレンダリングする必要がある可能性があることを意味します。これによりオーバーヘッドが発生します。タイルオプションを設定せずにレンダリングを試し、テストをもう一度実行してください。

2)mapservのCGI要求のオーバーヘッドが小さい 3)Shp2imgが直接ディスクに書き込んでいる間にMapservがhttpでイメージをプッシュしています。 4)mapservリクエストでレイヤを指定しなかったため、mapservはレイヤを探します。

+2

3)FastCGIが確実に使用されていることを確認してください。 http://www.slideshare.net/DonnyV/wms-performance-tests-map-server-vs-geo-server –

+0

re)上記の統計情報は1タイルのみのため、テストは有効です – flurbius

0

私はいくつかの提案をしましたが、難しい答えはありませんでした。地図サーバーの設定はあまり行っていませんが、持っている人たちと一緒に作業しました。

  1. mapserverに行うことができる最適化はたくさんあります。私はメーリングリストをチェックします。
  2. マップファイルを開いて解析すると、マップサーバーに時間がかかる可能性があるため、できるだけマップファイルを小さくします。
  3. 事前にすべてのタイルを作成し、mapserverを使用してファイルを取得します。飛行のタイル張りはあまり速くない。
+0

私はすでにマップファイルで多くの最適化を行っています。最適化はshp2imgでレンダリングを高速化するように見えますが、マップサーバーの改善はほとんどありません。 私はmapserverがshp2imgツールと同じくらい速くなることを期待していました。なぜshp2imgが速いのか分かりません。 – Blue

1

あなたはこれを読むことができます。最も重要なポイントの http://mapserver.org/optimization/index.html

  • 一つは、EPSGファイル内の未使用の突起部を削除することです。例えば。 RedHat 6の下に/ usr/share/proj/epsg私は3つの予測があります。
  • 削除し、未使用のフォント
  • マップファイルパーサは上から下にファイルを読み込むには、それゆえ、ファイルの先頭に最も使用される層を置く

形状(EPSGパーサは同じように動作します)ファイルには同じ呼び出し元の投影がある必要があります。そうでない場合、Mapserverはそれらを即座に再投影する必要があります。

E.G.私のOpenLayersをコード(900913)から は:

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

すべての私のシェイプファイルは、ベース900913投影されています。