Category Archives: MapWinGIS - Page 20

ラベルの作成example [Chapter 5]

ラベルの作成と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になります。

blog.godo-tys.jp_wp-content_gallery_mapwingis_ex05_image02.jpg
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 表示する大まかな流れは、

  1. Legend1.Map.GetObject(Handle)でmapオブジェクトの取得
  2. Labels.Generate~~~ でlabel生成
  3. label propertyの設定(Fontname,Fontsize,locationなどなど)
  4. sf.Labels.Visible = Trueで表示

ここでは、layerName = “c14_region” としてshape fileを固定しています。
また、表示するlabelフィールド名を[]で囲んで[フィールド名]として定義しなければなりません。
サンプルでは、c14_regionのnameフィールドをlabel値にするので、[name]となります。
これは、あくまでもサンプルデータを使っていますので、サンプルデータ以外のlabelを表示させるには、フィールド名がわかっていないとlabelingはできません。

Legend1_LayerLabelsClicked内に別のフォームを表示させて、label表示の設定をすれば、操作性は良くなります。
例えば、

blog.godo-tys.jp_wp-content_gallery_mapwingis_ex05_image01.jpg
label設定画面例

な感じにするなどです。

Featureの表示変更

Map control上に表示されているshape fileのfeatureの色や線の太さなどを変更してみます。
Legend contro1のLayerColorboxClicked eventを使います。 legend evnetを利用しなくとも実装はできますが、legend conrtolを使うことで簡単に実装できます。

LayerColorboxClickedはlegend controlのどこをクリックしたら起きるeventなのか?
それは、下記の図の赤丸部分がLayerLabelsになります。

blog.godo-tys.jp_wp-content_gallery_mapwingis_ex05_image03.jpg
LayerColorboxの場所

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の表示変更する大まかな流れは、

  1. Legend1.Map.GetObject(Handle)でmapオブジェクトの取得
  2. featureのshape typeで処理を分岐
  3. DefaultDrawingOptions propertyとmethodの設定(Fillcoloer,outlinecolorなどなど)

ここでは、polygonの場合は、

  1. FillTransparencyで透過度設定0.0~255.0Fで設定します。0.0で透過、255.0Fで不透過になります。
  2. LineColorでOutline colorの設定をします。UInt32形式でcolorを設定します。
  3. LineWidthでOutlineの幅を設定します。

その他の設定に設定については、ShapeDrawingOptions Class Referenceを参考にしてください。

また、Legend1_LayerColorboxClicked内に別のフォームを表示させて、feature表示変更の設定をすれば、操作性は良くなります。
例えば、

blog.godo-tys.jp_wp-content_gallery_mapwingis_ex05_image07.jpg
feature表示変更画面例

な感じにするなどです。

Programの実行

では、ex05を保存して実行してみましょう。

神奈川県のサンプルc14_region.shpを読み込んで、labelを表示させます。
blog.godo-tys.jp_wp-content_gallery_mapwingis_ex05_image04.jpg
神奈川県のサンプルshape fileのlabel表示

polygonのc14_region.shpを読み込んで、feature表示を変更させます。
blog.godo-tys.jp_wp-content_gallery_mapwingis_ex05_image05.jpg
神奈川県のサンプルshape fileのpolygon feature表示変更

polylineのc14_water.shpを読み込んで、feature表示を変更させます。
blog.godo-tys.jp_wp-content_gallery_mapwingis_ex05_image06.jpg
神奈川県のサンプルshape fileのpolyline feature表示変更

今回のまとめ

  1. LayerLabelsClicked eventの実装を行いました。
  2. LayerColorboxClicked eventの実装を行いました。

vb.netd2010だけでなく、C#でも、visual studio2008でも動作することができます。
簡単に自前のソフトウェアにちょっとしたGIS機能を付け加えるには良いと思います。
ex05のsource code sampleは簡単なのでありません。
サンプルコードを使って、お使いのPCの不具合が生じても一切責任は持てませんので、あくまでも自己責任にて参考にしてください。

最後に、Layerを選択して次の操作を行うことを忘れないように。

Exercise

今回のProgramを少し発展させて以下の項目を付け加えてみてください。

  1. LayerLabelsClicked event時に別formを表示してlabel設定をやってみる。
  2. LayerColorboxClicked event時に別formを表示してlabel設定をやってみる。
  3. raster dataを読み込んだ場合のLegend Controlの違いを確認してみる。

20 / 31« 先頭...10...1819202122...30...最後 »

Social Widgets powered by AB-WebLog.com.