void ReadRasterClass()
{
GsFileGeoDatabaseFactoryPtr pfac = new GsFileGeoDatabaseFactory();
GsConnectProperty conn;
conn.Server = MakeInputFile("tif");//tif文件目錄
GsGeoDatabasePtr ptrDb = pfac->Open(conn);
GsRasterClassPtr ptrRaster= ptrDb->OpenRasterClass("8bit");//打開一個叫8bit的文件8bit.tif
//如果金字塔不存在則創建金字塔
if(!ptrRaster->ExistsPyramid())
bool bCreateSuccess = ptrRaster->CreatePyramid(GsRasterResampleAlg::eAverage, 4);
//屏幕顯示的地理空間範圍
GsBox box(100,34,102,36);
//計算空間範圍在柵格類上的像素範圍。
GsRect rect = ptrRaster->ExtentToRange(box);
//要顯示的設備的範圍。
GsSize s;//pDisplay->DisplayTransformation()->DeviceExtent().Size();
//查詢需要操作的數據
GsRasterCursorPtr ptrCursor = ptrRaster->Search(rect, s, eNearestNeighbour);
std::shared_ptr< GsColorToRGBA> m_ptrTrans(new GsColorToRGBA());
Utility::GsSimpleBitmapPtr m_ptrImage;
GsRasterPtr ptrRasterData = new GsRaster();
while (ptrCursor->Next(ptrRasterData))
{
if (m_ptrImage)
{
if (m_ptrImage->Width() < ptrRaster->Width() ||
m_ptrImage->Height() <ptrRaster->Height())
m_ptrImage.Release();
}
if (!m_ptrImage)
m_ptrImage = new Utility::GsSimpleBitmap(ptrRaster->Width(), ptrRaster->Height(), 32);
memset((void*)m_ptrImage->Bit(), 0x00, m_ptrImage->Stride() * m_ptrImage->Height());
//採樣一塊數據到image
m_ptrTrans->Translate(ptrRasterData, m_ptrImage);
//下面拿image 做其他事情, 比如繪製.
//拿ptrRasterData對應的地理範圍計算需要貼圖的 屏幕範圍
//GsBox box = ptrRasterClass->RangeToExtent(Utility::GsRect(ptrRaster->OffsetX(), ptrRaster->OffsetY(), ptrRaster->Width(), ptrRaster->Height()));
//Utility::GsPT pt;
//pDisplay->DisplayTransformation()->FromMap(box.XMin, box.YMax, pt.X, pt.Y);
//貼圖
//ptrCanvas->DrawImage(m_ptrImage, pt);
}
}