0

我正在尝试将一个图层的所有功能与另一个图层的所有功能相交,但是在执行“ConstructUnion”功能时,我的 Web ADF 应用程序卡住了

这是我到目前为止写的代码

// create a geometrybag for layer1
ESRI.ArcGIS.Geometry.IGeometry geometryBag = new ESRI.ArcGIS.Geometry.GeometryBagClass();
geometryBag.SpatialReference = m_firstLayerFirstfeatureIGeometry.SpatialReference;
ESRI.ArcGIS.Geometry.IGeometryCollection geometryCollection = (ESRI.ArcGIS.Geometry.IGeometryCollection)geometryBag;
// Cycle all features of first layer and add them to the collection
foreach (DataRow m_dr in m_firstLayerfeatureGraphics.Rows)
{
    // Takes this feature's geometry
    ESRI.ArcGIS.ADF.Web.Geometry.Geometry adfFeature =
        m_firstLayerfeatureGraphics.GeometryFromRow(m_dr) as ESRI.ArcGIS.ADF.Web.Geometry.Geometry;
    // convert to a igeometry object
    ESRI.ArcGIS.Geometry.IGeometry m_tempfeatureIGeometry =
    ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Local.Converter.ToIGeometry(adfFeature, ctx);
    System.Diagnostics.Debug.WriteLine("m_firstLayerfeatureGraphics +1 ");
    object missing = Type.Missing;
    geometryCollection.AddGeometry(m_tempfeatureIGeometry, ref missing, ref
    missing);
}
ESRI.ArcGIS.Geometry.ITopologicalOperator mtopo1 = new ESRI.ArcGIS.Geometry.PolygonClass();
// FOLLOWING LINE BLOCKS APPLICATION
mtopo1.ConstructUnion((ESRI.ArcGIS.Geometry.IEnumGeometry)geometryBag);

知道为什么吗?

4

1 回答 1

0

如本网站的GIS版本中所述,这是解决方案

您需要使用 IServerContext.CreateObject 在 ArcGIS Server SOC 上创建 ArcObject 实例(GeometryBagClass 位于代码片段的开头,PolygonClass 位于代码片段的末尾)。您当前的代码在 Web 服务器(或运行 ADF 应用程序的任何地方)上创建这些对象,这需要大量编组,在许多情况下似乎永远无法完成。

您已经在 ctx 变量中获得了对服务器上下文的引用,所以基本上一切就绪。在 ArcGIS Server 上创建所有 ArcObjects 后,您的问题可能会得到解决。

于 2011-08-10T23:31:54.260 回答