kingmin
路人甲
路人甲
  • 注册日期2006-03-18
  • 发帖数12
  • QQ
  • 铜币164枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2636回复:6

如何获得第一条polyline上两点间的那一段,构造一条新的polyline呢,帮帮忙,谢谢呀~

楼主#
更多 发布于:2006-10-30 12:28
<P>如何获得第一条polyline上两点间的那一段,构造一条新的polyline呢,帮帮忙,谢谢呀~</P>
<P>有这类接口吗?</P>
<P>还是要把polyline变成point然后取两点间的point组成一条新的polyline呢?</P>
喜欢0 评分0
kingmin
路人甲
路人甲
  • 注册日期2006-03-18
  • 发帖数12
  • QQ
  • 铜币164枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2006-10-30 14:26
<P>我用Ipolyline.getSubCurve,得出来一条ICurve后,显式转换成一条polyline后,不能和图层上其他polyline进行ITopologicalOperator.Union,</P>
<P>怎么生成一条polyline才能让他们合并呢,谢谢</P>
举报 回复(0) 喜欢(0)     评分
chenjunfc
外卖仔
外卖仔
  • 注册日期2003-08-14
  • 发帖数58
  • QQ283832077
  • 铜币452枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2006-10-30 16:56
没看明白
举报 回复(0) 喜欢(0)     评分
kingmin
路人甲
路人甲
  • 注册日期2006-03-18
  • 发帖数12
  • QQ
  • 铜币164枚
  • 威望0点
  • 贡献值0点
  • 银元0个
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>
举报 回复(0) 喜欢(0)     评分
zhaoqinliu
外卖仔
外卖仔
  • 注册日期2005-04-18
  • 发帖数50
  • QQ
  • 铜币284枚
  • 威望0点
  • 贡献值0点
  • 银元0个
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>
举报 回复(0) 喜欢(0)     评分
skyseesea
路人甲
路人甲
  • 注册日期2005-02-23
  • 发帖数103
  • QQ
  • 铜币443枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2006-12-25 10:28
<P>如何获得一条polyline上任意两点间的那一段,构造一条新的polyline呢,帮帮忙,谢谢呀,</P>
举报 回复(0) 喜欢(0)     评分
skyseesea
路人甲
路人甲
  • 注册日期2005-02-23
  • 发帖数103
  • QQ
  • 铜币443枚
  • 威望0点
  • 贡献值0点
  • 银元0个
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>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部