2

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 秒になることがあります。

マップサーバーのレンダリングがこれほど遅い理由を誰かが知っていますか? 回避策はありますか?

4

3 に答える 3

2

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

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

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

于 2009-07-22T10:57:22.910 に答える
1

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

  • 最も重要なポイントの 1 つは、EPSG ファイル内の未使用のプロジェクションを削除することです。たとえば、RedHat 6 /usr/share/proj/epsg では、3 つのプロジェクションがあります。
  • 使用していないフォントを削除する
  • mapfile パーサーはファイルを上から下に読み取るため、最もよく使用されるレイヤーをファイルの一番上に配置します (EPSG パーサーも同様に機能します)。

シェープ ファイルには、同じ呼び出し元の投影が「含まれている必要があります」。そうでない場合、Mapserver はその場で再投影する必要があります。

EG 私の OpenLayers コード (900913) から:

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

私のシェープ ファイルはすべて 900913 プロジェクション ベースです。

于 2011-12-02T13:42:35.467 に答える
0

いくつかの提案がありますが、明確な答えはありません。mapserver の設定はあまり行っていませんが、設定した人たちと協力してきました。

  1. mapserver に対して実行できる最適化はたくさんあります。メーリング リストをチェックしてみてください。
  2. mapfile を開いて解析すると、mapserver にとって時間がかかる可能性があるため、mapfile はできるだけ小さくしてください。
  3. 事前にすべてのタイルを作成し、mapserver を使用してファイルを取得します。その場でのタイリングはそれほど高速ではありません。
于 2009-04-30T19:04:32.443 に答える