首页 > 其他分享 >CesiumJS 案例 P10:带边框的图片图层(Entity polyline 实现、Entity polygon 实现、Entity rectangle 实现)

CesiumJS 案例 P10:带边框的图片图层(Entity polyline 实现、Entity polygon 实现、Entity rectangle 实现)

时间:2024-10-29 13:47:29浏览次数:6  
标签:originLongitude const polygon 实现 100% Entity originLatitude Cesium 图层

CesiumJS

  • CesiumJS API:https://cesium.com/learn/cesiumjs/ref-doc/index.html

  • CesiumJS 是一个开源的 JavaScript 库,它用于在网页中创建和控制 3D 地球仪(地图)


一、带边框的图片图层(Entity polyline)

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>ImageryProvider - 带边框的图片图层(Entity polyline)</title>
		<link rel="stylesheet" href="../js/Cesium-1.112/Build/Cesium/Widgets/widgets.css" />
		<style>
			* {
				margin: 0;
				padding: 0;
				box-sizing: border-box;
			}

			html,
			body {
				width: 100%;
				height: 100%;
			}

			.container {
				width: 100%;
				height: 100%;
			}
		</style>
	</head>

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

	<script src="../js/Cesium-1.112/Build/Cesium/Cesium.js"></script>
	<script>
		const viewer = new Cesium.Viewer("container");

		// 图片图层的长宽
		const imageWidth = 200; // 单位为米
		const imageHeight = 100; // 单位为米

		// 图片图层的原点
		const originLongitude = 0; // 原点经度
		const originLatitude = 0; // 原点纬度

		// 在赤道上,每度大约对应 111,320 米
		const degreesPerMeterAtEquator = 111320;

		const longitudeRange = imageWidth / degreesPerMeterAtEquator;
		const latitudeRange = imageHeight / degreesPerMeterAtEquator;

		const west = originLongitude; // 西经(西经为负)
		const south = originLatitude - latitudeRange; // 南纬(南纬为负)
		const east = originLongitude + longitudeRange; // 东经(东经为正)
		const north = originLatitude; // 北纬(北纬为正)

		// 创建图片图层
		const imageryProvider = new Cesium.SingleTileImageryProvider({
			url: "../img/test.jpg",
			rectangle: Cesium.Rectangle.fromDegrees(west, south, east, north),
		});

		viewer.imageryLayers.addImageryProvider(imageryProvider);

		// 添加边框(西南 -> 西北 -> 东北 -> 东南 -> 西南)
		viewer.entities.add({
			polyline: {
				positions: Cesium.Cartesian3.fromDegreesArray([west, south, west, north, east, north, east, south, west, south]),
				width: 5,
				material: Cesium.Color.RED,
			},
		});

		// 调整相机视角以查看图片
		viewer.camera.flyTo({
			destination: Cesium.Cartesian3.fromDegrees(originLongitude, originLatitude, 1000.0),
			duration: 2.0,
		});
	</script>
</html>

二、带边框的图片图层(Entity polygon)

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>ImageryProvider - 带边框的图片图层(Entity polygon)</title>
		<link rel="stylesheet" href="../js/Cesium-1.112/Build/Cesium/Widgets/widgets.css" />
		<style>
			* {
				margin: 0;
				padding: 0;
				box-sizing: border-box;
			}

			html,
			body {
				width: 100%;
				height: 100%;
			}

			.container {
				width: 100%;
				height: 100%;
			}
		</style>
	</head>

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

	<script src="../js/Cesium-1.112/Build/Cesium/Cesium.js"></script>
	<script>
		const viewer = new Cesium.Viewer("container");

		// 图片图层的长宽
		const imageWidth = 200; // 单位为米
		const imageHeight = 100; // 单位为米

		// 图片图层的原点
		const originLongitude = 0; // 原点经度
		const originLatitude = 0; // 原点纬度

		// 在赤道上,每度大约对应 111,320 米
		const degreesPerMeterAtEquator = 111320;

		const longitudeRange = imageWidth / degreesPerMeterAtEquator;
		const latitudeRange = imageHeight / degreesPerMeterAtEquator;

		const west = originLongitude; // 西经(西经为负)
		const south = originLatitude - latitudeRange; // 南纬(南纬为负)
		const east = originLongitude + longitudeRange; // 东经(东经为正)
		const north = originLatitude; // 北纬(北纬为正)

		// 创建图片图层
		const imageryProvider = new Cesium.SingleTileImageryProvider({
			url: "../img/test.jpg",
			rectangle: Cesium.Rectangle.fromDegrees(west, south, east, north),
		});

		viewer.imageryLayers.addImageryProvider(imageryProvider);

		// 添加边框(西南 -> 西北 -> 东北 -> 东南)
		viewer.entities.add({
			polygon: {
				hierarchy: Cesium.Cartesian3.fromDegreesArray([west, south, west, north, east, north, east, south]),
				material: Cesium.Color.WHITE.withAlpha(0),
				outline: true,
				outlineColor: Cesium.Color.RED,
				outlineWidth: 20,
				height: 0,
			},
		});

		// 调整相机视角以查看图片
		viewer.camera.flyTo({
			destination: Cesium.Cartesian3.fromDegrees(originLongitude, originLatitude, 1000.0),
			duration: 2.0,
		});
	</script>
</html>

三、带边框的图片图层(Entity rectangle)

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>ImageryProvider - 带边框的图片图层(Entity rectangle)</title>
		<link rel="stylesheet" href="../js/Cesium-1.112/Build/Cesium/Widgets/widgets.css" />
		<style>
			* {
				margin: 0;
				padding: 0;
				box-sizing: border-box;
			}

			html,
			body {
				width: 100%;
				height: 100%;
			}

			.container {
				width: 100%;
				height: 100%;
			}
		</style>
	</head>

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

	<script src="../js/Cesium-1.112/Build/Cesium/Cesium.js"></script>
	<script>
		const viewer = new Cesium.Viewer("container");

		// 图片图层的长宽
		const imageWidth = 200; // 单位为米
		const imageHeight = 100; // 单位为米

		// 图片图层的原点
		const originLongitude = 0; // 原点经度
		const originLatitude = 0; // 原点纬度

		// 在赤道上,每度大约对应 111,320 米
		const degreesPerMeterAtEquator = 111320;

		const longitudeRange = imageWidth / degreesPerMeterAtEquator;
		const latitudeRange = imageHeight / degreesPerMeterAtEquator;

		const west = originLongitude; // 西经(西经为负)
		const south = originLatitude - latitudeRange; // 南纬(南纬为负)
		const east = originLongitude + longitudeRange; // 东经(东经为正)
		const north = originLatitude; // 北纬(北纬为正)

		// 创建图片图层
		const imageryProvider = new Cesium.SingleTileImageryProvider({
			url: "../img/test.jpg",
			rectangle: Cesium.Rectangle.fromDegrees(west, south, east, north),
		});

		viewer.imageryLayers.addImageryProvider(imageryProvider);

		// 添加边框
		viewer.entities.add({
			rectangle: {
				coordinates: Cesium.Rectangle.fromDegrees(west, south, east, north),
				material: Cesium.Color.WHITE.withAlpha(0),
				outline: true,
				outlineColor: Cesium.Color.RED,
				outlineWidth: 20,
				height: 0,
			},
		});

		// 调整相机视角以查看图片
		viewer.camera.flyTo({
			destination: Cesium.Cartesian3.fromDegrees(originLongitude, originLatitude, 1000.0),
			duration: 2.0,
		});
	</script>
</html>

标签:originLongitude,const,polygon,实现,100%,Entity,originLatitude,Cesium,图层
From: https://blog.csdn.net/weixin_52173250/article/details/143325587

相关文章

  • 使用 `screen` + `nohup` 实现高效日志记录和多环境任务管理
    使用screen+nohup实现高效日志记录和多环境任务管理在深度学习模型训练中,特别是在服务器上运行长时间的任务时,有效的任务管理和日志记录至关重要。我们通常需要在后台运行多个任务,同时为每个任务配置不同的conda环境。通过结合使用screen和nohup,我们不仅可以在后......
  • SpringBoot实现的扶贫成效监测平台
    摘要随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了精准扶贫管理系统的开发全过程。通过分析精准扶贫管理系统管理的不足,创建了一个计算机管理精准扶贫管理系统的方案。文章介绍了精准扶贫管理系统的系统分析部分,包括可行性......
  • ArgoWorkflow教程(八)---基于 LifecycleHook 实现流水线通知提醒
    本篇介绍一下ArgoWorkflow中的ExitHandler和LifecycleHook功能,可以根据流水线每一步的不同状态,执行不同操作,一般用于发送通知。1.概述本篇介绍一下ArgoWorkflow中的ExitHandler和LifecycleHook功能,可以根据流水线每一步的不同状态,执行不同操作,一般用于发送通知。......
  • 颜色选择器的简单实现(附完整代码)
    颜色选择器的简单实现使用渐变背景实现一个颜色选择器关键知识点HSV(Hue,Saturation,Value)使用渐变色实现色相选择器使用3个背景叠加实现Saturation(饱和度),Value(色调,纯度)的选择关键代码色相渐变背景background:linear-gradient(180deg,red0,#ff017%,#0......
  • 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现七
    一、前言介绍:1.1项目摘要随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势。古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力。然而,在现代社会中,由于生活节奏的加快和信息获取方式的多样化,古诗词的传播和阅读面临着一......
  • 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现八
    一、前言介绍:1.1项目摘要随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势。古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力。然而,在现代社会中,由于生活节奏的加快和信息获取方式的多样化,古诗词的传播和阅读面临着一......
  • ThreeJs 中如何实现动画效果
    在ThreeJs中,动画是创建动态3D场景的重要组成部分。本文将介绍如何使用ThreeJs实现基础的动画效果,包括物体的旋转、位置变化和简单的过渡动画。一、创建基础场景在开始动画之前,首先需要创建一个基础的ThreeJs场景。以下是一个简单的场景设置:import*asTHREEfrom'......
  • springboot vue前后端分离:网上茶叶商城网站设计与实现作品截图和开题报告
      博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育、辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩,提供核心代码讲解,答辩指导。项目配有对应开......
  • 面试官:自定义Loader和Plugin实现过吗?
    Loader案例:多语言翻译Loader这个自定义Loader旨在支持多语言翻译功能。在项目开发中,文本字符串通常会放在一个JSON文件中,如 en.json 和 zh.json,分别用于存储不同语言的文本。自定义Loader可以在编译过程中将代码中的特定标记(如 __t('KEY'))替换为对应语言的字符串,......
  • 分布式服务高可用实现:复制
    作者:京东保险王奕龙1.为什么需要复制我们可以考虑如下问题:当数据量、读取或写入负载已经超过了当前服务器的处理能力,如何实现负载均衡?希望在单台服务器出现故障时仍能继续工作,这该如何实现?当服务的用户遍布全球,并希望他们访问服务时不会有较大的延迟,怎么才能统一用......