@loaders.gl/wms 3.3.0-alpha.8 → 3.3.0-alpha.9
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/dist.min.js +624 -33
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/index.js +21 -0
- package/dist/es5/index.js.map +1 -1
- 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 +7 -6
- package/dist/es5/wms-capabilities-loader.js.map +1 -1
- 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.map +1 -1
- package/dist/esm/bundle.js +1 -0
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- 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 +6 -4
- package/dist/esm/wms-capabilities-loader.js.map +1 -1
- 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.map +1 -1
- package/package.json +4 -4
- package/src/bundle.ts +2 -0
- package/src/index.ts +8 -1
- 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 +10 -8
- package/src/wms-feature-info-loader.ts +21 -0
- package/src/wms-layer-description-loader.ts +21 -0
- package/src/wms-types.ts +74 -24
- package/dist/es5/lib/parse-wms-capabilities.js +0 -19
- package/dist/es5/lib/parse-wms-capabilities.js.map +0 -1
- package/dist/esm/lib/parse-wms-capabilities.js +0 -14
- package/dist/esm/lib/parse-wms-capabilities.js.map +0 -1
- package/src/lib/parse-wms-capabilities.ts +0 -14
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/wms",
|
|
3
|
-
"version": "3.3.0-alpha.
|
|
3
|
+
"version": "3.3.0-alpha.9",
|
|
4
4
|
"description": "Framework-independent loaders for the WMS (Web Map Service) standard",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -33,11 +33,11 @@
|
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@babel/runtime": "^7.3.1",
|
|
36
|
-
"@loaders.gl/loader-utils": "3.3.0-alpha.
|
|
37
|
-
"@loaders.gl/schema": "3.3.0-alpha.
|
|
36
|
+
"@loaders.gl/loader-utils": "3.3.0-alpha.9",
|
|
37
|
+
"@loaders.gl/schema": "3.3.0-alpha.9"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"xmldom": "0.6.0"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "c95a4ff72512668a93d9041ce8636bac09333fd5"
|
|
43
43
|
}
|
package/src/bundle.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -2,5 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
// WMSCapabilitiesLoader
|
|
4
4
|
|
|
5
|
-
export type {
|
|
5
|
+
export type {WMSCapabilities, WMSFeatureInfo, WMSLayerDescription} from './wms-types';
|
|
6
|
+
|
|
7
|
+
export type {WMSLoaderOptions} from './wms-capabilities-loader';
|
|
6
8
|
export {WMSCapabilitiesLoader} from './wms-capabilities-loader';
|
|
9
|
+
export {WMSFeatureInfoLoader} from './wms-feature-info-loader';
|
|
10
|
+
export {WMSLayerDescriptionLoader} from './wms-layer-description-loader';
|
|
11
|
+
|
|
12
|
+
export type {WMSDataSourceProps as _WMSDataSourceProps} from './lib/data-sources/wms-data-source';
|
|
13
|
+
export {WMSDataSource as _WMSDataSource} from './lib/data-sources/wms-data-source';
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
import {ImageType} from '@loaders.gl/images';
|
|
5
|
+
|
|
6
|
+
/** General data source class *
|
|
7
|
+
export abstract class DataSource {};
|
|
8
|
+
|
|
9
|
+
/** Data source that serves data by tile index *
|
|
10
|
+
export abstract class TileDataSource extends DataSource {};
|
|
11
|
+
|
|
12
|
+
export type ImageFeatureInfo = {};
|
|
13
|
+
|
|
14
|
+
export type ImageLayerInfo = {};
|
|
15
|
+
|
|
16
|
+
export type ImageDataSourceCapabilities = {}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* ImageDataSource - data sources that allow data to be queried by (geospatial) extents
|
|
20
|
+
* @note
|
|
21
|
+
* - If geospatial, bounding box is expected to be in web mercator coordinates
|
|
22
|
+
*
|
|
23
|
+
export abstract class ImageDataSource extends DataSource {
|
|
24
|
+
abstract getCapabilities(): Promise<ImageDataSourceCapabilities>;
|
|
25
|
+
abstract getImage({boundingBox, width, height, layers, parameters}): Promise<ImageType>;
|
|
26
|
+
getFeatureInfo({layers, parameters}): Promise<ImageFeatureInfo> {
|
|
27
|
+
throw new Error('not implemented');
|
|
28
|
+
}
|
|
29
|
+
getLayerInfo({layers, parameters}): Promise<ImageLayerInfo> {
|
|
30
|
+
throw new Error('not implemented');
|
|
31
|
+
}
|
|
32
|
+
getLegendImage({layers, parameters}): Promise<ImageType> {
|
|
33
|
+
throw new Error('not implemented');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Vector Tile Data Source
|
|
38
|
+
|
|
39
|
+
export type VectorTileDataSourceCapabilities = {
|
|
40
|
+
// check tile.json
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export type VectorTile = Record<string, any>;
|
|
44
|
+
|
|
45
|
+
export abstract class VectorTileDataSource extends TileDataSource {
|
|
46
|
+
abstract getCapabilities(): Promise<VectorTileDataSourceCapabilities>;
|
|
47
|
+
abstract getTile({x, y, z, width, height, layers, parameters}): Promise<VectorTile>;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Image Tile Data Source
|
|
51
|
+
|
|
52
|
+
export type ImageTileDataSourceCapabilities = {
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export type ImageTile = Record<string, any>;
|
|
56
|
+
|
|
57
|
+
export type FeatureInfo = {};
|
|
58
|
+
|
|
59
|
+
export abstract class ImageTileDataSource extends TileDataSource {
|
|
60
|
+
source: ImageDataSource;
|
|
61
|
+
|
|
62
|
+
constructor(source: ImageDataSource) {
|
|
63
|
+
super();
|
|
64
|
+
this.source = source;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
getCapabilities(): Promise<ImageTileDataSourceCapabilities> {
|
|
68
|
+
return this.source.getCapabilities();
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
getTile({x, y, z, width, height, layers, parameters}): Promise<ImageType> {
|
|
72
|
+
const boundingBox = this.getBoundingBoxFromTileIndex(x, y, z);
|
|
73
|
+
return this.source.getImage({boundingBox, width, height, layers, parameters});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
getFeatureInfo(): FeatureInfo | null {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
getBoundingBoxFromTileIndex(x: number, y: number, z: number): [number, number, number, number] {
|
|
81
|
+
return [0, 0, 1, 1];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
*/
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
3
|
+
import type {WMSCapabilities, WMSFeatureInfo, WMSLayerDescription} from '@loaders.gl/wms';
|
|
4
|
+
import {
|
|
5
|
+
WMSCapabilitiesLoader,
|
|
6
|
+
WMSFeatureInfoLoader,
|
|
7
|
+
WMSLayerDescriptionLoader
|
|
8
|
+
} from '@loaders.gl/wms';
|
|
9
|
+
import {ImageLoader, ImageType} from '@loaders.gl/images';
|
|
10
|
+
import {LoaderOptions} from '@loaders.gl/loader-utils';
|
|
11
|
+
|
|
12
|
+
// import {ImageDataSource} from './image-data-sources';
|
|
13
|
+
|
|
14
|
+
type FetchLike = (url: string, options?: RequestInit) => Promise<Response>;
|
|
15
|
+
|
|
16
|
+
export type WMSDataSourceProps = {
|
|
17
|
+
url: string;
|
|
18
|
+
loadOptions?: LoaderOptions;
|
|
19
|
+
fetch?: typeof fetch | FetchLike;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export class WMSDataSource {
|
|
23
|
+
// implements ImageDataSource {
|
|
24
|
+
url: string;
|
|
25
|
+
loadOptions: LoaderOptions;
|
|
26
|
+
fetch: typeof fetch | FetchLike;
|
|
27
|
+
|
|
28
|
+
constructor(props: WMSDataSourceProps) {
|
|
29
|
+
this.url = props.url;
|
|
30
|
+
this.loadOptions = props.loadOptions || {};
|
|
31
|
+
this.fetch = props.fetch || fetch;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async getCapabilities(options: {parameters?: Record<string, unknown>}): Promise<WMSCapabilities> {
|
|
35
|
+
const url = this.getUrl({request: 'GetCapabilities', ...options});
|
|
36
|
+
const response = await this.fetch(url, this.loadOptions);
|
|
37
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
38
|
+
return await WMSCapabilitiesLoader.parse(arrayBuffer, this.loadOptions);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
async getImage(options: {
|
|
42
|
+
boundingBox;
|
|
43
|
+
width;
|
|
44
|
+
height;
|
|
45
|
+
layers: string[];
|
|
46
|
+
parameters?: Record<string, unknown>;
|
|
47
|
+
}): Promise<ImageType> {
|
|
48
|
+
const url = this.getUrl({request: 'GetMap', ...options});
|
|
49
|
+
const response = await this.fetch(url, this.loadOptions);
|
|
50
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
51
|
+
return await ImageLoader.parse(arrayBuffer, this.loadOptions);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
async getFeatureInfo(options: {
|
|
55
|
+
layers: string[];
|
|
56
|
+
parameters?: Record<string, unknown>;
|
|
57
|
+
}): Promise<WMSFeatureInfo> {
|
|
58
|
+
const url = this.getUrl({request: 'GetFeatureInfo', ...options});
|
|
59
|
+
const response = await this.fetch(url, this.loadOptions);
|
|
60
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
61
|
+
return await WMSFeatureInfoLoader.parse(arrayBuffer, this.loadOptions);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
async getLayerInfo(options: {
|
|
65
|
+
layers: string[];
|
|
66
|
+
parameters?: Record<string, unknown>;
|
|
67
|
+
}): Promise<WMSLayerDescription> {
|
|
68
|
+
const url = this.getUrl({request: 'GetLayerInfo', ...options});
|
|
69
|
+
const response = await this.fetch(url, this.loadOptions);
|
|
70
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
71
|
+
return await WMSLayerDescriptionLoader.parse(arrayBuffer, this.loadOptions);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
async getLegendImage(options: {
|
|
75
|
+
layers: string[];
|
|
76
|
+
parameters?: Record<string, unknown>;
|
|
77
|
+
}): Promise<ImageType> {
|
|
78
|
+
const url = this.getUrl({request: 'GetLegendImage', ...options});
|
|
79
|
+
const response = await this.fetch(url, this.loadOptions);
|
|
80
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
81
|
+
return await ImageLoader.parse(arrayBuffer, this.loadOptions);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* @note protected, since perhaps getUrl may need to be overridden to handle certain backends?
|
|
86
|
+
* @note if override is common, maybe add a callback prop?
|
|
87
|
+
* */
|
|
88
|
+
protected getUrl(options: {
|
|
89
|
+
request: string;
|
|
90
|
+
layers?: string[];
|
|
91
|
+
parameters?: Record<string, unknown>;
|
|
92
|
+
}): string {
|
|
93
|
+
let url = `${this.url}?REQUEST=${options.request}`;
|
|
94
|
+
if (options.layers?.length) {
|
|
95
|
+
url += `&LAYERS=[${options.layers.join(',')}]`;
|
|
96
|
+
}
|
|
97
|
+
return url;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -1,20 +1,23 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
1
3
|
import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';
|
|
2
|
-
import {parseWMSCapabilities} from './lib/parse-wms
|
|
4
|
+
import {parseWMSCapabilities} from './lib/parse-wms';
|
|
3
5
|
|
|
4
6
|
// __VERSION__ is injected by babel-plugin-version-inline
|
|
5
7
|
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
6
8
|
const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
|
|
7
9
|
|
|
8
|
-
export type
|
|
10
|
+
export type WMSLoaderOptions = LoaderOptions & {
|
|
9
11
|
wms?: {};
|
|
10
12
|
};
|
|
11
13
|
|
|
12
14
|
/**
|
|
13
|
-
*
|
|
15
|
+
* Loader for the response to the WMS GetCapability request
|
|
14
16
|
*/
|
|
15
17
|
export const WMSCapabilitiesLoader = {
|
|
16
18
|
name: 'WMS Capabilities',
|
|
17
|
-
id: 'wms',
|
|
19
|
+
id: 'wms-capabilities',
|
|
20
|
+
|
|
18
21
|
module: 'wms',
|
|
19
22
|
version: VERSION,
|
|
20
23
|
worker: false,
|
|
@@ -22,12 +25,11 @@ export const WMSCapabilitiesLoader = {
|
|
|
22
25
|
mimeTypes: ['application/vnd.ogc.wms_xml', 'application/xml', 'text/xml'],
|
|
23
26
|
testText: testXMLFile,
|
|
24
27
|
options: {
|
|
25
|
-
|
|
28
|
+
wms: {}
|
|
26
29
|
},
|
|
27
|
-
parse: async (arrayBuffer: ArrayBuffer, options?:
|
|
30
|
+
parse: async (arrayBuffer: ArrayBuffer, options?: WMSLoaderOptions) =>
|
|
28
31
|
parseWMSCapabilities(new TextDecoder().decode(arrayBuffer), options),
|
|
29
|
-
parseTextSync: (text: string, options?:
|
|
30
|
-
parseWMSCapabilities(text, options)
|
|
32
|
+
parseTextSync: (text: string, options?: WMSLoaderOptions) => parseWMSCapabilities(text, options)
|
|
31
33
|
};
|
|
32
34
|
|
|
33
35
|
function testXMLFile(text: string): boolean {
|
|
@@ -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;
|
package/src/wms-types.ts
CHANGED
|
@@ -1,35 +1,85 @@
|
|
|
1
1
|
// loaders.gl, MIT licenses
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
/** All capabilities of a WMS service - response to a WMS `GetCapabilities` data structure extracted from XML */
|
|
4
|
+
export type WMSCapabilities = {
|
|
5
|
+
name: string;
|
|
6
|
+
title?: string;
|
|
7
|
+
abstract?: string;
|
|
8
|
+
keywords: string[];
|
|
9
|
+
layer: {
|
|
10
|
+
name: string;
|
|
11
|
+
title?: string;
|
|
12
|
+
srs?: string[];
|
|
13
|
+
boundingBox?: [number, number, number, number];
|
|
14
|
+
layers: WMSLayer[];
|
|
15
|
+
};
|
|
16
|
+
requests: Record<string, WMSRequest>;
|
|
17
|
+
raw: Record<string, unknown>;
|
|
7
18
|
};
|
|
8
19
|
|
|
9
|
-
export type
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
20
|
+
export type WMSLayer = {
|
|
21
|
+
name: string;
|
|
22
|
+
title?: string;
|
|
23
|
+
srs?: string[];
|
|
24
|
+
boundingBox?: [number, number, number, number];
|
|
25
|
+
layers: WMSLayer[];
|
|
13
26
|
};
|
|
14
27
|
|
|
15
|
-
export type
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
28
|
+
export type WMSRequest = {
|
|
29
|
+
name: string;
|
|
30
|
+
mimeTypes: string[];
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
// GetFeatureInfo
|
|
34
|
+
|
|
35
|
+
/** WMS Feature info - response to a WMS `GetFeatureInfo` request */
|
|
36
|
+
export type WMSFeatureInfo = {
|
|
37
|
+
features: WMSFeature[];
|
|
19
38
|
};
|
|
20
39
|
|
|
21
|
-
export type
|
|
22
|
-
|
|
23
|
-
format: string[];
|
|
24
|
-
dcpType: unknown;
|
|
40
|
+
export type WMSFeature = {
|
|
41
|
+
attributes: Record<string, number | string>;
|
|
25
42
|
};
|
|
26
43
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
44
|
+
// DescribeLayer
|
|
45
|
+
|
|
46
|
+
/** Layer description - response to a WMS `DescribeLayer` request */
|
|
47
|
+
export type WMSLayerDescription = {
|
|
48
|
+
// layers: {}[];
|
|
31
49
|
};
|
|
32
50
|
|
|
51
|
+
// // WIP
|
|
52
|
+
|
|
53
|
+
// export type GetCapabilities = {
|
|
54
|
+
// request: 'GetCapabilities';
|
|
55
|
+
// format: string[];
|
|
56
|
+
// dcpType: unknown;
|
|
57
|
+
// };
|
|
58
|
+
|
|
59
|
+
// export type GetMap = {
|
|
60
|
+
// request: 'GetMap';
|
|
61
|
+
// format: string[];
|
|
62
|
+
// dcpType: unknown;
|
|
63
|
+
// };
|
|
64
|
+
|
|
65
|
+
// export type GetFeatureInfo = {
|
|
66
|
+
// request: 'GetFeatureInfo';
|
|
67
|
+
// format: string[];
|
|
68
|
+
// dcpType: unknown;
|
|
69
|
+
// };
|
|
70
|
+
|
|
71
|
+
// export type GetLegendGraphic = {
|
|
72
|
+
// request: 'GetLegendGraphic';
|
|
73
|
+
// format: string[];
|
|
74
|
+
// dcpType: unknown;
|
|
75
|
+
// };
|
|
76
|
+
|
|
77
|
+
// export type GetStyles = {
|
|
78
|
+
// request: 'GetStyles';
|
|
79
|
+
// format: string[];
|
|
80
|
+
// dcpType: unknown;
|
|
81
|
+
// };
|
|
82
|
+
|
|
33
83
|
/**
|
|
34
84
|
* <EX_GeographicBoundingBox>
|
|
35
85
|
* <westBoundLongitude>-180</westBoundLongitude>
|
|
@@ -75,7 +125,7 @@ export type Style = {
|
|
|
75
125
|
};
|
|
76
126
|
};
|
|
77
127
|
|
|
78
|
-
export type Capability = GetCapabilities | GetMap;
|
|
128
|
+
// export type Capability = GetCapabilities | GetMap;
|
|
79
129
|
|
|
80
130
|
export type WMSService = {
|
|
81
131
|
rawData: unknown;
|
|
@@ -86,9 +136,9 @@ export type WMSService = {
|
|
|
86
136
|
maxWidth?: number;
|
|
87
137
|
maxHeight?: number;
|
|
88
138
|
capabilities: {
|
|
89
|
-
getCapabilities: GetCapabilities;
|
|
90
|
-
getMap: GetMap;
|
|
91
|
-
getFeatureInfo?: GetFeatureInfo;
|
|
139
|
+
// getCapabilities: GetCapabilities;
|
|
140
|
+
// getMap: GetMap;
|
|
141
|
+
// getFeatureInfo?: GetFeatureInfo;
|
|
92
142
|
};
|
|
93
143
|
|
|
94
144
|
untypedData: unknown; // The raw, untyped JSON converted from XML
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.parseWMSCapabilities = parseWMSCapabilities;
|
|
7
|
-
var _xml = require("@loaders.gl/xml");
|
|
8
|
-
|
|
9
|
-
function parseWMSCapabilities(text, options) {
|
|
10
|
-
var parsedXML = _xml.XMLLoader.parseTextSync(text, options);
|
|
11
|
-
if (parsedXML.WMT_MS_Capabilities) {
|
|
12
|
-
return parsedXML.WMT_MS_Capabilities;
|
|
13
|
-
}
|
|
14
|
-
if (parsedXML.WMS_Capabilities) {
|
|
15
|
-
return parsedXML.WMS_Capabilities;
|
|
16
|
-
}
|
|
17
|
-
return parsedXML;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=parse-wms-capabilities.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse-wms-capabilities.js","names":["parseWMSCapabilities","text","options","parsedXML","XMLLoader","parseTextSync","WMT_MS_Capabilities","WMS_Capabilities"],"sources":["../../../src/lib/parse-wms-capabilities.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\n\nexport function parseWMSCapabilities(text, options) {\n const parsedXML = XMLLoader.parseTextSync(text, options);\n if (parsedXML.WMT_MS_Capabilities) {\n return parsedXML.WMT_MS_Capabilities;\n }\n if (parsedXML.WMS_Capabilities) {\n return parsedXML.WMS_Capabilities;\n }\n return parsedXML;\n}\n"],"mappings":";;;;;;AAEA;;AAEO,SAASA,oBAAoB,CAACC,IAAI,EAAEC,OAAO,EAAE;EAClD,IAAMC,SAAS,GAAGC,cAAS,CAACC,aAAa,CAACJ,IAAI,EAAEC,OAAO,CAAC;EACxD,IAAIC,SAAS,CAACG,mBAAmB,EAAE;IACjC,OAAOH,SAAS,CAACG,mBAAmB;EACtC;EACA,IAAIH,SAAS,CAACI,gBAAgB,EAAE;IAC9B,OAAOJ,SAAS,CAACI,gBAAgB;EACnC;EACA,OAAOJ,SAAS;AAClB"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { XMLLoader } from '@loaders.gl/xml';
|
|
4
|
-
export function parseWMSCapabilities(text, options) {
|
|
5
|
-
const parsedXML = XMLLoader.parseTextSync(text, options);
|
|
6
|
-
if (parsedXML.WMT_MS_Capabilities) {
|
|
7
|
-
return parsedXML.WMT_MS_Capabilities;
|
|
8
|
-
}
|
|
9
|
-
if (parsedXML.WMS_Capabilities) {
|
|
10
|
-
return parsedXML.WMS_Capabilities;
|
|
11
|
-
}
|
|
12
|
-
return parsedXML;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=parse-wms-capabilities.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse-wms-capabilities.js","names":["XMLLoader","parseWMSCapabilities","text","options","parsedXML","parseTextSync","WMT_MS_Capabilities","WMS_Capabilities"],"sources":["../../../src/lib/parse-wms-capabilities.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\n\nexport function parseWMSCapabilities(text, options) {\n const parsedXML = XMLLoader.parseTextSync(text, options);\n if (parsedXML.WMT_MS_Capabilities) {\n return parsedXML.WMT_MS_Capabilities;\n }\n if (parsedXML.WMS_Capabilities) {\n return parsedXML.WMS_Capabilities;\n }\n return parsedXML;\n}\n"],"mappings":";;AAEA,SAAQA,SAAS,QAAO,iBAAiB;AAEzC,OAAO,SAASC,oBAAoB,CAACC,IAAI,EAAEC,OAAO,EAAE;EAClD,MAAMC,SAAS,GAAGJ,SAAS,CAACK,aAAa,CAACH,IAAI,EAAEC,OAAO,CAAC;EACxD,IAAIC,SAAS,CAACE,mBAAmB,EAAE;IACjC,OAAOF,SAAS,CAACE,mBAAmB;EACtC;EACA,IAAIF,SAAS,CAACG,gBAAgB,EAAE;IAC9B,OAAOH,SAAS,CAACG,gBAAgB;EACnC;EACA,OAAOH,SAAS;AAClB"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
// loaders.gl, MIT license
|
|
2
|
-
|
|
3
|
-
import {XMLLoader} from '@loaders.gl/xml';
|
|
4
|
-
|
|
5
|
-
export function parseWMSCapabilities(text, options) {
|
|
6
|
-
const parsedXML = XMLLoader.parseTextSync(text, options);
|
|
7
|
-
if (parsedXML.WMT_MS_Capabilities) {
|
|
8
|
-
return parsedXML.WMT_MS_Capabilities;
|
|
9
|
-
}
|
|
10
|
-
if (parsedXML.WMS_Capabilities) {
|
|
11
|
-
return parsedXML.WMS_Capabilities;
|
|
12
|
-
}
|
|
13
|
-
return parsedXML;
|
|
14
|
-
}
|