javascript如何写热点图

在gis中,你如果用js来写热点图 不借助后台怎么搞,as的话比较容易有相应的类库甚至官方都有。而且用js不借助arcgis发布rest服务,(注:热点图可以借助服务的形式发布,arcgis for javascript有相应的api支持的),这个时候就比较麻烦了,首先说明下热点图是啥?

热点图是以点的形式展示,通过补全周边变化颜色也会相应的调整渐变,类似于足球某个人的运动范围那种,我找了下有个heapmap可以实现heapmap.js和heapmap-arcgis.js

因为arcigs for javascript api 是以dojo为基础写的,所以加载类库方式以下

var djConfig = {

parseOnLoad: true

};

写了工具类去使用这个类库

/**

* 管理热点图展示 关闭 这里默认以社区为单位 url可改 热点图需要在主页面加上热点 div层 类似map的div

* 这个版本先以一个xml来展示 以后改为json的格式

*/

var HeatLayerManager = function()

{

var map;

var heatLayer;

var graphicLayer;

var polygonTemp;

var queryVo= new QueryVO();

var ajaxTool;

var locateParameter = new LocateParameter();

var symbolTool;

var isMouseInfo = true;

//查询社区的url来覆盖 人口信息

var paramBackFun;

function renderQuery(queryVo1,polygon,roundFlag,paramBackFun1)

{

paramBackFun = paramBackFun1;

var layerName = queryVo1.layerName;

graphicLayer.clear();

var url = locateParameter.getUrl(layerName);

if(url != "")

{

var querytask = new esri.tasks.QueryTask(url);

var query = new esri.tasks.Query();

if(layerName != "shi")

{

query.geometry = polygon;

}

else

{

query.where = "FID >= 0"

}

query.returnGeometry = true;

query.outSpatialReference = map.spatialReference;

if(roundFlag == "false")

{

query.spatialRelationship = esri.tasks.Query.SPATIAL_REL_CONTAINS;

}

query.outFields = ["*"];

querytask.execute(query, handle);

}

}

function handle(idResults)

{

graphicLayer.clear();

var param = new Object();

param.codearr = [];

for (var i = 0, il = idResults.features.length; i < il; i++)

{

var idResult = idResults.features[i];

var polygon = idResult.geometry;

var gra = new esri.Graphic(polygon);

var attributes = idResult.attributes;

param.codearr[i] = attributes[locateParameter.getCodeName(queryVo.layerName)];

var graattribute = new Object();

graattribute["code"] = attributes[locateParameter.getCodeName(queryVo.layerName)];

gra.setAttributes(graattribute);

gra.setSymbol(symbolTool.getSymbol("heat"));

graphicLayer.add(gra);

}

paramBackFun(param);

}

//查询java后台 组织json参数

function ajaxQuery(param)

{

param.startDate = queryVo.startDate;

param.endDate = queryVo.endDate;

param.layerName = queryVo.layerName;

param.tjfs = queryVo.tjfs;

var str = JSON.stringify(param);

//alert("ajaxQuery-param: "+str);

//--------------------------------------测试环境用

ajaxTool.getLiuDongData1(str,ajaxBack);

//-------------------------------------

//--------------------------------------真实环境用

// ajaxTool.getLiuDongData(str,ajaxBack);

//-------------------------------------

}

function ajaxBack(obj,num1)

{

//组装 map对象便于遍历graphic

if('2'==queryVo.tjfs){

alert("时间段");

var arr = obj.codearr;

}else{

var arr = obj.codearr;

var mapobj = new Object();

for(var i = 0, l = arr.length; i < l; i++)

{

var arrobj = arr[i];

mapobj[arrobj.CODE] = arrobj;

//alert("ajaxBack: "+arrobj.CODE);

}

//--------------------------------------真实环境用

//var graarr = graphicLayer.graphics;

//var dataarr = [];

//for(var j = 0, m = graarr.length; j < m; j++)

//{

// var gra = graarr[j];

// var codeValue = gra.attributes["code"];

// // 暂时码值转换

// var codeobj;

// if("shi"==queryVo.layerName){

// //alert(changeAreaCode(codeValue));

// codeobj = mapobj[changeAreaCode(codeValue)];

// }else{

// codeobj = mapobj[codeValue];

// }

// //alert("codeValue: "+codeValue);

// if(codeobj!=null){

// var pcount = codeobj.PCOUNT;

// var point = gra.geometry.getCentroid();

// var feobj = {

// attributes: {count:Number(pcount)},

// geometry: {

// spatialReference: map.spatialReference,

// type: "point",

// x: point.x,

// y: point.y

//

// }

// }

// dataarr.push(feobj);

// }

// gra.attributes["codeVaue"] = codeobj;

//}

//-------------------------------------

//--------------------------------------测试环境用

var graarr = graphicLayer.graphics;

var dataarr = [];

var pcountnum = 0.1;

for(var j = 0, m = graarr.length; j < m; j++)

{

var gra = graarr[j];

var codeValue = gra.attributes["code"];

var codeobj = mapobj["440304008001"];

var pcount = pcountnum;

var point = gra.geometry.getCentroid();

var feobj = {

attributes: {count:Number(pcount)},

geometry: {

spatialReference: map.spatialReference,

type: "point",

x: point.x,

y: point.y

}

}

if(num1 == undefined)

{

num1 = 0.01

}

pcountnum = pcountnum + num1;

dataarr.push(feobj);

gra.attributes["codeVaue"] = codeobj;

}

//-------------------------------------

heatLayer.setData(dataarr);

}

}

/**

* 外界返回鼠标移动查询填充图层

* @returns {*}

*/

this.getHeatLocateLayer = function()

{

return graphicLayer;

}

/**

* 外界返回热点图层

* @returns {*}

*/

this.getHeatlayer = function()

{

return heatLayer;

}

/**

* 初始化热点图

* @param healayerdiv 主页heatlayer div的id

* @param map1

*/

this.init = function initHeatLayer(healayerdiv,map1)

{

map = map1;

heatLayer = new HeatmapLayer({

config: {

"useLocalMaximum": true,

"radius": 40,

"gradient": {

0.45: "rgb(000,000,255)",

0.55: "rgb(000,255,255)",

0.65: "rgb(000,255,000)",

0.95: "rgb(255,255,000)",

1.00: "rgb(255,000,000)"

}

},

"map": map,

"domNodeId": healayerdiv,

"opacity": 0.85

});

graphicLayer = new esri.layers.GraphicsLayer();

map.addLayer(heatLayer);

map.addLayer(graphicLayer);

ajaxTool = new AjaxTool();

symbolTool = new SymbolTool();

// map.resize();

}

this.ajaxBackFun= function(obj,num1)

{

ajaxBack(obj,num1);

}

/**

* 根据查询数据渲染热点图

* 现在可能是固定死的xml,下次 转json 可能要有参数 以后定

*/

this.addRender = function(queryVo1,polygon)

{

addRenderFun(queryVo1,polygon,ajaxQuery)

}

//简化方法类 增加回调

function addRenderFun(queryVo1,polygon,paramBackFun1)

{

polygonTemp = polygon;

queryVo = queryVo1;

renderQuery(queryVo,polygon,"false",paramBackFun1);

}

/**

*

* @param queryVo1

* @param polygon

* @param paramBackFun1

*/

this.addRenderCallBack = function(queryVo1,polygon,paramBackFun1)

{

addRenderFun(queryVo1, polygon, paramBackFun1);

}

/**

* 清除热点图的数据

*/

this.clearHeatLayer = function()

{

heatLayer.clearData();

}

function changeAreaCode(code){

var resuCode="";

var areaCode = ["440305","440326","440306","440309","440308",

"440304","440303","440327","440317","440307"];

var mapCode = ["440305002","440306007","440306001","440306012","440308001",

"440304003","440303005","440307012","440307009","440307006"];

for(i=0;i

if(code==mapCode[i]){

resuCode = areaCode[i];

break;

}

}

return resuCode;

}

}

以上就是为大家分享的如何实现热点图的关键代码,希望对大家的学习有所帮助。相关阅读:

C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析

分享一个iOS下实现基本绘画板功能的简单方法

asp.net生成缩略图示例方法分享

深入解析PHP中逗号与点号的区别

第三篇Bootstrap网格基础

去掉字符串前后所有空格的正则表达式

Android中制作进度框和环形进度条的简单实例分享

Highcharts入门之简介

如何获得Linux系统的内置模块和设备驱动列表

比较简单的百度网盘文件直链PHP代码

用CSS实现textArea中的placeholder换行功能

深入解析C++和JAVA的字符串

ASP.NET比较常用的26个性能优化技巧

Linux如何提高大文件的拷贝效率以节约时间

php 热点图,JavaScript_javascript如何写热点图,在gis中,你如果用js来写热点 - phpStudy...相关推荐

  1. 应聘计算机简历中的爱好怎么写,关于求职个人简历中的爱好特长应该怎么写

    个人简历除去个人信息资料,学习,工作经历,兴趣爱好,还有一项就是个人特长与爱好,那特长爱好又该怎么写呢?在求职中为什么还要写个人特长与爱好呢?这是否跟工作有关系吗?现在我来告诉你,特长与个人爱好肯定跟 ...

  2. scrolltop 原生js_jQuery 中 scrollTop;原生的js怎么写

    展开全部 你好,我先需要明确e69da5e6ba9062616964757a686964616f31333337386538一下你是要问jQuery中scrollTop获取滚动条距顶端的距离,还是要使 ...

  3. jS代码写在html什么位置,3种JavaScript代码书写位置和注意事项

    在网页中编写JavaScript代码时,有3种书写位置,分别是行内式.内嵌式(也称为嵌入式)和外部式(也称为外链式),下面分别进行讲解. 1. 行内式 行内式是指将单行或少量的JavaScript代码 ...

  4. 新出炉的 100+ 篇技术热文,在微信热传,别错过哦

    新出炉的 100+ 篇技术热文,在微信热传,别错过哦 2016/08/08 · IT技术 · 1 评论 · 微信 分享到: 12 Yii2.0打造完整电商平台 所向披靡的响应式开发 组件化开发完整An ...

  5. Android热更新初探,Bugly热更新的集成和使用(让你的应用轻松具备热更新能力)

    介绍   在介绍Bugly之前,需要先向大家简单介绍下一些热更新的相关内容.当前市面的热补丁方案有很多,其中比较出名的有阿里的AndFix.美团的Robust以及QZone的超级补丁方案.但它们都存在 ...

  6. 热修复系列之一----Android 热修复原理篇及几大方案比较

    热修复说白了就是"即时无感打补丁",比如你们公司上线一个app,用户反应有重大bug,需要紧急修复.2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也 ...

  7. Android 热补丁技术——资源的热修复

    前言 今年真是热补丁框架的洪荒之力爆发的一年,短短几个月内,已经出现了好几个热修复的框架了,基本上都是大同小异,这里我就不过多的去评论这些框架.只有自己真正的去经历过,你才会发现其中的 大写的坑 事实 ...

  8. Android热更新五:四大热修复方案对比分析

    很早之前就想深入的研究和学习一下热修复,由于时间的原因一直拖着,现在才执笔弄起来. Android而更新系列: Android热更新一:JAVA的类加载机制 Android热更新二:理解Java反射 ...

  9. 视频教程-热更新框架设计之热更流程与热补丁视频课程-Unity3D

    热更新框架设计之热更流程与热补丁视频课程 二十多年的软件开发与教学经验IT技术布道者,资深软件工程师.具备深厚编程语言经验,在国内上市企业做项目经理.研发经理,熟悉企业大型软件运作管理过程.软件架构设 ...

最新文章

  1. Verdi GUI技能操作-Application Tutorials部分
  2. 【数据结构】八大数据结构分类
  3. for根据ID去重_Vue中v-for配合key使用的重要性
  4. 周五话分析 | 两个指标解读用户千百种离开的姿势(跳出率与退出率)
  5. JDK源码学习-基础
  6. 一个很好的分页存储过程
  7. ElasticSearch探索之路(一)初识ElasticSearch:特点、应用场景、架构设计、基本概念
  8. 约三分之二的 DDoS 攻击指向通信服务提供商
  9. shiro 角色与权限的解读
  10. 快手诉“短视频人气助手”软件不正当竞争:索赔100万元
  11. 不能忽视 php warning
  12. 技术的好文章和烂文章
  13. 北大核心2020_“三个月不录用视为拒稿”,核心期刊投稿,编辑的这句话别有用意...
  14. 计算机C盘空间减少,为何我的C盘空间突然减少好几个G?
  15. NLP之pyhanlp安装及其使用
  16. 名帖232 张雨 行书《行书帖选》
  17. Solidworks建模画一个盒子
  18. Crontab中的除号(slash)到底怎么用?
  19. SSM在线电影平台 在线观看电影平台 电影推荐平台系统Java Vue MySQL数据库 远程调试 代码讲解
  20. Simplicity Studio开发环境安装

热门文章

  1. python大鱼吃小鱼程序代码_最近跟导师学Python,熬夜弄了两个晚上写出来个大鱼吃小鱼游戏!...
  2. Docker安装Mysql 案例和Tomcat测试
  3. wg运行内存装MySQL8_windows-安装mysql8的坑
  4. python从入门到实践课后题第三章_《python从入门到实践》--第三章基本数据类型之列表 课后练习...
  5. 用matlab设计滤波器实验报告,数字信号出来实验报告--matlab滤波器设计
  6. eclipse查看git地址_在 IntelliJ IDEA 中使用 Git,太方便了
  7. 将oracle优化器改为CBO,【DB.Oracle】Oracle 优化器 (RBO, CBO)
  8. java p=x,Java-Tutorial/20、javac和javap.md at master · allenchenx/Java-Tutorial · GitHub
  9. oracle 带库,ORACLE RMAN下针对带库装置的操作
  10. 在uipath_UiPath狂欢节Day 3——国内超级企业CFO大咖RPA案例分享!