📄 common.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 + -