如何获得Cesium的TileSet并设置本地服务器的Url

news2024/9/21 8:01:09

一.总体思路

首先使用管理者获得TileSet,通过JSON文件读写,调用对应的Cesium内部提供的函数。

UE5中Json文件的读取与解析 - 知乎 (zhihu.com)  不太了解JSON的可以学习这个。

二.具体实现

1.创建Actor,并且

如何获得Cesium的TileSet,设置本地Url
一.首先使用管理者获得TileSet
二.通过JSON文件读写
三.设置CesiumMap

1.首先前置声明两个可以直接设置组件,一个定时器负责定时读取JSON。

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "UrlManager.generated.h"

class ACesium3DTileset;
class UCesiumTileMapServiceRasterOverlay;
UCLASS()
class HMSLIVEEARTH_API AUrlManager : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	AUrlManager();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

	ACesium3DTileset* CesiumTil;
	UCesiumTileMapServiceRasterOverlay* CesiumRas;
	//声明定时器
	FTimerHandle Time;
private:
	bool LoadUrl();
	void SetUrl();
	FString Tileseturl;
	FString RasterOverlayurl;
	FString preTileseturl="";
	FString preRasterOverlayurl="";

};


2.包含两个需要用到的头文件Cesium3DTileset.h,CesiumTileMapServiceRasterOverlay.h,如果不能包含。可能是你的插件,依赖里没有包含Cesium模块。

#include "Cesium3DTileset.h"
#include "CesiumTileMapServiceRasterOverlay.h"


3.拿到这个TileSet类,需要使用 Actors的数组,通过GetAllActorsOfClass函数(是不是很想蓝图那个)拿到这个世界所有这个类型的类放到这个数组里。
TArray<AActor*> Actors;
UGameplayStatics::GetAllActorsOfClass(GetWorld(), ACesium3DTileset::StaticClass(), Actors);

再道数组里拿到第一个Actor类进行Cast转换。
4.通过这个实例类,拿到使用组件通过类型,参数后面记得加::static
CesiumRas = Cast<UCesiumTileMapServiceRasterOverlay>(CesiumTil->GetComponentByClass(UCesiumTileMapServiceRasterOverlay::StaticClass()));


5.读取JSON文件,
JSON数据文件路径,使用UKismetSystemLibrary::GetProjectDirectory() 工程路径。加上你的配置文件路径。
使用FPlatformFileManager静态类里的FileExists来检测文件,FPlatformFileManager::Get().GetPlatformFile().FileExists(*urlPath).
如果存在,再读取。FFileHelper里的LoadFileToString。将文件里的所有字符读到FileStr这个FSring里。

6.准备解析FString 通过TJsonReaderFactory<>创建TJsonReader。 和存储JsonObject的指针 Root;
通过循环  FJsonSerializer::Deserialize解析文件到Root里。Root里拿到每个键对应的值,赋值到变量里。也就是两个url。

//JSON数据文件路径
FString urlPath = UKismetSystemLibrary::GetProjectDirectory()  + "CesiumUrl.Json";
FString FileStr;
//获取文件
if (!FPlatformFileManager::Get().GetPlatformFile().FileExists(*urlPath))
{
	UE_LOG(LogTemp, Error, TEXT("%s not exist"), *urlPath);
	return false;
}
//读取文件到字符串
FFileHelper::LoadFileToString(FileStr, *urlPath);
TSharedRef< TJsonReader<> > Reader = TJsonReaderFactory<>::Create(FileStr);
TSharedPtr<FJsonObject> Root;

//解析文件
if (FJsonSerializer::Deserialize(Reader, Root))
{
	if (Root->HasField(TEXT("Tileseturl")))
	{
		Tileseturl = Root->GetStringField(TEXT("Tileseturl"));
		RasterOverlayurl = Root->GetStringField(TEXT("TileMapServiceRasterOverlayurl"));
		if (Tileseturl.Equals(preTileseturl) && RasterOverlayurl.Equals(preRasterOverlayurl))
		{
			return false;
		}
		else
		{
			preTileseturl = Tileseturl;
			preRasterOverlayurl = RasterOverlayurl;
			return true;
		}
	}
}
else
{
	return false;
}
return true;


7.设置url,在将才指针拿到两个实例的情况下,设置url函数。Tile记得刷新,不然会无法及时加载地形。本人在项目中是定时器刷新的。

//获得第一个Cesium3DTileset
TArray<AActor*> Actors;
UGameplayStatics::GetAllActorsOfClass(GetWorld(), ACesium3DTileset::StaticClass(), Actors);
//获取和设置两个组件的 url
if (Actors.Num() != 0)	
{
	CesiumTil = Cast<ACesium3DTileset>(Actors[0]);
	if (CesiumTil != nullptr )
	{
		CesiumTil->SetUrl(Tileseturl); //
		CesiumRas = Cast<UCesiumTileMapServiceRasterOverlay>(CesiumTil->GetComponentByClass(UCesiumTileMapServiceRasterOverlay::StaticClass()));
		CesiumRas->Url = RasterOverlayurl;
		CesiumTil->RefreshTileset();
	}
}


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1934847.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙Navigation路由能力汇总

基本使用步骤&#xff1a; 1、新增配置文件router_map&#xff1a; 2、在moudle.json5中添加刚才新增的router_map配置&#xff1a; 3、使用方法&#xff1a; 属性汇总&#xff1a; https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-compone…

Docker安装mysql详细教程, mysqld: Can‘t read dir of ‘/etc/mysql/conf.d/‘(已解决)

文章目录 一、下载MySQL的docker镜像二、启动MySQL容器2.1 命令2.2 报错mysqld: Cant read dir of /etc/mysql/conf.d/ (Errcode: 2 - No such file or directory) 三、进入mysql容器四、修改mysql默认配置4.1 查看mysql挂载的文件夹4.2 mysql配置 五、补充 如果还没在虚拟机/服…

41 QOS技术(服务质量)

1 QOS 产生背景 对于网络业务&#xff0c;影响服务质量的因素包括传输的带宽、传送的时延、数据的丢包率等。网络资源总是有限的&#xff0c;只要存在抢夺网络资源的情况&#xff0c;就会出现服务质量的要求网络总带宽固定的情况下&#xff0c;如果某类业务占用的带宽越多&am…

redis server response timeout(3000ms) occurred after 3 retry attempts异常分析

读取redis数据报超时错误&#xff1a; Redis server response timeout (3000 ms) occured after 3 retry attempts2024-07-18 17:07:57.124 ERROR [e8f07b0a671c08311dff589827897232] [http-nio-9528-exec-6] c.z.i.u.m.c.e.BaspUserExceptionHandler.exceptionHandler:83 - R…

【贪心算法】力扣1481.不同整数的最少数目

给你一个整数数组 arr 和一个整数 k 。现需要从数组中恰好移除 k 个元素&#xff0c;请找出移除后数组中不同整数的最少数目。 示例 1&#xff1a; 输入&#xff1a;arr [5,5,4], k 1 输出&#xff1a;1 解释&#xff1a;移除 1 个 4 &#xff0c;数组中只剩下 5 一种整数。…

studio编译报错java.lang.NullPointerException

安卓studio编译报错&#xff0c;这个是一个新建的项目就报错&#xff0c;原因是 implementation androidx.appcompat:appcompat:1.7.0版本太高&#xff0c;修改后版本 implementation androidx.appcompat:appcompat:1.4.0&#xff0c; 编译又报错 18 issues were found wh…

数学基础【俗说矩阵】:矩阵相乘

矩阵乘法 矩阵乘法推导过程 一、两个线性方程复合代入 二、X1和X2合并同类项 三、复合后方程组结果 四、线性方程组矩阵表示 五、线性方程组矩阵映射表示 复合映射表示 六、矩阵乘法导出 矩阵乘法法则 1、规则一推导过程 左取行&#xff0c;右取列&#xff0c;对应相乘后…

maven内网依赖包编译报错问题的一种解决方法

背景 外网开发时可以连接互联网&#xff0c;所以编译没有什么问题&#xff0c;但是将数据库、代码、maven仓库全部拷贝到内网&#xff0c;搭建内网环境之后&#xff0c;编译失败。 此依赖包的依赖层级图 maven镜像库配置使用拷贝到内网的本地库&#xff0c;配置如下&#xff…

数据结构(Java):优先级队列(堆)堆的模拟实现

目录 1、优先级队列 1.1 概念 1.2 PriorityQueue底层结构 2、 堆 2.1 堆的概念 2.2 堆的存储结构 3、优先级队列&#xff08;堆&#xff09;的模拟实现 3.1 堆的创建 3.1.1 向下调整算法建完整堆 3.2 堆的插入 3.2.1 向上调整算法 3.3 堆的删除 3.4 堆排序 1、优先…

c语言题目之打印单身狗

文章目录 一、题目二、思路三、代码实现 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、题目 二、思路 第一步 首先这里先了解两个有关于位操作符异或的知识点 &#xff0c;异或操作符的规则是相同为0&#xff0c;相异为1 。 通过上面我们可以得…

AIGC前沿 | LivePortrait

0. 资源链接 论文超链接: LivePortrait 项目: https://github.com/KwaiVGI/LivePortrait 1. 背景动机 现有AIGC存在的问题 随着智能手机和其他录制设备的普及&#xff0c;人们越来越频繁地捕捉静态肖像来记录珍贵而美好的时刻&#xff0c;但这些静态图像缺乏动态表现力和实…

docker默认存储地址 var/lib/docker 满了,换个存储地址操作流程

1. 查看docker 存储地址 docker info如下 var/lib/docker2、查看内存大小 按需执行 df -h 找超过100M的大文件 find / -type f -size 100M -exec ls -lh {} \; df -Th /var/lib/docker 查找这个文件的容量 df -h 查找所有挂载点 du -hs /home/syy_temp/*1、df -h 2、sud…

数据结构(单链表算法题)

1.删除链表中等于给定值 val 的所有节点。 OJ链接 typedef struct ListNode ListNode;struct ListNode {int val;struct ListNode* next; };struct ListNode* removeElements(struct ListNode* head, int val) {//创建新链表ListNode* newhead, *newtail;newhead newtail N…

视频联网共享平台LntonCVS视频监控汇聚平台视频云解决方案

LntonCVS流媒体平台是一款遵循国家GB28181标准协议的先进视频监控与云服务平台。该平台设计独特&#xff0c;能够同时接入并处理多路设备的视频流&#xff0c;支持包括RTSP、RTMP、FLV、HLS、WebRTC在内的多种视频流格式的分发。其功能丰富多样&#xff0c;涵盖了视频直播监控、…

如何在Mac下修改VSCode侧边栏字体大小

在日常使用VSCode&#xff08;Visual Studio Code&#xff09;进行开发时&#xff0c;我们有时需要对IDE&#xff08;集成开发环境&#xff09;的界面进行一些个性化的调整&#xff0c;以提升我们的开发体验。 比如&#xff0c;有些用户可能会觉得VSCode的侧边栏字体大小不符…

国产麒麟、UOS在线打开pdf加盖印章

PageOffice支持两种电子印章方案&#xff0c;可实现对Word、Excel、PDF文档加盖PageOffice自带印章或ZoomSeal电子印章&#xff08;全方位保护、防篡改、防伪造&#xff09;。Word和Excel的盖章功能请参考&#xff1a;Word和Excel加盖印章和签字功能 &#xff08;目前只支持win…

FastAPI 学习之路(五十九)封装统一的json返回处理工具

在本篇文章之前的接口&#xff0c;我们每个接口异常返回的数据格式都不一样&#xff0c;处理起来也没有那么方便&#xff0c;因此我们可以封装一个统一的json。 from fastapi import status from fastapi.responses import JSONResponse, Response from typing import Unionde…

[C/C++入门][进制原理]27、计算机种的进制

各种信息进入计算机&#xff0c;都要转换成“0”和“1”的二进制形式。 计算机 采用二进制的原因是&#xff1a; 物理上容易实现&#xff0c;可靠性高。&#xff08;电子元件的通电和不通电就可以表示1和0&#xff0c;所以非常方便&#xff09;运算简单&#xff0c;通用性强。…

【Git远程操作】理解分布式管理 | 创建远程仓库

目录 1.理解分布式管理 多人协作开发 2.创建远程仓库 2.1仓库名&路径 2.2初始化仓库&设置模板 1.理解分布式管理 目前我们学习的所有内容都是在本地来完成的。&#xff08;add /commit /版本撤销回退/分支管理&#xff09; Git是一个分布式 的版本控制系统。 分支…

最新开源的解析效果非常好的PDF解析工具MinerU (pdf2md pdf2json)

毫不夸张的说 PDF解析工具MinerU是照进RAG黑暗中的一道光——这是我对它的评价。我测过太多了文档解析工具&#xff01; 最近在做文档解析的工作。看了很多的开源的文档解析的工具&#xff0c;版面分析的工具&#xff0c;其中包括paddelpaddel这样30kstar的明星工具。但是效果都…