@loaders.gl/wms 3.4.0-alpha.2 → 3.4.0-alpha.4
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 +412 -176
- package/dist/es5/csw-capabilities-loader.js +7 -11
- package/dist/es5/csw-capabilities-loader.js.map +1 -1
- package/dist/es5/csw-domain-loader.js +7 -10
- package/dist/es5/csw-domain-loader.js.map +1 -1
- package/dist/es5/csw-records-loader.js +7 -10
- package/dist/es5/csw-records-loader.js.map +1 -1
- package/dist/es5/gml-loader.js +7 -10
- package/dist/es5/gml-loader.js.map +1 -1
- package/dist/es5/index.js +0 -7
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lerc-loader.js +17 -22
- package/dist/es5/lerc-loader.js.map +1 -1
- package/dist/es5/lib/create-image-source.js +1 -2
- package/dist/es5/lib/create-image-source.js.map +1 -1
- package/dist/es5/lib/parsers/csw/parse-csw-capabilities.js.map +1 -1
- package/dist/es5/lib/parsers/csw/parse-csw-domain.js +1 -1
- package/dist/es5/lib/parsers/csw/parse-csw-domain.js.map +1 -1
- package/dist/es5/lib/parsers/csw/parse-csw-records.js +1 -2
- package/dist/es5/lib/parsers/csw/parse-csw-records.js.map +1 -1
- package/dist/es5/lib/parsers/csw/parse-exception-report.js +0 -2
- package/dist/es5/lib/parsers/csw/parse-exception-report.js.map +1 -1
- package/dist/es5/lib/parsers/gml/deep-strict-equal.js +0 -8
- package/dist/es5/lib/parsers/gml/deep-strict-equal.js.map +1 -1
- package/dist/es5/lib/parsers/gml/parse-gml.js +1 -13
- package/dist/es5/lib/parsers/gml/parse-gml.js.map +1 -1
- package/dist/es5/lib/parsers/wms/parse-wms-capabilities.js +197 -54
- package/dist/es5/lib/parsers/wms/parse-wms-capabilities.js.map +1 -1
- package/dist/es5/lib/parsers/wms/parse-wms-error.js +0 -1
- package/dist/es5/lib/parsers/wms/parse-wms-error.js.map +1 -1
- package/dist/es5/lib/parsers/wms/parse-wms-features.js +0 -1
- package/dist/es5/lib/parsers/wms/parse-wms-features.js.map +1 -1
- package/dist/es5/lib/parsers/wms/parse-wms-layer-description.js +0 -1
- package/dist/es5/lib/parsers/wms/parse-wms-layer-description.js.map +1 -1
- package/dist/es5/lib/parsers/xml/parse-xml-helpers.js +67 -0
- package/dist/es5/lib/parsers/xml/parse-xml-helpers.js.map +1 -0
- package/dist/es5/lib/services/arcgis/arcgis-image-service.js +36 -60
- package/dist/es5/lib/services/arcgis/arcgis-image-service.js.map +1 -1
- package/dist/es5/lib/services/arcgis/arcgis-server.js +50 -54
- package/dist/es5/lib/services/arcgis/arcgis-server.js.map +1 -1
- package/dist/es5/lib/services/generic/image-service.js +28 -42
- package/dist/es5/lib/services/generic/image-service.js.map +1 -1
- package/dist/es5/lib/services/ogc/csw-service.js +161 -188
- package/dist/es5/lib/services/ogc/csw-service.js.map +1 -1
- package/dist/es5/lib/services/ogc/wms-service.js +325 -245
- package/dist/es5/lib/services/ogc/wms-service.js.map +1 -1
- package/dist/es5/lib/sources/data-source.js +36 -13
- package/dist/es5/lib/sources/data-source.js.map +1 -1
- package/dist/es5/lib/sources/image-source.js.map +1 -1
- package/dist/es5/lib/sources/tile-source.js.map +1 -1
- package/dist/es5/lib/sources/utils/utils.js +0 -4
- package/dist/es5/lib/sources/utils/utils.js.map +1 -1
- package/dist/es5/wip/arcgis-feature-service.js +2 -7
- package/dist/es5/wip/arcgis-feature-service.js.map +1 -1
- package/dist/es5/wip/data-source.js +0 -2
- package/dist/es5/wip/lib/wcs/parse-wcs-capabilities.js.map +1 -1
- package/dist/es5/wip/lib/wfs/parse-wfs-capabilities.js.map +1 -1
- package/dist/es5/wip/lib/wmts/parse-wmts-capabilities.js.map +1 -1
- package/dist/es5/wip/wcs-capabilities-loader.js +7 -10
- package/dist/es5/wip/wcs-capabilities-loader.js.map +1 -1
- package/dist/es5/wip/wfs-capabilities-loader.js +7 -10
- package/dist/es5/wip/wfs-capabilities-loader.js.map +1 -1
- package/dist/es5/wip/wms-feature-info-loader.js +6 -8
- package/dist/es5/wip/wms-feature-info-loader.js.map +1 -1
- package/dist/es5/wip/wms-layer-description-loader.js +6 -8
- package/dist/es5/wip/wms-layer-description-loader.js.map +1 -1
- package/dist/es5/wip/wmts-capabilities-loader.js +7 -16
- package/dist/es5/wip/wmts-capabilities-loader.js.map +1 -1
- package/dist/es5/wms-capabilities-loader.js +8 -12
- package/dist/es5/wms-capabilities-loader.js.map +1 -1
- package/dist/es5/wms-error-loader.js +7 -9
- package/dist/es5/wms-error-loader.js.map +1 -1
- package/dist/esm/bundle.js +0 -2
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/csw-capabilities-loader.js +1 -5
- package/dist/esm/csw-capabilities-loader.js.map +1 -1
- package/dist/esm/csw-domain-loader.js +1 -4
- package/dist/esm/csw-domain-loader.js.map +1 -1
- package/dist/esm/csw-records-loader.js +1 -4
- package/dist/esm/csw-records-loader.js.map +1 -1
- package/dist/esm/gml-loader.js +1 -4
- package/dist/esm/gml-loader.js.map +1 -1
- package/dist/esm/index.js +0 -11
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lerc-loader.js +1 -4
- package/dist/esm/lerc-loader.js.map +1 -1
- package/dist/esm/lib/create-image-source.js +0 -3
- package/dist/esm/lib/create-image-source.js.map +1 -1
- package/dist/esm/lib/parsers/csw/parse-csw-capabilities.js +0 -3
- package/dist/esm/lib/parsers/csw/parse-csw-capabilities.js.map +1 -1
- package/dist/esm/lib/parsers/csw/parse-csw-domain.js +0 -3
- package/dist/esm/lib/parsers/csw/parse-csw-domain.js.map +1 -1
- package/dist/esm/lib/parsers/csw/parse-csw-records.js +0 -3
- package/dist/esm/lib/parsers/csw/parse-csw-records.js.map +1 -1
- package/dist/esm/lib/parsers/csw/parse-exception-report.js +0 -3
- package/dist/esm/lib/parsers/csw/parse-exception-report.js.map +1 -1
- package/dist/esm/lib/parsers/gml/deep-strict-equal.js +0 -9
- package/dist/esm/lib/parsers/gml/deep-strict-equal.js.map +1 -1
- package/dist/esm/lib/parsers/gml/parse-gml.js +0 -14
- package/dist/esm/lib/parsers/gml/parse-gml.js.map +1 -1
- package/dist/esm/lib/parsers/wms/parse-wms-capabilities.js +151 -42
- package/dist/esm/lib/parsers/wms/parse-wms-capabilities.js.map +1 -1
- package/dist/esm/lib/parsers/wms/parse-wms-error.js +0 -3
- package/dist/esm/lib/parsers/wms/parse-wms-error.js.map +1 -1
- package/dist/esm/lib/parsers/wms/parse-wms-features.js +0 -3
- package/dist/esm/lib/parsers/wms/parse-wms-features.js.map +1 -1
- package/dist/esm/lib/parsers/wms/parse-wms-layer-description.js +0 -3
- package/dist/esm/lib/parsers/wms/parse-wms-layer-description.js.map +1 -1
- package/dist/esm/lib/parsers/xml/parse-xml-helpers.js +53 -0
- package/dist/esm/lib/parsers/xml/parse-xml-helpers.js.map +1 -0
- package/dist/esm/lib/services/arcgis/arcgis-image-service.js +0 -11
- package/dist/esm/lib/services/arcgis/arcgis-image-service.js.map +1 -1
- package/dist/esm/lib/services/arcgis/arcgis-server.js +0 -2
- package/dist/esm/lib/services/arcgis/arcgis-server.js.map +1 -1
- package/dist/esm/lib/services/generic/image-service.js +0 -7
- package/dist/esm/lib/services/generic/image-service.js.map +1 -1
- package/dist/esm/lib/services/ogc/csw-service.js +0 -13
- package/dist/esm/lib/services/ogc/csw-service.js.map +1 -1
- package/dist/esm/lib/services/ogc/wms-service.js +135 -86
- package/dist/esm/lib/services/ogc/wms-service.js.map +1 -1
- package/dist/esm/lib/sources/data-source.js +20 -6
- package/dist/esm/lib/sources/data-source.js.map +1 -1
- package/dist/esm/lib/sources/image-source.js +0 -3
- package/dist/esm/lib/sources/image-source.js.map +1 -1
- package/dist/esm/lib/sources/tile-source.js +0 -3
- package/dist/esm/lib/sources/tile-source.js.map +1 -1
- package/dist/esm/lib/sources/utils/utils.js +0 -5
- package/dist/esm/lib/sources/utils/utils.js.map +1 -1
- package/dist/esm/wip/arcgis-feature-service.js +0 -3
- package/dist/esm/wip/arcgis-feature-service.js.map +1 -1
- package/dist/esm/wip/lib/wcs/parse-wcs-capabilities.js +0 -3
- package/dist/esm/wip/lib/wcs/parse-wcs-capabilities.js.map +1 -1
- package/dist/esm/wip/lib/wfs/parse-wfs-capabilities.js +0 -3
- package/dist/esm/wip/lib/wfs/parse-wfs-capabilities.js.map +1 -1
- package/dist/esm/wip/lib/wmts/parse-wmts-capabilities.js +0 -3
- package/dist/esm/wip/lib/wmts/parse-wmts-capabilities.js.map +1 -1
- package/dist/esm/wip/wcs-capabilities-loader.js +1 -4
- package/dist/esm/wip/wcs-capabilities-loader.js.map +1 -1
- package/dist/esm/wip/wfs-capabilities-loader.js +1 -4
- package/dist/esm/wip/wfs-capabilities-loader.js.map +1 -1
- package/dist/esm/wip/wms-feature-info-loader.js +0 -2
- package/dist/esm/wip/wms-feature-info-loader.js.map +1 -1
- package/dist/esm/wip/wms-layer-description-loader.js +0 -2
- package/dist/esm/wip/wms-layer-description-loader.js.map +1 -1
- package/dist/esm/wip/wmts-capabilities-loader.js +1 -6
- package/dist/esm/wip/wmts-capabilities-loader.js.map +1 -1
- package/dist/esm/wms-capabilities-loader.js +3 -7
- package/dist/esm/wms-capabilities-loader.js.map +1 -1
- package/dist/esm/wms-error-loader.js +1 -4
- package/dist/esm/wms-error-loader.js.map +1 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -5
- package/dist/lib/create-image-source.d.ts +1 -1
- package/dist/lib/create-image-source.d.ts.map +1 -1
- package/dist/lib/parsers/wms/parse-wms-capabilities.d.ts +78 -62
- package/dist/lib/parsers/wms/parse-wms-capabilities.d.ts.map +1 -1
- package/dist/lib/parsers/wms/parse-wms-capabilities.js +166 -1935
- package/dist/lib/parsers/xml/parse-xml-helpers.d.ts +11 -0
- package/dist/lib/parsers/xml/parse-xml-helpers.d.ts.map +1 -0
- package/dist/lib/parsers/xml/parse-xml-helpers.js +68 -0
- package/dist/lib/services/arcgis/arcgis-image-service.d.ts +1 -2
- package/dist/lib/services/arcgis/arcgis-image-service.d.ts.map +1 -1
- package/dist/lib/services/arcgis/arcgis-image-service.js +1 -2
- package/dist/lib/services/generic/image-service.d.ts +2 -3
- package/dist/lib/services/generic/image-service.d.ts.map +1 -1
- package/dist/lib/services/generic/image-service.js +1 -2
- package/dist/lib/services/ogc/csw-service.d.ts +2 -3
- package/dist/lib/services/ogc/csw-service.d.ts.map +1 -1
- package/dist/lib/services/ogc/csw-service.js +1 -2
- package/dist/lib/services/ogc/wms-service.d.ts +128 -72
- package/dist/lib/services/ogc/wms-service.d.ts.map +1 -1
- package/dist/lib/services/ogc/wms-service.js +154 -73
- package/dist/lib/sources/data-source.d.ts +12 -2
- package/dist/lib/sources/data-source.d.ts.map +1 -1
- package/dist/lib/sources/data-source.js +22 -0
- package/dist/lib/sources/image-source.d.ts +9 -15
- package/dist/lib/sources/image-source.d.ts.map +1 -1
- package/dist/lib/sources/tile-source.d.ts +4 -2
- package/dist/lib/sources/tile-source.d.ts.map +1 -1
- package/dist/wip/wmts-capabilities-loader.d.ts +3 -4
- package/dist/wip/wmts-capabilities-loader.d.ts.map +1 -1
- package/dist/wip/wmts-capabilities-loader.js +1 -0
- package/dist/wms-capabilities-loader.d.ts +6 -1
- package/dist/wms-capabilities-loader.d.ts.map +1 -1
- package/dist/wms-capabilities-loader.js +2 -2
- package/package.json +6 -6
- package/src/index.ts +3 -4
- package/src/lib/create-image-source.ts +1 -1
- package/src/lib/parsers/wms/parse-wms-capabilities.ts +294 -2004
- package/src/lib/parsers/xml/parse-xml-helpers.ts +65 -0
- package/src/lib/services/arcgis/arcgis-image-service.ts +1 -4
- package/src/lib/services/generic/image-service.ts +2 -5
- package/src/lib/services/ogc/csw-service.ts +2 -4
- package/src/lib/services/ogc/wms-service.ts +290 -125
- package/src/lib/sources/data-source.ts +29 -2
- package/src/lib/sources/image-source.ts +9 -15
- package/src/lib/sources/tile-source.ts +4 -2
- package/src/wip/wmts-capabilities-loader.ts +2 -2
- package/src/wms-capabilities-loader.ts +9 -3
- package/dist/es5/lib/services/generic/tile-service.js +0 -2
- package/dist/es5/lib/services/generic/tile-service.js.map +0 -1
- package/dist/esm/lib/services/generic/tile-service.js +0 -2
- package/dist/esm/lib/services/generic/tile-service.js.map +0 -1
- package/dist/lib/services/generic/tile-service.d.ts +0 -1
- package/dist/lib/services/generic/tile-service.d.ts.map +0 -1
- package/dist/lib/services/generic/tile-service.js +0 -1
- package/src/lib/services/generic/tile-service.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arcgis-server.js","names":["getArcGISServices","url","fetchFile","fetch","includes","serverUrl","replace","loadServiceDirectory","path","serviceUrl","join","response","directory","json","services","extractServices","folders","promises","map","folder","folderServices","Promise","all","push","arcgisServices","service","name","type","toLocaleLowerCase"],"sources":["../../../../../src/lib/services/arcgis/arcgis-server.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nexport type Service = {name: string; type: string; url: string};\n\ntype FetchLike = typeof fetch;\n\n/**\n * (Recursively) load the service directory from an ArcGIS Server URL\n * @param url\n * @param fetchFile= Optional fetch function override\n * @returns\n */\nexport async function getArcGISServices(\n url: string,\n fetchFile: FetchLike = fetch\n): Promise<Service[] | null> {\n if (url.includes('rest/services')) {\n const serverUrl = url.replace(/rest\\/services.*$/i, 'rest/services');\n return loadServiceDirectory(serverUrl, fetchFile, []);\n }\n return null;\n}\n\nasync function loadServiceDirectory(\n serverUrl: string,\n fetch: FetchLike,\n path: string[]\n): Promise<Service[]> {\n const serviceUrl = `${serverUrl}/${path.join('/')}`;\n\n const response = await fetch(`${serviceUrl}?f=pjson`);\n const directory = await response.json();\n\n const services = extractServices(directory, serviceUrl);\n\n const folders = (directory.folders || []) as string[];\n const promises = folders.map((folder) =>\n loadServiceDirectory(`${serverUrl}`, fetch, [...path, folder])\n );\n\n for (const folderServices of await Promise.all(promises)) {\n services.push(...folderServices);\n }\n\n return services;\n}\n\nfunction extractServices(directory: unknown, url: string): Service[] {\n const arcgisServices = ((directory as any).services || []) as {name: string; type: string}[];\n const services: Service[] = [];\n for (const service of arcgisServices) {\n services.push({\n name: service.name,\n type: `arcgis-${service.type.toLocaleLowerCase().replace('server', '-server')}`,\n url: `${url}${service.name}/${service.type}`\n });\n }\n return services;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"arcgis-server.js","names":["getArcGISServices","url","fetchFile","arguments","length","undefined","fetch","includes","serverUrl","replace","loadServiceDirectory","path","serviceUrl","concat","join","response","directory","json","services","extractServices","folders","promises","map","folder","folderServices","Promise","all","push","arcgisServices","service","name","type","toLocaleLowerCase"],"sources":["../../../../../src/lib/services/arcgis/arcgis-server.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nexport type Service = {name: string; type: string; url: string};\n\ntype FetchLike = typeof fetch;\n\n/**\n * (Recursively) load the service directory from an ArcGIS Server URL\n * @param url\n * @param fetchFile= Optional fetch function override\n * @returns\n */\nexport async function getArcGISServices(\n url: string,\n fetchFile: FetchLike = fetch\n): Promise<Service[] | null> {\n if (url.includes('rest/services')) {\n const serverUrl = url.replace(/rest\\/services.*$/i, 'rest/services');\n return loadServiceDirectory(serverUrl, fetchFile, []);\n }\n return null;\n}\n\nasync function loadServiceDirectory(\n serverUrl: string,\n fetch: FetchLike,\n path: string[]\n): Promise<Service[]> {\n const serviceUrl = `${serverUrl}/${path.join('/')}`;\n\n const response = await fetch(`${serviceUrl}?f=pjson`);\n const directory = await response.json();\n\n const services = extractServices(directory, serviceUrl);\n\n const folders = (directory.folders || []) as string[];\n const promises = folders.map((folder) =>\n loadServiceDirectory(`${serverUrl}`, fetch, [...path, folder])\n );\n\n for (const folderServices of await Promise.all(promises)) {\n services.push(...folderServices);\n }\n\n return services;\n}\n\nfunction extractServices(directory: unknown, url: string): Service[] {\n const arcgisServices = ((directory as any).services || []) as {name: string; type: string}[];\n const services: Service[] = [];\n for (const service of arcgisServices) {\n services.push({\n name: service.name,\n type: `arcgis-${service.type.toLocaleLowerCase().replace('server', '-server')}`,\n url: `${url}${service.name}/${service.type}`\n });\n }\n return services;\n}\n"],"mappings":"AAYA,OAAO,eAAeA,iBAAiBA,CACrCC,GAAW,EAEgB;EAAA,IAD3BC,SAAoB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGG,KAAK;EAE5B,IAAIL,GAAG,CAACM,QAAQ,CAAC,eAAe,CAAC,EAAE;IACjC,MAAMC,SAAS,GAAGP,GAAG,CAACQ,OAAO,CAAC,oBAAoB,EAAE,eAAe,CAAC;IACpE,OAAOC,oBAAoB,CAACF,SAAS,EAAEN,SAAS,EAAE,EAAE,CAAC;EACvD;EACA,OAAO,IAAI;AACb;AAEA,eAAeQ,oBAAoBA,CACjCF,SAAiB,EACjBF,KAAgB,EAChBK,IAAc,EACM;EACpB,MAAMC,UAAU,MAAAC,MAAA,CAAML,SAAS,OAAAK,MAAA,CAAIF,IAAI,CAACG,IAAI,CAAC,GAAG,CAAC,CAAE;EAEnD,MAAMC,QAAQ,GAAG,MAAMT,KAAK,IAAAO,MAAA,CAAID,UAAU,aAAU,CAAC;EACrD,MAAMI,SAAS,GAAG,MAAMD,QAAQ,CAACE,IAAI,CAAC,CAAC;EAEvC,MAAMC,QAAQ,GAAGC,eAAe,CAACH,SAAS,EAAEJ,UAAU,CAAC;EAEvD,MAAMQ,OAAO,GAAIJ,SAAS,CAACI,OAAO,IAAI,EAAe;EACrD,MAAMC,QAAQ,GAAGD,OAAO,CAACE,GAAG,CAAEC,MAAM,IAClCb,oBAAoB,IAAAG,MAAA,CAAIL,SAAS,GAAIF,KAAK,EAAE,CAAC,GAAGK,IAAI,EAAEY,MAAM,CAAC,CAC/D,CAAC;EAED,KAAK,MAAMC,cAAc,IAAI,MAAMC,OAAO,CAACC,GAAG,CAACL,QAAQ,CAAC,EAAE;IACxDH,QAAQ,CAACS,IAAI,CAAC,GAAGH,cAAc,CAAC;EAClC;EAEA,OAAON,QAAQ;AACjB;AAEA,SAASC,eAAeA,CAACH,SAAkB,EAAEf,GAAW,EAAa;EACnE,MAAM2B,cAAc,GAAKZ,SAAS,CAASE,QAAQ,IAAI,EAAqC;EAC5F,MAAMA,QAAmB,GAAG,EAAE;EAC9B,KAAK,MAAMW,OAAO,IAAID,cAAc,EAAE;IACpCV,QAAQ,CAACS,IAAI,CAAC;MACZG,IAAI,EAAED,OAAO,CAACC,IAAI;MAClBC,IAAI,YAAAlB,MAAA,CAAYgB,OAAO,CAACE,IAAI,CAACC,iBAAiB,CAAC,CAAC,CAACvB,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAE;MAC/ER,GAAG,KAAAY,MAAA,CAAKZ,GAAG,EAAAY,MAAA,CAAGgB,OAAO,CAACC,IAAI,OAAAjB,MAAA,CAAIgB,OAAO,CAACE,IAAI;IAC5C,CAAC,CAAC;EACJ;EACA,OAAOb,QAAQ;AACjB"}
|
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
-
|
|
3
2
|
import { ImageLoader } from '@loaders.gl/images';
|
|
4
3
|
import { ImageSource } from '../../sources/image-source';
|
|
5
|
-
|
|
6
4
|
export class ImageService extends ImageSource {
|
|
7
5
|
constructor(props) {
|
|
8
6
|
super(props);
|
|
9
|
-
_defineProperty(this, "props", void 0);
|
|
10
|
-
this.props = props;
|
|
11
7
|
}
|
|
12
|
-
|
|
13
8
|
async getMetadata() {
|
|
14
9
|
throw new Error('ImageSource.getMetadata not implemented');
|
|
15
10
|
}
|
|
@@ -20,7 +15,6 @@ export class ImageService extends ImageSource {
|
|
|
20
15
|
const arrayBuffer = await response.arrayBuffer();
|
|
21
16
|
return await ImageLoader.parse(arrayBuffer);
|
|
22
17
|
}
|
|
23
|
-
|
|
24
18
|
getGranularParameters(parameters) {
|
|
25
19
|
const [east, north, west, south] = parameters.bbox;
|
|
26
20
|
return {
|
|
@@ -31,7 +25,6 @@ export class ImageService extends ImageSource {
|
|
|
31
25
|
west
|
|
32
26
|
};
|
|
33
27
|
}
|
|
34
|
-
|
|
35
28
|
getURLFromTemplate(parameters) {
|
|
36
29
|
let url = this.props.url;
|
|
37
30
|
for (const [key, value] of Object.entries(parameters)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-service.js","names":["ImageLoader","ImageSource","ImageService","constructor","props","getMetadata","Error","getImage","parameters","granularParameters","getGranularParameters","url","getURLFromTemplate","response","fetch","arrayBuffer","parse","east","north","west","south","bbox","key","value","Object","entries","replace","String","toLowerCase","includes"],"sources":["../../../../../src/lib/services/generic/image-service.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {ImageType} from '@loaders.gl/images';\nimport {ImageLoader} from '@loaders.gl/images';\n\nimport type {ImageSourceMetadata, GetImageParameters} from '../../sources/image-source';\nimport {ImageSource} from '../../sources/image-source';\n\n/** Template URL string should contain `${width}` etc which will be substituted. */\nexport type ImageServiceProps = {\n /** Base URL to the service */\n url: string;\n /** Any load options to the loaders.gl Loaders used by the WMSService methods */\n loadOptions?: LoaderOptions;\n};\n\n/**\n * Quickly connect to \"ad hoc\" image sources without subclassing ImageSource.\n * ImageSource allows template url strings to be used to ad hoc connect to arbitrary image data sources\n * Accepts a template url string and builds requests URLs\n */\nexport class ImageService extends ImageSource {\n static type: 'template' = 'template';\n static testURL = (url: string): boolean => url.toLowerCase().includes('{');\n\n
|
|
1
|
+
{"version":3,"file":"image-service.js","names":["ImageLoader","ImageSource","ImageService","constructor","props","getMetadata","Error","getImage","parameters","granularParameters","getGranularParameters","url","getURLFromTemplate","response","fetch","arrayBuffer","parse","east","north","west","south","bbox","key","value","Object","entries","replace","concat","String","_defineProperty","toLowerCase","includes"],"sources":["../../../../../src/lib/services/generic/image-service.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {ImageType} from '@loaders.gl/images';\nimport {ImageLoader} from '@loaders.gl/images';\n\nimport type {ImageSourceMetadata, GetImageParameters} from '../../sources/image-source';\nimport {ImageSource} from '../../sources/image-source';\n\n/** Template URL string should contain `${width}` etc which will be substituted. */\nexport type ImageServiceProps = {\n /** Base URL to the service */\n url: string;\n /** Any load options to the loaders.gl Loaders used by the WMSService methods */\n loadOptions?: LoaderOptions;\n};\n\n/**\n * Quickly connect to \"ad hoc\" image sources without subclassing ImageSource.\n * ImageSource allows template url strings to be used to ad hoc connect to arbitrary image data sources\n * Accepts a template url string and builds requests URLs\n */\nexport class ImageService<PropsT extends ImageServiceProps> extends ImageSource<PropsT> {\n static type: 'template' = 'template';\n static testURL = (url: string): boolean => url.toLowerCase().includes('{');\n\n constructor(props: PropsT) {\n super(props);\n }\n\n // IMAGE SOURCE API\n\n async getMetadata(): Promise<ImageSourceMetadata> {\n throw new Error('ImageSource.getMetadata not implemented');\n }\n\n async getImage(parameters: GetImageParameters): Promise<ImageType> {\n const granularParameters = this.getGranularParameters(parameters);\n const url = this.getURLFromTemplate(granularParameters);\n const response = await this.fetch(url);\n const arrayBuffer = await response.arrayBuffer();\n return await ImageLoader.parse(arrayBuffer);\n }\n\n // HELPERS\n\n /** Break up bounding box in east, north, south, west */\n protected getGranularParameters(parameters: GetImageParameters): Record<string, unknown> {\n const [east, north, west, south] = parameters.bbox;\n return {...parameters, east, north, south, west};\n }\n\n /** Supports both ${} and {} notations */\n protected getURLFromTemplate(parameters: Record<string, unknown>): string {\n let url = this.props.url;\n for (const [key, value] of Object.entries(parameters)) {\n // TODO - parameter could be repeated\n // const regex = new RegExp(`\\${${key}}`, 'g');\n url = url.replace(`\\${${key}}`, String(value));\n url = url.replace(`{${key}}`, String(value));\n }\n return url;\n }\n}\n"],"mappings":";AAIA,SAAQA,WAAW,QAAO,oBAAoB;AAG9C,SAAQC,WAAW,QAAO,4BAA4B;AAetD,OAAO,MAAMC,YAAY,SAA2CD,WAAW,CAAS;EAItFE,WAAWA,CAACC,KAAa,EAAE;IACzB,KAAK,CAACA,KAAK,CAAC;EACd;EAIA,MAAMC,WAAWA,CAAA,EAAiC;IAChD,MAAM,IAAIC,KAAK,CAAC,yCAAyC,CAAC;EAC5D;EAEA,MAAMC,QAAQA,CAACC,UAA8B,EAAsB;IACjE,MAAMC,kBAAkB,GAAG,IAAI,CAACC,qBAAqB,CAACF,UAAU,CAAC;IACjE,MAAMG,GAAG,GAAG,IAAI,CAACC,kBAAkB,CAACH,kBAAkB,CAAC;IACvD,MAAMI,QAAQ,GAAG,MAAM,IAAI,CAACC,KAAK,CAACH,GAAG,CAAC;IACtC,MAAMI,WAAW,GAAG,MAAMF,QAAQ,CAACE,WAAW,CAAC,CAAC;IAChD,OAAO,MAAMf,WAAW,CAACgB,KAAK,CAACD,WAAW,CAAC;EAC7C;EAKUL,qBAAqBA,CAACF,UAA8B,EAA2B;IACvF,MAAM,CAACS,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,KAAK,CAAC,GAAGZ,UAAU,CAACa,IAAI;IAClD,OAAO;MAAC,GAAGb,UAAU;MAAES,IAAI;MAAEC,KAAK;MAAEE,KAAK;MAAED;IAAI,CAAC;EAClD;EAGUP,kBAAkBA,CAACJ,UAAmC,EAAU;IACxE,IAAIG,GAAG,GAAG,IAAI,CAACP,KAAK,CAACO,GAAG;IACxB,KAAK,MAAM,CAACW,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACjB,UAAU,CAAC,EAAE;MAGrDG,GAAG,GAAGA,GAAG,CAACe,OAAO,MAAAC,MAAA,CAAOL,GAAG,QAAKM,MAAM,CAACL,KAAK,CAAC,CAAC;MAC9CZ,GAAG,GAAGA,GAAG,CAACe,OAAO,KAAAC,MAAA,CAAKL,GAAG,QAAKM,MAAM,CAACL,KAAK,CAAC,CAAC;IAC9C;IACA,OAAOZ,GAAG;EACZ;AACF;AAACkB,eAAA,CAzCY3B,YAAY,UACG,UAAU;AAAA2B,eAAA,CADzB3B,YAAY,aAELS,GAAW,IAAcA,GAAG,CAACmB,WAAW,CAAC,CAAC,CAACC,QAAQ,CAAC,GAAG,CAAC"}
|
|
@@ -1,18 +1,14 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
-
|
|
3
2
|
import { DataSource } from '../../sources/data-source';
|
|
4
3
|
import { CSWCapabilitiesLoader } from '../../../csw-capabilities-loader';
|
|
5
4
|
import { CSWRecordsLoader } from '../../../csw-records-loader';
|
|
6
5
|
import { CSWDomainLoader } from '../../../csw-domain-loader';
|
|
7
6
|
import { WMSErrorLoader as CSWErrorLoader } from '../../../wms-error-loader';
|
|
8
7
|
export class CSWService extends DataSource {
|
|
9
|
-
|
|
10
8
|
constructor(props) {
|
|
11
9
|
super(props);
|
|
12
|
-
_defineProperty(this, "props", void 0);
|
|
13
10
|
_defineProperty(this, "capabilities", null);
|
|
14
11
|
_defineProperty(this, "loaders", [CSWErrorLoader, CSWCapabilitiesLoader]);
|
|
15
|
-
this.props = props;
|
|
16
12
|
}
|
|
17
13
|
async getMetadata() {
|
|
18
14
|
const capabilities = await this.getCapabilities();
|
|
@@ -69,7 +65,6 @@ export class CSWService extends DataSource {
|
|
|
69
65
|
params: parts[1] || ''
|
|
70
66
|
};
|
|
71
67
|
}
|
|
72
|
-
|
|
73
68
|
async getCapabilities(wmsParameters, vendorParameters) {
|
|
74
69
|
const url = this.getCapabilitiesURL(wmsParameters, vendorParameters);
|
|
75
70
|
const response = await this.fetch(url);
|
|
@@ -78,7 +73,6 @@ export class CSWService extends DataSource {
|
|
|
78
73
|
const capabilities = await CSWCapabilitiesLoader.parse(arrayBuffer, this.props.loadOptions);
|
|
79
74
|
return capabilities;
|
|
80
75
|
}
|
|
81
|
-
|
|
82
76
|
async getRecords(wmsParameters, vendorParameters) {
|
|
83
77
|
const url = this.getRecordsURL(wmsParameters, vendorParameters);
|
|
84
78
|
const response = await this.fetch(url);
|
|
@@ -86,7 +80,6 @@ export class CSWService extends DataSource {
|
|
|
86
80
|
this._checkResponse(response, arrayBuffer);
|
|
87
81
|
return await CSWRecordsLoader.parse(arrayBuffer, this.props.loadOptions);
|
|
88
82
|
}
|
|
89
|
-
|
|
90
83
|
async getDomain(wmsParameters, vendorParameters) {
|
|
91
84
|
const url = this.getDomainURL(wmsParameters, vendorParameters);
|
|
92
85
|
const response = await this.fetch(url);
|
|
@@ -94,7 +87,6 @@ export class CSWService extends DataSource {
|
|
|
94
87
|
this._checkResponse(response, arrayBuffer);
|
|
95
88
|
return await CSWDomainLoader.parse(arrayBuffer, this.props.loadOptions);
|
|
96
89
|
}
|
|
97
|
-
|
|
98
90
|
getCapabilitiesURL(wmsParameters, vendorParameters) {
|
|
99
91
|
const options = {
|
|
100
92
|
version: '3.0.0',
|
|
@@ -105,7 +97,6 @@ export class CSWService extends DataSource {
|
|
|
105
97
|
};
|
|
106
98
|
return this._getCSWUrl(options, vendorParameters);
|
|
107
99
|
}
|
|
108
|
-
|
|
109
100
|
getRecordsURL(wmsParameters, vendorParameters) {
|
|
110
101
|
const options = {
|
|
111
102
|
version: '3.0.0',
|
|
@@ -117,7 +108,6 @@ export class CSWService extends DataSource {
|
|
|
117
108
|
};
|
|
118
109
|
return this._getCSWUrl(options, vendorParameters);
|
|
119
110
|
}
|
|
120
|
-
|
|
121
111
|
getDomainURL(wmsParameters, vendorParameters) {
|
|
122
112
|
const options = {
|
|
123
113
|
version: '3.0.0',
|
|
@@ -128,7 +118,6 @@ export class CSWService extends DataSource {
|
|
|
128
118
|
};
|
|
129
119
|
return this._getCSWUrl(options, vendorParameters);
|
|
130
120
|
}
|
|
131
|
-
|
|
132
121
|
_getCSWUrl(options, vendorParameters) {
|
|
133
122
|
let url = this.props.url;
|
|
134
123
|
let first = true;
|
|
@@ -143,7 +132,6 @@ export class CSWService extends DataSource {
|
|
|
143
132
|
}
|
|
144
133
|
return encodeURI(url);
|
|
145
134
|
}
|
|
146
|
-
|
|
147
135
|
_checkResponse(response, arrayBuffer) {
|
|
148
136
|
const contentType = response.headers['content-type'];
|
|
149
137
|
if (!response.ok || CSWErrorLoader.mimeTypes.includes(contentType)) {
|
|
@@ -151,7 +139,6 @@ export class CSWService extends DataSource {
|
|
|
151
139
|
throw new Error(error);
|
|
152
140
|
}
|
|
153
141
|
}
|
|
154
|
-
|
|
155
142
|
_parseError(arrayBuffer) {
|
|
156
143
|
const error = CSWErrorLoader.parseSync(arrayBuffer, this.props.loadOptions);
|
|
157
144
|
return new Error(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csw-service.js","names":["DataSource","CSWCapabilitiesLoader","CSWRecordsLoader","CSWDomainLoader","WMSErrorLoader","CSWErrorLoader","CSWService","constructor","props","getMetadata","capabilities","getCapabilities","normalizeMetadata","getServiceDirectory","options","services","unknownServices","records","getRecords","record","reference","references","url","value","scheme","push","name","title","type","_parseOGCUrl","includeUnknown","concat","parts","split","params","wmsParameters","vendorParameters","getCapabilitiesURL","response","fetch","arrayBuffer","_checkResponse","parse","loadOptions","getRecordsURL","getDomain","getDomainURL","version","service","request","_getCSWUrl","typenames","first","key","Object","entries","Array","isArray","toUpperCase","join","String","encodeURI","contentType","headers","ok","mimeTypes","includes","error","parseSync","Error","_parseError","toLowerCase"],"sources":["../../../../../src/lib/services/ogc/csw-service.ts"],"sourcesContent":["// loaders.gl, MIT license\n\n/* eslint-disable camelcase */\n\nimport type {DataSourceProps} from '../../sources/data-source';\nimport {DataSource} from '../../sources/data-source';\n\nimport type {CSWCapabilities} from '../../../csw-capabilities-loader';\nimport {CSWCapabilitiesLoader} from '../../../csw-capabilities-loader';\n\nimport type {CSWRecords} from '../../../csw-records-loader';\nimport {CSWRecordsLoader} from '../../../csw-records-loader';\n\nimport type {CSWDomain} from '../../../csw-domain-loader';\nimport {CSWDomainLoader} from '../../../csw-domain-loader';\n\nimport {WMSErrorLoader as CSWErrorLoader} from '../../../wms-error-loader';\n\ntype CSWCommonParameters = {\n /** In case the endpoint supports multiple services */\n service?: 'CSW';\n /** In case the endpoint supports multiple CSW versions */\n version?: '1.1.1' | '2.0.0' | '2.0.1' | '3.0.0' | '3.0.0';\n};\n\nexport type CSWGetCapabilitiesParameters = CSWCommonParameters & {\n /** Request type */\n request?: 'GetCapabilities';\n};\n\nexport type CSWGetRecordsParameters = CSWCommonParameters & {\n /** Request type */\n request?: 'GetRecords';\n /** type of records */\n typenames: 'csw:Record';\n};\n\nexport type CSWGetDomainParameters = CSWCommonParameters & {\n /** Request type */\n request?: 'GetDomain';\n // TBA\n};\n\nexport type Service = {name: string; type: string; url: string; params?: string; scheme?: string};\n\nexport type CSWServiceProps = DataSourceProps & {\n url: string;\n};\n\n/**\n * The CSWService class provides\n * - provides type safe methods to form URLs to a CSW service\n * - provides type safe methods to query and parse results (and errors) from a CSW service\n * - implements the ImageService interface\n * @note Only the URL parameter conversion is supported. XML posts are not supported.\n */\nexport class CSWService extends DataSource {\n static type: 'csw' = 'csw';\n static testURL = (url: string): boolean => url.toLowerCase().includes('csw');\n\n props: CSWServiceProps;\n capabilities: CSWCapabilities | null = null;\n\n /** A list of loaders used by the CSWService methods */\n readonly loaders = [CSWErrorLoader, CSWCapabilitiesLoader];\n\n /** Create a CSWService */\n constructor(props: CSWServiceProps) {\n super(props);\n this.props = props;\n }\n\n async getMetadata(): Promise<CSWCapabilities> {\n const capabilities = await this.getCapabilities();\n return this.normalizeMetadata(capabilities);\n }\n\n normalizeMetadata(capabilities: CSWCapabilities): CSWCapabilities {\n return capabilities;\n }\n\n async getServiceDirectory(options: {includeUnknown?: boolean}): Promise<Service[]> {\n const services: Service[] = [];\n const unknownServices: Service[] = [];\n\n const records = await this.getRecords();\n for (const record of records.records) {\n for (const reference of record.references) {\n const url = reference.value;\n switch (reference.scheme) {\n case 'OGC:WMS':\n services.push({name: record.title, type: 'ogc-wms-service', ...this._parseOGCUrl(url)});\n break;\n case 'OGC:WMTS':\n services.push({\n name: record.title,\n type: 'ogc-wmts-service',\n ...this._parseOGCUrl(url)\n });\n break;\n case 'OGC:WFS':\n services.push({name: record.title, type: 'ogc-wfs-service', ...this._parseOGCUrl(url)});\n break;\n default:\n unknownServices.push({\n name: record.title,\n type: 'unknown',\n url: reference.value,\n scheme: reference.scheme\n });\n }\n }\n }\n\n return options?.includeUnknown ? services.concat(unknownServices) : services;\n }\n\n _parseOGCUrl(url: string): {url: string; params: string} {\n const parts = url.split('?');\n return {\n url: parts[0],\n params: parts[1] || ''\n };\n }\n\n // CSW Service API Stubs\n\n /** Get Capabilities */\n async getCapabilities(\n wmsParameters?: CSWGetCapabilitiesParameters,\n vendorParameters?: Record<string, unknown>\n ): Promise<CSWCapabilities> {\n const url = this.getCapabilitiesURL(wmsParameters, vendorParameters);\n const response = await this.fetch(url);\n const arrayBuffer = await response.arrayBuffer();\n this._checkResponse(response, arrayBuffer);\n const capabilities = await CSWCapabilitiesLoader.parse(arrayBuffer, this.props.loadOptions);\n return capabilities;\n }\n\n /** Get Records */\n async getRecords(\n wmsParameters?: CSWGetRecordsParameters,\n vendorParameters?: Record<string, unknown>\n ): Promise<CSWRecords> {\n const url = this.getRecordsURL(wmsParameters, vendorParameters);\n const response = await this.fetch(url);\n const arrayBuffer = await response.arrayBuffer();\n this._checkResponse(response, arrayBuffer);\n return await CSWRecordsLoader.parse(arrayBuffer, this.props.loadOptions);\n }\n\n /** Get Domain */\n async getDomain(\n wmsParameters?: CSWGetDomainParameters,\n vendorParameters?: Record<string, unknown>\n ): Promise<CSWDomain> {\n const url = this.getDomainURL(wmsParameters, vendorParameters);\n const response = await this.fetch(url);\n const arrayBuffer = await response.arrayBuffer();\n this._checkResponse(response, arrayBuffer);\n return await CSWDomainLoader.parse(arrayBuffer, this.props.loadOptions);\n }\n\n // Typed URL creators\n // For applications that want full control of fetching and parsing\n\n /** Generate a URL for the GetCapabilities request */\n getCapabilitiesURL(\n wmsParameters?: CSWGetCapabilitiesParameters,\n vendorParameters?: Record<string, unknown>\n ): string {\n const options: Required<CSWGetCapabilitiesParameters> = {\n version: '3.0.0',\n ...wmsParameters,\n ...vendorParameters,\n service: 'CSW',\n request: 'GetCapabilities'\n };\n return this._getCSWUrl(options, vendorParameters);\n }\n\n /** Generate a URL for the GetCapabilities request */\n getRecordsURL(\n wmsParameters?: CSWGetRecordsParameters,\n vendorParameters?: Record<string, unknown>\n ): string {\n const options: Required<CSWGetRecordsParameters> = {\n version: '3.0.0',\n typenames: 'csw:Record',\n ...wmsParameters,\n ...vendorParameters,\n service: 'CSW',\n request: 'GetRecords'\n };\n return this._getCSWUrl(options, vendorParameters);\n }\n\n /** Generate a URL for the GetCapabilities request */\n getDomainURL(\n wmsParameters?: CSWGetDomainParameters,\n vendorParameters?: Record<string, unknown>\n ): string {\n const options: Required<CSWGetDomainParameters> = {\n version: '3.0.0',\n ...wmsParameters,\n ...vendorParameters,\n service: 'CSW',\n request: 'GetDomain'\n };\n return this._getCSWUrl(options, vendorParameters);\n }\n\n // INTERNAL METHODS\n\n /**\n * @note case _getCSWUrl may need to be overridden to handle certain backends?\n * */\n protected _getCSWUrl(\n options: Record<string, unknown>,\n vendorParameters?: Record<string, unknown>\n ): string {\n let url = this.props.url;\n let first = true;\n for (const [key, value] of Object.entries(options)) {\n url += first ? '?' : '&';\n first = false;\n if (Array.isArray(value)) {\n url += `${key.toUpperCase()}=${value.join(',')}`;\n } else {\n url += `${key.toUpperCase()}=${value ? String(value) : ''}`;\n }\n }\n return encodeURI(url);\n }\n\n /** Checks for and parses a CSW XML formatted ServiceError and throws an exception */\n protected _checkResponse(response: Response, arrayBuffer: ArrayBuffer): void {\n const contentType = response.headers['content-type'];\n if (!response.ok || CSWErrorLoader.mimeTypes.includes(contentType)) {\n const error = CSWErrorLoader.parseSync(arrayBuffer, this.props.loadOptions);\n throw new Error(error);\n }\n }\n\n /** Error situation detected */\n protected _parseError(arrayBuffer: ArrayBuffer): Error {\n const error = CSWErrorLoader.parseSync(arrayBuffer, this.props.loadOptions);\n return new Error(error);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"csw-service.js","names":["DataSource","CSWCapabilitiesLoader","CSWRecordsLoader","CSWDomainLoader","WMSErrorLoader","CSWErrorLoader","CSWService","constructor","props","_defineProperty","getMetadata","capabilities","getCapabilities","normalizeMetadata","getServiceDirectory","options","services","unknownServices","records","getRecords","record","reference","references","url","value","scheme","push","name","title","type","_parseOGCUrl","includeUnknown","concat","parts","split","params","wmsParameters","vendorParameters","getCapabilitiesURL","response","fetch","arrayBuffer","_checkResponse","parse","loadOptions","getRecordsURL","getDomain","getDomainURL","version","service","request","_getCSWUrl","typenames","first","key","Object","entries","Array","isArray","toUpperCase","join","String","encodeURI","contentType","headers","ok","mimeTypes","includes","error","parseSync","Error","_parseError","toLowerCase"],"sources":["../../../../../src/lib/services/ogc/csw-service.ts"],"sourcesContent":["// loaders.gl, MIT license\n\n/* eslint-disable camelcase */\n\nimport type {DataSourceProps} from '../../sources/data-source';\nimport {DataSource} from '../../sources/data-source';\n\nimport type {CSWCapabilities} from '../../../csw-capabilities-loader';\nimport {CSWCapabilitiesLoader} from '../../../csw-capabilities-loader';\n\nimport type {CSWRecords} from '../../../csw-records-loader';\nimport {CSWRecordsLoader} from '../../../csw-records-loader';\n\nimport type {CSWDomain} from '../../../csw-domain-loader';\nimport {CSWDomainLoader} from '../../../csw-domain-loader';\n\nimport {WMSErrorLoader as CSWErrorLoader} from '../../../wms-error-loader';\n\ntype CSWCommonParameters = {\n /** In case the endpoint supports multiple services */\n service?: 'CSW';\n /** In case the endpoint supports multiple CSW versions */\n version?: '1.1.1' | '2.0.0' | '2.0.1' | '3.0.0' | '3.0.0';\n};\n\nexport type CSWGetCapabilitiesParameters = CSWCommonParameters & {\n /** Request type */\n request?: 'GetCapabilities';\n};\n\nexport type CSWGetRecordsParameters = CSWCommonParameters & {\n /** Request type */\n request?: 'GetRecords';\n /** type of records */\n typenames: 'csw:Record';\n};\n\nexport type CSWGetDomainParameters = CSWCommonParameters & {\n /** Request type */\n request?: 'GetDomain';\n // TBA\n};\n\nexport type Service = {name: string; type: string; url: string; params?: string; scheme?: string};\n\nexport type CSWServiceProps = DataSourceProps & {\n url: string;\n};\n\n/**\n * The CSWService class provides\n * - provides type safe methods to form URLs to a CSW service\n * - provides type safe methods to query and parse results (and errors) from a CSW service\n * - implements the ImageService interface\n * @note Only the URL parameter conversion is supported. XML posts are not supported.\n */\nexport class CSWService extends DataSource<CSWServiceProps> {\n static type: 'csw' = 'csw';\n static testURL = (url: string): boolean => url.toLowerCase().includes('csw');\n\n capabilities: CSWCapabilities | null = null;\n\n /** A list of loaders used by the CSWService methods */\n readonly loaders = [CSWErrorLoader, CSWCapabilitiesLoader];\n\n /** Create a CSWService */\n constructor(props: CSWServiceProps) {\n super(props);\n }\n\n async getMetadata(): Promise<CSWCapabilities> {\n const capabilities = await this.getCapabilities();\n return this.normalizeMetadata(capabilities);\n }\n\n normalizeMetadata(capabilities: CSWCapabilities): CSWCapabilities {\n return capabilities;\n }\n\n async getServiceDirectory(options?: {includeUnknown?: boolean}): Promise<Service[]> {\n const services: Service[] = [];\n const unknownServices: Service[] = [];\n\n const records = await this.getRecords();\n for (const record of records.records) {\n for (const reference of record.references) {\n const url = reference.value;\n switch (reference.scheme) {\n case 'OGC:WMS':\n services.push({name: record.title, type: 'ogc-wms-service', ...this._parseOGCUrl(url)});\n break;\n case 'OGC:WMTS':\n services.push({\n name: record.title,\n type: 'ogc-wmts-service',\n ...this._parseOGCUrl(url)\n });\n break;\n case 'OGC:WFS':\n services.push({name: record.title, type: 'ogc-wfs-service', ...this._parseOGCUrl(url)});\n break;\n default:\n unknownServices.push({\n name: record.title,\n type: 'unknown',\n url: reference.value,\n scheme: reference.scheme\n });\n }\n }\n }\n\n return options?.includeUnknown ? services.concat(unknownServices) : services;\n }\n\n _parseOGCUrl(url: string): {url: string; params: string} {\n const parts = url.split('?');\n return {\n url: parts[0],\n params: parts[1] || ''\n };\n }\n\n // CSW Service API Stubs\n\n /** Get Capabilities */\n async getCapabilities(\n wmsParameters?: CSWGetCapabilitiesParameters,\n vendorParameters?: Record<string, unknown>\n ): Promise<CSWCapabilities> {\n const url = this.getCapabilitiesURL(wmsParameters, vendorParameters);\n const response = await this.fetch(url);\n const arrayBuffer = await response.arrayBuffer();\n this._checkResponse(response, arrayBuffer);\n const capabilities = await CSWCapabilitiesLoader.parse(arrayBuffer, this.props.loadOptions);\n return capabilities;\n }\n\n /** Get Records */\n async getRecords(\n wmsParameters?: CSWGetRecordsParameters,\n vendorParameters?: Record<string, unknown>\n ): Promise<CSWRecords> {\n const url = this.getRecordsURL(wmsParameters, vendorParameters);\n const response = await this.fetch(url);\n const arrayBuffer = await response.arrayBuffer();\n this._checkResponse(response, arrayBuffer);\n return await CSWRecordsLoader.parse(arrayBuffer, this.props.loadOptions);\n }\n\n /** Get Domain */\n async getDomain(\n wmsParameters?: CSWGetDomainParameters,\n vendorParameters?: Record<string, unknown>\n ): Promise<CSWDomain> {\n const url = this.getDomainURL(wmsParameters, vendorParameters);\n const response = await this.fetch(url);\n const arrayBuffer = await response.arrayBuffer();\n this._checkResponse(response, arrayBuffer);\n return await CSWDomainLoader.parse(arrayBuffer, this.props.loadOptions);\n }\n\n // Typed URL creators\n // For applications that want full control of fetching and parsing\n\n /** Generate a URL for the GetCapabilities request */\n getCapabilitiesURL(\n wmsParameters?: CSWGetCapabilitiesParameters,\n vendorParameters?: Record<string, unknown>\n ): string {\n const options: Required<CSWGetCapabilitiesParameters> = {\n version: '3.0.0',\n ...wmsParameters,\n ...vendorParameters,\n service: 'CSW',\n request: 'GetCapabilities'\n };\n return this._getCSWUrl(options, vendorParameters);\n }\n\n /** Generate a URL for the GetCapabilities request */\n getRecordsURL(\n wmsParameters?: CSWGetRecordsParameters,\n vendorParameters?: Record<string, unknown>\n ): string {\n const options: Required<CSWGetRecordsParameters> = {\n version: '3.0.0',\n typenames: 'csw:Record',\n ...wmsParameters,\n ...vendorParameters,\n service: 'CSW',\n request: 'GetRecords'\n };\n return this._getCSWUrl(options, vendorParameters);\n }\n\n /** Generate a URL for the GetCapabilities request */\n getDomainURL(\n wmsParameters?: CSWGetDomainParameters,\n vendorParameters?: Record<string, unknown>\n ): string {\n const options: Required<CSWGetDomainParameters> = {\n version: '3.0.0',\n ...wmsParameters,\n ...vendorParameters,\n service: 'CSW',\n request: 'GetDomain'\n };\n return this._getCSWUrl(options, vendorParameters);\n }\n\n // INTERNAL METHODS\n\n /**\n * @note case _getCSWUrl may need to be overridden to handle certain backends?\n * */\n protected _getCSWUrl(\n options: Record<string, unknown>,\n vendorParameters?: Record<string, unknown>\n ): string {\n let url = this.props.url;\n let first = true;\n for (const [key, value] of Object.entries(options)) {\n url += first ? '?' : '&';\n first = false;\n if (Array.isArray(value)) {\n url += `${key.toUpperCase()}=${value.join(',')}`;\n } else {\n url += `${key.toUpperCase()}=${value ? String(value) : ''}`;\n }\n }\n return encodeURI(url);\n }\n\n /** Checks for and parses a CSW XML formatted ServiceError and throws an exception */\n protected _checkResponse(response: Response, arrayBuffer: ArrayBuffer): void {\n const contentType = response.headers['content-type'];\n if (!response.ok || CSWErrorLoader.mimeTypes.includes(contentType)) {\n const error = CSWErrorLoader.parseSync(arrayBuffer, this.props.loadOptions);\n throw new Error(error);\n }\n }\n\n /** Error situation detected */\n protected _parseError(arrayBuffer: ArrayBuffer): Error {\n const error = CSWErrorLoader.parseSync(arrayBuffer, this.props.loadOptions);\n return new Error(error);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
-
|
|
3
2
|
import { ImageLoader } from '@loaders.gl/images';
|
|
4
3
|
import { mergeLoaderOptions } from '@loaders.gl/loader-utils';
|
|
5
4
|
import { ImageSource } from '../../sources/image-source';
|
|
@@ -8,26 +7,32 @@ import { WMSFeatureInfoLoader } from '../../../wip/wms-feature-info-loader';
|
|
|
8
7
|
import { WMSLayerDescriptionLoader } from '../../../wip/wms-layer-description-loader';
|
|
9
8
|
import { WMSErrorLoader } from '../../../wms-error-loader';
|
|
10
9
|
export class WMSService extends ImageSource {
|
|
11
|
-
|
|
12
10
|
constructor(props) {
|
|
11
|
+
var _props$substituteCRS;
|
|
13
12
|
super(props);
|
|
14
|
-
|
|
15
|
-
_defineProperty(this, "
|
|
13
|
+
_defineProperty(this, "url", void 0);
|
|
14
|
+
_defineProperty(this, "substituteCRS84", void 0);
|
|
15
|
+
_defineProperty(this, "flipCRS", void 0);
|
|
16
|
+
_defineProperty(this, "wmsParameters", void 0);
|
|
17
|
+
_defineProperty(this, "vendorParameters", void 0);
|
|
16
18
|
_defineProperty(this, "capabilities", null);
|
|
17
19
|
_defineProperty(this, "loaders", [ImageLoader, WMSErrorLoader, WMSCapabilitiesLoader, WMSFeatureInfoLoader, WMSLayerDescriptionLoader]);
|
|
18
|
-
|
|
19
|
-
this.
|
|
20
|
-
|
|
20
|
+
this.url = props.url;
|
|
21
|
+
this.substituteCRS84 = (_props$substituteCRS = props.substituteCRS84) !== null && _props$substituteCRS !== void 0 ? _props$substituteCRS : false;
|
|
22
|
+
this.flipCRS = ['EPSG:4326'];
|
|
23
|
+
this.wmsParameters = {
|
|
21
24
|
layers: undefined,
|
|
25
|
+
query_layers: undefined,
|
|
22
26
|
styles: undefined,
|
|
23
|
-
version: '1.
|
|
24
|
-
|
|
27
|
+
version: '1.3.0',
|
|
28
|
+
crs: 'EPSG:4326',
|
|
25
29
|
format: 'image/png',
|
|
26
30
|
info_format: 'text/plain',
|
|
27
|
-
|
|
31
|
+
transparent: undefined,
|
|
32
|
+
...props.wmsParameters
|
|
28
33
|
};
|
|
34
|
+
this.vendorParameters = props.vendorParameters || {};
|
|
29
35
|
}
|
|
30
|
-
|
|
31
36
|
async getMetadata() {
|
|
32
37
|
const capabilities = await this.getCapabilities();
|
|
33
38
|
return this.normalizeMetadata(capabilities);
|
|
@@ -38,145 +43,190 @@ export class WMSService extends ImageSource {
|
|
|
38
43
|
normalizeMetadata(capabilities) {
|
|
39
44
|
return capabilities;
|
|
40
45
|
}
|
|
41
|
-
|
|
42
46
|
async getCapabilities(wmsParameters, vendorParameters) {
|
|
43
47
|
const url = this.getCapabilitiesURL(wmsParameters, vendorParameters);
|
|
44
48
|
const response = await this.fetch(url);
|
|
45
49
|
const arrayBuffer = await response.arrayBuffer();
|
|
46
50
|
this._checkResponse(response, arrayBuffer);
|
|
47
|
-
const capabilities = await WMSCapabilitiesLoader.parse(arrayBuffer, this.
|
|
51
|
+
const capabilities = await WMSCapabilitiesLoader.parse(arrayBuffer, this.loadOptions);
|
|
48
52
|
this.capabilities = capabilities;
|
|
49
53
|
return capabilities;
|
|
50
54
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const url = this.getMapURL(options, vendorParameters);
|
|
55
|
+
async getMap(wmsParameters, vendorParameters) {
|
|
56
|
+
const url = this.getMapURL(wmsParameters, vendorParameters);
|
|
54
57
|
const response = await this.fetch(url);
|
|
55
58
|
const arrayBuffer = await response.arrayBuffer();
|
|
56
59
|
this._checkResponse(response, arrayBuffer);
|
|
57
60
|
try {
|
|
58
|
-
return await ImageLoader.parse(arrayBuffer, this.
|
|
61
|
+
return await ImageLoader.parse(arrayBuffer, this.loadOptions);
|
|
59
62
|
} catch {
|
|
60
63
|
throw this._parseError(arrayBuffer);
|
|
61
64
|
}
|
|
62
65
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
const url = this.getFeatureInfoURL(options, vendorParameters);
|
|
66
|
+
async getFeatureInfo(wmsParameters, vendorParameters) {
|
|
67
|
+
const url = this.getFeatureInfoURL(wmsParameters, vendorParameters);
|
|
66
68
|
const response = await this.fetch(url);
|
|
67
69
|
const arrayBuffer = await response.arrayBuffer();
|
|
68
70
|
this._checkResponse(response, arrayBuffer);
|
|
69
|
-
return await WMSFeatureInfoLoader.parse(arrayBuffer, this.
|
|
71
|
+
return await WMSFeatureInfoLoader.parse(arrayBuffer, this.loadOptions);
|
|
70
72
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const url = this.getFeatureInfoURL(options, vendorParameters);
|
|
73
|
+
async getFeatureInfoText(wmsParameters, vendorParameters) {
|
|
74
|
+
const url = this.getFeatureInfoURL(wmsParameters, vendorParameters);
|
|
74
75
|
const response = await this.fetch(url);
|
|
75
76
|
const arrayBuffer = await response.arrayBuffer();
|
|
76
77
|
this._checkResponse(response, arrayBuffer);
|
|
77
78
|
return new TextDecoder().decode(arrayBuffer);
|
|
78
79
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const url = this.describeLayerURL(options, vendorParameters);
|
|
80
|
+
async describeLayer(wmsParameters, vendorParameters) {
|
|
81
|
+
const url = this.describeLayerURL(wmsParameters, vendorParameters);
|
|
82
82
|
const response = await this.fetch(url);
|
|
83
83
|
const arrayBuffer = await response.arrayBuffer();
|
|
84
84
|
this._checkResponse(response, arrayBuffer);
|
|
85
|
-
return await WMSLayerDescriptionLoader.parse(arrayBuffer, this.
|
|
85
|
+
return await WMSLayerDescriptionLoader.parse(arrayBuffer, this.loadOptions);
|
|
86
86
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
const url = this.getLegendGraphicURL(options, vendorParameters);
|
|
87
|
+
async getLegendGraphic(wmsParameters, vendorParameters) {
|
|
88
|
+
const url = this.getLegendGraphicURL(wmsParameters, vendorParameters);
|
|
90
89
|
const response = await this.fetch(url);
|
|
91
90
|
const arrayBuffer = await response.arrayBuffer();
|
|
92
91
|
this._checkResponse(response, arrayBuffer);
|
|
93
92
|
try {
|
|
94
|
-
return await ImageLoader.parse(arrayBuffer, this.
|
|
93
|
+
return await ImageLoader.parse(arrayBuffer, this.loadOptions);
|
|
95
94
|
} catch {
|
|
96
95
|
throw this._parseError(arrayBuffer);
|
|
97
96
|
}
|
|
98
97
|
}
|
|
99
|
-
|
|
100
98
|
getCapabilitiesURL(wmsParameters, vendorParameters) {
|
|
101
99
|
const options = {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
request: 'GetCapabilities',
|
|
105
|
-
...wmsParameters,
|
|
106
|
-
...vendorParameters
|
|
100
|
+
version: this.wmsParameters.version,
|
|
101
|
+
...wmsParameters
|
|
107
102
|
};
|
|
108
|
-
return this._getWMSUrl(options, vendorParameters);
|
|
103
|
+
return this._getWMSUrl('GetCapabilities', options, vendorParameters);
|
|
109
104
|
}
|
|
110
|
-
|
|
111
105
|
getMapURL(wmsParameters, vendorParameters) {
|
|
106
|
+
wmsParameters = this._getWMS130Parameters(wmsParameters);
|
|
112
107
|
const options = {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
...wmsParameters
|
|
120
|
-
...vendorParameters
|
|
108
|
+
version: this.wmsParameters.version,
|
|
109
|
+
format: this.wmsParameters.format,
|
|
110
|
+
transparent: this.wmsParameters.transparent,
|
|
111
|
+
layers: this.wmsParameters.layers,
|
|
112
|
+
styles: this.wmsParameters.styles,
|
|
113
|
+
crs: this.wmsParameters.crs,
|
|
114
|
+
...wmsParameters
|
|
121
115
|
};
|
|
122
|
-
return this._getWMSUrl(options, vendorParameters);
|
|
116
|
+
return this._getWMSUrl('GetMap', options, vendorParameters);
|
|
123
117
|
}
|
|
124
|
-
|
|
125
118
|
getFeatureInfoURL(wmsParameters, vendorParameters) {
|
|
126
119
|
const options = {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
...wmsParameters,
|
|
135
|
-
...vendorParameters
|
|
120
|
+
version: this.wmsParameters.version,
|
|
121
|
+
info_format: this.wmsParameters.info_format,
|
|
122
|
+
layers: this.wmsParameters.layers,
|
|
123
|
+
query_layers: this.wmsParameters.query_layers,
|
|
124
|
+
styles: this.wmsParameters.styles,
|
|
125
|
+
crs: this.wmsParameters.crs,
|
|
126
|
+
...wmsParameters
|
|
136
127
|
};
|
|
137
|
-
return this._getWMSUrl(options, vendorParameters);
|
|
128
|
+
return this._getWMSUrl('GetFeatureInfo', options, vendorParameters);
|
|
138
129
|
}
|
|
139
|
-
|
|
140
130
|
describeLayerURL(wmsParameters, vendorParameters) {
|
|
141
131
|
const options = {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
request: 'DescribeLayer',
|
|
145
|
-
...wmsParameters,
|
|
146
|
-
...vendorParameters
|
|
132
|
+
version: this.wmsParameters.version,
|
|
133
|
+
...wmsParameters
|
|
147
134
|
};
|
|
148
|
-
return this._getWMSUrl(options, vendorParameters);
|
|
135
|
+
return this._getWMSUrl('DescribeLayer', options, vendorParameters);
|
|
149
136
|
}
|
|
150
137
|
getLegendGraphicURL(wmsParameters, vendorParameters) {
|
|
151
138
|
const options = {
|
|
139
|
+
version: this.wmsParameters.version,
|
|
140
|
+
...wmsParameters
|
|
141
|
+
};
|
|
142
|
+
return this._getWMSUrl('GetLegendGraphic', options, vendorParameters);
|
|
143
|
+
}
|
|
144
|
+
_parseWMSUrl(url) {
|
|
145
|
+
const [baseUrl, search] = url.split('?');
|
|
146
|
+
const searchParams = search.split('&');
|
|
147
|
+
const parameters = {};
|
|
148
|
+
for (const parameter of searchParams) {
|
|
149
|
+
const [key, value] = parameter.split('=');
|
|
150
|
+
parameters[key] = value;
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
url: baseUrl,
|
|
154
|
+
parameters
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
_getWMSUrl(request, wmsParameters, vendorParameters) {
|
|
158
|
+
let url = this.url;
|
|
159
|
+
let first = true;
|
|
160
|
+
const allParameters = {
|
|
152
161
|
service: 'WMS',
|
|
153
|
-
version:
|
|
154
|
-
request
|
|
162
|
+
version: wmsParameters.version,
|
|
163
|
+
request,
|
|
155
164
|
...wmsParameters,
|
|
165
|
+
...this.vendorParameters,
|
|
156
166
|
...vendorParameters
|
|
157
167
|
};
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
let first = true;
|
|
164
|
-
for (const [key, value] of Object.entries(options)) {
|
|
165
|
-
url += first ? '?' : '&';
|
|
166
|
-
first = false;
|
|
167
|
-
if (Array.isArray(value)) {
|
|
168
|
-
url += "".concat(key.toUpperCase(), "=").concat(value.join(','));
|
|
169
|
-
} else {
|
|
170
|
-
url += "".concat(key.toUpperCase(), "=").concat(value ? String(value) : '');
|
|
168
|
+
for (const [key, value] of Object.entries(allParameters)) {
|
|
169
|
+
if (key !== 'transparent' || value) {
|
|
170
|
+
url += first ? '?' : '&';
|
|
171
|
+
first = false;
|
|
172
|
+
url += this._getURLParameter(key, value, wmsParameters);
|
|
171
173
|
}
|
|
172
174
|
}
|
|
173
175
|
return encodeURI(url);
|
|
174
176
|
}
|
|
175
|
-
|
|
177
|
+
_getWMS130Parameters(wmsParameters) {
|
|
178
|
+
const newParameters = {
|
|
179
|
+
...wmsParameters
|
|
180
|
+
};
|
|
181
|
+
if (newParameters.srs) {
|
|
182
|
+
newParameters.crs = newParameters.crs || newParameters.srs;
|
|
183
|
+
delete newParameters.srs;
|
|
184
|
+
}
|
|
185
|
+
return newParameters;
|
|
186
|
+
}
|
|
187
|
+
_getURLParameter(key, value, wmsParameters) {
|
|
188
|
+
switch (key) {
|
|
189
|
+
case 'crs':
|
|
190
|
+
if (wmsParameters.version !== '1.3.0') {
|
|
191
|
+
key = 'srs';
|
|
192
|
+
} else if (this.substituteCRS84 && value === 'EPSG:4326') {
|
|
193
|
+
value = 'CRS:84';
|
|
194
|
+
}
|
|
195
|
+
break;
|
|
196
|
+
case 'srs':
|
|
197
|
+
if (wmsParameters.version === '1.3.0') {
|
|
198
|
+
key = 'crs';
|
|
199
|
+
}
|
|
200
|
+
break;
|
|
201
|
+
case 'bbox':
|
|
202
|
+
const bbox = this._flipBoundingBox(value, wmsParameters);
|
|
203
|
+
if (bbox) {
|
|
204
|
+
value = bbox;
|
|
205
|
+
}
|
|
206
|
+
break;
|
|
207
|
+
default:
|
|
208
|
+
}
|
|
209
|
+
key = key.toUpperCase();
|
|
210
|
+
return Array.isArray(value) ? "".concat(key, "=").concat(value.join(',')) : "".concat(key, "=").concat(value ? String(value) : '');
|
|
211
|
+
}
|
|
212
|
+
_flipBoundingBox(bboxValue, wmsParameters) {
|
|
213
|
+
if (!Array.isArray(bboxValue) || bboxValue.length !== 4) {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
const flipCoordinates = wmsParameters.version === '1.3.0' && this.flipCRS.includes(wmsParameters.crs || '') && !(this.substituteCRS84 && wmsParameters.crs === 'EPSG:4326');
|
|
217
|
+
const bbox = bboxValue;
|
|
218
|
+
return flipCoordinates ? [bbox[1], bbox[0], bbox[3], bbox[2]] : bbox;
|
|
219
|
+
}
|
|
220
|
+
async _fetchArrayBuffer(url) {
|
|
221
|
+
const response = await this.fetch(url);
|
|
222
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
223
|
+
this._checkResponse(response, arrayBuffer);
|
|
224
|
+
return arrayBuffer;
|
|
225
|
+
}
|
|
176
226
|
_checkResponse(response, arrayBuffer) {
|
|
177
227
|
const contentType = response.headers['content-type'];
|
|
178
228
|
if (!response.ok || WMSErrorLoader.mimeTypes.includes(contentType)) {
|
|
179
|
-
const loadOptions = mergeLoaderOptions(this.
|
|
229
|
+
const loadOptions = mergeLoaderOptions(this.loadOptions, {
|
|
180
230
|
wms: {
|
|
181
231
|
throwOnError: true
|
|
182
232
|
}
|
|
@@ -185,9 +235,8 @@ export class WMSService extends ImageSource {
|
|
|
185
235
|
throw new Error(error);
|
|
186
236
|
}
|
|
187
237
|
}
|
|
188
|
-
|
|
189
238
|
_parseError(arrayBuffer) {
|
|
190
|
-
const error = WMSErrorLoader.parseSync(arrayBuffer, this.
|
|
239
|
+
const error = WMSErrorLoader.parseSync(arrayBuffer, this.loadOptions);
|
|
191
240
|
return new Error(error);
|
|
192
241
|
}
|
|
193
242
|
}
|