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 } |
2.4 示例截图
图1:算法执行结果图
图2:将图1进行唯一值渲染