ArcGIS数据访问比较简单,有现成的组件可以利用,主要有两种方式,一种是通过图层访问,一种是IWorkspace方式访问
一、通过图层访问
a.通过MxDocument访问地图图层
[C#]
IMap pMap;
IMaps pMaps = pMxDocument.Maps;
for (int i = 0; i <= pMaps.Count - 1; i++)
{
pMap = pMaps.get_Item(i);
Console.WriteLine(pMap.Name);
IEnumLayer pEnumLayer = pMap.get_Layers(null, true);
pEnumLayer.Reset();
ILayer pLayer = pEnumLayer.Next();
while (pLayer != null)
{
Console.WriteLine(pLayer.Name);
pLayer = pEnumLayer.Next();
}
}
b.通过MapDocument访问地图图层,不需要ArcMap,直接读.mxd文件
[C#]
IMapDocument pMapDocument = new MapDocumentClass();
if (pMapDocument.get_IsMapDocument(path))
{
pMapDocument.Open(path, null);
IMap pMap;
for (int i = 0; i <= pMapDocument.MapCount - 1; i++)
{
pMap = pMapDocument.get_Map(i);
Console.WriteLine(pMap.Name);
IEnumLayer pEnumLayer = pMap.get_Layers(null, true);
pEnumLayer.Reset();
ILayer pLayer = pEnumLayer.Next();
while (pLayer != null)
{
Console.WriteLine(pLayer.Name);
pLayer = pEnumLayer.Next();
}
}
}
二、通过IWorkspace访问GeoDatabase
可以通过IWorkspace访问三种GeoDatabase:Personal、File、ArcSDE
建立File型GeoDatabase数据库连接
[C#]
// For example, path = @"C:\myData\myfGDB.gdb".
public static IWorkspace FileGdbWorkspaceFromPath(String path)
{
Type factoryType = Type.GetTypeFromProgID(
"esriDataSourcesGDB.FileGDBWorkspaceFactory");
IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance
(factoryType);
return workspaceFactory.OpenFromFile(path, 0);
}
建立Personal型GeoDatabase数据库连接
[C#]
// For example, path = @"C:\myData\mypGDB.mdb".
public static IWorkspace AccessWorkspaceFromPath(String path)
{
Type factoryType = Type.GetTypeFromProgID(
"esriDataSourcesGDB.AccessWorkspaceFactory");
IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance
(factoryType);
return workspaceFactory.OpenFromFile(path, 0);
}
通过IFeatureWorkspace访问要素类
[C#]
// Cast the workspace to IFeatureWorkspace and open a feature class.
IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace;
IFeatureClass featureClass = featureWorkspace.OpenFeatureClass("Parcels");