예제 #1
0
파일: gxmapview.cpp 프로젝트: jacklibj/r5
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();
}
예제 #2
0
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);
}
예제 #3
0
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;
}
예제 #4
0
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;
}
예제 #5
0
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;

}