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. UVa 1625 Color Length (DP)

    题意:给定两个序列,让你组成一个新的序列,让两个相同字符的位置最大差之和最小.组成方式只能从一个序列前部拿出一个字符放到新序列中. 析:这个题状态表示和转移很容易想到,主要是在处理上面,dp[i][j ...

  2. QGIS编译教程

    注意更新时间:Thursday November 02, 2017 1. Introduction 简介 This document is the original installation guid ...

  3. APUE(3)---文件I/O (2)

    七.函数write #include <unistd.h> size_t write(int fd, const void *buf, size_t nbytes); //若成功,返回已写 ...

  4. scala冒泡排序

    scala冒泡排序: object Maopao { def main(args: Array[String]) { val list = List(1, 23, 432, 10, 23, 42, 3 ...

  5. 尝鲜.net core2.1 ——编写一个global tool

    本文内容参考微软工程师Nate McMaster的博文.NET Core 2.1 Global Tools 用过npm开发都知道,npm包都可以以全局的方式安装,例如安装一个http-server服务 ...

  6. java 七牛上传图片到服务器(采用的html5 压缩 传输base64方式)

    //html 页面如下<div class="form-group"> <label class="col-sm-2 control-label&quo ...

  7. C# 的 Task、Thread、ThreadPool 之间有什么异同?

    Thread就是Thread,需要自己调度,适合长跑型的操作. ThreadPool是Thread基础上的一个线程池,目的是减少频繁创建线程的开销.线程很贵,要开新的stack,要增加CPU上下文切换 ...

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

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

  9. firefox 59 无法使用 pac 代理上网

    最近装了 firefox,电脑配置不太高,chrome 太吃内存了. 但是发现 SwitchyOmega的 pac 模式无法工作,这篇文章提到了两个思路, 其中network.dns.disableI ...

  10. this指针------新标准c++程序设计

    背景:   c++是在c语言的基础上发展而来的,第一个c++的编译器实际上是将c++程序翻译成c语言程序,然后再用c语言编译器进行编译.c语言没有类的概念,只有结构,函数都是全局函数,没有成员函数.翻 ...