Arcgis Engine使用不同mxd时有各种错误,求解决
张少楠 2015-01-09 09:29:40 地理信息 异常 arcgis engine c#
//添加实体对象到地图图层
private void addFeature(string layerName,IGeometry geometry)
{
int i = 0;
ILayer layer = null;
for (i = 0; i < axMapControl1.LayerCount; i++)
{
layer = axMapControl1.Map.get_Layer(i);
if (layer.Name.ToLower() == layerName)
{
break;
}
}
IFeatureLayer featureLayer = layer as IFeatureLayer;
IFeatureClass featureClass = featureLayer.FeatureClass;
IDataset dataset = (IDataset)featureClass;
IWorkspace workspace = dataset.Workspace;
//开始空间编辑
IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)workspace;
workspaceEdit.StartEditing(true);
workspaceEdit.StartEditOperation();
IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
IFeatureCursor featureCursor;
//清除图层原有实体对象
featureCursor = featureClass.Search(null, true);
IFeature feature;
feature = featureCursor.NextFeature();
while (feature!=null)
{
feature.Delete();
feature = featureCursor.NextFeature();
}
//开始插入新的实体对象
featureCursor = featureClass.Insert(true);
featureBuffer.Shape = geometry;
object featureOID = featureCursor.InsertFeature(featureBuffer);
//保存实体
featureCursor.Flush();
//结束空间编辑
workspaceEdit.StopEditOperation();
workspaceEdit.StopEditing(true);
System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor);
}
这是源代码
//添加实体对象
private void button1_Click(object sender, EventArgs e)
{
IGeometryCollection geometryCollection = new MultipointClass();
IMultipoint multipoint;
object missing = Type.Missing;
IPoint point;
for (int i = 0; i < 10; i++)
{
point = new PointClass();
point.PutCoords(i * 2, i * 2);
geometryCollection.AddGeometry(point as IGeometry, ref missing, ref missing);
}
multipoint = geometryCollection as IMultipoint;
addFeature("cities", multipoint as IGeometry);
this.axMapControl1.Extent = multipoint.Envelope;
this.axMapControl1.Refresh();
}
然后使用World.mxd时
在
IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)workspace;
出现错误
无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“ESRI.ArcGIS.Geodatabase.IWorkspaceEdit”。此操作失败的原因是对 IID 为“{995D5C92-15C6-11D2-89ED-006097AFF44E}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 不支持此接口 (异常来自 HRESULT:0x80004002 (E_NOINTERFACE))。
自己随便弄一张地图
在 feature.Delete();
出现
对 COM 组件的调用返回了错误 HRESULT E_FAIL
使用一张point.mxd(里面什么都没有)时
在Workspace workspace = dataset.Workspace;
出现
未将对象引用设置到对象的实例。
我学的是《Arcgis Engine 地理信息系统开发 从入门到精通》(第二版)(人民邮电出版社)
我是新手,现在是照打代码,无arcgis基础,求解决解释。