//--------------------------------------------------------- bool CWKSP_Project::_Compatibility_Load_Map(CSG_File &Stream, const wxString &ProjectDir) { TSG_Rect r; CSG_String sLine, sName; CWKSP_Base_Item *pItem; CWKSP_Map *pMap; while( Stream.Read_Line(sLine) && sLine.Cmp(MAP_ENTRY_BEGIN) && sLine.Cmp(MAP_ENTRIES_END) ); if( !sLine.Cmp(MAP_ENTRY_BEGIN) && Stream.Read_Line(sLine) ) { if( SG_SSCANF(sLine, SG_T("%lf %lf %lf %lf"), &r.xMin, &r.xMax, &r.yMin, &r.yMax) == 4 ) { pMap = NULL; while( Stream.Read_Line(sLine) && sLine.Cmp(MAP_ENTRY_END) ) { if( !sLine.Cmp(MAP_ENTRY_NAME) ) { Stream.Read_Line(sName); } else { sLine = Get_FilePath_Absolute(ProjectDir, sLine.w_str()).wc_str(); if( (pItem = _Get_byFileName(sLine.c_str())) != NULL && ( pItem->Get_Type() == WKSP_ITEM_Grid || pItem->Get_Type() == WKSP_ITEM_Grids || pItem->Get_Type() == WKSP_ITEM_TIN || pItem->Get_Type() == WKSP_ITEM_PointCloud || pItem->Get_Type() == WKSP_ITEM_Shapes) ) { if( pMap == NULL ) { pMap = new CWKSP_Map; } g_pMaps->Add((CWKSP_Layer *)pItem, pMap); } } } if( pMap ) { if( sName.Length() > 0 ) { pMap->Get_Parameter("NAME")->Set_Value(sName); pMap->Parameters_Changed(); } pMap->Set_Extent(r, true); pMap->View_Show(true); } } return( true ); } return( false ); }
//--------------------------------------------------------- inline bool CSG_Shapes_OGIS_Converter::_WKT_Read_Point(const CSG_String &Text, CSG_Shape *pShape, int iPart) { double x, y, z, m; switch( ((CSG_Shapes *)pShape->Get_Table())->Get_Vertex_Type() ) { case SG_VERTEX_TYPE_XY: if( SG_SSCANF(Text.c_str(), SG_T("%lf %lf"), &x, &y) == 2 ) { pShape->Add_Point(x, y, iPart); return( true ); } break; case SG_VERTEX_TYPE_XYZ: if( SG_SSCANF(Text.c_str(), SG_T("%lf %lf %lf"), &x, &y, &z) == 3 ) { pShape->Add_Point(x, y, iPart); pShape->Set_Z (z, pShape->Get_Point_Count(iPart) - 1, iPart); return( true ); } break; case SG_VERTEX_TYPE_XYZM: if( SG_SSCANF(Text.c_str(), SG_T("%lf %lf %lf %lf"), &x, &y, &z, &m) == 4 ) { pShape->Add_Point(x, y, iPart); pShape->Set_Z (z, pShape->Get_Point_Count(iPart) - 1, iPart); pShape->Set_M (m, pShape->Get_Point_Count(iPart) - 1, iPart); return( true ); } break; } return( false ); }
//--------------------------------------------------------- bool CSG_Table::Serialize(CSG_File &Stream, bool bSave) { SG_Char Separator = SG_T('\t'); int iField, nFields, iRecord, nRecords, FieldType; CSG_Table_Record *pRecord; CSG_String s, sLine; //----------------------------------------------------- if( bSave ) { Stream.Printf(SG_T("%d %d\n"), m_nFields, m_nRecords); for(iField=0; iField<m_nFields; iField++) { Stream.Printf(SG_T("%d \"%s\"\n"), Get_Field_Type(iField), Get_Field_Name(iField)); } for(iRecord=0; iRecord<m_nRecords; iRecord++) { for(iField=0; iField<m_nFields; iField++) { Stream.Printf(SG_T("%s%c"), Get_Record(iRecord)->asString(iField), iField < m_nFields - 1 ? Separator : '\n'); } } return( true ); } //----------------------------------------------------- else if( Stream.Read_Line(sLine) && SG_SSCANF(sLine, SG_T("%d %d"), &nFields, &nRecords) == 2 && nFields > 0 ) { _Destroy(); for(iField=0; iField<nFields; iField++) { if( Stream.Read_Line(sLine) && SG_SSCANF(sLine, SG_T("%d"), &FieldType) == 1 ) { Add_Field(sLine.AfterFirst(SG_T('\"')).BeforeFirst(SG_T('\"')), (TSG_Data_Type)FieldType); } } for(iRecord=0; iRecord<nRecords; iRecord++) { if( Stream.Read_Line(sLine) ) { pRecord = _Add_Record(); for(iField=0; iField<m_nFields; iField++) { pRecord->Set_Value(iField, sLine.BeforeFirst(Separator)); sLine = sLine.AfterFirst(Separator); } } } return( true ); } //----------------------------------------------------- return( false ); }
//--------------------------------------------------------- bool CSG_Table::_Load_Text(const CSG_String &File_Name, bool bHeadline, const SG_Char *Separator) { int i, iField, fLength; CSG_String sLine, sField; CSG_File Stream; CSG_Table Table; //----------------------------------------------------- if( Stream.Open(File_Name, SG_FILE_R, false) == false ) { return( false ); } if( !Stream.Read_Line(sLine) ) { return( false ); } //----------------------------------------------------- sLine += Separator; while( (i = sLine.Find(Separator)) >= 0 ) { sField = bHeadline ? sLine.Left(i) : CSG_String::Format(SG_T("FIELD_%02d"), Table.Get_Field_Count() + 1); if( sField[0] == SG_T('\"') && sField[(int)(sField.Length() - 1)] == SG_T('\"') ) // remove quota { sField = sField.AfterFirst('\"').BeforeLast('\"'); } Table.Add_Field(sField, SG_DATATYPE_String); sLine.Remove(0, i + 1); } //----------------------------------------------------- TSG_Data_Type *Type = new TSG_Data_Type[Table.Get_Field_Count()]; for(iField=0; iField<Table.Get_Field_Count(); iField++) { Type[iField] = SG_DATATYPE_Int; } if( !bHeadline ) { Stream.Seek_Start(); } fLength = Stream.Length(); while( Stream.Read_Line(sLine) && sLine.Length() > 0 && SG_UI_Process_Set_Progress(Stream.Tell(), fLength) ) { CSG_Table_Record *pRecord = Table._Add_Record(); sLine += Separator; for(iField=0; iField<Table.Get_Field_Count(); iField++) { if( (i = sLine.Find(Separator)) >= 0 ) { sField = sLine.Left(i); if( sField[0] == SG_T('\"') && sField[(int)(sField.Length() - 1)] == SG_T('\"') ) // remove quota { sField = sField.AfterFirst('\"').BeforeLast('\"'); } if( Type[iField] != SG_DATATYPE_String ) { double Value; if( SG_SSCANF(sField, SG_T("%lf"), &Value) != 1 ) { Type[iField] = SG_DATATYPE_String; } else if( Type[iField] != SG_DATATYPE_Double && Value - (int)Value != 0.0 ) { Type[iField] = SG_DATATYPE_Double; } } pRecord->Set_Value(iField, sField); sLine.Remove(0, i + 1); } else { break; } } } //----------------------------------------------------- if( Table.Get_Count() > 0 ) { for(iField=0; iField<Table.Get_Field_Count(); iField++) { Add_Field(Table.Get_Field_Name(iField), Type[iField]); } for(int iRecord=0; iRecord<Table.Get_Count() && SG_UI_Process_Set_Progress(iRecord, Table.Get_Count()); iRecord++) { CSG_Table_Record *pRecord = _Add_Record(); for(iField=0; iField<Get_Field_Count(); iField++) { switch( Get_Field_Type(iField) ) { default: pRecord->Set_Value(iField, Table[iRecord].asString(iField)); break; case SG_DATATYPE_Int: pRecord->Set_Value(iField, Table[iRecord].asInt (iField)); break; case SG_DATATYPE_Double: pRecord->Set_Value(iField, Table[iRecord].asDouble(iField)); break; } } } } delete[](Type); SG_UI_Process_Set_Ready(); return( Get_Field_Count() > 0 ); }
//--------------------------------------------------------- bool CAtlas_BNA_Import::On_Execute(void) { bool bOk; int iPoint, nPoints; double x, y; FILE *Stream; CSG_String FileName, sLine, sName1, sName2; CSG_Shape *pShape; CSG_Shapes *pPoints, *pLines, *pPolygons; //----------------------------------------------------- FileName = Parameters("FILE") ->asString(); //----------------------------------------------------- if( (Stream = fopen(FileName.b_str(), "r")) != NULL ) { pPoints = SG_Create_Shapes(SHAPE_TYPE_Point , SG_File_Get_Name(FileName, false)); pPoints ->Add_Field("NAME1" , SG_DATATYPE_String); pPoints ->Add_Field("NAME2" , SG_DATATYPE_String); pLines = SG_Create_Shapes(SHAPE_TYPE_Line , SG_File_Get_Name(FileName, false)); pLines ->Add_Field("NAME1" , SG_DATATYPE_String); pLines ->Add_Field("NAME2" , SG_DATATYPE_String); pPolygons = SG_Create_Shapes(SHAPE_TYPE_Polygon, SG_File_Get_Name(FileName, false)); pPolygons ->Add_Field("NAME1" , SG_DATATYPE_String); pPolygons ->Add_Field("NAME2" , SG_DATATYPE_String); //------------------------------------------------- bOk = true; while( bOk && SG_Read_Line(Stream, sLine) && Process_Get_Okay(true) ) { sName1 = sLine.AfterFirst('\"').BeforeFirst('\"'); sName2 = sLine.BeforeLast('\"').AfterLast('\"'); sLine = sLine.AfterLast('\"'); if( sLine.Find(',', true) >= 0 ) sLine = sLine.AfterLast(','); nPoints = sLine.asInt(); if( nPoints == 1 ) { pShape = pPoints ->Add_Shape(); } else if( nPoints < 0 ) { pShape = pLines ->Add_Shape(); nPoints = -nPoints; } else if( nPoints > 2 ) { pShape = pPolygons ->Add_Shape(); } else { bOk = false; } if( bOk ) { pShape->Set_Value(0, sName1); pShape->Set_Value(1, sName2); for(iPoint=0; iPoint<nPoints && bOk; iPoint++) { if( (bOk = SG_Read_Line(Stream, sLine)) == true ) { SG_SSCANF(sLine, SG_T("%lf %lf"), &x, &y); pShape->Add_Point(x, y); } } } } fclose(Stream); //------------------------------------------------- bOk = false; if( pPoints->is_Valid() && pPoints->Get_Count() > 0 ) { bOk = true; DataObject_Add(pPoints); } else { delete(pPoints); } if( pLines->is_Valid() && pLines->Get_Count() > 0 ) { bOk = true; DataObject_Add(pLines); } else { delete(pLines); } if( pPolygons->is_Valid() && pPolygons->Get_Count() > 0 ) { bOk = true; DataObject_Add(pPolygons); } else { delete(pPolygons); } return( bOk ); } //----------------------------------------------------- return( false ); }