Raster* DemAspectProcessorImpl::Aspect(Raster* pinRaster) { Raster* poutRaster = NULL; RasterFactory* pRasterFactory = augeGetRasterFactoryInstance(); //poutRaster = pRasterFactory->CreateRaster("", augePixelDouble, 1, pinRaster->GetExtent(), pinRaster->GetWidth(), pinRaster->GetHeight(), pinRaster->GetSpatialReference()); poutRaster = pRasterFactory->CreateRaster("", augePixelFloat32, 1, pinRaster->GetExtent(), pinRaster->GetWidth(), pinRaster->GetHeight(), pinRaster->GetSpatialReference()); if(poutRaster==NULL) { return NULL; } RESULTCODE rc = AG_SUCCESS; augePixelType type = pinRaster->GetPixelType(); RasterBand* pinBand = NULL; RasterBand* poutBand = NULL; g_uint band_count = pinRaster->GetBandCount(); for(g_uint i=0; i<band_count; i++) { pinBand = pinRaster->GetBand(i); poutBand = poutRaster->GetBand(i); switch(type) { case augePixelByte: rc = Aspect_Byte(pinBand, poutBand); break; case augePixelUInt16: case augePixelInt16: Aspect_Short(pinBand, poutBand); break; case augePixelUInt32: case augePixelInt32: break; case augePixelFloat32: Aspect_Float(pinBand, poutBand); break; case augePixelDouble: Aspect_Double(pinBand, poutBand); break; } if(rc!=AG_SUCCESS) { break; } } if(rc!=AG_SUCCESS) { poutRaster->Release(); poutRaster = NULL; } return poutRaster; }
RESULTCODE DemAspectProcessorImpl::Execute() { const char* inSourceName = GetInputDataSource(); const char* inRasterName = GetInputRaster(); const char* inRasterPath = GetInputRasterPath(); const char* outSourceName = GetOutputDataSource(); const char* outRasterName = GetOutputRaster(); const char* outRasterPath = GetOutputRasterPath(); Workspace* pWorkspace = NULL; RasterWorkspace* pinRasterWorkspace = NULL; RasterWorkspace* poutRasterWorkspace = NULL; GError* pError = augeGetErrorInstance(); GLogger* pLogger = augeGetLoggerInstance(); ConnectionManager* pConnManager = augeGetConnectionManagerInstance(); pWorkspace = pConnManager->GetWorkspace(m_user, inSourceName); if(pWorkspace==NULL) { return AG_FAILURE; } pinRasterWorkspace = dynamic_cast<RasterWorkspace*>(pWorkspace); pWorkspace = pConnManager->GetWorkspace(m_user, outSourceName); if(pWorkspace==NULL) { return AG_FAILURE; } poutRasterWorkspace = dynamic_cast<RasterWorkspace*>(pWorkspace); Raster* pinRaster = NULL; RasterFolder* pinFolder = NULL; Raster* poutRaster = NULL; RasterFolder* poutFolder = NULL; pinFolder = pinRasterWorkspace->GetFolder(inRasterPath); if(pinFolder==NULL) { return AG_FAILURE; } pinRaster = pinFolder->GetRasterDataset()->GetRaster(inRasterName); if(pinRaster==NULL) { const char* msg = "无法打开输入栅格数据"; pError->SetError(msg); pinFolder->Release(); return AG_FAILURE; } g_uint band_count = pinRaster->GetBandCount(); if(band_count!=1) { const char* msg = "Dem坡向计算仅支持单波段Dem数据"; pError->SetError(msg); pinFolder->Release(); return AG_FAILURE; } poutRaster = Aspect(pinRaster); if(poutRaster!=NULL) { poutRaster->SetName(outRasterName); } poutFolder = poutRasterWorkspace->GetFolder(outRasterPath); if(poutFolder==NULL) { pinFolder->Release(); poutRaster->Release(); return AG_FAILURE; } RESULTCODE rc = poutFolder->GetRasterDataset()->AddRaster(outRasterName, poutRaster); poutRaster->Release(); pinFolder->Release(); poutFolder->Release(); return rc; }
RESULTCODE RasterHistogramEqualizationProcessorImpl::Execute() { const char* inSourceName = GetInputDataSource(); const char* inRasterName = GetInputRaster(); const char* inRasterPath = GetInputRasterPath(); const char* outSourceName = GetOutputDataSource(); const char* outRasterName = GetOutputRaster(); const char* outRasterPath = GetOutputRasterPath(); Workspace* pWorkspace = NULL; RasterWorkspace* pinRasterWorkspace = NULL; RasterWorkspace* poutRasterWorkspace = NULL; GError* pError = augeGetErrorInstance(); GLogger* pLogger = augeGetLoggerInstance(); ConnectionManager* pConnManager = augeGetConnectionManagerInstance(); pWorkspace = pConnManager->GetWorkspace(m_user, inSourceName); if(pWorkspace==NULL) { return AG_FAILURE; } pinRasterWorkspace = dynamic_cast<RasterWorkspace*>(pWorkspace); pWorkspace = pConnManager->GetWorkspace(m_user, outSourceName); if(pWorkspace==NULL) { return AG_FAILURE; } poutRasterWorkspace = dynamic_cast<RasterWorkspace*>(pWorkspace); Raster* pinRaster = NULL; RasterFolder* pinFolder = NULL; //Raster* poutRaster = NULL; RasterFolder* poutFolder = NULL; pinFolder = pinRasterWorkspace->GetFolder(inRasterPath); if(pinFolder==NULL) { return AG_FAILURE; } pinRaster = pinFolder->GetRasterDataset()->GetRaster(inRasterName); if(pinRaster==NULL) { pinFolder->Release(); return AG_FAILURE; } augePixelType pixelType = pinRaster->GetPixelType(); if(pixelType != augePixelByte) { char msg[AUGE_MSG_MAX]; g_sprintf(msg, "直方图均衡化仅支持Byte类型像元栅格数据,当前栅格数据像元宽度为%dByte", pinRaster->GetPixelSize()); pError->SetError(msg); pinFolder->Release(); return AG_FAILURE; } //g_uint band_count = pinRaster->GetBandCount(); //if(band_count<3||band_count>4) //{ // pinFolder->Release(); // return AG_FAILURE; //} if(!HistogramEqualize(pinRaster)) { pinFolder->Release(); return AG_FAILURE; } poutFolder = poutRasterWorkspace->GetFolder(outRasterPath); if(poutFolder==NULL) { pinFolder->Release(); return AG_FAILURE; } RESULTCODE rc = poutFolder->GetRasterDataset()->AddRaster(outRasterName, pinRaster); pinRaster->Release(); poutFolder->Release(); pinFolder->Release(); return rc; }