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

    1. 广告牌的效果,关键是每个的样式和颜色可以自定义。

    2. 从代码中可以看出,使用了 canvas ,并将对应的 canvas 转化为image。

    自己的功力不够,只能看出来这一点,还不知道对不对。等回来找本 ThreeJS 的书看。

    3. 初始化数据

     1  function initData() {
     2             data.forEach(element => {
     3                 const style = {
     4                     x: width * Math.random(),
     5                     y: height * Math.random(),
     6                     text: element.text,
     7                     //  50,
     8                     height: 50,
     9                     textFill: element.color,
    10                     // scale fontSize 18*2
    11                     textFont: '36px Microsoft Yahei',
    12                     textBackgroundColor: '#2A2523',
    13                     textPadding: [10, 15],
    14                     textShadowColor: '#fff',
    15                     textShadowBlur: 2
    16                 };
    17                 const text = new zrender.Text({
    18                     style
    19                 });
    20                 zr.add(text);
    21                 const rect = getRect(text.getBoundingRect());
    22                 createZr(element, rect, style, function () {
    23                     if (list.length === data.length) {
    24                         addSprites();
    25                     }
    26                 });
    27             });
    28         }

    4. 使用 canvas 描述本文对象

     1  function getRect(bound) {
     2             const { width, height, x, y } = bound;
     3             const w = Math.max(2, THREE.Math.ceilPowerOfTwo(width));
     4             const h = Math.max(2, THREE.Math.ceilPowerOfTwo(height));
     5             return {
     6                 width, height, w, h
     7             };
     8         }
     9 
    10         function createZr(d, rect, style, callback) {
    11             const { w, h, width, height } = rect;
    12             let canvas = document.createElement('canvas');
    13             canvas.width = w;
    14             canvas.height = h;
    15 
    16             const zr = zrender.init(canvas, {
    17                  w,
    18                 height: h
    19             });
    20             const options = Object.assign({}, style);
    21             options.x = (w / 2 - width / 2);
    22             options.y = (h / 2 - height / 2);
    23             const text = new zrender.Text({
    24                 style: options
    25             });
    26             zr.add(text);
    27             zr.on('rendered', () => {
    28                 d.image = canvas.toDataURL();
    29                 d.rect = rect;
    30                 list.push(d);
    31                 callback();
    32                 zr.dispose();
    33                 canvas = null;
    34             })
    35 
    36         }

    5. 页面显示

    6. 源码地址

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

  • 相关阅读:
    python项目_mysql开启事务
    python项目_ImageField字段
    linux基础_常用命令
    mysql数据_查询操作
    list 和 tuple——python基础学习
    python-格式化
    python-字符串
    数学——变上限积分的应用
    python-交互模式
    蓝桥杯——汉诺塔问题
  • 原文地址:https://www.cnblogs.com/googlegis/p/14735045.html
Copyright © 2011-2022 走看看