1、空间校正是针对矢量图的,栅格配准是针对栅格影像的。
在ArcMap中对应的Spatial Adjustment工具条和Georeference工具条【具体平台操作分别参考:http://bbs.esrichina-bj.cn/ESRI/thread-47016-1-1.html和http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=23306 】 ;在AE中的具体栅格配准接口为:IGeoreference 、而空间校正根据具体的校正的方法有很多种.针对矢量数据用到Spatial Adjustment工具条,而对栅格进行配准则用到Georeference工具条。
具体介绍如下:
I、彷射变换:
二维的彷射变换是AffineTransformation2D类, 彷射变换主要有两种变换:Conformal Transformation(等角变换)和 Affine Tranformation(真彷射变换) ,对应的接口机器构造函数为:IAffineTransformation2D3::DefineConformalFromControlPoints 和 IAffineTransformation2D::DefineFromControlPoints。其中等角变换要求至少两个已知点,因为他的变换函数使用4参数;而真彷射变换要求至少三个已知点,因为他的变换函数使用6参数。
II、投影变换:
主要实现IProjectiveTransformation2DGEN接口。至少需要4个控制点,因为该变换函数有八个参数。
III、还有相似变换等等。
这些接口都是继承于ITransformation,是通过几何的ITransform2D接口中Transform (esriTransformDirection direction, ITransformation transformation )方法发挥作用的。
2、判断某图层是为内存图层:
3 、查找GUID
IFeatureLayer pFeatLayer = MapCtrl.get_Layer(i) as IFeatureLayer;
if (pFeatLayer.DataSourceType.Trim().ToUpper() == "InMemory Feature Class".Trim().ToUpper())
{ }
表示:Interface接口的GUID;CLSID表示:组件类的GUID;ProgID是程序员给某个CLSID指定一个易记的名字。
1.在注册表HKEY_CLASSES_ROOT中搜索接口或对象名,全字匹配,找到的是值(其中接口是在HKEY_CLASSES_ROOT\Interface下),其对应的项就是要找的GUID。
2.自己编程实现,如:
IRasterLayer pRasterLayer=new RasterLayerClass();
pRasterLayer.GetType().GUID;
4、操作GeoDatabase相关
往Personal GDB或SDE GDB中写入要素记录是一件非常简单的事情,但似乎太多的情况下,写入数据的用例过于简单,使得许多代码问题、特别是ArcSDE本身的问题和Error无法暴露,很多人也从未意识到类似的问题。我最近正在做类似的工作,代码编写似乎不难,但测试就要了命了,发现的问题数不胜数,头痛不已。
1.插入记录的效率问题
向要素类中插入记录有两种方式,一是IFeature.Store,另一个是IFeatureCursor.Insert(IFeatureBuffer)和IFeatureCursor.Flush方法,显而易见的,后一种方法由于使用了缓存,速度上比前者快。
2.往MDB和SDE要素类中插入记录
这两种类型的要素类在往其中插入数据时不一定需要使用IWorkspaceEdit接口来开启和关闭一个Session,但是,如果SDE的要素类被注册为version,这个接口就必须使用了,否则CPU会高达100%,并会爆出“the operation in invalid on a closed state”的错误。而使用了有版本的SDE要素类,我遇到了许多令人崩溃的SDE ERROR,比如FDO_E_SE_DB_IO_ERROR、FDO_E_SE_OUT_OF_LOCKS等等。
3.将多个MDB导入一个MDB的时候,如果使用了IWorkspaceEdit接口,会出现某几个图层无法用ArcMap或ArcCatalog打开的情况,即以打开程序就崩溃,而不是用该接口,其它相同的代码做的加载过程,一切正常。
4.将两个或以上MDB导入一个MDB时候,到第二个MDB,很可能发生“**_SHAPE_INDEX被占用”的情况,这是因为写.NET平台代码时,你遍历或插入数据的游标cursor未释放的缘故。pFeatureCursor=null;并不会将对象从内存中清除,这是因为.NET平台是由Runtime来收集垃圾的,不像VC或VB那样能直接销毁COM对象,此时你应该使用System.Runtime.InteropServices.Marshal.ReleaseComObject方法来强制释放COM对象,以解除对某个表的独占状态。
5、更改机器名后正常使用ArcGIS
步骤:regedit --> Localmachine --> software --> esri --> license。在该项的右边license server数值中输入 @+主机名。 比如你的计算机名为A123那么就将其改为@A123。此后就可以正常运行Arcgis了。