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
|
示例代码
|
#region 矢量渲染方案模块
/// <summary>
///保存矢量渲染方案
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_SaveVecRender_Click(object sender, EventArgs e)
{
//1、获取保存方案数据
ILayer layer = mapControlMain.ActiveView.FocusMap.GetLayer();
if (layer.LayerType != LayerType.LayerTypeFeatureLayer) return;
IFeatureLayer featureLayer = layer as IFeatureLayer;
//2、设置保存路径
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.Title = "保存显示方案";
saveDialog.Filter = "Xml文件(*.xml)|*.xml";
if (saveDialog.ShowDialog() != DialogResult.OK) return;
//3、执行保存方案
RenderFactory.ExportToFile(featureLayer.Render, saveDialog.FileName);
}
/// <summary>
/// 打开矢量数据渲染方案
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tbn_OpenVecRender_Click(object sender, EventArgs e)
{
//1、获取保存方案数据
ILayer layer = mapControlMain.ActiveView.FocusMap.GetLayer();
if (layer.LayerType != LayerType.LayerTypeFeatureLayer) return;
IFeatureLayer featureLayer = layer as IFeatureLayer;
//2、选择渲染的方案
OpenFileDialog openDialog = new OpenFileDialog();
openDialog.Title = "打开渲染方案";
openDialog.Filter = "渲染方案(*.xml)|*.xml";
if (openDialog.ShowDialog() != DialogResult.OK) return;
//3、执行渲染并刷新
featureLayer.Render = RenderFactory.ImportFromFile1(openDialog.FileName);
mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
}
#endregion
#region 栅格渲染方案模块
/// <summary>
/// 保存栅格渲染方案
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_SaveRasterRender_Click(object sender, EventArgs e)
{
//1、获取保存方案数据
ILayer layer = mapControlMain.ActiveView.FocusMap.GetLayer();
if (layer.LayerType != LayerType.LayerTypeRasterLayer) return;
IRasterLayer rasterLayer = layer as IRasterLayer;
//2、设置保存路径
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.Title = "保存显示方案";
saveDialog.Filter = "Xml文件(*.xml)|*.xml";
if (saveDialog.ShowDialog() != DialogResult.OK) return;
//3、执行保存方案
RenderFactory.ExportToFile(rasterLayer.Render, saveDialog.FileName);
}
/// <summary>
/// 打开栅格渲染方案
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_OpenRasterRender_Click(object sender, EventArgs e)
{
//1、获取保存方案数据
ILayer layer = mapControlMain.ActiveView.FocusMap.GetLayer();
if (layer.LayerType != LayerType.LayerTypeRasterLayer) return;
IRasterLayer rasterLayer = layer as IRasterLayer;
//2、选择渲染的方案
OpenFileDialog openDialog = new OpenFileDialog();
openDialog.Title = "打开渲染方案";
openDialog.Filter = "渲染方案(*.xml)|*.xml";
if (openDialog.ShowDialog() != DialogResult.OK) return;
//3、执行渲染并刷新
rasterLayer.Render = RenderFactory.ImportFromFile(openDialog.FileName);
mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
}
/// <summary>
/// 栅格渲染控制案例
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_RasterRenderControl_Click(object sender, EventArgs e)
{
ILayer layer = mapControlMain.ActiveView.FocusMap.GetLayer();
if (layer.LayerType != LayerType.LayerTypeRasterLayer) return;
IRasterLayer rasterLayer = layer as IRasterLayer;
FormDynamicRender FrmDialog = new FormDynamicRender(rasterLayer, mapControlMain.ActiveView);
FrmDialog.Owner = this;
FrmDialog.Show();
}
#endregion
|
2.4. 示例截图