• javascript的 热点图怎么写


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

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

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

     1   <script type="text/javascript">
     2         var djConfig = {
     3             parseOnLoad: true
     4 
     5 
     6         };
     7     </script>
     8 
     9     <script src="jslibary/heatmap.js"></script>
    10     <script src="jslibary/heatmap-arcgis.js"></script>

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

      1 /**
      2  * Created by haibalai on 2015/9/23.
      3  * 管理热点图展示 关闭 这里默认以社区为单位 url可改 热点图需要在主页面加上热点 div层 类似map的div
      4  * 这个版本先以一个xml来展示 以后改为json的格式
      5  */
      6 var HeatLayerManager = function()
      7 {
      8     var map;
      9 
     10     var heatLayer;
     11 
     12     var graphicLayer;
     13 
     14     var polygonTemp;
     15 
     16     var queryVo= new QueryVO();
     17 
     18     var ajaxTool;
     19 
     20     var locateParameter = new LocateParameter();
     21 
     22     var symbolTool;
     23 
     24     var isMouseInfo = true;
     25 
     26     //查询社区的url来覆盖 人口信息
     27     var paramBackFun;
     28     function renderQuery(queryVo1,polygon,roundFlag,paramBackFun1)
     29     {
     30         paramBackFun = paramBackFun1;
     31         var layerName = queryVo1.layerName;
     32         graphicLayer.clear();
     33         var url = locateParameter.getUrl(layerName);
     34         if(url != "")
     35         {
     36             var querytask = new esri.tasks.QueryTask(url);
     37             var query = new esri.tasks.Query();
     38 
     39             if(layerName != "shi")
     40             {
     41                 query.geometry = polygon;
     42             }
     43             else
     44             {
     45                 query.where = "FID >= 0"
     46             }
     47             query.returnGeometry = true;
     48             query.outSpatialReference = map.spatialReference;
     49             if(roundFlag == "false")
     50             {
     51                 query.spatialRelationship = esri.tasks.Query.SPATIAL_REL_CONTAINS;
     52             }
     53             query.outFields = ["*"];
     54             querytask.execute(query, handle);
     55         }
     56     }
     57 
     58 
     59 
     60     function handle(idResults)
     61     {
     62         graphicLayer.clear();
     63 
     64         var param = new Object();
     65         param.codearr = [];
     66         for (var i = 0, il = idResults.features.length; i < il; i++)
     67         {
     68             var idResult = idResults.features[i];
     69 
     70             var polygon = idResult.geometry;
     71 
     72             var gra = new esri.Graphic(polygon);
     73 
     74             var attributes = idResult.attributes;
     75 
     76             param.codearr[i] = attributes[locateParameter.getCodeName(queryVo.layerName)];
     77 
     78             var graattribute = new Object();
     79             graattribute["code"]  = attributes[locateParameter.getCodeName(queryVo.layerName)];
     80             gra.setAttributes(graattribute);
     81             gra.setSymbol(symbolTool.getSymbol("heat"));
     82             graphicLayer.add(gra);
     83         }
     84         paramBackFun(param);
     85 
     86     }
     87 
     88     //查询java后台 组织json参数
     89     function ajaxQuery(param)
     90     {
     91         param.startDate = queryVo.startDate;
     92         param.endDate = queryVo.endDate;
     93         param.layerName = queryVo.layerName;
     94         param.tjfs = queryVo.tjfs;
     95         var str =   JSON.stringify(param);
     96 
     97         //alert("ajaxQuery-param: "+str);
     98         //--------------------------------------测试环境用
     99         ajaxTool.getLiuDongData1(str,ajaxBack);
    100         //-------------------------------------
    101 
    102 
    103         //--------------------------------------真实环境用
    104        // ajaxTool.getLiuDongData(str,ajaxBack);
    105         //-------------------------------------
    106     }
    107 
    108     function ajaxBack(obj,num1)
    109     {
    110         //组装 map对象便于遍历graphic
    111         if('2'==queryVo.tjfs){
    112             alert("时间段");
    113             var arr = obj.codearr;
    114 
    115         }else{
    116             var arr = obj.codearr;
    117             var mapobj = new Object();
    118             for(var i = 0, l = arr.length; i < l; i++)
    119             {
    120                 var arrobj = arr[i];
    121                 mapobj[arrobj.CODE] = arrobj;
    122                 //alert("ajaxBack: "+arrobj.CODE);
    123             }
    124 
    125             //--------------------------------------真实环境用
    126             //var graarr = graphicLayer.graphics;
    127             //var dataarr = [];
    128             //for(var j = 0, m = graarr.length; j < m; j++)
    129             //{
    130             //    var gra = graarr[j];
    131             //    var codeValue = gra.attributes["code"];
    132             //    // 暂时码值转换
    133             //    var codeobj;
    134             //    if("shi"==queryVo.layerName){
    135             //        //alert(changeAreaCode(codeValue));
    136             //        codeobj = mapobj[changeAreaCode(codeValue)];
    137             //    }else{
    138             //        codeobj = mapobj[codeValue];
    139             //    }
    140             //    //alert("codeValue: "+codeValue);
    141             //    if(codeobj!=null){
    142             //        var pcount = codeobj.PCOUNT;
    143             //        var point  = gra.geometry.getCentroid();
    144             //        var feobj = {
    145             //            attributes: {count:Number(pcount)},
    146             //            geometry: {
    147             //                spatialReference: map.spatialReference,
    148             //                type: "point",
    149             //                x: point.x,
    150             //                y: point.y
    151             //
    152             //            }
    153             //        }
    154             //        dataarr.push(feobj);
    155             //    }
    156             //    gra.attributes["codeVaue"] = codeobj;
    157             //}
    158             //-------------------------------------
    159 
    160             //--------------------------------------测试环境用
    161                     var graarr = graphicLayer.graphics;
    162                     var dataarr = [];
    163                     var pcountnum = 0.1;
    164                     for(var j = 0, m = graarr.length; j < m; j++)
    165                     {
    166                         var gra = graarr[j];
    167                         var codeValue = gra.attributes["code"];
    168                         var codeobj = mapobj["440304008001"];
    169                         var pcount = pcountnum;
    170                         var point  = gra.geometry.getCentroid();
    171                         var feobj = {
    172                             attributes: {count:Number(pcount)},
    173                             geometry: {
    174                                 spatialReference: map.spatialReference,
    175                                 type: "point",
    176                                 x: point.x,
    177                                 y: point.y
    178 
    179                             }
    180 
    181                         }
    182                         if(num1 == undefined)
    183                         {
    184                             num1 = 0.01
    185                         }
    186                         pcountnum = pcountnum + num1;
    187                         dataarr.push(feobj);
    188 
    189                         gra.attributes["codeVaue"] = codeobj;
    190                     }
    191             //-------------------------------------
    192 
    193             heatLayer.setData(dataarr);
    194         }
    195     }
    196 
    197     /**
    198      * 外界返回鼠标移动查询填充图层
    199      * @returns {*}
    200      */
    201     this.getHeatLocateLayer = function()
    202     {
    203         return graphicLayer;
    204     }
    205 
    206     /**
    207      * 外界返回热点图层
    208      * @returns {*}
    209      */
    210     this.getHeatlayer = function()
    211     {
    212         return heatLayer;
    213     }
    214 
    215 
    216     /**
    217      * 初始化热点图
    218      * @param healayerdiv 主页heatlayer div的id
    219      * @param map1
    220      */
    221     this.init = function initHeatLayer(healayerdiv,map1)
    222     {
    223         map = map1;
    224         heatLayer = new HeatmapLayer({
    225             config: {
    226                 "useLocalMaximum": true,
    227                 "radius": 40,
    228                 "gradient": {
    229                     0.45: "rgb(000,000,255)",
    230                     0.55: "rgb(000,255,255)",
    231                     0.65: "rgb(000,255,000)",
    232                     0.95: "rgb(255,255,000)",
    233                     1.00: "rgb(255,000,000)"
    234                 }
    235             },
    236             "map": map,
    237             "domNodeId": healayerdiv,
    238             "opacity": 0.85
    239         });
    240 
    241 
    242         graphicLayer = new esri.layers.GraphicsLayer();
    243         map.addLayer(heatLayer);
    244         map.addLayer(graphicLayer);
    245 
    246         ajaxTool = new AjaxTool();
    247         symbolTool = new SymbolTool();
    248 
    249         // map.resize();
    250 
    251     }
    252 
    253     this.ajaxBackFun= function(obj,num1)
    254     {
    255         ajaxBack(obj,num1);
    256     }
    257 
    258     /**
    259      * 根据查询数据渲染热点图
    260      * 现在可能是固定死的xml,下次 转json 可能要有参数 以后定
    261      */
    262     this.addRender = function(queryVo1,polygon)
    263     {
    264         addRenderFun(queryVo1,polygon,ajaxQuery)
    265 
    266     }
    267 
    268     //简化方法类 增加回调
    269     function addRenderFun(queryVo1,polygon,paramBackFun1)
    270     {
    271         polygonTemp = polygon;
    272         queryVo = queryVo1;
    273 
    274         renderQuery(queryVo,polygon,"false",paramBackFun1);
    275     }
    276 
    277     /**
    278      *
    279      * @param queryVo1
    280      * @param polygon
    281      * @param paramBackFun1
    282      */
    283 
    284     this.addRenderCallBack = function(queryVo1,polygon,paramBackFun1)
    285     {
    286         addRenderFun(queryVo1, polygon, paramBackFun1);
    287     }
    288 
    289 
    290     /**
    291      * 清除热点图的数据
    292      */
    293     this.clearHeatLayer = function()
    294     {
    295         heatLayer.clearData();
    296     }
    297 
    298     function changeAreaCode(code){
    299         var resuCode="";
    300         var areaCode = ["440305","440326","440306","440309","440308",
    301             "440304","440303","440327","440317","440307"];
    302         var mapCode = ["440305002","440306007","440306001","440306012","440308001",
    303             "440304003","440303005","440307012","440307009","440307006"];
    304         for(i=0;i<areaCode.length;i++){
    305             if(code==mapCode[i]){
    306                 resuCode = areaCode[i];
    307                 break;
    308             }
    309         }
    310         return resuCode;
    311     }
    312 
    313 }
  • 相关阅读:
    vb 动态添加 timer
    sruts2 国际化 规范
    vb 创建xml
    robots
    android 桌面斗地主
    QT 平台
    云软件 Eucalyptus云
    android intentfilter
    android 布局相关
    Zend Studio PHP
  • 原文地址:https://www.cnblogs.com/haibalai/p/5030832.html
Copyright © 2020-2023  润新知