C# GDAL 打开遥感影像图片

C# GDAL 打开遥感影像图片,第1张

对于遥感来说,1W像素实在不算多。GDAL对你这个问题没有什么意义,因为GDAL是用来读写图像文件的,而你的问题是绘制。要绘制影像,以下几点要考虑到:1)如果只是显示局部影像,那么一定要先把这局部数据提取出来;2)如果要在窗口像素超出要显示的影像像素,那么要采用金字塔技术,根据像素多少判断该采用哪个金字塔层,建金字塔的技术有很多,比如最邻近法(最最简单的方法)、双线性插值法、立方卷积法等。最邻近法因为速度快,你在显示之前按照原理直接从基础影像中提取即可,其他方法最好要预先建立。

void ImageCut(const char* pszSrcFile, const char* pszDstFile, int iStartX, int iStartY, int iSizeX, int iSizeY,const char* pszFormat)

{

GDALAllRegister()

GDALDataset *pSrcDS = (GDALDataset*)GDALOpen(pszSrcFile, GA_ReadOnly)

GDALDataType eDT = pSrcDS->GetRasterBand(1)->GetRasterDataType()

int iBandCount = pSrcDS->GetRasterCount()

// 根据裁切范围确定裁切后的图像宽高

int iDstWidth  = iSizeX

int iDstHeight = iSizeY

double adfGeoTransform[6] = {0}

pSrcDS->GetGeoTransform(adfGeoTransform)

// 计算裁切后的图像的左上角坐标

adfGeoTransform[0] = adfGeoTransform[0] + iStartX*adfGeoTransform[1] + iStartY*adfGeoTransform[2]

adfGeoTransform[3] = adfGeoTransform[3] + iStartX*adfGeoTransform[4] + iStartY*adfGeoTransform[5]

// 创建输出文件并设置空间参考和坐标信息

GDALDriver *poDriver = (GDALDriver *) GDALGetDriverByName(pszFormat)

GDALDataset *pDstDS = poDriver->Create(pszDstFile, iDstWidth, iDstHeight, iBandCount, eDT, NULL)

pDstDS->SetGeoTransform(adfGeoTransform)

pDstDS->SetProjection(pSrcDS->GetProjectionRef())

int *pBandMap = new int[iBandCount]

for (int i=0i<iBandCounti++)

pBandMap[i] = i+1

// 下面这里需要根据数据类型来判断,申请不同类型的缓存来进行处理,这里仅仅以8bit图像进行演示

if (eDT == GDT_Byte) // 如果是8bit图像

{

// 申请所有数据所需要的缓存,如果图像太大应该用分块处理

char *pDataBuff = new char[iDstWidth*iDstHeight*iBandCount]

pSrcDS->RasterIO(GF_Read, iStartX, iStartY, iSizeX, iSizeY, pDataBuff, iSizeX, iSizeY, eDT, iBandCount, pBandMap, 0, 0, 0)

pDstDS->RasterIO(GF_Write, 0, 0, iSizeX, iSizeY, pDataBuff, iSizeX, iSizeY, eDT, iBandCount, pBandMap, 0, 0, 0)

delete(pDataBuff)

}

else

{

// 其他类型的图像,与8bit类似,就是申请的缓存类型不同而已

}

delete(pBandMap)

GDALClose((GDALDatasetH)pSrcDS)

GDALClose((GDALDatasetH)pDstDS)

return  

}

你会读取shp文件吗?如果会的话,直接把shp文件的路径换成dxf的路径即可。记得需要添加环境变量GDAL_DATA,值为gdal的data目录路径。也可以使用CPLSetConfigOption这个函数进行设置。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11531326.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存