⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.cpp

📁 栅格矢量转换的dll,vc+ao写的
💻 CPP
字号:
#include "StdAfx.h"


//获取栅格图像路径
CString gGetShpPath(VOID)
{   
	CString strShpPath = "";
	CString strFilter= "arcgis files(*.shp)|*.shp";
	CFileDialog dlgOpen(TRUE,0,0,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT,(LPCTSTR)strFilter,NULL);
	if(dlgOpen.DoModal() == IDOK)
	{
		strShpPath = dlgOpen.GetPathName();
	
	}
	return strShpPath;
}

//获取栅格文件存放路径
CString gGetRasterPath(VOID)
{
	CString strTifPath = "";
	CString strFilter= "arcgis files(*.tif)|*.tif";
	CFileDialog dlgOpen(TRUE,0,0,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT,(LPCTSTR)strFilter,NULL);
	if(dlgOpen.DoModal() == IDOK)
	{
		strTifPath = dlgOpen.GetPathName();
	
	}
	
	return strTifPath;


}

//获取文件存放路径
CString gGetFilePath(VOID)
{
	CString strTifPath = "";

	CFileDialog dlgSave(TRUE);

	if(dlgSave.DoModal() == IDOK)
	{
		strTifPath = dlgSave.GetPathName();
	
	}
	return strTifPath;

}

HRESULT gGetFeatureClass(CString& strPath, IFeatureClassPtr& ipFeatureClass)
{
    HRESULT hr;
	
	CString   strFilePath = strPath.Left(strPath.ReverseFind('\\')+1 );
	CString   strFileName = strPath.Right(strPath.GetLength() - strFilePath.GetLength());
	
	IWorkspaceFactoryPtr ipWsFatory(CLSID_ShapefileWorkspaceFactory);//ShapefileWorkspaceFactory
    
	IWorkspacePtr ipWorkspace;
	hr = ipWsFatory->OpenFromFile((_bstr_t)strFilePath,0,&ipWorkspace);//(pWsFatory.OpenFromFile(pShpPath, 0))
	if(FAILED(hr)) return hr;

	IFeatureWorkspacePtr ipFWorkspace(ipWorkspace);
	hr = ipFWorkspace->OpenFeatureClass((_bstr_t)strFileName,&ipFeatureClass);
    if(FAILED(hr))  return hr;
   
	return 0L;

}

HRESULT  gGetFeatureArray(CString& strPath, CStringArray& strArray)
{

    HRESULT hr;
	LONG n;
	BSTR bstrFieldName; 
	IFeatureClassPtr  ipFeatureClass;
	IFieldsPtr ipFields;
	IFieldPtr  ipField;

	strArray.RemoveAll();
    
    hr = gGetFeatureClass(strPath,ipFeatureClass);
    if(FAILED(hr))  return hr;
	
	hr = ipFeatureClass->get_Fields(&ipFields);
	if(FAILED(hr))  return FALSE;
	
	
	ipFields->get_FieldCount(&n);
	
	if( n < 1) return FALSE;
	for(LONG i = 0;i < n; i++)
	{
		
		ipFields->get_Field(i,&ipField);
		ipField->get_Name(&bstrFieldName);	   
	    CString strFiledName((LPCWSTR)bstrFieldName);
		strArray.Add(strFiledName);

	}

     return 0L;
}

HRESULT gShpToRaster(CString& strShpPath, CString& strRasterPath, CString& strFiled,double& dCellSize)
{   
	HRESULT hr;
//	IRasterDatasetPtr  ipRpRasterSet;
	IFeatureClassPtr ipFClass;
	IFeatureClassDescriptorPtr  ipFClassDesc(CLSID_FeatureClassDescriptor);
    
	hr = gGetFeatureClass(strShpPath, ipFClass);
    if(FAILED(hr)) return hr;

	hr = ipFClassDesc->Create(ipFClass, NULL, (_bstr_t)strFiled);
    if(FAILED(hr)) return hr;

	IGeoDatasetPtr ipGeoDataSet(ipFClassDesc);
	IConversionOpPtr ipConvOp(CLSID_RasterConversionOp);
	IRasterAnalysisEnvironmentPtr ipAnalysisEnv(ipConvOp);
    
	
	CString   strFilePath = strRasterPath.Left(strRasterPath.ReverseFind('\\')  );
	CString   strFileName = strRasterPath.Right(strRasterPath.GetLength() - strFilePath.GetLength()-1);
	IWorkspaceFactoryPtr ipWSF(CLSID_RasterWorkspaceFactory);
	IWorkspacePtr        ipWS;

	hr = ipWSF->OpenFromFile((_bstr_t)strFilePath,NULL,&ipWS);
	if(FAILED(hr))  return hr;
	
    ipAnalysisEnv->putref_OutWorkspace(ipWS);

	

    hr = ipAnalysisEnv->SetCellSize(esriRasterEnvValue, &CComVariant(dCellSize));
	if(FAILED(hr)) return hr;

	IRasterDatasetPtr ipOutRasterDs;//(CLSID_RasterDataset);
    CString  rasterFomat("TIFF");
	hr = ipConvOp->ToRasterDataset(ipGeoDataSet,(_bstr_t)rasterFomat,ipWS, (_bstr_t)strFileName,&ipOutRasterDs);
	if(FAILED(hr)) return hr;	
    
	return 0L;
}

//矢量转栅格
HRESULT gRasterToShp(CString& strRasterPath,CString& strShpPath, CString& strFeatureType)
{
	
//    strField = "Value"
//    strValue = 255
	  HRESULT hr;
	  CString strField("Value");
	  CString strValue("0");
	  CString strFilter = strField + "=" + strValue;//二值图像

      IRasterDatasetPtr ipRasterDataSet(CLSID_RasterDataset);
	  hr = ipRasterDataSet->OpenFromFile((_bstr_t)strRasterPath);
      if(FAILED(hr)) return hr;

	  IRasterPtr ipRaster;
	  ipRasterDataSet->CreateDefaultRaster(&ipRaster);
	  IRasterDescriptorPtr  ipRasterDescriptor(CLSID_RasterDescriptor);

	  IQueryFilterPtr ipQueryFilter(CLSID_QueryFilter);
      ipQueryFilter->put_WhereClause((_bstr_t)strFilter);
	  hr = ipRasterDescriptor->Create(ipRaster,ipQueryFilter, (_bstr_t)strField);
	  if(FAILED(hr)) return hr;
	  
	  IConversionOpPtr ipConversionOp(CLSID_RasterConversionOp);
	  CString   strFilePath = strShpPath.Left(strShpPath.ReverseFind('\\')  );
	  CString   strFileName = strShpPath.Right(strShpPath.GetLength() - strFilePath.GetLength()-1);
	  
	  IWorkspacePtr  ipWS;
	  IWorkspaceFactoryPtr ipWSF(CLSID_ShapefileWorkspaceFactory);
	  hr = ipWSF->OpenFromFile((_bstr_t)strFilePath,NULL,&ipWS);
	  if(FAILED(hr)) return hr;
	  
	  IGeoDatasetPtr ipDataSet(ipRasterDescriptor);
	  IGeoDatasetPtr ipGeoDataset;
	  if(strFeatureType == "Point")
	  {   
          
		  hr = ipConversionOp->RasterDataToPointFeatureData(ipDataSet,ipWS,(_bstr_t)strFileName,&ipGeoDataset);
          if(FAILED(hr)) return hr;	  
	  }
	  
	  if(strFeatureType == "PolyLine")
	  {
	      hr = ipConversionOp->RasterDataToLineFeatureData(ipDataSet,ipWS,(_bstr_t)strFileName,
			                VARIANT_FALSE,VARIANT_TRUE,0,&ipGeoDataset);
		  if(FAILED(hr)) return hr;
	  }
	  
	  if(strFeatureType == "PolyGon")
	  {
		  hr = ipConversionOp->RasterDataToPolygonFeatureData(ipDataSet,ipWS,(_bstr_t)strFileName,
			  VARIANT_TRUE,&ipGeoDataset);
		  if(FAILED(hr)) return hr;
	  }
	
	return 0L;
}



/*/////////////////////////////////////////////////////////////////////////////
BOOL gClipShp(CString& strSrcPath, CString& strOutPath,CString& strRefRaster)
{   
	HRESULT hr;
	IRasterLayerPtr ipRasterLy(CLSID_RasterLayer);
    hr = ipRasterLy->CreateFromFilePath(_bstr_t(strRefRaster));
	if(FAILED(hr)) return FALSE;
	
    IPointCollectionPtr ipPointcol(CLSID_Polyline);
    IWorkspaceFactoryPtr ipWsFatory(CLSID_GxShapefileFactory);//ShapefileWorkspaceFactory
    
	IWorkspacePtr ipWorkspace;
	hr = ipWsFatory->OpenFromFile((_bstr_t)strSrcPath,NULL,&ipWorkspace);//(pWsFatory.OpenFromFile(pShpPath, 0))
	if(FAILED(hr)) return FALSE;
	
	IEnvelopePtr ipEnvelope;
	ipRasterLy->get_VisibleExtent(&ipEnvelope);
	IGeometryPtr ipGeometry(ipEnvelope);
    
	IPointPtr ipPoint;
	ipEnvelope->get_LowerLeft(&ipPoint);
	ipPointcol->AddPoint(ipPoint);
   	ipEnvelope->get_LowerRight(&ipPoint);
	ipPointcol->AddPoint(ipPoint);
	ipEnvelope->get_UpperLeft(&ipPoint);
	ipPointcol->AddPoint(ipPoint);
	ipEnvelope->get_UpperRight(&ipPoint);
	ipPointcol->AddPoint(ipPoint);
	
	IPolylinePtr ipPolyline(ipPointcol);	
	return TRUE;
}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -