|
阅读:828回复:0
多边形问题
<P>那个知道:通过SDE保存在当前层的要素类创建一个新的要素为多边形,但在调用Store()方法时,程序提示不能保存,这是为什么?</P>
<P>void CFouthView::CreatePolygonFeature() {</P> <P>IWorkspaceEditPtr pWorkspaceEdit; IFeatureLayerPtr pFeatureLayer; IFeatureClassPtr pFeatureClass; IFeaturePtr pFeature; OnSetLayer();//设置图层 if (NULL == m_pCurLayer) { MessageBox("未获取当前层!", "错误", MB_ICONWARNING); return; } //Create the feature pWorkspaceEdit = GetWorkspaceEdit(); pFeatureLayer = m_pCurLayer; pFeatureLayer->get_FeatureClass(;pFeatureClass); if (NULL == pFeatureClass) { MessageBox("未获取要素!", "提示", MB_ICONINFORMATION); return; } HRESULT hr;</P> <P>hr = pWorkspaceEdit->StartEditing(VARIANT_TRUE); if (FAILED(hr)) { MessageBox("开始编辑失败!", "提示", MB_ICONINFORMATION); pWorkspaceEdit->AbortEditOperation(); return; } hr = pWorkspaceEdit->StartEditOperation(); if (FAILED(hr)) { MessageBox("开始编辑操作失败!", "提示", MB_ICONINFORMATION); pWorkspaceEdit->AbortEditOperation(); return; }</P> <P>hr = pFeatureClass->CreateFeature(;pFeature); if (FAILED(hr)) { MessageBox("建立要素失败!", "提示", MB_ICONINFORMATION); return; } IGeometryPtr pGeo1= NULL; pFeature->get_ShapeCopy(;pGeo1); IPointCollectionPtr ipPointColl = NULL;</P> <P>ipPointColl = pGeo1; IPointPtr ipPoints[5]; int i = 0; for (i = 0; i <5; i++) { ipPoints.CreateInstance(CLSID_Point); } ipPoints[0]->PutCoords(-93,28); ipPoints[1]->PutCoords(-94,25); ipPoints[2]->PutCoords(-89,27); ipPoints[3]->PutCoords(-89,23); ipPoints[4]->PutCoords(-89,23); for (i = 0; i < 5; ++i) { ipPointColl->AddPoint(ipPoints); } IMapControl3Ptr m_ipMapControl = NULL; m_ipMapControl=m_map1.GetControlUnknown(); long lPointCount = 0; ipPointColl->get_PointCount(;lPointCount); if (lPointCount >= 3) { m_ipMapControl->DrawShape(pGeo1); }</P> <P> IPolygonPtr pGeo3 = NULL; pGeo3.CreateInstance(CLSID_Polygon); pGeo3 = ipPointColl; hr=pFeature->putref_Shape(pGeo1); if (FAILED(hr)) { MessageBox("加入几何图形!", "提示", MB_ICONINFORMATION); return; } hr = pFeature->Store();//<B><FONT color=#f73809>程序这时报错</FONT></B> if (FAILED(hr)) { MessageBox("存储失败!", "提示", MB_ICONINFORMATION); return; } hr = pWorkspaceEdit->StopEditOperation(); if (FAILED(hr)) { MessageBox("停止编辑失败!", "提示", MB_ICONINFORMATION); return; } m_pMap->SelectFeature(m_pCurLayer, pFeature); </P> |
|