2.2.6 地形挖洞分析


地形挖洞分析

挖洞分析是指将三维地图中多边形区域内的地形挖空显示的功能。挖空地形后,用户可以看到地形下面的管线、管井、地下室、地下通道等内容。

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

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

下图是地形挖洞分析效果:

  

参数说明

地形挖洞分析可配置的参数如下表所示:

配置项 配置说明 值类型 备注
LayerOptionsName 图层配置对象名称 string 分析图层需配置为:AnalysisLayerOptions
DataSourceTypeName 数据源类型 string as_holeonterrain代表地形挖洞分析
PointColor 点颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
PointSize 点大小 float 点大小取值范围在1-10之间
HoleOnTerrainLineColor 线颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
IsLoad 是否初始化加载点 bool 默认为false
IsActive 是否激活分析 bool 默认为true,表示是否可操作场景进行绘制
Points 坐标点集 x,y,z列表 需传入经度,纬度,高程坐标集,中间用;分隔,并以;结尾
IsWorld 是否世界坐标点 bool 传入的坐标是否是世界坐标。true-世界坐标,false-经纬度坐标。默认为true

获取结果说明

地形挖洞分析可以通过图层对象的GetLayerResult() 方法获取结果。获取的结果值对象参数如下表所示:

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

代码调用示例

Javascript调用

var holeOnTerrain = null;
var HoleOnTerrainVisble = true;
//创建地形挖洞分析
function createHoleOnTerrain(){
    if(holeOnTerrain == null){
        var mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_holeonterrain");//数据源类型,as_holeonterrain代表挖洞分析
        mlo.AddConfig("PointColor", "0,0,1,1.0");//点颜色
        mlo.AddConfig("PointSize", "7");//点大小
        mlo.AddConfig("HoleOnTerrainLineColor", "0,1,0,1.0");//线颜色
        holeOnTerrain = map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
        map.AddLayer(holeOnTerrain);//添加图层
    }else{
        alert("请勿重复创建分析图层!");
    }
}
//更新地形挖洞分析
function updateHoleOnTerrain(){
    if(holeOnTerrain){
        var mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_holeonterrain");//数据源类型,as_holeonterrain代表挖洞分析
        mlo.AddConfig("HoleOnTerrainLineColor", "1.0,0.8,0.3,1.0");//线颜色
        //更新Points的时候需更新"IsLoad"和"IsActive";
        mlo.AddConfig("IsActive", "false");//是否激活绘制
        mlo.AddConfig("IsLoad", "true");//是否加载点集
        mlo.AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标    
        mlo.AddConfig("Points", "120.219732127,30.2124092402,14.5536;120.215729642,30.2106428447,14.7521779;120.215354601,30.2122187666,14.7682819897;120.218627939,30.2135537681,14.60795;");//传入点集
        holeOnTerrain.UpdateLayerOptions(mlo);//更新图层
    }else{
        alert("请创建分析图层再进行更新操作!");
    }
}
//获取地形挖洞分析结果
function getHoleOnTerrain(){
    if(holeOnTerrain){
        var opt = holeOnTerrain.GetLayerResult();//获取图层结果
        //判断当前图层数据源类型
        if(opt.GetConfigValueByKey("DataSourceTypeName") == "as_holeonterrain"){
            var ClickPoints = opt.GetConfigValueByKey("ClickPoints");//获取点击点坐标
            alert("ClickPoints:" + ClickPoints);
        }
    }else{
        alert("不存在分析图层,无法获取结果!");
    }
}
//移除地形挖洞分析
function removeHoleOnTerrain(){
    if(holeOnTerrain){
        map.RemoveLayer(holeOnTerrain);//移除图层
        holeOnTerrain = null;
    }else{
        alert("分析图层不存在,请勿重复删除!");
    }
}
//显隐地形挖洞分析
function visibleHoleOnTerrain(){
    if(holeOnTerrain){
        if(HoleOnTerrainVisble){
            HoleOnTerrainVisble = false;
        }else{
            HoleOnTerrainVisble = true;
        }
        holeOnTerrain.SetVisible(HoleOnTerrainVisble);//图层显隐
    }else{
        alert("图层不存在,无法设置显隐!");
    }
}

C++调用

BaseObjectCOMLib::ILayerObjectPtr holeOnTerrain;//地形挖洞分析图层对象//创建地形挖洞分析
void Cf1c6HoleonterrainDlg::OnBnClickedcreateholeonterrain()
{
    if(holeOnTerrain)
    {
        return;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    tlo->AddConfig("DataSourceTypeName", "as_holeonterrain");//数据源类型,as_holeonterrain代表挖洞分析
    tlo->AddConfig("PointColor", "0,0,1,1.0");//点颜色
    tlo->AddConfig("PointSize", "7");//点大小
    tlo->AddConfig("HoleOnTerrainLineColor", "0,1,0,1.0");//线颜色
    holeOnTerrain = map->CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数为AnalysisLayer
    map->AddLayer(holeOnTerrain);//添加图层
}

//更新地形挖洞分析
void Cf1c6HoleonterrainDlg::OnBnClickedupdateholeonterrain()
{
    if(!holeOnTerrain)
    {
        return;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    tlo->AddConfig("DataSourceTypeName", "as_holeonterrain");//数据源类型,as_holeonterrain代表挖洞分析
    tlo->AddConfig("HoleOnTerrainLineColor", "1.0,0.8,0.3,1.0");//线颜色
    //更新Points的时候需更新"IsLoad"和"IsActive";
    tlo->AddConfig("IsActive", "false");//是否激活绘制
    tlo->AddConfig("IsLoad", "true");//是否加载点集
    tlo->AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标    
        tlo->AddConfig("Points", "120.219732127,30.2124092402,14.5536;120.215729642,30.2106428447,14.7521779;120.215354601,30.2122187666,14.7682819897;120.218627939,30.2135537681,14.60795;");//传入点集
    holeOnTerrain->UpdateLayerOptions(tlo);//更新图层
}

//获取地形挖洞分析结果
void Cf1c6HoleonterrainDlg::OnBnClickedgetholeonterrain()
{
    if(!holeOnTerrain)
    {
        return;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr opt = holeOnTerrain->GetLayerResult();//获取图层结果
    std::string DataSourceTypeName = opt->GetConfigValueByKey("DataSourceTypeName");//获取数据源类型
    if(DataSourceTypeName == "as_holeonterrain")
    {
        CString ClickPoints = opt->GetConfigValueByKey("ClickPoints");//获取点击点坐标
        MessageBox(L"ClickPoints:"+ ClickPoints);
    }
}

//移除地形挖洞分析
void Cf1c6HoleonterrainDlg::OnBnClickedremoveholeonterrain()
{
    if(!holeOnTerrain)
    {
        return;
    }
    map->RemoveLayer(holeOnTerrain);//删除地形挖洞分析
    holeOnTerrain = NULL;
}

//显隐地形挖洞分析
void Cf1c6HoleonterrainDlg::OnBnClickedvisibleholeonterrain()
{
    if(!holeOnTerrain)
    {
        return;
    }
    static bool holeOnTerrainVisble = true;
    holeOnTerrain->SetVisible(holeOnTerrainVisble = !holeOnTerrainVisble); //显隐地形挖洞分析
}

C#调用

ILayerObject holeOnTerrain;
bool HoleOnTerrainVisble = true;
//创建地形挖洞分析
private void createHoleOnTerrain_Click(object sender, EventArgs e)
{
    if (holeOnTerrain == null)
    {
        ILayerOptions mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_holeonterrain");//数据源类型,as_holeonterrain代表挖洞分析
        mlo.AddConfig("PointColor", "0,0,1,1.0");//点颜色
        mlo.AddConfig("PointSize", "7");//点大小
        mlo.AddConfig("HoleOnTerrainLineColor", "0,1,0,1.0");//线颜色
        holeOnTerrain = map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
        map.AddLayer(holeOnTerrain);//添加图层
    }
    else
    {
        MessageBox.Show("请勿重复创建分析图层!");
    }
}
//更新地形挖洞分析
private void updateHoleOnTerrain_Click(object sender, EventArgs e)
{
    if (holeOnTerrain!=null)
    {
        ILayerOptions mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_holeonterrain");//数据源类型,as_holeonterrain代表挖洞分析
        mlo.AddConfig("HoleOnTerrainLineColor", "1.0,0.8,0.3,1.0");//线颜色
        //更新Points的时候需更新"IsLoad"和"IsActive";
        mlo.AddConfig("IsActive", "false");//是否激活绘制
        mlo.AddConfig("IsLoad", "true");//是否加载点集
        mlo.AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,true为世界坐标,false为经纬度坐标    
        mlo.AddConfig("Points", "120.219732127,30.2124092402,14.5536;120.215729642,30.2106428447,14.7521779;120.215354601,30.2122187666,14.7682819897;120.218627939,30.2135537681,14.60795;");//传入点集
        holeOnTerrain.UpdateLayerOptions(mlo);//更新图层
    }
    else
    {
        MessageBox.Show("请创建分析图层再进行更新操作!");
    }
}
//获取地形挖洞分析结果
private void button2_Click(object sender, EventArgs e)
{
    if (holeOnTerrain!=null)
    {
        ILayerOptions opt = holeOnTerrain.GetLayerResult();//获取图层结果
        //判断当前图层数据源类型
        if (opt.GetConfigValueByKey("DataSourceTypeName") == "as_holeonterrain")
        {
            string ClickPoints = opt.GetConfigValueByKey("ClickPoints");//获取点击点坐标
            MessageBox.Show("ClickPoints:" + ClickPoints);
        }
    }
    else
    {
        MessageBox.Show("不存在分析图层,无法获取结果!");
    }
}
//移除地形挖洞分析
private void removeHoleOnTerrain_Click(object sender, EventArgs e)
{
    if (holeOnTerrain!=null)
    {
        map.RemoveLayer(holeOnTerrain);//移除图层
        holeOnTerrain = null;
    }
    else
    {
        MessageBox.Show("分析图层不存在,请勿重复删除!");
    }
}
//显隐地形挖洞分析
private void visibleHoleOnTerrain_Click(object sender, EventArgs e)
{
    if (holeOnTerrain!=null)
    {
        if (HoleOnTerrainVisble)
        {
            HoleOnTerrainVisble = false;
        }
        else
        {
            HoleOnTerrainVisble = true;
        }
        holeOnTerrain.SetVisible(HoleOnTerrainVisble);//图层显隐
    }
    else
    {
        MessageBox.Show("图层不存在,无法设置显隐!");
    }
}

results matching ""

    No results matching ""