2.2.11 地形编辑


地形编辑

地形编辑是指在场景中绘制多边形区域,然后将区域内的地形进行压平、抬高、降低等操作,并实现边缘羽化操作。

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

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

下图是地形编辑效果:

  

参数说明

地形编辑可配置的参数如下表所示:

配置项 配置说明 值类型 备注
LayerOptionsName 图层配置对象名称 string 分析图层需配置为:AnalysisLayerOptions
DataSourceTypeName 数据源类型 string as_terrainmodify代表地形编辑
PointColor 点颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
PointSize 点大小 float 点大小取值范围在1-10之间
TerrainModifyLineColor 线颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
TerrainModifyFeatherLineColor 羽化线颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
Feather 羽化值 int 范围为0~290,羽化可将区域内外的衔接部分进行缓冲处理,羽化值越大,缓冲的范围越大,递变越柔和,羽化值越小,缓冲的范围越小
HeightToBe 抬高高度 double 编辑区域抬高高度
IsFlat 是否压平 bool 是否将范围内地形进行压平操作。默认为false
IsLoad 是否初始化加载点 bool 默认为false
IsActive 是否激活分析 bool 默认为true,表示是否可操作场景进行绘制
Points 坐标点集 x,y,z列表 需传入经度,纬度,高程坐标集,中间用;分隔,并以;结尾
IsWorld 是否世界坐标点 bool 传入的坐标是否是世界坐标。true-世界坐标,false-经纬度坐标。默认为true

获取结果说明

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

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

代码调用示例

Javascript调用

var terrainmodifyLayer;
//创建地形编辑
function createTerrainmodify(){
    var tlo = map.CreateLayerOptions("terrainmodify");//创建分析图层配置,给配置起个名称,任意名称
    tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions"); // 创建配置类型, AnalysisLayerOptions代表分析图层数据配置,必须是此键值对
    tlo.AddConfig("DataSourceTypeName", "as_terrainmodify");//数据源类型,as_terrainmodify代表地形编辑
    tlo.AddConfig("PointColor","1,0,0,1.0");//点颜色(RGBA)
    tlo.AddConfig("PointSize","5");//点大小
    tlo.AddConfig("TerrainModifyLineColor","0,1,1,0.6");//画线颜色(RGBA)
    tlo.AddConfig("TerrainModifyFeatherLineColor","1,1,0,0.6");//内部羽化线颜色(RGBA)
    tlo.AddConfig("Feather","20");//羽化值,范围为0~290,羽化可将区域内外的衔接部分进行缓冲处理
    tlo.AddConfig("HeightToBe","50");//抬高高度
    tlo.AddConfig("IsFlat","false");//是否置平,默认为false,若设置为true,则会将范围内地形的高程全部置为0,并根据HeightToBe的值进行抬高
    //预加载,以下配置必须同时使用
    //tlo.AddConfig("IsLoad", "true");//是否预加载,默认为false
    //tlo.AddConfig("IsActive", "false");//是否继续绘制,默认为true
    //tlo.AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,默认为true,true为世界坐标,false为经纬度坐标
    //tlo.AddConfig("Points", "120.213040834876,30.209479892386,4.980181667954;120.213491011831,30.208005374381,6.163221096620;120.215122556393,30.208568532129,5.789473541081;120.214734160471,30.210047327587,5.818018587306;");//预加载点位
    terrainmodifyLayer= map.CreateLayer("AnalysisLayer", tlo); ////创建分析图层,第一项参数必须为AnalysisLayer
    map.AddLayer(terrainmodifyLayer); ///添加分析图层    
}
//更新地形编辑
function UpdateTerrainmodify(){
    var tlo = map.CreateLayerOptions("terrainmodify");//创建分析图层配置,给配置起个名称,任意名称
    tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions"); // 创建配置类型, AnalysisLayerOptions代表分析图层数据配置,必须是此键值对
    tlo.AddConfig("DataSourceTypeName", "as_terrainmodify");//数据源类型,as_terrainmodify代表地形编辑
    tlo.AddConfig("PointColor","1,0,0,1.0");//点颜色(RGBA)
    tlo.AddConfig("PointSize","5");//点大小
    tlo.AddConfig("TerrainModifyLineColor","0,1,1,0.6");//画线颜色(RGBA)
    tlo.AddConfig("TerrainModifyFeatherLineColor","1,1,0,0.6");//内部羽化线颜色(RGBA)
    tlo.AddConfig("Feather","40");//羽化值,范围为0~290,羽化可将区域内外的衔接部分进行缓冲处理
    tlo.AddConfig("HeightToBe","70");//抬高高度
    tlo.AddConfig("IsFlat","true");//是否置平,默认为false,若设置为true,则会将范围内地形的高程全部置为0,并根据HeightToBe的值进行抬高
    //预加载,以下配置必须同时使用
    //tlo.AddConfig("IsLoad", "true");//是否预加载,默认为false
    //tlo.AddConfig("IsActive", "false");//是否继续绘制,默认为true
    //tlo.AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,默认为true,true为世界坐标,false为经纬度坐标
    //tlo.AddConfig("Points", "120.213040834876,30.209479892386,4.980181667954;120.213491011831,30.208005374381,6.163221096620;120.215122556393,30.208568532129,5.789473541081;120.214734160471,30.210047327587,5.818018587306;");//预加载点位
    terrainmodifyLayer.UpdateLayerOptions(tlo);//更新地形编辑
}

//获取地形编辑结果
function getTerrainmodify(){
    if(terrainmodifyLayer){
        var opt = terrainmodifyLayer.GetLayerResult();//获取图层结果
        //判断当前图层数据源类型
        if(opt.GetConfigValueByKey("DataSourceTypeName") == "as_terrainmodify"){
            var FeatherSucceeded = opt.GetConfigValueByKey("FeatherSucceeded");//获取是否羽化成功
            alert("FeatherSucceeded:" + FeatherSucceeded);
            var ClickPoints = opt.GetConfigValueByKey("ClickPoints");//获取点坐标
            alert("ClickPoints:" + ClickPoints);
        }
    }else{
        alert("不存在分析图层,无法获取分析结果!");
    }
}

//删除地形编辑
function RemoveTerrainmodify(){
    if(terrainmodifyLayer){
        map.RemoveLayer(terrainmodifyLayer);//删除图层
        terrainmodifyLayer = null;
    }else{
        alert("图层不存在,请勿重复删除!");
    }
}

//显隐地形编辑
var TerrainmodifyVisble = true;
function VisibleTerrainmodify() {
    if (TerrainmodifyVisble) {
        TerrainmodifyVisble = false;
    } else {
        TerrainmodifyVisble = true;
    }
    terrainmodifyLayer.SetVisible(TerrainmodifyVisble); /////显隐
}

C++调用

BaseObjectCOMLib::ILayerObjectPtr terrainmodifyLayer;//地形编辑图层对象
void CterrainmodifyDlg::OnBnClickedcreateterrainmodify()
{
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("terrainmodify");//创建分析图层配置,给配置起个名称,任意名称
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions"); // 创建配置类型, AnalysisLayerOptions代表分析图层数据配置,必须是此键值对
    tlo->AddConfig("DataSourceTypeName", "as_terrainmodify");//数据源类型,as_terrainmodify代表地形编辑
    tlo->AddConfig("PointColor","1,0,0,1.0");//点颜色(RGBA)
    tlo->AddConfig("PointSize","5");//点大小
    tlo->AddConfig("TerrainModifyLineColor","0,1,1,0.6");//画线颜色(RGBA)
    tlo->AddConfig("TerrainModifyFeatherLineColor","1,1,0,0.6");//内部羽化线颜色(RGBA)
    tlo->AddConfig("Feather","20");//羽化值,范围为0~290,羽化可将区域内外的衔接部分进行缓冲处理
    tlo->AddConfig("HeightToBe","50");//抬高高度
    tlo->AddConfig("IsFlat","false");//是否置平,默认为false,若设置为true,则会将范围内地形的高程全部置为0,并根据HeightToBe的值进行抬高
    //预加载,以下配置必须同时使用
    //tlo->AddConfig("IsLoad", "true");//是否预加载,默认为false
    //tlo->AddConfig("IsActive", "false");//是否继续绘制,默认为true
    //tlo->AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,默认为true,true为世界坐标,false为经纬度坐标
    //tlo->AddConfig("Points", "120.213040834876,30.209479892386,4.980181667954;120.213491011831,30.208005374381,6.163221096620;120.215122556393,30.208568532129,5.789473541081;120.214734160471,30.210047327587,5.818018587306;");//预加载点位
    terrainmodifyLayer= map->CreateLayer("AnalysisLayer", tlo); ////创建分析图层,第一项参数必须为AnalysisLayer
    map->AddLayer(terrainmodifyLayer); ///添加分析图层    
}


void CterrainmodifyDlg::OnBnClickedUpdateterrainmodify()
{
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("terrainmodify");//创建分析图层配置,给配置起个名称,任意名称
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions"); // 创建配置类型, AnalysisLayerOptions代表分析图层数据配置,必须是此键值对
    tlo->AddConfig("DataSourceTypeName", "as_terrainmodify");//数据源类型,as_terrainmodify代表地形编辑
    tlo->AddConfig("PointColor","1,0,0,1.0");//点颜色(RGBA)
    tlo->AddConfig("PointSize","5");//点大小
    tlo->AddConfig("TerrainModifyLineColor","0,1,1,0.6");//画线颜色(RGBA)
    tlo->AddConfig("TerrainModifyFeatherLineColor","1,1,0,0.6");//内部羽化线颜色(RGBA)
    tlo->AddConfig("Feather","40");//羽化值,范围为0~290,羽化可将区域内外的衔接部分进行缓冲处理
    tlo->AddConfig("HeightToBe","70");//抬高高度
    tlo->AddConfig("IsFlat","true");//是否置平,默认为false,若设置为true,则会将范围内地形的高程全部置为0,并根据HeightToBe的值进行抬高
    //预加载,以下配置必须同时使用
    //tlo->AddConfig("IsLoad", "true");//是否预加载,默认为false
    //tlo->AddConfig("IsActive", "false");//是否继续绘制,默认为true
    //tlo->AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,默认为true,true为世界坐标,false为经纬度坐标
    //tlo->AddConfig("Points", "120.213040834876,30.209479892386,4.980181667954;120.213491011831,30.208005374381,6.163221096620;120.215122556393,30.208568532129,5.789473541081;120.214734160471,30.210047327587,5.818018587306;");//预加载点位
    terrainmodifyLayer->UpdateLayerOptions(tlo);//更新地形编辑
}


void CterrainmodifyDlg::OnBnClickedgetterrainmodify()
{
    if(terrainmodifyLayer){
        ConfigOptionsCOMLib::ILayerOptionsPtr opt = terrainmodifyLayer->GetLayerResult();//获取图层结果
        //判断当前图层数据源类型
        std::string DataSourceTypeName = opt->GetConfigValueByKey("DataSourceTypeName");//获得数据源类型
        if(DataSourceTypeName == "as_terrainmodify"){
            CString FeatherSucceeded = opt->GetConfigValueByKey("FeatherSucceeded");//获取是否羽化成功
            MessageBox(L"FeatherSucceeded:" + FeatherSucceeded);
            CString ClickPoints = opt->GetConfigValueByKey("ClickPoints");//获取点坐标
            MessageBox(L"ClickPoints:" + ClickPoints);
        }
    }else{
        MessageBox(L"不存在分析图层,无法获取分析结果!");
    }
}


void CterrainmodifyDlg::OnBnClickedRemoveterrainmodify()
{
    if(terrainmodifyLayer){
        map->RemoveLayer(terrainmodifyLayer);//删除图层
        terrainmodifyLayer = NULL;
    }else{
        MessageBox(L"图层不存在,请勿重复删除!");
    }
}

//显隐地形编辑
bool TerrainmodifyVisble = true;
void CterrainmodifyDlg::OnBnClickedVisibleterrainmodify()
{
    if (TerrainmodifyVisble) {
        TerrainmodifyVisble = false;
    } else {
        TerrainmodifyVisble = true;
    }
    terrainmodifyLayer->SetVisible(TerrainmodifyVisble); /////显隐
}

C#调用

ILayerObject terrainmodifyLayer;
//创建地形编辑
private void createTerrainmodify_Click(object sender, EventArgs e)
{
    ILayerOptions tlo = map.CreateLayerOptions("terrainmodify");//创建分析图层配置,给配置起个名称,任意名称
    tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions"); // 创建配置类型, AnalysisLayerOptions代表分析图层数据配置,必须是此键值对
    tlo.AddConfig("DataSourceTypeName", "as_terrainmodify");//数据源类型,as_terrainmodify代表地形编辑
    tlo.AddConfig("PointColor", "1,0,0,1.0");//点颜色(RGBA)
    tlo.AddConfig("PointSize", "5");//点大小
    tlo.AddConfig("TerrainModifyLineColor", "0,1,1,0.6");//画线颜色(RGBA)
    tlo.AddConfig("TerrainModifyFeatherLineColor", "1,1,0,0.6");//内部羽化线颜色(RGBA)
    tlo.AddConfig("Feather", "20");//羽化值,范围为0~290,羽化可将区域内外的衔接部分进行缓冲处理
    tlo.AddConfig("HeightToBe", "50");//抬高高度
    tlo.AddConfig("IsFlat", "false");//是否置平,默认为false,若设置为true,则会将范围内地形的高程全部置为0,并根据HeightToBe的值进行抬高
    //预加载,以下配置必须同时使用
    //tlo.AddConfig("IsLoad", "true");//是否预加载,默认为false
    //tlo.AddConfig("IsActive", "false");//是否继续绘制,默认为true
    //tlo.AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,默认为true,true为世界坐标,false为经纬度坐标
    //tlo.AddConfig("Points", "120.213040834876,30.209479892386,4.980181667954;120.213491011831,30.208005374381,6.163221096620;120.215122556393,30.208568532129,5.789473541081;120.214734160471,30.210047327587,5.818018587306;");//预加载点位
    terrainmodifyLayer = map.CreateLayer("AnalysisLayer", tlo); ////创建分析图层,第一项参数必须为AnalysisLayer
    map.AddLayer(terrainmodifyLayer); ///添加分析图层    
}

//更新地形编辑
private void UpdateTerrainmodify_Click(object sender, EventArgs e)
{
    ILayerOptions tlo = map.CreateLayerOptions("terrainmodify");//创建分析图层配置,给配置起个名称,任意名称
    tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions"); // 创建配置类型, AnalysisLayerOptions代表分析图层数据配置,必须是此键值对
    tlo.AddConfig("DataSourceTypeName", "as_terrainmodify");//数据源类型,as_terrainmodify代表地形编辑
    tlo.AddConfig("PointColor", "1,0,0,1.0");//点颜色(RGBA)
    tlo.AddConfig("PointSize", "5");//点大小
    tlo.AddConfig("TerrainModifyLineColor", "0,1,1,0.6");//画线颜色(RGBA)
    tlo.AddConfig("TerrainModifyFeatherLineColor", "1,1,0,0.6");//内部羽化线颜色(RGBA)
    tlo.AddConfig("Feather", "40");//羽化值,范围为0~290,羽化可将区域内外的衔接部分进行缓冲处理
    tlo.AddConfig("HeightToBe", "70");//抬高高度
    tlo.AddConfig("IsFlat", "true");//是否置平,默认为false,若设置为true,则会将范围内地形的高程全部置为0,并根据HeightToBe的值进行抬高
    //预加载,以下配置必须同时使用
    //tlo.AddConfig("IsLoad", "true");//是否预加载,默认为false
    //tlo.AddConfig("IsActive", "false");//是否继续绘制,默认为true
    //tlo.AddConfig("IsWorld","false" ); //传入的点位是否为世界坐标,默认为true,true为世界坐标,false为经纬度坐标
    //tlo.AddConfig("Points", "120.213040834876,30.209479892386,4.980181667954;120.213491011831,30.208005374381,6.163221096620;120.215122556393,30.208568532129,5.789473541081;120.214734160471,30.210047327587,5.818018587306;");//预加载点位
    terrainmodifyLayer.UpdateLayerOptions(tlo);//更新地形编辑
}

//获取地形编辑结果
private void getTerrainmodify_Click(object sender, EventArgs e)
{
    if (terrainmodifyLayer!=null)
    {
        ILayerOptions opt = terrainmodifyLayer.GetLayerResult();//获取图层结果
        //判断当前图层数据源类型
        if (opt.GetConfigValueByKey("DataSourceTypeName") == "as_terrainmodify")
        {
            string FeatherSucceeded = opt.GetConfigValueByKey("FeatherSucceeded");//获取是否羽化成功
            MessageBox.Show("FeatherSucceeded:" + FeatherSucceeded);
            string ClickPoints = opt.GetConfigValueByKey("ClickPoints");//获取点坐标
            MessageBox.Show("ClickPoints:" + ClickPoints);
        }
    }
    else
    {
        MessageBox.Show("不存在分析图层,无法获取分析结果!");
    }
}

//删除地形编辑
private void RemoveTerrainmodify_Click(object sender, EventArgs e)
{
    if (terrainmodifyLayer != null)
    {
        map.RemoveLayer(terrainmodifyLayer);//删除图层
        terrainmodifyLayer = null;
    }
    else
    {
        MessageBox.Show("图层不存在,请勿重复删除!");
    }
}

//显隐地形编辑
bool TerrainmodifyVisble = true;
private void VisibleTerrainmodify_Click(object sender, EventArgs e)
{
    if (TerrainmodifyVisble)
    {
        TerrainmodifyVisble = false;
    }
    else
    {
        TerrainmodifyVisble = true;
    }
    terrainmodifyLayer.SetVisible(TerrainmodifyVisble); /////显隐
}

results matching ""

    No results matching ""