SuperMap iClient 7C for Flash之热点图的时间轴控制

2024-02-25 11:18

本文主要是介绍SuperMap iClient 7C for Flash之热点图的时间轴控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:小阳

###一、概述
如今大数据时代的到来,数据可视化在人们的日常生活中扮演着越来越重要的角色,当然,热点图也是当中流行的一种数据可视化表达的手段之一。那什么是热点图呢?——热点图通常将一些不易理解或表达的数据,比如密度,频率,温度等,用区域和颜色这种更容易被人理解的方式来呈现的一种数据可视化手段。在热点图中,暖色一般代表事件发生频率比较高或事物分布密度比较大的区域,冷色反之。那热点图又有什么作用呢?—热点图能够明显的表现地图中事件发生的频率或者事物的分布密度。

既然本文讲述的是热点图,那为什么要加上时间轴呢?因为时间轴可以控制不同时间的不同显示状态,加上时间轴,就可以显示不同时间点的热力图了。下面我以某市区一天的五个时间点的景区人流量为例,对本范例做相关介绍和实现思路,详见后文。

###二、数据准备
热点数据是整个热点图的核心,它是一个包含了坐标信息,时间信息的点对象集合。在这里我们将所有热点用一个点数据集HeatPoints来存储:
这里写图片描述

并在为HeatPoints一个日期字段TIMEINDEX,字段类型为日期或文本,本范使用的字段类型为日期:
这里写图片描述

数据准备完后前端要对该数据集进行查询,可使用如下两个方案对数据进行发布。如果没有数据服务的许可,只能使用方案二。
方案一:将工作空间发布为或REST-地图服务和REST-数据服务(推荐)
方案二:将HeatPoints叠加到地图中,并设置为不可见,再将工作空间发布为REST-地图服务。

###三、开发要点
本范例中使用的是方案一的发布方式。实现的思路是采用数据集查询的方式对数据进行查询,将查询到的featrues绑定到TimeSlider上,随着时间轴的切换对featurelayer进行监听,获取不同时间点featurelayer的featrues,并转换为heatpoints加载到HeatMapLayer上。
####1、 添加相关组件

<ic:Map id="map"  ><ic:TiledDynamicRESTLayer url="{this.restUrl}" tileSize="256"/><ic:FeaturesLayer id="fl" isFront="false" isFeatureMouseOver="false"  alpha="0"  updateEnd="fl_updateEndHandler(event)"/><ic:HeatMapLayer id="heatMap" radius="20" alpha="0.9" heatStops="{SetHeatStops()}"/>
</ic:Map>
<ic:TimeSlider id="timeSlider" bottom="20" width="387" layer="{fl}" 
timeChange="timeSlider_timeChangeHandler(event)" 
creationComplete="timeSlider_creationCompleteHandler(event)"
horizontalCenter="0" isAccumulatedDisplay="false" />
<s:Label id="timeLabel" fontFamily="微软雅黑" fontSize="14" fontWeight="bold" color="0XFFFFCC" horizontalCenter="-23" bottom="50" />

TiledDynamicRESTLayer在这里作为地图底图的加载与显示,可能有人会问:那么FeaturesLayer是做什么的呢,用过时间轴(即TimeSlider)的开发人员应该都知道,TimeSlider 有一个 layer属性用来绑定用于显示要素的FeatureLayer或者是GraphicsLayer,由于TimeSlider不能直接绑定HeatMapLayer(即热点图层),这里就用FeatureLayer绑定TimeSlider,并且FeatureLayer的透明度为0,即不可见,这样做的目的是为了获取时间轴在不同时间点的热点数据,在这里FeatureLayer实质上只起到了一个数据的临时存储作用,如果数据量相对来说比较大的话,请使用GraphicsLayer,这一点很关键。
####2、事件函数
热点数据的SQL查询

private function init():void
{		
restUrl="http://192.168.15.99:8090/iserver/services/map-heatmap/rest/maps/heatmap_night";				
dataUrl="http://192.168.15.99:8090/iserver/services/data-heatmap/rest/data/featureResults";
var queryParams:Array = ["Changchun:HeatPoint"];
var queryBySQLParameters:GetFeaturesBySQLParameters = new GetFeaturesBySQLParameters();
queryBySQLParameters.datasetNames = queryParams;
queryBySQLParameters.toIndex=-1;
var filterParameter:FilterParameter = new FilterParameter();
filterParameter.attributeFilter = "SMID>0";
queryBySQLParameters.filterParameter = filterParameter;
var getFeaturesBySQL:GetFeaturesBySQLService = new GetFeaturesBySQLService(this.dataUrl);	
getFeaturesBySQL.processAsync(queryBySQLParameters, new AsyncResponder(this.dispalyQueryRecords,excuteErros,null));
}

获取时间轴的要素数据
feature.attributes.TIMEINDEX=DateFormatter.parseDateString(feature.attributes.TIMEINDEX); 这行代码很关键,因为SQL查询出来的feature对象TIMEINDEX属性为字符型,而timeslider需要使用Date型的对象,所以需要将该属性重新进行对象转换。

private function dispalyQueryRecords(result:GetFeaturesResult, mark:Object):void
{var features:Array = result.features;if(features.length == 0){Alert.show("查询结果为空", "提示", 4, this);return; }else{  for each(var feature:Feature in result.features){
feature.attributes.TIMEINDEX=DateFormatter.parseDateString(feature.attributes.TIMEINDEX); //转字符为时间对象
this.timeData.features.addItem(feature);}
}              
var timeStops:Array = new Array();
for(var i:int = 0; i < 5; i++)
{
var date:Date =  new Date(2015,0,1,6+i*3,0,0);
timeStops.push(date);
}
var startTime:Date = new Date(2015,0,1,6,0,0);   //月份从0开始
timeData.timeStops = timeStops;
var endTime:Date = new Date(2015,0,1,18,0,0);
timeData.startTime = startTime;
timeData.endTime = endTime; 
timeData.timeField="TIMEINDEX";				
timeSlider.timeData=this.timeData;		
}

颜色过渡站点的设置
设置HeatMapLayer热点圆渐变填充中的颜色过渡站点(HeatStop)集合。其中站点的信息包括位置和颜色。

private function SetHeatStops():Array
{var setHeatStops:Array=[];setHeatStops.push(new HeatStop(0XFF0000,1));setHeatStops.push(new HeatStop(0XFF6600,0.98));setHeatStops.push(new HeatStop(0XFFFF00,0.8));setHeatStops.push(new HeatStop(0X33FF33,0.5));setHeatStops.push(new HeatStop(0X6633CC,0.1));return setHeatStops;
}

时间轴的要素数据转换为热点(heatpoint)
由于热点图层中的加载的为heatpoint对象,在做时间轴切换的时候,相应的点是以feature的形式加载在featurelayer上面的,在这里,我们的思路是:找到时间轴的一个监听事件,在做时间切换的时候可以触发一个函数,可以获取到此时featurelayer上的feature集合,将featurelayer上的features临时转换为heatpoint集合,这样就实现了一个热点数据的获取。答案是肯定的。

在这里,我们需要在featurelayer上写updateEnd事;同时还要在TimeSlider
上写timechange事件,目的是为了保证在时间轴进行切换的时候,能够及时触发featurelayer的刷新。

这里写图片描述
这里写图片描述

protected function fl_updateEndHandler(event:LayerEvent):void
{
heatpoints=[];
for each(var feature:Feature in fl.features)
{
heatpoints.push(new HeatPoint(feature.geometry.center.x,feature.geometry.center.y));
}
heatMap.heatPoints=heatpoints;				
}
protected function timeSlider_timeChangeHandler(event:TimeSliderEvent):void
{
fl.refresh();	
timeLabel.text=dateFormatter.format(this.timeSlider.timeStops[this.timeSlider.slider.value]);
}

最后的实现效果图如下:
这里写图片描述

这篇关于SuperMap iClient 7C for Flash之热点图的时间轴控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/745305

相关文章

Java研学-RBAC权限控制(八)

九 登录登出 1 登录作用   判断员工是否有权限访问,首先得知道现在操作的人是谁,所以必须先实现登录功能 2 登录流程   ① 提供登录页面,可输入用户名与密码信息,并添加执行登录的按钮。(登录页面不能被拦截)   ② 给按钮绑定点击事件(异步操作,POST请求)   ③ 事件中发送登录请求,使用 AJAX 方式提交。(使用 AJAX 原因:用户体验更好,既可保留用户刚输入的用户名和密码

ROS2从入门到精通4-4:局部控制插件开发案例(以PID算法为例)

目录 0 专栏介绍1 控制插件编写模板1.1 构造控制插件类1.2 注册并导出插件1.3 编译与使用插件 2 基于PID的路径跟踪原理3 控制插件开发案例(PID算法)常见问题 0 专栏介绍 本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。 🚀详情:《ROS2从入门到精通》 1 控制插

MQTT之CONNECT控制报文详解

目录 1.  MQTT协议规范 2.  名词解释 3.  CONNECT控制报文详解 3.1  固定报头 Fixed header 3.2  可变报头 Variable header 3.2.1  协议名 Protocol Name 3.2.2  协议级别 Protocol Level 3.2.3  连接标志 Connect Flags 3.2.4  保持连接 Keep

STM32单片机PWR电源控制详解

文章目录 1. PWR概述 2. 电源结构框图 3. 上电复位和掉电复位 4. 可编程电压监测器 5. 低功耗模式 6. 模式选择 6.1 睡眠模式 6.2 停止模式 6.3 待机模式 7. 代码示例 1. PWR概述 PWR(Power Control)电源控制,负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能。 可编程电压监测器

google gemini1.5 flash视频图文理解能力初探(一)

市面能够对视频直接进行分析的大模型着实不多,而且很多支持多模态的大模型那效果着实也不好。 从这篇公众号不只是100万上下文,谷歌Gemini 1.5超强功能展示得知,Gemini 1.5可以一次性处理1小时的视频、11小时的音频或100,000行代码,并衍生出更多的数据分析玩法。能力覆盖: 跨模式理解和推理,当给出一部 44 分钟的巴斯特-基顿(Buster Keaton)无声电影时,该模型能准

基于动力学的六自由度机器人阻抗恒力跟踪控制

1.整个代码的控制流程图如下: 2.正逆运动学计算 略 3.动力学模型 采用拉格朗日法计算机械臂的动力学模型,其输入的是机械臂的关节角度、角速度和角加速度;其中M、C、G本别是计算的惯性力、科式力和重力项,相关部分如下: 4.RBF神经网络自适应参数调节 采用RBF自适应调节阻抗控制器参数,末端每个方向单独进行参数的调整,其中rbf的输入的是力和位置,输出的是阻抗控制器的参数,rb

LabVIEW编程控制ABB机械臂

使用LabVIEW编程控制ABB机械臂是一项复杂但十分有价值的任务。通过LabVIEW,可以实现对机械臂的精确控制和监控,提升自动化水平和操作效率。 1. 项目规划和硬件选型 1.1 确定系统需求 运动控制:确定机械臂需要执行的任务,如抓取、搬运、装配等。 传感器集成:确定需要集成的传感器,如位置传感器、力传感器、视觉传感器等。 通讯接口:确定与ABB机械臂控制器的通讯接口,如Ethe

Ubuntu安装火狐Flash Player插件

1、进入官网下载页面选择:.tar.gz,适用于其他Linux。此次文件名为install_flash_player_11_linux.x86_64.tar.gz 2、解压文件 tar -zxvf install_flash_player_11_linux.x86_64.tar.gz 3、利用whereis命令查找mozilla文件夹的路径 whereis mozill

[技术笔记] 元器件采购之Flash的国内、外厂商Top5

国外Top5 1、Micron(镁光)半导体 2、Toshiba(东芝) 3、Hynix(海力士) 4、Samsung(三星) 5、Intel(因特尔) 6、SanDisk(闪迪) 7、Nanya(南亚科技) 8、SCSemicon(华芯科技) 中国企业在主流通用型存储器的市场全球市占率比较低,而在NOR Flash利基存储器领域成长了一批优秀企业,包括兆易创新、东芯股份

【Vite】控制打包结构

配置 vite.config.json 文件: import { defineConfig } from "vite";export default defineConfig({// ...build: {rollupOptions: {output: {entryFileNames: "js/[name]-[hash].js",chunkFileNames: "js/[name]-[hash]