2.2.9 缓冲区分析


缓冲区分析

缓冲区分析是指在平面内的某一实体的周围,自动建立一定宽度范围内的缓冲地带的功能。SDK支持点缓冲区、线缓冲区和面缓冲区三种功能。

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

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

下图是缓冲区分析效果:

  

参数说明

缓冲区分析可配置的参数如下表所示:

配置项 配置说明 值类型 备注
LayerOptionsName 图层配置对象名称 string 分析图层需配置为:AnalysisLayerOptions
DataSourceTypeName 数据源类型 string as_buffer代表缓冲区分析
PointColor 点颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
PointSize 点大小 float 点大小取值范围在1-10之间
LineWidth 线宽度 float 线宽度取值范围在1-10之间
BufferAnalysisLineColor 线颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
PolygonColor 面颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
DrawableType 缓冲区类型 int 0-点缓冲区;1-线缓冲区;2-面缓冲区;默认0
BufferCapStyle 缓冲区末端类型 int 1-方形;2-圆形;3-平头;默认2
BufferDistance 缓冲区宽度 double 线宽度取值范围在1-10之间
BufferColor 缓冲区颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
IsSingleSide 是否单侧绘制 bool 只对线缓冲区起效。true-单侧;false-两侧;默认为false
IsLeftSide 是否左侧绘制 bool 只对线缓冲区起效,并且IsSingleSide 为true时起效。 true-左侧;false-右侧;默认为false
LiftUp 抬高高度 float 将整个缓冲区抬高高度。单位(m) 默认为0.0
IsLoad 是否初始化加载点 bool 默认为false
IsActive 是否激活分析 bool 默认为true,表示是否可操作场景进行绘制
Points 坐标点集 x,y,z列表 需传入经度,纬度,高程坐标集,中间用;分隔,并以;结尾
IsWorld 是否世界坐标点 bool 传入的坐标是否是世界坐标。true-世界坐标,false-经纬度坐标。默认为true

获取结果说明

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

配置项 配置说明 值类型 备注
DataSourceTypeName 数据源类型 string as_buffer代表缓冲区分析
DrawableType 缓冲区类型 int 0-点缓冲区;1-线缓冲区;2-面缓冲区;默认0
ClickPoints 点击点坐标 x,y,z列表 鼠标点击场景形成的关键点的经度,纬度,高程坐标列表,中间用;分隔,并以;结尾
BufferOutlinePoints 缓冲区外围点集 x,y,z列表 缓冲区外围所有关键点的经度,纬度,高程坐标列表,中间用;分隔,并以;结尾
BufferOutlinePointsIndexs 点集索引 int列表 每个区域内包含的关键点集索引列表,中间用,分隔

代码调用示例

Javascript调用

var bufferLayer = null;
//创建缓冲区分析
function createBuffer(){
    if(bufferLayer == null){
        var mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_buffer");//数据源类型,as_buffer代表缓冲区分析
        mlo.AddConfig("PointColor", "0,0.3,0.8,1.0");//点颜色
        mlo.AddConfig("PointSize", "10");//点大小(1-10)
        mlo.AddConfig("LineWidth", "1.0" );//线宽(1-10)
        mlo.AddConfig("BufferAnalysisLineColor", "0,1.0,0.2,1.0");//缓冲区分析线颜色
        mlo.AddConfig("PolygonColor", "0,0.9,0.7,1.0");//面颜色
        mlo.AddConfig("DrawableType", "2");//绘制体类型:0-点;1-线;2-面
        mlo.AddConfig("BufferDistance", "15");//缓冲区宽度
        mlo.AddConfig("BufferColor", "0.9,0,0.7,1.0");//缓冲区颜色
        mlo.AddConfig("BufferCapStyle", "3");//线缓冲区末端类型。1-方形;2-圆形;3-平头
        mlo.AddConfig("IsSingleSide", "true");//线缓冲区是否为单侧:true-单侧;false-两侧
        mlo.AddConfig("IsLeftSide", "false");//线缓冲区是否往左侧绘制:true-左侧;false-右侧
        mlo.AddConfig("LiftUp", "1.0");//抬高高度
        bufferLayer= map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
        map.AddLayer(bufferLayer); ///添加图层
    }else{
        alert("请勿重复创建分析图层!");
    }
}
//更新缓冲区分析
function updateBuffer(){
    if(bufferLayer){
        var mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_buffer");//数据源类型,as_buffer代表缓冲区分析
        mlo.AddConfig("PointColor", "1,0,0,1.0");//点颜色
        mlo.AddConfig("PointSize", "10");//点大小(1-10)
        mlo.AddConfig("LineWidth", "10.0");//线宽(1-10)
        mlo.AddConfig("BufferAnalysisLineColor", "0,1.0,0.2,1.0");//缓冲区分析线颜色
        mlo.AddConfig("PolygonColor", "0,0.9,0.7,1.0");//面颜色
        mlo.AddConfig("DrawableType", "1");//绘制体类型:0-点;1-线;2-面
        mlo.AddConfig("BufferDistance", "15");//缓冲区宽度
        mlo.AddConfig("BufferCapStyle", "2");//缓冲区末端类型。1-方形;2-圆形;3-平头
        mlo.AddConfig("BufferColor", "0.9,0.2,0.9,1.0");//缓冲区颜色
        mlo.AddConfig("IsSingleSide", "false");//线缓冲区是否为单侧:true-单侧;false-两侧
        mlo.AddConfig("IsLeftSide", "false");//线缓冲区是否往左侧绘制:true-左侧;false-右侧
        bufferLayer.UpdateLayerOptions(mlo);//更新图层
    }else{
        alert("请创建分析图层再进行更新操作!");
    }
}
//获取缓冲区分析结果
function getBuffer(){
    if(bufferLayer){
        var opt = bufferLayer.GetLayerResult();//获取图层结果
        //判断当前图层数据源类型
        if(opt.GetConfigValueByKey("DataSourceTypeName") == "as_buffer"){
            var Points = opt.GetConfigValueByKey("ClickPoints");//获取点击点坐标
            var DrawableType = opt.GetConfigValueByKey("DrawableType");//绘制体类型:
            var BufferPoints = opt.GetConfigValueByKey("BufferOutlinePoints");//缓冲区外围点集
            var BufferPointsIndex = opt.GetConfigValueByKey("BufferOutlinePointsIndexs");//点集索引
            alert("Points:" + Points + "\nBufferPoints:" + BufferPoints + "\nBufferPointsIndex:" + BufferPointsIndex);
        }
    }else{
        alert("不存在分析图层,无法获取结果);
    }
}
//移除缓冲区分析
function removeBuffer(){
    if(bufferLayer){
        map.RemoveLayer(bufferLayer);//删除图层
        bufferLayer = null;
    }else{
        alert("分析图层不存在,请勿重复删除!");
    }
}

C++调用

BaseObjectCOMLib::ILayerObjectPtr bufferLayer;//缓冲区分析图层对象
//创建缓冲区分析
void Cf1c9BufferDlg::OnBnClickedcreatebuffer()
{
    if(bufferLayer)
    {
        return;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    tlo->AddConfig("DataSourceTypeName", "as_buffer");//数据源类型,as_buffer代表缓冲区分析
    tlo->AddConfig("PointColor", "0,0.3,0.8,1.0");//点颜色
    tlo->AddConfig("PointSize", "10");//点大小(1-10)
    tlo->AddConfig("LineWidth", "1.0" );//线宽(1-10)
    tlo->AddConfig("BufferAnalysisLineColor", "0,1.0,0.2,1.0");//缓冲区分析线颜色
    tlo->AddConfig("PolygonColor", "0,0.9,0.7,1.0");//面颜色
    tlo->AddConfig("DrawableType", "1");//绘制体类型:0-点;1-线;2-面
    tlo->AddConfig("BufferDistance", "15");//缓冲区宽度
    tlo->AddConfig("BufferColor", "0.9,0,0.7,1.0");//缓冲区颜色
    tlo->AddConfig("BufferCapStyle", "3");//缓冲区末端类型。1-方形;2-圆形;3-平头
    tlo->AddConfig("IsSingleSide", "false");//线缓冲区是否为单侧:true-单侧;false-两侧
    tlo->AddConfig("IsLeftSide", "false");//线缓冲区是否为左侧:true-左侧;false-右侧
    bufferLayer = map->CreateLayer("AnalysisLayer", tlo);//创建分析图层,第一项参数为AnalysisLayer
    map->AddLayer(bufferLayer);//添加图层
}

//更新缓冲区分析
void Cf1c9BufferDlg::OnBnClickedupdatebuffer()
{
    if(!bufferLayer)
    {
        return;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions(""); //创建图层配置对象,任意名称
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
    tlo->AddConfig("DataSourceTypeName", "as_buffer");//数据源类型,as_buffer代表缓冲区分析
    tlo->AddConfig("PointColor", "1,0,0,1.0");//点颜色
    tlo->AddConfig("PointSize", "10");//点大小(1-10)
    tlo->AddConfig("LineWidth", "10.0");//线宽(1-10)
    tlo->AddConfig("BufferAnalysisLineColor", "0,1.0,0.2,1.0");//缓冲区分析线颜色
    tlo->AddConfig("PolygonColor", "0,0.9,0.7,1.0");//面颜色
    tlo->AddConfig("DrawableType", "2");//绘制体类型:0-点;1-线;2-面
    tlo->AddConfig("BufferDistance", "15");//缓冲区宽度
    tlo->AddConfig("BufferCapStyle", "2");//缓冲区末端类型。1-方形;2-圆形;3-平头
    tlo->AddConfig("BufferColor", "0.9,0.2,0.9,1.0");//缓冲区颜色
    tlo->AddConfig("IsSingleSide", "false");//线缓冲区是否为单侧:true-单侧;false-两侧
    tlo->AddConfig("IsLeftSide", "false");//线缓冲区是否为左侧:true-左侧;false-右侧
    bufferLayer->UpdateLayerOptions(tlo);//更新图层s
}

//获取缓冲区分析结果
void Cf1c9BufferDlg::OnBnClickedgetbuffer()
{
    if(!bufferLayer)
    {
        return;
    }
    ConfigOptionsCOMLib::ILayerOptionsPtr opt = bufferLayer->GetLayerResult();
    std::string DataSourceTypeName = opt->GetConfigValueByKey("DataSourceTypeName");//获取数据源类型
    if(DataSourceTypeName == "as_buffer")
    {
        CString ClickPoints = opt->GetConfigValueByKey("ClickPoints");//获取点击点坐标
        CString DrawableType = opt->GetConfigValueByKey("DrawableType");//绘制体类型:
        CString BufferOutlinePoints = opt->GetConfigValueByKey("BufferOutlinePoints");//缓冲区外围点集
        CString BufferOutlinePointsIndexs = opt->GetConfigValueByKey("BufferOutlinePointsIndexs");//点集索引
        MessageBox(L"ClickPoints:"+ ClickPoints+ L"\r\nDrawableType:"+DrawableType+L"\r\nBufferOutlinePoints"+BufferOutlinePoints+L"\r\nBufferOutlinePointsIndexs"+BufferOutlinePointsIndexs);
    }
}

//移除缓冲区分析
void Cf1c9BufferDlg::OnBnClickedremovebuffer()
{
    if(!bufferLayer)
    {
        return;
    }
    map->RemoveLayer(bufferLayer);//删除缓冲区分析
    bufferLayer = NULL;
}

C#调用

ILayerObject bufferLayer = null;
//创建缓冲区分析
private void createBuffer_Click(object sender, EventArgs e)
{
    if (bufferLayer == null)
    {
        ILayerOptions mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_buffer");//数据源类型,as_buffer代表缓冲区分析
        mlo.AddConfig("PointColor", "0,0.3,0.8,1.0");//点颜色
        mlo.AddConfig("PointSize", "10");//点大小(1-10)
        mlo.AddConfig("LineWidth", "1.0");//线宽(1-10)
        mlo.AddConfig("BufferAnalysisLineColor", "0,1.0,0.2,1.0");//缓冲区分析线颜色
        mlo.AddConfig("PolygonColor", "0,0.9,0.7,1.0");//面颜色
        mlo.AddConfig("DrawableType", "1");//绘制体类型:0-点;1-线;2-面
        mlo.AddConfig("BufferCapStyle", "3");//缓冲区末端类型。1-方形;2-圆形;3-平头
        mlo.AddConfig("BufferDistance", "15");//缓冲区宽度
        mlo.AddConfig("BufferColor", "0.9,0,0.7,1.0");//缓冲区颜色
        mlo.AddConfig("IsSingleSide", "true");//线缓冲区是否为单侧:true-单侧;false-两侧
        mlo.AddConfig("IsLeftSide", "false");//线缓冲区是否为左侧:true-左侧;false-右侧
        mlo.AddConfig("LiftUp", "1.0");//抬高高度
        bufferLayer = map.CreateLayer("AnalysisLayer", mlo);//创建分析图层,第一项参数为AnalysisLayer
        map.AddLayer(bufferLayer); ///添加图层
    }
    else
    {
        MessageBox.Show("请勿重复创建分析图层!");
    }
}
//更新缓冲区分析
private void updateBuffer_Click(object sender, EventArgs e)
{
    if (bufferLayer != null)
    {
        ILayerOptions mlo = map.CreateLayerOptions("");//创建图层配置对象,任意名称
        mlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称, AnalysisLayerOptions代表分析图层数据配置
        mlo.AddConfig("DataSourceTypeName", "as_buffer");//数据源类型,as_buffer代表缓冲区分析
        mlo.AddConfig("PointColor", "1,0,0,1.0");//点颜色
        mlo.AddConfig("PointSize", "10");//点大小(1-10)
        mlo.AddConfig("LineWidth", "10.0");//线宽(1-10)
        mlo.AddConfig("BufferAnalysisLineColor", "0,1.0,0.2,1.0");//缓冲区分析线颜色
        mlo.AddConfig("PolygonColor", "0,0.9,0.7,1.0");//面颜色
        mlo.AddConfig("DrawableType", "2");//绘制体类型:0-点;1-线;2-面
        mlo.AddConfig("BufferDistance", "15");//缓冲区宽度
        mlo.AddConfig("BufferCapStyle", "2");//缓冲区末端类型。1-方形;2-圆形;3-平头
        mlo.AddConfig("BufferColor", "0.9,0.2,0.9,1.0");//缓冲区颜色
        mlo.AddConfig("IsSingleSide", "false");//线缓冲区是否为单侧:true-单侧;false-两侧
        mlo.AddConfig("IsLeftSide", "false");//线缓冲区是否为左侧:true-左侧;false-右侧
        bufferLayer.UpdateLayerOptions(mlo);//更新图层
    }
    else
    {
        MessageBox.Show("请创建分析图层再进行更新操作!");
    }
}
//获取缓冲区分析结果
private void getBuffer_Click(object sender, EventArgs e)
{
    if (bufferLayer!=null)
    {
        ILayerOptions opt = bufferLayer.GetLayerResult();//获取图层结果
        //判断当前图层数据源类型
        if (opt.GetConfigValueByKey("DataSourceTypeName") == "as_buffer")
        {
            string Points = opt.GetConfigValueByKey("ClickPoints");//获取点击点坐标
            var DrawableType = opt.GetConfigValueByKey("DrawableType");//绘制体类型:
            string BufferPoints = opt.GetConfigValueByKey("BufferOutlinePoints");//缓冲区外围点集
            string BufferPointsIndex = opt.GetConfigValueByKey("BufferOutlinePointsIndexs");//点集索引
            MessageBox.Show("Points:" + Points + "\nBufferPoints:" + BufferPoints + "\nBufferPointsIndex:" + BufferPointsIndex);
        }
    }
    else
    {
        MessageBox.Show("不存在分析图层,无法获取结果);
    }
}
//移除缓冲区分析
private void removeBuffer_Click(object sender, EventArgs e)
{
    if (bufferLayer!=null)
    {
        map.RemoveLayer(bufferLayer);//删除图层
        bufferLayer = null;
    }
    else
    {
        MessageBox.Show("分析图层不存在,请勿重复删除!");
    }
}

results matching ""

    No results matching ""