在GIS開發中,根據圖層屬性字段對要素進行標注(圖層標注)是一項常規的、必備的功能。在基於SharpMap開發GIS應用時,也可以方便的實現該功能。
1、加載Shapefile圖層數據
SharpMap.Layers.VectorLayer vLayer = new SharpMap.Layers.VectorLayer("States"); vLayer.DataSource = new SharpMap.Data.Providers.ShapeFile("ShpData\\Provinces_R.shp", true); mapBox1.Map.Layers.Add(vLayer);
添加圖層、設置圖層顯示樣式,詳細步驟可參考SharpMap入門教程
2、添加圖層標注
與一般GIS軟件不同,SharpMap的圖層標注是以一類特殊的圖層(LabelLayer)而存在的。
SharpMap.Layers.LabelLayer lLayer = new SharpMap.Layers.LabelLayer("labels"); lLayer.DataSource = vLayer.DataSource; lLayer.Enabled = true; lLayer.LabelColumn = "name"; mapBox1.Map.Layers.Add(lLayer);
創建一個標注圖層lLayer,然后指定標注圖層的數據源,也就是指定對哪一個矢量圖層做標注,再指定標注字段即可。
3、設置各種圖層標注風格
lLayer.Style = new SharpMap.Styles.LabelStyle(); lLayer.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; lLayer.SmoothingMode = SmoothingMode.AntiAlias; lLayer.Style.CollisionDetection = true; lLayer.Style.ForeColor = Color.DarkBlue; lLayer.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center; lLayer.Style.Offset = new PointF(1f,1f); lLayer.Style.BackColor = Brushes.White;
有非常多的參數和方法都可以來設置圖層標注風格,參見下圖
圖層渲染效果如下
4、圖標標注的旋轉角度問題
有兩個參數可以控制圖層標注的旋轉角度,一是設置LabelLayer的RotationColumn,即指定一個數值型[0,360]的字段,根據字段數值來旋轉標注內容的角度,該角度是以正右方向為起始順時針旋轉的夾角;二是設置LabelStyle的Rotation值[0,360],也是以正右方向為起始順時針旋轉的夾角。
二者在使用效果上有所不同,設置LabelLayer的RotationColumn,可以為每一個要素標注定制一個合適的旋轉角度。
lLayer.RotationColumn = "labelangle";
其中Shapefile屬性表中,內蒙古的labelangle為330,其余為0,效果如下
而設置設置LabelStyle的Rotation值,則是對圖層中的所有標注同步起作用。
lLayer.Style.Rotation = 30;
可以看到,所有要素標注都被旋轉了30度。其中內蒙古要素的標注,因為兩個旋轉因素的作用(330+30)而恢復為水平狀態。