You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
185 lines
7.2 KiB
185 lines
7.2 KiB
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.Display; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Data; |
|
using System.Linq; |
|
using System.Text; |
|
|
|
namespace Kingo.Plugin.EngineEditor.Common |
|
{ |
|
/// <summary> |
|
/// 图层符号化的相关操作的API函数 |
|
/// </summary> |
|
public static class LabelAPI |
|
{ |
|
///<summary> |
|
/// 获取符号信息 |
|
///</summary> |
|
/// <param name="pFeatureRenderer">要素渲染</param> |
|
/// <param name="pFeatureCursor"></param> |
|
/// <param name="pDic">符号集合</param> |
|
/// <returns></returns> |
|
public static bool GetSymbolInfos(IFeatureRenderer pFeatureRenderer, IFeatureCursor pFeatureCursor, IDictionary<string, ISymbol> pDic, DataTable dtZD = null, string featurename = null) |
|
{ |
|
if (pFeatureRenderer == null || pFeatureCursor == null || pDic == null) |
|
{ |
|
return false; |
|
} |
|
|
|
IUniqueValueRenderer pUniqueValueRenderer = pFeatureRenderer as IUniqueValueRenderer; |
|
if (pUniqueValueRenderer == null) |
|
{ |
|
return true; |
|
} |
|
int iFieldCount = pUniqueValueRenderer.FieldCount; |
|
int[] intArray = new int[iFieldCount]; |
|
for (int i = 0; i < iFieldCount; i++) |
|
{ |
|
intArray[i] = pFeatureCursor.FindField(pUniqueValueRenderer.get_Field(i)); |
|
} |
|
string sFieldDelimiter = pUniqueValueRenderer.FieldDelimiter; |
|
StringBuilder stringBuilder = new StringBuilder(); |
|
string sValue, sLabel, sHead; |
|
IFeature pFeature = null; |
|
IDictionary<string, ISymbol> pDictionaryTemp = new Dictionary<string, ISymbol>(); |
|
Dictionary<string, string> lstString = new Dictionary<string, string>(); |
|
while ((pFeature = pFeatureCursor.NextFeature()) != null) |
|
{ |
|
//支持多字段唯一值渲染 |
|
if (stringBuilder.Length > 0) |
|
{ |
|
stringBuilder.Remove(0, stringBuilder.Length); |
|
} |
|
object obj = pFeature.get_Value(intArray[0]); |
|
if (obj == null || string.IsNullOrWhiteSpace(obj.ToString()) || lstString.Keys.Contains(obj.ToString())) |
|
{ |
|
continue; |
|
} |
|
if (featurename.ToUpper() == "DLTB") |
|
{ |
|
lstString.Add(obj.ToString(), pFeature.get_Value(pFeatureCursor.FindField("DLMC")).ToString()); |
|
} |
|
else |
|
{ |
|
lstString.Add(obj.ToString(), obj.ToString()); |
|
} |
|
stringBuilder.Append(obj); |
|
|
|
for (int i = 1; i < iFieldCount; i++) |
|
{ |
|
stringBuilder.Append(sFieldDelimiter); |
|
stringBuilder.Append(pFeature.get_Value(i)); |
|
} |
|
|
|
sValue = stringBuilder.ToString(); |
|
if (string.IsNullOrWhiteSpace(sValue)) |
|
{ |
|
continue; |
|
} |
|
try |
|
{ |
|
sLabel = pUniqueValueRenderer.get_Label(sValue); |
|
try |
|
{ |
|
//查找唯一值是否存在引用值 |
|
sValue = pUniqueValueRenderer.get_ReferenceValue(sValue); |
|
} |
|
catch |
|
{ |
|
} |
|
if (sLabel != null && !pDictionaryTemp.ContainsKey(sLabel)) |
|
{ |
|
pDictionaryTemp.Add(sLabel, pUniqueValueRenderer.get_Symbol(sValue)); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
} |
|
System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeature); |
|
} |
|
//lstString.Clear(); |
|
//lstString = null; |
|
pDic.Clear(); |
|
//按唯一值渲染类中的符号顺序重新加载符号 |
|
for (int i = 0; i < pUniqueValueRenderer.ValueCount; i++) |
|
{ |
|
sValue = pUniqueValueRenderer.get_Value(i); |
|
sLabel = pUniqueValueRenderer.get_Label(sValue); |
|
sHead = pUniqueValueRenderer.get_Heading(sValue); |
|
if (!pDictionaryTemp.ContainsKey(sLabel)) |
|
{ |
|
continue; |
|
} |
|
if (dtZD == null || dtZD.Rows.Count <= 0) |
|
{ |
|
if (featurename.ToUpper() == "DLTB") |
|
{ |
|
string sLabel2 = lstString.FirstOrDefault(m => m.Key == sValue).Value; |
|
pDic.Add(sLabel2, pDictionaryTemp[sLabel]); |
|
} |
|
else |
|
{ |
|
pDic.Add(sLabel, pDictionaryTemp[sLabel]); |
|
} |
|
continue; |
|
} |
|
if (sHead == "JXLX") |
|
{ |
|
if (sLabel == "620200") |
|
{ |
|
pDic.Add("国界", pDictionaryTemp[sLabel]); |
|
} |
|
else if (sLabel == "630200") |
|
{ |
|
pDic.Add("省界", pDictionaryTemp[sLabel]); |
|
} |
|
else if (sLabel == "640200") |
|
{ |
|
pDic.Add("地市界", pDictionaryTemp[sLabel]); |
|
} |
|
else if (sLabel == "650200") |
|
{ |
|
pDic.Add("县界", pDictionaryTemp[sLabel]); |
|
} |
|
else if (sLabel == "660200") |
|
{ |
|
pDic.Add("乡界", pDictionaryTemp[sLabel]); |
|
} |
|
else if (sLabel == "670500") |
|
{ |
|
pDic.Add("村界", pDictionaryTemp[sLabel]); |
|
} |
|
else |
|
{ |
|
DataRow[] drs = dtZD.Select("Type='" + sHead + "' AND Code='" + sLabel + "'"); |
|
if (drs != null && drs.Length == 1 && !string.IsNullOrEmpty(drs[0]["Name"] as string)) |
|
{ |
|
pDic.Add(drs[0]["Name"].ToString(), pDictionaryTemp[sLabel]); |
|
} |
|
else |
|
{ |
|
pDic.Add(sLabel, pDictionaryTemp[sLabel]); |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
DataRow[] drs = dtZD.Select("Type='" + sHead + "' AND Code='" + sLabel + "'"); |
|
if (drs != null && drs.Length == 1 && !string.IsNullOrEmpty(drs[0]["Name"] as string)) |
|
{ |
|
pDic.Add(drs[0]["Name"].ToString(), pDictionaryTemp[sLabel]); |
|
} |
|
else |
|
{ |
|
pDic.Add(sLabel, pDictionaryTemp[sLabel]); |
|
} |
|
} |
|
} |
|
pDictionaryTemp.Clear(); |
|
pDictionaryTemp = null; |
|
return true; |
|
} |
|
} |
|
}
|
|
|