ol-stac 1.2.0 → 1.3.0
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/README.md +15 -1
- package/layer/STAC.d.ts +39 -8
- package/layer/STAC.d.ts.map +1 -1
- package/layer/STAC.js +130 -47
- package/layer/STAC.js.map +1 -1
- package/package.json +4 -4
- package/proj.d.ts +26 -0
- package/proj.d.ts.map +1 -0
- package/proj.js +109 -0
- package/proj.js.map +1 -0
- package/source/type.d.ts +14 -3
- package/source/type.d.ts.map +1 -1
- package/source/type.js +12 -2
- package/source/type.js.map +1 -1
- package/util.d.ts +20 -20
- package/util.d.ts.map +1 -1
- package/util.js +146 -93
- package/util.js.map +1 -1
- package/source/GeoTIFF.d.ts +0 -358
- package/source/GeoTIFF.d.ts.map +0 -1
- package/source/GeoTIFF.js +0 -920
- package/source/GeoTIFF.js.map +0 -1
package/util.js
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* @module ol/util
|
|
3
3
|
*/
|
|
4
4
|
import VectorLayer from 'ol/layer/Vector.js';
|
|
5
|
-
import { isRegistered as isProj4Registered } from 'ol/proj/proj4.js';
|
|
6
5
|
import Circle from 'ol/style/Circle.js';
|
|
7
6
|
import Fill from 'ol/style/Fill.js';
|
|
8
7
|
import Stroke from 'ol/style/Stroke.js';
|
|
9
8
|
import Style from 'ol/style/Style.js';
|
|
10
|
-
import {
|
|
9
|
+
import { VERSION } from 'ol/util.js';
|
|
10
|
+
import { isObject } from 'stac-js/src/utils.js';
|
|
11
11
|
/**
|
|
12
12
|
* @typedef {import('ol/colorlike.js').ColorLike} ColorLike
|
|
13
13
|
*/
|
|
@@ -19,10 +19,14 @@ import { STAC } from 'stac-js';
|
|
|
19
19
|
* @typedef {import('ol/Feature.js').default} Feature
|
|
20
20
|
*/
|
|
21
21
|
/**
|
|
22
|
-
* @typedef {import('
|
|
22
|
+
* @typedef {import('stac-js').Asset} Asset
|
|
23
23
|
*/
|
|
24
24
|
/**
|
|
25
|
-
* @
|
|
25
|
+
* @todo use import('stac-js').Band once exported from stac-js
|
|
26
|
+
* @typedef {import('stac-js/src/band.js').default} Band
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* @typedef {import('stac-js').STAC} STAC
|
|
26
30
|
*/
|
|
27
31
|
/**
|
|
28
32
|
* The pattern for the supported versions of the label extension.
|
|
@@ -30,6 +34,29 @@ import { STAC } from 'stac-js';
|
|
|
30
34
|
*/
|
|
31
35
|
export const LABEL_EXTENSION = 'https://stac-extensions.github.io/label/v1.*/schema.json';
|
|
32
36
|
const transparentFill = new Fill({ color: 'rgba(0,0,0,0)' });
|
|
37
|
+
/**
|
|
38
|
+
* Check whether the installed OL version is at least the given version.
|
|
39
|
+
* Returns true for dev builds ('latest').
|
|
40
|
+
*
|
|
41
|
+
* @param {string} minVersion The minimum version string (e.g. '10.9.0').
|
|
42
|
+
* @return {boolean} `true` if the OL version is >= minVersion.
|
|
43
|
+
*/
|
|
44
|
+
function olVersionAtLeast(minVersion) {
|
|
45
|
+
if (!VERSION || VERSION === 'latest') {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
const current = VERSION.split('.').map(Number);
|
|
49
|
+
const required = minVersion.split('.').map(Number);
|
|
50
|
+
for (let i = 0; i < required.length; i++) {
|
|
51
|
+
if ((current[i] || 0) > required[i]) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
if ((current[i] || 0) < required[i]) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
33
60
|
/**
|
|
34
61
|
* Creates a style for visualization.
|
|
35
62
|
*
|
|
@@ -99,7 +126,7 @@ export async function getStacObjectsForEvent(event, exclude = null, selectedFeat
|
|
|
99
126
|
layerFilter(layer) {
|
|
100
127
|
if (layer instanceof VectorLayer && layer.get('bounds') === true) {
|
|
101
128
|
const stac = layer.get('stac');
|
|
102
|
-
if (stac
|
|
129
|
+
if (stac && stac.isSTAC && (!exclude || !stac.is(exclude))) {
|
|
103
130
|
return true;
|
|
104
131
|
}
|
|
105
132
|
}
|
|
@@ -111,70 +138,93 @@ export async function getStacObjectsForEvent(event, exclude = null, selectedFeat
|
|
|
111
138
|
/**
|
|
112
139
|
* Get the source info for the GeoTiff from the asset.
|
|
113
140
|
* @param {import('stac-js').Asset} asset The asset to read the information from.
|
|
114
|
-
* @param {Array<number>} selectedBands The
|
|
141
|
+
* @param {Array<number|string>} selectedBands The bands to show. One-based index of the band, or the name of the band.
|
|
115
142
|
* @return {import('ol/source/GeoTIFF.js').SourceInfo} The source info for the GeoTiff asset
|
|
116
143
|
*/
|
|
117
144
|
export function getGeoTiffSourceInfoFromAsset(asset, selectedBands) {
|
|
118
145
|
const sourceInfo = {
|
|
119
146
|
url: asset.getAbsoluteUrl(),
|
|
120
147
|
};
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
bands
|
|
148
|
+
const bands = asset.getBands();
|
|
149
|
+
const sources = bands.length > 0 ? bands : [asset];
|
|
150
|
+
const perBand = sources.length > 1 && olVersionAtLeast('10.9.0');
|
|
151
|
+
const assetNodata = asset.getNoDataValues();
|
|
152
|
+
const bandCount = perBand
|
|
153
|
+
? Math.max(...bands.map((b) => b.getIndex())) + 1
|
|
154
|
+
: 1;
|
|
155
|
+
const minValues = new Array(bandCount).fill(undefined);
|
|
156
|
+
const maxValues = new Array(bandCount).fill(undefined);
|
|
157
|
+
const nodataValues = new Array(bandCount).fill(undefined);
|
|
158
|
+
let index = 0;
|
|
159
|
+
for (const source of sources) {
|
|
160
|
+
const stats = source.getStatistics();
|
|
161
|
+
let { minimum, maximum } = stats;
|
|
162
|
+
const { mean, stddev } = stats;
|
|
163
|
+
// Use mean ± 2σ for a better visualization stretch (~95% of values)
|
|
164
|
+
if (typeof mean === 'number' && typeof stddev === 'number' && stddev > 0) {
|
|
165
|
+
const stretchMin = mean - 2 * stddev;
|
|
166
|
+
const stretchMax = mean + 2 * stddev;
|
|
167
|
+
minimum =
|
|
168
|
+
typeof minimum === 'number'
|
|
169
|
+
? Math.max(minimum, stretchMin)
|
|
170
|
+
: stretchMin;
|
|
171
|
+
maximum =
|
|
172
|
+
typeof maximum === 'number'
|
|
173
|
+
? Math.min(maximum, stretchMax)
|
|
174
|
+
: stretchMax;
|
|
175
|
+
}
|
|
176
|
+
if (typeof minimum === 'number') {
|
|
177
|
+
minValues[index] = minimum;
|
|
178
|
+
}
|
|
179
|
+
if (typeof maximum === 'number') {
|
|
180
|
+
maxValues[index] = maximum;
|
|
181
|
+
}
|
|
182
|
+
const nodata = source.getNoDataValues();
|
|
183
|
+
if (nodata.length > 0) {
|
|
184
|
+
nodataValues[index] = nodata[0];
|
|
185
|
+
}
|
|
186
|
+
else if (assetNodata.length > 0) {
|
|
187
|
+
nodataValues[index] = assetNodata[0];
|
|
188
|
+
}
|
|
189
|
+
index++;
|
|
127
190
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
191
|
+
const defined = (v) => v !== undefined;
|
|
192
|
+
if (minValues.some(defined)) {
|
|
193
|
+
sourceInfo.min = perBand
|
|
194
|
+
? minValues
|
|
195
|
+
: Math.min(...minValues.filter(defined));
|
|
132
196
|
}
|
|
133
|
-
if (
|
|
134
|
-
sourceInfo.max =
|
|
197
|
+
if (maxValues.some(defined)) {
|
|
198
|
+
sourceInfo.max = perBand
|
|
199
|
+
? maxValues
|
|
200
|
+
: Math.max(...maxValues.filter(defined));
|
|
135
201
|
}
|
|
136
|
-
if (
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
// Read from bands as fallback and if available
|
|
140
|
-
for (const band of bands) {
|
|
141
|
-
const { minimum, maximum } = band.getMinMaxValues();
|
|
142
|
-
if (typeof minimum === 'number' &&
|
|
143
|
-
(typeof sourceInfo.min === 'undefined' || minimum < sourceInfo.min)) {
|
|
144
|
-
sourceInfo.min = minimum;
|
|
145
|
-
}
|
|
146
|
-
if (typeof maximum === 'number' &&
|
|
147
|
-
(typeof sourceInfo.max === 'undefined' || maximum > sourceInfo.max)) {
|
|
148
|
-
sourceInfo.max = maximum;
|
|
149
|
-
}
|
|
202
|
+
if (nodataValues.some(defined)) {
|
|
203
|
+
if (perBand) {
|
|
204
|
+
sourceInfo.nodata = nodataValues;
|
|
150
205
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
sourceInfo.nodata = nodata[0];
|
|
156
|
-
}
|
|
157
|
-
else if (bands.length > 1) {
|
|
158
|
-
// Read from bands as fallback and if available
|
|
159
|
-
let nodata = undefined;
|
|
160
|
-
for (const band of bands) {
|
|
161
|
-
const bandNoData = band.getNoDataValues();
|
|
162
|
-
if (bandNoData.length > 0) {
|
|
163
|
-
if (typeof nodata === 'undefined') {
|
|
164
|
-
nodata = bandNoData[0];
|
|
165
|
-
}
|
|
166
|
-
else if (nodata !== bandNoData[0]) {
|
|
167
|
-
nodata = undefined;
|
|
168
|
-
break;
|
|
169
|
-
}
|
|
206
|
+
else {
|
|
207
|
+
const unique = new Set(nodataValues.filter(defined));
|
|
208
|
+
if (unique.size === 1) {
|
|
209
|
+
sourceInfo.nodata = [...unique][0];
|
|
170
210
|
}
|
|
171
211
|
}
|
|
172
|
-
if (typeof nodata !== 'undefined') {
|
|
173
|
-
sourceInfo.nodata = nodata;
|
|
174
|
-
}
|
|
175
212
|
}
|
|
176
213
|
if (selectedBands.length > 0) {
|
|
177
|
-
sourceInfo.bands = selectedBands
|
|
214
|
+
sourceInfo.bands = selectedBands
|
|
215
|
+
.map((band) => {
|
|
216
|
+
if (typeof band === 'number') {
|
|
217
|
+
return band;
|
|
218
|
+
}
|
|
219
|
+
const b = asset.findBand(band);
|
|
220
|
+
if (b) {
|
|
221
|
+
return b.getIndex() + 1;
|
|
222
|
+
}
|
|
223
|
+
// eslint-disable-next-line no-console
|
|
224
|
+
console.error(`Band with name ${band} not found in asset ${asset.getKey()}`);
|
|
225
|
+
return null;
|
|
226
|
+
})
|
|
227
|
+
.filter((band) => band !== null);
|
|
178
228
|
}
|
|
179
229
|
else {
|
|
180
230
|
const visualBands = asset.findVisualBands();
|
|
@@ -188,44 +238,6 @@ export function getGeoTiffSourceInfoFromAsset(asset, selectedBands) {
|
|
|
188
238
|
}
|
|
189
239
|
return sourceInfo;
|
|
190
240
|
}
|
|
191
|
-
/**
|
|
192
|
-
* Load the projection for the given projection code from the internet.
|
|
193
|
-
*
|
|
194
|
-
* @param {string} code Projection code, e.g. 'EPSG:1234'
|
|
195
|
-
* @return {Promise<Projection|null>} The loaded projection
|
|
196
|
-
*/
|
|
197
|
-
export async function loadProjection(code) {
|
|
198
|
-
try {
|
|
199
|
-
// @ts-ignore - Support both old and new OpenLayers versions
|
|
200
|
-
const { fromProjectionCode, fromEPSGCode } = await import('ol/proj/proj4.js');
|
|
201
|
-
if (typeof fromProjectionCode === 'function') {
|
|
202
|
-
// Supported since ol v10.8.0
|
|
203
|
-
return await fromProjectionCode(code);
|
|
204
|
-
}
|
|
205
|
-
// Supported until ol v11.0.0
|
|
206
|
-
return await fromEPSGCode(code);
|
|
207
|
-
}
|
|
208
|
-
catch (_) {
|
|
209
|
-
return null;
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Gets the projection from the asset or link.
|
|
214
|
-
* @param {import('stac-js').STACReference} reference The asset or link to read the information from.
|
|
215
|
-
* @param {ProjectionLike} defaultProjection A default projection to use.
|
|
216
|
-
* @return {Promise<ProjectionLike>} The projection, if any.
|
|
217
|
-
*/
|
|
218
|
-
export async function getProjection(reference, defaultProjection = undefined) {
|
|
219
|
-
let projection;
|
|
220
|
-
if (isProj4Registered()) {
|
|
221
|
-
// TODO: It would be great to handle WKT2 and PROJJSON, but is not supported yet by proj4js.
|
|
222
|
-
const code = reference.getMetadata('proj:code');
|
|
223
|
-
if (code) {
|
|
224
|
-
projection = await loadProjection(code);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
return projection || defaultProjection;
|
|
228
|
-
}
|
|
229
241
|
/**
|
|
230
242
|
* Returns the style for the footprint.
|
|
231
243
|
* Removes the fill if anything is meant to be shown in the bounds.
|
|
@@ -242,6 +254,47 @@ export function getBoundsStyle(originalStyle, layerGroup) {
|
|
|
242
254
|
}
|
|
243
255
|
return style;
|
|
244
256
|
}
|
|
257
|
+
/**
|
|
258
|
+
* Parse the GeoZarr source options from an asset.
|
|
259
|
+
*
|
|
260
|
+
* @param {Asset} asset The asset to read the information from.
|
|
261
|
+
* @param {Array<number|string>} selectedBands The bands to show. One-based index of the band, or the name of the band.
|
|
262
|
+
* @return {Object} The GeoZarr source options
|
|
263
|
+
* @api
|
|
264
|
+
*/
|
|
265
|
+
export function getGeoZarrSourceOptionsFromAsset(asset, selectedBands) {
|
|
266
|
+
const options = {
|
|
267
|
+
url: asset.getAbsoluteUrl(),
|
|
268
|
+
};
|
|
269
|
+
if (selectedBands.length > 0) {
|
|
270
|
+
options.bands = selectedBands
|
|
271
|
+
.map((band) => {
|
|
272
|
+
if (typeof band === 'string') {
|
|
273
|
+
return band;
|
|
274
|
+
}
|
|
275
|
+
const bands = asset.getBands();
|
|
276
|
+
const bandObj = bands[band - 1];
|
|
277
|
+
if (isObject(bandObj) && typeof bandObj.name === 'string') {
|
|
278
|
+
return bandObj.name;
|
|
279
|
+
}
|
|
280
|
+
// eslint-disable-next-line no-console
|
|
281
|
+
console.error(`Band with index ${band} not found in asset ${asset.getKey()}`);
|
|
282
|
+
return null;
|
|
283
|
+
})
|
|
284
|
+
.filter(Boolean);
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
const bands = asset.findVisualBands();
|
|
288
|
+
if (bands) {
|
|
289
|
+
options.bands = [
|
|
290
|
+
bands.red.name,
|
|
291
|
+
bands.green.name,
|
|
292
|
+
bands.blue.name,
|
|
293
|
+
].filter(Boolean);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return options;
|
|
297
|
+
}
|
|
245
298
|
/**
|
|
246
299
|
* Get a URL from a web-map-link that is specific enough, i.e.
|
|
247
300
|
* replaces any occurances of {s} if possible, otherwise returns null.
|
package/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/ol/util.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/ol/util.js"],"names":[],"mappings":"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"}
|