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+
816bool 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
4048FCesiumGeoJsonObject 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
5159UCesiumLoadVectorDocumentFromIonAsyncAction*
5260UCesiumLoadVectorDocumentFromIonAsyncAction::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
6472void 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