//--------------------------------------------------------- bool CData_Source_PgSQL::Source_Create(const wxTreeItemId &Item) { CData_Source_PgSQL_Data *pData = Item.IsOk() ? (CData_Source_PgSQL_Data *)GetItemData(Item) : NULL; if( pData == NULL ) return( false ); if( pData->Get_Type() == TYPE_ROOT || pData->Get_Type() == TYPE_SERVER ) { CSG_Module *pModule = SG_Get_Module_Library_Manager().Get_Module("db_pgsql", DB_PGSQL_DB_Create); if( pModule && pModule->On_Before_Execution() ) { if( pData->Get_Type() == TYPE_SERVER ) { pModule->Set_Parameter("PG_HOST", pData->Get_Host()); pModule->Set_Parameter("PG_PORT", pData->Get_Port()); } if( DLG_Parameters(pModule->Get_Parameters()) ) { pModule->Execute(); } } } return( true ); }
//--------------------------------------------------------- void CData_Source_PgSQL::Source_Open(const wxTreeItemId &Item) { CData_Source_PgSQL_Data *pData = Item.IsOk() ? (CData_Source_PgSQL_Data *)GetItemData(Item) : NULL; if( pData == NULL ) return; if( pData->Get_Type() == TYPE_ROOT || pData->Get_Type() == TYPE_SERVER ) { CSG_Module *pModule = SG_Get_Module_Library_Manager().Get_Module("db_pgsql", DB_PGSQL_Get_Connection); // CGet_Connection if( pModule && pModule->On_Before_Execution() ) { if( pData->Get_Type() == TYPE_SERVER ) { pModule->Set_Parameter("PG_HOST", pData->Get_Host()); pModule->Set_Parameter("PG_PORT", pData->Get_Port()); } if( DLG_Parameters(pModule->Get_Parameters()) ) { pModule->Execute(); } } } else if( pData->is_Connected() ) { Update_Source(Item); } else if( !Source_Open(pData, true) ) { DLG_Message_Show_Error(_TL("Could not connect to data source."), _TL("Connect to PostgreSQL")); } }
//--------------------------------------------------------- bool PGSQL_Save_Shapes (CSG_Shapes *pShapes) { CSG_Module *pModule = SG_Get_Module_Library_Manager().Get_Module("db_pgsql", DB_PGSQL_Shapes_Save); if( pModule && pModule->On_Before_Execution() && pModule->Set_Parameter("SHAPES", pShapes) && DLG_Parameters(pModule->Get_Parameters()) && pModule->Execute() ) { return( true ); } return( false ); }
//--------------------------------------------------------- bool PGSQL_Save_Grid (CSG_Grid *pGrid) { CSG_Module *pModule = SG_Get_Module_Library_Manager().Get_Module("db_pgsql", DB_PGSQL_Raster_Save); if( pModule && pModule->On_Before_Execution() && pModule->Set_Parameter("NAME", pGrid->Get_Name()) ) { pModule->Get_Parameters()->Get_Parameter("GRIDS")->asList()->Del_Items(); if( pModule->Get_Parameters()->Get_Parameter("GRIDS")->asList()->Add_Item(pGrid) && DLG_Parameters(pModule->Get_Parameters()) && pModule->Execute() ) { return( true ); } } return( false ); }
//--------------------------------------------------------- CSG_Grid * CLandsat_Import::Get_Projection(CSG_Grid *pGrid, const CSG_String &Proj4) { if( pGrid->Get_Projection().is_Okay() == false ) { return( NULL ); } CSG_Module *pModule = SG_Get_Module_Library_Manager().Get_Module(SG_T("pj_proj4"), 4); // Coordinate Transformation (Grid) if( pModule == NULL ) { return( NULL ); } int Interpolation; switch( Parameters("INTERPOLATION")->asInt() ) { case 0: Interpolation = GRID_INTERPOLATION_NearestNeighbour; break; case 1: Interpolation = GRID_INTERPOLATION_Bilinear ; break; default: Interpolation = GRID_INTERPOLATION_BSpline ; break; } Message_Add(CSG_String::Format(SG_T("\n%s (%s: %s)\n"), _TL("re-projection to geographic coordinates"), _TL("original"), pGrid->Get_Projection().Get_Name().c_str()), false); pModule->Settings_Push(NULL); if( pModule->Set_Parameter("CRS_PROJ4" , Proj4 ) && pModule->Set_Parameter("INTERPOLATION", Interpolation) && pModule->Set_Parameter("SOURCE" , pGrid ) && pModule->Execute() ) { pGrid = pModule->Get_Parameters("TARGET")->Get_Parameter("GRID")->asGrid(); pModule->Settings_Pop(); return( pGrid ); } pModule->Settings_Pop(); Message_Add(CSG_String::Format(SG_T("\n%s: %s\n"), _TL("re-projection"), _TL("failed")), false); return( NULL ); }
//--------------------------------------------------------- bool CWKSP_Shapes::_Edit_Split(void) { if( Get_Shapes()->Get_Type() == SHAPE_TYPE_Polygon || Get_Shapes()->Get_Type() == SHAPE_TYPE_Line ) { switch( m_Edit_Mode ) { default: break; //------------------------------------------------- case EDIT_SHAPE_MODE_Normal: m_Edit_Mode = EDIT_SHAPE_MODE_Split; if( m_Edit_Shapes.Get_Count() == 0 ) { m_Edit_Shapes.Add_Shape(Get_Shapes()->Get_Selection()); } if( m_Edit_Shapes.Get_Count() > 1 ) { m_Edit_Shapes.Get_Shape(1)->Del_Parts(); } else { m_Edit_Shapes.Add_Shape(); } return( true ); //------------------------------------------------- case EDIT_SHAPE_MODE_Split: m_Edit_Mode = EDIT_SHAPE_MODE_Normal; CSG_Module *pModule = Get_Shapes()->Get_Type() == SHAPE_TYPE_Polygon ? SG_Get_Module_Library_Manager().Get_Module(SG_T("shapes_polygons"), 8) // Polygon-Line Intersection : SG_Get_Module_Library_Manager().Get_Module(SG_T("shapes_lines" ), 6); // Split Lines with Lines if( pModule ) { CSG_Shapes Line(SHAPE_TYPE_Line), Split(Get_Shapes()->Get_Type()); Line.Add_Shape(); for(int i=0; i<m_Edit_Shapes.Get_Shape(1)->Get_Point_Count(); i++) { Line.Get_Shape(0)->Add_Point(m_Edit_Shapes.Get_Shape(1)->Get_Point(i)); } m_Edit_Shapes.Del_Shape(1); //----------------------------------------- bool bResult; CSG_Parameters P; P.Assign(pModule->Get_Parameters()); pModule->Set_Manager(NULL); if( Get_Shapes()->Get_Type() == SHAPE_TYPE_Polygon ) { bResult = pModule->Get_Parameters()->Set_Parameter("POLYGONS" , &m_Edit_Shapes) && pModule->Get_Parameters()->Set_Parameter("LINES" , &Line) && pModule->Get_Parameters()->Set_Parameter("INTERSECT", &Split) && pModule->Execute(); } else // if( Get_Shapes()->Get_Type() == SHAPE_TYPE_Line ) { bResult = pModule->Get_Parameters()->Set_Parameter("LINES" , &m_Edit_Shapes) && pModule->Get_Parameters()->Set_Parameter("SPLIT" , &Line) && pModule->Get_Parameters()->Set_Parameter("INTERSECT", &Split) && pModule->Execute(); } //----------------------------------------- if( bResult ) { if( m_Edit_pShape ) { m_Edit_pShape->Assign(Split.Get_Shape(0), false); for(int iSplit=1; iSplit<Split.Get_Count(); iSplit++) { CSG_Shape *pSplit = Split.Get_Shape(iSplit); for(int iPart=0; iPart<pSplit->Get_Part_Count(); iPart++) { for(int iPoint=0, jPart=m_Edit_pShape->Get_Part_Count(); iPoint<pSplit->Get_Point_Count(iPart); iPoint++) { m_Edit_pShape->Add_Point(pSplit->Get_Point(iPoint, iPart), jPart); } } } } else if( Get_Shapes()->Get_Selection_Count() == 1 ) // if( !m_Edit_pShape ) { CSG_Shape *pSelection = Get_Shapes()->Get_Selection(); pSelection->Assign(Split.Get_Shape(0), false); for(int iSplit=1; iSplit<Split.Get_Count(); iSplit++) { CSG_Shape *pSplit = Get_Shapes()->Add_Shape(Split.Get_Shape(iSplit)); ((CSG_Table_Record *)pSplit)->Assign(pSelection); Get_Shapes()->Select(pSplit, true); } m_Edit_Shapes.Del_Shapes(); } } pModule->Get_Parameters()->Assign_Values(&P); pModule->Set_Manager(P.Get_Manager()); } Update_Views(false); return( true ); } } return( false ); }
//--------------------------------------------------------- bool CSG_Shapes::Create(const CSG_String &File_Name) { Destroy(); SG_UI_Msg_Add(CSG_String::Format("%s: %s...", _TL("Load shapes"), File_Name.c_str()), true); //----------------------------------------------------- bool bResult = File_Name.BeforeFirst(':').Cmp("PGSQL") && SG_File_Exists(File_Name) && _Load_ESRI(File_Name); if( bResult ) { Set_File_Name(File_Name, true); Load_MetaData(File_Name); } //----------------------------------------------------- else if( File_Name.BeforeFirst(':').Cmp("PGSQL") == 0 ) // database source { CSG_String s(File_Name); s = s.AfterFirst(':'); CSG_String Host (s.BeforeFirst(':')); s = s.AfterFirst(':'); CSG_String Port (s.BeforeFirst(':')); s = s.AfterFirst(':'); CSG_String DBName(s.BeforeFirst(':')); s = s.AfterFirst(':'); CSG_String Table (s.BeforeFirst(':')); CSG_Module *pModule = SG_Get_Module_Library_Manager().Get_Module("db_pgsql", 0); // CGet_Connections if( pModule != NULL ) { SG_UI_ProgressAndMsg_Lock(true); //--------------------------------------------- CSG_Table Connections; CSG_String Connection = DBName + " [" + Host + ":" + Port + "]"; pModule->Settings_Push(); if( pModule->On_Before_Execution() && SG_MODULE_PARAMETER_SET("CONNECTIONS", &Connections) && pModule->Execute() ) // CGet_Connections { for(int i=0; !bResult && i<Connections.Get_Count(); i++) { if( !Connection.Cmp(Connections[i].asString(0)) ) { bResult = true; } } } pModule->Settings_Pop(); //--------------------------------------------- if( bResult && (bResult = (pModule = SG_Get_Module_Library_Manager().Get_Module("db_pgsql", 20)) != NULL) == true ) // CPGIS_Shapes_Load { pModule->Settings_Push(); bResult = pModule->On_Before_Execution() && SG_MODULE_PARAMETER_SET("CONNECTION", Connection) && SG_MODULE_PARAMETER_SET("TABLES" , Table) && SG_MODULE_PARAMETER_SET("SHAPES" , this) && pModule->Execute(); pModule->Settings_Pop(); } SG_UI_ProgressAndMsg_Lock(false); } } //----------------------------------------------------- if( bResult ) { Set_Modified(false); Set_Update_Flag(); SG_UI_Msg_Add(_TL("okay"), false, SG_UI_MSG_STYLE_SUCCESS); return( true ); } for(int iShape=Get_Count()-1; iShape>=0; iShape--) // be kind, keep at least those shapes that have been loaded successfully { if( !Get_Shape(iShape)->is_Valid() ) { Del_Shape(iShape); } } if( Get_Count() <= 0 ) { Destroy(); } SG_UI_Msg_Add(_TL("failed"), false, SG_UI_MSG_STYLE_FAILURE); return( false ); }