//--------------------------------------------------------- bool CSG_MetaData::Load(const CSG_String &File, const SG_Char *Extension) { Destroy(); //----------------------------------------------------- if( File.Find("http://") == 0 ) { CSG_String s(File.Right(File.Length() - CSG_String("http://").Length())); return( Load_HTTP(s.BeforeFirst('/'), s.AfterFirst('/')) ); } //----------------------------------------------------- wxXmlDocument XML; if( SG_File_Exists(SG_File_Make_Path(NULL, File, Extension)) && XML.Load(SG_File_Make_Path(NULL, File, Extension).c_str()) ) { _Load(XML.GetRoot()); return( true ); } //----------------------------------------------------- return( false ); }
//--------------------------------------------------------- int CSG_Grid::_Load_Native_Get_Key(CSG_File &Stream, CSG_String &Value) { int i; CSG_String sLine; if( Stream.Read_Line(sLine) && (i = sLine.Find('=')) > 0 ) { Value = sLine.AfterFirst('='); Value.Trim(); sLine.Remove(i); for(i=0; i<GRID_FILE_KEY_Count; i++) { CSG_String s(gSG_Grid_File_Key_Names[i]); if( s.Find(sLine.Left(s.Length())) >= 0 ) { return( i ); } } } return( -1 ); }
//--------------------------------------------------------- bool CWMS_Import::On_Execute(void) { CSG_String sServer = Parameters("SERVER")->asString(); //----------------------------------------------------- CWMS_Capabilities Capabilities; if( Capabilities.Create(sServer, "1.1.1") == false ) { Message_Add(_TL("Unable to get capabilities.")); return( false ); } //----------------------------------------------------- if( sServer.Find("http://") == 0 ) { sServer = Parameters("SERVER")->asString() + 7; } CSG_String sPath = "/" + sServer.AfterFirst('/'); sServer = sServer.BeforeFirst('/'); wxHTTP Server; Server.SetUser (Parameters("USERNAME")->asString()); Server.SetPassword(Parameters("PASSWORD")->asString()); if( Server.Connect(sServer.c_str()) == false ) { Message_Add(_TL("Unable to connect to server.")); return( false ); } //----------------------------------------------------- if( Get_Map(&Server, sPath, Capabilities) == false ) { Message_Add(_TL("Unable to get map.")); return( false ); } //----------------------------------------------------- return( true ); }
//--------------------------------------------------------- CSG_Grid * CLandsat_Import::Get_Band(const CSG_String &File) { CSG_Data_Manager tmpMgr; if( !tmpMgr.Add(File) || !tmpMgr.Get_Grid_System(0) || !tmpMgr.Get_Grid_System(0)->Get(0) ) { Error_Set(CSG_String::Format(SG_T("%s: %s"), _TL("could not load file"), File.c_str())); return( NULL ); } tmpMgr.Get_Grid_System(0)->Get(0)->Set_NoData_Value(0); // landsat 8 pretends to use a value of 65535 (2^16 - 1) CSG_Grid *pBand = NULL; //----------------------------------------------------- if( !tmpMgr.Get_Grid_System(0)->Get(0)->Get_Projection().is_Okay() ) { // undefined coordinate system, nothing to do be done further... } //----------------------------------------------------- else if( Parameters("PROJECTION")->asInt() == 2 ) // Geographic Coordinates { pBand = Get_Projection((CSG_Grid *)tmpMgr.Get_Grid_System(0)->Get(0), "+proj=longlat +ellps=WGS84 +datum=WGS84"); } //----------------------------------------------------- else // UTM { CSG_Grid *pTmp = (CSG_Grid *)tmpMgr.Get_Grid_System(0)->Get(0); CSG_String Projection = pTmp->Get_Projection().Get_Proj4(); if( Projection.Find("+proj=utm") >= 0 && ( (Projection.Find("+south") >= 0 && Parameters("PROJECTION")->asInt() == 0) || (Projection.Find("+south") < 0 && Parameters("PROJECTION")->asInt() == 1)) && (pBand = SG_Create_Grid(pTmp->Get_Type(), pTmp->Get_NX(), pTmp->Get_NY(), pTmp->Get_Cellsize(), pTmp->Get_XMin(), pTmp->Get_YMin() + (Parameters("PROJECTION")->asInt() == 1 ? 10000000 : -10000000) )) != NULL ) { if( Parameters("PROJECTION")->asInt() == 1 ) Projection.Append (" +south"); else Projection.Replace(" +south", ""); pBand->Get_Projection().Create(Projection, SG_PROJ_FMT_Proj4); pBand->Set_Name (pTmp->Get_Name()); pBand->Set_Description (pTmp->Get_Description()); pBand->Set_NoData_Value_Range(pTmp->Get_NoData_Value(), pTmp->Get_NoData_hiValue()); pBand->Set_Scaling (pTmp->Get_Scaling(), pTmp->Get_Offset()); #pragma omp parallel for for(int y=0; y<pBand->Get_NY(); y++) { for(int x=0; x<pBand->Get_NX(); x++) { pBand->Set_Value(x, y, pTmp->asDouble(x, y)); } } } } //----------------------------------------------------- if( !pBand ) { pBand = (CSG_Grid *)tmpMgr.Get_Grid_System(0)->Get(0); tmpMgr.Delete(tmpMgr.Get_Grid_System(0)->Get(0), true); // make permanent, detach from temporary data manager } return( pBand ); }
//--------------------------------------------------------- bool CSG_MetaData::from_JSON(const CSG_String &JSON) { Destroy(); Set_Name("root"); CSG_MetaData *pNode = this; const SG_Char *pc = JSON.c_str(); while( *pc ) { CSG_String Element; for(bool bQuota=false;;) { SG_Char c = *pc++; if( !c || c == '\n' ) { break; } else { if( c == '\"' ) { Element += c; bQuota = !bQuota; } else if( bQuota || (c != ' ' && c != '\t' && c != ',') ) { Element += c; } } } //------------------------------------------------- if( Element.is_Empty() ) { // nop } else if( Element.Find('[') >= 0 ) // array begins { pNode = pNode->Add_Child(Element.AfterFirst('\"').BeforeFirst('\"')); pNode->Add_Property("array", 1); } else if( Element.Find(']') >= 0 ) // array ends { if( pNode != this ) { pNode = pNode->Get_Parent(); } } else if( Element.Find('{') >= 0 ) // object begins { Element = Element.AfterFirst('\"').BeforeFirst('\"'); if( !Element.is_Empty() ) { pNode = pNode->Add_Child(Element); } else if( pNode->Get_Property("array") ) { pNode = pNode->Add_Child(CSG_String::Format("%d", pNode->Get_Children_Count())); } } else if( Element.Find('}') >= 0 ) // object ends { if( pNode != this ) { pNode = pNode->Get_Parent(); } } else { CSG_String Key (Element.AfterFirst('\"').BeforeFirst('\"')); CSG_String Value(Element.AfterFirst(':')); if( Value.Find('\"') > -1 ) { Value = Value.AfterFirst('\"').BeforeFirst('\"'); } pNode->Add_Child(Key, Value); } } return( true ); }
//--------------------------------------------------------- bool CSearchInTable::On_Execute(void) { bool *WasSelected; int i, iMethod; CSG_String sExpression; CSG_Shapes *pShapes; pShapes = Parameters("SHAPES") ->asShapes(); sExpression = Parameters("EXPRESSION") ->asString(); iMethod = Parameters("METHOD") ->asInt(); //----------------------------------------------------- if( iMethod == METHOD_SELECT_FROM_SEL ) { WasSelected = new bool[pShapes->Get_Count()]; for(i=0; i<pShapes->Get_Count() && Set_Progress(i, pShapes->Get_Count()); i++) { WasSelected[i] = pShapes->Get_Record(i)->is_Selected(); } } if( iMethod != METHOD_ADD_TO_SEL ) { pShapes->Select(); } //----------------------------------------------------- std::vector <int> m_Selection; for(i=0; i<pShapes->Get_Count() && Set_Progress(i, pShapes->Get_Count()); i++) { CSG_Shape *pShape = pShapes->Get_Shape(i); for(int j=0; j<pShapes->Get_Field_Count(); j++) { CSG_String sValue = pShape->asString(j); if( sValue.Find(sExpression) != -1 ) { m_Selection.push_back(i); break; } } } //----------------------------------------------------- for(i=0; i<m_Selection.size() && Set_Progress(i, m_Selection.size()); i++) { int iSelection = m_Selection[i]; if( !pShapes->Get_Record(iSelection)->is_Selected() ) { if( iMethod != METHOD_SELECT_FROM_SEL || WasSelected[iSelection] ) { ((CSG_Table *)pShapes)->Select(iSelection, true); } } } //----------------------------------------------------- if( iMethod == METHOD_SELECT_FROM_SEL ) { delete(WasSelected); } Message_Add(CSG_String::Format(SG_T("%s: %d"), _TL("selected shapes"), m_Selection.size())); DataObject_Update(pShapes); return( true ); }