SharpMap開發教程——圖層標注


在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)而恢復為水平狀態。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM