c#唯一值渲染實(shí)例代碼
該著色方法一句著色圖層中要素類的某個(gè)數(shù)值字段的屬性值,按這個(gè)屬性值為每種不同值得要素單獨(dú)分配一種顯示符號(hào)樣式。關(guān)鍵在于獲取該字段所有要素的唯一值(即將所有在該字段中屬性值相同的要素歸為一種),利用UniqueValueRenderer的AddValue方法即可進(jìn)行渲染
需要添加的類庫
using System.Collections;
using System.Windows.Forms;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
具體代碼(本例為單值渲染)
private ISymbol GetSymbol(IColor pColor)
{
ISymbol pSymbol;
ISimpleFillSymbol pSymbolFillSymbol = new SimpleFillSymbolClass();
pSymbolFillSymbol.Color = pColor;
pSymbolFillSymbol.Outline.Width = 0.4;
pSymbol = pSymbolFillSymbol as ISymbol;
return pSymbol;
}
private void uniqueValueRendererToolStripMenuItem_Click(object sender, EventArgs e)
{
IMap pMap = this.axMapControl1.ActiveView.FocusMap;
if (pMap.LayerCount== 0)
{
MessageBox.Show("地圖為空,請(qǐng)加載地圖!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
IGeoFeatureLayer pGeoLayer = this.axMapControl1.get_Layer(0) as IGeoFeatureLayer ;
ITable pTable = pGeoLayer.FeatureClass as ITable;
ICursor pCursor;
IQueryFilter pQueryFilter = new QueryFilter();
pQueryFilter.AddField("PERIMETER");
pCursor = pTable.Search(pQueryFilter, true);//獲取字段
IEnumerator pEnumreator;
//獲取字段中各要素屬性唯一值
IDataStatistics pDataStatistics = new DataStatisticsClass();
pDataStatistics.Field = "PERIMETER";//獲取統(tǒng)計(jì)字段
pDataStatistics.Cursor = pCursor;
pEnumreator = pDataStatistics.UniqueValues;
int fieldcount = pDataStatistics.UniqueValueCount;//唯一值個(gè)數(shù),以此確定顏色帶范圍
IUniqueValueRenderer pUniqueValueR = new UniqueValueRendererClass();
pUniqueValueR.FieldCount = 1;//單值渲染
pUniqueValueR.set_Field(0, "PERIMETER");//渲染字段
IEnumColors pEnumColor = GetColorRamp(fieldcount).Colors;
pEnumColor.Reset();
while (pEnumreator.MoveNext())
{
string value = pEnumreator.Current.ToString();
if (value != null)
{
IColor pColor = pEnumColor.Next();
ISymbol pSymbol = GetSymbol(pColor);
pUniqueValueR.AddValue(value, "PERIMETER", pSymbol);
//pUniqueValueR.set_Symbol(value, pSymbol);
}
}
pGeoLayer.Renderer = pUniqueValueR as IFeatureRenderer;
this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
this.axTOCControl1.Update();
}
private IRandomColorRamp GetColorRamp(int size)
{
IRandomColorRamp pRandomColorRamp = new RandomColorRampClass();
pRandomColorRamp.StartHue = 10;
pRandomColorRamp.EndHue = 300;
pRandomColorRamp.MaxSaturation =100;
pRandomColorRamp.MinSaturation = 0;
pRandomColorRamp.MaxValue = 100;
pRandomColorRamp.MinValue = 0;
pRandomColorRamp.Size = size;
bool ok = true;
pRandomColorRamp.CreateRamp(out ok);
return pRandomColorRamp;
}
其中datastatistic和uniqueValueRenderer的field必須要明確,且為相同值
相關(guān)文章
Unity實(shí)現(xiàn)繞任意軸任意角度旋轉(zhuǎn)向量
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)繞任意軸任意角度旋轉(zhuǎn)向量,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-01-01
Unity UGUI的Toggle復(fù)選框組件使用詳解
這篇文章主要為大家介紹了Unity UGUI的Toggle復(fù)選框組件使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
C#中調(diào)用SAPI實(shí)現(xiàn)語音識(shí)別的2種方法
這篇文章主要介紹了C#中調(diào)用SAPI實(shí)現(xiàn)語音識(shí)別的2種方法,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-06-06
C#操作SQLite數(shù)據(jù)庫之讀寫數(shù)據(jù)庫的方法
這篇文章主要介紹了C#操作SQLite數(shù)據(jù)庫之讀寫數(shù)據(jù)庫的方法,簡單分析了C#針對(duì)SQLite數(shù)據(jù)庫的讀寫及顯示等操作相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07
C#實(shí)現(xiàn)驗(yàn)證字符串的長度的方法詳解
這篇文章主要為大家詳細(xì)介紹了C#如何使用正則表達(dá)或者計(jì)算字符數(shù)組長度或字符串的長度來驗(yàn)證驗(yàn)證字符串的長度,感興趣的小伙伴可以學(xué)習(xí)一下2024-02-02
百度人臉識(shí)別之人臉識(shí)別FaceIdentify(簽到考勤)
這篇文章主要為大家詳細(xì)介紹了百度人臉識(shí)別之人臉識(shí)別FaceIdentify,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08
在C#中調(diào)用VBScript、javascript等腳本的實(shí)現(xiàn)代碼
在C#中調(diào)用VBScript、javascript等腳本的實(shí)現(xiàn)步驟,需要的朋友可以參考下。2009-11-11

