影像数据的裁切和保存

news/2024/6/1 21:03:14

 

 ArcGIS 的栅格影像可以供保存的格式有:

The format strings used for the supported formats are below, and they are case sensitive:

Format NameString Used
Imagine"IMAGINE Image"
TIFF"TIFF"
GRID"GRID"
JPEG"JPG"
JP2000"JP2"
BMP"BMP"
PNG"PNG"
GIF"GIF"
PCI Raster"PIX"
X11 Pixmap"XPM"
PCRaster"MAP"
Memory Raster"MEM"
HDF4"HDF4"
BIL"BIL"
BIP"BIP"
BSQ"BSQ"
Idrisi Raster Format"RST"
ENVI Raster Format"ENVI"
Geodatabase Raster"GDB"

 保存栅格影像的方法

public void SaveAs(IRasterDataset rasterDataset, IWorkspace workspace, string      sFormat, string sName)  
{  
    //Using ISaveAs2, you can specify the storage property for the output raster, such as tile size, compression,   
    //and pyramid building, etc. for geodatabase raster, some also applies to output as a file format.  
    ISaveAs saveAs = rasterDataset as ISaveAs;  
    saveAs.SaveAs(sName, workspace, sFormat);  
}    
public void SaveAsWithCompressionAndTile(IRasterDataset rasterDataset)  
{      //rasterDataset can be created from any data source, file system, or geodatabase. 
  
    //It could also be a raster object (IRaster).  
    ISaveAs2 saveAs2 = (ISaveAs2)rasterDataset;        //Set storage.   
    IRasterStorageDef rasterStorageDef = new RasterStorageDefClass();  
    IRasterStorageDef2 rasterStorageDef2 = (IRasterStorageDef2)rasterStorageDef;  
    rasterStorageDef2.CompressionType =          esriRasterCompressionType.esriRasterCompressionJPEG2000;  
    rasterStorageDef2.CompressionQuality = 50;  
    rasterStorageDef2.Tiled = true;  
    rasterStorageDef2.TileHeight = 128;  
    rasterStorageDef2.TileWidth = 128;  
    //Set output workspace.  
    IRasterWorkspaceEx rasterWorkspaceEx = OpenFileGDBWorkspace("c:\\temp\\fgdb.gdb")          ;  
    IWorkspace workspace = (IWorkspace)rasterWorkspaceEx;  
    saveAs2.SaveAsRasterDataset("filegdbRaster", workspace, "gdb", rasterStorageDef2)          ;  
}      
public IRasterWorkspaceEx OpenFileGDBWorkspace(string sPath)  
{  
    IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactoryClass();  
    IWorkspace workspace = workspaceFactory.OpenFromFile(sPath, 0);  
    IRasterWorkspaceEx rasterWorkspaceEx = (IRasterWorkspaceEx)workspace;  
    return rasterWorkspaceEx;  
}

 

 

Turning off pyramid building
 
You can also turn off pyramid building for outputs, such as IMG, GRID, and TIFF formats using the ISaveAs2
interface. See the following code example:
 
public void SaveAsWithoutBuildingPyramids(IRaster raster)  
{  
    ISaveAs2 saveAs2 = (ISaveAs2)raster;    
    IRasterStorageDef rasterStorageDef = new RasterStorageDefClass();  
    IRasterStorageDef2 rasterStorageDef2 = (IRasterStorageDef2)rasterStorageDef;    
    rasterStorageDef2.PyramidLevel = 0;    
    IRasterWorkspace rasterWorkspace = SetRasterWorkspace("c:\\temp");  
    IWorkspace workspace = (IWorkspace)rasterWorkspace;    
    saveAs2.SaveAsRasterDataset("image1.img", workspace, "IMAGINE Image",          rasterStorageDef2);    
}      
public IRasterWorkspace SetRasterWorkspace(string sPath)  
{  
    IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactoryClass();  
    IWorkspace workspace = workspaceFactory.OpenFromFile(sPath, 0);  
    IRasterWorkspace rasterWorkspace = (IRasterWorkspace)workspace;    
    return rasterWorkspace;  
}

 

影像裁剪和保存 示例2

//影像裁切
IGeometry clipGeo = axMapControl1.TrackPolygon(); //
ILayer layer = axMapControl1.get_Layer(i); //要裁切的影像图层
IRasterLayer pRasterLayer = layer as IRasterLayer;
IRaster pRaster = pRasterLayer.Raster;
IRasterProps pProps = pRaster as IRasterProps;
object cellSizeProvider = pProps.MeanCellSize().X;
IGeoDataset pInputDataset = pRaster as IGeoDataset;
IExtractionOp pExtractionOp = new RasterExtractionOpClass();
IRasterAnalysisEnvironment pRasterAnaEnvir = pExtractionOp as IRasterAnalysisEnvironment;
pRasterAnaEnvir.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref cellSizeProvider);
object extentProvider = clipGeo.Envelope;
object snapRasterData = Type.Missing;
pRasterAnaEnvir.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ref extentProvider, ref snapRasterData);
IGeoDataset pOutputDataset = pExtractionOp.Polygon(pInputDataset, clipGeo as IPolygon, true);
IRaster clipRaster; //裁切后得到的IRaster
if (pOutputDataset is IRasterLayer)
{
IRasterLayer rasterLayer = pOutputDataset as IRasterLayer;
clipRaster = rasterLayer.Raster;
}
else if (pOutputDataset is IRasterDataset)
{
IRasterDataset rasterDataset = pOutputDataset as IRasterDataset;
clipRaster = rasterDataset.CreateDefaultRaster();
}
else if (pOutputDataset is IRaster)
{
clipRaster = pOutputDataset as IRaster;
}
else
{
return;
}
 




//保存裁切后得到的clipRaster
 
//如果直接保存为img影像文件
IWorkspaceFactory pWKSF = new RasterWorkspaceFactoryClass();
IWorkspace pWorkspace = pWKSF.OpenFromFile(@"C:\temp", 0);
ISaveAs pSaveAs = clipRaster as ISaveAs;
pSaveAs.SaveAs("test.img", pWorkspace, "IMAGINE Image");
 
//如果保存在mdb中
IRasterStorageDef pRasterStorageDef = new RasterStorageDefClass();
pRasterStorageDef.CompressionType = esriRasterCompressionType.esriRasterCompressionJPEG2000;
pRasterStorageDef.CompressionQuality = 50;
pRasterStorageDef.TileHeight = 128;
pRasterStorageDef.TileWidth = 128;
IWorkspaceFactory pWKSF = new AccessWorkspaceFactoryClass();
IWorkspace pWorkspace = pWKSF.OpenFromFile(@"C:\temp\test.mdb", 0);
ISaveAs2 pSaveAs = clipRaster as ISaveAs2;
pSaveAs.SaveAsRasterDataset("test", pWorkspace, "gdb", pRasterStorageDef);
 
//也可以使用IRasterWorkspaceEx的SaveAsRasterDataset方法保存到mdb中
IWorkspaceFactory pWKSF = new AccessWorkspaceFactoryClass();
IWorkspace pWorkspace = pWKSF.OpenFromFile(@"C:\temp\test.mdb", 0);
IRasterWorkspaceEx pRasterWKS = pWorkspace as IRasterWorkspaceEx;
IRasterStorageDef pRasterStorageDef = new RasterStorageDefClass();
pRasterStorageDef.CompressionType = esriRasterCompressionType.esriRasterCom
pressionJPEG2000;
pRasterStorageDef.CompressionQuality = 50;
pRasterStorageDef.PyramidLevel = 2;
pRasterStorageDef.PyramidResampleType = rstResamplingTypes.RSP_BilinearInterpolation;
pRasterStorageDef.TileHeight = 128;
pRasterStorageDef.TileWidth = 128;
IRasterDef pRasterDef = new RasterDefClass();
pRasterDef.Description = "rasterdataset";
pRasterDef.SpatialReference = axMapControl1.SpatialReference;
IGeometryDef pGeoDef = new GeometryDefClass();
IGeometryDefEdit pGeoDefEdit = pGeoDef as IGeometryDefEdit;
pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
pGeoDefEdit.AvgNumPoints_2 = 4;
pGeoDefEdit.GridCount_2 = 1;
pGeoDefEdit.set_GridSize(0, 1000);
pGeoDefEdit.SpatialReference_2 = axMapControl1.SpatialReference;
IRasterDataset pRasterDataset = pRasterWKS.SaveAsRasterDataset("test", clipRaster, pRasterStorageDef, "", pRasterDef,
pGeoDef);
//其实参数可以不用设置,直接:
IRasterDataset pRasterDataset = pRasterWKS.SaveAsRasterDataset("test", clipRaster, null, "", null, null);

 

 

 

 

参考文章

影像数据的裁切和保存    

保存栅格数据 ISaveAs.SaveAs Method

 

转载于:https://www.cnblogs.com/arxive/p/6986491.html


http://www.niftyadmin.cn/n/1054866.html

相关文章

送给张思漫,李志媛和王颖的C语言经典例题

1.打印乘法口诀表 #include<stdio.h> int main() {int i, j;for (i1; i < 9; i){for (j1; j < i; j){printf("%2d*%d%d", i, j, i*j);/*此处使用%2d是为了将两个式子用空格分开&#xff0c;方便查看*/}printf("\n");}system("pause"…

Future使用Demo

Future的使用场景&#xff1a;将计算或IO异步化&#xff0c;提高程序并行度。 public class FutureTaskTest{public static void main(String[] args) {//计算模块Callable<Integer> eval new Callable<Integer>() {Overridepublic Integer call() throws Excepti…

[转]linux系统之性能优化详解

一篇有待于认真学习的文章 引自:http://www.ite5e.com/newsinfo.php?nid2693 一、前言1) Linux Proc文件系统&#xff0c;通过对Proc文件系统进行调整&#xff0c;达到性能优化的目的。2) Linux性能诊断工具&#xff0c;介绍如何使用Linux自带的诊断工具进行性能诊断。加粗斜体…

OA系统和ERP系统的区别

一、OA和ERP的区别 1、含义不同&#xff1a; OA指Office Automation&#xff0c;中文简称自动办公系统&#xff0c;帮助企业内部管理沟通的工具&#xff0c;比如新闻公告、内部沟通、考勤、办公、员工请假、审批流程等。 ERP指Enterprise Resource Planning&#xff0c;中文简称…

[转]inode大小的最佳設置

转自&#xff1a;http://fanqiang.chinaunix.net/a1/b5/20010612/100800481_b.html inode size 倒底要多大才比較好&#xff1f;有人說如果小檔案多&#xff0c;則以 1024 byte 較好。 這樣的思考原則好像不是很謹慎。多少才叫『多』呢&#xff1f;我想我們需要一點定量的分析…

Jmeter接口实例:带token

若在测试其接口时需先登录&#xff0c;该如何操作&#xff1f; 测试内容简介:1、POST请求&#xff0c;参数为第一条响应中的id3、GET请求&#xff0c;带Token值结构图如下&#xff1a; 步骤如下&#xff1a;1、新建线程组2、添加http cookie管理器&#xff0c;使用默认设置&…

CHOI1301 邻值查找

那个写平衡树是不可能写平衡树&#xff0c;这辈子都不可能写平衡树。只有链表才能维持的了生命。 #include<bits/stdc.h> using namespace std; const int N1e55,inf2147483647; typedef pair<int,int> P; P a[N]; int b[N],b2[N],cnt2,head1,tail2,ans1[N],ans2[N…

【JAVA零基础入门系列】Day12 Java类的简单应用

【JAVA零基础入门系列】&#xff08;已完结&#xff09;导航目录 Day1 开发环境搭建Day2 Java集成开发环境IDEADay3 Java基本数据类型Day4 变量与常量Day5 Java中的运算符Day6 Java字符串Day7 Java输入与输出Day8 Java的控制流程Day9 Java中的那个大数值Day10 Java中的数组Day1…