ArcSDE中直接取得圖層幾何類型
要取得SDE圖層要素類型,一個方法就是打開該圖層,然后通過取得DataSetType屬性和FeatureType屬性來判斷,但這樣做效率比較低。能不能通過SDE的系統表來獲得呢,答案是可以的。
要有到兩張系統表:GDB_OBJECTCLASSES和GDB_FEATURECLASSES。
其中GDB_OBJECTCLASSES表中相關字段有:ID、Name,GDB_FEATURECLASSES表的相關字段是:ObjectClassID、FeatureType、GeometryType,兩個表的關聯關系是:GDB_OBJECTCLASSES.ID=GDB_FEATURECLASSES.ObjectClassID。通過這兩個表的關聯,就可以取得指定圖層要素類型了。
我們可以先通過SQL語句根據圖層名稱來獲取GDB_FEATURECLASSES表中字段FeatureType、GeometryType的值,然后將其轉化為對應的要素類型。轉換關系請參照下面的代碼:
public enum GeoType{Point,Line,Polygon,Anno,Raster,AttrTable,Unknown};
![]()
public static GeoType GetGeoType(object GeometryType,object FeatureType)
{
if (GeometryType == DBNull.Value)
return GeoType.AttrTable;
else if(GeometryType.ToString() == "2")
{
return GeoType.Point;
}
else if (GeometryType.ToString() == "3")
{
return GeoType.Line;
}
else if(GeometryType.ToString() == "4")
{
if (FeatureType.ToString() == "1")
return GeoType.Polygon;
else if (FeatureType.ToString() == "11")
return GeoType.Anno;
else if (FeatureType.ToString() == "14")
return GeoType.Raster;
else
return GeoType.Unknown;
}
else
{
return GeoType.Unknown;
}
}
要有到兩張系統表:GDB_OBJECTCLASSES和GDB_FEATURECLASSES。
其中GDB_OBJECTCLASSES表中相關字段有:ID、Name,GDB_FEATURECLASSES表的相關字段是:ObjectClassID、FeatureType、GeometryType,兩個表的關聯關系是:GDB_OBJECTCLASSES.ID=GDB_FEATURECLASSES.ObjectClassID。通過這兩個表的關聯,就可以取得指定圖層要素類型了。
我們可以先通過SQL語句根據圖層名稱來獲取GDB_FEATURECLASSES表中字段FeatureType、GeometryType的值,然后將其轉化為對應的要素類型。轉換關系請參照下面的代碼:
public enum GeoType{Point,Line,Polygon,Anno,Raster,AttrTable,Unknown};
public static GeoType GetGeoType(object GeometryType,object FeatureType)
{
if (GeometryType == DBNull.Value)
return GeoType.AttrTable;
else if(GeometryType.ToString() == "2")
{
return GeoType.Point;
}
else if (GeometryType.ToString() == "3")
{
return GeoType.Line;
}
else if(GeometryType.ToString() == "4")
{
if (FeatureType.ToString() == "1")
return GeoType.Polygon;
else if (FeatureType.ToString() == "11")
return GeoType.Anno;
else if (FeatureType.ToString() == "14")
return GeoType.Raster;
else
return GeoType.Unknown;
}
else
{
return GeoType.Unknown;
}
}
通過這種方式,速度很快,而且可以一次讀出所有圖層的圖層基本信息和要素類型,速度極快。如果這些信息要經常使用的話,可以保存到一個哈希表中,這樣只用連接一次數據庫就OK了。


浙公網安備 33010602011771號