cesium源码编译调试及调用全过程

这篇具有很好参考价值的文章主要介绍了cesium源码编译调试及调用全过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

完整记录一次cesium源码从下载、打包、调用、调试的全过程。

本文使用软件或API版本:

VSCode

Node:12.18.3

cesium版本:1.94

总体步骤:

  • 下载源码
  • 执行npm install和npm start启动web服务
  • 打包源码(npm run combine打包前可以先将申请到的cesium的token更改到ion.js文件中的默认值中)
  • 运行测试html页面,并进行源码调试

详细图文步骤如下:

1、从github上搜索cesium,从Release中找到需要使用的版本,下载Source code(zip)源码

https://github.com/CesiumGS/cesium/archive/refs/tags/1.94.zip

cesium源码编译调试及调用全过程

 下载成功后,如下所示:

cesium源码编译调试及调用全过程

 2、使用vscode打开,并执行安装、运行命令

npm install

 文章来源地址https://www.toymoban.com/news/detail-420576.html

cesium源码编译调试及调用全过程

如果在执行npm install报错,可以尝试多执行几次(有时候发现第一次报错,第二次就成功不错了,具体问题要具体分析),或者根据报错确定缺少哪个依赖包,进行单独安装。

安装完成后,会在目录下生成一个node_modules文件夹

cesium源码编译调试及调用全过程

 

然后执行启动命令

npm start

cesium源码编译调试及调用全过程

 这样就可以访问Apps里的应用了。默认端口是8080,可以把地址拷贝到浏览器上去访问:

cesium源码编译调试及调用全过程

注意:

(1)npm start启动cesium 访问的命令,如果8080端口被占用,需要更改一个新的端口或者用命令起一个新的端口,它没有webpack那么智能,在端口被占用的情况下,自己可以换一个新的端口。

更改默认端口可以在server.cjs中修改:

cesium源码编译调试及调用全过程

也可以手动换个端口号运行,执行以下命令:

node server.js --port 8081

 

 (2)Cesium的npm start命令启动的服务, 只能在本机查看 ,不能通过局域网访问,如果需要在局域网内访问,可以执行以下命令:

npm run startPublic

 

 3、运行示例页面(需要先运行命令打包)

打开Hello World发现页面是空的:(http://localhost:8080/Apps/HelloWorld.html)

cesium源码编译调试及调用全过程

没关系,我们可以找到对应Apps目录下的HelloWorld.html,打开它:

cesium源码编译调试及调用全过程

发现cesium的引用是在Build目录下,而我们的目录下并没有Build,此时我们需要先进行打包,运行以下命令

npm run minifyRelease 或 npm run minify

 

 运行后,会生成Build\Cesium文件夹(Hello World.html页面引用的api):

cesium源码编译调试及调用全过程

 

如果需要生成可调试的源码,需要使用命令:

npm run combine

 

这时生成的cesium.js在CesiumUnminified目录下,页面的引用需要修改为:

<script src="../Build/CesiumUnminified/Cesium.js"></script>
    <style>
      @import url(../Build/CesiumUnminified/Widgets/widgets.css);
      html,
      body,
      #cesiumContainer {
        width: 100%;
        height: 100%;
        margin: 0;
        padding: 0;
        overflow: hidden;
      }
    </style>

 

具体打包命令参考:https://www.cnblogs.com/kk8085/p/17341177.html

这时候再通过npm start启动web服务,访问Hello World.html:

cesium源码编译调试及调用全过程

但是还是报错,没有球体出来,这是因为需要申请cesium token,申请地址:

https://cesium.com/ion/tokens

把申请下来的tokens放在Ion文件defaultAccessToken中或者在调用页面初始化cesium前设置token。

(1)可以找到文件Source\Core\Ion.js,打开修改defaultAccessToken值,这种方式是在源码中修改,修改完后需要重新打包。

cesium源码编译调试及调用全过程

(2)在调用页面初始化cesium前设置token

Cesium.Ion.defaultAccessToken = cesium_tk;
let viewer = new Cesium.Viewer('cesiumContainer', {
        // baseLayerPicker: false,
        timeline: true,
        homeButton: true,
        fullscreenButton: true,
        infoBox: true,
        animation: true,
        shouldAnimate: true
    });

 

 通过修改ion.js文件,重新打包后,在运行,此时Hello World.html访问正常了。

cesium源码编译调试及调用全过程

 4、可以将自己的测试页面放到Apps下,进行调试:

cesium源码编译调试及调用全过程

代码通过使用WebMapServiceImageryProvider、ArcGisMapServerImageryProvider加载ArcGIS全球影像和中国矢量数据,效果如下:

cesium源码编译调试及调用全过程

cesiumlayer.html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <!-- Use correct character set. -->
    <meta charset="utf-8"/>
    <!-- Tell IE to use the latest, best version. -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <!-- Make the application on mobile take up the full browser screen and disable user scaling. -->
    <meta
            name="viewport"
            content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"
    />
    <title>cesium加载影像和矢量数据</title>
    <script src="../Build/CesiumUnminified/Cesium.js"></script>
    <style>
        @import url(../Build/CesiumUnminified/Widgets/widgets.css);

        html,
        body,
        #cesiumContainer {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            overflow: hidden;
        }
    </style>
</head>
<body>
<div id="cesiumContainer"></div>
<script>
    //天地图token
    let TDT_tk = "通过天地图官网申请token";
    //Cesium token
    let cesium_tk = "通过cesium官网申请获取token";
    //天地图影像
    let TDT_IMG_C = "http://{s}.tianditu.gov.cn/img_c/wmts?service=wmts&request=GetTile&version=1.0.0" +
        "&LAYER=img&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}" +
        "&style=default&format=tiles&tk=" + TDT_tk;

    //标注
    let TDT_CIA_C = "http://{s}.tianditu.gov.cn/cia_c/wmts?service=wmts&request=GetTile&version=1.0.0" +
        "&LAYER=cia&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}" +
        "&style=default&format=tiles&tk=" + TDT_tk;
    
    //初始页面加载
    //Cesium.Ion.defaultAccessToken = cesium_tk;
    let viewer = new Cesium.Viewer('cesiumContainer', {
        // baseLayerPicker: false,
        timeline: true,
        homeButton: true,
        fullscreenButton: true,
        infoBox: true,
        animation: true,
        shouldAnimate: true,
        //imageryProvider: layer, //设置默认底图
    });
    let rightTilt = true;
    if (rightTilt) {
      viewer.scene.screenSpaceCameraController.tiltEventTypes = [
        Cesium.CameraEventType.RIGHT_DRAG,
        Cesium.CameraEventType.PINCH,
        {
          eventType: Cesium.CameraEventType.LEFT_DRAG,
          modifier: Cesium.KeyboardEventModifier.CTRL
        },
        {
          eventType: Cesium.CameraEventType.RIGHT_DRAG,
          modifier: Cesium.KeyboardEventModifier.CTRL
        }
      ]
      viewer.scene.screenSpaceCameraController.zoomEventTypes = [
        Cesium.CameraEventType.MIDDLE_DRAG,
        Cesium.CameraEventType.WHEEL,
        Cesium.CameraEventType.PINCH
      ]
    }
    
    viewer.imageryLayers.remove(viewer.imageryLayers.get(0))
    //添加tms
    let tms = {};
    tms.url =  "http://10.0.7.16:81/tms";
    if (tms) {
      const layerInfo = {
        url: tms.url,
        fileExtension: tms.fileExtension || 'jpg',
        maximumLevel: tms.maxZoom || 7,
        name: 'tms'
      }
      const tmsService = new Cesium.TileMapServiceImageryProvider(layerInfo)
      tmsService.layerInfo = layerInfo
    }
    //添加地形
    let terrain = {};
    terrain.url =  "http://data.marsgis.cn/terrain";
    if (terrain) {
        const terrainLayer = new Cesium.CesiumTerrainProvider({
            url: terrain.url
            })
        viewer.terrainProvider = terrainLayer
    }

    _matrixIds = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18"]
    //调用影响中文注记服务
    /*viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
        url: TDT_CIA_C,
        layer: "tdtImg_c",
        style: "default",
        format: "tiles",
        tileMatrixSetID: "c",
        subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"],
        tilingScheme: new Cesium.GeographicTilingScheme(),
        tileMatrixLabels: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19"],
        maximumLevel: 50,
        show: false
    }))*/
    
    //使用ArcGisMapServerImageryProvider加载影像没成功,改用WebMapServiceImageryProvider
    //var world = new Cesium.ArcGisMapServerImageryProvider({
        //url:'http://10.1.88.200:6080/arcgis/rest/services/test/globaltdt5/MapServer',
    //});
    //viewer.imageryLayers.addImageryProvider(world);
    var arcgisyx = new Cesium.WebMapServiceImageryProvider({
    url:'http://10.1.88.200:6080/arcgis/rest/services/test/globaltdt5/MapServer/tile/{z}/{y}/{x}',
    layers:[0]
    });
    viewer.imageryLayers.addImageryProvider(arcgisyx);
    var china = new Cesium.ArcGisMapServerImageryProvider({
        url:'http://10.1.88.200:6080/arcgis/rest/services/test/china4490/MapServer'
    });
    viewer.imageryLayers.addImageryProvider(china);
</script>
</body>
</html>

 

 此时可以调试cesium源码了,如调试cesium中的ArcGisMapServerImageryProvider.js文件,通过搜索查看源码:

cesium源码编译调试及调用全过程

 

 

附:其它版本

 node:18.16.0

cesium:1.108

  • 下载源码
  • 执行npm install(可能会报错,暂时忽略,先尝试进行下一步)
  • 打包源码npm run build/build-release(不同于1.9x版本,没那么多打包方式,该方式可在build目录下生成多种方式打包结果)
  • 运行示例页面 npm run start

cesium源码编译调试及调用全过程

 

 

cesium源码编译调试及调用全过程

 

<本文完>

 

到了这里,关于cesium源码编译调试及调用全过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手机学习笔记之二:APKtool工具实现反编译-编译-签名全过程

            APKTool 是一个开源的、跨平台的反编译、回编译 Android 应用程序的工具。它能够将 APK 文件解压并还原成 Android 应用程序的资源文件和 Smali 代码,还能将修改后的资源文件和 Smali 代码重新打包成 APK 文件。APKTool 是 Android 应用程序开发和逆向开发的重要工具之一,它能

    2024年02月02日
    浏览(77)
  • netCDF4.4安装全过程(intel编译器)

    ⚠️netcdf4.2以上的版本c库和fortran库分开,要先安装netcdf-c,然后再安装netcdf-fortran ⚠️安装netCDF前需要安装zlib和szip 安装完每个包后添加到环境变量: export PATH=xxx/bin:$PATH export LD_LIBRARY_PATH=xxx/lib:$LD_LIBRARY_PATH compiler:intel编译器 平台:centos7 其中可以使用 ./configure--help来查看可

    2024年02月06日
    浏览(41)
  • ESP32 官方AT固件编译(从零开始环境搭建到编译完成全过程)

    https://download3.vmware.com/software/WKST-PLAYER-1702/VMware-player-full-17.0.2-21581411.exe https://releases.ubuntu.com/jammy/ubuntu-22.04.2-desktop-amd64.iso 可能需要进电脑的BIOS打开一个选项才能安装成功虚拟机 5.1 GIT 克隆 git clone --recursive https://github.com/espressif/esp-at.git 如果没有安装git,按照控制台的提示安

    2024年02月15日
    浏览(51)
  • OpenWRT LEDE在Ubuntu22.04 编译全过程记录

    注, feeds用法 查看更新的订阅源信息,index file feeds/packages.index 【问题1】m4 编译错误 解决,参考博文 【问题2】 freadahead 异常 解决,参考博文 注意 : 参考博文中的 _IO_IN_BAXKUP 应该为 _IO_IN_BACKUP ,否则会导致下述报错,此文为正确写法 【问题3】 bison-3.0.4 相关错误 解决,参考

    2024年02月12日
    浏览(117)
  • Android.bp 构建 FFmpeg 库:从搭建编译框架到处理编译错误的全过程

    本文基于 FFmpeg 5.1.4 版本,详细讲述了使用 Android.bp 构建 FFmpeg 库的过程,旨在简化 Android 源码中 FFmpeg 库的构建以及集成过程。 构建过程需使用 NDK 工具辅助,请参考该专栏之前文章:使用 NDK 编译 FFmpeg github 仓库:FFmpegDroidBuilder 以编译 libavutil、libavcodec、libavformat、libswres

    2024年03月18日
    浏览(54)
  • 使用GraalVM native-image 编译SpringBoot3全过程

    本文记录了使用native-image编译SpringBoot3.0.3的过程及遇到的问题。其中一些问题也是网上很多朋友遇到,我在实际操作的过程也遇到过同样的问题,在此做一记录。 目录 一、编译环境准备 1.1 安装GraalVM 1.2 安装native-image 1.3 IDE设置 1.4 Visual Studio 2022 1.5 pom.xml文件 二、使用nati

    2024年02月11日
    浏览(53)
  • ArcGIS Pro创建、发布、调用GP服务全过程示例(等高线分析)

    在之前的文章介绍过使用ArcMap发布GP分析服务,由于ArcGIS后续不在更新ArcMap,改用ArcGIS Pro,本文对ArcGIS Pro发布GP分析服务进行说明。 本文以等高线分析为例,使用ArcGIS Pro软件,从GP分析服务的创建、发布、调用全过程进行演示。 使用ArcMap发布GP服务请跳转:ArcGIS Desktop(Arc

    2024年02月02日
    浏览(47)
  • phpinfo包含临时文件Getshell全过程及源码

    目录 前言 原理 漏洞复现 靶场环境 源码 复现过程 PHP LFI本地文件包含漏洞主要是包含本地服务器上存储的一些文件,例如session文件、日志文件、临时文件等。但是,只有我们能够控制包含的文件存储我们的恶意代码才能拿到服务器权限。假如在服务器上找不到我们可以包含

    2024年02月12日
    浏览(45)
  • ArcGIS Desktop(ArcMap)创建、发布、调用GP服务全过程示例(等高线分析)

    本文以等高线分析为例,使用ArcMap软件,从GP分析服务的创建、发布、调用全过程进行演示。 使用ArcGIS Pro发布GP服务请跳转:ArcGIS Pro创建、发布、调用GP服务全过程示例(等高线分析) 本文示例使用软件: ArcGIS Desktop10.3.1 ArcGIS JS API4.16 注:阅读本文前需要对ArcGIS GP服务,模

    2024年02月08日
    浏览(49)
  • 记一次uni-app中调用java代码中的方法全过程

    一、 开发环境 • JAVA环境 jdk1.8 • AndroidStudio 下载地址:Android Studio官网 : https://developer.android.google.cn/studio/index.html • App离线SDK下载 请下载2.9.8+版本的android平台SDK. https://nativesupport.dcloud.net.cn/AppDocs/download/android.html# • HBuilderX下载 官方下载地址: https://www.dcloud.io/hbuilderx.ht

    2024年02月12日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包