|
阅读:2636回复:6
如何获得第一条polyline上两点间的那一段,构造一条新的polyline呢,帮帮忙,谢谢呀~
<P>如何获得第一条polyline上两点间的那一段,构造一条新的polyline呢,帮帮忙,谢谢呀~</P>
<P>有这类接口吗?</P> <P>还是要把polyline变成point然后取两点间的point组成一条新的polyline呢?</P> |
|
|
1楼#
发布于:2006-10-30 14:26
<P>我用Ipolyline.getSubCurve,得出来一条ICurve后,显式转换成一条polyline后,不能和图层上其他polyline进行ITopologicalOperator.Union,</P>
<P>怎么生成一条polyline才能让他们合并呢,谢谢</P> |
|
|
2楼#
发布于:2006-10-30 16:56
没看明白
|
|
|
3楼#
发布于:2006-10-30 18:22
<P>//可能我没说清楚吧</P>
<P>//pPolyline1、pPolyline2是同一图层的两条线</P> <P>//在pPolyline1中取出指定长度100米的一条线段pOutSubCurve</P> <P>pPolyline1.GetSubcurve(0, 100, false, out pOutSubCurve);</P> <P>//显式转换成多义线</P> <P>pPolyline3=(IPolyline)pOutSubCurve;</P> <P>//合并pPolyline2和pPolyline3为pPolyline4</P> <P>ITopologicalOperator pTopoOperator=(ITopologicalOperator)pPolyline2;</P> <P>pPolyline4=pTopoOperator.Union(pPolyline3);</P> <P>然后就出现异常了:HRESULT 0x80040218<B ><FONT face=宋体></FONT></B></P> |
|
|
4楼#
发布于:2006-11-01 10:45
<P>我这有段根据独立值合并要素的程序,可以看看</P>
<P>//合并要素<BR> public void MergeFeaturs(IFeatureLayer pFL,string strField)<BR> {<BR> try<BR> {<BR> IFeatureClass pFC=pFL.FeatureClass;</P> <P> IGeometry pTmpGeom=null;<BR> IGeometry pGeom;<BR> IGeometry pOutGeom=null;<BR> ITopologicalOperator pTopOperator;</P> <P> //求独立值<BR> ICursor pCursor=(ICursor)pFL.Search(null,false);<BR> IDataStatistics pData=new DataStatisticsClass();<BR> pData.Field=strField;<BR> pData.Cursor=pCursor;<BR> <BR> System.Collections.IEnumerator pEnumer;</P> <P> object Value=null;<BR> pEnumer=(IEnumerator)pData.UniqueValues;<BR> int nCount=pData.UniqueValueCount;<BR> object o=Type.Missing;<BR> IQueryFilter pFilter=new QueryFilterClass();</P> <P> for (int i=0;i<nCount;i++)<BR> {<BR> pEnumer.MoveNext();<BR> Value=pEnumer.Current;<BR> //根据独立值合并相同的要素<BR> pFilter.WhereClause=strField + "=" + (string)Value;<BR> IFeatureCursor pOutFC=pFC.Search(pFilter,false);</P> <P> IFeature pFeature=pOutFC.NextFeature();<BR> IFields pFlds=null;<BR> int nFeatureCount=0;<BR> object[] oValue=null;</P> <P> while (pFeature!=null)<BR> {<BR> nFeatureCount++;<BR> pGeom=pFeature.ShapeCopy;<BR> if (nFeatureCount==1)<BR> {<BR> pFlds=pFeature.Fields;<BR> oValue=new object[pFlds.FieldCount];<BR> for (int j=0;j<pFlds.FieldCount;j++)<BR> {<BR> if (pFlds.get_Field(j).Type!=esriFieldType.esriFieldTypeGeometry)<BR> {<BR> oValue[j]=pFeature.get_Value(j);<BR> }<BR> }<BR> pTmpGeom=pGeom;<BR> pOutGeom=pTmpGeom;<BR> }<BR> else<BR> {<BR> pTopOperator=(ITopologicalOperator)pTmpGeom;;<BR> pOutGeom=pTopOperator.Union(pGeom);<BR> pTmpGeom=pOutGeom;<BR> }<BR> <BR> pFeature.Delete();</P> <P> pFeature=pOutFC.NextFeature();<BR> }//while<BR> <BR> IFeature pNewFeature=pFC.CreateFeature();<BR> pNewFeature.Shape=pOutGeom;</P> <P> //更新字段值,第一个关键字段没能更新<BR> for (int j=1;j<oValue.Length;j++)<BR> {<BR> if (pFlds.get_Field(j).Type!=esriFieldType.esriFieldTypeGeometry)<BR> {<BR> pNewFeature.set_Value(j,oValue[j]);<BR> }<BR> }<BR> pNewFeature.Store();<BR> }<BR> this.axMapCtl.ActiveView.Refresh();<BR> }<BR> catch(Exception ex)<BR> {<BR> MessageBox.Show(ex.Message);<BR> }<BR> }</P> |
|
|
5楼#
发布于:2006-12-25 10:28
<P>如何获得一条polyline上任意两点间的那一段,构造一条新的polyline呢,帮帮忙,谢谢呀,</P>
|
|
|
6楼#
发布于:2006-12-25 10:36
<P>pFromPoint,pToPoint为m_ipPolyline上的任意两点,怎么获取pFromPoint,pToPoint之间的一条新的Polyline,</P>
<P> m_ipPolyline.QueryFromPoint(pFromPoint);<BR> m_ipPolyline.QueryToPoint(PToPoint); </P> <P>这种方式不对,有什么办法?<BR></P> |
|