计算表面面积,即计算所选多边形区域内的 DEM 栅格拟合的三维曲面的总的表面面积。

命名空间:  SuperMap.Analyst.SpatialAnalyst
程序集:  SuperMap.Analyst.SpatialAnalyst (in SuperMap.Analyst.SpatialAnalyst)
版本: dll

语法

C#
public static double ComputeSurfaceArea(
	DatasetGrid sourceDatasetGrid,
	GeoRegion region
)

参数

sourceDatasetGrid
Type: SuperMap.Data..::.DatasetGrid
指定的待计算表面面积的 DEM 栅格。
region
Type: SuperMap.Data..::.GeoRegion
指定的用于计算表面面积的多边形。

返回值

表面面积的值。单位为平方米。返回 -1 表示计算失败。

示例

以下代码示范了如何通过给定的 DEM 栅格,计算栅格表面面积。实现的方式是在跟踪图层上绘制一个多边形,计算该多边形内的栅格表面面积。使用本示例代码需确保在你的工程中存在名为“m_mapControl”的地图控件(MapControl),名为“m_datasource”的数据源,及名为"travel"的栅格数据集,并确保地图控件与工作空间(Workspace)相关联。注意:符合以上条件不代表能够获得正确结果,你还需要使用合适的数据。

CopyC#
//计算表面面积按钮单击事件
private void btnComputeSurfaceArea_Click(object sender, EventArgs e)
{
    //设置MapControl的绘制方式
    m_mapControl.TrackMode = TrackMode.Track;

    //设置MapControl的操作状态
    m_mapControl.Action = SuperMap.UI.Action.CreatePolygon;

    //设置正在绘制的对象的风格
    GeoStyle style = new GeoStyle();
    style.FillForeColor = Color.FromArgb(255, 255, 0);
    style.FillOpaqueRate = 20;
    m_mapControl.TrackingStyle = style;
}

//调用ComputeSurfaceArea()方法计算表面面积
private void CalculateSurfaceArea(DatasetGrid sourceDatasetGrid, GeoRegion geoRegion)
{
    Double result = CalculationTerrain.ComputeSurfaceArea(sourceDatasetGrid, geoRegion);
    MessageBox.Show("表面积为:" + result.ToString());
}

//跟踪绘制结束事件
private void m_mapControl_Tracked(object sender, TrackedEventArgs e)
{
    m_mapControl.Map.TrackingLayer.Clear();
    m_mapControl.Map.TrackingLayer.Add(e.Geometry, "多边形");

    //获取跟踪图层上的Geometry
    GeoRegion geoRegion = m_mapControl.Map.TrackingLayer.Get(0) as GeoRegion;

    //设置源栅格数据集
    DatasetGrid sourceDatasetGrid = m_datasource.Datasets["travel"] as DatasetGrid;

    CalculateSurfaceArea(sourceDatasetGrid, geoRegion);

    m_mapControl.Map.TrackingLayer.Clear();
}

请参见