合并要素的算法???

Posted by 蒋波涛 25 January,2007 Views (11)Comment

这几天一直在思考这样一个功能,如何合并一个要素类中的某些特定要素。如在一个要素类中有10个要素,我们希望逐个合并两个距离小于容差的要素,这样合并的最后结果可能是全部要素都合并在一起,或者是135合并,246合并,789合并,10不与任何要素合并。

这个功能看起来很简单,但要实现起来却并非如此,比如1与3可以合并,但1与5并非可以合并,只有当1和3合并完后更新为新的1时,1与5才具有可合并的特性。通过一个简单的方法,我可以获得所有的可合并要素对,如:
5-1
5-4
18-17     
19-18
20-19     
21-20  
22-13   
22-21     
23-22     
24-13     
24-22     
24-23   
25-19
25-20
25-21
27-17
28-17
28-27

现在,我需要找到一个算法,在上面的数组中寻找出以下连通关系,即
1-5-4可以合并
18-17-19-20-21-22-13-24-23-25-27-28可以合并
显然,这是一种网络的连通性分析,目前我实在没有想到算法来寻找出上面数组中存在这两种连通路线。如果有做过类似的人,希望能够给点意见,谢谢。

Related Items

Categories : ArcObjects Tags : ArcObjects  
Comments
2007-1-26 22:51:18

这个功能已经使用一种异乎寻常简单的方式解决,不用解这个网络。

Posted by 蒋波涛 Gravatar Icon

2007-1-29 16:58:41

下面的代码有点问题,帮我看看.thank you

ISimpleLineSymbol pLineSymbol;
pLineSymbol = new SimpleLineSymbol();
IRgbColor rgbColor = new RgbColorClass();
ISymbol pSymbol;

pLineSymbol.Width = 1; //线宽
rgbColor = new RgbColor(); //线色
rgbColor.Blue = 128;
pLineSymbol.Color = rgbColor;
pLineSymbol.Style = esriSimpleLineStyle.esriSLSDashDot;//虚线

pSymbol = (ISymbol)pLineSymbol;

ILine pLine = new LineClass();
pLine.PutCoords(pFromPoint,pToPoint);//构造线段

// IPolyline pPolyline = new PolylineClass();


ILineElement pLineElement = new LineElementClass();
pLineElement.Symbol = pLineSymbol;

IElement pIelement;
pIelement = pLineElement as IElement;
pIelement.Geometry = pLine;//这里出了问题,pLine转不过去

pGrphContainer.AddElement(pIelement,0);

Posted by 433 Gravatar Icon

2007-1-29 16:59:56

就那句有问题,pLine在之前都是正常的有值的。是否是需要别的symbol来修饰ILine?

Posted by 433 Gravatar Icon

2007-2-2 14:44:22

你好,请教一个问题,我在Table中添加了一个二进制(esriFieldTypeBlob)的字段,为什么它的Length显示0,而且二进制数据也写不进去?

Posted by 小熊 Gravatar Icon

2007-2-2 21:31:26

二进制数据又一定是SHAPE字段的内容,当然不可能显示长度或面积,而且这个字段只接受IGeometry类型的对象

Posted by 蒋波涛 Gravatar Icon

2007-2-3 9:13:23

这个二进制字段是在Table里创建的,类型是
esriFieldTypeBlob,可以设它的Length,
但是二进制数据写不进去,难道在Table里可以写IGeometry ?二进制字段(Blob)可以在FeatureClass和Table里创建,它不是Shape字段.

Posted by 小熊 Gravatar Icon

2007-2-3 15:48:32

你是基于AO来读写二进制字段的,在写的时候,只有pFeat.Value(i)=[数值/字符串],pFeat.Shape=pGeo这两种方式来写进值.如果你是要将图片写入一个BLOB中,显然通过这种方式是不行的,你可以试验通过AO的OLE/DB通道看看.

Posted by 蒋波涛 Gravatar Icon

2007-4-1 16:17:12

我是个GIS初学者,有问题想请教,请问您有QQ号吗?

Posted by qingjiao Gravatar Icon

2007-4-4 21:57:13

如果1个多边形被分成了3部分或更多的情况下,是不是没有考虑呢

Posted by Gravatar Icon

2008-7-15 21:17:48

pFeatureClassName = new FeatureClassNameClass();

程序报"systemRuntime.InteropServices.COMException"错误

在如下代码后

pFeatureClassName.FeatureType = esriFeatureType.esriFTSimple;
pFeatureClassName.ShapeFieldName = "Shape";
pFeatureClassName.ShapeType = pFeatureClass.ShapeType;



pBasicGeop = new BasicGeoprocessorClass();
pOutputFeatClass=pBasicGeop.Merge(pArray,pTable,pFeatureClassName);

Merge方法报对 “COM 组件的调用返回了错误 HRESULT E_FAIL”错误。

请大侠指点一下。谢谢

Posted by winer02 Gravatar Icon

2008-7-15 22:56:47

IFeatureClassName对象是无法new出来的。

Posted by 蒋波涛 Gravatar Icon

Leave a comment

Or, take a look at Archives and Categories

目录

存档