IRasterGeometryProc,一个可以控制raster对象的接口

栅格影像加载到MapControl中以后,如果想更改影像的旋转、扭曲等形状,接口IRasterGeometryProc是个不错的选择。

Remarks

The RasterGeometryProc manipulates only Raster objects, not RasterBand or RasterDataset object. This is because the Raster is transient, as are the effects of the RasterGeometryProc. This means that any transformation will also go away when the Raster object goes out of scope.

To keep the transformed data for later use, you must persist the transformation using Register or Rectify. If used on a Raster contained within a RasterLayer, processing performed by this object will be visible when the display is refreshed.

Although Merge and Mosaic take Raster object as an input, any changes to the Raster object before calling the two methods will be ignored.

该接口只能操作Raster对象,所以针对已经加载的RasterLayer对象,可以通过Rasterlayer.Raster获取到Raster对象,然后做相应的操作。比如如下代码,使用Warp方法修改形状

IWorkspaceFactory pWSF = new RasterWorkspaceFactoryClass();
IWorkspace pWS = pWSF.OpenFromFile(workSpace, 0);

IRasterWorkspace pRWS = pWS as IRasterWorkspace;
IRasterDataset pRasterDataset = pRWS.OpenRasterDataset(file.Name);
IRasterLayer pRasterLayer = new RasterLayerClass();
pRasterLayer.CreateFromDataset(pRasterDataset);

IEnvelope envelope = pRasterLayer.AreaOfInterest;
IPointCollection originPC = new PolygonClass();
originPC.AddPoint(envelope.LowerLeft);
originPC.AddPoint(envelope.UpperLeft);
originPC.AddPoint(envelope.UpperRight);
originPC.AddPoint(envelope.LowerRight);

IPointCollection targetPointCollect = new PolygonClass();
List<CPoint> targetPointList = ImageProcessHandler.GenerateFourCoordinateList(centerPoint, entity.ImageProcessConfig.CamaraParameter, true);

IRaster raster = pRasterLayer.Raster;
IRasterGeometryProc rasterGeometryProc = new RasterGeometryProcClass();
rasterGeometryProc.Warp(originPC, targetPointCollect, esriGeoTransTypeEnum.esriGeoTransSpline, raster);

axMapControl.AddLayer(pRasterLayer);
axMapControl.Refresh();

Members

   
All
 
Properties
 
Methods
 
Description
Clip Clips the input raster based on the specified envelope.
Flip Flips the input raster.
IsPixelToMapTransSimple Indicates if the transformation of pixel to map is simple.
LeastSquareFit Computes a least squares fit for the input control points.
Merge Merges the input rasters into a single dataset.
Mirror Mirrors the input raster.
Mosaic Mosaics the input rasters into a single dataset.
PointsTransform Transforms a set of points based upon the transformation being applied to the input raster.
ProjectFast Projects the input raster using a single polynomial fit to compute the adjustment between coordinate systems.
Rectify Persists the input raster to a new dataset of the specified format.
Register Outputs the current transformation properties to the dataset header or auxilliary file.
Resample Resamples the input raster to a new cellsize.
ReScale Scales the input raster by the specified x and y scale factors.
Reset Resets the input raster to its native coordinate space.
Rotate Rotates the input raster around the specified pivot by an angle specified in degrees.
Shift Shifts the input raster by deltaX and deltaY map units.
TwoPointsAdjust Performs a Hermite transformation on the input raster based upon the 2 input control point pairs.
Warp Warps the input raster based upon the input control points using the transformation type specified.

原文地址:https://www.cnblogs.com/yingrufeng/p/9999715.html

时间: 2024-10-09 04:03:25

IRasterGeometryProc,一个可以控制raster对象的接口的相关文章

PHP 面向对对象基础(接口,类)

介绍PHP面向对象的基础知识 1. 接口的定义interface ,类定义class,类支持abstract和final修饰符,abstract修饰为抽象类,抽象类 不支持直接实例化,final修饰的类/方法不能被继承/方法重写.2. 接口的实现通过implements,类继承extends interface IShape{ function draw_core(); }; class PathShape implements IShape{ public function draw_core

LuaJava学习笔记[2]使用Lua控制Java对象

LuaJava学习笔记 使用Lua控制Java对象 [资源准备] 本次依然使用LuaJava1.1作为工具,你可以到这里进行下载:http://luaforge.net/projects/luajava/.不要忘记将本地库放到项目目录中去.我的工作目录是这样的: 为了方便,我使用Maven进行的项目依赖关联,你也可以将luajava的jar包导入项目中,这两者都是等效的.如果使用的linux进行开发,你的本地库名称应该是一个so文件,这些库文件在链接页面中都可以找到. [源文件] TestObj

Kotlin基础(三)类、对象和接口

类.对象和接口 一.定义类的继承结构 一)Kotlin中的接口 Kotlin的接口与Java8中相似,它们可以包含抽象方法的定义以及非抽象方法的实现,但它们不能包含任何状态. 1 interface Clickable{ 2 fun click() 3 fun showoff()=println("It's show time!") 4 } 5 6 interface Focusable{ 7 fun setFocus(b: Boolean)= 8 println("I ${

[JCIP笔记] (三)如何设计一个线程安全的对象

在当我们谈论线程安全时,我们在谈论什么中,我们讨论了怎样通过Java的synchronize机制去避免几个线程同时访问一个变量时发生问题.忧国忧民的Brian Goetz大神在多年的开发过程中,也悟到了人性的懒惰,他深知许多程序员不会在设计阶段就考虑到线程安全,只是假设自己的代码能按照自己的想法很好地运转.然而当程序上线.线程安全问题真的发生时,要花费多于前期设计数倍的时间和精力去进行排查.解决,甚至重新设计.于是,他在字里行间一直秉持一种"凡事皆可发生"的小心翼翼的哲学,并以这种哲学

设计模式(12)----- 命令设计模式(升级----一个开关控制多条命令)

我们先来看张类图 RemoteControl类修改一下 public class RemoteControl {     Command[] onCommands; Command[] offCommands; public RemoteControl() { onCommands = new Command[7];          offCommands = new Command[7]; Command noCommand = new NoCommand(); for (int i = 0

第四章(类、对象和接口)

Kotlin的类和接口与Java的类和接口还是有一点区别的.例如:接口可以包含属性声明.与Java不同,Kotlin的声明默认是 final?和 public?的.此外,嵌套的类默认并不是内部类:它们并没有包含对其外部类的隐式引用. Kotlin中的接口 Kotlin的接口与Java 8中的相似:它们可以包含抽象方法的定义以及非抽象方法的实现.与Java 8不同的是,Java 8中需要你在这样的实现上标注default关键字,而Kotlin没有特殊的注解:只需要提供一个方法体.示例: inter

面试题:Java中对象序列化接口(Serializable)的意义

Serializable接口是一个里面什么都没有的接口 它的源代码是public interface Serializable{},即什么都没有. 如果一个接口里面什么内容都没有,那么这个接口是一个标识接口,比如,一个学生遇到一个问题,排错排了几天也没解决,此时,她举手了(示意我去帮他解决),然后我过去,帮他解决了,那么这个举手其实就是一个标识,自己不能解决的问题标示我去帮他解决,在Java中的这个Serializable接口是给JVM看的,告诉JVM,我不做这个类的序列化了,你(JVM)给我序

在Unity中定义统一的对象搜索接口

我们经常要在Unity中以各种方式搜索对象.比如按名字搜索.按tag.layer或者是查找名字为xxx开头的对象. 本文是介绍以一种统一的接口来搜索对象. 1.定义统一的搜索接口 /// <summary> /// 游戏对象搜索接口 /// </summary> public interface IGameObjectFinder { /// <summary> /// 搜索 /// </summary> /// <param name="r

一个摄像机控制类的总结

一个摄像机控制类的总结 实现功能: 通过鼠标的操纵,控制摄像机环绕模型对象旋转,从而进行对模型对象的观察. 设计思路: 首先根据摄像机的当前方位,计算它应该到达的目标方位: 然后通过插值运算,将摄像机逐帧移动到该目标方位. 过程描述: 1. 计算摄像机的目标方位. 先计算摄像机本地坐标系轴向与世界坐标系轴向的夹角,作为方位的初始值.注意,这里只取摄像机需要旋转变化的坐标轴即可,这里我们用的是X和Y轴. 在鼠标的控制过程中,实时的修改此夹角值. 对修改后的夹角值进行限位处理,使之满足我们的需要.