The GIS Professional Group

ArcMapのシンボル描画パフォーマンスが変化する現象

2009/7/24 (金)

ArcMapの[データの追加]から追加したレイヤに設定されているデフォルトのシンボル表示速度が、一度[シンボル選択]ダイアログで別のシンボルを選択したり、[シンボル プロパティ エディタ]ダイアログを開いて[OK]を押すと(設定を変更しなくても)遅くなります。気になった人は50万点ぐらいのポイント フィーチャクラスを用意してArcMapに追加した標準の描画速度と、ダイアログでOKを押したときの描画速度を比べてみてください。

この現象は人から聞いた話なんですが、実際の設定を何も変更していないのに、[OK]を押しただけで描画速度が遅くなるとは何とも不可解です。その原因ですが、

[データの追加]で表示したレイヤのレンダラ(単一シンボル)にはSimpleMarkerSymbolが適用されているが、一度[シンボル選択]ダイアログで別のシンボルを変更したり、[シンボル プロパティ エディタ]ダイアログを開いて[OK]を押すとレンダラにMultiLayerMarkerSymbolが適用される

というものです。OMDで示すとレンダラに適用されるオブジェクトは図のように変化します。


[データの追加]で表示した時点のレンダラに割り当てられるシンボル


[シンボル選択]ダイアログで別シンボルを選択したり、[シンボル プロパティ エディタ]ダイアログで[OK]を押下した場合

MultiLayerMarkerSymbolは複数のマーカー シンボルを重ね合わせて表現できるのですが、より複雑に表現出来る分描画パフォーマンスは下がってしまうという訳です。ライン レイヤはMultiLayerLineSymbolに、ポリゴン レイヤはMultiLayerPolygonSymbolにそれぞれ変化します。

この現象は5年前にArcGIS Engineで汎用ビューワを作成してる最中に気づいたもので、よくこんな仕様を突き止めていたなと我ながら関心しました。でもパフォーマンスが下がるところまではその時気づかなかったので、気づいた人はすごいです。やっぱり実務で膨大なデータを使わないと気づかないことって多いですね。

さて、この下がった描画パフォーマンスを元に戻す方法、逆を言えばカスタマイズしたシンボルの描画速度を向上させる方法ですが、おそらくGUIでは不可能です。ただし、ArcObjectsを使えば直せます。

以下のコードを VBEditor に貼り付けてマクロを実行してください。

  • B!