//--------------------------------------------------------- bool CImport_Clip_Resample::Load_Grid(CSG_Grid *pImport) { CSG_Grid_System System = pImport->Get_System(); //----------------------------------------------------- const CSG_Rect *pClip = Parameters("CLIP")->asShapes() ? &Parameters("CLIP")->asShapes()->Get_Extent() : NULL; if( pClip ) { if( !pClip->Intersects(System.Get_Extent()) ) { return( false ); } TSG_Rect Extent = System.Get_Extent(); if( pClip->Get_XMin() > System.Get_XMin() ) Extent.xMin = System.Fit_xto_Grid_System(pClip->Get_XMin()); if( pClip->Get_XMax() < System.Get_XMax() ) Extent.xMax = System.Fit_xto_Grid_System(pClip->Get_XMax()); if( pClip->Get_YMin() > System.Get_YMin() ) Extent.yMin = System.Fit_yto_Grid_System(pClip->Get_YMin()); if( pClip->Get_YMax() < System.Get_YMax() ) Extent.yMax = System.Fit_yto_Grid_System(pClip->Get_YMax()); System.Assign(System.Get_Cellsize(), Extent); } //----------------------------------------------------- if( Parameters("RESAMPLE")->asBool() ) { double Cellsize = Parameters("CELLSIZE")->asDouble(); if( Cellsize > 0.0 && Cellsize != System.Get_Cellsize() ) { System.Assign(Cellsize, System.Get_Extent()); } } //----------------------------------------------------- if( Parameters("NODATA")->asBool() ) { pImport->Set_NoData_Value(Parameters("NODATA_VAL")->asDouble()); } //----------------------------------------------------- CSG_Grid *pGrid = SG_Create_Grid(System, Parameters("KEEP_TYPE")->asBool() ? pImport->Get_Type() : SG_DATATYPE_Float); if( pGrid ) { pGrid->Assign (pImport); pGrid->Set_Name(pImport->Get_Name()); m_pGrids->Add_Item(pGrid); return( true ); } return( false ); }
//--------------------------------------------------------- bool CCRS_Transform_Grid::Get_Target_System(const CSG_Grid_System &System, bool bEdge) { int x, y, Resolution; TSG_Rect Extent; Extent.xMin = Extent.yMin = 1.0; Extent.xMax = Extent.yMax = 0.0; Get_MinMax(Extent, System.Get_XMin(), System.Get_YMin()); Get_MinMax(Extent, System.Get_XMax(), System.Get_YMin()); Get_MinMax(Extent, System.Get_XMin(), System.Get_YMax()); Get_MinMax(Extent, System.Get_XMax(), System.Get_YMax()); Resolution = 256; switch( 1 ) { case 1: // edges { double d; int yStep = 1 + System.Get_NY() / Resolution; for(y=0, d=System.Get_YMin(); y<System.Get_NY(); y+=yStep, d+=yStep*System.Get_Cellsize()) { Get_MinMax(Extent, System.Get_XMin(), d); Get_MinMax(Extent, System.Get_XMax(), d); } int xStep = 1 + System.Get_NX() / Resolution; for(x=0, d=System.Get_XMin(); x<System.Get_NX(); x+=xStep, d+=xStep*System.Get_Cellsize()) { Get_MinMax(Extent, d, System.Get_YMin()); Get_MinMax(Extent, d, System.Get_YMax()); } } break; case 2: // all cells { TSG_Point p; int xStep = 1 + System.Get_NX() / Resolution; int yStep = 1 + System.Get_NY() / Resolution; for(y=0, p.y=System.Get_YMin(); y<System.Get_NY() && Set_Progress(y, System.Get_NY()); y+=yStep, p.y+=yStep*System.Get_Cellsize()) { for(x=0, p.x=System.Get_XMin(); x<System.Get_NX(); x+=xStep, p.x+=xStep*System.Get_Cellsize()) { Get_MinMax(Extent, p.x, p.y); } } } break; } return( is_Progress() && Extent.xMin < Extent.xMax && Extent.yMin < Extent.yMax && m_Grid_Target.Init_User(Extent, System.Get_NY()) && Dlg_Parameters("GET_USER") ); }