日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Echart在Openlayers的应用-热力图

發布時間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Echart在Openlayers的应用-热力图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

在前文中,有一篇文章講述了Openlayers2結合Echart實現地圖統計圖,還以一篇文章講述了結合heatmap.js實現Openlayers中熱力圖的展示。在本文,書接前文,講述Openlayers如何結合Echart實現熱力圖。


效果


全圖效果


放大效果

實現

1、關鍵點

echart實現heatmap的關鍵點在與屏幕坐標,所以,在地圖中,應通過地理坐標到屏幕坐標的轉換函數,將地理坐標轉換為屏幕坐標。


2、實現代碼

我將熱力圖擴展成為了一個openlayers的layer擴展,實現代碼如下:

OpenLayers.Layer.EchartHeatmap = OpenLayers.Class(OpenLayers.Layer,{isBaseLayer : false,heatmap : null,mapLayer : null,heatdata : [],initialize : function (name, map, options){var scope = this, heatdiv = document.createElement("div"), handler;OpenLayers.Layer.prototype.initialize.apply(this, [name, options]);heatdiv.style.cssText = "position:absolute;width:" + map.size.w + "px;height:" + map.size.h + "px;";this.div.appendChild(heatdiv);this.map = map;this.heatdiv = heatdiv;this.heatdata = options.heatdata;this.opacity = options.opacity;handler = function (e){if (scope.heatdata.length > 0){scope.updateLayer(e);}};handler();map.events.register("zoomend", this, handler);map.events.register("moveend", this, handler);},updateLayer : function (e){var scope = this;require(['echarts','echarts/chart/heatmap'],function (ec){var myChart = ec.init(scope.heatdiv);var heatD = [];var data = scope.heatdata;var orgXy, w, h;if(e){orgXy = e.object.layerContainerOriginPx;}else{orgXy={x:0,y:0};}w = scope.map.size.w;h = scope.map.size.h;scope.heatdiv.style.cssText = "position:absolute;top:"+(-orgXy.y)+"px;left:"+(-orgXy.x)+"px;width:" + w + "px;height:" + h + "px;";for (var i = 0; i < data.length; ++i){var d = data[i];var scrPt = scope.map.getPixelFromLonLat(new OpenLayers.LonLat(d.lon, d.lat));var x = scrPt.x,y = scrPt.y;heatD.push([x,y,d.count]);}var option ={series : [{type : 'heatmap',data : heatD,opacity:scope.opacity,gradientColors : [{offset : 0.4,color : 'green'},{offset : 0.5,color : 'yellow'},{offset : 0.8,color : 'orange'},{offset : 1,color : 'red'}],minAlpha : 0.2,valueScale : 2}]};myChart.setOption(option);});},destroy : function (){OpenLayers.Layer.Grid.prototype.destroy.apply(this, arguments);},CLASS_NAME : "OpenLayers.Layer.EchartHeatmap"} );前臺調用的代碼如下:

<html> <head><meta charset="UTF-8"><title>heatmap.js OpenLayers Heatmap Layer</title><link rel="stylesheet" href="../../../plugin/OpenLayers-2.13.1/theme/default/style.css" type="text/css"><style>html, body, #map,#chart{padding:0;margin:0;height:100%;width:100%;overflow: hidden;}#chart{position: absolute;top: 0px;left: 0px;z-index: 900;}</style><script src="../../../plugin/OpenLayers-2.13.1/OpenLayers.js"></script><script src="../../../plugin/jquery/jquery-1.8.3.js"></script><script src="../../../plugin/echart/build/dist/echarts.js"></script><script src="extend/echartheatlayer.js"></script><script type="text/javascript">require.config({paths: {echarts: '../../../plugin/echart/build/dist'}});var map;function init(){ var format = 'image/png';var bounds = new OpenLayers.Bounds(73.45100463562233, 18.16324718764174,134.97679764650596, 53.531943152223576);var options = {controls: [],maxExtent: bounds,maxResolution: 0.2403351289487642,projection: "EPSG:4326",units: 'degrees'};map = new OpenLayers.Map('map', options);var wms1 = new OpenLayers.Layer.WMS("base_map","http://localhost:8088/geoserver/lzugis/wms",{layers: "province",transparent: true}, {isBaseLayer: true,singleTile: true});map.addControl(new OpenLayers.Control.Zoom());map.addControl(new OpenLayers.Control.Navigation());var heatmap = new OpenLayers.Layer.EchartHeatmap("heatmap",map,{heatdata:data,opacity:0.8});var wms2 = new OpenLayers.Layer.WMS("base_map","http://localhost:8088/geoserver/lzugis/wms",{layers: "county",transparent: true}, {isBaseLayer: false,singleTile: true,opacity:0.2});map.addLayers([wms1,heatmap,wms2]);map.zoomToExtent(bounds);}</script> </head> <body οnlοad="init()"> <div id="map"> </div> </body> </html>其中,變量data的數據格式如下:

[{name:"東方市",lon:108.633357,lat:19.097025,count:30},{name:"臨高縣",lon:109.686515,lat:19.91785,count:47},{name:"儋州市",lon:109.575851,lat:19.518256,count:43},{name:"昌江黎族自治縣",lon:109.048657,lat:19.258351,count:71},{name:"白沙黎族自治縣",lon:109.448097,lat:19.235657,count:70},…… ]


查看示例


傳播GIS知識 | 交流GIS經驗 | 分享GIS價值 | 專注GIS發展

技術博客

http://blog.csdn.net/gisshixisheng

在線教程

http://edu.csdn.net/course/detail/799
Github

https://github.com/lzugis/

聯系方式

q ? ? ? q:1004740957

e-mail:niujp08@qq.com

公眾號:lzugis15

Q Q 群:452117357(webgis)
? ? ? ? ? ? ?337469080(Android)






轉載于:https://www.cnblogs.com/lzugis/p/6539774.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Echart在Openlayers的应用-热力图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲大尺度av | 欧美视频www | 久久国产色| 日本精品三区 | 日韩毛片无码永久免费看 | 最新在线观看av | 免费黄色小视频 | 97超碰人 | 色婷婷综合久久久中文字幕 | 中国大陆高清aⅴ毛片 | 久久亚洲精品小早川怜子 | 瑟瑟综合网 | 51热门大瓜今日大瓜 | 性xxxx搡xxxxx搡欧美 | 亚洲av无码不卡一区二区三区 | 精品乱码一区内射人妻无码 | 韩国妻子的朋友 | 三年大全国语中文版免费播放 | 无码人妻丰满熟妇区毛片蜜桃精品 | 午夜专区 | 久久久久香蕉 | 国产无码日韩精品 | 91av免费看 | 欧美第五页 | 午夜丰满寂寞少妇精品 | 日韩狠狠操 | 午夜三级在线观看 | 久久久久久久蜜桃 | 婷婷伊人综合 | 成人亚洲精品久久久久软件 | 国产91精品一区二区绿帽 | 国产精品久久久久久久久久久久久 | 亚洲天堂影院 | 九色蝌蚪9l视频蝌蚪9l视频 | 无码精品人妻一二三区红粉影视 | 不卡中文字幕在线观看 | 综合狠狠 | 在线免费观看国产 | 三级在线网站 | 亚洲色图网友自拍 | 中文字幕av免费观看 | 香蕉视频在线观看www | 国产一区二区在线视频观看 | 无码人妻少妇色欲av一区二区 | 香蕉视频黄色片 | 日本aa大片 | 中文字幕在线导航 | 日本电影一区二区三区 | 欧美v在线| 亚洲欧美日韩高清 | cao在线视频| 欧美日韩精品在线观看视频 | 亚洲女同av | 久久毛片视频 | 亚洲第一区在线 | 黄色性情网站 | 国产黄色特级片 | 自拍第1页 | 自拍偷拍2019 | 中文字幕被公侵犯的漂亮人妻 | 99国产精品久久久 | 国语对白一区二区三区 | 久久天天躁狠狠躁夜夜躁2014 | 亚洲20p | 亚洲精品成人电影 | 91美女网站 | 天天草综合 | wwwav网站 | 天天插天天透 | 另类图片亚洲色图 | av在线第一页 | 成人深夜视频 | 国产三级麻豆 | 欧美成人三级视频 | 亚洲精品网站在线播放gif | 欧美成人黄色小说 | 亚洲啊啊 | 国产成人精品一区二区三区在线观看 | 黄色专区 | 久久久精品福利 | 日本伊人色 | www.男人天堂 | 91免费网址 | 日韩av手机在线观看 | 欧美操穴视频 | 亚欧洲精品在线视频 | 一级黄色免费片 | 波多野结衣先锋影音 | 中文字幕乱码亚洲无线三区 | 奇米影视777第四色 2019中文字幕在线免费观看 | 青青青视频在线播放 | 黄色国产一区 | 亚洲一级片免费看 | 国产高潮又爽又无遮挡又免费 | 在线不卡二区 | 国产永久在线观看 | 波多野结衣视频在线观看 | 无码精品黑人一区二区三区 | 国产成人久久 |