void wxGxMapView::OnSelectionChanged(IGxSelection* Selection, long nInitiator) { if(nInitiator == GetId()) return; GxObjectArray* pGxObjectArray = m_pSelection->GetSelectedObjects(); if(pGxObjectArray == NULL || pGxObjectArray->size() == 0) return; IGxObject* pGxObj = pGxObjectArray->at(pGxObjectArray->size() - 1); if(m_pParentGxObject == pGxObj) return; IGxDataset* pGxDataset = dynamic_cast<IGxDataset*>(pGxObj); if(pGxDataset == NULL) return; wxGISDataset* pwxGISDataset = pGxDataset->GetDataset(); if(pwxGISDataset == NULL) return; wxGISEnumDatasetType type = pwxGISDataset->GetType(); wxGISLayer* pwxGISLayer = NULL; switch(type) { case enumGISFeatureDataset: pwxGISLayer = new wxGISFeatureLayer(pwxGISDataset); break; case enumGISRasterDataset: pwxGISLayer = new wxGISRasterLayer(pwxGISDataset); break; default: break; } if(pwxGISLayer) pwxGISLayer->SetName(pGxObj->GetName()); //the pOGRLayer will live while IGxObject live. IGxObject( from IGxSelection ) store IwxGISDataset, and destroy it then catalog destroyed wsDELETE(pwxGISDataset); //OGRLayer* pOGRLayer = pwxGISDataset->GetDataset(); //if(pOGRLayer == NULL) //{ // return; //} ClearLayers(); if(pwxGISLayer && pwxGISLayer->IsValid()) AddLayer(pwxGISLayer);//m_GISMap. m_pParentGxObject = pGxObj; wxGISMapView::Refresh(); }
void wxGxLocationComboBox::OnSelectionChanged(IGxSelection* Selection, long nInitiator) { if(nInitiator != TREECTRLID) return; GxObjectArray* pGxObjectArray = Selection->GetSelectedObjects(); if(pGxObjectArray == NULL || pGxObjectArray->size() == 0) return; IGxObject* pGxObj = pGxObjectArray->at(pGxObjectArray->size() - 1); wxString sPath = pGxObj->GetFullName(); if(sPath.IsEmpty()) sPath = pGxObj->GetName(); SetValue(sPath); }
bool wxGISGPSubRasterByVectorTool::Execute(ITrackCancel* pTrackCancel) { if(!Validate()) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("Unexpected error occurred"), -1, enumGISMessageErr); return false; } IGxObjectContainer* pGxObjectContainer = dynamic_cast<IGxObjectContainer*>(m_pCatalog); if(!pGxObjectContainer) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("Error getting catalog object"), -1, enumGISMessageErr); return false; } wxString sSrcVecPath = m_paParam[0]->GetValue(); IGxObject* pGxObject = pGxObjectContainer->SearchChild(sSrcVecPath); if(!pGxObject) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("Error getting source vector object"), -1, enumGISMessageErr); return false; } IGxDataset* pGxDataset = dynamic_cast<IGxDataset*>(pGxObject); if(!pGxDataset) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("Source object is of incompatible type"), -1, enumGISMessageErr); return false; } wxGISFeatureDatasetSPtr pSrcFeatureDataSet = boost::dynamic_pointer_cast<wxGISFeatureDataset>(pGxDataset->GetDataset()); if(!pSrcFeatureDataSet) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("Source vector dataset is of incompatible type"), -1, enumGISMessageErr); return false; } wxString sSrcRasterPath = m_paParam[1]->GetValue(); pGxObject = pGxObjectContainer->SearchChild(sSrcRasterPath); if(!pGxObject) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("Error getting source raster object"), -1, enumGISMessageErr); return false; } pGxDataset = dynamic_cast<IGxDataset*>(pGxObject); if(!pGxDataset) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("Source object is of incompatible type"), -1, enumGISMessageErr); return false; } wxGISRasterDatasetSPtr pSrcRasterDataSet = boost::dynamic_pointer_cast<wxGISRasterDataset>(pGxDataset->GetDataset()); if(!pSrcRasterDataSet) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("Source raster dataset is of incompatible type"), -1, enumGISMessageErr); return false; } wxString sDstPath = m_paParam[2]->GetValue(); IGxObject* pGxDstObject = pGxObjectContainer->SearchChild(sDstPath); if(!pGxDstObject) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("Error get destination object"), -1, enumGISMessageErr); return false; } CPLString szDstPath = pGxDstObject->GetInternalName(); bool bRes = true; wxGxRasterFilter* pFilter = new wxGxRasterFilter(enumRasterTiff); GDALDataType eOutputType = GDT_Byte; int nBandCount = 0; int *panBandList = NULL; bool bUseCounter = false; int nCounterBegin = -1; int nFieldNo = 0; double dfOutResX = -1; double dfOutResY = -1; bool bCopyNodata = false; bool bSkipSourceMetadata = false; char** papszOptions = NULL; papszOptions = CSLAddNameValue(papszOptions, "DEST_RESAMPLING", "near"); papszOptions = CSLAddNameValue(papszOptions, "COMPRESS", "LZW"); papszOptions = CSLAddNameValue(papszOptions, "PREDICTOR", "2"); bRes = SubrasterByVector(pSrcFeatureDataSet, pSrcRasterDataSet, szDstPath, pFilter, eOutputType, nBandCount, panBandList, bUseCounter, nCounterBegin, nFieldNo, dfOutResX, dfOutResY, bCopyNodata, bSkipSourceMetadata, papszOptions, pTrackCancel); if(pGxObjectContainer) { IGxObject* pParentLoc = pGxObjectContainer->SearchChild(sDstPath); if(pParentLoc) pParentLoc->Refresh(); } return bRes; }
bool wxGISGPProjectVectorTool::Execute(ITrackCancel* pTrackCancel) { if(!Validate()) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("Unexpected error occurred"), -1, enumGISMessageErr); return false; } IGxObjectContainer* pGxObjectContainer = dynamic_cast<IGxObjectContainer*>(m_pCatalog); if(!pGxObjectContainer) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("Error getting catalog object"), -1, enumGISMessageErr); return false; } //get source wxString sSrcPath = m_paParam[0]->GetValue(); IGxObject* pGxObject = pGxObjectContainer->SearchChild(sSrcPath); if(!pGxObject) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("Error get source object"), -1, enumGISMessageErr); return false; } IGxDataset* pGxDataset = dynamic_cast<IGxDataset*>(pGxObject); if(!pGxDataset) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("The source object is of incompatible type"), -1, enumGISMessageErr); return false; } wxGISFeatureDatasetSPtr pSrcDataSet = boost::dynamic_pointer_cast<wxGISFeatureDataset>(pGxDataset->GetDataset()); if(!pSrcDataSet) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("The source dataset is of incompatible type"), -1, enumGISMessageErr); return false; } if(!pSrcDataSet->IsOpened()) if(!pSrcDataSet->Open()) return false; OGRFeatureDefn *pDef = pSrcDataSet->GetDefinition(); if(!pDef) { if(pTrackCancel) pTrackCancel->PutMessage(_("Error reading dataset definition"), -1, enumGISMessageErr); //wsDELETE(pSrcDataSet); return false; } //get spatial reference wxString sWKT = m_paParam[1]->GetValue().MakeString(); if(sWKT.IsEmpty()) { if(pTrackCancel) pTrackCancel->PutMessage(_("Unsupported Spatial Reference"), -1, enumGISMessageErr); return false; } CPLString szWKT(sWKT.mb_str()); OGRSpatialReference NewSpaRef; const char* szpWKT = szWKT.c_str(); if(NewSpaRef.importFromWkt((char**)&szpWKT) != OGRERR_NONE) { if(pTrackCancel) pTrackCancel->PutMessage(_("Unsupported Spatial Reference"), -1, enumGISMessageErr); return false; } //get destination wxString sDstPath = m_paParam[2]->GetValue(); //check overwrite & do it! if(!OverWriteGxObject(pGxObjectContainer->SearchChild(sDstPath), pTrackCancel)) return false; IGxObject* pGxDstObject = GetParentGxObjectFromPath(sDstPath, pGxObjectContainer, pTrackCancel); if(!pGxDstObject) return false; CPLString szDestPath = pGxDstObject->GetInternalName(); wxFileName sDstFileName(sDstPath); wxString sName = sDstFileName.GetName(); wxGISGPGxObjectDomain* pDomain = dynamic_cast<wxGISGPGxObjectDomain*>(m_paParam[2]->GetDomain()); IGxObjectFilter* pFilter = pDomain->GetFilter(m_paParam[2]->GetSelDomainValue()); if(!pFilter) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("Error getting selected destination filter"), -1, enumGISMessageErr); return false; } bool bRes = Project(pSrcDataSet, szDestPath, sName, pFilter, &NewSpaRef, pTrackCancel); //CPLString szPath = pGxDstObject->GetInternalName(); //wxString sName = sDstFileName.GetName(); // //wxGISGPGxObjectDomain* pDomain = dynamic_cast<wxGISGPGxObjectDomain*>(m_paParam[1]->GetDomain()); //IGxObjectFilter* pFilter = pDomain->GetFilter(pDomain->GetSelFilter()); //if(!pFilter) //{ // //add messages to pTrackCancel // if(pTrackCancel) // pTrackCancel->PutMessage(_("Error getting selected destination filter"), -1, enumGISMessageErr); // return false; //} // //bool bHasErrors = ExportFormat(pSrcDataSet, szPath, sName, pFilter, NULL, pTrackCancel); if(pGxDstObject) pGxDstObject->Refresh(); return bRes; }
bool wxGISGPShapeToTextTool::Execute(ITrackCancel* pTrackCancel) { if(!Validate()) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("Unexpected error occurred"), -1, enumGISMessageErr); return false; } IGxObjectContainer* pGxObjectContainer = dynamic_cast<IGxObjectContainer*>(m_pCatalog); if(!pGxObjectContainer) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("Error getting catalog object"), -1, enumGISMessageErr); return false; } wxString sSrcPath = m_paParam[0]->GetValue(); IGxObject* pGxObject = pGxObjectContainer->SearchChild(sSrcPath); if(!pGxObject) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("Error get source object"), -1, enumGISMessageErr); return false; } IGxDataset* pGxDataset = dynamic_cast<IGxDataset*>(pGxObject); if(!pGxDataset) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("The source object is of incompatible type"), -1, enumGISMessageErr); return false; } wxGISFeatureDatasetSPtr pSrcDataSet = boost::dynamic_pointer_cast<wxGISFeatureDataset>(pGxDataset->GetDataset()); if(!pSrcDataSet) { //add messages to pTrackCancel if(pTrackCancel) pTrackCancel->PutMessage(_("The source dataset is of incompatible type"), -1, enumGISMessageErr); return false; } if(!pSrcDataSet->IsOpened()) if(!pSrcDataSet->Open()) return false; OGRFeatureDefn *pDef = pSrcDataSet->GetDefinition(); if(!pDef) { if(pTrackCancel) pTrackCancel->PutMessage(_("Error reading dataset definition"), -1, enumGISMessageErr); return false; } bool bSwap = m_paParam[2]->GetValue(); wxString sMask = m_paParam[1]->GetValue(); m_CFormat.Create(sMask, bSwap); if(!m_CFormat.IsOk()) { if(pTrackCancel) pTrackCancel->PutMessage(_("Invalid format mask"), -1, enumGISMessageErr); return false; } wxString sDstPath = m_paParam[3]->GetValue(); //check overwrite & do it! if(!OverWriteGxObject(pGxObjectContainer->SearchChild(sDstPath), pTrackCancel)) return false; IGxObject* pGxDstObject = GetParentGxObjectFromPath(sDstPath, pGxObjectContainer, pTrackCancel); if(!pGxDstObject) return false; CPLString szPath = pGxDstObject->GetInternalName(); wxFileName sDstFileName(sDstPath); wxString sName = sDstFileName.GetFullName(); bool bRes = GeometryVerticesToTextFile(pSrcDataSet, CPLFormFilename(szPath, sName.mb_str(wxConvUTF8), NULL), m_CFormat, NULL, pTrackCancel); if(pGxDstObject) pGxDstObject->Refresh(); return bRes; }