質問

mapserverを使用して、GoogleマップAPIで表示されるマップを作成しています。パフォーマンスの問題が発生しています。

地図はすべてシェープファイル形式です。

テストを実行して、マップをレンダリングする時間を取得します。

コマンドラインを使用して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のレンダリング速度が遅い理由を誰か知っていますか?回避策はありますか?

役に立ちましたか?

解決

shp2imgとmapservリクエストにはいくつかの違いがあります:

1)shp2imgは単一の画像を作成し、mapservリクエストはタイルを生成します。これは、サメン境界ボックスに対して1ではなく9タイルをレンダリングする必要があることを意味します。これによりオーバーヘッドが発生します。タイルオプションを設定せずにレンダリングして、テストを再度実行してください。

2)mapservのcgiリクエストにわずかなオーバーヘッドがあります 3)shp2imgが直接ディスクに書き込んでいる間にMapservがhttpで画像をプッシュしています。 4)mapservリクエストでレイヤーを指定しなかったため、mapservはレイヤーを探しに行きます。

他のヒント

これを読むことができます: http://mapserver.org/optimization/index.html

  • 最も重要なポイントの1つは、EPSGファイル内の未使用の投影を削除することです。例えば。 RedHat 6 / usr / share / proj / epsgの下に3つのプロジェクションがあります。
  • 未使用のフォントを削除する
  • mapfileパーサーはファイルを上から下に読み取ります。したがって、最も使用されるレイヤーをファイルの一番上に配置します(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投影ベースです。

いくつかの提案はありますが、難しい答えはありません。mapserverの設定はあまり行いませんでしたが、持っている人と協力しました。

  1. mapserverにできる最適化はたくさんあります。メーリングリストを確認します。
  2. mapfileを開いて解析するのはmapserverにとって時間がかかる可能性があるため、mapfileをできるだけ小さくします。
  3. 事前にすべてのタイルを作成し、mapserverを使用してファイルを取得します。オンザフライでのタイリングは非常に高速ではありません。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top