//--------------------------------------------------------- bool CSG_ODBC_Connection::Table_Insert(const CSG_String &Table_Name, const CSG_Table &Table, bool bCommit) { //----------------------------------------------------- if( !is_Connected() ) { _Error_Message(_TL("no database connection")); return( false ); } if( !Table_Exists(Table_Name) ) { return( false ); } CSG_Table Fields = Get_Field_Desc(Table_Name); if( Fields.Get_Count() != Table.Get_Field_Count() ) { return( false ); } //----------------------------------------------------- try { bool bLOB = false; int iField, iRecord; CSG_String Insert; otl_stream Stream; //------------------------------------------------- Insert.Printf(SG_T("INSERT INTO %s VALUES("), Table_Name.c_str()); for(iField=0; iField<Table.Get_Field_Count(); iField++) { if( iField > 0 ) { Insert += SG_T(","); } Insert += CSG_String::Format(SG_T(":f%d"), 1 + iField); switch( Table.Get_Field_Type(iField) ) { default: case SG_DATATYPE_String: Insert += SG_T("<varchar>"); break; case SG_DATATYPE_Date: Insert += SG_T("<char[12]>"); break; case SG_DATATYPE_Char: Insert += SG_T("<char>"); break; case SG_DATATYPE_Short: Insert += SG_T("<short>"); break; case SG_DATATYPE_Int: Insert += SG_T("<int>"); break; case SG_DATATYPE_Color: Insert += SG_T("<long>"); break; case SG_DATATYPE_Long: Insert += SG_T("<long>"); break; case SG_DATATYPE_Float: Insert += SG_T("<float>"); break; case SG_DATATYPE_Double: Insert += SG_T("<double>"); break; } } Insert += SG_T(")"); Stream.set_all_column_types(otl_all_date2str); Stream.set_lob_stream_mode(bLOB); Stream.open(bLOB ? 1 : m_Size_Buffer, Insert, m_Connection); std_string valString; //------------------------------------------------- for(iRecord=0; iRecord<Table.Get_Count() && SG_UI_Process_Set_Progress(iRecord, Table.Get_Count()); iRecord++) { CSG_Table_Record *pRecord = Table.Get_Record(iRecord); for(iField=0; iField<Table.Get_Field_Count(); iField++) { if( pRecord->is_NoData(iField) ) { Stream << otl_null(); } else switch( Table.Get_Field_Type(iField) ) { default: case SG_DATATYPE_String: case SG_DATATYPE_Date: valString = CSG_String(pRecord->asString(iField)); Stream << valString; break; case SG_DATATYPE_Char: Stream << (char)pRecord->asChar (iField); break; case SG_DATATYPE_Short: Stream << pRecord->asShort (iField); break; case SG_DATATYPE_Int: Stream << pRecord->asInt (iField); break; case SG_DATATYPE_Color: case SG_DATATYPE_Long: Stream << (long)pRecord->asInt (iField); break; case SG_DATATYPE_Float: Stream << pRecord->asFloat (iField); break; case SG_DATATYPE_Double: Stream << pRecord->asDouble(iField); break; } } } } //----------------------------------------------------- catch( otl_exception &e ) { _Error_Message(e); return( false ); } return( true ); }
void CCreateChartLayer::AddPieChart(CSG_Shape* pShape, int iType){ int i,j; int iSteps; int iSizeField; int iField; float fSum = 0; float fPartialSum = 0; float fSize; float fSectorSize; double dX, dY; CSG_Shape *pSector; CSG_Table_Record *pRecord; TSG_Point Point; iSizeField = Parameters("SIZE")->asInt(); pRecord = pShape; for (i = 0; i < pRecord->Get_Table()->Get_Field_Count(); i++){ if (m_bIncludeParam[i]){ fSum += pRecord->asFloat(i); }//if }//for fSize = pRecord->asFloat(iSizeField); fSize = m_fMinSize + (m_fMaxSize - m_fMinSize)/(m_fMaxValue - m_fMinValue) * (fSize - m_fMinValue); switch (iType){ case SHAPE_TYPE_Polygon: Point = ((CSG_Shape_Polygon*) pShape)->Get_Centroid(); break; case SHAPE_TYPE_Line: Point = GetLineMidPoint((CSG_Shape_Line*)pShape); break; case SHAPE_TYPE_Point: Point = pShape->Get_Point(0); break; default: break; }//switch dX = Point.x; dY = Point.y; fPartialSum = 0; iField = 1; for (i = 0; i < pRecord->Get_Table()->Get_Field_Count(); i++){ if (m_bIncludeParam[i]){ fSectorSize = pRecord->asFloat(i) / fSum; pSector = m_pOutput->Add_Shape(); pSector->Add_Point(dX,dY); iSteps = (int) (fSectorSize * 200.); for (j = 0; j < iSteps; j++){ pSector->Add_Point(dX + fSize * sin((fPartialSum + (float)j / 200.) * PI2), dY + fSize * cos((fPartialSum + (float)j / 200.) * PI2)); }//for fPartialSum +=fSectorSize; pSector->Add_Point(dX + fSize * sin(fPartialSum * PI2), dY + fSize * cos(fPartialSum * PI2)); pSector->Set_Value(0,iField); pSector->Set_Value(1,pRecord->Get_Table()->Get_Field_Name(i)); iField++; }//if }//for }//method
void CCreateChartLayer::AddBarChart(CSG_Shape* pShape, int iType){ int i; int iSizeField; int iField; int iValidFields = 0; float fMax; float fMin; float fSize; float fBarHeight, fBarWidth; double dX, dY; CSG_Shape *pSector; CSG_Table_Record *pRecord; TSG_Point Point; iSizeField = Parameters("SIZE")->asInt(); pRecord = pShape; pRecord = pShape; for (i = 0; i < pRecord->Get_Table()->Get_Field_Count(); i++){ if (m_bIncludeParam[i]){ if (!iValidFields){ fMin = fMax = pRecord->asFloat(i); } else{ if (pRecord->asFloat(i) > fMax){ fMax = pRecord->asFloat(i); }//if if (pRecord->asFloat(i) < fMin){ fMin = pRecord->asFloat(i); }//if }//else iValidFields++; }//if }//for if (fMax > 0 && fMin > 0){ fMin = 0; }//if if (fMax < 0 && fMin < 0){ fMax = 0; }//if fSize = pRecord->asFloat(iSizeField); fSize = m_fMinSize + (m_fMaxSize - m_fMinSize)/(m_fMaxValue - m_fMinValue) * (fSize - m_fMinValue); switch (iType){ case SHAPE_TYPE_Polygon: Point = ((CSG_Shape_Polygon*) pShape)->Get_Centroid(); break; case SHAPE_TYPE_Line: Point = GetLineMidPoint((CSG_Shape_Line*)pShape); break; case SHAPE_TYPE_Point: Point = pShape->Get_Point(0); break; default: break; }//switch dX = Point.x; dY = Point.y; fBarWidth = fSize / (float)iValidFields; iField = 1; for (i = 0; i < pRecord->Get_Table()->Get_Field_Count(); i++){ if (m_bIncludeParam[i]){ fBarHeight = pRecord->asFloat(i) / (fMax - fMin) * fSize; pSector = m_pOutput->Add_Shape(); pSector->Add_Point(dX - fSize / 2. + fBarWidth * (iField - 1) , dY); pSector->Add_Point(dX - fSize / 2. + fBarWidth * iField, dY); pSector->Add_Point(dX - fSize / 2. + fBarWidth * iField, dY + fBarHeight); pSector->Add_Point(dX - fSize / 2. + fBarWidth * (iField - 1) , dY + fBarHeight); pSector->Set_Value(0,iField); pSector->Set_Value(1,pRecord->Get_Table()->Get_Field_Name(i)); iField++; }//if }//for }//method
bool CAHP::On_Execute(void){ int i,j; int x,y; float *pCoefs; float fValue; float **pMatrix; float fSum; CSG_Grid *pOutputGrid; CSG_Grid **pGrids; CSG_Table_Record *pRecord; CSG_Table *pTable; CSG_Parameter_Grid_List* pGridsList; CSG_String sMessage; pTable = Parameters("TABLE")->asTable(); pOutputGrid = Parameters("OUTPUT")->asGrid(); if( (pGridsList = (CSG_Parameter_Grid_List *)Parameters("GRIDS")->Get_Data()) != NULL && pGridsList->Get_Count() > 0 ){ if (pTable->Get_Field_Count() != pGridsList->Get_Count() || pTable->Get_Record_Count() < pGridsList->Get_Count()){ Message_Add(_TL("Error : Wrong table. Check table dimensions")); return false; }//if pMatrix = new float*[pGridsList->Get_Count()]; for (i = 0; i<pGridsList->Get_Count(); i++){ pMatrix[i] = new float[pGridsList->Get_Count()]; pRecord = pTable->Get_Record(i); for (j = 0; j<pGridsList->Get_Count(); j++){ pMatrix[i][j] = pRecord->asFloat(j); }//for }//for for (i = 0; i<pGridsList->Get_Count(); i++){ fSum = 0; for (j = 0; j<pGridsList->Get_Count(); j++){ fSum += pMatrix[j][i]; }//for for (j = 0; j<pGridsList->Get_Count(); j++){ pMatrix[j][i] /= fSum; }//for }//for pCoefs = new float[pGridsList->Get_Count()]; for (i = 0; i<pGridsList->Get_Count(); i++){ fSum = 0; for (j = 0; j<pGridsList->Get_Count(); j++){ fSum += pMatrix[i][j]; }//for pCoefs[i] = fSum / (float) pGridsList->Get_Count(); sMessage = _TL("Weight for grid ") + SG_Get_String(i,0) + " = " + SG_Get_String(pCoefs[i]); Message_Add(sMessage.c_str()); }//for pGrids = new CSG_Grid* [pGridsList->Get_Count()]; for (i = 0; i<pGridsList->Get_Count(); i++){ pGrids[i] = pGridsList->asGrid(i); }//for for(y=0; y<Get_NY() && Set_Progress(y); y++){ for(x=0; x<Get_NX(); x++){ fValue = 0; for (i = 0; i<pGridsList->Get_Count(); i++){ fValue = pCoefs[i] * pGrids[i]->asFloat(x,y); }//for pOutputGrid->Set_Value(x,y,fValue); }//for }//for }//if for (i = 0; i<pGridsList->Get_Count(); i++){ delete [] pMatrix[i]; }//for delete []pMatrix; delete[] pCoefs; return true; }//method