PIE SDK地图图层渲染方案管理
1. 功能简介
在数据种类较多、渲染规则复杂的情况下,逐个设置其渲染方式是一件繁琐的工作。PIE SDK提供了一种省力省心的办法,
PIE SDK提供栅格和矢量数据渲染方案的打开与保存。能够将配色方案存储为xml文件,并能通过读取xml文件,实例化出Render对象,这将简化同类数据的渲染配置工作,并减少开发人员的代码维护。
栅格数据渲染方案控制主要是在程序开发之前,根据数据分类组织对应的渲染方案,实现在程序中能够动态的加载显示方案文件(简而言之就是每一个渲染方案都有一个指定的渲染方案xml文件),对指定图层进行渲染的。如下图右侧的渲染方案展示,只需要选择指定的渲染方案当前图层的显示就会改变。
渲染方案
2. 功能实现说明
2.1. 实现思路及原理说明
渲染方案保存 |
|
第一步 |
选中要导出渲染方案的图层。 |
第二步 |
选择渲染方案存储的路径,调用Pie SDK导出渲染方案的方法即可 |
渲染方案打开 |
|
第一步 |
选择渲染方案文件和目标栅格图层 |
第二步 |
调用Pie生产Render的方法,赋值目标矢量或者栅格图层的Render属性 |
第三步 |
地图视图刷新 |
渲染方案控制 |
|
第一步 |
组织渲染方案文件进行存储。 |
第二步 |
程序中进行加载和界面显示 |
第三步 |
通过事件触发加载渲染方案方法。 |
第四步 |
地图视图刷新 |
2.2. 核心接口与方法
接口/类 |
方法 |
说明 |
渲染方案保存与打开 |
||
Carto.RenderFactory |
ImportFromFile() |
栅格通过渲染方案生成Render |
ImportFromFile 1() |
矢量通过渲染方案生成Render |
|
ExportToFile |
将渲染方案存为xml文件 |
|
渲染方案控制(栅格) |
||
Carto.RenderFactory |
ImportFromFile() |
通过渲染方案生成Render |
2.3. 示例代码
项目路径 |
百度云盘地址下/PIE示例程序/07图层渲染/13.地图图层渲染方案管理 |
数据路径 |
百度云盘地址下/PIE示例数据/栅格数据或者矢量数据 |
视频路径 |
百度云盘地址下/PIE视频教程/07图层渲染/13.地图图层渲染方案管理.avi |
示例代码 |
|
1 #region 矢量渲染方案模块 2 /// <summary> 3 ///保存矢量渲染方案 4 /// </summary> 5 /// <param name="sender"></param> 6 /// <param name="e"></param> 7 private void btn_SaveVecRender_Click(object sender, EventArgs e) 8 { 9 //1、获取保存方案数据 10 ILayer layer = mapControlMain.ActiveView.FocusMap.GetLayer(0); 11 if (layer.LayerType != LayerType.LayerTypeFeatureLayer) return; 12 IFeatureLayer featureLayer = layer as IFeatureLayer; 13 //2、设置保存路径 14 SaveFileDialog saveDialog = new SaveFileDialog(); 15 saveDialog.Title = "保存显示方案"; 16 saveDialog.Filter = "Xml文件(*.xml)|*.xml"; 17 if (saveDialog.ShowDialog() != DialogResult.OK) return; 18 //3、执行保存方案 19 RenderFactory.ExportToFile(featureLayer.Render, saveDialog.FileName); 20 } 21 22 /// <summary> 23 /// 打开矢量数据渲染方案 24 /// </summary> 25 /// <param name="sender"></param> 26 /// <param name="e"></param> 27 private void tbn_OpenVecRender_Click(object sender, EventArgs e) 28 { 29 //1、获取保存方案数据 30 ILayer layer = mapControlMain.ActiveView.FocusMap.GetLayer(0); 31 if (layer.LayerType != LayerType.LayerTypeFeatureLayer) return; 32 IFeatureLayer featureLayer = layer as IFeatureLayer; 33 //2、选择渲染的方案 34 OpenFileDialog openDialog = new OpenFileDialog(); 35 openDialog.Title = "打开渲染方案"; 36 openDialog.Filter = "渲染方案(*.xml)|*.xml"; 37 if (openDialog.ShowDialog() != DialogResult.OK) return; 38 //3、执行渲染并刷新 39 featureLayer.Render = RenderFactory.ImportFromFile1(openDialog.FileName); 40 mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); 41 } 42 #endregion 43 44 #region 栅格渲染方案模块 45 /// <summary> 46 /// 保存栅格渲染方案 47 /// </summary> 48 /// <param name="sender"></param> 49 /// <param name="e"></param> 50 private void btn_SaveRasterRender_Click(object sender, EventArgs e) 51 { 52 //1、获取保存方案数据 53 ILayer layer = mapControlMain.ActiveView.FocusMap.GetLayer(0); 54 if (layer.LayerType != LayerType.LayerTypeRasterLayer) return; 55 IRasterLayer rasterLayer = layer as IRasterLayer; 56 //2、设置保存路径 57 SaveFileDialog saveDialog = new SaveFileDialog(); 58 saveDialog.Title = "保存显示方案"; 59 saveDialog.Filter = "Xml文件(*.xml)|*.xml"; 60 if (saveDialog.ShowDialog() != DialogResult.OK) return; 61 //3、执行保存方案 62 RenderFactory.ExportToFile(rasterLayer.Render, saveDialog.FileName); 63 } 64 65 /// <summary> 66 /// 打开栅格渲染方案 67 /// </summary> 68 /// <param name="sender"></param> 69 /// <param name="e"></param> 70 private void btn_OpenRasterRender_Click(object sender, EventArgs e) 71 { 72 //1、获取保存方案数据 73 ILayer layer = mapControlMain.ActiveView.FocusMap.GetLayer(0); 74 if (layer.LayerType != LayerType.LayerTypeRasterLayer) return; 75 IRasterLayer rasterLayer = layer as IRasterLayer; 76 //2、选择渲染的方案 77 OpenFileDialog openDialog = new OpenFileDialog(); 78 openDialog.Title = "打开渲染方案"; 79 openDialog.Filter = "渲染方案(*.xml)|*.xml"; 80 if (openDialog.ShowDialog() != DialogResult.OK) return; 81 //3、执行渲染并刷新 82 rasterLayer.Render = RenderFactory.ImportFromFile(openDialog.FileName); 83 mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); 84 } 85 86 /// <summary> 87 /// 栅格渲染控制案例 88 /// </summary> 89 /// <param name="sender"></param> 90 /// <param name="e"></param> 91 private void btn_RasterRenderControl_Click(object sender, EventArgs e) 92 { 93 ILayer layer = mapControlMain.ActiveView.FocusMap.GetLayer(0); 94 if (layer.LayerType != LayerType.LayerTypeRasterLayer) return; 95 IRasterLayer rasterLayer = layer as IRasterLayer; 96 FormDynamicRender FrmDialog = new FormDynamicRender(rasterLayer, mapControlMain.ActiveView); 97 FrmDialog.Owner = this; 98 FrmDialog.Show(); 99 } 100 #endregion |
2.4. 示例截图