您的位置:首页 > 其它

影像裁剪一些体会

2014-08-04 16:48 288 查看
最近一直在做影像裁剪的功能:

从影像服务器上下载影像(WebMercator投影),服务接口需要传入WGS84坐标的多边形,返回WebMercator影像。

客户端需要进行影像的转换成高斯投影(Beijing54为例)

//基准变换并重裁剪
public static void DatumTransformation(IRasterDataset2 rasterDataset, ISpatialReference outSR, IGeoTransformation geoTransformation, string path, IPolygon Vectorlayer)
{
IRaster raster = rasterDataset.CreateFullRaster();
IRasterProps rasterProps = (IRasterProps)raster;
double cellSize = rasterProps.MeanCellSize().X;//注意先获取象素大小
rasterProps.SpatialReference = outSR;//设置完新的空间参考之后会改变象素大小,因此要重采样
IGeoTransformationOperationSet operationSet = new GeoTransformationOperationSetClass();
operationSet.Set(esriTransformDirection.esriTransformForward, geoTransformation);
operationSet.Set(esriTransformDirection.esriTransformReverse, geoTransformation);

IRaster2 raster2 = (IRaster2)raster;
raster2.GeoTransformations = operationSet;//基准面转换
IEnvelope envelop = new EnvelopeClass();
envelop.XMin = Vectorlayer.Envelope.XMin;
envelop.YMin = Vectorlayer.Envelope.YMin;
envelop.XMax = Vectorlayer.Envelope.XMax + cellSize;
envelop.YMax = Vectorlayer.Envelope.YMax + cellSize;
rasterProps.Extent = envelop;//再次裁剪,此时会改变象素大小,默认保证行列数不变
IRasterGeometryProc ReSample = new RasterGeometryProcClass();
ReSample.Resample(rstResamplingTypes.RSP_NearestNeighbor, cellSize, raster);//重采样
IRasterBandCollection bandCol = (IRasterBandCollection)raster;
int nBandCount = bandCol.Count;
if (nBandCount == 3)
{
int[] nodata = { 0, 0, 0 };
rasterProps.NoDataValue = nodata;
}
else
{
rasterProps.NoDataValue = 0;
}
ISaveAs saveas = (ISaveAs)raster;
saveas.SaveAs(path, null, "JPEG");
}


View Code

地理坐标有三种形式:

1.天文经纬度,纬度为铅垂线与赤道面夹角;

2.大地经纬度,纬度为椭球面切线与赤道面夹角;

3.地心经纬度,纬度为地心连线与赤道面夹角。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: