92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线

openlayers6【十九】vue HeatmapLayer熱力圖層實現熱力圖效果詳解

2021-6-8    前端達人

1. 寫在前面

本問下面有矢量圖層設置的區域,和熱力圖層設置的熱力圖的效果,區域繪制效怎么設置詳細內容可以訪問 openlayers6【十七】vue VectorLayer矢量圖層畫地圖省市區,多省市區(粵港澳大灣區)效果詳解,主要講解的是熱力圖層效果實現。區域繪制只是為了效果更好看。好了,繼續往下看

在 openlayers 中,圖層是使用 layer 對象表示的,主要有 WebGLPoints Layer熱度圖(HeatMap Layer)、圖片圖層(Image Layer)、切片圖層(Tile Layer)和 矢量圖層(Vector Layer)五種類型,它們都是繼承 Layer 類的。

前面兩篇文章 我們講了矢量圖層 VectorLayer的常用的場景,這篇我們寫一篇 HeatMapLayer 的使用。可以看下圖所示的熱力圖實現效果。 放大縮小地圖熱力圖效果。
在這里插入圖片描述

2. Heatmap 類實現熱力圖

2.1 Heatmap 參數

var heatmapLayer = new ol.layer.Heatmap({ source: source,//熱力圖資源 opacity:1,//透明度,默認1 visible:true,//是否顯示,默認trur zIndex:1,//圖層渲染的Z索引,默認按圖層加載順序疊加 gradient:['#00f','#0ff','#0f0','#ff0','#f00'],//熱圖的顏色漸變 blur: 15,//模糊大小(像素為單位) radius: 8,//半徑大小默認為8(像素為單位) extent:[100,30,104,40],//渲染范圍,可選值,默認渲染全部 }); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2.2 實現熱力圖

2.2.1 addHeatMap()方法詳解:

  1. 準備熱力圖需要的初始化數據,colors 熱圖的顏色漸變,hatmapData 表示值數量越多顯示到頁面的熱力圖顏色越深。codeList 準備的數據的城市對應的經緯度坐標。
  2. 創建熱力圖圖層 HeatmapLayer
  3. 把熱力圖圖層添加到 map 中
  4. 調用添加熱力圖要素的方法 AppendFeatures()

2.2.2 addHeatMap()方法代碼:

/**
 * 添加熱力圖
 */ addHeatMap() { let colors = [ "#2200FF", "#16D9CC", "#4DEE12", "#E8D225", "#EF1616" ]; let hatmapData = [ { name: "成都市" }, { name: "成都市" }, { name: "成都市" }, { name: "成都市" }, { name: "綿陽市" }, { name: "廣安市" }, { name: "雅安市" }, { name: "自貢市" }, { name: "自貢市" }, { name: "自貢市" }, { name: "自貢市" }, { name: "自貢市" }, { name: "自貢市" }, { name: "自貢市" }, { name: "宜賓市" }, { name: "甘孜藏族自治州市" } ]; let codeList = { 成都市: { center: { lng: 104.061902, lat: 30.609503 } }, 廣安市: { center: { lng: 106.619126, lat: 30.474142 } }, 綿陽市: { center: { lng: 104.673612, lat: 31.492565 } }, 雅安市: { center: { lng: 103.031653, lat: 30.018895 } }, 自貢市: { center: { lng: 104.797794, lat: 29.368322 } }, 宜賓市: { center: { lng: 104.610964, lat: 28.781347 } }, 甘孜藏族自治州市: { center: { lng: 101.592433, lat: 30.426712 } } }; this.layer = new HeatmapLayer({ source: new VectorSource(), blur: 30, radius: 15, gradient: colors }); this.map.addLayer(this.layer); this.AppendFeatures(hatmapData, colors, codeList, 50); }, 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

2.2.3 AppendFeatures()方法詳解:

  1. 遍歷hatmapData和points數據根據名稱一致的 循環創建要素 new Featurenew Point信息
  2. 把要素添加到熱力圖層的數據源中

2.2.4 AppendFeatures()方法代碼:

/**
 * 增加要素到熱力圖
 */ AppendFeatures(hatmapData, colors, points, max) { for (var i in hatmapData) { if (points[hatmapData[i].name]) { var coords = points[hatmapData[i].name]; this.max = max; var f = new Feature({ geometry: new Point( fromLonLat([coords.center.lng, coords.center.lat]) ) }); this.layer.getSource().addFeature(f); } } } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

3. 完整代碼

<template> <div id="app"> <div id="Map" ref="map"></div> </div> </template> <script> import "ol/ol.css"; import VectorLayer from "ol/layer/Vector"; import VectorSource from "ol/source/Vector"; import { Tile as TileLayer, Heatmap as HeatmapLayer } from "ol/layer"; import Proj from "ol/proj/Projection"; import XYZ from "ol/source/XYZ"; import { Map, View, Feature, ol } from "ol"; import { Style, Stroke, Fill } from "ol/style"; import { Polygon, Point } from "ol/geom"; import { defaults as defaultControls } from "ol/control"; import { fromLonLat } from "ol/proj"; // 四川的邊界數據文件 import areaGeo from "@/geoJson/sichuan.json"; export default { data() { return { map: null }; }, methods: { /**
         * 初始化地圖
         */ initMap() { this.map = new Map({ target: "Map", controls: defaultControls({ zoom: true }).extend([]), layers: [ new TileLayer({ source: new XYZ({ url: "http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}" }) }) ], view: new View({ center: fromLonLat([104.065735, 30.659462]), zoom: 6.5, maxZoom: 19, minZoom: 5 }) }); }, /**
         * 設置區域
         */ addArea(geo = []) { if (geo.length == 0) { return false; } let features = []; geo.forEach(g => { let lineData = g.features[0]; let routeFeature = ""; if (lineData.geometry.type == "MultiPolygon") { routeFeature = new Feature({ geometry: new MultiPolygon( lineData.geometry.coordinates ).transform("EPSG:4326", "EPSG:3857") }); } else if (lineData.geometry.type == "Polygon") { routeFeature = new Feature({ geometry: new Polygon( lineData.geometry.coordinates ).transform("EPSG:4326", "EPSG:3857") }); } routeFeature.setStyle( new Style({ fill: new Fill({ color: "#4e98f444" }), stroke: new Stroke({ width: 3, color: [71, 137, 227, 1] }) }) ); features.push(routeFeature); }); // 設置圖層 let routeLayer = new VectorLayer({ source: new VectorSource({ features: features }) }); // 添加圖層 this.map.addLayer(routeLayer); }, /**
         * 添加熱力圖
         */ addHeatMap() { let colors = [ "#2200FF", "#16D9CC", "#4DEE12", "#E8D225", "#EF1616" ]; let hatmapData = [ { name: "成都市" }, { name: "成都市" }, { name: "成都市" }, { name: "成都市" }, { name: "綿陽市" }, { name: "廣安市" }, { name: "雅安市" }, { name: "自貢市" }, { name: "自貢市" }, { name: "自貢市" }, { name: "自貢市" }, { name: "自貢市" }, { name: "自貢市" }, { name: "自貢市" }, { name: "宜賓市" }, { name: "甘孜藏族自治州市" } ]; let codeList = { 成都市: { center: { lng: 104.061902, lat: 30.609503 } }, 廣安市: { center: { lng: 106.619126, lat: 30.474142 } }, 綿陽市: { center: { lng: 104.673612, lat: 31.492565 } }, 雅安市: { center: { lng: 103.031653, lat: 30.018895 } }, 自貢市: { center: { lng: 104.797794, lat: 29.368322 } }, 宜賓市: { center: { lng: 104.610964, lat: 28.781347 } }, 甘孜藏族自治州市: { center: { lng: 101.592433, lat: 30.426712 } } }; this.layer = new HeatmapLayer({ source: new VectorSource(), blur: 30, radius: 15, gradient: colors }); this.map.addLayer(this.layer); this.AppendFeatures(hatmapData, colors, codeList, 50); }, /**
         * 增加要素至熱力圖
         */ AppendFeatures(hatmapData, colors, points, max) { for (var i in hatmapData) { if (points[hatmapData[i].name]) { var coords = points[hatmapData[i].name]; this.max = max; var f = new Feature({ geometry: new Point( fromLonLat([coords.center.lng, coords.center.lat]) ) }); this.layer.getSource().addFeature(f); } } } }, mounted() { this.initMap(); //初始化地圖 this.addArea(areaGeo); //添加四川省的邊界描邊和填充 this.addHeatMap(); //添加熱力圖數據 } }; </script> <style lang="scss" scoped> // 此處非核心內容,已刪除 </style> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177

4. 添加刪除map圖層的方法

//添加熱力圖層 this.map.addLayer(this.layer) //刪除熱力圖層 this.map.removeLayer(this.layer) 
  • 1
  • 2
  • 3
  • 4

5. 熱力圖自身的get,set方法

//獲取-設置,模糊大小 heatmapLayer.getBlur() heatmapLayer.setBlur(15) //獲取-設置,渲染范圍 heatmapLayer.getExtent() heatmapLayer.setExtent([100,30,104,40]) //獲取-設置,熱力圖漸變色 heatmapLayer.getGradient() heatmapLayer.setGradient(['#00f','#0ff','#0f0','#ff0','#f00']) //獲取-設置,最大級別 heatmapLayer.getMaxZoom() heatmapLayer.setMaxZoom(18) //獲取-設置,最小級別 heatmapLayer.getMinZoom() heatmapLayer.setMinZoom(2) //獲取-設置,透明度 heatmapLayer.getOpacity() heatmapLayer.setOpacity(0.5) //獲取-設置,半徑 heatmapLayer.getRadius() heatmapLayer.setRadius(5) //獲取-設置,熱力源 heatmapLayer.getSource() heatmapLayer.setSource(source) //獲取-設置,是否可見 heatmapLayer.getVisible() heatmapLayer.setVisible(true) //獲取-設置,圖層的Z-index heatmapLayer.getZIndex() heatmapLayer.setZIndex(2) //綁定事件-取消事件 type事件類型,listener函數體 heatmapLayer.on(type,listener) heatmapLayer.un(type,listener)



藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼藍小助,報下信息,藍小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

截屏2021-05-13 上午11.41.03.png


部分借鑒自:csdn  

分享此文一切功德,皆悉回向給文章原作者及眾讀者.
免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

藍藍設計www.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務


日歷

鏈接

個人資料

藍藍設計的小編 http://www.skdbbs.com

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
国产视频在线观看一区二区| 秋霞av国产精品一区| 国产日韩中文字幕在线| 亚洲福利视频网站| 伊人伊人伊人久久| 国产精品日日摸夜夜添夜夜av| 亚洲最大福利网站| 法国裸体一区二区| 91成人免费观看网站| 国内精品400部情侣激情| 亚洲最大福利视频网站| 亚洲精品国精品久久99热| 国产精品视频999| 亚洲wwwav| 中文字幕国产精品| 国产精品r级在线| 亚洲国产日韩欧美综合久久| 成人免费视频网址| 精品久久久久国产| 欧洲亚洲免费在线| 亚洲精品一区在线观看香蕉| 国产精品高清在线观看| 宅男66日本亚洲欧美视频| 久久久综合av| 国产精品久久久久久久久久久不卡| 日本欧美中文字幕| 麻豆精品精华液| 国产精品嫩草影院一区二区| 欧美孕妇与黑人孕交| 欧美亚洲国产另类| 国产成人久久精品| 7m第一福利500精品视频| 欧美精品一区三区| 国产a级全部精品| 久热爱精品视频线路一| 亚洲免费av网址| 国产精品女视频| 亚洲mm色国产网站| 日韩动漫免费观看电视剧高清| 青青草99啪国产免费| 国产精品91在线观看| 欧美激情在线一区| 亚洲欧美制服中文字幕| 日韩av电影在线网| 亚洲欧美制服另类日韩| 日韩欧中文字幕| 色七七影院综合| www.久久久久久.com| 精品国产91久久久久久老师| 国产精品久久久久久久9999| 精品久久久中文| 欧美激情手机在线视频| 亚洲二区在线播放视频| 日韩欧美中文字幕在线播放| 日韩国产精品亚洲а∨天堂免| 欧美乱大交xxxxx另类电影| 欧美高清理论片| 亚洲精品在线观看www| 国产999精品久久久影片官网| 色综合视频一区中文字幕| 日韩美女毛茸茸| 欧美俄罗斯性视频| 91系列在线播放| 国内精品久久久久伊人av| 91九色国产视频| 日韩av网址在线| 欧美整片在线观看| 日韩有码在线播放| 日韩中文字幕在线播放| 国产欧美精品日韩精品| 欧美黄色片免费观看| 亚洲97在线观看| 欧美xxxx18性欧美| 欧美性猛交xxxx富婆| 国产成人精品久久二区二区91| 日韩亚洲综合在线| 国产精品极品美女粉嫩高清在线| 亚洲综合中文字幕在线| 亚洲精品一区二三区不卡| 欧美三级欧美成人高清www| 91精品国产高清自在线| 中文在线资源观看视频网站免费不卡| 91亚洲精品久久久久久久久久久久| 久久视频在线免费观看| 亚洲人午夜精品免费| 欧美大片免费观看| 日本国产一区二区三区| 午夜精品久久久久久久99黑人| 国产日韩欧美影视| 欧美成人国产va精品日本一级| 久久精品视频网站| 欧美日韩高清在线观看| 欧美乱大交xxxxx| 国产精品视频xxx| 国产欧美久久久久久| 国产欧美精品在线播放| 欧美高清不卡在线| 国产日韩欧美中文| 国产成人精品视频在线观看| 国产成人一区三区| 亚洲自拍偷拍福利| 美女福利精品视频| 4438全国成人免费| 伊人青青综合网站| 亚洲一区二区三区xxx视频| 日本成人精品在线| 成人网中文字幕| 国产精品∨欧美精品v日韩精品| 黑人巨大精品欧美一区二区免费| 日韩欧美aaa| 91色视频在线导航| 2020欧美日韩在线视频| 日韩av在线高清| 久久久久久久香蕉网| 中文字幕亚洲欧美在线| 久久久久久久一| 尤物九九久久国产精品的分类| 在线成人中文字幕| 高清欧美性猛交| 久久亚洲精品一区二区| 久久亚洲国产精品成人av秋霞| 久久69精品久久久久久国产越南| 欧美激情三级免费| 亚洲精品按摩视频| 亚洲日本中文字幕免费在线不卡| 91精品国产91久久久久| 91国语精品自产拍在线观看性色| 91嫩草在线视频| 精品亚洲男同gayvideo网站| 2023亚洲男人天堂| 日韩av男人的天堂| 久久久久久久久网站| 久久精品一偷一偷国产| 国产一区二区三区网站| 亚洲综合成人婷婷小说| 亚洲国产小视频在线观看| 成人久久一区二区三区| 久久综合伊人77777尤物| 日韩在线免费av| 国产欧美精品va在线观看| 成人免费视频97| 国产在线一区二区三区| 亚洲午夜精品久久久久久久久久久久| 国产精品电影久久久久电影网| 亚洲xxxxx性| 久久久精品视频在线观看| 国产欧美精品日韩精品| 国产免费久久av| 欧美在线亚洲在线| 亚洲欧美日韩另类| 欧美贵妇videos办公室| 日本免费久久高清视频| 欧美日韩午夜剧场| 亚洲欧美变态国产另类| 久久久成人精品视频| 成人信息集中地欧美| 欧美日韩国产在线播放| 亚洲天堂av在线免费| 亚洲美女动态图120秒| 日韩精品极品视频| 欧美激情免费观看| 亚洲大胆美女视频| 国产一区二区三区三区在线观看| 日韩av成人在线|