地圖符號化就是對ArcGIS Engine中加載的地圖圖層進行渲染,地圖圖層可以分爲點、線、面、三種形式。根據每個圖層的圖層類型可以分別對點、線、面要素,即MarkerSymbol、LineSymbol、和FillSymbol 進行渲染。
1、點對象
MarkerSymbol對於修飾點對象符號擁有五個子類:SimpleMarkerSymbol、ArrowMarkerSymbol、CharacterMarkerSymbol、PictureMarkerSymbol 和 MultilayerMarkerSymbol。一下以SimpleMarkerSymbol爲例實現點對象的修飾:
try
{
//獲得點圖層
IFeatureLayer layer;
layer = axMapControl1.get_Layer(0) as IFeatureLayer;
for (int i = 0; i < axMapControl1.Map.LayerCount; ++i) //尋找點圖層
{
layer = axMapControl1.get_Layer(i) as IFeatureLayer;
if (layer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPoint)
break;
}
if (layer.FeatureClass.ShapeType != esriGeometryType.esriGeometryPoint)
return;
//QI到IGeoFeatureLayer接口
IGeoFeatureLayer geoFeatureLayer = layer as IGeoFeatureLayer;
//新建SimpleRendererClass對象
SimpleRenderer simpleRender = new SimpleRendererClass();
ISimpleMarkerSymbol pMarkerSymbol;
//創建顏色
IColor color;
color = new RgbColorClass();
color.RGB = 225;
//創建SimpleMarkerSymbolClass
pMarkerSymbol = new SimpleMarkerSymbolClass();
pMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSCircle;
pMarkerSymbol.Color = color;
pMarkerSymbol.Angle = 60;
pMarkerSymbol.Size = 6;
//將MarkerSymbol 賦予simpleRender的Symbol
simpleRender.Symbol = pMarkerSymbol as ISymbol;
geoFeatureLayer.Renderer = simpleRender as IFeatureRenderer;
axMapControl1.Refresh();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
具體流程爲:首先,新建一個要素圖層的接口,並將mapControl中的第一個圖層賦予該圖層。
然後,將要素圖層轉化爲地理要素圖層。
接着,新建一個SimpleRendererClass對象,和ISimpleMarkerSymbol接口。設置SimpleMarkerSymbol 的顏色、類型、尺寸等信息。
//將MarkerSymbol 賦予simpleRender的Symbol
simpleRender.Symbol = pMarkerSymbol as ISymbol;
geoFeatureLayer.Renderer = simpleRender as IFeatureRenderer;
最後,設置地理要素的Render。
2、線要素
線要素與點要素相似,不過線要素的子類有8個,分別是:CartographicLineSymbol、HashLineSymbol、MarkLineSymbol、MultiLayerLineSymbol、SimpleLineSymbol、PictureLineSymbol、SimpleLine3DSymbol和TextureLineSymbol。以SimleLineSymbol爲例:
private void simpleLineSymbolToolStripMenuItem_Click(object sender, EventArgs e)
{
IGeoFeatureLayer geoFeatureLayer;
geoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer;
ISimpleRenderer simpleRender;
simpleRender = new SimpleRendererClass();
IRgbColor HC = new RgbColor();
HC.Red = 225;
HC.Green = 0;
HC.Blue = 0;
ISimpleLineSymbol simpleLineSymbol = new SimpleLineSymbolClass();
simpleLineSymbol.Color = HC;
simpleLineSymbol.Width = 5;
simpleLineSymbol.Style = esriSimpleLineStyle.esriSLSDashDot;
simpleRender.Symbol = simpleLineSymbol as ISymbol;
geoFeatureLayer.Renderer = simpleRender as IFeatureRenderer;
axMapControl1.Refresh();
axTOCControl1.Update();
}