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是自定义的巴中地方坐标系,猜测是在数据处理生成hm_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)

 

 

 

 

你可能感兴趣的:(C#)