iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >cesium开发之如何在vue项目中使用cesium,使用离线地图资源
  • 890
分享到

cesium开发之如何在vue项目中使用cesium,使用离线地图资源

cesium开发vue使用cesiumvue使用离线地图资源 2023-05-18 11:05:01 890人浏览 八月长安
摘要

目录Vue使用cesium,使用离线地图资源cesium添加百度地图总结vue使用cesium,使用离线地图资源 第一步:创建vue项目并下载最新版本的Cesium 注意最好下载最新

vue使用cesium,使用离线地图资源

第一步:创建vue项目并下载最新版本的Cesium

注意最好下载最新的版本(当前是1.91),以确保可以流畅使用官方api。博主有过因为使用旧版本Cesium导致无法调用API的情况。

npm cesium

第二步:在node_modules文件夹中补充离线资源

项目根目录的node_modules文件夹中,找到cesium文件夹

根据以下2个路径:node_modules\cesium\Build\Cesium\Assets\Textures和node_modules\cesium\Source\Assets\Textures找到用于存放离线地图的文件夹。

在这个文件夹下,补充离线地图数据(这个资源需要大家自己在网络上找)。

离线地图资源

第三步:使用cesium生成地球

1.在vue文件中创建html结构

<div id="container"></div>

2.利用cesium构造函数初始化地球

别忘了在data中定义空对象viewer

this.viewer = new Cesium.Viewer("container", {
      geocoder: false,
      timeline: false,
      fullscreenButton: false,
      animation: false,
      shouldAnimate: true,
    });

第四步:使用离线地图资源替换网络地图资源

在构造函数中补充以下2个属性:

this.viewer = new Cesium.Viewer("container", {
      imageryProvider: new Cesium.TileMapServiceImageryProvider({
        url: Cesium.buildModuleUrl("Assets/Textures/MyEarthII"),
      }),
      baseLayerPicker: false
    });

最后附上cesium官网对imageryProvider用法的解释:

The imagery provider to use. This value is only valid if baseLayerPicker is set to false.

用于提供地图图像。仅当baseLayerPicker为false时有效。

cesium添加百度地图

百度地图的瓦块切片规则与大多数地图不同,其中心点位于地理坐标的0,0点,多数地图的切片是以地图左上角为瓦块切片的起点。

Cesium中默认的切片地图(UrlTemplateImageryProvider)包括经纬度模式和投影(墨卡托)模式都是以左上角切片为基准。所以当我们加载百度地图瓦块地图时,需要自定义地图影像地图类。

BaiduImageryProvider = function(options) {
    this._errorEvent = new Cesium.Event();
    this._tileWidth = 256;
    this._tileHeight = 256;
    this._maximumLevel = 18;
    this._minimumLevel = 1;
    let southwestInMeters = new Cesium.Cartesian2(-33554054, -33746824);
    let northeastInMeters = new Cesium.Cartesian2(33554054, 33746824);
    this._tilingScheme = new Cesium.WEBMercatorTilingScheme({
        rectangleSouthwestInMeters: southwestInMeters,
        rectangleNortheastInMeters: northeastInMeters
    });
    this._rectangle = this._tilingScheme.rectangle;
    this._resource = Cesium.Resource.createIfNeeded(options.url);
    this._tileDiscardPolicy = undefined;
    this._credit = undefined;
    this._readyPromise = undefined;
};
 
Object.defineProperties(Cesium.gm.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) {
    let xTileCount = this._tilingScheme.getNumberOfXTilesAtLevel(level);
    let yTileCount = this._tilingScheme.getNumberOfYTilesAtLevel(level);
    let url = this.url
        .replace("{x}", x - xTileCount / 2)
        .replace("{y}", yTileCount / 2 - y - 1)
        .replace("{z}", level)
        .replace("{s}", Math.floor(10 * Math.random()));
    console.log("zxy:" + level + ", " + x + ", " + y + "; " + url);
    return Cesium.ImageryProvider.loadImage(this, url);
};

调用时,传入url参数即可,url服务可以使在线服务,也可以是代理服务(按百度地图切片索引规则)。例如:

let baiduImageryProvider = 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 viewer = new Cesium.Viewer('cesiumContainer', {
    imageryProvider: baiduImageryProvider,
    ...
}

这时就可以在Cesium中正常加载百度地图了。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: cesium开发之如何在vue项目中使用cesium,使用离线地图资源

本文链接: https://www.lsjlt.com/news/211999.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • cesium开发之如何在vue项目中使用cesium,使用离线地图资源
    目录vue使用cesium,使用离线地图资源cesium添加百度地图总结vue使用cesium,使用离线地图资源 第一步:创建vue项目并下载最新版本的Cesium 注意最好下载最新...
    99+
    2023-05-18
    cesium开发 vue使用cesium vue使用离线地图资源
  • 如何在vue项目中使用百度地图API
    目录1、在百度地图开放平台注册账号并登录2、选择自己所需的地图版本:3、在我们的vue项目中的public文件夹下的index.html中引入并记得替换上你的ak(这个ak不是其他的...
    99+
    2024-04-02
  • vue项目中如何使用高德地图
    这篇文章主要介绍“vue项目中如何使用高德地图”,在日常操作中,相信很多人在vue项目中如何使用高德地图问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue项目中如何使用高德地图”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-05
  • Vue开发项目中如何使用Font Awesome 5
    目录安装依赖配置使用1. 进入图标搜索页2. 输入想使用的图标的英文,例如用户的英文是 user3. 过滤收费图标4.点击图标查看5. 查看结果总结Font Awesome 官网:h...
    99+
    2024-04-02
  • 怎么在vue项目中使用百度地图API
    小编给大家分享一下怎么在vue项目中使用百度地图API,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!为什么要使用VueVue是一款友好的、多用途且高性能的Java...
    99+
    2023-06-14
  • 如何在Vue项目中使用vuex
    目录在Vue项目中使用vuex一、安装vuex二、创建store三、挂载store四、在组件中使用五、在Vue组件中监听Vuex总结在Vue项目中使用vuex 在一个vue项目中使用...
    99+
    2023-01-28
    Vue使用vuex Vue vuex Vue项目中使用vuex
  • Mock.js在Vue项目中如何使用
    本篇内容主要讲解“Mock.js在Vue项目中如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mock.js在Vue项目中如何使用”吧!Mock.js 初体验安装:npm ins...
    99+
    2023-07-02
  • 在vue3项目中如何使用新版高德地图
    这篇文章主要讲解了“在vue3项目中如何使用新版高德地图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在vue3项目中如何使用新版高德地图”吧!1. 首先你要注册好账号登录2. 获取key和...
    99+
    2023-07-05
  • 如何在使用 PHP 和 Django 的项目中优化资源加载?
    在开发 PHP 和 Django 项目时,优化资源加载是一个重要的方面,它可以显著提高应用程序的性能和用户体验。在本文中,我们将探讨一些优化资源加载的技术,以确保您的项目具有最佳性能。 一、使用 CDN 内容分发网络(CDN)是一种网络解决...
    99+
    2023-08-28
    npm django load
  • 如何在vue项目中使用UEditor--plus
    目录1:UEditor-plus富文本编辑器如何在vue项目中使用2.使用方法3.运行项目1:UEditor-plus富文本编辑器如何在vue项目中使用 备注:UEditor是由百度...
    99+
    2024-04-02
  • 在React、Vue项目中如何使用SVG
    这篇文章将为大家详细讲解有关在React、Vue项目中如何使用SVG,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在一些现代的扁平化设计网站,特别是移动端网站,经常会包含...
    99+
    2024-04-02
  • 线程池如何在Java项目中使用
    今天就跟大家聊聊有关线程池如何在Java项目中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java通过Executors提供四种线程池,分别为:newCachedThreadP...
    99+
    2023-05-31
    java 线程池 ava
  • vue项目中如何使用axios上传图片
    这篇文章将为大家详细讲解有关vue项目中如何使用axios上传图片,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。axios 简介axios 是一个基于Promise 用于...
    99+
    2024-04-02
  • 如何在Vue项目中使用axios请求
    目录1、安装2、没有封装存在的问题3、创建文件4、请求地址配置5、axios 配置,设置请求头及响应码处理6、使用在实际的项目中,和后台的数据交互是少不了的,我通常使用的是 axio...
    99+
    2024-04-02
  • PHP开发技术:如何在项目中使用PATH API?
    在PHP开发中,PATH API是一个非常有用的工具,它可以让开发者在项目中轻松地处理URL路径。PATH API可以帮助我们解决很多问题,比如URL重写、路由、访问控制等等。在本文中,我们将探讨如何在项目中使用PATH API。 一、什...
    99+
    2023-10-25
    开发技术 path api
  • vue项目中如何使用vue-cropper做图片裁剪
    这篇文章主要介绍了vue项目中如何使用vue-cropper做图片裁剪的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue项目中如何使用vue-cropper做图片裁剪文章都会有所收获,下面我们一起来看看吧。一...
    99+
    2023-07-04
  • C#中如何使用多线程并发访问网络资源
    C#中如何使用多线程并发访问网络资源,需要具体代码示例在现代网络应用程序中,对于许多任务来说,并发性是至关重要的。多线程以及异步编程技术可以提高网络请求和处理数据的效率,并使用户体验更加流畅。在C#中,我们可以使用多线程来实现并发访问网络资...
    99+
    2023-10-22
    网络资源 并发访问 C#多线程
  • 线性表接口如何在java项目中使用
    这篇文章给大家介绍线性表接口如何在java项目中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。java 线性表接口的实例详解前言:线性表是其组成元素间具有线性关系的一种线性结构,对线性表的基本操作主要有插入、删除、...
    99+
    2023-05-31
    java 线性表 ava
  • 如何在Linux中使用Git来管理您的开发项目?
    在Linux中使用Git来管理您的开发项目,是一种高效、可靠的方式。Git是一个流行的版本控制系统,它可以跟踪您的代码更改,并帮助您协作开发。本文将介绍如何在Linux中使用Git来管理您的开发项目。 安装Git 首先,您需要在Linux...
    99+
    2023-08-02
    bash linux git
  • 如何在vue项目中使用封装后的axios
    这篇文章给大家介绍如何在vue项目中使用封装后的axios,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。为什么要使用VueVue是一款友好的、多用途且高性能的JavaScript框架,使用vue可以创建可维护性和可测试...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作