ラベルの作成とFeatureの表示変更example
今回は、ラベルの作成とFeatureの表示変更のexampleを作成します。元になるprgramは、凡例の作成example [Chapter 4]のex04に付け加えていきます。
Program Coding
今回は、From designはありません。凡例の作成example [Chapter 4]のlegend controlのeventに実装します。
Coding
それでは、Legend Control eventを使ってcodingを始めていきます。
ラベルの作成
Legend contro1のLayerLabelsClicked eventを使ってみます。 legend evnetを利用しなくとも実装はできますが、legend conrtolを使うことで簡単に実装できます。
LayerLabelsClickedはlegend controlのどこをクリックしたら起きるeventなのか?
それは、下記の図の赤丸部分がLayerLabelsになります。
event発生時のcodingは、
Private Sub Legend1_LayerLabelsClicked(Handle As System.Int32) Handles Legend1.LayerLabelsClicked 'label set Dim sf As MapWinGIS.Shapefile Dim labelName As String Dim layerName As String = Legend1.Map.LayerName(Handle) 'sf = AxMap1.get_GetObject(Handle) sf = Legend1.Map.GetObject(Handle) If layerName = "c14_region" Then labelName = "[name]" sf.Labels.Generate(labelName, MapWinGIS.tkLabelPositioning.lpCentroid, True) sf.Labels.FontName = "MS ゴシック" sf.Labels.FontColor = Convert.ToUInt32(RGB(Convert.ToInt32(Color.Red.R), Convert.ToInt32(Color.Red.G), Convert.ToInt32(Color.Red.B))) sf.Labels.FontSize = 9 sf.Labels.Alignment = MapWinGIS.tkLabelAlignment.laCenter sf.Labels.Visible = True End If Legend1.Refresh() AxMap1.Redraw() End Sub
LayerSelectedと同様に、引数HandleにlayerのHandle(ユニーク値)が取得できます。
これで、現在選択したLayerのHandle値が取得できます。
label 表示する大まかな流れは、
-
Legend1.Map.GetObject(Handle)でmapオブジェクトの取得
-
Labels.Generate~~~ でlabel生成
-
label propertyの設定(Fontname,Fontsize,locationなどなど)
-
sf.Labels.Visible = Trueで表示
ここでは、layerName = “c14_region” としてshape fileを固定しています。
また、表示するlabelフィールド名を[と]で囲んで[フィールド名]として定義しなければなりません。
サンプルでは、c14_regionのnameフィールドをlabel値にするので、[name]となります。
これは、あくまでもサンプルデータを使っていますので、サンプルデータ以外のlabelを表示させるには、フィールド名がわかっていないとlabelingはできません。
Legend1_LayerLabelsClicked内に別のフォームを表示させて、label表示の設定をすれば、操作性は良くなります。
例えば、
な感じにするなどです。
Featureの表示変更
Map control上に表示されているshape fileのfeatureの色や線の太さなどを変更してみます。
Legend contro1のLayerColorboxClicked eventを使います。 legend evnetを利用しなくとも実装はできますが、legend conrtolを使うことで簡単に実装できます。
LayerColorboxClickedはlegend controlのどこをクリックしたら起きるeventなのか?
それは、下記の図の赤丸部分がLayerLabelsになります。
event発生時のcodingは、polygon,line,poitに分けて設定します。
Private Sub Legend1_LayerColorboxClicked(Handle As System.Int32) Handles Legend1.LayerColorboxClicked 'shape color set Dim sf As MapWinGIS.Shapefile 'sf = AxMap1.get_GetObject(Handle) sf = Legend1.Map.GetObject(Handle) Select Case sf.ShapefileType Case ShpfileType.SHP_POLYGON sf.DefaultDrawingOptions.FillTransparency = 0.0F sf.DefaultDrawingOptions.LineColor = System.Convert.ToUInt32(RGB(Color.DarkGreen.R, Color.DarkGreen.G, Color.DarkGreen.B)) sf.DefaultDrawingOptions.LineWidth = Single.Parse(2) Case ShpfileType.SHP_POLYLINE sf.DefaultDrawingOptions.LineColor = System.Convert.ToUInt32(RGB(Color.Black.R, Color.Black.G, Color.Black.B)) sf.DefaultDrawingOptions.LineWidth = Single.Parse(2) Case ShpfileType.SHP_POINT End Select Legend1.Refresh() AxMap1.Redraw() End Sub
LayerSelectedと同様に、引数HandleにlayerのHandle(ユニーク値)が取得できます。
これで、現在選択したLayerのHandle値が取得できます。
featureの表示変更する大まかな流れは、
-
Legend1.Map.GetObject(Handle)でmapオブジェクトの取得
-
featureのshape typeで処理を分岐
-
DefaultDrawingOptions propertyとmethodの設定(Fillcoloer,outlinecolorなどなど)
ここでは、polygonの場合は、
-
FillTransparencyで透過度設定0.0~255.0Fで設定します。0.0で透過、255.0Fで不透過になります。
-
LineColorでOutline colorの設定をします。UInt32形式でcolorを設定します。
-
LineWidthでOutlineの幅を設定します。
その他の設定に設定については、ShapeDrawingOptions Class Referenceを参考にしてください。
また、Legend1_LayerColorboxClicked内に別のフォームを表示させて、feature表示変更の設定をすれば、操作性は良くなります。
例えば、
な感じにするなどです。
Programの実行
では、ex05を保存して実行してみましょう。
神奈川県のサンプルc14_region.shpを読み込んで、labelを表示させます。
神奈川県のサンプルshape fileのlabel表示
polygonのc14_region.shpを読み込んで、feature表示を変更させます。
神奈川県のサンプルshape fileのpolygon feature表示変更
polylineのc14_water.shpを読み込んで、feature表示を変更させます。
神奈川県のサンプルshape fileのpolyline feature表示変更
今回のまとめ
-
LayerLabelsClicked eventの実装を行いました。
-
LayerColorboxClicked eventの実装を行いました。
vb.netd2010だけでなく、C#でも、visual studio2008でも動作することができます。
簡単に自前のソフトウェアにちょっとしたGIS機能を付け加えるには良いと思います。
ex05のsource code sampleは簡単なのでありません。
サンプルコードを使って、お使いのPCの不具合が生じても一切責任は持てませんので、あくまでも自己責任にて参考にしてください。
最後に、Layerを選択して次の操作を行うことを忘れないように。
Exercise
今回のProgramを少し発展させて以下の項目を付け加えてみてください。
-
LayerLabelsClicked event時に別formを表示してlabel設定をやってみる。
-
LayerColorboxClicked event時に別formを表示してlabel設定をやってみる。
-
raster dataを読み込んだ場合のLegend Controlの違いを確認してみる。
最近のコメント