首页 > 其他分享 >CesiumJS 案例 P12:添加指定长宽的图片图层并居中显示(圆点分别为图片图层的中心点、左上角顶点、右上角顶点、左下角顶点、右下角顶点)

CesiumJS 案例 P12:添加指定长宽的图片图层并居中显示(圆点分别为图片图层的中心点、左上角顶点、右上角顶点、左下角顶点、右下角顶点)

时间:2024-10-30 18:17:15浏览次数:5  
标签:originLongitude const 原点 originLatitude Cesium 顶点 图层 图片

CesiumJS

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

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


一、添加加指定长宽的图片图层并居中显示(原点为图片图层的中心点)

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>ImageryProvider - 添加指定长宽的图片图层并居中显示(原点为图片图层的中心点)</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 - longitudeRange / 2; // 西经(西经为负)
		const south = originLatitude - latitudeRange / 2; // 南纬(南纬为负)
		const east = originLongitude + longitudeRange / 2; // 东经(东经为正)
		const north = originLatitude + latitudeRange / 2; // 北纬(北纬为正)

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

		viewer.imageryLayers.addImageryProvider(imageryProvider);

		// 添加一个点表示原点
		const entity = viewer.entities.add({
			position: Cesium.Cartesian3.fromDegrees(originLongitude, originLatitude),
			point: {
				pixelSize: 5,
				color: new Cesium.Color(0, 1, 0, 1),
			},
		});

		// ----------------------------------------------------------------------------------------------------

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

二、添加指定长宽的图片图层并居中显示(原点为图片图层的左上角顶点)

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>ImageryProvider - 添加指定长宽的图片图层并居中显示(原点为图片图层的左上角顶点)</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);

        // 添加一个点表示原点
        const entity = viewer.entities.add({
            position: Cesium.Cartesian3.fromDegrees(originLongitude, originLatitude),
            point: {
                pixelSize: 5,
                color: new Cesium.Color(0, 1, 0, 1),
            },
        });

		// ----------------------------------------------------------------------------------------------------

		const halfImageWidth = imageWidth / 2;
		const halfImageHeight = imageHeight / 2;

		const halfLongitudeRange = halfImageWidth / degreesPerMeterAtEquator;
		const halfLatitudeRange = halfImageHeight / degreesPerMeterAtEquator;

		const halfLongitude = originLongitude + halfLongitudeRange;
		const halfLatitude = originLatitude - halfLatitudeRange;

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

三、添加指定长宽的图片图层并居中显示(原点为图片图层的右上角顶点)

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>ImageryProvider - 添加指定长宽的图片图层并居中显示(原点为图片图层的右上角顶点)</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 - longitudeRange; // 西经(西经为负)
        const south = originLatitude - latitudeRange; // 南纬(南纬为负)
        const east = originLongitude; // 东经(东经为正)
        const north = originLatitude; // 北纬(北纬为正)

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

        viewer.imageryLayers.addImageryProvider(imageryProvider);

        // 添加一个点表示原点
        const entity = viewer.entities.add({
            position: Cesium.Cartesian3.fromDegrees(originLongitude, originLatitude),
            point: {
                pixelSize: 5,
                color: new Cesium.Color(0, 1, 0, 1),
            },
        });

		// ----------------------------------------------------------------------------------------------------

		const halfImageWidth = imageWidth / 2;
		const halfImageHeight = imageHeight / 2;

		const halfLongitudeRange = halfImageWidth / degreesPerMeterAtEquator;
		const halfLatitudeRange = halfImageHeight / degreesPerMeterAtEquator;

		const halfLongitude = originLongitude - halfLongitudeRange;
		const halfLatitude = originLatitude - halfLatitudeRange;

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

四、添加指定长宽的图片图层并居中显示(原点为图片图层的左下角顶点)

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>ImageryProvider - 添加指定长宽的图片图层并居中显示(原点为图片图层的左下角顶点)</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; // 南纬(南纬为负)
        const east = originLongitude + longitudeRange; // 东经(东经为正)
        const north = originLatitude + latitudeRange; // 北纬(北纬为正)

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

        viewer.imageryLayers.addImageryProvider(imageryProvider);

        // 添加一个点表示原点
        const entity = viewer.entities.add({
            position: Cesium.Cartesian3.fromDegrees(originLongitude, originLatitude),
            point: {
                pixelSize: 5,
                color: new Cesium.Color(0, 1, 0, 1),
            },
        });

		// ----------------------------------------------------------------------------------------------------

		const halfImageWidth = imageWidth / 2;
		const halfImageHeight = imageHeight / 2;

		const halfLongitudeRange = halfImageWidth / degreesPerMeterAtEquator;
		const halfLatitudeRange = halfImageHeight / degreesPerMeterAtEquator;

		const halfLongitude = originLongitude + halfLongitudeRange;
		const halfLatitude = originLatitude + halfLatitudeRange;

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

五、添加指定长宽的图片图层并居中显示(原点为图片图层的右下角顶点)

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>ImageryProvider - 添加指定长宽的图片图层并居中显示(原点为图片图层的右下角顶点)</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 - longitudeRange; // 西经(西经为负)
		const south = originLatitude; // 南纬(南纬为负)
		const east = originLongitude; // 东经(东经为正)
		const north = originLatitude + latitudeRange; // 北纬(北纬为正)

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

		viewer.imageryLayers.addImageryProvider(imageryProvider);

		// 添加一个点表示原点
		const entity = viewer.entities.add({
			position: Cesium.Cartesian3.fromDegrees(originLongitude, originLatitude),
			point: {
				pixelSize: 5,
				color: new Cesium.Color(0, 1, 0, 1),
			},
		});

		// ----------------------------------------------------------------------------------------------------

		const halfImageWidth = imageWidth / 2;
		const halfImageHeight = imageHeight / 2;

		const halfLongitudeRange = halfImageWidth / degreesPerMeterAtEquator;
		const halfLatitudeRange = halfImageHeight / degreesPerMeterAtEquator;

		const halfLongitude = originLongitude - halfLongitudeRange;
		const halfLatitude = originLatitude + halfLatitudeRange;

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

标签:originLongitude,const,原点,originLatitude,Cesium,顶点,图层,图片
From: https://blog.csdn.net/weixin_52173250/article/details/143371699

相关文章

  • 如何解决iPhone上图库图片消失的问题
    通常,大多数iPhone用户会保存大量图片。您拍摄的照片应该出现在其图库中。但我们看到一些用户提出诸如“我的图库图片消失了,我现在该怎么办?”之类的问题。如果您遇到同样的问题,请不要担心-我们已经解决了这个问题,并将在下面列出。iPhone上的图片从图库中消失的原因在我......
  • 图片马的二次渲染
    这里记录两个脚本,分别是用来伪造能绕过二次渲染的jpg和png图片马.打法挺固定的,都是需要通过文件包含来触发,然后回显会被写入图片.首先是jpg脚本,这个脚本要求目录中由一个1.jpg文件,然后是以这个文件为基础去进行伪造.<?php$miniPayload="<?=phpinfo();?>";if(!extensi......
  • 基于 MATLAB 的图片中文字的提取及识别
    摘要随着现代社会的发展,信息的形式和数量正在迅猛增长。其中很大一部分是图像,图像可以把事物生动地呈现在我们面前,让我们更直观地接受信息。同时,计算机已经作为一种人们普遍使用的工具为人们的生产生活服务。从图像中提取文字属于信息智能化处理的前沿课题,是当前人工智能与......
  • CSS中为特定的元素设置背景图片(Top1,Top1,Top3)
    &:nth-child(1).imgspan{background:url(/static/home/hot/top1.png)no-repeat;background-size:100%auto;}上端代码使用了:nth-child()伪类选择器来选择父元素下的特定子元素,并对这些子元素内部的.imgspan设置背景图片和背景尺寸。&:nth-chi......
  • 图片马制作及利用方式
    方法一、记事本打开目标图片,直接将马粘贴到最后即可。ps:保存后图片无法正常显示。方法二、命令行生成图片马。ps:常用,不影响图片显示准备:1、普通图片:1.jpg2、木马脚本:2.php打开命令行CMD,copy1.jpg/b+2.phpshell.jpg1.jpg/b代表以二进制打开图片生成图片马she......
  • javaCV图片OCR文字识别
    springboot项目pom文件中添加以下依赖 1<dependency>2<groupId>org.bytedeco</groupId>3<artifactId>javacv-platform</artifactId>4<version>1.5.5</version>5</depend......
  • 图片浏览转换编辑软件 FastStone Image Viewer v7.9 注册码
    在数字时代,处理图像已成为我们日常生活的一部分。FastStoneImageViewer是一款集浏览、编辑和转换功能于一体的免费图像工具,它支持几乎所有主流图形格式,如PCX、BMP、JPEG、动画GIF和PNG。这款软件以其直观的布局和易用性,让每个人都能轻松上手。该版本已内置注册码,可以使用全......
  • JAVA对于图片的花式操作(不定期更新)
    JAVA对于图片的花式操作(不定期更新)MultipartFile转Base64字符串图片url转Base64字符串图片url转MultipartFile图片url转File流base64图片压缩引入依赖代码编写抠图MultipartFile转Base64字符串/***MultipartFile文件转bash64字符串**@parammult......
  • 怎么把pdf文档保存成图片格式
    有时候我们会碰到只支持图片上传的场景,如何编程快速将pdf转成图片呢?可以使用Python的pdf2image库仅10行代码就能将PDF文档保存为图片格式。如果PDF文档包含多页,则每一页可以保存为单独的图片。以下是实现该功能的步骤:步骤:安装所需的库:pdf2image:用于将PDF......
  • winform 循环播放当前目录下的图片及视频
    采用vlc Xabe.FFmpeg插件usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.IO;usingSystem.Linq;usingSystem.Reflection;usingSystem.Runtime.InteropServices;usingSystem.Te......