|
阅读:1024回复:2
多边形问题
<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> |
|
|
1楼#
发布于:2004-11-08 17:24
<img src="images/post/smile/dvbbs/em46.gif" />
|
|
|
2楼#
发布于:2004-10-25 21:01
<P><b>以前的一个贴,翻出来了</b></P><P><b>编辑更新shp和sde图层(使用trackinglayer)[代码]
</b>摘要: 如何把trackinglayer中的对象存储到shapefile和sde图层中 代码: 定义变量: Dim tl As MapObjects2.TrackingLayer Dim recs As MapObjects2.Recordset 返回你要编辑的记录集: Set recs = Map1.Layers(0).Records 查找TrackingLayer中的对象来更新你编辑的记录集: Dim i As Integer For i = 0 To tl.EventCount - 1 recs.AddNew Set recs.Fields("Shape").Value = tl.Event(i).Shape recs.Update Next recs.StopEditing </P> |
|
|