Vue2+Cesium1.9+热力图开发笔记
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+热力图开发笔记的更多相关文章
- [开发笔记]-未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出【转载自:酷小孩】
原文地址:http://www.cnblogs.com/babycool/p/3199158.html 今天打算用VisualStudio2012做一个js效果页面测试的时候,打开VS2012新建项目 ...
- EasyUI 开发笔记(二)
接上篇 :EasyUI 开发笔记(一) (http://www.cnblogs.com/yiayi/p/3485258.html) 这期就简单介绍下, easyui 的 list 展示, 在easy ...
- EasyUI 开发笔记(一)
由于某些原因,在公司做的后台需要改成类似于Ext.js 形式的后台,主要看好其中的 框架布局,以及tab开页面和弹出式内部窗体. 后来看看,改成EasyUI,较Ext.js 库小很多,也便于公司的初级 ...
- [Openwrt 项目开发笔记]:Openwrt平台搭建(一)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 最近开始着手进行Openwrt平台的物联网网关设 ...
- Android移动APP开发笔记——Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例
引言 Cordova(PhoneGap)采用的是HTML5+JavaScript混合模式来开发移动手机APP,因此当页面需要获取手机内部某些信息时(例如:联系人信息,坐标定位,短信等),程序就需要调用 ...
- Android移动APP开发笔记——最新版Cordova 5.3.1(PhoneGap)搭建开发环境
引言 简单介绍一下Cordova的来历,Cordova的前身叫PhoneGap,自被Adobe收购后交由Apache管理,并将其核心功能开源改名为Cordova.它能让你使用HTML5轻松调用本地AP ...
- 开发笔记:基于EntityFramework.Extended用EF实现指定字段的更新
今天在将一个项目中使用存储过程的遗留代码迁移至新的架构时,遇到了一个问题——如何用EF实现数据库中指定字段的更新(根据UserId更新Users表中的FaceUrl与AvatarUrl字段)? 原先调 ...
- Lucene/Solr搜索引擎开发笔记 - 第1章 Solr安装与部署(Jetty篇)
一.为何开博客写<Lucene/Solr搜索引擎开发笔记> 本人毕业于2011年,2011-2014的三年时间里,在深圳前50强企业工作,从事工业控制领域的机器视觉方向,主要使用语言为C/ ...
- [openwrt 项目开发笔记]: 传送门
“Openwrt 项目开发笔记”系列传送门: [Openwrt 项目开发笔记]:Openwrt平台搭建(一) (2014-07-11 00:11) [Openwrt 项目开发笔记]:Openwrt平台 ...
- 安卓开发笔记——深入Activity
在上一篇文章<安卓开发笔记——重识Activity >中,我们了解了Activity生命周期的执行顺序和一些基本的数据保存操作,但如果只知道这些是对于我们的开发需求来说是远远不够的,今天我 ...
随机推荐
- JZOJ 5062. 【GDOI2017第二轮模拟day1】航海舰队
\(\text{Solution}\) 这还是 [Lydsy2017省队十连测] 的题 不得不说 \(FFT\) 在字符串匹配中的妙啊! 前面做了道一维的题,现在这是二维的 从题目入手,不考虑可不可达 ...
- IP转换
IP转换 目录 IP转换 1 127.1 ? 2 IPv4两段点分十进制表示 3 IPv4一段十进制表示 4 IPv4地址有效地变换形式 5 IP地址进制转换网站 6 参考博客 1 127.1 ? 首 ...
- vue-cli 更新遇到的问题,卸载不掉旧版本2.9.6(可行)
今天更新vue-cli时,遇到问题:卸载不掉旧版本2.9 官网给的信息是:Vue CLI 的包名称由 vue-cli 改成了 @vue/cli. 如果你已经全局安装了旧版本的 vue-cli (1.x ...
- vue 组件通信方式 ,父子、隔代、兄弟 三类通信,六种方法
(1)props / $emit 适用 父子组件通信 (2) ref 与 $parent / $children 适用 父子组件通信 (3)$attrs / $listeners 适用于 隔代组件通信 ...
- 集成RocketChat至现有的.Net项目中,为ChatGPT铺路
@ 目录 前言 项目搭建 后端 前端 代理账号 鉴权方式介绍 登录校验模块 前端鉴权方式 后端鉴权方式 登录委托 使用登录委托 处理聊天消息 前端鉴权方式 后端校验方式 项目地址 前言 今天我们来聊一 ...
- Study for Go ! Chapter two - Expression
Study for Go ! Chapter two - Expression 1. Keyword Golang仅有 25 个保留关键字,体现了 golang 语法规则的简洁性 保留关键字不能用作常 ...
- 测开-面试题-OS、Linux、算法、其他
1 OS 1.1 进程.线程.协程区别? 答: 1.进程是资源分配的单位:2.线程是CPU调度的单位:3.协程是一种比线程更加轻量级的存在,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在 ...
- LG8768 题解
题意 传送门 求长度为 \(n\) 的序列 \(a\) 的个数对 \(998244353\) 取模的结果,其中 \(a\) 满足: \(a_1=w\) \(a_{i-1}+L\le a_i\le a_ ...
- lg8365题解
容易发现我们一定会先加后乘,使用调整法可以证明这个结论. 并且可以发现除了\(a_i\)值为\(1\)的数外(假设他们的\(a\)值和为\(s\)),其他的数最多只会选\(1\)个做加法操作(设如果其 ...
- 2.2 在resources目录下,新建applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans> <!-- 这个bean标签的作用是, ...