• PIE SDK栅格矢量化算法


    1.算法功能简介

      栅格数据矢量化较为复杂,如果由一幅扫描的数字化地图来建立矢量数据库,则需要经过数字图象处理,如边缘增强、细化、二值化、特征提取及模式识别才能获得矢量数据.人们通常将多色地图分色后逐个元素(如等高线地貌、水系、道路网、地物、符号与注记等)加以识别和提取.如果将数字影像矢量化,则需要事先做好重采样、图象处理、影像匹配和影像理解等过程,才能将影像上的语义和非语义信息提取出来,并形成矢量形式的数据

      PIE支持栅格矢量化算法功能的执行,下面对该算法功能进行介绍。

    2.算法功能实现说明

    2.1 实现步骤

    第一步

    算法参数设置

    第二步

    算法执行

    第三步

    结果显示

    2.2 算法参数

    算法名称

    栅格矢量化

    C#算法DLL

    PIE.CommonAlgo.dll

    C#算法名称

    PIE.CommonAlgo.RasterToVectorAlgo

    参数结构体

    RasterVectorization_Exchange_Info

    参数说明

    pchrasterIndexImgPath

    String

    索引图路径、即输入的影像路径

    indexList

    IList<Int>

    类别列表

    pixList

    IList<Int>

    类别对应像素列表

    indexNameList

    IList<String>

    类别名称列表

    savingPathList

    IList<String>

    保存路径列表

    vpixTable

    IList<Int>

    像素值索引表,通常默认为0 参数可以不设置

    isSaveAsOneFile

    bool

    是否保存单个文件标志

    isCountPolygonInfo

    bool

    是否计算面信息

    isNoGeoTransform

    bool

    是否进行地理坐标转化

    m_strOutFile

    String

    输出矢量数据

     

    2.3 示例代码

    数据路径

    百度云盘地址下/ PIE示例数据/栅格数据/ 08.图像分类/distanceClassify-Julei.tif

    示例代码

     1 /// <summary>
     2 /// 栅格矢量化  对分类后的影像distanceClassify-Julei.tif进行矢量化,该类共有5类;
     3 /// </summary>
     4 public void RasterToVector()
     5 {
     6     RasterVectorization_Exchange_Info info = new RasterVectorization_Exchange_Info();
     7     info.indexList = new List<int> {0,1,2,3,4};//类别列表
     8     info.indexNameList = new List<string> {"Unclassified","water","veg","bare","town" };//类别名称列表
     9     info.isCountPolygonInfo = false;
    10     info.isSaveAsOneFile = true;//是否保存单个文件 fasle 保存多个文件
    11     info.pchrasterIndexImgPath = @"D:data图像分类2distanceClassify-Julei.tif";//输入的栅格路径
    12     info.pixList = new List<int> { 0, 1, 2, 3, 4 };//类别对应像素列表 和类别列表对应
    13     info.savingPathList = new List<string> {@"D:data图像分类2distanceClassify-Julei_Re.shp" };//保存路径列表:若保存单个文件,一个输出路径即可,若输出多个文件,输出路径即为每一类生成文件路径
    14     //info.vpixTable = new List<int>(); ;//像素值索引表, 可以设置这个参数,默认是0
    15 
    16     PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.RasterToVectorAlgo");
    17     if (algo == null) return;
    18 
    19     PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents;
    20     algo.Name = "栅格矢量化";
    21     algo.Params = info;
    22     bool result = PIE.SystemAlgo.AlgoFactory.Instance().ExecuteAlgo(algo);
    23     if (result)
    24     {
    25         MessageBox.Show("栅格矢量化算法执行成功");
    26         IList<ILayer> listLayer = LayerFactory.CreateDefaultLayers(info.savingPathList);           
    27         if (listLayer == null) return;
    28         m_HookHelper.ActiveView.FocusMap.AddLayers(listLayer);
    29         m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
    30     }
    31 }
    View Code

    2.4 示例截图

     

    图1:算法执行结果图

     

    图2:将图1进行唯一值渲染

  • 相关阅读:
    JVM,反射与动态代理
    11款实用的一句话网站设计代码
    Winform TextBox中只能输入数字的几种常用方法(C#)
    列表checkbox全选
    函数调用约定
    vs编译后在本机能运行,在别的机器上运行提示runtime Error的问题
    学习地形编程(一)
    Ogre中动态三维鼠标的实现
    讲讲volatile的作用
    绕任意轴旋转的推导
  • 原文地址:https://www.cnblogs.com/PIESat/p/11251208.html
Copyright © 2020-2023  润新知