@loaders.gl/wms 3.3.0-alpha.8 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/dist/bundle.d.ts +2 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/bundle.js +6 -0
  4. package/dist/dist.min.js +4141 -1479
  5. package/dist/es5/bundle.js.map +1 -1
  6. package/dist/es5/index.js +77 -0
  7. package/dist/es5/index.js.map +1 -1
  8. package/dist/es5/lerc-loader.js +74 -0
  9. package/dist/es5/lerc-loader.js.map +1 -0
  10. package/dist/es5/lib/data-sources/adhoc-image-service.js +129 -0
  11. package/dist/es5/lib/data-sources/adhoc-image-service.js.map +1 -0
  12. package/dist/es5/lib/data-sources/arcgis-image-service.js +180 -0
  13. package/dist/es5/lib/data-sources/arcgis-image-service.js.map +1 -0
  14. package/dist/es5/lib/data-sources/create-image-source.js +45 -0
  15. package/dist/es5/lib/data-sources/create-image-source.js.map +1 -0
  16. package/dist/es5/lib/data-sources/image-services/arcgis-image-service.js +179 -0
  17. package/dist/es5/lib/data-sources/image-services/arcgis-image-service.js.map +1 -0
  18. package/dist/es5/lib/data-sources/image-services/image-service.js +163 -0
  19. package/dist/es5/lib/data-sources/image-services/image-service.js.map +1 -0
  20. package/dist/es5/lib/data-sources/image-services/wms-service.js +400 -0
  21. package/dist/es5/lib/data-sources/image-services/wms-service.js.map +1 -0
  22. package/dist/es5/lib/data-sources/image-source.js +14 -0
  23. package/dist/es5/lib/data-sources/image-source.js.map +1 -0
  24. package/dist/es5/lib/gml/deep-strict-equal.js +64 -0
  25. package/dist/es5/lib/gml/deep-strict-equal.js.map +1 -0
  26. package/dist/es5/lib/gml/parse-gml.js +416 -0
  27. package/dist/es5/lib/gml/parse-gml.js.map +1 -0
  28. package/dist/es5/lib/lerc/lerc-types.js +2 -0
  29. package/dist/es5/lib/lerc/lerc-types.js.map +1 -0
  30. package/dist/es5/lib/wcs/parse-wcs.js +43 -0
  31. package/dist/es5/lib/wcs/parse-wcs.js.map +1 -0
  32. package/dist/es5/lib/wcs/wcs-types.js +2 -0
  33. package/dist/es5/lib/wcs/wcs-types.js.map +1 -0
  34. package/dist/es5/lib/wfs/parse-wfs.js +43 -0
  35. package/dist/es5/lib/wfs/parse-wfs.js.map +1 -0
  36. package/dist/es5/lib/wfs/wfs-types.js +2 -0
  37. package/dist/es5/lib/wfs/wfs-types.js.map +1 -0
  38. package/dist/es5/lib/wms/parse-wms.js +135 -0
  39. package/dist/es5/lib/wms/parse-wms.js.map +1 -0
  40. package/dist/es5/{wms-types.js → lib/wms/wms-types.js} +0 -0
  41. package/dist/{esm → es5/lib/wms}/wms-types.js.map +1 -1
  42. package/dist/es5/lib/wmts/parse-wmts.js +43 -0
  43. package/dist/es5/lib/wmts/parse-wmts.js.map +1 -0
  44. package/dist/es5/lib/wmts/wmts-types.js +2 -0
  45. package/dist/es5/lib/wmts/wmts-types.js.map +1 -0
  46. package/dist/es5/wip/arcgis-feature-service.js +45 -0
  47. package/dist/es5/wip/arcgis-feature-service.js.map +1 -0
  48. package/dist/es5/wip/data-source.js +4 -0
  49. package/dist/es5/wip/data-source.js.map +1 -0
  50. package/dist/es5/wip/gml-loader.js +54 -0
  51. package/dist/es5/wip/gml-loader.js.map +1 -0
  52. package/dist/es5/wip/wcs-capabilities-loader.js +54 -0
  53. package/dist/es5/wip/wcs-capabilities-loader.js.map +1 -0
  54. package/dist/es5/wip/wfs-capabilities-loader.js +54 -0
  55. package/dist/es5/wip/wfs-capabilities-loader.js.map +1 -0
  56. package/dist/es5/wip/wms-feature-info-loader.js +44 -0
  57. package/dist/es5/wip/wms-feature-info-loader.js.map +1 -0
  58. package/dist/es5/wip/wms-layer-description-loader.js +44 -0
  59. package/dist/es5/wip/wms-layer-description-loader.js.map +1 -0
  60. package/dist/es5/wip/wms-layer-description-loader.md.disabled.md +47 -0
  61. package/dist/es5/wip/wmts-capabilities-loader.js +54 -0
  62. package/dist/es5/wip/wmts-capabilities-loader.js.map +1 -0
  63. package/dist/es5/wms-capabilities-loader.js +7 -6
  64. package/dist/es5/wms-capabilities-loader.js.map +1 -1
  65. package/dist/es5/wms-error-loader.js +70 -0
  66. package/dist/es5/wms-error-loader.js.map +1 -0
  67. package/dist/esm/bundle.js +1 -0
  68. package/dist/esm/bundle.js.map +1 -1
  69. package/dist/esm/index.js +16 -0
  70. package/dist/esm/index.js.map +1 -1
  71. package/dist/esm/lerc-loader.js +25 -0
  72. package/dist/esm/lerc-loader.js.map +1 -0
  73. package/dist/esm/lib/data-sources/adhoc-image-service.js +43 -0
  74. package/dist/esm/lib/data-sources/adhoc-image-service.js.map +1 -0
  75. package/dist/esm/lib/data-sources/arcgis-image-service.js +62 -0
  76. package/dist/esm/lib/data-sources/arcgis-image-service.js.map +1 -0
  77. package/dist/esm/lib/data-sources/create-image-source.js +30 -0
  78. package/dist/esm/lib/data-sources/create-image-source.js.map +1 -0
  79. package/dist/esm/lib/data-sources/image-services/arcgis-image-service.js +61 -0
  80. package/dist/esm/lib/data-sources/image-services/arcgis-image-service.js.map +1 -0
  81. package/dist/esm/lib/data-sources/image-services/image-service.js +72 -0
  82. package/dist/esm/lib/data-sources/image-services/image-service.js.map +1 -0
  83. package/dist/esm/lib/data-sources/image-services/wms-service.js +190 -0
  84. package/dist/esm/lib/data-sources/image-services/wms-service.js.map +1 -0
  85. package/dist/esm/lib/data-sources/image-source.js +4 -0
  86. package/dist/esm/lib/data-sources/image-source.js.map +1 -0
  87. package/dist/esm/lib/gml/deep-strict-equal.js +57 -0
  88. package/dist/esm/lib/gml/deep-strict-equal.js.map +1 -0
  89. package/dist/esm/lib/gml/parse-gml.js +348 -0
  90. package/dist/esm/lib/gml/parse-gml.js.map +1 -0
  91. package/dist/esm/lib/lerc/lerc-types.js +2 -0
  92. package/dist/esm/lib/lerc/lerc-types.js.map +1 -0
  93. package/dist/esm/lib/wcs/parse-wcs.js +32 -0
  94. package/dist/esm/lib/wcs/parse-wcs.js.map +1 -0
  95. package/dist/esm/lib/wcs/wcs-types.js +2 -0
  96. package/dist/esm/lib/wcs/wcs-types.js.map +1 -0
  97. package/dist/esm/lib/wfs/parse-wfs.js +32 -0
  98. package/dist/esm/lib/wfs/parse-wfs.js.map +1 -0
  99. package/dist/esm/lib/wfs/wfs-types.js +2 -0
  100. package/dist/esm/lib/wfs/wfs-types.js.map +1 -0
  101. package/dist/esm/lib/wms/parse-wms.js +101 -0
  102. package/dist/esm/lib/wms/parse-wms.js.map +1 -0
  103. package/dist/esm/{wms-types.js → lib/wms/wms-types.js} +0 -0
  104. package/dist/{es5 → esm/lib/wms}/wms-types.js.map +1 -1
  105. package/dist/esm/lib/wmts/parse-wmts.js +32 -0
  106. package/dist/esm/lib/wmts/parse-wmts.js.map +1 -0
  107. package/dist/esm/lib/wmts/wmts-types.js +2 -0
  108. package/dist/esm/lib/wmts/wmts-types.js.map +1 -0
  109. package/dist/esm/wip/arcgis-feature-service.js +28 -0
  110. package/dist/esm/wip/arcgis-feature-service.js.map +1 -0
  111. package/dist/esm/wip/data-source.js +2 -0
  112. package/dist/esm/wip/data-source.js.map +1 -0
  113. package/dist/esm/wip/gml-loader.js +25 -0
  114. package/dist/esm/wip/gml-loader.js.map +1 -0
  115. package/dist/esm/wip/wcs-capabilities-loader.js +25 -0
  116. package/dist/esm/wip/wcs-capabilities-loader.js.map +1 -0
  117. package/dist/esm/wip/wfs-capabilities-loader.js +25 -0
  118. package/dist/esm/wip/wfs-capabilities-loader.js.map +1 -0
  119. package/dist/esm/wip/wms-feature-info-loader.js +14 -0
  120. package/dist/esm/wip/wms-feature-info-loader.js.map +1 -0
  121. package/dist/esm/wip/wms-layer-description-loader.js +14 -0
  122. package/dist/esm/wip/wms-layer-description-loader.js.map +1 -0
  123. package/dist/esm/wip/wms-layer-description-loader.md.disabled.md +47 -0
  124. package/dist/esm/wip/wmts-capabilities-loader.js +25 -0
  125. package/dist/esm/wip/wmts-capabilities-loader.js.map +1 -0
  126. package/dist/esm/wms-capabilities-loader.js +6 -4
  127. package/dist/esm/wms-capabilities-loader.js.map +1 -1
  128. package/dist/esm/wms-error-loader.js +40 -0
  129. package/dist/esm/wms-error-loader.js.map +1 -0
  130. package/dist/index.d.ts +27 -0
  131. package/dist/index.d.ts.map +1 -0
  132. package/dist/index.js +33 -0
  133. package/dist/lerc-loader.d.ts +30 -0
  134. package/dist/lerc-loader.d.ts.map +1 -0
  135. package/dist/lerc-loader.js +56 -0
  136. package/dist/lib/data-sources/adhoc-image-service.d.ts +24 -0
  137. package/dist/lib/data-sources/adhoc-image-service.d.ts.map +1 -0
  138. package/dist/lib/data-sources/adhoc-image-service.js +46 -0
  139. package/dist/lib/data-sources/arcgis-image-service.d.ts +79 -0
  140. package/dist/lib/data-sources/arcgis-image-service.d.ts.map +1 -0
  141. package/dist/lib/data-sources/arcgis-image-service.js +85 -0
  142. package/dist/lib/data-sources/create-image-source.d.ts +16 -0
  143. package/dist/lib/data-sources/create-image-source.d.ts.map +1 -0
  144. package/dist/lib/data-sources/create-image-source.js +39 -0
  145. package/dist/lib/data-sources/image-services/arcgis-image-service.d.ts +71 -0
  146. package/dist/lib/data-sources/image-services/arcgis-image-service.d.ts.map +1 -0
  147. package/dist/lib/data-sources/image-services/arcgis-image-service.js +85 -0
  148. package/dist/lib/data-sources/image-services/image-service.d.ts +39 -0
  149. package/dist/lib/data-sources/image-services/image-service.d.ts.map +1 -0
  150. package/dist/lib/data-sources/image-services/image-service.js +82 -0
  151. package/dist/lib/data-sources/image-services/wms-service.d.ts +188 -0
  152. package/dist/lib/data-sources/image-services/wms-service.d.ts.map +1 -0
  153. package/dist/lib/data-sources/image-services/wms-service.js +218 -0
  154. package/dist/lib/data-sources/image-source.d.ts +73 -0
  155. package/dist/lib/data-sources/image-source.d.ts.map +1 -0
  156. package/dist/lib/data-sources/image-source.js +12 -0
  157. package/dist/lib/gml/deep-strict-equal.d.ts +3 -0
  158. package/dist/lib/gml/deep-strict-equal.d.ts.map +1 -0
  159. package/dist/lib/gml/deep-strict-equal.js +119 -0
  160. package/dist/lib/gml/parse-gml.d.ts +28 -0
  161. package/dist/lib/gml/parse-gml.d.ts.map +1 -0
  162. package/dist/lib/gml/parse-gml.js +371 -0
  163. package/dist/lib/lerc/lerc-types.d.ts +30 -0
  164. package/dist/lib/lerc/lerc-types.d.ts.map +1 -0
  165. package/dist/lib/lerc/lerc-types.js +3 -0
  166. package/dist/lib/wcs/parse-wcs.d.ts +7 -0
  167. package/dist/lib/wcs/parse-wcs.d.ts.map +1 -0
  168. package/dist/lib/wcs/parse-wcs.js +36 -0
  169. package/dist/lib/wcs/wcs-types.d.ts +73 -0
  170. package/dist/lib/wcs/wcs-types.d.ts.map +1 -0
  171. package/dist/lib/wcs/wcs-types.js +3 -0
  172. package/dist/lib/wfs/parse-wfs.d.ts +7 -0
  173. package/dist/lib/wfs/parse-wfs.d.ts.map +1 -0
  174. package/dist/lib/wfs/parse-wfs.js +36 -0
  175. package/dist/lib/wfs/wfs-types.d.ts +73 -0
  176. package/dist/lib/wfs/wfs-types.d.ts.map +1 -0
  177. package/dist/lib/wfs/wfs-types.js +3 -0
  178. package/dist/lib/wms/parse-wms.d.ts +24 -0
  179. package/dist/lib/wms/parse-wms.d.ts.map +1 -0
  180. package/dist/lib/wms/parse-wms.js +115 -0
  181. package/dist/lib/wms/wms-types.d.ts +100 -0
  182. package/dist/lib/wms/wms-types.d.ts.map +1 -0
  183. package/dist/lib/wms/wms-types.js +1908 -0
  184. package/dist/lib/wmts/parse-wmts.d.ts +7 -0
  185. package/dist/lib/wmts/parse-wmts.d.ts.map +1 -0
  186. package/dist/lib/wmts/parse-wmts.js +36 -0
  187. package/dist/lib/wmts/wmts-types.d.ts +73 -0
  188. package/dist/lib/wmts/wmts-types.d.ts.map +1 -0
  189. package/dist/lib/wmts/wmts-types.js +3 -0
  190. package/dist/wip/arcgis-feature-service.d.ts +56 -0
  191. package/dist/wip/arcgis-feature-service.d.ts.map +1 -0
  192. package/dist/wip/arcgis-feature-service.js +28 -0
  193. package/dist/wip/data-source.d.ts +54 -0
  194. package/dist/wip/data-source.d.ts.map +1 -0
  195. package/dist/wip/data-source.js +59 -0
  196. package/dist/wip/gml-loader.d.ts +26 -0
  197. package/dist/wip/gml-loader.d.ts.map +1 -0
  198. package/dist/wip/gml-loader.js +31 -0
  199. package/dist/wip/wcs-capabilities-loader.d.ts +26 -0
  200. package/dist/wip/wcs-capabilities-loader.d.ts.map +1 -0
  201. package/dist/wip/wcs-capabilities-loader.js +31 -0
  202. package/dist/wip/wfs-capabilities-loader.d.ts +26 -0
  203. package/dist/wip/wfs-capabilities-loader.d.ts.map +1 -0
  204. package/dist/wip/wfs-capabilities-loader.js +31 -0
  205. package/dist/wip/wms-feature-info-loader.d.ts +22 -0
  206. package/dist/wip/wms-feature-info-loader.d.ts.map +1 -0
  207. package/dist/wip/wms-feature-info-loader.js +17 -0
  208. package/dist/wip/wms-layer-description-loader.d.ts +22 -0
  209. package/dist/wip/wms-layer-description-loader.d.ts.map +1 -0
  210. package/dist/wip/wms-layer-description-loader.js +17 -0
  211. package/dist/wip/wmts-capabilities-loader.d.ts +26 -0
  212. package/dist/wip/wmts-capabilities-loader.d.ts.map +1 -0
  213. package/dist/wip/wmts-capabilities-loader.js +31 -0
  214. package/dist/wms-capabilities-loader.d.ts +26 -0
  215. package/dist/wms-capabilities-loader.d.ts.map +1 -0
  216. package/dist/wms-capabilities-loader.js +31 -0
  217. package/dist/wms-error-loader.d.ts +34 -0
  218. package/dist/wms-error-loader.d.ts.map +1 -0
  219. package/dist/wms-error-loader.js +43 -0
  220. package/package.json +17 -6
  221. package/src/bundle.ts +2 -0
  222. package/src/index.ts +54 -2
  223. package/src/lerc-loader.ts +50 -0
  224. package/src/lib/data-sources/adhoc-image-service.ts +61 -0
  225. package/src/lib/data-sources/arcgis-image-service.ts +146 -0
  226. package/src/lib/data-sources/create-image-source.ts +46 -0
  227. package/src/lib/data-sources/image-services/arcgis-image-service.ts +136 -0
  228. package/src/lib/data-sources/image-services/image-service.ts +105 -0
  229. package/src/lib/data-sources/image-services/wms-service.ts +351 -0
  230. package/src/lib/data-sources/image-source.ts +82 -0
  231. package/src/lib/gml/deep-strict-equal.ts +119 -0
  232. package/src/lib/gml/parse-gml.ts +500 -0
  233. package/src/lib/lerc/lerc-types.ts +43 -0
  234. package/src/lib/wcs/parse-wcs.ts +39 -0
  235. package/src/lib/wcs/wcs-types.ts +77 -0
  236. package/src/lib/wfs/parse-wfs.ts +39 -0
  237. package/src/lib/wfs/wfs-types.ts +78 -0
  238. package/src/lib/wms/parse-wms.ts +142 -0
  239. package/src/{wms-types.ts → lib/wms/wms-types.ts} +76 -24
  240. package/src/lib/wmts/parse-wmts.ts +39 -0
  241. package/src/lib/wmts/wmts-types.ts +77 -0
  242. package/src/wip/arcgis-feature-service.ts +89 -0
  243. package/src/wip/data-source.ts +62 -0
  244. package/src/wip/gml-loader.ts +40 -0
  245. package/src/wip/wcs-capabilities-loader.ts +40 -0
  246. package/src/wip/wfs-capabilities-loader.ts +40 -0
  247. package/src/wip/wms-feature-info-loader.ts +21 -0
  248. package/src/wip/wms-layer-description-loader.md.disabled.md +47 -0
  249. package/src/wip/wms-layer-description-loader.ts +21 -0
  250. package/src/wip/wmts-capabilities-loader.ts +40 -0
  251. package/src/wms-capabilities-loader.ts +10 -8
  252. package/src/wms-error-loader.ts +59 -0
  253. package/dist/es5/lib/parse-wms-capabilities.js +0 -19
  254. package/dist/es5/lib/parse-wms-capabilities.js.map +0 -1
  255. package/dist/esm/lib/parse-wms-capabilities.js +0 -14
  256. package/dist/esm/lib/parse-wms-capabilities.js.map +0 -1
  257. package/src/lib/parse-wms-capabilities.ts +0 -14
@@ -0,0 +1,77 @@
1
+ // loaders.gl, MIT licenses
2
+
3
+ /** All capabilities of a WFS service - response to a WFS `GetCapabilities` data structure extracted from XML */
4
+ export type WFSCapabilities = {
5
+ serviceIdentification: {
6
+ title: string;
7
+ serviceTypeVersion: string;
8
+ serviceType: string;
9
+ };
10
+
11
+ serviceProvider: {
12
+ providerName: string;
13
+ providerSite: string;
14
+ serviceContact: {
15
+ individualName: string;
16
+ positionName: string;
17
+ contactInfo: {
18
+ address: {
19
+ administrativeArea: string;
20
+ city: string;
21
+ country: string;
22
+ deliveryPoint: string;
23
+ electronicMailAddress: string;
24
+ postalCode: string;
25
+ };
26
+ phone: {
27
+ voice: string;
28
+ };
29
+ };
30
+ };
31
+ };
32
+
33
+ operationsMetadata: {
34
+ GetCapabilities: any;
35
+ GetFeatureInfo: any;
36
+ GetTile: any;
37
+ };
38
+
39
+ contents: {
40
+ layers: {
41
+ abstract: string;
42
+ identifier: string;
43
+ title: string;
44
+ formats: string[];
45
+ styles: {
46
+ identifier: string;
47
+ isDefault: string;
48
+ title: string;
49
+ abstract?: string;
50
+ }[];
51
+ bounds: {
52
+ left: number;
53
+ right: number;
54
+ bottom: number;
55
+ top: number;
56
+ };
57
+ tileMatrixSetLinks: {
58
+ tileMatrixSet: string;
59
+ }[];
60
+ tileMatrixSets: {
61
+ identifier: string;
62
+ matrixIds: {
63
+ identifier: string;
64
+ matrixHeight: number;
65
+ matrixWidth: number;
66
+ scaleDenominator: number;
67
+ tileWidth: number;
68
+ tileHeight: number;
69
+ topLeftCorner: {
70
+ lon: number;
71
+ lat: number;
72
+ };
73
+ }[];
74
+ };
75
+ }[];
76
+ };
77
+ };
@@ -0,0 +1,39 @@
1
+ // loaders.gl, MIT license
2
+
3
+ import type {WFSCapabilities} from './wfs-types';
4
+
5
+ import {XMLLoader} from '@loaders.gl/xml';
6
+
7
+ // GetCapabilities
8
+
9
+ /**
10
+ * Parses a typed data structure from raw XML for `GetCapabilities` response
11
+ * @note Error handlings is fairly weak
12
+ */
13
+ export function parseWFSCapabilities(text: string, options): WFSCapabilities {
14
+ // Remove namespaces in XML
15
+ options = {...options, xml: {...options?.xml, removeNSPrefix: true}};
16
+ const parsedXML = XMLLoader.parseTextSync(text, options);
17
+ const xmlCapabilities: any = parsedXML.Capabilities || parsedXML;
18
+ return uncapitalizeKeys(xmlCapabilities);
19
+ }
20
+
21
+ function uncapitalizeKeys(object: any): any {
22
+ if (object && typeof object === 'object') {
23
+ const newObject = {};
24
+ for (const [key, value] of Object.entries(object)) {
25
+ newObject[uncapitalize(key)] = uncapitalizeKeys(value);
26
+ }
27
+ return newObject;
28
+ }
29
+ return object;
30
+ }
31
+
32
+ /**
33
+ * Uncapitalize first letter of a string
34
+ * @param {string} str
35
+ * @returns {string}
36
+ */
37
+ function uncapitalize(str: string): string {
38
+ return typeof str === 'string' ? str.charAt(0).toLowerCase() + str.slice(1) : str;
39
+ }
@@ -0,0 +1,78 @@
1
+ // loaders.gl, MIT licenses
2
+
3
+ /** All capabilities of a WFS service - response to a WFS `GetCapabilities` data structure extracted from XML */
4
+ export type WFSCapabilities = {
5
+ serviceIdentification: {
6
+ title: string;
7
+ serviceTypeVersion: string;
8
+ serviceType: string;
9
+ };
10
+
11
+ serviceProvider: {
12
+ providerName: string;
13
+ providerSite: string;
14
+ serviceContact: {
15
+ individualName: string;
16
+ positionName: string;
17
+ contactInfo: {
18
+ address: {
19
+ administrativeArea: string;
20
+ city: string;
21
+ country: string;
22
+ deliveryPoint: string;
23
+ electronicMailAddress: string;
24
+ postalCode: string;
25
+ };
26
+ phone: {
27
+ voice: string;
28
+ };
29
+ };
30
+ };
31
+ };
32
+
33
+ operationsMetadata: {
34
+ GetCapabilities: any;
35
+ GetFeatureInfo: any;
36
+ GetTile: any;
37
+ };
38
+
39
+ contents: {
40
+ layers: {
41
+ abstract: string;
42
+ identifier: string;
43
+ title: string;
44
+ formats: string[];
45
+ styles: {
46
+ identifier: string;
47
+ isDefault: string;
48
+ title: string;
49
+ abstract?: string;
50
+ }[];
51
+ bounds: {
52
+ left: number;
53
+ right: number;
54
+ bottom: number;
55
+ top: number;
56
+ };
57
+ tileMatrixSetLinks: {
58
+ tileMatrixSet: string;
59
+ }[];
60
+ tileMatrixSets: {
61
+ identifier: string;
62
+ matrixIds: {
63
+ identifier: string;
64
+ matrixHeight: number;
65
+ matrixWidth: number;
66
+ scaleDenominator: number;
67
+ tileWidth: number;
68
+ tileHeight: number;
69
+ topLeftCorner: {
70
+ lon: number;
71
+ lat: number;
72
+ };
73
+ }[];
74
+ };
75
+ }[];
76
+ };
77
+ };
78
+
@@ -0,0 +1,142 @@
1
+ // loaders.gl, MIT license
2
+
3
+ import type {
4
+ WMSCapabilities,
5
+ WMSLayer,
6
+ WMSRequest,
7
+ WMSFeatureInfo,
8
+ WMSLayerDescription
9
+ // WMSFeature,
10
+ // WMSLayerDescription
11
+ } from './wms-types';
12
+
13
+ import {XMLLoader} from '@loaders.gl/xml';
14
+
15
+ // GetCapabilities
16
+
17
+ /**
18
+ * Parses a typed data structure from raw XML for `GetCapabilities` response
19
+ * @note Error handlings is fairly weak
20
+ */
21
+ export function parseWMSCapabilities(text: string, options): WMSCapabilities {
22
+ const parsedXML = XMLLoader.parseTextSync(text, options);
23
+ const xmlCapabilities: any =
24
+ parsedXML.WMT_MS_Capabilities || parsedXML.WMS_Capabilities || parsedXML;
25
+ return extractCapabilities(xmlCapabilities);
26
+ }
27
+
28
+ /** Extract typed capability data from XML */
29
+ function extractCapabilities(xml: any): WMSCapabilities {
30
+ const capabilities: WMSCapabilities = {
31
+ name: xml.Service?.Name || 'unnamed',
32
+ title: xml.Service?.Title,
33
+ keywords: [],
34
+ requests: {},
35
+ layer: extractLayer(xml.Capability?.Layer),
36
+ raw: xml
37
+ };
38
+
39
+ for (const keyword of xml.Service?.KeywordList?.Keyword || []) {
40
+ capabilities.keywords.push(keyword);
41
+ }
42
+
43
+ for (const [name, xmlRequest] of Object.entries(xml.Capability?.Request || {})) {
44
+ capabilities.requests[name] = extractRequest(name, xmlRequest);
45
+ }
46
+
47
+ return capabilities;
48
+ }
49
+
50
+ /** Extract typed request data from XML */
51
+ function extractRequest(name: string, xmlRequest: any): WMSRequest {
52
+ const format: string | string[] = xmlRequest?.Format;
53
+ const mimeTypes: string[] = Array.isArray(format) ? format : [format];
54
+ return {name, mimeTypes};
55
+ }
56
+
57
+ /** Extract request data */
58
+ function extractLayer(xmlLayer: any): WMSLayer {
59
+ const layer: WMSLayer = {
60
+ name: xmlLayer?.Name,
61
+ title: xmlLayer?.Title,
62
+ srs: xmlLayer?.SRS || [],
63
+ layers: []
64
+ };
65
+
66
+ // Single layer is not represented as array in XML
67
+ const xmlLayers = getXMLArray(xmlLayer?.Layer);
68
+
69
+ for (const xmlSubLayer of xmlLayers) {
70
+ layer.layers?.push(extractLayer(xmlSubLayer));
71
+ }
72
+
73
+ return layer;
74
+ }
75
+
76
+ function getXMLArray(xmlValue: any) {
77
+ if (Array.isArray(xmlValue)) {
78
+ return xmlValue;
79
+ }
80
+ if (xmlValue) {
81
+ return [xmlValue];
82
+ }
83
+ return [];
84
+ }
85
+
86
+ // GetFeatureInfo
87
+
88
+ /**
89
+ * Parses a typed data structure from raw XML for `GetFeatureInfo` response
90
+ * @note Error handlings is fairly weak
91
+ */
92
+ export function parseWMSFeatureInfo(text: string, options): WMSFeatureInfo {
93
+ const parsedXML = XMLLoader.parseTextSync(text, options);
94
+ const xmlFeatureInfo: any = parsedXML.FeatureInfoResponse?.FIELDS || [];
95
+
96
+ const xmlFeatures = Array.isArray(xmlFeatureInfo) ? xmlFeatureInfo : [xmlFeatureInfo];
97
+
98
+ return {
99
+ features: xmlFeatures.map((xmlFeature) => extractFeature(xmlFeature))
100
+ };
101
+ }
102
+
103
+ function extractFeature(xmlFeature: any) {
104
+ const xmlFields = xmlFeature || {};
105
+ // TODO - not correct
106
+ return {
107
+ attributes: xmlFields,
108
+ type: '',
109
+ bounds: {bottom: 0, top: 0, left: 0, right: 0}
110
+ };
111
+ }
112
+
113
+ // GetFeatureInfo
114
+
115
+ /**
116
+ * Parses a typed data structure from raw XML for `GetFeatureInfo` response
117
+ * @note Error handlings is fairly weak
118
+ */
119
+ export function parseWMSLayerDescription(text: string, options): WMSLayerDescription {
120
+ const parsedXML = XMLLoader.parseTextSync(text, options);
121
+ // TODO - implement parser
122
+ return parsedXML as unknown as WMSLayerDescription;
123
+ }
124
+
125
+ /**
126
+ * Extract an error message from WMS error response XML
127
+ * @param text
128
+ * @param options
129
+ * @returns a string with a human readable message
130
+ */
131
+ export function parseWMSError(text: string, options): string {
132
+ const parsedXML = XMLLoader.parseTextSync?.(text, options);
133
+ const serviceExceptionXML =
134
+ parsedXML?.ServiceExceptionReport?.ServiceException ||
135
+ parsedXML?.['ogc:ServiceExceptionReport']?.['ogc:ServiceException'];
136
+ // Sigh, can be either a string or an object
137
+ const message =
138
+ typeof serviceExceptionXML === 'string'
139
+ ? serviceExceptionXML
140
+ : serviceExceptionXML['#text'] || serviceExceptionXML.code || 'Unknown error';
141
+ return message;
142
+ }
@@ -1,35 +1,87 @@
1
1
  // loaders.gl, MIT licenses
2
2
 
3
- export type GetCapabilities = {
4
- request: 'GetCapabilities';
5
- format: string[];
6
- dcpType: unknown;
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 GetMap = {
10
- request: 'GetMap';
11
- format: string[];
12
- dcpType: unknown;
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 GetFeatureInfo = {
16
- request: 'GetFeatureInfo';
17
- format: string[];
18
- dcpType: unknown;
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 GetLegendGraphic = {
22
- request: 'GetLegendGraphic';
23
- format: string[];
24
- dcpType: unknown;
40
+ export type WMSFeature = {
41
+ attributes: Record<string, number | string>;
42
+ type: string;
43
+ bounds: {top: number; bottom: number; left: number; right: number};
25
44
  };
26
45
 
27
- export type GetStyles = {
28
- request: 'GetStyles';
29
- format: string[];
30
- dcpType: unknown;
46
+ // DescribeLayer
47
+
48
+ /** Layer description - response to a WMS `DescribeLayer` request */
49
+ export type WMSLayerDescription = {
50
+ layers: {}[];
31
51
  };
32
52
 
53
+ // // WIP
54
+
55
+ // export type GetCapabilities = {
56
+ // request: 'GetCapabilities';
57
+ // format: string[];
58
+ // dcpType: unknown;
59
+ // };
60
+
61
+ // export type GetMap = {
62
+ // request: 'GetMap';
63
+ // format: string[];
64
+ // dcpType: unknown;
65
+ // };
66
+
67
+ // export type GetFeatureInfo = {
68
+ // request: 'GetFeatureInfo';
69
+ // format: string[];
70
+ // dcpType: unknown;
71
+ // };
72
+
73
+ // export type GetLegendGraphic = {
74
+ // request: 'GetLegendGraphic';
75
+ // format: string[];
76
+ // dcpType: unknown;
77
+ // };
78
+
79
+ // export type GetStyles = {
80
+ // request: 'GetStyles';
81
+ // format: string[];
82
+ // dcpType: unknown;
83
+ // };
84
+
33
85
  /**
34
86
  * <EX_GeographicBoundingBox>
35
87
  * <westBoundLongitude>-180</westBoundLongitude>
@@ -75,7 +127,7 @@ export type Style = {
75
127
  };
76
128
  };
77
129
 
78
- export type Capability = GetCapabilities | GetMap;
130
+ // export type Capability = GetCapabilities | GetMap;
79
131
 
80
132
  export type WMSService = {
81
133
  rawData: unknown;
@@ -86,9 +138,9 @@ export type WMSService = {
86
138
  maxWidth?: number;
87
139
  maxHeight?: number;
88
140
  capabilities: {
89
- getCapabilities: GetCapabilities;
90
- getMap: GetMap;
91
- getFeatureInfo?: GetFeatureInfo;
141
+ // getCapabilities: GetCapabilities;
142
+ // getMap: GetMap;
143
+ // getFeatureInfo?: GetFeatureInfo;
92
144
  };
93
145
 
94
146
  untypedData: unknown; // The raw, untyped JSON converted from XML
@@ -0,0 +1,39 @@
1
+ // loaders.gl, MIT license
2
+
3
+ import type {WMTSCapabilities} from './wmts-types';
4
+
5
+ import {XMLLoader} from '@loaders.gl/xml';
6
+
7
+ // GetCapabilities
8
+
9
+ /**
10
+ * Parses a typed data structure from raw XML for `GetCapabilities` response
11
+ * @note Error handlings is fairly weak
12
+ */
13
+ export function parseWMTSCapabilities(text: string, options): WMTSCapabilities {
14
+ // Remove namespaces in XML
15
+ options = {...options, xml: {...options?.xml, removeNSPrefix: true}};
16
+ const parsedXML = XMLLoader.parseTextSync(text, options);
17
+ const xmlCapabilities: any = parsedXML.Capabilities || parsedXML;
18
+ return uncapitalizeKeys(xmlCapabilities);
19
+ }
20
+
21
+ function uncapitalizeKeys(object: any): any {
22
+ if (object && typeof object === 'object') {
23
+ const newObject = {};
24
+ for (const [key, value] of Object.entries(object)) {
25
+ newObject[uncapitalize(key)] = uncapitalizeKeys(value);
26
+ }
27
+ return newObject;
28
+ }
29
+ return object;
30
+ }
31
+
32
+ /**
33
+ * Uncapitalize first letter of a string
34
+ * @param {string} str
35
+ * @returns {string}
36
+ */
37
+ function uncapitalize(str: string): string {
38
+ return typeof str === 'string' ? str.charAt(0).toLowerCase() + str.slice(1) : str;
39
+ }
@@ -0,0 +1,77 @@
1
+ // loaders.gl, MIT licenses
2
+
3
+ /** All capabilities of a WMTS service - response to a WMTS `GetCapabilities` data structure extracted from XML */
4
+ export type WMTSCapabilities = {
5
+ serviceIdentification: {
6
+ title: string;
7
+ serviceTypeVersion: string;
8
+ serviceType: string;
9
+ };
10
+
11
+ serviceProvider: {
12
+ providerName: string;
13
+ providerSite: string;
14
+ serviceContact: {
15
+ individualName: string;
16
+ positionName: string;
17
+ contactInfo: {
18
+ address: {
19
+ administrativeArea: string;
20
+ city: string;
21
+ country: string;
22
+ deliveryPoint: string;
23
+ electronicMailAddress: string;
24
+ postalCode: string;
25
+ };
26
+ phone: {
27
+ voice: string;
28
+ };
29
+ };
30
+ };
31
+ };
32
+
33
+ operationsMetadata: {
34
+ GetCapabilities: any;
35
+ GetFeatureInfo: any;
36
+ GetTile: any;
37
+ };
38
+
39
+ contents: {
40
+ layers: {
41
+ abstract: string;
42
+ identifier: string;
43
+ title: string;
44
+ formats: string[];
45
+ styles: {
46
+ identifier: string;
47
+ isDefault: string;
48
+ title: string;
49
+ abstract?: string;
50
+ }[];
51
+ bounds: {
52
+ left: number;
53
+ right: number;
54
+ bottom: number;
55
+ top: number;
56
+ };
57
+ tileMatrixSetLinks: {
58
+ tileMatrixSet: string;
59
+ }[];
60
+ tileMatrixSets: {
61
+ identifier: string;
62
+ matrixIds: {
63
+ identifier: string;
64
+ matrixHeight: number;
65
+ matrixWidth: number;
66
+ scaleDenominator: number;
67
+ tileWidth: number;
68
+ tileHeight: number;
69
+ topLeftCorner: {
70
+ lon: number;
71
+ lat: number;
72
+ };
73
+ }[];
74
+ };
75
+ }[];
76
+ };
77
+ };
@@ -0,0 +1,89 @@
1
+ // @ts-nocheck
2
+
3
+ import {LoaderOptions} from '@loaders.gl/loader-utils';
4
+ // import {GeoJSONLoader} from '@loaders.gl/geojson';
5
+
6
+ type FetchLike = (url: string, options?: RequestInit) => Promise<Response>;
7
+
8
+ export type ArcGISImageServiceQueryOptions = {
9
+ returnGeometry: boolean;
10
+ where: '1%3D1';
11
+ outSR: 4326;
12
+ outFields: string | '*';
13
+ inSR: 4326;
14
+ geometry: `${-90}%2C+${30}%2C+${-70}%2C+${50}`;
15
+ geometryType: 'esriGeometryEnvelope'; // TODO - look up valid values in Esri docs
16
+ spatialRel: 'esriSpatialRelIntersects'; // TODO - look up valid values in Esri docs
17
+ geometryPrecision: number; // TODO - look up valid values in Esri docs
18
+ resultType: 'tile'; // TODO - look up valid values in Esri docs
19
+ f?: 'geojson'; // TODO - look up valid values in Esri docs
20
+ }
21
+
22
+ // const DEFAULT_QUERY_OPTIONS: Required<ArcGISImageServiceQueryOptions> = {
23
+ // returnGeometry:true,
24
+ // where: '1%3D1',
25
+ // outSR: 4326,
26
+ // outFields: '*',
27
+ // inSR: 4326,
28
+ // geometry: `${-90}%2C+${30}%2C+${-70}%2C+${50}`,
29
+ // geometryType: 'esriGeometryEnvelope',
30
+ // spatialRel: 'esriSpatialRelIntersects',
31
+ // geometryPrecision: 6,
32
+ // resultType: 'tile',
33
+ // f: 'geojson'
34
+ // };
35
+
36
+ export type ArcGISFeatureServiceProps = ArcGISImageServiceQueryOptions & {
37
+ url: string;
38
+ loadOptions?: LoaderOptions;
39
+ fetch?: typeof fetch | FetchLike;
40
+ };
41
+
42
+ export class ArcGISFeatureService {
43
+ url: string;
44
+ loadOptions: LoaderOptions;
45
+ fetch: typeof fetch | FetchLike;
46
+
47
+ constructor(props: ArcGISFeatureServiceProps) {
48
+ this.url = props.url;
49
+ this.loadOptions = props.loadOptions || {};
50
+ this.fetch = props.fetch || fetch;
51
+ }
52
+
53
+ // URL creators
54
+
55
+ metadataURL(options: {parameters?: Record<string, unknown>}): string {
56
+ return this.getUrl({...options});
57
+ }
58
+
59
+ /**
60
+ * Form a URL to an ESRI FeatureServer
61
+ // https://services2.arcgis.com/CcI36Pduqd0OR4W9/ArcGIS/rest/services/Bicycle_Routes_Public/FeatureServer/0/query?
62
+ // returnGeometry=true&where=1%3D1&outSR=4326&outFields=*&inSR=4326&geometry=${-90}%2C+${30}%2C+${-70}%2C+${50}&
63
+ // geometryType=esriGeometryEnvelope&spatialRel=esriSpatialRelIntersects&geometryPrecision=6&resultType=tile&f=geojson`
64
+ */
65
+ exportImageURL(options: {
66
+ boundingBox: [number, number, number, number];
67
+ boundingBoxSR?: string;
68
+ width: number;
69
+ height: number;
70
+ imageSR?: string;
71
+ time?: never;
72
+ f?: 'geojson';
73
+ resultType?: 'tile';
74
+ noData?: never;
75
+ noDataInterpretation?: 'esriNoDataMatchAny';
76
+ interpolation?: '+RSP_NearestNeighbor';
77
+ compression?: never
78
+ compressionQuality?: never;
79
+ bandIds?: never;
80
+ mosaicRule?: never;
81
+ renderingRule?: never;
82
+ f?: 'image';
83
+ }): string {
84
+ const {boundingBox} = options;
85
+ // const bbox = `bbox=${boundingBox[0]},${boundingBox[1]},${boundingBox[2]},${boundingBox[3]}`;
86
+ // const size = `size=${width},${height}`
87
+ return this.getUrl({path: 'exportImage', });
88
+ }
89
+ }