zoukankan      html  css  js  c++  java
  • maptalks 开发GIS地图(27)maptalks.three.20

    1. 自定义圆圈,从效果上来看,并没有太惊艳,普通的canvas应用,不过圆圈的颜色是渐变色,

    这个还是头一次看到实际的应用,平时不太敢想这么去做。

    2. 渐变色是使用 canvas 制作的。使用了 ctx.createLinearGradient。

     1         function getMaterial(fontSize, text, fillColor) {
     2             var SIZE = 256;
     3             var canvas = document.createElement('canvas');
     4             canvas.width = canvas.height = SIZE;
     5             var ctx = canvas.getContext('2d');
     6             var gradient = ctx.createLinearGradient(0, 0, SIZE, 0);
     7             // gradient.addColorStop("0", "#ffffff");
     8             gradient.addColorStop("0.0", "#1a9bfc");
     9             gradient.addColorStop("1.0", "#7049f0");
    10             // gradient.addColorStop("0.66", "white");
    11             // gradient.addColorStop("1.0", "red");
    12 
    13             ctx.strokeStyle = gradient;
    14             ctx.lineWidth = 40;
    15             ctx.arc(SIZE / 2, SIZE / 2, SIZE / 2, 0, Math.PI * 2);
    16             ctx.stroke();
    17             ctx.fillStyle = fillColor;
    18             ctx.font = `${fontSize}px Aria`;
    19             ctx.textAlign = 'center';
    20             ctx.textBaseline = 'middle';
    21             ctx.fillText(text, SIZE / 2, SIZE / 2);
    22             ctx.rect(0, 0, SIZE, SIZE);
    23             var texture = new THREE.Texture(canvas);
    24             texture.needsUpdate = true; //使用贴图时进行更新
    25 
    26             var material = new THREE.MeshPhongMaterial({
    27                 map: texture,
    28                 // side: THREE.DoubleSide,
    29                 transparent: true
    30             });
    31             return material;
    32         }

    3. 添加圆圈

     1 function addCircles() {
     2             var lnglats = [
     3                 [13.429362937522342, 52.518205849377495]
     4                 , [13.41688993786238, 52.52216099633924]
     5                 , [13.417991247928398, 52.53296954185342]
     6                 , [13.438154245439819, 52.533321196953096]
     7                 , [13.450418871799684, 52.52653968753597]
     8                 , [13.390340036780685, 52.51953598324846]
     9                 , [13.399921081391199, 52.50920191922407]
    10                 , [13.366122901455583, 52.50949703597493]
    11                 , [13.365784792637783, 52.51964629275582]
    12                 , [13.371429857108524, 52.528732386936014]
    13                 , [13.383686384074508, 52.53781463596616]
    14                 , [13.40395563186371, 52.540223413847315]
    15                 , [13.361485408920998, 52.53916869831616]
    16                 , [13.35373758485457, 52.52883597474849]
    17                 , [13.355233792792774, 52.519259850666316]
    18                 , [13.369548077301943, 52.506940362998336]
    19                 , [13.338732610093984, 52.50860998116909]
    20                 , [13.341879792058194, 52.52318729489704]
    21                 , [13.348448231846305, 52.537668773653735]
    22             ];
    23             var text = Math.round(Math.random() * 10000);
    24             var material = getMaterial(70, text, '#fff');
    25             circles = lnglats.map(function (lnglat) {
    26                 var circle = new Circle(lnglat, {
    27                     radius: 200
    28                 }, material, threeLayer);
    29 
    30                 //tooltip test
    31                 circle.setToolTip('id:' + circle.getId(), {
    32                     showTimeout: 0,
    33                     eventsPropagation: true,
    34                     dx: 10
    35                 });
    36 
    37 
    38                 //infowindow test
    39                 circle.setInfoWindow({
    40                     content: 'id:' + circle.getId(),
    41                     title: 'message',
    42                     animationDuration: 0,
    43                     autoOpenOn: false
    44                 });
    45 
    46 
    47                 //event test
    48                 ['click', 'mousemove', 'mouseout', 'mouseover', 'mousedown', 'mouseup', 'dblclick', 'contextmenu'].forEach(function (eventType) {
    49                     circle.on(eventType, function (e) {
    50                         console.log(e.type, e);
    51                     });
    52                 });
    53                 return circle;
    54             });
    55             threeLayer.addMesh(circles);
    56 
    57             initGui();
    58         }

    4. 页面显示

    5. 源码地址

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

  • 相关阅读:
    【CF 359B】Permutation
    如何更新 DevC++ 的编译器
    【LG 2801】教主的魔法
    矩阵浅谈
    NOI 系列赛常见技术问题整理
    Treap 浅谈
    DP 优化浅谈
    友链
    【CF 708C】Centroids
    我跳过的坑
  • 原文地址:https://www.cnblogs.com/googlegis/p/14735232.html
Copyright © 2011-2022 走看看