ArcGIS 将 IGeometryCollection 转换为 IEnumGeometry
ArcGIS Convert IGeometryCollection to IEnumGeometry
我错误地创建了一组多段线,每个顶点对都有一个几何体。通常他们有成千上万的几何图形。
我想将每个特征中的几何图形(注意:不合并特征)合并为一个几何图形。为此,我使用 ITopologicalOperator5.ConstructUnion。 ConstructUnion 采用 IEnumGeometry 参数,我有一个 IGeometryCollection 几何图形。我可以使用 GeometryBag 创建 IEnumGeometry,但 ConstructUnion 不接受 GeometryBag。
如果我使用 IEnumGeometry pEnum = (IEnumGeometry)pGeomCollection,它会抛出异常。
如果我将 IEnumGeometry pEnum = pGeomCollection 用作 IEnumGeometry,则 pEnum 为空。
在 VB.NET 中,Ctype(pGeomCollection, IEnumGeometry) 工作正常。
谁能告诉我如何将 (C#) 几何集合转换为 IEnumGeometry?
谢谢,
约翰
你试过了吗
IEnumGeometry enumGeom = (IEnumGeometry)((IGeometryBag)geometryCollection);
IGeometryBag 实现 IGeometryCollection,IGeometryBag 实现 IEnumGeometry。
但是 GeometryCollection 不直接实现 IEnumGeometry,因此您必须先将其转换为 GeometryBag,然后再转换为 IEnumGeometry。
解决方法是link几何包和几何Collection初始化时:
IGeometryBag pGeomBag = new GeometryBagClass();
pGeomBag.SpatialReference = .......
IGeometryCollection pGeomColl = new PolylineClass();
pGeomColl = (IGeometryCollection)pGeomBag;
IEnumGeometry pEnum = new EnumFeatureGeometryClass();
pEnum = (IEnumGeometry)pGeomBag;
我错误地创建了一组多段线,每个顶点对都有一个几何体。通常他们有成千上万的几何图形。 我想将每个特征中的几何图形(注意:不合并特征)合并为一个几何图形。为此,我使用 ITopologicalOperator5.ConstructUnion。 ConstructUnion 采用 IEnumGeometry 参数,我有一个 IGeometryCollection 几何图形。我可以使用 GeometryBag 创建 IEnumGeometry,但 ConstructUnion 不接受 GeometryBag。 如果我使用 IEnumGeometry pEnum = (IEnumGeometry)pGeomCollection,它会抛出异常。 如果我将 IEnumGeometry pEnum = pGeomCollection 用作 IEnumGeometry,则 pEnum 为空。 在 VB.NET 中,Ctype(pGeomCollection, IEnumGeometry) 工作正常。 谁能告诉我如何将 (C#) 几何集合转换为 IEnumGeometry?
谢谢,
约翰
你试过了吗
IEnumGeometry enumGeom = (IEnumGeometry)((IGeometryBag)geometryCollection);
IGeometryBag 实现 IGeometryCollection,IGeometryBag 实现 IEnumGeometry。
但是 GeometryCollection 不直接实现 IEnumGeometry,因此您必须先将其转换为 GeometryBag,然后再转换为 IEnumGeometry。
解决方法是link几何包和几何Collection初始化时:
IGeometryBag pGeomBag = new GeometryBagClass();
pGeomBag.SpatialReference = .......
IGeometryCollection pGeomColl = new PolylineClass();
pGeomColl = (IGeometryCollection)pGeomBag;
IEnumGeometry pEnum = new EnumFeatureGeometryClass();
pEnum = (IEnumGeometry)pGeomBag;