2.2.8 区域压平分析


区域压平分析

区域压平是指将选定区域内的建筑和地形压成平面效果的功能。区域压平支持同时压平多个区域。

区域压平一般在城市规划中,用于模拟将选定区域的数据踏平的效果。

主要包括添加(创建)、更新、显隐、删除和获取结果操作。

注意:可创建空的分析图层,也可创建预设的分析图层,如需创建预设分析图层,则IsLoad ,IsActive ,Points, PointsIndex 四个参数需要同时配置

下图是区域压平分析效果:

  

参数说明

区域压平分析可配置的参数如下表所示:

配置项 配置说明 值类型 备注
LayerOptionsName 图层配置对象名称 string 分析图层需配置为:AnalysisLayerOptions
DataSourceTypeName 数据源类型 string as_areaflattening代表区域压平分析
PointColor 点颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
PointSize 点大小 float 点大小取值范围在1-10之间
AreaFlatteningLineColor 线颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
AreaNum 绘制区域个数 int 表示一个图层中能绘制的分析体数量。默认为0
FlattenElevation 压平高度 double 默认为0.0,单位:m
TiltAngle 倾斜角度 double 压平为倾斜面的倾斜角度(相对于水平面的角度)。默认为0.0,单位:m
ModelLayersID 图层ID列表 int列表 -1则代表分析所有图层,若为多个图层,可使用xx,xx,xx
此种格式。图层Id可以通过图层对象的GetLayerId()方法获取
ModelLayersIDEx 排除图层ID列表 int列表 将该参数列出的图层排除后,分析剩余的图层。若为多个图层,可使用xx,xx,xx
此种格式。该参数可不设
RangeLineVisible 区域线是否显示 bool 默认为false
IsModelLayerFlatten 是否对模型起效 bool 设为true,则压平模型。默认为false
IsTerrainLayerFlatten 是否对地形起效 bool 设为true,则压平模型。默认为false
FlattenAreaFillType 填充方式 int 压平区域填充方式。0-不填充;1-颜色填充;2-纹理填充;默认0
PlaneFaceColor 顶面填充颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
SideFaceColor 侧面填充颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
PlaneFaceImagePath 顶面填充纹理路径 string 压平顶面填充纹理路径
SideFaceImagePath 侧面填充纹理路径 string 压平顶面填充纹理路径
IsLoad 是否初始化加载点 bool 默认为false
IsActive 是否激活分析 bool 默认为true,表示是否可操作场景进行绘制
Points 坐标点集 x,y,z列表 需传入经度,纬度,高程坐标集,中间用;分隔,并以;结尾
PointsIndex 每个区域对应点数量 int列表 AreaNum数量大于1,则需要设定每个区域包含多少个关键点。中间用,分隔
IsWorld 是否世界坐标点 bool 传入的坐标是否是世界坐标。true-世界坐标,false-经纬度坐标。默认为true

获取结果说明

区域压平分析可以通过图层对象的GetLayerResult() 方法获取结果。获取的结果值对象参数如下表所示:

配置项 配置说明 值类型 备注
DataSourceTypeName 数据源类型 string as_areaflattening代表区域压平分析
ClickPoints 点击点坐标 x,y,z列表 鼠标点击场景形成的关键点的经度,纬度,高程坐标列表,中间用;分隔,并以;结尾

代码调用示例

Javascript调用

//创建区域压平分析
var areaFlatten = null;
var areaFlatteningVisble = true;
function createAreaFlattening(){
    if(areaFlatten == null){
        var mlo = map.CreateLayerOptions("areaFlatten");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_areaflattening");//数据源类型,as_areaflattening代表区域压平
        mlo.AddConfig("PointColor", "0,0,1,1.0");//点颜色
        mlo.AddConfig("PointSize", "5");//点大小
        mlo.AddConfig("AreaFlatteningLineColor", "0.1,0.5,0.8,0.9");//线颜色
        mlo.AddConfig("AreaNum","1");//压平个数
        mlo.AddConfig("FlattenElevation", "-20");//压平高度。相对于地面的高度
        mlo.AddConfig("TiltAngle", "0");//压平为倾斜面的倾斜角度(相对于水平面的角度)
        mlo.AddConfig("ModelLayersID", "-1");//-1代表分析所有图层;"x,x,x"用,分隔代表分析指定id图层
        mlo.AddConfig("ModelLayersIDEx", gModelLayer.GetLayerID());//区域压平区域排除图层ID
        mlo.AddConfig("RangeLineVisible", "true");//线显隐
        mlo.AddConfig("IsModelLayerFlatten", "true");//是否对模型起效
        mlo.AddConfig("IsTerrainLayerFlatten", "true");//是否对地形起效 
        mlo.AddConfig("FlattenAreaFillType","0");//填充方式。0-不填充;1-颜色填充;2-纹理填充;默认0
        mlo.AddConfig("PlaneFaceColor","1,0,1,0.3");//顶面填充颜色
        mlo.AddConfig("SideFaceColor","0,1,1,0.3");//侧面填充颜色
        mlo.AddConfig("PlaneFaceImagePath","F:\\演示测试数据\\pine.png");//顶面填充纹理路径
        mlo.AddConfig("SideFaceImagePath","F:\\演示测试数据\\water.jpg");//侧面填充纹理路径
        areaFlatten = map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
        map.AddLayer(areaFlatten);//添加图层
    }else{
        alert("请勿重复创建分析图层!");
    }
}
//更新区域压平分析
function updateAreaFlattening(){
    if(areaFlatten){
        var mlo = map.CreateLayerOptions("areaFlatten");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_areaflattening");//数据源类型,as_areaflattening代表区域压平
        mlo.AddConfig("PointColor", "1,0,0,1.0");//点颜色
        mlo.AddConfig("PointSize", "5");//点大小
        mlo.AddConfig("AreaFlatteningLineColor", "1.0,0.5,0.8,0.9");//线颜色
        mlo.AddConfig("AreaNum","1");//压平个数
        mlo.AddConfig("FlattenElevation", "20");//压平高度。相对于地面的高度
        mlo.AddConfig("TiltAngle", "0");//压平为倾斜面的倾斜角度(相对于水平面的角度)
        mlo.AddConfig("ModelLayersID", "-1");//-1代表分析所有图层;"x,x,x"用,分隔代表分析指定id图层
        mlo.AddConfig("RangeLineVisible", "true");//线显隐
        mlo.AddConfig("IsModelLayerFlatten", "true");//是否对模型起效
        mlo.AddConfig("IsTerrainLayerFlatten", "true");//是否对地形起效 
        mlo.AddConfig("IsActive", "false");//是否激活分析
        mlo.AddConfig("IsLoad", "true");//是否加载点集
        mlo.AddConfig("PointsIndex", "6");//每个区域顶点数量,以逗号分隔
        mlo.AddConfig("IsWorld","false" );//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标    
        mlo.AddConfig("Points", "120.219713587,30.210181099,14.9652935388;120.219204087,30.2109494013,14.7999706212;120.219001936,30.2109282088,14.7999637863;120.217848959,30.2104003907,14.7999738362;120.218369991,30.2096373799,14.8299520519;120.219761778,30.2100892772,14.7999550551;");//传入的点集
        areaFlatten.UpdateLayerOptions(mlo);//更新图层
    }else{
        alert("请创建分析图层再进行更新操作!");
    }
}
//获取区域压平分析结果
function getAreaFlattening(){
    if(areaFlatten){
        var opt = areaFlatten.GetLayerResult();//获取图层结果
        //判断当前图层数据源类型
        if(opt.GetConfigValueByKey("DataSourceTypeName") == "as_areaflattening"){
            var ClickPoints = opt.GetConfigValueByKey("ClickPoints");//获取起始点坐标
            alert("ClickPoints:" + ClickPoints);
        }
    }else{
        alert("不存在分析图层,无法获取分析结果!");
    }
}
//删除区域压平
function removeAreaFlattening(){
    if(areaFlatten){
        map.RemoveLayer(areaFlatten);//删除图层
        areaFlatten = null;
    }else{
        alert("分析图层不存在,请勿重复删除!");
    }
}
//显隐区域压平分析
function visibleAreaFlattening(){
    if(areaFlatten){
        if (areaFlatteningVisble){
            areaFlatteningVisble = false;
        }else{
            areaFlatteningVisble = true;
        }
        areaFlatten.SetVisible(areaFlatteningVisble);//显隐图层
    }else{
        alert("图层不存在,无法设置显隐!");
    }
}

C++调用

BaseObjectCOMLib::ILayerObjectPtr areaFlatten;//区域压平分析图层对象
//创建区域压平分析
void Cf1c8AreaflatteningDlg::OnBnClickedcreateareaflattening()
{

    if(areaFlatten)
    {
        return;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions("");//创建图层配置对象
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    tlo->AddConfig("DataSourceTypeName", "as_areaflattening");//数据源类型,as_areaflattening代表区域压平
    tlo->AddConfig("PointColor", "0,0,1,1.0");//点颜色
    tlo->AddConfig("PointSize", "5");//点大小
    tlo->AddConfig("AreaFlatteningLineColor", "0.1,0.5,0.8,0.9");//线颜色
    tlo->AddConfig("AreaNum","1");//压平个数
    tlo->AddConfig("FlattenElevation", "-10");//压平高度。相对于地面的高度
    tlo->AddConfig("TiltAngle", "0");//压平为倾斜面的倾斜角度(相对于水平面的角度)
    tlo->AddConfig("ModelLayersID", "-1");//分析操作模型图层Id列表,以逗号分隔,-1代表所有模型图层;"x,x,x",用,分隔代表分析指定id图层
    //tlo->AddConfig("ModelLayersIDEx,", modelLayer.GetLayerID());//区域压平区域排除图层ID
    tlo->AddConfig("RangeLineVisible", "true");//线显隐
    tlo->AddConfig("IsModelLayerFlatten", "true");//是否对模型起效
    tlo->AddConfig("IsTerrainLayerFlatten", "false");//是否对地形起效
    tlo->AddConfig("FlattenAreaFillType", "0");//填充方式。0-不填充;1-颜色填充;2-纹理填充;默认0
    tlo->AddConfig("PlaneFaceColor", "1,0,1,0.3");//顶面填充颜色
    tlo->AddConfig("SideFaceColor", "0,1,1,0.3");//侧面填充颜色
    tlo->AddConfig("PlaneFaceImagePath", "F:\\演示测试数据\\pine.png");//顶面填充纹理路径
    tlo->AddConfig("SideFaceImagePath", "F:\\演示测试数据\\water.jpg");//侧面填充纹理路径
    areaFlatten = map->CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数为AnalysisLayer
    map->AddLayer(areaFlatten);//添加图层
}

//更新区域压平分析
void Cf1c8AreaflatteningDlg::OnBnClickedupdateareaflattening()
{
    if(!areaFlatten)
    {
        return;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions("");//创建图层配置对象
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    tlo->AddConfig("DataSourceTypeName", "as_areaflattening");//数据源类型,as_areaflattening代表区域压平
    tlo->AddConfig("PointColor", "1,0,0,1.0");//点颜色
    tlo->AddConfig("PointSize", "5");//点大小
    tlo->AddConfig("AreaFlatteningLineColor", "1.0,0.5,0.8,0.9");//线颜色
    tlo->AddConfig("AreaNum","1");//压平个数
    tlo->AddConfig("FlattenElevation", "20");//压平高度。相对于地面的高度
    tlo->AddConfig("TiltAngle", "0");//压平为倾斜面的倾斜角度(相对于水平面的角度)
    tlo->AddConfig("ModelLayersID", "-1");//分析操作模型图层Id列表,以逗号分隔,-1代表所有模型图层
    tlo->AddConfig("RangeLineVisible", "true");//线显隐
    tlo->AddConfig("IsModelLayerFlatten", "true");//是否对模型起效
    tlo->AddConfig("IsTerrainLayerFlatten", "true");//是否对地形起效 
    tlo->AddConfig("IsActive", "false");//是否激活分析
    tlo->AddConfig("IsLoad", "true");//是否加载点集
    tlo->AddConfig("PointsIndex", "6");//每个区域顶点数量,以逗号分隔
    tlo->AddConfig("IsWorld","false" );//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标    
    tlo->AddConfig("Points", "120.219713587,30.210181099,14.9652935388;120.219204087,30.2109494013,14.7999706212;120.219001936,30.2109282088,14.7999637863;120.217848959,30.2104003907,14.7999738362;120.218369991,30.2096373799,14.8299520519;120.219761778,30.2100892772,14.7999550551;");//传入的点集
    areaFlatten->UpdateLayerOptions(tlo);//更新图层
}

//获取区域压平分析结果
void Cf1c8AreaflatteningDlg::OnBnClickedgetareaflattening()
{
    if(!areaFlatten)
    {
        return;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr opt = areaFlatten->GetLayerResult();
    std::string DataSourceTypeName = opt->GetConfigValueByKey("DataSourceTypeName");//获得数据源类型
    if(DataSourceTypeName == "as_areaflattening")
    {
        CString ClickPoints = opt->GetConfigValueByKey("ClickPoints");//获取点击点坐标
        MessageBox(L"ClickPoints:"+ ClickPoints);
    }
}

//删除区域压平
void Cf1c8AreaflatteningDlg::OnBnClickedremoveareaflattening()
{
    if(!areaFlatten)
    {
        return;
    }
    map->RemoveLayer(areaFlatten);//删除区域压平
    areaFlatten = NULL;
}

//显隐区域压平分析
void Cf1c8AreaflatteningDlg::OnBnClickedvisibleareaflattening()
{
    if(!areaFlatten)
    {
        return;
    }
    static bool areaFlattenVisble = true;
    areaFlatten->SetVisible(areaFlattenVisble = !areaFlattenVisble);//显隐区域压平
}

C#调用

ILayerObject areaFlatten;
//创建区域压平分析
private void createAreaFlattening_Click(object sender, EventArgs e)
{
    if (areaFlatten == null)
    {
        ILayerOptions mlo = map.CreateLayerOptions("areaFlatten");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_areaflattening");//数据源类型,as_areaflattening代表区域压平
        mlo.AddConfig("PointColor", "0,0,1,1.0");//点颜色
        mlo.AddConfig("PointSize", "5");//点大小
        mlo.AddConfig("AreaFlatteningLineColor", "0.1,0.5,0.8,0.9");//线颜色
        mlo.AddConfig("AreaNum", "1");//压平个数
        mlo.AddConfig("FlattenElevation", "-10");//压平高度。相对于地面的高度
        mlo.AddConfig("TiltAngle", "0");//压平为倾斜面的倾斜角度(相对于水平面的角度)
        mlo.AddConfig("ModelLayersID", "-1");//-1代表分析所有图层;"x,x,x"用,分隔代表分析指定id图层
        //mlo.AddConfig("ModelLayersIDEx,", modelLayer.GetLayerID());//区域压平区域排除图层ID
        mlo.AddConfig("RangeLineVisible", "true");//线显隐
        mlo.AddConfig("IsModelLayerFlatten", "true");//是否对模型起效
        mlo.AddConfig("IsTerrainLayerFlatten", "true");//是否对地形起效
        mlo.AddConfig("FlattenAreaFillType", "0");//填充方式。0-不填充;1-颜色填充;2-纹理填充;默认0
        mlo.AddConfig("PlaneFaceColor", "1,0,1,0.3");//顶面填充颜色
        mlo.AddConfig("SideFaceColor", "0,1,1,0.3");//侧面填充颜色
        mlo.AddConfig("PlaneFaceImagePath", "F:\\演示测试数据\\pine.png");//顶面填充纹理路径
        mlo.AddConfig("SideFaceImagePath", "F:\\演示测试数据\\water.jpg");//侧面填充纹理路径
        areaFlatten = map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
        map.AddLayer(areaFlatten);//添加图层
    }
    else
    {
        MessageBox.Show("请勿重复创建分析图层!");
    }
}
//更新区域压平分析
private void updateAreaFlattening_Click(object sender, EventArgs e)
{
    if (areaFlatten != null)
    {
        ILayerOptions mlo = map.CreateLayerOptions("areaFlatten");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_areaflattening");//数据源类型,as_areaflattening代表区域压平
        mlo.AddConfig("PointColor", "1,0,0,1.0");//点颜色
        mlo.AddConfig("PointSize", "5");//点大小
        mlo.AddConfig("AreaFlatteningLineColor", "1.0,0.5,0.8,0.9");//线颜色
        mlo.AddConfig("AreaNum", "1");//压平个数
        mlo.AddConfig("FlattenElevation", "20");//压平高度。相对于地面的高度
        mlo.AddConfig("TiltAngle", "0");//压平为倾斜面的倾斜角度(相对于水平面的角度)
        mlo.AddConfig("ModelLayersID", "-1");//分析操作模型图层Id列表,以逗号分隔,-1代表所有模型图层
        mlo.AddConfig("RangeLineVisible", "true");//线显隐
        mlo.AddConfig("IsModelLayerFlatten", "true");//是否对模型起效
        mlo.AddConfig("IsTerrainLayerFlatten", "true");//是否对地形起效 
        mlo.AddConfig("IsActive", "false");//是否激活分析
        mlo.AddConfig("IsLoad", "true");//是否加载点集
        mlo.AddConfig("PointsIndex", "6");//每个区域顶点数量,以逗号分隔
        mlo.AddConfig("IsWorld", "false");//传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标    
        mlo.AddConfig("Points", "120.219713587,30.210181099,14.9652935388;120.219204087,30.2109494013,14.7999706212;120.219001936,30.2109282088,14.7999637863;120.217848959,30.2104003907,14.7999738362;120.218369991,30.2096373799,14.8299520519;120.219761778,30.2100892772,14.7999550551;");//传入的点集
        areaFlatten.UpdateLayerOptions(mlo);//更新图层
    }
    else
    {
         MessageBox.Show("请创建分析图层再进行更新操作!");
    }
}
//获取区域压平分析结果
private void getAreaFlattening_Click(object sender, EventArgs e)
{
    if (areaFlatten != null)
    {
        ILayerOptions opt = areaFlatten.GetLayerResult();//获取图层结果
        //判断当前图层数据源类型
        if (opt.GetConfigValueByKey("DataSourceTypeName") == "as_areaflattening")
        {
            string ClickPoints = opt.GetConfigValueByKey("ClickPoints");//获取起始点坐标
             MessageBox.Show("ClickPoints:" + ClickPoints);
        }
    }
    else
    {
         MessageBox.Show("不存在分析图层,无法获取分析结果!");
    }
}
//删除区域压平
private void removeAreaFlattening_Click(object sender, EventArgs e)
{
    if (areaFlatten !=null)
    {
        map.RemoveLayer(areaFlatten);//删除图层
        areaFlatten = null;
    }
    else
    {
         MessageBox.Show("分析图层不存在,请勿重复删除!");
    }
}
//显隐区域压平分析
private void visibleAreaFlattening_Click(object sender, EventArgs e)
{
    if (areaFlatten!=null)
    {
        if (areaFlatteningVisble)
        {
            areaFlatteningVisble = false;
        }
        else
        {
            areaFlatteningVisble = true;
        }
        areaFlatten.SetVisible(areaFlatteningVisble);//显隐图层
    }
    else
    {
         MessageBox.Show("图层不存在,无法设置显隐!");
    }
}

results matching ""

    No results matching ""