@loaders.gl/wms 4.0.0-alpha.23 → 4.0.0-alpha.24
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/dist/es5/csw-capabilities-loader.js +1 -1
- package/dist/es5/csw-domain-loader.js +1 -1
- package/dist/es5/csw-records-loader.js +1 -1
- package/dist/es5/gml-loader.js +1 -1
- package/dist/es5/gml-loader.js.map +1 -1
- package/dist/es5/lerc-loader.js +1 -1
- package/dist/es5/lerc-loader.js.map +1 -1
- package/dist/es5/lib/parsers/gml/parse-gml.js.map +1 -1
- package/dist/es5/wip/wcs-capabilities-loader.js +1 -1
- package/dist/es5/wip/wfs-capabilities-loader.js +1 -1
- package/dist/es5/wip/wmts-capabilities-loader.js +1 -1
- package/dist/es5/wms-capabilities-loader.js +1 -1
- package/dist/es5/wms-error-loader.js +1 -1
- package/dist/esm/csw-capabilities-loader.js +1 -1
- package/dist/esm/csw-domain-loader.js +1 -1
- package/dist/esm/csw-records-loader.js +1 -1
- package/dist/esm/gml-loader.js +1 -1
- package/dist/esm/gml-loader.js.map +1 -1
- package/dist/esm/lerc-loader.js +1 -1
- package/dist/esm/lerc-loader.js.map +1 -1
- package/dist/esm/lib/parsers/gml/parse-gml.js.map +1 -1
- package/dist/esm/wip/wcs-capabilities-loader.js +1 -1
- package/dist/esm/wip/wfs-capabilities-loader.js +1 -1
- package/dist/esm/wip/wmts-capabilities-loader.js +1 -1
- package/dist/esm/wms-capabilities-loader.js +1 -1
- package/dist/esm/wms-error-loader.js +1 -1
- package/dist/gml-loader.d.ts +2 -1
- package/dist/gml-loader.d.ts.map +1 -1
- package/dist/lerc-loader.d.ts +2 -1
- package/dist/lerc-loader.d.ts.map +1 -1
- package/dist/lib/parsers/gml/parse-gml.d.ts +1 -0
- package/dist/lib/parsers/gml/parse-gml.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/gml-loader.ts +2 -1
- package/src/lerc-loader.ts +1 -1
- package/src/lib/parsers/gml/parse-gml.ts +2 -0
- package/dist/bundle.js +0 -6
- package/dist/csw-capabilities-loader.js +0 -30
- package/dist/csw-domain-loader.js +0 -30
- package/dist/csw-records-loader.js +0 -30
- package/dist/gml-loader.js +0 -30
- package/dist/index.js +0 -39
- package/dist/lerc-loader.js +0 -55
- package/dist/lib/create-image-source.js +0 -39
- package/dist/lib/parsers/csw/parse-csw-capabilities.js +0 -24
- package/dist/lib/parsers/csw/parse-csw-domain.js +0 -33
- package/dist/lib/parsers/csw/parse-csw-records.js +0 -58
- package/dist/lib/parsers/csw/parse-exception-report.js +0 -30
- package/dist/lib/parsers/gml/deep-strict-equal.js +0 -119
- package/dist/lib/parsers/gml/parse-gml.js +0 -371
- package/dist/lib/parsers/lerc/lerc-types.js +0 -3
- package/dist/lib/parsers/wms/parse-wms-capabilities.js +0 -233
- package/dist/lib/parsers/wms/parse-wms-error.js +0 -22
- package/dist/lib/parsers/wms/parse-wms-features.js +0 -27
- package/dist/lib/parsers/wms/parse-wms-layer-description.js +0 -15
- package/dist/lib/parsers/xml/parse-xml-helpers.js +0 -68
- package/dist/lib/services/arcgis/arcgis-image-service.js +0 -94
- package/dist/lib/services/arcgis/arcgis-server.js +0 -42
- package/dist/lib/services/generic/image-service.js +0 -47
- package/dist/lib/services/ogc/csw-service.js +0 -168
- package/dist/lib/services/ogc/wms-service.js +0 -309
- package/dist/lib/sources/data-source.js +0 -56
- package/dist/lib/sources/image-source.js +0 -13
- package/dist/lib/sources/tile-source.js +0 -13
- package/dist/lib/sources/utils/utils.js +0 -38
- package/dist/lib/wfs/parse-wfs.js +0 -32
- package/dist/lib/wmts/parse-wmts.js +0 -35
- package/dist/wip/arcgis-feature-service.js +0 -28
- package/dist/wip/data-source.js +0 -59
- package/dist/wip/lib/wcs/parse-wcs-capabilities.js +0 -15
- package/dist/wip/lib/wfs/parse-wfs-capabilities.js +0 -19
- package/dist/wip/lib/wmts/parse-wmts-capabilities.js +0 -77
- package/dist/wip/wcs-capabilities-loader.js +0 -31
- package/dist/wip/wfs-capabilities-loader.js +0 -31
- package/dist/wip/wms-feature-info-loader.js +0 -18
- package/dist/wip/wms-layer-description-loader.js +0 -17
- package/dist/wip/wmts-capabilities-loader.js +0 -32
- package/dist/wms-capabilities-loader.js +0 -34
- package/dist/wms-error-loader.js +0 -42
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// loaders.gl, MIT license
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.getXMLBoolean = exports.getXMLInteger = exports.getXMLFloat = exports.getXMLStringArray = exports.getXMLArray = void 0;
|
|
5
|
-
/** A single element of an array is not represented as an array in XML */
|
|
6
|
-
function getXMLArray(xmlValue) {
|
|
7
|
-
// Already an array, return as is
|
|
8
|
-
if (Array.isArray(xmlValue)) {
|
|
9
|
-
return xmlValue;
|
|
10
|
-
}
|
|
11
|
-
// Single value, wrap in array
|
|
12
|
-
if (xmlValue) {
|
|
13
|
-
return [xmlValue];
|
|
14
|
-
}
|
|
15
|
-
// nullish, return empty array
|
|
16
|
-
return [];
|
|
17
|
-
}
|
|
18
|
-
exports.getXMLArray = getXMLArray;
|
|
19
|
-
/** Get a list of strings from XML */
|
|
20
|
-
function getXMLStringArray(xmlValue) {
|
|
21
|
-
const xmlArray = getXMLArray(xmlValue);
|
|
22
|
-
if (xmlArray.length > 0 && xmlArray.every((_) => typeof _ === 'string')) {
|
|
23
|
-
return xmlArray;
|
|
24
|
-
}
|
|
25
|
-
// TODO - error handling?
|
|
26
|
-
return [];
|
|
27
|
-
}
|
|
28
|
-
exports.getXMLStringArray = getXMLStringArray;
|
|
29
|
-
/** Get XML float */
|
|
30
|
-
function getXMLFloat(xmlValue, defaultValue = undefined) {
|
|
31
|
-
switch (typeof xmlValue) {
|
|
32
|
-
case 'number':
|
|
33
|
-
return xmlValue;
|
|
34
|
-
case 'string':
|
|
35
|
-
return parseFloat(xmlValue);
|
|
36
|
-
default:
|
|
37
|
-
return undefined;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
exports.getXMLFloat = getXMLFloat;
|
|
41
|
-
/** Get XML integer */
|
|
42
|
-
function getXMLInteger(xmlValue, defaultValue = undefined) {
|
|
43
|
-
switch (typeof xmlValue) {
|
|
44
|
-
case 'number':
|
|
45
|
-
return xmlValue;
|
|
46
|
-
case 'string':
|
|
47
|
-
return parseInt(xmlValue, 10);
|
|
48
|
-
default:
|
|
49
|
-
return undefined;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
exports.getXMLInteger = getXMLInteger;
|
|
53
|
-
/** Somewhat arbitrary boolean parsing */
|
|
54
|
-
function getXMLBoolean(xmlValue) {
|
|
55
|
-
switch (xmlValue) {
|
|
56
|
-
case 'true':
|
|
57
|
-
return true;
|
|
58
|
-
case 'false':
|
|
59
|
-
return false;
|
|
60
|
-
case '1':
|
|
61
|
-
return true;
|
|
62
|
-
case '0':
|
|
63
|
-
return false;
|
|
64
|
-
default:
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
exports.getXMLBoolean = getXMLBoolean;
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// loaders.gl, MIT license
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.ArcGISImageServer = void 0;
|
|
5
|
-
const image_source_1 = require("../../sources/image-source");
|
|
6
|
-
/**
|
|
7
|
-
* ArcGIS ImageServer
|
|
8
|
-
* Note - exports a big API, that could be exposed here if there is a use case
|
|
9
|
-
* @see https://developers.arcgis.com/rest/services-reference/enterprise/image-service.htm
|
|
10
|
-
*/
|
|
11
|
-
class ArcGISImageServer extends image_source_1.ImageSource {
|
|
12
|
-
constructor(props) {
|
|
13
|
-
super(props);
|
|
14
|
-
}
|
|
15
|
-
// ImageSource (normalized endpoints)
|
|
16
|
-
async getMetadata() {
|
|
17
|
-
return (await this.metadata());
|
|
18
|
-
// TODO - normalize metadata
|
|
19
|
-
}
|
|
20
|
-
async getImage(parameters) {
|
|
21
|
-
throw new Error('not implemented');
|
|
22
|
-
// TODO - Map generic parameters to ArcGIS specific parameters
|
|
23
|
-
// return await this.exportImage(parameters);
|
|
24
|
-
}
|
|
25
|
-
// ImageServer endpoints
|
|
26
|
-
async metadata() {
|
|
27
|
-
// We just need a JSON parsing...
|
|
28
|
-
// return this.getUrl({path: '', ...options});
|
|
29
|
-
throw new Error('not implemented');
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Form a URL to an ESRI ImageServer
|
|
33
|
-
// https://sampleserver6.arcgisonline.com/arcgis/rest/services/NLCDLandCover2001/ImageServer/exportImage?bbox=${bounds[0]},${bounds[1]},${bounds[2]},${bounds[3]}&bboxSR=4326&size=${width},${height}&imageSR=102100&time=&format=jpgpng&pixelType=U8&noData=&noDataInterpretation=esriNoDataMatchAny&interpolation=+RSP_NearestNeighbor&compression=&compressionQuality=&bandIds=&mosaicRule=&renderingRule=&f=image`,
|
|
34
|
-
*/
|
|
35
|
-
exportImage(options) {
|
|
36
|
-
// See WMSService.getMap()
|
|
37
|
-
throw new Error('not implemented');
|
|
38
|
-
}
|
|
39
|
-
// URL creators
|
|
40
|
-
metadataURL(options) {
|
|
41
|
-
return `${this.props.url}?f=pjson`;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Form a URL to an ESRI ImageServer
|
|
45
|
-
// https://sampleserver6.arcgisonline.com/arcgis/rest/services/NLCDLandCover2001/ImageServer/exportImage?
|
|
46
|
-
// bbox=${bounds[0]},${bounds[1]},${bounds[2]},${bounds[3]}&bboxSR=4326&
|
|
47
|
-
// size=${width},${height}&imageSR=102100&time=&format=jpgpng&pixelType=U8&
|
|
48
|
-
// noData=&noDataInterpretation=esriNoDataMatchAny&interpolation=+RSP_NearestNeighbor&compression=&
|
|
49
|
-
// compressionQuality=&bandIds=&mosaicRule=&renderingRule=&
|
|
50
|
-
// f=image
|
|
51
|
-
*/
|
|
52
|
-
exportImageURL(options) {
|
|
53
|
-
const bbox = `bbox=${options.bbox[0]},${options.bbox[1]},${options.bbox[2]},${options.bbox[3]}`;
|
|
54
|
-
const size = `size=${options.width},${options.height}`;
|
|
55
|
-
const arcgisOptions = { ...options, bbox, size };
|
|
56
|
-
// @ts-expect-error
|
|
57
|
-
delete arcgisOptions.width;
|
|
58
|
-
// @ts-expect-error
|
|
59
|
-
delete arcgisOptions.height;
|
|
60
|
-
return this.getUrl('exportImage', arcgisOptions);
|
|
61
|
-
}
|
|
62
|
-
// INTERNAL METHODS
|
|
63
|
-
/**
|
|
64
|
-
* @note protected, since perhaps getWMSUrl may need to be overridden to handle certain backends?
|
|
65
|
-
* @note if override is common, maybe add a callback prop?
|
|
66
|
-
* */
|
|
67
|
-
getUrl(path, options, extra) {
|
|
68
|
-
let url = `${this.props.url}/${path}`;
|
|
69
|
-
let first = true;
|
|
70
|
-
for (const [key, value] of Object.entries(options)) {
|
|
71
|
-
url += first ? '?' : '&';
|
|
72
|
-
first = false;
|
|
73
|
-
if (Array.isArray(value)) {
|
|
74
|
-
url += `${key.toUpperCase()}=${value.join(',')}`;
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
url += `${key.toUpperCase()}=${value ? String(value) : ''}`;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return url;
|
|
81
|
-
}
|
|
82
|
-
/** Checks for and parses a WMS XML formatted ServiceError and throws an exception */
|
|
83
|
-
async checkResponse(response) {
|
|
84
|
-
if (!response.ok) {
|
|
85
|
-
// } || response.headers['content-type'] === WMSErrorLoader.mimeTypes[0]) {
|
|
86
|
-
// const arrayBuffer = await response.arrayBuffer();
|
|
87
|
-
// const error = await WMSErrorLoader.parse(arrayBuffer, this.loadOptions);
|
|
88
|
-
throw new Error('error');
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
exports.ArcGISImageServer = ArcGISImageServer;
|
|
93
|
-
ArcGISImageServer.type = 'arcgis-image-server';
|
|
94
|
-
ArcGISImageServer.testURL = (url) => url.toLowerCase().includes('ImageServer');
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// loaders.gl, MIT license
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.getArcGISServices = void 0;
|
|
5
|
-
/**
|
|
6
|
-
* (Recursively) load the service directory from an ArcGIS Server URL
|
|
7
|
-
* @param url
|
|
8
|
-
* @param fetchFile= Optional fetch function override
|
|
9
|
-
* @returns
|
|
10
|
-
*/
|
|
11
|
-
async function getArcGISServices(url, fetchFile = fetch) {
|
|
12
|
-
if (url.includes('rest/services')) {
|
|
13
|
-
const serverUrl = url.replace(/rest\/services.*$/i, 'rest/services');
|
|
14
|
-
return loadServiceDirectory(serverUrl, fetchFile, []);
|
|
15
|
-
}
|
|
16
|
-
return null;
|
|
17
|
-
}
|
|
18
|
-
exports.getArcGISServices = getArcGISServices;
|
|
19
|
-
async function loadServiceDirectory(serverUrl, fetch, path) {
|
|
20
|
-
const serviceUrl = `${serverUrl}/${path.join('/')}`;
|
|
21
|
-
const response = await fetch(`${serviceUrl}?f=pjson`);
|
|
22
|
-
const directory = await response.json();
|
|
23
|
-
const services = extractServices(directory, serviceUrl);
|
|
24
|
-
const folders = (directory.folders || []);
|
|
25
|
-
const promises = folders.map((folder) => loadServiceDirectory(`${serverUrl}`, fetch, [...path, folder]));
|
|
26
|
-
for (const folderServices of await Promise.all(promises)) {
|
|
27
|
-
services.push(...folderServices);
|
|
28
|
-
}
|
|
29
|
-
return services;
|
|
30
|
-
}
|
|
31
|
-
function extractServices(directory, url) {
|
|
32
|
-
const arcgisServices = (directory.services || []);
|
|
33
|
-
const services = [];
|
|
34
|
-
for (const service of arcgisServices) {
|
|
35
|
-
services.push({
|
|
36
|
-
name: service.name,
|
|
37
|
-
type: `arcgis-${service.type.toLocaleLowerCase().replace('server', '-server')}`,
|
|
38
|
-
url: `${url}${service.name}/${service.type}`
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
return services;
|
|
42
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// loaders.gl, MIT license
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.ImageService = void 0;
|
|
5
|
-
const images_1 = require("@loaders.gl/images");
|
|
6
|
-
const image_source_1 = require("../../sources/image-source");
|
|
7
|
-
/**
|
|
8
|
-
* Quickly connect to "ad hoc" image sources without subclassing ImageSource.
|
|
9
|
-
* ImageSource allows template url strings to be used to ad hoc connect to arbitrary image data sources
|
|
10
|
-
* Accepts a template url string and builds requests URLs
|
|
11
|
-
*/
|
|
12
|
-
class ImageService extends image_source_1.ImageSource {
|
|
13
|
-
constructor(props) {
|
|
14
|
-
super(props);
|
|
15
|
-
}
|
|
16
|
-
// IMAGE SOURCE API
|
|
17
|
-
async getMetadata() {
|
|
18
|
-
throw new Error('ImageSource.getMetadata not implemented');
|
|
19
|
-
}
|
|
20
|
-
async getImage(parameters) {
|
|
21
|
-
const granularParameters = this.getGranularParameters(parameters);
|
|
22
|
-
const url = this.getURLFromTemplate(granularParameters);
|
|
23
|
-
const response = await this.fetch(url);
|
|
24
|
-
const arrayBuffer = await response.arrayBuffer();
|
|
25
|
-
return await images_1.ImageLoader.parse(arrayBuffer);
|
|
26
|
-
}
|
|
27
|
-
// HELPERS
|
|
28
|
-
/** Break up bounding box in east, north, south, west */
|
|
29
|
-
getGranularParameters(parameters) {
|
|
30
|
-
const [east, north, west, south] = parameters.bbox;
|
|
31
|
-
return { ...parameters, east, north, south, west };
|
|
32
|
-
}
|
|
33
|
-
/** Supports both ${} and {} notations */
|
|
34
|
-
getURLFromTemplate(parameters) {
|
|
35
|
-
let url = this.props.url;
|
|
36
|
-
for (const [key, value] of Object.entries(parameters)) {
|
|
37
|
-
// TODO - parameter could be repeated
|
|
38
|
-
// const regex = new RegExp(`\${${key}}`, 'g');
|
|
39
|
-
url = url.replace(`\${${key}}`, String(value));
|
|
40
|
-
url = url.replace(`{${key}}`, String(value));
|
|
41
|
-
}
|
|
42
|
-
return url;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
exports.ImageService = ImageService;
|
|
46
|
-
ImageService.type = 'template';
|
|
47
|
-
ImageService.testURL = (url) => url.toLowerCase().includes('{');
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// loaders.gl, MIT license
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.CSWService = void 0;
|
|
5
|
-
const data_source_1 = require("../../sources/data-source");
|
|
6
|
-
const csw_capabilities_loader_1 = require("../../../csw-capabilities-loader");
|
|
7
|
-
const csw_records_loader_1 = require("../../../csw-records-loader");
|
|
8
|
-
const csw_domain_loader_1 = require("../../../csw-domain-loader");
|
|
9
|
-
const wms_error_loader_1 = require("../../../wms-error-loader");
|
|
10
|
-
/**
|
|
11
|
-
* The CSWService class
|
|
12
|
-
* - provides type safe methods to form URLs to a CSW service
|
|
13
|
-
* - provides type safe methods to query and parse results (and errors) from a CSW service
|
|
14
|
-
* @note Only the URL parameter conversion is supported. XML posts are not supported.
|
|
15
|
-
*/
|
|
16
|
-
class CSWService extends data_source_1.DataSource {
|
|
17
|
-
/** Create a CSWService */
|
|
18
|
-
constructor(props) {
|
|
19
|
-
super(props);
|
|
20
|
-
this.capabilities = null;
|
|
21
|
-
/** A list of loaders used by the CSWService methods */
|
|
22
|
-
this.loaders = [wms_error_loader_1.WMSErrorLoader, csw_capabilities_loader_1.CSWCapabilitiesLoader];
|
|
23
|
-
}
|
|
24
|
-
async getMetadata() {
|
|
25
|
-
const capabilities = await this.getCapabilities();
|
|
26
|
-
return this.normalizeMetadata(capabilities);
|
|
27
|
-
}
|
|
28
|
-
normalizeMetadata(capabilities) {
|
|
29
|
-
return capabilities;
|
|
30
|
-
}
|
|
31
|
-
async getServiceDirectory(options) {
|
|
32
|
-
const services = [];
|
|
33
|
-
const unknownServices = [];
|
|
34
|
-
const records = await this.getRecords();
|
|
35
|
-
for (const record of records.records) {
|
|
36
|
-
for (const reference of record.references) {
|
|
37
|
-
const url = reference.value;
|
|
38
|
-
switch (reference.scheme) {
|
|
39
|
-
case 'OGC:WMS':
|
|
40
|
-
services.push({ name: record.title, type: 'ogc-wms-service', ...this._parseOGCUrl(url) });
|
|
41
|
-
break;
|
|
42
|
-
case 'OGC:WMTS':
|
|
43
|
-
services.push({
|
|
44
|
-
name: record.title,
|
|
45
|
-
type: 'ogc-wmts-service',
|
|
46
|
-
...this._parseOGCUrl(url)
|
|
47
|
-
});
|
|
48
|
-
break;
|
|
49
|
-
case 'OGC:WFS':
|
|
50
|
-
services.push({ name: record.title, type: 'ogc-wfs-service', ...this._parseOGCUrl(url) });
|
|
51
|
-
break;
|
|
52
|
-
default:
|
|
53
|
-
unknownServices.push({
|
|
54
|
-
name: record.title,
|
|
55
|
-
type: 'unknown',
|
|
56
|
-
url: reference.value,
|
|
57
|
-
scheme: reference.scheme
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return options?.includeUnknown ? services.concat(unknownServices) : services;
|
|
63
|
-
}
|
|
64
|
-
_parseOGCUrl(url) {
|
|
65
|
-
const parts = url.split('?');
|
|
66
|
-
return {
|
|
67
|
-
url: parts[0],
|
|
68
|
-
params: parts[1] || ''
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
// CSW Service API Stubs
|
|
72
|
-
/** Get Capabilities */
|
|
73
|
-
async getCapabilities(wmsParameters, vendorParameters) {
|
|
74
|
-
const url = this.getCapabilitiesURL(wmsParameters, vendorParameters);
|
|
75
|
-
const response = await this.fetch(url);
|
|
76
|
-
const arrayBuffer = await response.arrayBuffer();
|
|
77
|
-
this._checkResponse(response, arrayBuffer);
|
|
78
|
-
const capabilities = await csw_capabilities_loader_1.CSWCapabilitiesLoader.parse(arrayBuffer, this.props.loadOptions);
|
|
79
|
-
return capabilities;
|
|
80
|
-
}
|
|
81
|
-
/** Get Records */
|
|
82
|
-
async getRecords(wmsParameters, vendorParameters) {
|
|
83
|
-
const url = this.getRecordsURL(wmsParameters, vendorParameters);
|
|
84
|
-
const response = await this.fetch(url);
|
|
85
|
-
const arrayBuffer = await response.arrayBuffer();
|
|
86
|
-
this._checkResponse(response, arrayBuffer);
|
|
87
|
-
return await csw_records_loader_1.CSWRecordsLoader.parse(arrayBuffer, this.props.loadOptions);
|
|
88
|
-
}
|
|
89
|
-
/** Get Domain */
|
|
90
|
-
async getDomain(wmsParameters, vendorParameters) {
|
|
91
|
-
const url = this.getDomainURL(wmsParameters, vendorParameters);
|
|
92
|
-
const response = await this.fetch(url);
|
|
93
|
-
const arrayBuffer = await response.arrayBuffer();
|
|
94
|
-
this._checkResponse(response, arrayBuffer);
|
|
95
|
-
return await csw_domain_loader_1.CSWDomainLoader.parse(arrayBuffer, this.props.loadOptions);
|
|
96
|
-
}
|
|
97
|
-
// Typed URL creators
|
|
98
|
-
// For applications that want full control of fetching and parsing
|
|
99
|
-
/** Generate a URL for the GetCapabilities request */
|
|
100
|
-
getCapabilitiesURL(wmsParameters, vendorParameters) {
|
|
101
|
-
const options = {
|
|
102
|
-
version: '3.0.0',
|
|
103
|
-
...wmsParameters,
|
|
104
|
-
...vendorParameters,
|
|
105
|
-
service: 'CSW',
|
|
106
|
-
request: 'GetCapabilities'
|
|
107
|
-
};
|
|
108
|
-
return this._getCSWUrl(options, vendorParameters);
|
|
109
|
-
}
|
|
110
|
-
/** Generate a URL for the GetCapabilities request */
|
|
111
|
-
getRecordsURL(wmsParameters, vendorParameters) {
|
|
112
|
-
const options = {
|
|
113
|
-
version: '3.0.0',
|
|
114
|
-
typenames: 'csw:Record',
|
|
115
|
-
...wmsParameters,
|
|
116
|
-
...vendorParameters,
|
|
117
|
-
service: 'CSW',
|
|
118
|
-
request: 'GetRecords'
|
|
119
|
-
};
|
|
120
|
-
return this._getCSWUrl(options, vendorParameters);
|
|
121
|
-
}
|
|
122
|
-
/** Generate a URL for the GetCapabilities request */
|
|
123
|
-
getDomainURL(wmsParameters, vendorParameters) {
|
|
124
|
-
const options = {
|
|
125
|
-
version: '3.0.0',
|
|
126
|
-
...wmsParameters,
|
|
127
|
-
...vendorParameters,
|
|
128
|
-
service: 'CSW',
|
|
129
|
-
request: 'GetDomain'
|
|
130
|
-
};
|
|
131
|
-
return this._getCSWUrl(options, vendorParameters);
|
|
132
|
-
}
|
|
133
|
-
// INTERNAL METHODS
|
|
134
|
-
/**
|
|
135
|
-
* @note case _getCSWUrl may need to be overridden to handle certain backends?
|
|
136
|
-
* */
|
|
137
|
-
_getCSWUrl(options, vendorParameters) {
|
|
138
|
-
let url = this.props.url;
|
|
139
|
-
let first = true;
|
|
140
|
-
for (const [key, value] of Object.entries(options)) {
|
|
141
|
-
url += first ? '?' : '&';
|
|
142
|
-
first = false;
|
|
143
|
-
if (Array.isArray(value)) {
|
|
144
|
-
url += `${key.toUpperCase()}=${value.join(',')}`;
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
url += `${key.toUpperCase()}=${value ? String(value) : ''}`;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return encodeURI(url);
|
|
151
|
-
}
|
|
152
|
-
/** Checks for and parses a CSW XML formatted ServiceError and throws an exception */
|
|
153
|
-
_checkResponse(response, arrayBuffer) {
|
|
154
|
-
const contentType = response.headers['content-type'];
|
|
155
|
-
if (!response.ok || wms_error_loader_1.WMSErrorLoader.mimeTypes.includes(contentType)) {
|
|
156
|
-
const error = wms_error_loader_1.WMSErrorLoader.parseSync?.(arrayBuffer, this.props.loadOptions);
|
|
157
|
-
throw new Error(error);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
/** Error situation detected */
|
|
161
|
-
_parseError(arrayBuffer) {
|
|
162
|
-
const error = wms_error_loader_1.WMSErrorLoader.parseSync?.(arrayBuffer, this.props.loadOptions);
|
|
163
|
-
return new Error(error);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
exports.CSWService = CSWService;
|
|
167
|
-
CSWService.type = 'csw';
|
|
168
|
-
CSWService.testURL = (url) => url.toLowerCase().includes('csw');
|