@loaders.gl/wms 3.3.0-alpha.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/LICENSE +41 -0
- package/README.md +7 -0
- package/dist/dist.min.js +2277 -0
- package/dist/es5/bundle.js +6 -0
- package/dist/es5/bundle.js.map +1 -0
- package/dist/es5/index.js +34 -0
- package/dist/es5/index.js.map +1 -0
- package/dist/es5/lib/data-sources/image-data-source.js +4 -0
- package/dist/es5/lib/data-sources/image-data-source.js.map +1 -0
- package/dist/es5/lib/data-sources/wms-data-source.js +223 -0
- package/dist/es5/lib/data-sources/wms-data-source.js.map +1 -0
- package/dist/es5/lib/parse-wms.js +102 -0
- package/dist/es5/lib/parse-wms.js.map +1 -0
- package/dist/es5/wms-capabilities-loader.js +54 -0
- package/dist/es5/wms-capabilities-loader.js.map +1 -0
- package/dist/es5/wms-feature-info-loader.js +44 -0
- package/dist/es5/wms-feature-info-loader.js.map +1 -0
- package/dist/es5/wms-layer-description-loader.js +44 -0
- package/dist/es5/wms-layer-description-loader.js.map +1 -0
- package/dist/es5/wms-types.js +2 -0
- package/dist/es5/wms-types.js.map +1 -0
- package/dist/esm/bundle.js +6 -0
- package/dist/esm/bundle.js.map +1 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/data-sources/image-data-source.js +2 -0
- package/dist/esm/lib/data-sources/image-data-source.js.map +1 -0
- package/dist/esm/lib/data-sources/wms-data-source.js +70 -0
- package/dist/esm/lib/data-sources/wms-data-source.js.map +1 -0
- package/dist/esm/lib/parse-wms.js +70 -0
- package/dist/esm/lib/parse-wms.js.map +1 -0
- package/dist/esm/wms-capabilities-loader.js +25 -0
- package/dist/esm/wms-capabilities-loader.js.map +1 -0
- package/dist/esm/wms-feature-info-loader.js +14 -0
- package/dist/esm/wms-feature-info-loader.js.map +1 -0
- package/dist/esm/wms-layer-description-loader.js +14 -0
- package/dist/esm/wms-layer-description-loader.js.map +1 -0
- package/dist/esm/wms-types.js +2 -0
- package/dist/esm/wms-types.js.map +1 -0
- package/package.json +43 -0
- package/src/bundle.ts +6 -0
- package/src/index.ts +13 -0
- package/src/lib/data-sources/image-data-source.ts +84 -0
- package/src/lib/data-sources/wms-data-source.ts +99 -0
- package/src/lib/parse-wms.ts +92 -0
- package/src/wms-capabilities-loader.ts +40 -0
- package/src/wms-feature-info-loader.ts +21 -0
- package/src/wms-layer-description-loader.ts +21 -0
- package/src/wms-types.ts +2051 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
WMSCapabilities,
|
|
5
|
+
WMSLayer,
|
|
6
|
+
WMSRequest,
|
|
7
|
+
WMSFeatureInfo
|
|
8
|
+
// WMSFeature,
|
|
9
|
+
// WMSLayerDescription
|
|
10
|
+
} from '../wms-types';
|
|
11
|
+
|
|
12
|
+
import {XMLLoader} from '@loaders.gl/xml';
|
|
13
|
+
|
|
14
|
+
// GetCapabilities
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Parses a typed data structure from raw XML for `GetCapabilities` response
|
|
18
|
+
* @note Error handlings is fairly weak
|
|
19
|
+
*/
|
|
20
|
+
export function parseWMSCapabilities(text: string, options): WMSCapabilities {
|
|
21
|
+
const parsedXML = XMLLoader.parseTextSync(text, options);
|
|
22
|
+
const xmlCapabilities: any =
|
|
23
|
+
parsedXML.WMT_MS_Capabilities || parsedXML.WMS_Capabilities || parsedXML;
|
|
24
|
+
return extractCapabilities(xmlCapabilities);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Extract typed capability data from XML */
|
|
28
|
+
function extractCapabilities(xml: any): WMSCapabilities {
|
|
29
|
+
const capabilities: WMSCapabilities = {
|
|
30
|
+
name: xml.Service?.Name || 'unnamed',
|
|
31
|
+
title: xml.Service?.Title,
|
|
32
|
+
keywords: [],
|
|
33
|
+
requests: {},
|
|
34
|
+
layer: extractLayer(xml.Capability?.Layer),
|
|
35
|
+
raw: xml
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
for (const keyword of xml.Service?.KeywordList?.Keyword || []) {
|
|
39
|
+
capabilities.keywords.push(keyword);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
for (const [name, xmlRequest] of Object.entries(xml.Capability?.Request || {})) {
|
|
43
|
+
capabilities.requests[name] = extractRequest(name, xmlRequest);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return capabilities;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** Extract typed request data from XML */
|
|
50
|
+
function extractRequest(name: string, xmlRequest: any): WMSRequest {
|
|
51
|
+
const format: string | string[] = xmlRequest?.Format;
|
|
52
|
+
const mimeTypes: string[] = Array.isArray(format) ? format : [format];
|
|
53
|
+
return {name, mimeTypes};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Extract request data */
|
|
57
|
+
function extractLayer(xmlLayer: any): WMSLayer {
|
|
58
|
+
const layer: WMSLayer = {
|
|
59
|
+
name: xmlLayer?.Name,
|
|
60
|
+
title: xmlLayer?.Title,
|
|
61
|
+
srs: xmlLayer?.SRS || [],
|
|
62
|
+
layers: []
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
for (const xmlSubLayer of xmlLayer?.Layer || []) {
|
|
66
|
+
layer.layers?.push(extractLayer(xmlSubLayer));
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return layer;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// GetFeatureInfo
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Parses a typed data structure from raw XML for `GetFeatureInfo` response
|
|
76
|
+
* @note Error handlings is fairly weak
|
|
77
|
+
*/
|
|
78
|
+
export function parseWMSFeatureInfo(text: string, options): WMSFeatureInfo {
|
|
79
|
+
const parsedXML = XMLLoader.parseTextSync(text, options);
|
|
80
|
+
const xmlFeatureInfo: any = parsedXML.FeatureInfoResponse?.FIELDS || [];
|
|
81
|
+
|
|
82
|
+
const xmlFeatures = Array.isArray(xmlFeatureInfo) ? xmlFeatureInfo : [xmlFeatureInfo];
|
|
83
|
+
|
|
84
|
+
return {
|
|
85
|
+
features: xmlFeatures.map((xmlFeature) => extractFeature(xmlFeature))
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function extractFeature(xmlFeature: any) {
|
|
90
|
+
const xmlFields = xmlFeature || {};
|
|
91
|
+
return {attributes: xmlFields};
|
|
92
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
3
|
+
import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';
|
|
4
|
+
import {parseWMSCapabilities} from './lib/parse-wms';
|
|
5
|
+
|
|
6
|
+
// __VERSION__ is injected by babel-plugin-version-inline
|
|
7
|
+
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
8
|
+
const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
|
|
9
|
+
|
|
10
|
+
export type WMSLoaderOptions = LoaderOptions & {
|
|
11
|
+
wms?: {};
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Loader for the response to the WMS GetCapability request
|
|
16
|
+
*/
|
|
17
|
+
export const WMSCapabilitiesLoader = {
|
|
18
|
+
name: 'WMS Capabilities',
|
|
19
|
+
id: 'wms-capabilities',
|
|
20
|
+
|
|
21
|
+
module: 'wms',
|
|
22
|
+
version: VERSION,
|
|
23
|
+
worker: false,
|
|
24
|
+
extensions: ['xml'],
|
|
25
|
+
mimeTypes: ['application/vnd.ogc.wms_xml', 'application/xml', 'text/xml'],
|
|
26
|
+
testText: testXMLFile,
|
|
27
|
+
options: {
|
|
28
|
+
wms: {}
|
|
29
|
+
},
|
|
30
|
+
parse: async (arrayBuffer: ArrayBuffer, options?: WMSLoaderOptions) =>
|
|
31
|
+
parseWMSCapabilities(new TextDecoder().decode(arrayBuffer), options),
|
|
32
|
+
parseTextSync: (text: string, options?: WMSLoaderOptions) => parseWMSCapabilities(text, options)
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
function testXMLFile(text: string): boolean {
|
|
36
|
+
// TODO - There could be space first.
|
|
37
|
+
return text.startsWith('<?xml');
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export const _typecheckWMSCapabilitiesLoader: LoaderWithParser = WMSCapabilitiesLoader;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
3
|
+
import type {LoaderWithParser} from '@loaders.gl/loader-utils';
|
|
4
|
+
import {WMSCapabilitiesLoader, WMSLoaderOptions} from './wms-capabilities-loader';
|
|
5
|
+
import {parseWMSFeatureInfo} from './lib/parse-wms';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Loader for the response to the WMS GetFeatureInfo request
|
|
9
|
+
*/
|
|
10
|
+
export const WMSFeatureInfoLoader = {
|
|
11
|
+
...WMSCapabilitiesLoader,
|
|
12
|
+
|
|
13
|
+
name: 'WMS FeatureInfo',
|
|
14
|
+
id: 'wms-feature-info',
|
|
15
|
+
|
|
16
|
+
parse: async (arrayBuffer: ArrayBuffer, options?: WMSLoaderOptions) =>
|
|
17
|
+
parseWMSFeatureInfo(new TextDecoder().decode(arrayBuffer), options),
|
|
18
|
+
parseTextSync: (text: string, options?: WMSLoaderOptions) => parseWMSFeatureInfo(text, options)
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const _typecheckWMSFeatureInfoLoader: LoaderWithParser = WMSFeatureInfoLoader;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
3
|
+
import type {LoaderWithParser} from '@loaders.gl/loader-utils';
|
|
4
|
+
import {WMSCapabilitiesLoader, WMSLoaderOptions} from './wms-capabilities-loader';
|
|
5
|
+
import {parseWMSFeatureInfo} from './lib/parse-wms';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Loader for the response to the WMS GetFeatureInfo request
|
|
9
|
+
*/
|
|
10
|
+
export const WMSLayerDescriptionLoader = {
|
|
11
|
+
...WMSCapabilitiesLoader,
|
|
12
|
+
|
|
13
|
+
name: 'WMS DescribeLayer',
|
|
14
|
+
id: 'wms-layer-description',
|
|
15
|
+
|
|
16
|
+
parse: async (arrayBuffer: ArrayBuffer, options?: WMSLoaderOptions) =>
|
|
17
|
+
parseWMSFeatureInfo(new TextDecoder().decode(arrayBuffer), options),
|
|
18
|
+
parseTextSync: (text: string, options?: WMSLoaderOptions) => parseWMSFeatureInfo(text, options)
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const _typecheckWMSFeatureInfoLoader: LoaderWithParser = WMSLayerDescriptionLoader;
|