首页 > 代码库 > heatmap for arcgisjsapi
heatmap for arcgisjsapi
在arcgis for js api 环境下使用heatmap插件。
由于最新的heatmap没有提供 for arcgisjsapi 插件,懒得研究新版本代码,所以这里用的还是老版本的heatmap。
但是老的版本插件有个问题,就是在点聚合计算的时候是按照原坐标点分组的,这就造成当坐标值的精度很高时,所有的点都会单独作为一组,无论两个点相距多近。最终的结果就是地图上的每一个点都会是最高值,地图看起来是这样的。
解决方法就是 在 parseHeatmapData 方法中做干预,让其按照屏幕坐标分组而不是更为精确的经纬度(如果希望容差更大,还可以对屏幕坐标做四舍五入,容差增大十倍)。
修改后的parseHeatmapData 方法
parseHeatmapData: function (dataPoints) { // variables var i, parsedData, dataPoint; // if data points exist if (dataPoints) { // create parsed data object parsedData =http://www.mamicode.com/ { max: 0, data: [] }; if (!this.config.useLocalMaximum) { parsedData.max = this.globalMax; } // for each data point for (i = 0; i < dataPoints.length; i++) { // create geometry point vdataPoint = esri.geometry.Point(dataPoints[i].geometry); dataPoint = esri.geometry.toScreenGeometry(this._map.extent, this._map.width, this._map.height, vdataPoint); //dataPoint // if array value is undefined if (!parsedData.data[dataPoint.x]) { // create empty array value parsedData.data[dataPoint.x] = []; } // array value array is undefined if (!parsedData.data[dataPoint.x][dataPoint.y]) { // create object in array parsedData.data[dataPoint.x][dataPoint.y] = {}; // if count is defined in datapoint if (dataPoint.hasOwnProperty(‘count‘)) { // create array value with count of count set in datapoint parsedData.data[dataPoint.x][dataPoint.y].count = dataPoint.count; } else { // create array value with count of 0 parsedData.data[dataPoint.x][dataPoint.y].count = 0; } } // add 1 to the count parsedData.data[dataPoint.x][dataPoint.y].count += 1; // store dataPoint var parsedData.data[dataPoint.x][dataPoint.y].dataPoint = vdataPoint; // if count is greater than current max if (parsedData.max < parsedData.data[dataPoint.x][dataPoint.y].count) { // set max to this count parsedData.max = parsedData.data[dataPoint.x][dataPoint.y].count; if (!this.config.useLocalMaximum) { this.globalMax = parsedData.data[dataPoint.x][dataPoint.y].count; } } } // convert parsed data into heatmap plugin formatted data this.convertHeatmapData(parsedData); } },
修改后的效果:
heatmap for arcgisjsapi
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。