冲亚
路人甲
路人甲
  • 注册日期2005-06-01
  • 发帖数83
  • QQ
  • 铜币389枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:6685回复:7

IGeometry如何转为IFeature.Shape

楼主#
更多 发布于:2007-09-25 13:49
在这段程序之前,生成了一个椭圆(IEllipticArc pEllipse = new EllipticArcClass()),并对其使用了PutCoords方法,现在想将其存在一个线类型的要素类中,却遇到错误:这个集合中找不到此项目。代码如下:<br><br>                    IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pWorkspace;<br>                    pWorkspaceEdit.StartEditing(false);<br>                    pWorkspaceEdit.StartEditOperation();<br><br>                    //IGeometryCollection pGeometryCollection = new GeometryBagClass();<br>                    //object missing = Type.Missing;<br>                    //pGeometryCollection.AddGeometry(pEllipse,ref missing, ref missing);<br>                    //IGeometry pGeometry = pGeometryCollection.get_Geometry(0);<br><br>                    IFeatureClass pFcDzx = pFeatureWorkspace.OpenFeatureClass("dzx");<br>
                    IFeature pFtEllipse;<br><br>                    pFtEllipse = pFcDzx.CreateFeature();<br>                    pFtEllipse.Shape = pEllipse;//pLine;//pGeometry;    //运行到这里报错:这个集合中找不到此项目。<br>                    pFtEllipse.set_Value(pFtEllipse.Fields.FindField("zj"),ld);<br>                    pFtEllipse.Store();<br><br>                    pWorkspaceEdit.StopEditOperation();<br>                    pWorkspaceEdit.StopEditing(true);<br><br>以前我用VB6.0+AE9.0时,使用IFeature.Shape = IGeometry没有遇到问题,这里不知是怎么回事。像大家请教。谢谢!<br>
喜欢0 评分0
bluewood_cn
路人甲
路人甲
  • 注册日期2004-04-19
  • 发帖数118
  • QQ
  • 铜币551枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2007-09-25 21:53
<P>你用的是C# 吧。</P>
<P>VB好像是可以自动类型转换的。而 C#是不可以的吧,我C#不是很了解 。</P>
<P>你可以这样些,试验一下。</P>
<P>IGeometry ipGeo(pEllipse) ;</P>
<P>pFtEllipse.Shape = ipGeo;</P>
举报 回复(0) 喜欢(0)     评分
cl991036
管理员
管理员
  • 注册日期2003-07-25
  • 发帖数5913
  • QQ14265545
  • 铜币29656枚
  • 威望213点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • GIS帝国铁杆
2楼#
发布于:2007-09-27 11:31
            IEllipticArc pEllipse = new EllipticArcClass();<br><br>            IEnvelope pE= new EnvelopeClass();<br>            pE.PutCoords(0,0,1000,2000);<br><br>            IConstructEllipticArc ppe=new EllipticArcClass();<br>            ppe.ConstructEnvelope(pE);<br>        <br>            ISegment pS=(ISegment)ppe;<br><br>            ISegmentCollection p2=new PolygonClass();<br>            object a = Type.Missing;<br>            object b = Type.Missing;<br><br>            p2.AddSegment(pS,ref a,ref b);<br><br>            pFtEllipse.Shape = (IGeometry)p2;<br><br>可以使用 ISegmentCollection做为转换
没钱又丑,农村户口。头可断,发型一定不能乱。 邮箱:gisempire@qq.com
举报 回复(0) 喜欢(0)     评分
追风浪子
路人甲
路人甲
  • 注册日期2004-06-08
  • 发帖数166
  • QQ
  • 铜币782枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2007-09-27 11:34
<P>现在想将其存在一个<FONT color=#ee3d11>线类型的要素类</FONT>中</P>
<P>pFtEllipse.Shape = pEllipse;//pLine;//pGeometry;    //运行到这里报错:这个集合中找不到此项目。</P>
<P>因为你是在一个<FONT color=#ee3d11>线类型的要素类,</FONT>你应该查一下IEllipticArc和IPolygon能转换?</P>
<P>pFtEllipse.Shape = pPolygon;</P>
举报 回复(0) 喜欢(0)     评分
冲亚
路人甲
路人甲
  • 注册日期2005-06-01
  • 发帖数83
  • QQ
  • 铜币389枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2007-09-27 13:39
1<br>谢谢!不过ISegmentCollection和IGeometryCollection我都试过了,结果仍是在pFtEllipse.Shape = (IGeometry)pSegmentCollection处报错。<br><br>2<br>椭圆和IPolygon、ILine均不能转换<br>
[此贴子已经被作者于2007-9-27 13:42:37编辑过]
举报 回复(0) 喜欢(0)     评分
追风浪子
路人甲
路人甲
  • 注册日期2004-06-08
  • 发帖数166
  • QQ
  • 铜币782枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2007-09-27 16:08
<P>Dim  pEArc As  IEllipticArc</P>
<P>.........</P>
<P>Dim pSeg As ISegment<BR>Set pSeg = pEArc<BR>   <BR>Dim pPolyline As ISegmentCollection<BR>Set pPolyline = New Polyline<BR>pPolyline.AddSegment pSeg<BR><BR></P>
举报 回复(0) 喜欢(0)     评分
cl991036
管理员
管理员
  • 注册日期2003-07-25
  • 发帖数5913
  • QQ14265545
  • 铜币29656枚
  • 威望213点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • GIS帝国铁杆
6楼#
发布于:2007-09-28 11:26
            IWorkspaceFactory pWorkspaceFactory=new AccessWorkspaceFactoryClass();<br>            IWorkspace pWorkspace =pWorkspaceFactory.OpenFromFile(@"C:\work\20070820\temp\AAA.mdb",0);<br><br>            IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pWorkspace;<br>            pWorkspaceEdit.StartEditing(false);<br>            pWorkspaceEdit.StartEditOperation();<br><br>            IFeatureWorkspace pFeatureWorkspace=(IFeatureWorkspace)pWorkspace;<br><br>            IFeatureClass pFcDzx = pFeatureWorkspace.OpenFeatureClass("hhh");<br><br>            IFeature pFtEllipse;<br><br>            pFtEllipse = pFcDzx.CreateFeature();<br><br>            IEllipticArc pEllipse = new EllipticArcClass();<br>            IEnvelope pE= new EnvelopeClass();<br>            pE.PutCoords(0,0,1000,1000);<br><br>            IConstructEllipticArc ppe=new EllipticArcClass();<br>            ppe.ConstructEnvelope(pE);<br>        <br>            ISegment pS=(ISegment)ppe;<br><br>            ISegmentCollection p2=new PolygonClass();<br>            object a = Type.Missing;<br>            object b = Type.Missing;<br><br>            p2.AddSegment(pS,ref a,ref b);<br><br>            IGeometry pp=(IGeometry)p2;<br><br>            pFtEllipse.Shape = pp;<br>            pFtEllipse.Store();<br><br>            pWorkspaceEdit.StopEditOperation();<br>            pWorkspaceEdit.StopEditing(true);<br><br>            MessageBox.Show("ok");<br><br>
没钱又丑,农村户口。头可断,发型一定不能乱。 邮箱:gisempire@qq.com
举报 回复(0) 喜欢(0)     评分
冲亚
路人甲
路人甲
  • 注册日期2005-06-01
  • 发帖数83
  • QQ
  • 铜币389枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2007-09-28 19:33
用追风浪子的方法搞定了!谢谢大家!
举报 回复(0) 喜欢(0)     评分
游客

返回顶部