SDE를 사용할때는 DB에서 쿼리로 정보를 가져오면 되는데 File GDB를 사용하다 보니
File GDB의 속성 테이블이나 피쳐클래스 정보를 DataTable로 만들어 쓰면 편한 경우가 많아 만들어 보았다. ㅋ
using ESRI.ArcGIS.Geodatabase;
우선 피쳐클래스나 속성 테이블에서 가져올 정보를 ICursor 형태로 만들어 주는 메소드를 정의한다.
// 속성 테이블이나 FeatureClass 에서 ICursor 가져오기
public static ICursor GetCursor(IFeatureWorkspace pFeatWS, string sTableName, string sCauseWhere)
{
ITable pTable;
ICursor pCursor = null; ;
IQueryFilter pFilter = null; ;
try
{
pTable = pFeatWS.OpenTable(sTableName);
pFilter = new QueryFilter();
pFilter.WhereClause = sCauseWhere;
pCursor = pTable.Search(pFilter, false);
}
catch (Exception err)
{
}
return pCursor;
}
FeatureClass 또는 GDB 테이블 DataTable로 컨버전
//FeatureClass 또는 GDB 속성 테이블 DataTable로 컨버전
/// <summary>
/// ITable 데이터테이블로 (bskim)
/// </summary>
/// <param name="pFeatWS">워크스페이스</param>
/// <param name="sTableName">피쳐클래쓰 또는 테이블 명</param>
/// <param name="sCauseWhere">조건절</param>
/// <returns></returns>
public static DataTable ITableToDataTable(IFeatureWorkspace pFeatWS, string sTableName, string sCauseWhere)
{
ICursor pCursor = null;
IRow pRow = null;
IFields pFields = null;
IField pField = null;
DataTable dataTB = new DataTable(); //컨버전할 DataTable
//위에 함수 호출 ICursor 가져오기...
pCursor = GetCursor(pFeatWS, sTableName, sCauseWhere);
if (pCursor == null)
{
dataTB = null;
return dataTB;
}
pFields = null;
pRow = pCursor.NextRow();
int count = 0;
if (pRow != null)
{
pFields = pRow.Fields;
//DataTable에 피쳐클래스 나 테이블의 필드명을 이용하여 DataTable 필드를 만든다.
for (int i = 0; i < pFields.FieldCount; i++)
{
dataTB.Columns.Add(new DataColumn(pFields.get_Field(i).Name, typeof(string)));
}
while (pRow != null)
{
DataRow newRow = dataTB.NewRow();
object Value = "";
//DataTable에 값채우기
for (int i = 0; i < pFields.FieldCount; i++)
{
Value = pRow.get_Value(pRow.Fields.FindField(pFields.get_Field(i).Name));
newRow[pFields.get_Field(i).Name] = Value.ToString();
}
dataTB.Rows.Add(newRow);
pRow = pCursor.NextRow();
}
}
else
{
return null;
}
dataTB.AcceptChanges();
return dataTB; //DataTable로 만들어 반환한다.
}
'GIS' 카테고리의 다른 글
ArcObject : FileGDB 의 Blob 에서 파일 삽입, 읽기 (예: BLOB의 이미지 파일 읽기 및 등록) (0) | 2010.12.07 |
---|---|
ArcObject : FeatureClass , Feature, Table 의 Domain(도메인)값 찾아서 가져오기-C# (0) | 2010.12.06 |
ArcObject : xmd 맵문서 저장 -C# (0) | 2010.12.06 |
ArcGis Server (javascript) 축척 변경 (0) | 2010.01.13 |
windows2008 서버 iis7.0 개발시 파일 다운로드 안될때 - shapefile(쉐입파일) MIME 설정 (0) | 2009.12.17 |