目录
MapVGL,是一款基于WebGL的地理信息可视化库,可以用来展示大量基于3D的地理信息点线面数据。设计初衷主要是为了解决大数据量的三维地理数据展示问题及一些炫酷的三维效果。
NPM:
$ npm i mapvgl
CDN:
npm的cdn地址
- <script src="https://unpkg.com/mapvgl/dist/mapvgl.min.js">script>
-
- <script src="https://unpkg.com/mapvgl/dist/mapvgl.threelayers.min.js">script>
备用百度cdn地址
- <script src="https://code.bdstatic.com/npm/mapvgl@1.0.0-beta.154/dist/mapvgl.min.js">script>
-
- <script src="https://code.bdstatic.com/npm/mapvgl@1.0.0-beta.154/dist/mapvgl.threelayers.min.js">script>
Hello World:
- // 1. 创建地图实例
- var bmapgl = new BMapGL.Map('map_container');
- var point = new BMapGL.Point(116.403748, 39.915055);
- bmapgl.centerAndZoom(point, 17);
-
- // 2. 创建MapVGL图层管理器
- var view = new mapvgl.View({
- map: bmapgl
- });
-
- // 3. 创建可视化图层,并添加到图层管理器中
- var layer = new mapvgl.PointLayer({
- color: 'rgba(50, 50, 200, 1)',
- blend: 'lighter',
- size: 2
- });
- view.addLayer(layer);
-
- // 4. 准备好规范化坐标数据
- var data = [{
- geometry: {
- type: 'Point',
- coordinates: [116.403748, 39.915055]
- }
- }];
-
- // 5. 关联图层与数据,享受震撼的可视化效果
- layer.setData(data);
可参考如下文档进行mapv的使用:
MapV开发文档https://lbsyun.baidu.com/solutions/mapvdata
- // 创建mapvgl图层管理器
- var view = new mapvgl.View({
- map: map,
- });
-
- // 创建点图层
- var pointLayer = new mapvgl.PointLayer({
- color: "rgba(55,55,255,1)",
- blend: "lighter",
- size: 40,
- });
- // 将点图层添加到图层管理器
- view.addLayer(pointLayer);
-
- // 设置点数据
- var data = [
- {
- geometry: {
- type: "Point",
- coordinates: [116.404 + Math.random(), 39.915 + Math.random()],
- },
- },
- {
- geometry: {
- type: "Point",
- coordinates: [116.404 + Math.random(), 39.915 + Math.random()],
- },
- },
- {
- geometry: {
- type: "Point",
- coordinates: [116.404 + Math.random(), 39.915 + Math.random()],
- },
- },
- {
- geometry: {
- type: "Point",
- coordinates: [116.404, 39.915],
- },
- },
- ];
-
- //将数据设置在点图层里
- pointLayer.setData(data);
实现效果:

- // 创建点图层
- let pointLayer = new mapvgl.PointTripLayer({
- color: "rgba(50, 50, 200, 1)",
- step: 0.01,
- trailLength: 20,
- startTime: 0,
- endTime: 1000,
- size: 20,
- });
- // 将点图层添加到图层管理器
- view.addLayer(pointLayer);
-
- // 设置点数据
- var data = [
- {
- geometry: {
- type: "Point",
- coordinates: [116.404, 39.915],
- },
- properties: {
- name: "点1",
- },
- },
- {
- geometry: {
- type: "Point",
- coordinates: [
- 116.404 + Math.random() * 0.001,
- 39.915 + Math.random() * 0.001,
- ],
- },
- properties: {
- name: "点2",
- },
- },
- {
- geometry: {
- type: "Point",
- coordinates: [
- 116.404 + Math.random() * 0.001,
- 39.915 + Math.random() * 0.001,
- ],
- },
- properties: {
- name: "点2",
- },
- },
- {
- geometry: {
- type: "Point",
- coordinates: [
- 116.404 + Math.random() * 0.001,
- 39.915 + Math.random() * 0.001,
- ],
- },
- properties: {
- name: "点2",
- },
- },
- {
- geometry: {
- type: "Point",
- coordinates: [
- 116.404 + Math.random() * 0.001,
- 39.915 + Math.random() * 0.001,
- ],
- },
- properties: {
- name: "点2",
- },
- },
- ];
-
- //将数据设置在点图层里
- pointLayer.setData(data);
实现效果:
- // 创建图层
- let layer = new mapvgl.HeatmapLayer({
- gradient: {
- 0: "rgb(50,50,255)",
- 1: "rgb(255,50,50)",
- },
- max: 100,
- min: 0,
- });
- // 将点图层添加到图层管理器
- view.addLayer(layer);
-
- // 设置点数据
- var data = [
- {
- geometry: {
- type: "Point",
- coordinates: [116.404 + Math.random(), 39.915 + Math.random()],
- },
- properties: {
- name: "点1",
- },
- },
- ];
-
- for (let i = 0; i < 1000; i++) {
- data.push({
- geometry: {
- type: "Point",
- coordinates: [116.404 + Math.random(), 39.915 + Math.random()],
- },
- properties: {
- count: Math.random() * 100,
- },
- });
- }
-
- //将数据设置在点图层里
- layer.setData(data);
实现效果:

使用Three.js相关功能时,除在之前引用的百度地图资源和mapv资源外,还需引入Three相关依赖:
-
- <script src="https://code.bdstatic.com/npm/mapvgl@1.0.0-beta.140/dist/mapvgl.threelayers.min.js">script>
MapVGL中内置了Threejs,在引入mapvgl.threelayers之后,您不必在项目中再次引入Three.js,可以通过如下方法拿到THREE对象
var THREE = mapvgl.THREE;
例如使用mapv+Three+ThreeGLTFLoader()实现三维模型加载:
- // 创建图层
- let layer = new mapvgl.ThreeLayer();
-
- // 将图层添加到管理器
- view.addLayer(layer);
- //坐标转换
- var tPoint = mapvgl.MercatorProjection.convertLL2MC(point);
- //初始化Three
- var THREE = mapvgl.THREE;
- //加载模型
- var loader = new THREE.GLTFLoader();
- loader.load("./assets/model/rocket.glb", (gltf) => {
- console.log(gltf);
- var model = gltf.scene;
- model.position.set(tPoint.lng, tPoint.lat, 0);
- model.scale.set(10, 10, 10);
- layer.add(model);
-
- // 添加平行光
- var light = new THREE.DirectionalLight(0xffffff, 1);
- light.position.set(0, 0, 1);
- layer.add(light);
- var light1 = new THREE.DirectionalLight(0xffffff, 1);
- light.position.set(1, 1, 1);
- layer.add(light1);
- });
实现效果:

1.bloomEffect炫光效果
- // 创建炫光处理通道
- var bloomEffect = new mapvgl.BloomEffect({
- threshold: 0.2,
- blurSize: 2.0
- });
-
- // 在图层管理器View中,通过传入effects参数使用
- var view = new mapvgl.View({
- effects: [bloomEffect],
- map: bmapgl
- });
实现效果:

2.BrightEffect发光特效
- // 创建炫光处理通道
- var bright = new mapvgl.BrightEffect({
- threshold: 0.2,
- blurSize: 2.0,
- clarity: 0.8
- });
-
- // 在图层管理器View中,通过传入effects参数使用
- var view = new mapvgl.View({
- effects: [bright],
- map: bmapgl
- });
实现效果: