yangjunbin
路人甲
路人甲
  • 注册日期2004-08-20
  • 发帖数2
  • QQ
  • 铜币123枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1025回复:2

多边形问题

楼主#
更多 发布于:2004-10-25 15:58
<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>
喜欢0 评分0
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
1楼#
发布于: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>
GIS麦田守望者,期待与您交流。
举报 回复(0) 喜欢(0)     评分
kmxl
路人甲
路人甲
  • 注册日期2004-10-30
  • 发帖数94
  • QQ
  • 铜币294枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2004-11-08 17:24
<img src="images/post/smile/dvbbs/em46.gif" />
举报 回复(0) 喜欢(0)     评分
游客

返回顶部