运行坏境:vs2010,ArcGID10.1
AO中,通过AddLayer方法添加图层的代码如下:
1 IWorkspaceFactory workSpaceFactory = new ShapefileWorkspaceFactoryClass(); 2 IFeatureWorkspace featureWorkspace = workSpaceFactory.OpenFromFile(@"D:\Program Files\ArcGIS\Desktop10.1\ArcGlobeData", 0) as IFeatureWorkspace; 3 IFeatureLayer featureLayer = new FeatureLayerClass(); 4 featureLayer.FeatureClass = featureWorkspace.OpenFeatureClass("continent.shp"); 5 //featureLayer.Name = featureLayer.FeatureClass.AliasName; 6 this.axMapControl1.AddLayer(featureLayer as ILayer); 7 this.axMapControl1.Refresh();
需要添加的命名空间有:
using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.DataSourcesFile;
其中,IWorkspaceFactory,IFeatureWorkspace属于ESRI.ArcGIS.Geodatabase这个命名空间, IFeatureLayer属于ESRI.ArcGIS.Carto命名空间,ShapefileWorkspaceFactoryClass则属于ESRI.ArcGIS.DataSourcesFile这个命名空间。
生成解决方案的时候会出现这样的错误:
这就是嵌入互操作的错误,解决方法如下:
在解决方案资源管理器中找到FeatureLayerClass和ShapefileWorkspaceFactoryClass所引用的命名空间,即ESRI.ArcGIS.Carto和ESRI.ArcGIS.DataSourcesFile,右键选择属性,将嵌入互操作类型改为false,这样就OK了,生成成功!
但是在运行的时候,还会弹出这样一个错误:
说的很清楚,ArcGIS的版本指定不明确,所以在Program.cs中添加
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
这样一句话就OK了,如下所示:
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop); Application.Run(new Form1()); }
这样,整个应用程序就都运行成了!