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. 示例截图

PIE SDK地图图层渲染方案管理的更多相关文章

  1. PIE SDK栅格图层渲染变化事件监听

    1. 功能简介 通过PIE SDK加载图层后,会默认的赋值给数据一个渲染.当用户重新给数据赋值Render或改变数据显示效果时,会触发渲染变化事件. 所谓的事件监听是在事件触发时,将执行用户指定的函数 ...

  2. PIE SDK地图图层控制

    1. 功能简介 地图图层控制就是图层的相关操作,如地图图层数据的添加.删除.移动和拖拽等功能. 2. 功能实现说明 2.1. 实现思路及原理说明 第一步 图层添加是调用AddLayer方法将图层添加到 ...

  3. PIE SDK矢量数据简单渲染

    1. 功能简介 PIE SDK对数据的符号化分为矢量数据渲染和栅格数据渲染两大类. 目前PIE SDK中针对矢量数据渲染包括简单渲染.唯一值渲染.分级渲染.自定义渲染:针对栅格数据渲染包括拉伸渲染.R ...

  4. PIE SDK矢量自定义渲染

    1. 功能简介 PIE SDK中关于矢量渲染提供了多种方案,包括简单渲染.分级渲染.唯一值渲染,这几种渲染方式具有一定的通用性,可以满足用户绝大多数的需求. 当面对复杂的业务,当前渲染方案无法满足用户 ...

  5. PIE SDK栅格拉伸渲染

    1. 功能简介 栅格数据拉伸渲染是对指定的波段进行图像拉伸,并设置拉伸之后的颜色带,根据像元值和颜色带进行数据渲染. 2. 功能实现说明 2.1. 实现思路及原理说明 第一步 实例化拉伸渲染对象示例 ...

  6. PIE SDK栅格RGB渲染

    1. 功能简介 RGB色彩模式是一种颜色标准,是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红.绿.蓝三个通道的颜色,这个标准几乎包 ...

  7. PIE SDK矢量分级渲染

    1. 功能简介 分级渲染是矢量的一种数据表达方式.通过选取一个字段,并根据实际需要对字段的数据进行分级,并对每一级设置不同的符号,已达到区分显示的效果. 2. 功能实现说明 2.1. 实现思路及原理说 ...

  8. PIE SDK栅格分级渲染

    1.  功能简介 栅格数据分级渲染是根据不同的分级规则,对像元值进行等级划分:并通过对每一级设置不同的显示符号和标注信息,从而达到分级显示的效果. 2.功能实现说明 2.1. 实现思路及原理说明 第一 ...

  9. PIE SDK地图范围设置和图层事件监听

    1. 功能简介 地图范围设置的监听就是通过IMapControlEvents接口对地图的视图范围更新或者地图的分辨率发生变化进行监听,然后做出相应的操作. 图层事件的监听就是通过IActiveView ...

随机推荐

  1. 第十九课 pluginlib&Nodelet

    把rgb摄像头的数据转换为laser的时候使用了Nodelet. pluginlib(插件库) 在ros中有一个plugin的包,下面是一个ROS Plugin Registration的例子 上面包 ...

  2. css总结15:CSS3 圆角

    1 css圆角: 1.1 浏览器支持:-webkit- 或 -moz- 前面的数字表示支持该前缀的第一个版本. 1.2 属性 border-radius: 代码如下: #rcorners1 { bor ...

  3. C#序列化xml,开发常用

    序列化操作对于开发人员来说最熟悉不过了. 序列化分为:序列化和反序列化. 序列化名词解释:序列化是将对象状态转换为可保持或传输的格式的过程. 与序列化相对的是反序列化,它将流转换为对象.这两个过程结合 ...

  4. Java变量的修饰符

    1.public public的类.类属变量及方法,包内及包外的任何类均可以访问: 2.protect protected的类.类属变量及方法,包内的任何类,及包外的那些继承了此类的子类才能访问: 3 ...

  5. C# 真正完美的 汉字转拼音

    网上有很多说自己整理的汉字转拼音是完美的,但使用后才发现都是半吊的瓶子,问题多多. 常见的生僻字,或多音字识别,转换后简直让人感觉可怕. 主流的转换有三种:hash匹配,Npinyin,微软PinYi ...

  6. 数据库索引与b+树

    数据库索引详解 索引 当我们在设计数据库的时候,对表的一些属性有时会加上索引,但索引为什么能提高检索速率呢?是不是用了索引就一定可以提高效率呢?不同索引之间有什么区别呢?搞懂这些问题是灵活运用索引的必 ...

  7. C#时常需要调用C++DLL

    在合作开发时,C#时常需要调用C++DLL,当传递参数时时常遇到问题,尤其是传递和返回字符串是,现总结一下,分享给大家: VC++中主要字符串类型为:LPSTR,LPCSTR, LPCTSTR, st ...

  8. StackOverflow: 你没见过的七个最好的Java答案

    StackOverflow发展到目前,已经成为了全球开发者的金矿.它能够帮助我们找到在各个领域遇到的问题的最有用的解决方案,同时我们也会从中学习到很多新的东西.这篇文章是在我们审阅了StackOver ...

  9. loj #2508. 「AHOI / HNOI2018」游戏

    #2508. 「AHOI / HNOI2018」游戏 题目描述 一次小 G 和小 H 在玩寻宝游戏,有 nnn 个房间排成一列,编号为 1,2,…,n,相邻房间之间都有 111 道门.其中一部分门上有 ...

  10. vue的生命周期钩子函数

    一.vue生命周期图示 二.钩子函数执行时间 beforeCreate      在创建实例之前,data只声明但没有赋值  在实例初始化之后,数据观测 (data observer) 和 event ...