cesiumjs学习笔记之三——cesium-navigation插件

Cesium Navigation 是一个为 Cesium 提供指南针、导航仪和距离刻度等功能的插件。它支持不同版本的 Cesium,并且可以根据需求启用或禁用特定功能。插件分为独立版和 AMD 兼容版。


插件源码地址:https://github.com/alberto-acevedo/cesium-navigation

cesium-navigation

cesium-navigation是一个cesium的插件,提供指南针、导航仪和距离刻度用户图形界面。

1、为什么你建立cesium-navigation插件?

首先,所有的Cesiumjs sdk 不包括罗盘,导航仪(放大/缩小)和距离刻度。您可以使用鼠标在地图上导航,但这个导航插件可为用户提供更多的导航控制和功能。其中一些功能是:将罗盘重置为指向北部,重置轨道,并将视图重置为默认边界。

2、怎么建立cesium-navigation插件?

cesium-navigation插件基于优秀的罗盘,导航仪(放大/缩小)和距离terriajs开源库的距离刻度。来自terriajs的导航UI不能在铯中开箱即用,因为cesium使用带有RequireJS的CommonJS模块,terriajs使用commonjs和Browserify,因此您不能将源文件复制到铯和构建中。cesium-navigation插件的工作包括调整代码在cesium作为插件工作如下:

1) 将所有模块从Browserify转换为requirejs;

2)使用gulpjs来编译和缩小较少的文件,捆绑和最小化所有模块,并将源依赖关系打包成一个文件。作为构建过程的一部分,用almondjs替换requirejs,以减少插件中使用的AMD加载器的占用空间。almondjs库也在插件内绑定,使插件像铯中的即插即用一样简单;

3)使用nodejs和requirejs优化器以及almondjs,整个插件被构建并捆绑在单个文件中,甚至CSS样式也放在这个文件中;

4)该插件可以用作独立脚本或通过AMD加载程序(使用requirejs进行测试)。即使在使用AMD而不是cesium的特殊情况下,插件也可以轻松使用。

3、怎么使用cesium-navigation插件?

cesium-navigation插件有两个版本,一个独立版和一个AMD兼容版本:

1)什么时候用什么版本?

a. 如果您正在加载没有requirejs的铯(即,您有全局变量铯),则使用独立版本。如果您使用requirejs(但不适用于铯),此版本也是适用的。

导入脚本:

<head>
  <!-- other stuff -->

  <script src="path/to/Cesium.js"></script>
  <!-- IMPORTANT: because the cesium navigation viewer mixin depends on Cesium be sure to load it after Cesium -->
  <script src="path/to/standalone/viewerCesiumNavigationMixin.js"></script>

  <!-- other stuff ... -->
</head>


 然后扩展viewer: 

 // create a viewer assuming there is a DIV element with id 'cesiumContainer'
	var cesiumViewer = new Cesium.Viewer('cesiumContainer');

	// extend our view by the cesium navigaton mixin
	cesiumViewer.extend(Cesium.viewerCesiumNavigationMixin, {});
或者一个部件:

 // create a widget assuming there is a DIV element with id 'cesiumContainer'
    var cesiumWidget = new Cesium.CesiumWidget('cesiumContainer');

	// extend our view by the cesium navigaton mixin
	Cesium.viewerCesiumNavigationMixin.mixinWidget(cesiumWidget, {});

可以通过一下方式获取新创建的实例:

 // if using a viewer
	var cesiumNavigation = cesiumViewer.cesiumNavigation;

	// if using a widget
	var cesiumNavigation = cesiumWidget.cesiumNavigation;

另外一个例子:

b. 如果除了cesium之外,你使用了requirejs ,则要使用:

<head>
  <!-- other stuff... -->

  <script src="path/to/Cesium.js"></script>
  <!-- 重要!加载requirejs在cesium之后 -->
  <!-- viewerCesiumNavigationMixin the global variable Cesium is already set -->
  <script type="text/javascript" src="path/to/require.js"></script>
  <script type="text/javascript">
    require.config({
      // your config...
    });
  </script>

  <!-- other stuff... -->
</head>
加上:

// IMPORTANT: be sure that Cesium.js has already been loaded, e.g. by loading requirejs AFTER Cesium
  require(['path/to/standalone/viewerCesiumNavigationMixin'], function(viewerCesiumNavigationMixin) {
    // like above code but additionally one can directly access
    // viewerCesiumNavigationMixin
    // instead of
    // Cesium.viewerCesiumNavigationMixin
  }

c. 如果您正在为整个项目(包括cesium)使用requirejs,那么您必须使用AMD兼容版本。

<head>
  <!-- other stuff... -->

  <script type="text/javascript" src="path/to/require.js"></script>
  <script type="text/javascript">
    require.config({
        // your config...
		paths: {
		    // your paths...
		    // 重要!这里必须设置,因为viewerCesiumNavigationMixin 使用Cesium/...依赖
			'Cesium': 'path/to/cesium/Source'
		}
    });
  </script>

  <!-- other stuff... -->
</head>

加上:

require([
  'Cesium/Cesium',
  'path/to/amd/viewerCesiumNavigationMixin'
], function(
  Cesium,
  viewerCesiumNavigationMixin) {

  // like above but now you cannot access Cesium.viewerCesiumNavigationMixin
  // but use just viewerCesiumNavigationMixin
});

或者:

require([
  'Cesium/Core/Viewer',
  'path/to/amd/viewerCesiumNavigationMixin'
], function(
  CesiumViewer,
  viewerCesiumNavigationMixin) {

  // like above but now you cannot access Cesium.viewerCesiumNavigationMixin
  // but use just viewerCesiumNavigationMixin
});
设置插件选项

defaultResetView - >用于在使用重置导航重置地图视图时设置默认视图控制。接受的值是Cesium.Cartographic 和 Cesium.Rectangle.
enableCompass - >用于启用或禁用罗盘。true是启用罗盘,false是禁用罗盘。默认值为true。如果将选项设置为false,则罗盘将不会添加到地图中。
enableZoomControls - >用于启用或禁用缩放控件。true是启用,false是禁用。默认值为true。如果将选项设置为false,则缩放控件将不会添加到地图中。
enableDistanceLegend - >用于启用或禁用距离图例。true是启用,false是禁用默认值为true。如果将选项设置为false,距离图例将不会添加到地图中。
enableCompassOuterRing - >用于启用或禁用指南针外环。true是启用,false是禁用默认值为true。如果将选项设置为false,则该环将可见但无效。
更多选项将在未来的插件版本中设置。

没有requirejs加载cesium时设置选项的例子:

var options = {};
options.defaultResetView = Cesium.Rectangle.fromDegrees(71, 3, 90, 14);
// Only the compass will show on the map
options.enableCompass= true;
options.enableZoomControls= false;
options.enableDistanceLegend= false;
options.enableCompassOuterRing= true;
cesiumViewer.extend(Cesium.viewerCesiumNavigationMixin, options);

仍然有问题,请查看例子。

删除导航插件并释放资源使用:

viewer.cesiumNavigation.destroy();

怎么建立cesium-navigation插件?

执行:npm install

执行:node build.js


开发指引

对于开发/调试,您应该看看“Source Example”文件件。该示例直接使用源文件,因此它允许您立即使用(只需要刷新一次页面),不需要重新构建任何内容即可查看更改。此外,由于使用来源,您可以轻松地调试项目(例如通过浏览器的开发人员控制台或通过IDE的调试器,如Webstorm)

有没有使用该插件的实例?

(http://larcius.github.io/cesium-navigation/)

1)指南针,导航仪和距离刻度将显示在地图的右侧。
2)此插件已成功测试cesium 1.15版。 它在3D模式下适用于cesium。最近Larcius(https://github.com/Larcius)做了很多改进,并修复了哥伦布和二维模式的一些问题。


内容概要:本文聚焦于双层优化方法在综合能源系统(IES)中的应用,系统研究了容量配置与运行调度的协同优化问题。通过构建上层以最小化投资成本为目标的容量配置模型和下层以最小化运行成本为目标的运行调度模型,实现了系统经济性与可靠性的综合平衡。研究采用Matlab进行模型编程与仿真,结合鲸鱼优化算法、遗传算法等智能优化算法求解复杂的非线性双层规划问题,并充分考虑了可再生能源出力的不确定性、负荷波动等实际运行约束。同时,为进一步提升模型的鲁棒性与实用性,研究还融合了分布鲁棒优化、多场景分析等先进方法,增强了对不确定因素的应对能力。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的研究生、科研人员和工程技术人员,特别适用于从事综合能源系统规划、微电网设计、可再生能源集成与能源互联网等前沿领域研究的专业人士。; 使用场景及目标:① 深入掌握双层优化架构在能源系统长期规划与短期调度中的建模逻辑与实现技巧;② 学习并实践利用Matlab平台搭建复杂能源系统优化模型的全流程方法;③ 为开展相关领域的学术研究、撰写学位论文或实施实际工程项目提供高价值的、可复现的技术方案与代码参考。; 阅读建议:此资源以Matlab代码实现为核心载体,建议读者在透彻理解其数学模型与优化原理的基础上,结合所提供的源代码进行逐行调试与仿真分析,从而深刻把握算法的实现细节与参数设置技巧,并鼓励将所学方法迁移拓展至其他类似的能源系统优化问题中进行验证与创新。
还在被 TypeScript 的 any 类型警告淹没?写了半年 TS 却只会基础类型,一遇到高级类型就束手无策?条件类型、映射类型、装饰器这些面试高频考点,你是否始终停留在 "听说过但不会用" 的阶段?本指南将彻底帮你打通类型编程的任督二脉。 很多开发者学 TypeScript 多年,面对复杂的类型推导只能随手写个 any 敷衍了事。殊不知,类型系统才是 TypeScript 最核心的价值所在 —— 掌握高级类型,不仅能让代码质量产生质的飞跃,更是从中级开发者迈向高级工程师的必经之路。 本指南共 10 章近 30 页,由浅入深系统覆盖 TypeScript 类型进阶的全部核心主题。从类型系统基础入手,夯实条件类型与映射类型两大支柱:深入剖析分布式条件类型的运行机制、infer 关键字的类型提取魔法、内置工具类型的实现原理;详解键重映射 as 子句、同态映射特性、递归条件类型的边界与应用。在此基础上,完整讲解装饰器的五种类型与元数据反射机制,手把手实现一个简化版依赖注入容器;系统梳理声明文件的编写规范与声明合并技巧;拆解第三方库类型扩展的三种核心模式,并给出 Express、Vue 等主流框架的实战案例。 区别于零散的博客教程,这份资料特别强化了全栈项目视角:前后端类型共享方案设计、API 类型自动生成、ORM 类型映射、Zod 运行时验证、Result 类型错误处理、环境变量类型化 —— 这些真实项目中的高频场景,指南全部给出可直接落地的工程化方案。最后更附赠类型体操高级模式、类型安全最佳实践、全栈类型架构设计三大进阶模块,帮你建立完整的类型知识体系。 无论你是希望突破技术瓶颈的前端工程师、正在搭建全栈 TS 项目的技术负责人,还是准备冲击大厂面试的求职者,这份资料都能成为你案头必备的类型进阶手册。告别 any 编程,拥抱真正的类型安全,从这份指南开始。
内容概要:本文研究了基于人工蝶群算法(ABO)的多无人机协同集群在三维空间中的避障路径规划问题,旨在通过优化综合目标函数实现最低任务成本,该目标函数全面整合了路径长度、飞行高度、环境威胁等级以及航向转角等关键能耗与安全因素。研究利用Matlab平台实现了ABO算法的完整代码,对多无人机系统在复杂、动态的三维环境下的协同路径规划进行了建模、优化与仿真验证。文中不仅详细阐述了算法的数学原理和设计流程,还通过仿真实验展示了ABO算法在寻找全局最优路径、有效规避障碍物、降低整体飞行能耗和提升任务执行安全性方面的卓越性能与强大鲁棒性。; 适合人群:具备扎实的编程基础(尤其是Matlab)、一定的优化算法理论知识和无人机系统背景,从事无人机集群控制、智能优化算法、三维路径规划、自动化巡检、智能交通等领域的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于多无人机协同执行野外勘探、灾害救援、战场侦察、城市安防监控等复杂任务时的高效、安全路径规划;②为科研工作者提供一种新颖且高效的群体智能优化算法范例,用于解决高维度、多约束的复杂路径规划难题;③通过优化飞行路径,显著降低无人机集群的整体能量消耗,延长续航时间,并提高在未知或危险环境中的生存能力和任务成功率。; 阅读建议:建议读者深入研读Matlab源代码,动手复现并调试仿真过程,以透彻理解人工蝶群算法的搜索机制、信息交换策略及其在解决实际路径规划问题中的具体应用细节。在掌握核心思想后,可尝试将该算法迁移至其他智能体(如无人车、水下机器人)的协同控制场景,或结合其他优化技术(如深度强化学习)对其进行改进和拓展。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值