cesium加载百度底图的方法源码

news/2024/7/10 0:21:21 标签: vue, 前端

封装百度的js

function BaiduImageryProvider(options) {
    this._errorEvent = new Cesium.Event();
    this._tileWidth = 256;
    this._tileHeight = 256;
    this._maximumLevel = 18;
    this._minimumLevel = 1;
    var southwestInMeters = new Cesium.Cartesian2(-33554054, -33746824);
    var northeastInMeters = new Cesium.Cartesian2(33554054, 33746824);
    this._tilingScheme = new Cesium.WebMercatorTilingScheme({
        rectangleSouthwestInMeters: southwestInMeters,
        rectangleNortheastInMeters: northeastInMeters
    });
    this._rectangle = this._tilingScheme.rectangle;
    var resource = Cesium.Resource.createIfNeeded(options.url);
    this._resource = resource;
    this._tileDiscardPolicy = undefined;
    this._credit = undefined;
    this._readyPromise = undefined;
}

Object.defineProperties(BaiduImageryProvider.prototype, {
    url: {
        get: function () {
            return this._resource.url;
        }
    },
    proxy: {
        get: function () {
            return this._resource.proxy;
        }
    },
    tileWidth: {
        get: function () {
            if (!this.ready) {
                throw new Cesium.DeveloperError('tileWidth must not be called before the imagery provider is ready.');
            }
            return this._tileWidth;
        }
    },

    tileHeight: {
        get: function () {
            if (!this.ready) {
                throw new Cesium.DeveloperError('tileHeight must not be called before the imagery provider is ready.');
            }
            return this._tileHeight;
        }
    },

    maximumLevel: {
        get: function () {
            if (!this.ready) {
                throw new Cesium.DeveloperError('maximumLevel must not be called before the imagery provider is ready.');
            }
            return this._maximumLevel;
        }
    },

    minimumLevel: {
        get: function () {
            if (!this.ready) {
                throw new Cesium.DeveloperError('minimumLevel must not be called before the imagery provider is ready.');
            }
            return this._minimumLevel;
        }
    },

    tilingScheme: {
        get: function () {
            if (!this.ready) {
                throw new Cesium.DeveloperError('tilingScheme must not be called before the imagery provider is ready.');
            }
            return this._tilingScheme;
        }
    },

    tileDiscardPolicy: {
        get: function () {
            if (!this.ready) {
                throw new Cesium.DeveloperError('tileDiscardPolicy must not be called before the imagery provider is ready.');
            }
            return this._tileDiscardPolicy;
        }
    },

    rectangle: {
        get: function () {
            if (!this.ready) {
                throw new Cesium.DeveloperError('rectangle must not be called before the imagery provider is ready.');
            }
            return this._rectangle;
        }
    },

    errorEvent: {
        get: function () {
            return this._errorEvent;
        }
    },
    ready: {
        get: function () {
            return this._resource;
        }
    },
    readyPromise: {
        get: function () {
            return this._readyPromise;
        }
    },
    credit: {
        get: function () {
            if (!this.ready) {
                throw new Cesium.DeveloperError('credit must not be called before the imagery provider is ready.');
            }
            return this._credit;
        }
    },
});

BaiduImageryProvider.prototype.requestImage = function (x, y, level, request) {
    var r = this._tilingScheme.getNumberOfXTilesAtLevel(level);
    var c = this._tilingScheme.getNumberOfYTilesAtLevel(level);
    var s = this.url.replace("{x}", x - r / 2).replace("{y}", c / 2 - y - 1).replace("{z}", level).replace("{s}", Math.floor(10 * Math.random()));
    return Cesium.ImageryProvider.loadImage(this, s);
};

开发初始化项目中使用

 Cesium.Ion.defaultAccessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIyZmM3OTY4YS1lMzgyLTQ1NTktOTUxNi1hYTAwZTgxYzRmMDYiLCJpZCI6NTE1MjIsImlhdCI6MTYxODE5NTEyOH0.6ZTCtmnrtslvMlO2VLNOh8GEPv63LFrgQyW3GnSNuxE";
      Window.viewer = new Cesium.Viewer("container", {
        infoBox: false,
        selectionIndicator: false,
        navigation: false,
        animation: false,
        timeline: false,
        baseLayerPicker: false,
        geocoder: false,
        homeButton: false,
        sceneModePicker: false,
        navigationHelpButton: false,
        shouldAnimate: true,
        fullscreenButton: false,
        contextOptions: {
          webgl: {
            alpha: true,
            depth: false,
            stencil: true,
            antialias: true,
            premultipliedAlpha: true,
            preserveDrawingBuffer: true,
            failIfMajorPerformanceCaveat: true,
          },
          allowTextureFilterAnisotropic: true,
        },
        requestRenderMode: true, //降低应用中Cesium的CPU使用率。
         imageryProvider: new BaiduImageryProvider({
           url: "http://online{s}.map.bdimg.com/onlinelabel/?qt=tile&x={x}&y={y}&z={z}&styles=pl&scaler=1&p=1",
        }),
      });
 		// 分辨率调整函数
      let adjustmentPixel = function () {
        // 判断是否支持图像渲染像素化处理
        var supportsImageRenderingPixelated =
           Window.viewer.cesiumWidget._supportsImageRenderingPixelated;
        if (supportsImageRenderingPixelated) {
          // 直接拿到设备的像素比例因子 - 如我设置的1.25
          var vtxf_dpr = window.devicePixelRatio;
          // 这个while我们在后面会做一个说明,但不是解决问题的说明
          while (vtxf_dpr >= 2.0) {
            vtxf_dpr /= 2.0;
          }
          // 设置渲染分辨率的比例因子
           Window.viewer.resolutionScale = vtxf_dpr;
        }
      };
      adjustmentPixel();

这个是源码使用百度底图的方法,还有另外一种加载插件可以加载百度底图和其他底图

cesiumMap插件(可加载腾旭、天地图、高德、谷歌地图)

gitee插件地址https://gitee.com/xiaolongshiyl/cesium-map


http://www.niftyadmin.cn/n/432513.html

相关文章

《现代中学生》初中版期刊简介及投稿邮箱

《现代中学生》初中版期刊简介: 《现代中学生》现代中学生初中版 主管单位 吉林省教育厅 主办单位 吉林教育杂志社 国际刊号ISSN:1009-5748;国内刊号CN:22-1046/G4;邮发代号:12-52 出版周期&#xff1…

企业如何选择最佳的CDN服务?

根据研究表明,47%的客户更喜欢能在2秒内加载完成的网页,不仅如此,如果一个网站的加载时间超过3秒,那么40%的访问者会毫不犹豫的离开你的网站。所以使用正确的内容交付网络对初创公司尤为关键。它有助于实现快速、安全的内容交付。…

ThreadLocal了解

文章目录 概述源码原理内存泄露应用场景 概述 ThreadLocal提供线程的局部变量,这种变量与普通变量的区别在于,每个访问这种变量的线程都有自己的、独立的变量副本。用于解决多线程间的数据隔离问题。 源码 //返回Thread实例的成员变量threadLocals Th…

怎么把图片放大不改变清晰度,给大家介绍两个方法

时代的发展和进步,我们在使用手机、电脑等设备时,常常需要对图片进行放大操作。从功能上来说,图片放大可以让我们更好地观看和理解图片内容,同时也可以提高图像分辨率和清晰度,以满足不同的需求和场景首先,…

AI Expo 2023 | 图技术激活数据资产主题论坛线下报名限时开放!

洞察关联数据 创造无限可能 图技术激活数据资产主题论坛 将于2023年6月25日在苏州召开。 大会背景 本次图技术激活数据资产论坛,由苏州市大数据服务中心协会主办、浙江创邻科技有限公司承办,苏州市计算机学会、苏州市大数据和人工智能产业联盟协办&…

std::unique_lock的使用

std::unique_lock 是 C11 中的一个互斥量封装类,用于提供更灵活和安全的互斥访问。与 std::lock_guard 不同,std::unique_lock 可以随时释放互斥锁,并且支持对互斥量进行延迟加锁和递归加锁。 在使用 std::unique_lock 时,需要先…

Clean架构与MVVM:助你打造优质Android应用

Android应用程序开发可能具有挑战性,特别是在创建可扩展和可维护的代码以适应不断变化的需求和用户需求方面。为了解决这个挑战,开发者通常依赖于软件架构模式,为代码组织和关注点分离提供了坚实的基础。在Android开发中,两种流行…

Stream流

Stream流学习 初识Stream 背景要求 传统代码实现 public class Stream01 {Testpublic void test04() {/*** ArrayList<String> list new ArrayList<>();* 把所有的张姓 存储到新集合中* 并且要求名字长度为3* 打印遍历*/List<String> strings Arrays…