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基础,求解决解释。
...全文
943 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tan0904 2015-03-25
  • 打赏
  • 举报
回复
朋友我也是这个问题你解决了没有啊!请赐教一下可以不!我也是初学的
lwq222121 2015-01-09
  • 打赏
  • 举报
回复
引用 1 楼 lwq222121 的回复:
http://zhidao.baidu.com/link?url=ATwN7Am9at3PwAbK-yNNbO60livCtWoDXTzTMYWpn3ODfYYwOQ3raufCBOKerSHkZPI-pQIUMiwLvN_Kw5fP1c-caAAmtXcPpyB8_zLD_8m
不好意思,发错了
lwq222121 2015-01-09
  • 打赏
  • 举报
回复
http://zhidao.baidu.com/link?url=ATwN7Am9at3PwAbK-yNNbO60livCtWoDXTzTMYWpn3ODfYYwOQ3raufCBOKerSHkZPI-pQIUMiwLvN_Kw5fP1c-caAAmtXcPpyB8_zLD_8m

1,978

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 其他语言讨论
社区管理员
  • 其他语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧