maptalks 开发GIS地图(26)maptalks.three.19 - custom-bridge

1. 自定义高架,每个高架路线为经纬度数组,

其中包括经度、纬度、高度。

 

 

2. 调用addLine函数添加对象。

 1  function addLine(lnglats, name, width = 8) {
 2             const lineString = new maptalks.LineString(lnglats);
 3             const altitudes = lnglats.map(lnglat => {
 4                 return lnglat[2] / 10;
 5             });
 6             lineString.setProperties({ altitudes });
 7             const line = new Bridge(lineString, { width }, material, threeLayer);
 8             line.setToolTip(name, {
 9                 showTimeout: 0,
10                 eventsPropagation: true,
11                 dx: 10
12             });
13 
14 
15             const { coordinates, height } = line.getOptions();
16             const alts = coordinates.map(c => {
17                 return c[2];
18             })
19             const pLine = new maptalks.LineString(coordinates);
20             pLine.setProperties({
21                 altitudes: alts
22             });
23             const edgeLine = new Line(pLine, { altitude: -0.05, offset: -0.05 }, edgeLineMaterial, threeLayer);
24             const edgeLine1 = new Line(pLine, { altitude: height + 0.05, offset: height + 0.05 }, edgeLineMaterial, threeLayer);
25 
26             const centerLine = new Line(lineString, { altitude: 1.1, offset: 1.1 }, linematerial, threeLayer);
27 
28             threeLayer.addMesh([line, centerLine, edgeLine, edgeLine1]);
29             meshes.push(line);
30 
31             helperMeshes.push(centerLine, edgeLine, edgeLine1);
32         }

 

3. 其中的红黑效果,最后发现是通过不同的材质组合构成的。

 1    var material = new THREE.MeshBasicMaterial({ color: 'rgb(12,12,17)', transparent: true, wireframe: false });
 2         var highlightmaterial = new THREE.MeshBasicMaterial({ color: 'yellow', transparent: true });
 3 
 4         const material1 = new THREE.MeshLambertMaterial({
 5             color: '#000'
 6         });
 7         const highlightmaterial1 = new THREE.MeshLambertMaterial({
 8             color: 'red'
 9         });
10 
11         var edgeLineMaterial = new THREE.LineBasicMaterial({
12             color: '#fff',
13             transparent: true,
14             opacity: 0.6
15         });
16 
17         var linematerial = new THREE.LineDashedMaterial({
18             color: '#fff',
19             dashSize: 0.05,
20             gapSize: 0.05
21         });

 

4. 页面显示

 

 

5. 源码地址

https://github.com/WhatGIS/maptalkMap/tree/main/threelayer/demo

 

 
posted @ 2021-05-06 14:57  googlegis  阅读(377)  评论(0编辑  收藏  举报

坐标合肥,非典型GIS开发人员 GitHub