Skip to content

Commit a060483

Browse files
committed
use derived resources for attribution calls
1 parent c5d2c31 commit a060483

File tree

2 files changed

+31
-23
lines changed

2 files changed

+31
-23
lines changed

packages/engine/Source/Scene/Azure2DImageryProvider.js

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,14 @@ function Azure2DImageryProvider(options) {
7171
resource.setQueryParameters({
7272
"api-version": "2024-04-01",
7373
tilesetId: tilesetId,
74+
"subscription-key": this._subscriptionKey,
7475
zoom: `{z}`,
7576
x: `{x}`,
7677
y: `{y}`,
77-
"subscription-key": this._subscriptionKey,
7878
});
7979

80+
this._resource = resource;
81+
8082
let credit;
8183
if (defined(options.credit)) {
8284
credit = options.credit;
@@ -98,8 +100,6 @@ function Azure2DImageryProvider(options) {
98100
// This will be defined for ion resources
99101
this._tileCredits = resource.credits;
100102
this._attributionsByLevel = undefined;
101-
// Asynchronously request and populate _attributionsByLevel
102-
this.getViewportCredits();
103103
}
104104

105105
Object.defineProperties(Azure2DImageryProvider.prototype, {
@@ -300,7 +300,21 @@ Azure2DImageryProvider.prototype.requestImage = function (
300300
level,
301301
request,
302302
) {
303-
return this._imageryProvider.requestImage(x, y, level, request);
303+
const promise = this._imageryProvider.requestImage(x, y, level, request);
304+
305+
// If the requestImage call returns undefined, it couldn't be scheduled this frame. Make sure to return undefined so this can be handled upstream.
306+
if (!defined(promise)) {
307+
return undefined;
308+
}
309+
310+
// Asynchronously request and populate _attributionsByLevel if it hasn't been already. We do this here so that the promise can be properly awaited.
311+
if (promise && !defined(this._attributionsByLevel)) {
312+
return Promise.all([promise, this.getViewportCredits()]).then(
313+
(results) => results[0],
314+
);
315+
}
316+
317+
return promise;
304318
};
305319

306320
/**
@@ -336,6 +350,7 @@ Azure2DImageryProvider.prototype.getViewportCredits = async function () {
336350
for (let level = 0; level < maximumLevel + 1; level++) {
337351
promises.push(
338352
fetchViewportAttribution(
353+
this._resource,
339354
this._viewportUrl,
340355
this._subscriptionKey,
341356
this._tilesetId,
@@ -361,19 +376,17 @@ Azure2DImageryProvider.prototype.getViewportCredits = async function () {
361376
return attributionsByLevel;
362377
};
363378

364-
async function fetchViewportAttribution(url, key, tilesetId, level) {
365-
const viewport = await Resource.fetch({
366-
url: url,
379+
async function fetchViewportAttribution(resource, url, key, tilesetId, level) {
380+
const viewportResource = resource.getDerivedResource({
381+
url,
367382
queryParameters: {
368-
tilesetId,
369-
"subscription-key": key,
370-
"api-version": "2024-04-01",
371383
zoom: level,
372384
bounds: "-180,-90,180,90",
373385
},
374386
data: JSON.stringify(Frozen.EMPTY_OBJECT),
375387
});
376-
const viewportJson = JSON.parse(viewport);
388+
389+
const viewportJson = await viewportResource.fetchJson();
377390
return viewportJson.copyrights;
378391
}
379392

packages/engine/Source/Scene/Google2DImageryProvider.js

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ function Google2DImageryProvider(options) {
101101
key: encodeURIComponent(options.key),
102102
});
103103

104+
this._resource = resource.clone();
105+
104106
let credit;
105107
if (defined(options.credit)) {
106108
credit = options.credit;
@@ -533,12 +535,7 @@ Google2DImageryProvider.prototype.getViewportCredits = async function () {
533535
const promises = [];
534536
for (let level = 0; level < maximumLevel + 1; level++) {
535537
promises.push(
536-
fetchViewportAttribution(
537-
this._viewportUrl,
538-
this._key,
539-
this._session,
540-
level,
541-
),
538+
fetchViewportAttribution(this._resource, this._viewportUrl, level),
542539
);
543540
}
544541
const results = await Promise.all(promises);
@@ -559,12 +556,10 @@ Google2DImageryProvider.prototype.getViewportCredits = async function () {
559556
return attributionsByLevel;
560557
};
561558

562-
async function fetchViewportAttribution(url, key, session, level) {
563-
const viewport = await Resource.fetch({
564-
url: url,
559+
async function fetchViewportAttribution(resource, url, level) {
560+
const viewportResource = resource.getDerivedResource({
561+
url,
565562
queryParameters: {
566-
key,
567-
session,
568563
zoom: level,
569564
north: 90,
570565
south: -90,
@@ -573,7 +568,7 @@ async function fetchViewportAttribution(url, key, session, level) {
573568
},
574569
data: JSON.stringify(Frozen.EMPTY_OBJECT),
575570
});
576-
const viewportJson = JSON.parse(viewport);
571+
const viewportJson = await viewportResource.fetchJson();
577572
return viewportJson.copyright;
578573
}
579574

0 commit comments

Comments
 (0)