「Dotspatial」のラベル表示に、「Roslyn for Scripting」を利用する

「Dotspatial」のラベル表示は、独自クラス(DotSpatial.Symbology.Expression)で独自の構文解析を行っていますが、処理複雑で、カスタマイズし難いクラスでした。
また、改行が設定できなかったり、QGISなどでは標準で実装されている、図形データの表示もできませんでした。
そこで、「Roslyn for Scripting」を利用して、これらの対応ができないか試してみることにしました。

「Roslyn for Scripting」は、C#言語でスクリプト言語が実行できる機能です。これを導入することにより、GISアプリ側でC#のプログラムをスクリプトとして動的に実行することができ、色んなことができるようになると思います。
ちなみに、ArcGIS Proでもスクリプトを採用していますが、こちらはPython言語です。

1.「Microsoft.CodeAnalysis.CSharp.Scripting」の参照の追加

まず最初に、「Microsoft.CodeAnalysis.CSharp.Scripting」の参照を追加します。
NuGetパッケージマネージャーなんかで追加します。NuGetが嫌いな方は以下を参考にして参照を追加してください。

2.Expressionクラスの変更

Expressionクラスに、「Microsoft.CodeAnalysis.CSharp.Scripting」をしてラベル表示できるようにします。
「Roslyn for Scripting」では、スクリプトといっても結局はコンパイルは必要になります。このコンパイルの処理が非常に遅いので、ラベル設定画面でコンパイルを済ませておき、画面表示時に、コンパイル済みのスクリプトを実行させます。

改変前のプログラムでは、独自の構文解析のため、非常に難解なプログラムが記述されていましたが、「Roslyn for Scripting」導入により、非常にシンプルなプログラムになりました。

また、今回は実装していませんが、スクリプトに変数を渡せるので、図形データの情報を引数に持たせれば図形の面積や、長さといった情報もラベル表示できると思います。

以下、改定後のExpressionクラスです。

以下は設定画面です、改定前では表示できなかった、改行を設定しています。

設定後のラベル表示です、バス系統と路線名の間が改行表示されています。

Print Friendly, PDF & Email