ArcEngine开发遇到的坑

环境ArcGIS10.1 Oracle11g

1、代码成功创建要素数据集,但是在oracle数据库中刷新不出来。解决方法:经检查发现该段代码放在IWorkSpaceEdit.startEditing后面,由于创建后并没有调用stopediting(true),所以一直识别失败。把这段代码提到startEditing之前执行。

2、更新数据报ORA-20085 Insert Spatial Reference SRID 300026 does not match SDE.REDLINERANG_A.SHAPE registered Spatial Reference SRID 300005

ORA-06512:at “SDE.ST_DOMAIN_METHODS”, line 1986

解决方法:经过查询表sde.ST_SPATIAL_REFERENCES,SRID 300005表示未知参考系统,SRID 300026是自定义的bz地方坐标系,猜测是在数据处理生成xx_point数据集时指定的未知坐标系,将其直接复制到sde库后,sde将其坐标系注册为SRID 300005;随后在sde库里将该要素数据集坐标系设置为SRID 300026,但是sde库并未将要素数据集下的要素类坐标系SRID 300005改为SRID 300026。目前的解决方法是:在SDE库里要素数据集下采用import方式导入前述处理生成的数据。另外一种方式:在生成处理完的数据集上设置相应的坐标系,然后复制粘贴到SDE库。

3、采用delete删除要素数据集时并不能删除里面的要素类,要素类还需要遍历删除。

4、mxd文档要设置坐标系。

 

5、调用copy GP工具将数据复制到ARCSDE数据库里,报错 ora-29855 ora-01536 超出表空间XX的空间限额。经发现当前用户对该表空间设置了使用限额,将其改为无限使用即可。  alter user skate quota unlimited on skate_ts;  

http://blog.csdn.net/lrh_079/article/details/17001453

6、访问axpagelayoutcontrol.printer得到null。解决方法:电脑上没有设置默认打印机,设置默认打印机即可。可以设置Microsoft XPS Document Writer为默认打印机。

7、Axcontrols与maptcontrol的区别:10.2版,都存在于 ESRI.Arcgis.Controls,maptcontrol是接口,Axcontrols是控件。

参考https://blog.csdn.net/crury/article/details/5624525

从ESRI给出的官方解释是:

Axcontrols对应封装的.net组件,controls对应于com组件,在使用时须要添加ESRI.Arcgis.Axcontrols名空间和ESRI.Arcgis.Controls名空间。两者包含了所有AE组件。

一个高手的解释:

AxMapControl是.NET组件的,它是COM组件经过.NET的CCW(COM 可调用包装)包装后的控件,它是在全局程序集中加载的(缺省目录在C:/WINDOWS/Assembly)。而ESRI MapControl是ArcGIS安装目录的Bin文件中加载的。主要区别是一个要注册到注册表(COM的即后者),另一个不需要注册到注册表(直接在GAC中加载,这也是.NET新技术的特点所在).
--------------------- 
作者:crury 
来源:CSDN 
原文:https://blog.csdn.net/crury/article/details/5624525 
版权声明:本文为博主原创文章,转载请附上博文链接!

8、传递AxMapControl

http://blog.sina.com.cn/s/blog_488e2b5b0100ztxr.html

问题描述:

将AxMapControl传递到另一个类中使用。

解决方案1:(原始方案)

public void func(IMapControl2 mapControl)

{

   ...

}

在主函数中调用: func((IMapControl2)this.AxMapControl1.Object);

 

以上方案实际已经正常解决,但问题是每次调用,都要强制转换,对于使用者来说,肯定是个负担。

解决方案3:(完美解决)

1. 在类中添加添加引用AxControl(注意不是AxMapControl)

类中的函数为:

public void func(AxControl axMapControl)

{

    IMapControl2 mapControl = (IMapControl2)axMapControl.Object;

   ...

}

主函数中调用:

func(this.AxMapControl1)

9、在arcmap里打开shp的属性表,可以看到有属性记录,但是我选择一条记录却没法定位过去,图上看不到该点。原因:

在AE里删除要素时没有使用工作空间开启编辑。
IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)workspace;  
workspaceEdit.StartEditing(true);  workspaceEdit.StartEditOperation(); 

10、空间查询(SpatialFilter)面包含线的关系找不到结果。原因:面没有封闭。 将面和线叠加到arcmap里,打开编辑,发现面没有封闭。

ISpatialFilter spatialFilter = new SpatialFilterClass()
{
   Geometry = geometry,
   GeometryField = originFClass.ShapeFieldName,
   SpatialRel = esriSpatialRelEnum.esriSpatialRelContains
};
 

 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值