공간정보에서 피쳐클래스나 속성테이블의 필드에 Domain을 사용하였을 경우
해당 값(코드정보등..)의 Domain 값을 찾아 반환해주는 함수이다.
만약 도메인에 구성된 값이 아닐경우에는 그냥 본래의 값을 반환한다.
만약 도메인 값 리스트를 뽑고 싶으면 소스에서 반환타입과 비교절을 적절히 사용하면 됨.
아래의 함수는 피쳐에 도메인 값을 반환하는 경우인데 만약 일반 속성테이블이나
피쳐클래쓰라면 빨간색으로 써논 부분을 참고해서 사용하면 된다.
using ESRI.ArcGIS.Geodatabase;
/// <summary>
/// 도메인 이름 가져오기
/// </summary>
/// <param name="pFeature"> 피쳐</param>
/// <param name="fieldName">필드이름</param>
/// <param name="domainCode">필드값</param>
/// <returns></returns>
public string FindDominValue(IFeature pFeature, string fieldName, string domainCode)
public string FindDominValue(IRow pRow, string fieldName, string domainCode)
public string FindDominValue(IFeatureClass pFeatureClass, string fieldName, string domainCode)
{
string domainValue = domainCode;
IObjectClass pObjectClass = null; ;
IValidation pValidation = null; ;
IEnumRule pEnumRule = null;
IRule pRule = null;
IAttributeRule pAttributeRule = null;
IDomain pDomin = null;
ISubtypes pSubtypes =null;
ICodedValueDomain pCodedValueDomain = null;
try
{
pObjectClass = pFeature.Class;
/*
- IRow 경우
pObjectClass = pRow as IObjectClass;
-IFeatureClass 경우
pObjectClass = pFeatureClass;
로 각각 맞춰서 사용하면 됨.
쉽죠잉~
*/
pValidation = pObjectClass as IValidation;
pEnumRule = pValidation.get_RulesByField(fieldName);
if (pEnumRule != null)
{
pEnumRule.Reset();
pRule = pEnumRule.Next();
if (pRule != null)
{
if (pRule.Type == esriRuleType.esriRTAttribute)
{
pAttributeRule = pRule as IAttributeRule;
pSubtypes = pObjectClass as ISubtypes;
pDomin = pSubtypes.get_Domain(pAttributeRule.SubtypeCode, pAttributeRule.FieldName);
if (pDomin != null)
{
if (pDomin.Type == esriDomainType.esriDTCodedValue)
{
pCodedValueDomain = pDomin as ICodedValueDomain;
int iCodeCount = 0;
iCodeCount = pCodedValueDomain.CodeCount;
for (int i = 0; i < iCodeCount; i++)
{
if (domainCode.Equals(pCodedValueDomain.get_Value(i) as string))
{
domainValue = pCodedValueDomain.get_Name(i) as string;
}
}
}
}
}
}
}
pObjectClass = null; ;
pValidation = null; ;
pEnumRule = null;
pRule = null;
pAttributeRule = null;
pDomin = null;
pSubtypes = null;
pCodedValueDomain = null;
}
catch (Exception ex)
{
return domainValue;
}
return domainValue;
}
'GIS' 카테고리의 다른 글
ArcGIS for FLEX(1.3): TextSymbol Angle, alpha 적용(TextSymbol rotate, transparency 하기) (0) | 2011.02.23 |
---|---|
ArcObject : FileGDB 의 Blob 에서 파일 삽입, 읽기 (예: BLOB의 이미지 파일 읽기 및 등록) (0) | 2010.12.07 |
ArcObject : GDB 속성 테이블을 DataTable 로 컨버전 (FeatureClass를 DataTable로 컨버전하기)-C# (0) | 2010.12.06 |
ArcObject : xmd 맵문서 저장 -C# (0) | 2010.12.06 |
ArcGis Server (javascript) 축척 변경 (0) | 2010.01.13 |