1、安装cesiumJS、heatmap、webpack插件依赖包:

yarn install/npm install

"dependencies": {
...
"cesium": "^1.90.0",
"heatmap.js": "^2.0.5"
...
},
"devDependencies": {
...
"copy-webpack-plugin": "^5.0",
"html-webpack-plugin": "3.2.0",
...
}

2、cesium目录配置

项目是用vue-cli生成的,在vue.config.js中配置CesiumJS目录:

'use strict'
const path = require('path')
... function resolve(dir) {
return path.join(__dirname, dir)
} ... const CopyWebpackPlugin = require('copy-webpack-plugin')
const webpack = require('webpack')
const cesiumSource = 'node_modules/cesium/Source';
const cesiumWorkers = '../Build/Cesium/Workers'; // console.log('cesiumSource->',cesiumSource)
// console.log('cesiumWorkers->',cesiumWorkers)
// console.log('__dirName->', __dirname)
// console.log('cesium', path.resolve(__dirname, cesiumSource)) module.exports = {
publicPath: process.env.NODE_ENV === 'development' ? '/xxx' : './',
outputDir: 'dist',
assetsDir: 'static',
lintOnSave: process.env.NODE_ENV === 'development',
productionSourceMap: false,
devServer: {
port: 8888,
open: false,
overlay: {
warnings: false,
errors: true
},
proxy: {
...
}
},
configureWebpack: {
   ...
resolve: {
alias: {
'@': resolve('src'),'cesium': path.resolve(__dirname, cesiumSource) //CesiumSource绝对路径别名
}
},
plugins:
[
new CopyWebpackPlugin([{ from: path.join(cesiumSource, cesiumWorkers), to: 'Workers' }]),
new CopyWebpackPlugin([{ from: path.join(cesiumSource, 'Assets'), to: 'Assets' }]),
new CopyWebpackPlugin([{ from: path.join(cesiumSource, 'Widgets'), to: 'Widgets' }]),
new CopyWebpackPlugin([ { from: path.join(cesiumSource, 'ThirdParty/Workers'), to: 'ThirdParty/Workers'}]),
new webpack.DefinePlugin({
CESIUM_BASE_URL: JSON.stringify('')
})
],
},
...
}

项目页面JS中这样导包:

import * as Cesium from 'cesium/Cesium'
import 'cesium/Widgets/widgets.css'

3、开发热力图

直接参考https://github.com/manuelnas/CesiumHeatmap

由于此插件不支持es6导入,需要改源码(找了github上的其它支持es6 import方式导入的cesium热力图插件,存在一些未知的bug反而影响了开发效率,故还是自己整靠谱)

移除CesiumHeatmap.js中的h337源码,直接在文件头引入cesium和heatmap.js,如下:

import * as Cesium from 'cesium/Cesium'
import h337 from 'heatmap.js'

删掉IIEF及相关匿名函数包裹代码,直接暴露出CesiumHeatmap对象并导出,大致如下:

/**
* 修改自https://github.com/manuelnas/CesiumHeatmap
*/
import * as Cesium from 'cesium/Cesium'
import h337 from 'heatmap.js'
/*
* CesiumHeatmap.js v0.1 | Cesium Heatmap Library
*
* Works with heatmap.js v2.0.0: http://www.patrick-wied.at/static/heatmapjs/
*/
const CesiumHeatmap = {
defaults: {
...
CesiumHeatmap.rad2deg = function(r) {
var d = r / (Math.PI / 180.0)
return d
} /* Initiate a CesiumHeatmap instance
* c: CesiumWidget instance
* bb: a WGS84 bounding box like {north, east, south, west}
* o: a heatmap.js options object (see http://www.patrick-wied.at/static/heatmapjs/docs.html#h337-create)
*/
function CHInstance(c, bb, o) {
... export default CesiumHeatmap

4、页面中引入CesiumHeatmap并使用

把修改的cesiumHeatmap.js放入某个公共目录下,如src/utils/gis下面。

vue中引入使用:

...
import CesiumHeatmap from '@/utils/gis/cesiumHeatmap.js'
...
addHeatmap() {
const geojson = this.geojson
const points = []
let west = 1000; let east = -1000; let south = 1000; let north = -1000
geojson.features.forEach(function(feature) {
const lon = feature.geometry.coordinates[0]
const lat = feature.geometry.coordinates[1]
west = Math.min(west, lon)
east = Math.max(east, lon)
south = Math.min(south, lat)
north = Math.max(north, lat)
points.push({
x: lon,
y: lat,
value: 1
})
})
const bounds = {
west,
east,
south,
north
} // init heatmap
const heatMap = CesiumHeatmap.create(
this.viewer,
bounds,
{
minOpacity: 0.15,
maxOpacity: 0.8,
radius: 15,
blur: 0.9,
gradient: {
'.7': '#546AA4',
'.9': '#0DB212',
'.95': '#D6CE3B',
'.96': '#CC9C1B',
'.998': '#DC0F2A'
}
}
) const valueMin = 0
const valueMax = 10
heatMap.setWGS84Data(valueMin, valueMax, points)
this.heatmap = heatMap
},
...

Vue2+Cesium1.9+热力图开发笔记的更多相关文章

  1. [开发笔记]-未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出【转载自:酷小孩】

    原文地址:http://www.cnblogs.com/babycool/p/3199158.html 今天打算用VisualStudio2012做一个js效果页面测试的时候,打开VS2012新建项目 ...

  2. EasyUI 开发笔记(二)

    接上篇 :EasyUI 开发笔记(一)  (http://www.cnblogs.com/yiayi/p/3485258.html) 这期就简单介绍下, easyui 的 list 展示, 在easy ...

  3. EasyUI 开发笔记(一)

    由于某些原因,在公司做的后台需要改成类似于Ext.js 形式的后台,主要看好其中的 框架布局,以及tab开页面和弹出式内部窗体. 后来看看,改成EasyUI,较Ext.js 库小很多,也便于公司的初级 ...

  4. [Openwrt 项目开发笔记]:Openwrt平台搭建(一)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 最近开始着手进行Openwrt平台的物联网网关设 ...

  5. Android移动APP开发笔记——Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例

    引言 Cordova(PhoneGap)采用的是HTML5+JavaScript混合模式来开发移动手机APP,因此当页面需要获取手机内部某些信息时(例如:联系人信息,坐标定位,短信等),程序就需要调用 ...

  6. Android移动APP开发笔记——最新版Cordova 5.3.1(PhoneGap)搭建开发环境

    引言 简单介绍一下Cordova的来历,Cordova的前身叫PhoneGap,自被Adobe收购后交由Apache管理,并将其核心功能开源改名为Cordova.它能让你使用HTML5轻松调用本地AP ...

  7. 开发笔记:基于EntityFramework.Extended用EF实现指定字段的更新

    今天在将一个项目中使用存储过程的遗留代码迁移至新的架构时,遇到了一个问题——如何用EF实现数据库中指定字段的更新(根据UserId更新Users表中的FaceUrl与AvatarUrl字段)? 原先调 ...

  8. Lucene/Solr搜索引擎开发笔记 - 第1章 Solr安装与部署(Jetty篇)

    一.为何开博客写<Lucene/Solr搜索引擎开发笔记> 本人毕业于2011年,2011-2014的三年时间里,在深圳前50强企业工作,从事工业控制领域的机器视觉方向,主要使用语言为C/ ...

  9. [openwrt 项目开发笔记]: 传送门

    “Openwrt 项目开发笔记”系列传送门: [Openwrt 项目开发笔记]:Openwrt平台搭建(一) (2014-07-11 00:11) [Openwrt 项目开发笔记]:Openwrt平台 ...

  10. 安卓开发笔记——深入Activity

    在上一篇文章<安卓开发笔记——重识Activity >中,我们了解了Activity生命周期的执行顺序和一些基本的数据保存操作,但如果只知道这些是对于我们的开发需求来说是远远不够的,今天我 ...

随机推荐

  1. 跳板攻击之:ICMP代理转发与反弹shell

    跳板攻击之:ICMP代理转发与反弹shell 郑重声明: 本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关.倡导维护 ...

  2. 权限维持之:DSRM 域控权限维持

    目录 1 修改 DSRM 密码 2 DSRM 域后门操作过程 3 DSRM 域后门防御 目录服务恢复模式(DSRM,Directory Services Restore Mode),是Windows服 ...

  3. Cesium渲染模块之Buffer

    1. 引言 Cesium是一款三维地球和地图可视化开源JavaScript库,使用WebGL来进行硬件加速图形,使用时不需要任何插件支持,基于Apache2.0许可的开源程序,可以免费用于商业和非商业 ...

  4. PostGIS之空间关系

    1. 概述 PostGIS 是PostgreSQL数据库一个空间数据库扩展,它添加了对地理对象的支持,允许在 SQL 中运行空间查询 PostGIS官网:About PostGIS | PostGIS ...

  5. K8S资源控制器

    什么是控制器 kubernetes中建立了很多的controller(控制器),这相当于一个控制机,来管理pod的状态和行为. 控制器的类型 ReplicationController和Replica ...

  6. fabric学习笔记8

    fabric学习笔记8 20201303张奕博 2023.1.19 具体结构: Wallet中的X.509数字证书将组织和持有者联系起来,使得持有者能够有权限连接到网络,不同的持有者身份拥有不同的权限 ...

  7. replace 常用积累

    1.替换有,或者.为: obj.keyword.replace(/,|./g,';') 2.替换元素标签类似于<em>文字</em>这种 let name=item.name. ...

  8. JDK卸载与JDK12 安装

    JDK卸载与JDK12 安装 一.JDK卸载 控制面板>程序和功能>jdk程序(java 8 update 391:java SE Development Kit8 update 391) ...

  9. mac 暗黑破坏神2

    ​ https://590m.com/f/28636472-500475496-61a14b (访问密码:7410) 此版本可以更改人员属性参数,过程有点复杂,如需了解,请留言+v沟通吧... ​编辑 ...

  10. 阿里巴巴Java代码规范(一)

    现代软件架构都需要协同开发完成,高效协作即降低协同成本,提升沟通效率,所谓无规矩不成方圆,无规范不能协作. 本博客是对<阿里巴巴Java开发手册>的学习记录.大多记录的是强制规约,具体请参 ...