langyan8973
路人甲
路人甲
  • 注册日期2006-07-12
  • 发帖数90
  • QQ
  • 铜币456枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1411回复:1

[求助]关于ConvertFeatureClass 急呀

楼主#
更多 发布于:2006-11-27 15:37
<P>本人想用IFeatureDataConverter实现SDE要素类的导出,即将SDE要素类导出为本地机上的shapefile于是编写为下列代码,编译链接没错误但总是转换失败,自己找了很多遍也不知道错在哪了。望各位高手帮我看看纠正一下我的错误,在下感激不尽.</P>
<P> IDatasetPtr ipDataset(ipWorkspace);<BR> INamePtr ipName;<BR> ipDataset->get_FullName(;ipName);<BR> IWorkspaceNamePtr pInSDEWorkspaceName(ipName);<BR> IFeatureClassNamePtr pInSDEFeatCLSNm(CLSID_FeatureClassName);<BR> IDatasetNamePtr pInSDEDSname(pInSDEFeatCLSNm);<BR> pInSDEDSname->put_Name(_bstr_t("SDE.country_polygon"));<BR> pInSDEDSname->putref_WorkspaceName(pInSDEWorkspaceName);</P>
<P><BR>  IWorkspaceNamePtr pOutshpWsName(CLSID_WorkspaceName);<BR>  pOutshpWsName->put_PathName(_bstr_t("E:\\SDE导出"));<BR>  pOutshpWsName->put_WorkspaceFactoryProgID(_bstr_t("esricore.ShapefileWorkspaceFactory.1"));</P>
<P> IFeatureDatasetNamePtr pOutshpFeatDSName(CLSID_FeatureDatasetName);<BR> IDatasetNamePtr pshpDSname;<BR> pshpDSname=pOutshpFeatDSName;<BR> pshpDSname->put_Name(_bstr_t("SDE导出"));<BR> pshpDSname->putref_WorkspaceName(pOutshpWsName);</P>
<P><BR> IFeatureClassNamePtr pOutputFCName(CLSID_FeatureClassName);<BR> IDatasetNamePtr pOutputDSname(pOutputFCName);<BR> pOutputDSname->put_Name((_bstr_t)"country_polygon");<BR> pOutputDSname->putref_WorkspaceName(pOutshpWsName);</P>
<P> IFeatureWorkspacePtr ipFeatureworkspace(ipWorkspace);<BR> IFeatureClassPtr pInSDEFeatCLS;<BR> ipFeatureworkspace->OpenFeatureClass(_bstr_t("SDE.country_polygon"),;pInSDEFeatCLS);<BR> </P>
<P><BR> IFieldsPtr pOutShpFlds;<BR> IFieldsPtr pInSDEFlds;<BR> IFieldCheckerPtr pFldChk(CLSID_FieldChecker);<BR> IFieldPtr pGeoField;<BR> IGeometryDefPtr pOutShpGeoDef;<BR> IGeometryDefEditPtr pOutShpGeoDefEdit;</P>
<P> pInSDEFeatCLS->get_Fields(;pInSDEFlds);<BR> pFldChk->Validate(pInSDEFlds,NULL,;pOutShpFlds);<BR> pOutShpFlds=pInSDEFlds;</P>
<P> long index,numFields;<BR> IFieldPtr ipField;<BR> esriFieldType type;<BR> pOutShpFlds->get_FieldCount(;numFields);</P>
<P> for(index=0;index<numFields;index++)<BR> {<BR>  pOutShpFlds->get_Field(index,;ipField);<BR>  ipField->get_Type(;type);<BR>  if(type==esriFieldTypeGeometry)<BR>  {<BR>   pGeoField=ipField;<BR>   break;<BR>  }<BR> }<BR> pGeoField->get_GeometryDef(;pOutShpGeoDef);<BR> pOutShpGeoDef->QueryInterface(_uuidof(IGeometryDefEdit),(void**);pOutShpGeoDefEdit);<BR> pOutShpGeoDefEdit->put_GridCount(1);<BR> pOutShpGeoDefEdit->put_GridSize(0,1500000);</P>
<P> HRESULT hr;<BR> IFeatureDataConverterPtr pFCToShp(CLSID_FeatureDataConverter);<BR> IEnumInvalidObjectPtr ipEnumInvalidObject;<BR> hr=pFCToShp->ConvertFeatureClass(pInSDEFeatCLSNm,NULL,pOutshpFeatDSName,pOutputFCName,NULL,pOutShpFlds,_bstr_t(""),1000,0,;ipEnumInvalidObject);<BR> if(FAILED(hr))<BR>  MessageBox("失败");</P>
喜欢0 评分0
zhousky
论坛版主
论坛版主
  • 注册日期2003-08-01
  • 发帖数281
  • QQ
  • 铜币1027枚
  • 威望3点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2006-11-30 23:21
我有C#的代码,QQ联系:171567188
不要看我噢
举报 回复(0) 喜欢(0)     评分
游客

返回顶部