@google/earthengine 1.7.4 → 1.7.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/browser.js +378 -339
- package/build/ee_api_js.js +122 -123
- package/build/ee_api_js_debug.js +356 -316
- package/build/ee_api_js_npm.js +378 -339
- package/build/main.js +378 -339
- package/package.json +1 -1
- package/src/apiclient.js +3 -3
- package/src/ee.js +7 -0
- package/src/eeapiclient/request_params.ts +8 -3
- package/src/eeapiclient/request_params_test.ts +21 -0
- package/src/examples/UserInterface/ZoomBox.js +57 -27
- package/src/floattileoverlay.js +1 -1
- package/src/image.js +2 -2
- package/src/layers/abstractoverlay.js +3 -3
- package/src/maptilemanager.js +3 -3
package/package.json
CHANGED
package/src/apiclient.js
CHANGED
|
@@ -24,7 +24,7 @@ const {trustedResourceUrl} = goog.require('safevalues.index');
|
|
|
24
24
|
/** @namespace */
|
|
25
25
|
const apiclient = {};
|
|
26
26
|
|
|
27
|
-
const API_CLIENT_VERSION = '1.7.
|
|
27
|
+
const API_CLIENT_VERSION = '1.7.10';
|
|
28
28
|
|
|
29
29
|
exports.VERSION = apiVersion.VERSION;
|
|
30
30
|
exports.API_CLIENT_VERSION = API_CLIENT_VERSION;
|
|
@@ -706,9 +706,9 @@ apiclient.getUserAgent = function() {
|
|
|
706
706
|
/**
|
|
707
707
|
* Initializes the data module, setting base URLs.
|
|
708
708
|
*
|
|
709
|
-
* @param {?string=} apiBaseUrl The (proxied)
|
|
709
|
+
* @param {?string=} apiBaseUrl The (proxied) Earth Engine REST API
|
|
710
710
|
* endpoint.
|
|
711
|
-
* @param {?string=} tileBaseUrl The (unproxied)
|
|
711
|
+
* @param {?string=} tileBaseUrl The (unproxied) Earth Engine REST tile
|
|
712
712
|
* endpoint.
|
|
713
713
|
* @param {?string=} xsrfToken A string to pass in the X-XSRF-Token header
|
|
714
714
|
* of XHRs.
|
package/src/ee.js
CHANGED
|
@@ -459,6 +459,13 @@ ee.promote_ = function(arg, klass) {
|
|
|
459
459
|
default:
|
|
460
460
|
// Handle dynamically generated classes.
|
|
461
461
|
if (klass in exportedEE) {
|
|
462
|
+
if (!(exportedEE[klass].prototype instanceof ee.ComputedObject)) {
|
|
463
|
+
// Block things that should not be replaced.
|
|
464
|
+
throw new Error(
|
|
465
|
+
'Algorithm not an instance of ee.ComputedObject: ' + klass +
|
|
466
|
+
': ' + arg);
|
|
467
|
+
}
|
|
468
|
+
|
|
462
469
|
const ctor = ee.ApiFunction.lookupInternal(klass);
|
|
463
470
|
if (arg instanceof exportedEE[klass]) {
|
|
464
471
|
// Return unchanged.
|
|
@@ -150,7 +150,10 @@ const simpleCorsAllowedContentTypes: readonly string[] = [
|
|
|
150
150
|
* by the browser.
|
|
151
151
|
*/
|
|
152
152
|
// TODO(user): Return a changed copy of params.
|
|
153
|
-
export function bypassCorsPreflight(
|
|
153
|
+
export function bypassCorsPreflight(
|
|
154
|
+
params: MakeRequestParams,
|
|
155
|
+
singleEncode = false,
|
|
156
|
+
): void {
|
|
154
157
|
const safeHeaders: {[key: string]: string} = {};
|
|
155
158
|
const unsafeHeaders: {[key: string]: string} = {};
|
|
156
159
|
let hasUnsafeHeaders = false;
|
|
@@ -196,8 +199,10 @@ export function bypassCorsPreflight(params: MakeRequestParams): void {
|
|
|
196
199
|
}
|
|
197
200
|
|
|
198
201
|
if (hasUnsafeHeaders) {
|
|
199
|
-
const
|
|
200
|
-
httpCors.
|
|
202
|
+
const generator = singleEncode
|
|
203
|
+
? httpCors.generateHttpHeadersOverwriteParam
|
|
204
|
+
: httpCors.generateEncodedHttpHeadersOverwriteParam;
|
|
205
|
+
const finalParam = generator(unsafeHeaders);
|
|
201
206
|
addQueryParameter(params, httpCors.HTTP_HEADERS_PARAM_NAME, finalParam);
|
|
202
207
|
}
|
|
203
208
|
params.headers = safeHeaders;
|
|
@@ -253,4 +253,25 @@ describe('bypassCorsPreflight', () => {
|
|
|
253
253
|
'$httpMethod': 'PUT',
|
|
254
254
|
});
|
|
255
255
|
});
|
|
256
|
+
|
|
257
|
+
it('handles singleEncode=true', () => {
|
|
258
|
+
const params: MakeRequestParams = {
|
|
259
|
+
path: 'v1/whatever',
|
|
260
|
+
httpMethod: 'PUT',
|
|
261
|
+
methodId: 'someservice.whatever.put',
|
|
262
|
+
headers: {'accept-language': 'de', 'foo': 'bar'},
|
|
263
|
+
queryParams: {'hello': 'world'},
|
|
264
|
+
};
|
|
265
|
+
bypassCorsPreflight(params, /** singleEncode= */ true);
|
|
266
|
+
expect(params.headers).toEqual({
|
|
267
|
+
'accept-language': 'de',
|
|
268
|
+
'Content-Type': 'text/plain',
|
|
269
|
+
});
|
|
270
|
+
expect(params.httpMethod).toEqual('POST');
|
|
271
|
+
expect(params.queryParams).toEqual({
|
|
272
|
+
'hello': 'world',
|
|
273
|
+
'$httpHeaders': 'foo:bar\r\nContent-Type:application/json\r\n',
|
|
274
|
+
'$httpMethod': 'PUT',
|
|
275
|
+
});
|
|
276
|
+
});
|
|
256
277
|
});
|
|
@@ -13,51 +13,81 @@ var collection = ee.ImageCollection('NOAA/DMSP-OLS/NIGHTTIME_LIGHTS')
|
|
|
13
13
|
var fit = collection.reduce(ee.Reducer.linearFit());
|
|
14
14
|
|
|
15
15
|
// Display trend in red/blue, brightness in green.
|
|
16
|
-
var visParams = {
|
|
16
|
+
var visParams = {
|
|
17
|
+
min: 0,
|
|
18
|
+
max: [0.18, 20, -0.18],
|
|
19
|
+
bands: ['scale', 'offset', 'scale']
|
|
20
|
+
};
|
|
17
21
|
Map.addLayer(fit, visParams);
|
|
18
22
|
|
|
19
23
|
Map.style().set('cursor', 'crosshair');
|
|
24
|
+
Map.setCenter(-95, 38, 4);
|
|
20
25
|
|
|
21
26
|
// Create a map to be used as the zoom box.
|
|
22
|
-
var zoomBox = ui.Map({style: {stretch: 'both'
|
|
23
|
-
|
|
27
|
+
var zoomBox = ui.Map({style: {stretch: 'both'}});
|
|
28
|
+
zoomBox.setControlVisibility(false);
|
|
24
29
|
zoomBox.addLayer(fit, visParams);
|
|
30
|
+
zoomBox.setCenter(-115.13, 36.18, 8);
|
|
25
31
|
|
|
26
|
-
//
|
|
27
|
-
|
|
28
|
-
|
|
32
|
+
// Instruction label.
|
|
33
|
+
var instructionLabel = ui.Label('Click the main map to move this view', {
|
|
34
|
+
position: 'top-center',
|
|
35
|
+
padding: '8px',
|
|
36
|
+
color: 'black',
|
|
37
|
+
backgroundColor: 'rgba(255, 255, 255, 0.8)',
|
|
38
|
+
fontWeight: 'bold',
|
|
39
|
+
fontSize: '12px'
|
|
29
40
|
});
|
|
41
|
+
zoomBox.add(instructionLabel);
|
|
42
|
+
|
|
43
|
+
// Bounds logic.
|
|
44
|
+
var isMapReady = false;
|
|
45
|
+
var isFirstClick = true;
|
|
30
46
|
|
|
31
|
-
var
|
|
32
|
-
instructions.style().set('shown', false);
|
|
33
|
-
zoomBox.style().set('shown', true);
|
|
34
|
-
zoomBox.setCenter(lon, lat, 8);
|
|
47
|
+
var updateOutline = function() {
|
|
35
48
|
var bounds = zoomBox.getBounds();
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
Map.layers().set(1, layer);
|
|
49
|
+
if (!bounds || !Array.isArray(bounds)) return;
|
|
50
|
+
|
|
51
|
+
try {
|
|
52
|
+
var outline = ee.Geometry.Rectangle(bounds);
|
|
53
|
+
var layer = ui.Map.Layer(outline, {color: 'FFFFFF'}, 'Zoom Box Bounds');
|
|
54
|
+
Map.layers().set(1, layer);
|
|
55
|
+
} catch (e) {
|
|
56
|
+
// Ignore geometry errors during initialization
|
|
57
|
+
}
|
|
46
58
|
};
|
|
47
59
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
60
|
+
zoomBox.onChangeBounds(function() {
|
|
61
|
+
if (!isMapReady) return;
|
|
62
|
+
updateOutline();
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
// Delay initial bounds drawing to allow map to initialize.
|
|
66
|
+
ui.util.setTimeout(function() {
|
|
67
|
+
isMapReady = true;
|
|
68
|
+
updateOutline();
|
|
69
|
+
}, 1000);
|
|
70
|
+
|
|
71
|
+
// Interaction.
|
|
72
|
+
Map.onClick(function(coords) {
|
|
73
|
+
if (isFirstClick) {
|
|
74
|
+
zoomBox.remove(instructionLabel);
|
|
75
|
+
isFirstClick = false;
|
|
76
|
+
}
|
|
77
|
+
zoomBox.setCenter(coords.lon, coords.lat, 8);
|
|
53
78
|
});
|
|
79
|
+
|
|
80
|
+
// Layout.
|
|
54
81
|
var panel = ui.Panel({
|
|
55
|
-
widgets: [zoomBox
|
|
82
|
+
widgets: [zoomBox],
|
|
56
83
|
style: {
|
|
57
84
|
position: 'top-right',
|
|
58
85
|
height: '300px',
|
|
59
86
|
width: '300px',
|
|
87
|
+
border: '1px solid white',
|
|
88
|
+
padding: '0'
|
|
60
89
|
}
|
|
61
90
|
});
|
|
91
|
+
|
|
62
92
|
Map.add(ui.Label('Night Light Trends'));
|
|
63
|
-
Map.add(panel);
|
|
93
|
+
Map.add(panel);
|
package/src/floattileoverlay.js
CHANGED
package/src/image.js
CHANGED
|
@@ -25,8 +25,8 @@ goog.require('goog.object');
|
|
|
25
25
|
/**
|
|
26
26
|
* An object to represent an Earth Engine image. This constructor accepts a
|
|
27
27
|
* variety of arguments:
|
|
28
|
-
* - A string: an
|
|
29
|
-
* - A string and a number: an
|
|
28
|
+
* - A string: an Earth Engine asset id,
|
|
29
|
+
* - A string and a number: an Earth Engine asset id and version,
|
|
30
30
|
* - A number or ee.Array: creates a constant image,
|
|
31
31
|
* - A list: creates an image out of each list element and combines them
|
|
32
32
|
* into a single image,
|
|
@@ -135,7 +135,7 @@ ee.layers.AbstractOverlay = class extends goog.events.EventTarget {
|
|
|
135
135
|
this.opacity = opacity;
|
|
136
136
|
this.tilesById.forEach(function(tile) {
|
|
137
137
|
goog.style.setOpacity(tile.div, this.opacity);
|
|
138
|
-
}
|
|
138
|
+
}.bind(this));
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
/**
|
|
@@ -201,7 +201,7 @@ ee.layers.AbstractOverlay = class extends goog.events.EventTarget {
|
|
|
201
201
|
*/
|
|
202
202
|
releaseTile(tileDiv) {
|
|
203
203
|
var tile = this.tilesById.get(tileDiv.id);
|
|
204
|
-
this.tilesById.
|
|
204
|
+
this.tilesById.delete(tileDiv.id);
|
|
205
205
|
if (tile) {
|
|
206
206
|
tile.abort();
|
|
207
207
|
goog.dispose(tile);
|
|
@@ -283,7 +283,7 @@ ee.layers.AbstractOverlay = class extends goog.events.EventTarget {
|
|
|
283
283
|
* @private
|
|
284
284
|
*/
|
|
285
285
|
getTileCountForStatus_(status) {
|
|
286
|
-
return goog.array.count(this.tilesById.
|
|
286
|
+
return goog.array.count([...this.tilesById.values()], function(tile) {
|
|
287
287
|
return tile.getStatus() == status;
|
|
288
288
|
});
|
|
289
289
|
}
|
package/src/maptilemanager.js
CHANGED
|
@@ -74,7 +74,7 @@ ee.MapTileManager = class extends goog.events.EventTarget {
|
|
|
74
74
|
* @return {number} The number of requests in flight or pending send.
|
|
75
75
|
*/
|
|
76
76
|
getOutstandingCount() {
|
|
77
|
-
return this.requests_.
|
|
77
|
+
return this.requests_.size;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
/**
|
|
@@ -160,7 +160,7 @@ ee.MapTileManager = class extends goog.events.EventTarget {
|
|
|
160
160
|
* @private
|
|
161
161
|
*/
|
|
162
162
|
releaseRequest_(request) {
|
|
163
|
-
this.requests_.
|
|
163
|
+
this.requests_.delete(request.getId());
|
|
164
164
|
if (request.getImageLoader()) {
|
|
165
165
|
this.releaseObject_(request.getToken());
|
|
166
166
|
request.getImageLoader().dispose();
|
|
@@ -189,7 +189,7 @@ ee.MapTileManager = class extends goog.events.EventTarget {
|
|
|
189
189
|
|
|
190
190
|
// Call dispose on each request.
|
|
191
191
|
var requests = this.requests_;
|
|
192
|
-
goog.array.forEach(requests.
|
|
192
|
+
goog.array.forEach([...requests.values()], function(value) {
|
|
193
193
|
value.dispose();
|
|
194
194
|
});
|
|
195
195
|
requests.clear();
|