Skip to content

Commit e3dad3a

Browse files
committed
Merge from geojson-support
2 parents c642c9a + c9a4bb6 commit e3dad3a

File tree

9 files changed

+492
-116
lines changed

9 files changed

+492
-116
lines changed
37.2 KB
Binary file not shown.

Source/CesiumRuntime/Private/CesiumGeoJsonDocument.cpp

Lines changed: 84 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,27 @@
11
#include "CesiumGeoJsonDocument.h"
2+
#include "CesiumIonServer.h"
23
#include "CesiumRuntime.h"
34

4-
#include "CesiumUtility/Result.h"
5+
#include <CesiumAsync/IAssetAccessor.h>
6+
#include <CesiumUtility/Result.h>
57

68
#include <span>
79

10+
FCesiumGeoJsonDocument::FCesiumGeoJsonDocument() : _pDocument(nullptr) {}
11+
12+
FCesiumGeoJsonDocument::FCesiumGeoJsonDocument(
13+
std::shared_ptr<CesiumVectorData::GeoJsonDocument>&& document)
14+
: _pDocument(std::move(document)) {}
15+
816
bool UCesiumGeoJsonDocumentBlueprintLibrary::LoadGeoJsonFromString(
917
const FString& InString,
1018
FCesiumGeoJsonDocument& OutVectorDocument) {
1119
const std::string str = TCHAR_TO_UTF8(*InString);
1220
std::span<const std::byte> bytes(
1321
reinterpret_cast<const std::byte*>(str.data()),
1422
str.size());
15-
CesiumUtility::Result<
16-
CesiumUtility::IntrusivePointer<CesiumVectorData::GeoJsonDocument>>
17-
documentResult = CesiumVectorData::GeoJsonDocument::fromGeoJson(bytes);
23+
CesiumUtility::Result<CesiumVectorData::GeoJsonDocument> documentResult =
24+
CesiumVectorData::GeoJsonDocument::fromGeoJson(bytes);
1825

1926
if (!documentResult.errors.errors.empty()) {
2027
documentResult.errors.logError(
@@ -28,9 +35,10 @@ bool UCesiumGeoJsonDocumentBlueprintLibrary::LoadGeoJsonFromString(
2835
"Warnings while loading GeoJSON from string");
2936
}
3037

31-
if (documentResult.pValue) {
32-
OutVectorDocument =
33-
FCesiumGeoJsonDocument(std::move(documentResult.pValue));
38+
if (documentResult.value) {
39+
OutVectorDocument = FCesiumGeoJsonDocument(
40+
std::make_shared<CesiumVectorData::GeoJsonDocument>(
41+
std::move(*documentResult.value)));
3442
return true;
3543
}
3644

@@ -39,39 +47,94 @@ bool UCesiumGeoJsonDocumentBlueprintLibrary::LoadGeoJsonFromString(
3947

4048
FCesiumGeoJsonObject UCesiumGeoJsonDocumentBlueprintLibrary::GetRootObject(
4149
const FCesiumGeoJsonDocument& InVectorDocument) {
42-
if (!InVectorDocument._document) {
50+
if (!InVectorDocument._pDocument) {
4351
return FCesiumGeoJsonObject();
4452
}
4553

4654
return FCesiumGeoJsonObject(
47-
InVectorDocument._document,
48-
&InVectorDocument._document->getRootObject());
55+
InVectorDocument._pDocument,
56+
&InVectorDocument._pDocument->rootObject);
4957
}
5058

5159
UCesiumLoadVectorDocumentFromIonAsyncAction*
5260
UCesiumLoadVectorDocumentFromIonAsyncAction::LoadFromIon(
5361
int64 AssetId,
54-
const FString& IonAccessToken,
55-
const FString& IonAssetEndpointUrl) {
62+
const UCesiumIonServer* CesiumIonServer,
63+
const FString& IonAccessToken) {
5664
UCesiumLoadVectorDocumentFromIonAsyncAction* pAction =
5765
NewObject<UCesiumLoadVectorDocumentFromIonAsyncAction>();
5866
pAction->AssetId = AssetId;
5967
pAction->IonAccessToken = IonAccessToken;
60-
pAction->IonAssetEndpointUrl = IonAssetEndpointUrl;
68+
pAction->CesiumIonServer = CesiumIonServer;
6169
return pAction;
6270
}
6371

6472
void UCesiumLoadVectorDocumentFromIonAsyncAction::Activate() {
73+
const std::string token(
74+
this->IonAccessToken.IsEmpty()
75+
? TCHAR_TO_UTF8(*this->CesiumIonServer->DefaultIonAccessToken)
76+
: TCHAR_TO_UTF8(*this->IonAccessToken));
6577
CesiumVectorData::GeoJsonDocument::fromCesiumIonAsset(
6678
getAsyncSystem(),
6779
getAssetAccessor(),
6880
this->AssetId,
69-
TCHAR_TO_UTF8(*this->IonAccessToken),
70-
TCHAR_TO_UTF8(*this->IonAssetEndpointUrl))
81+
token,
82+
std::string(TCHAR_TO_UTF8(*this->CesiumIonServer->ApiUrl)) + "/")
83+
.thenInMainThread(
84+
[Callback = this->OnLoadResult](
85+
CesiumUtility::Result<CesiumVectorData::GeoJsonDocument>&&
86+
result) {
87+
if (result.errors.hasErrors()) {
88+
result.errors.logError(
89+
spdlog::default_logger(),
90+
"Errors loading GeoJSON:");
91+
result.errors.logWarning(
92+
spdlog::default_logger(),
93+
"Warnings loading GeoJSON:");
94+
}
95+
96+
if (result.value) {
97+
Callback.Broadcast(
98+
true,
99+
FCesiumGeoJsonDocument(
100+
std::make_shared<CesiumVectorData::GeoJsonDocument>(
101+
std::move(*result.value))));
102+
} else {
103+
Callback.Broadcast(false, {});
104+
}
105+
});
106+
}
107+
108+
UCesiumLoadVectorDocumentFromUrlAsyncAction*
109+
UCesiumLoadVectorDocumentFromUrlAsyncAction::LoadFromUrl(
110+
const FString& Url,
111+
const TMap<FString, FString>& Headers) {
112+
UCesiumLoadVectorDocumentFromUrlAsyncAction* pAction =
113+
NewObject<UCesiumLoadVectorDocumentFromUrlAsyncAction>();
114+
pAction->Url = Url;
115+
pAction->Headers = Headers;
116+
return pAction;
117+
}
118+
119+
void UCesiumLoadVectorDocumentFromUrlAsyncAction::Activate() {
120+
std::vector<CesiumAsync::IAssetAccessor::THeader> requestHeaders;
121+
requestHeaders.reserve(this->Headers.Num());
122+
123+
for (const auto& [Key, Value] : this->Headers) {
124+
requestHeaders.emplace_back(CesiumAsync::IAssetAccessor::THeader{
125+
TCHAR_TO_UTF8(*Key),
126+
TCHAR_TO_UTF8(*Value)});
127+
}
128+
129+
CesiumVectorData::GeoJsonDocument::fromUrl(
130+
getAsyncSystem(),
131+
getAssetAccessor(),
132+
TCHAR_TO_UTF8(*this->Url),
133+
std::move(requestHeaders))
71134
.thenInMainThread(
72135
[Callback = this->OnLoadResult](
73-
CesiumUtility::Result<CesiumUtility::IntrusivePointer<
74-
CesiumVectorData::GeoJsonDocument>>&& result) {
136+
CesiumUtility::Result<CesiumVectorData::GeoJsonDocument>&&
137+
result) {
75138
if (result.errors.hasErrors()) {
76139
result.errors.logError(
77140
spdlog::default_logger(),
@@ -81,10 +144,12 @@ void UCesiumLoadVectorDocumentFromIonAsyncAction::Activate() {
81144
"Warnings loading GeoJSON:");
82145
}
83146

84-
if (result.pValue) {
147+
if (result.value) {
85148
Callback.Broadcast(
86149
true,
87-
FCesiumGeoJsonDocument(MoveTemp(result.pValue)));
150+
FCesiumGeoJsonDocument(
151+
std::make_shared<CesiumVectorData::GeoJsonDocument>(
152+
std::move(*result.value))));
88153
} else {
89154
Callback.Broadcast(false, {});
90155
}

0 commit comments

Comments
 (0)