@loaders.gl/wms 3.3.0-alpha.9 → 3.3.1

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 (266) 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 +4080 -2009
  5. package/dist/es5/index.js +63 -7
  6. package/dist/es5/index.js.map +1 -1
  7. package/dist/es5/lerc-loader.js +74 -0
  8. package/dist/es5/lerc-loader.js.map +1 -0
  9. package/dist/es5/lib/data-sources/adhoc-image-service.js +129 -0
  10. package/dist/es5/lib/data-sources/adhoc-image-service.js.map +1 -0
  11. package/dist/es5/lib/data-sources/arcgis-image-service.js +180 -0
  12. package/dist/es5/lib/data-sources/arcgis-image-service.js.map +1 -0
  13. package/dist/es5/lib/data-sources/create-image-source.js +45 -0
  14. package/dist/es5/lib/data-sources/create-image-source.js.map +1 -0
  15. package/dist/es5/lib/data-sources/image-services/arcgis-image-service.js +179 -0
  16. package/dist/es5/lib/data-sources/image-services/arcgis-image-service.js.map +1 -0
  17. package/dist/es5/lib/data-sources/image-services/image-service.js +163 -0
  18. package/dist/es5/lib/data-sources/image-services/image-service.js.map +1 -0
  19. package/dist/es5/lib/data-sources/image-services/wms-service.js +400 -0
  20. package/dist/es5/lib/data-sources/image-services/wms-service.js.map +1 -0
  21. package/dist/es5/lib/data-sources/image-source.js +14 -0
  22. package/dist/es5/lib/data-sources/image-source.js.map +1 -0
  23. package/dist/es5/lib/gml/deep-strict-equal.js +64 -0
  24. package/dist/es5/lib/gml/deep-strict-equal.js.map +1 -0
  25. package/dist/es5/lib/gml/parse-gml.js +416 -0
  26. package/dist/es5/lib/gml/parse-gml.js.map +1 -0
  27. package/dist/es5/lib/lerc/lerc-types.js +2 -0
  28. package/dist/es5/lib/lerc/lerc-types.js.map +1 -0
  29. package/dist/es5/lib/wcs/parse-wcs.js +43 -0
  30. package/dist/es5/lib/wcs/parse-wcs.js.map +1 -0
  31. package/dist/es5/lib/wcs/wcs-types.js +2 -0
  32. package/dist/es5/lib/wcs/wcs-types.js.map +1 -0
  33. package/dist/es5/lib/wfs/parse-wfs.js +43 -0
  34. package/dist/es5/lib/wfs/parse-wfs.js.map +1 -0
  35. package/dist/es5/lib/wfs/wfs-types.js +2 -0
  36. package/dist/es5/lib/wfs/wfs-types.js.map +1 -0
  37. package/dist/es5/lib/{parse-wms.js → wms/parse-wms.js} +35 -2
  38. package/dist/es5/lib/wms/parse-wms.js.map +1 -0
  39. package/dist/es5/{wms-types.js → lib/wms/wms-types.js} +0 -0
  40. package/dist/es5/lib/wms/wms-types.js.map +1 -0
  41. package/dist/es5/lib/wmts/parse-wmts.js +43 -0
  42. package/dist/es5/lib/wmts/parse-wmts.js.map +1 -0
  43. package/dist/es5/lib/wmts/wmts-types.js +2 -0
  44. package/dist/es5/lib/wmts/wmts-types.js.map +1 -0
  45. package/dist/es5/wip/arcgis-feature-service.js +45 -0
  46. package/dist/es5/wip/arcgis-feature-service.js.map +1 -0
  47. package/dist/es5/wip/data-source.js +4 -0
  48. package/dist/es5/wip/data-source.js.map +1 -0
  49. package/dist/es5/wip/gml-loader.js +54 -0
  50. package/dist/es5/wip/gml-loader.js.map +1 -0
  51. package/dist/es5/wip/wcs-capabilities-loader.js +54 -0
  52. package/dist/es5/wip/wcs-capabilities-loader.js.map +1 -0
  53. package/dist/es5/wip/wfs-capabilities-loader.js +54 -0
  54. package/dist/es5/wip/wfs-capabilities-loader.js.map +1 -0
  55. package/dist/es5/{wms-feature-info-loader.js → wip/wms-feature-info-loader.js} +3 -3
  56. package/dist/es5/wip/wms-feature-info-loader.js.map +1 -0
  57. package/dist/es5/{wms-layer-description-loader.js → wip/wms-layer-description-loader.js} +5 -5
  58. package/dist/es5/wip/wms-layer-description-loader.js.map +1 -0
  59. package/dist/es5/wip/wms-layer-description-loader.md.disabled.md +47 -0
  60. package/dist/es5/wip/wmts-capabilities-loader.js +54 -0
  61. package/dist/es5/wip/wmts-capabilities-loader.js.map +1 -0
  62. package/dist/es5/wms-capabilities-loader.js +3 -3
  63. package/dist/es5/wms-capabilities-loader.js.map +1 -1
  64. package/dist/es5/wms-error-loader.js +70 -0
  65. package/dist/es5/wms-error-loader.js.map +1 -0
  66. package/dist/esm/index.js +16 -3
  67. package/dist/esm/index.js.map +1 -1
  68. package/dist/esm/lerc-loader.js +25 -0
  69. package/dist/esm/lerc-loader.js.map +1 -0
  70. package/dist/esm/lib/data-sources/adhoc-image-service.js +43 -0
  71. package/dist/esm/lib/data-sources/adhoc-image-service.js.map +1 -0
  72. package/dist/esm/lib/data-sources/arcgis-image-service.js +62 -0
  73. package/dist/esm/lib/data-sources/arcgis-image-service.js.map +1 -0
  74. package/dist/esm/lib/data-sources/create-image-source.js +30 -0
  75. package/dist/esm/lib/data-sources/create-image-source.js.map +1 -0
  76. package/dist/esm/lib/data-sources/image-services/arcgis-image-service.js +61 -0
  77. package/dist/esm/lib/data-sources/image-services/arcgis-image-service.js.map +1 -0
  78. package/dist/esm/lib/data-sources/image-services/image-service.js +72 -0
  79. package/dist/esm/lib/data-sources/image-services/image-service.js.map +1 -0
  80. package/dist/esm/lib/data-sources/image-services/wms-service.js +190 -0
  81. package/dist/esm/lib/data-sources/image-services/wms-service.js.map +1 -0
  82. package/dist/esm/lib/data-sources/image-source.js +4 -0
  83. package/dist/esm/lib/data-sources/image-source.js.map +1 -0
  84. package/dist/esm/lib/gml/deep-strict-equal.js +57 -0
  85. package/dist/esm/lib/gml/deep-strict-equal.js.map +1 -0
  86. package/dist/esm/lib/gml/parse-gml.js +348 -0
  87. package/dist/esm/lib/gml/parse-gml.js.map +1 -0
  88. package/dist/esm/lib/lerc/lerc-types.js +2 -0
  89. package/dist/esm/lib/lerc/lerc-types.js.map +1 -0
  90. package/dist/esm/lib/wcs/parse-wcs.js +32 -0
  91. package/dist/esm/lib/wcs/parse-wcs.js.map +1 -0
  92. package/dist/esm/lib/wcs/wcs-types.js +2 -0
  93. package/dist/esm/lib/wcs/wcs-types.js.map +1 -0
  94. package/dist/esm/lib/wfs/parse-wfs.js +32 -0
  95. package/dist/esm/lib/wfs/parse-wfs.js.map +1 -0
  96. package/dist/esm/lib/wfs/wfs-types.js +2 -0
  97. package/dist/esm/lib/wfs/wfs-types.js.map +1 -0
  98. package/dist/esm/lib/{parse-wms.js → wms/parse-wms.js} +33 -2
  99. package/dist/esm/lib/wms/parse-wms.js.map +1 -0
  100. package/dist/esm/{wms-types.js → lib/wms/wms-types.js} +0 -0
  101. package/dist/esm/lib/wms/wms-types.js.map +1 -0
  102. package/dist/esm/lib/wmts/parse-wmts.js +32 -0
  103. package/dist/esm/lib/wmts/parse-wmts.js.map +1 -0
  104. package/dist/esm/lib/wmts/wmts-types.js +2 -0
  105. package/dist/esm/lib/wmts/wmts-types.js.map +1 -0
  106. package/dist/esm/wip/arcgis-feature-service.js +28 -0
  107. package/dist/esm/wip/arcgis-feature-service.js.map +1 -0
  108. package/dist/esm/wip/data-source.js +2 -0
  109. package/dist/esm/wip/data-source.js.map +1 -0
  110. package/dist/esm/wip/gml-loader.js +25 -0
  111. package/dist/esm/wip/gml-loader.js.map +1 -0
  112. package/dist/esm/wip/wcs-capabilities-loader.js +25 -0
  113. package/dist/esm/wip/wcs-capabilities-loader.js.map +1 -0
  114. package/dist/esm/wip/wfs-capabilities-loader.js +25 -0
  115. package/dist/esm/wip/wfs-capabilities-loader.js.map +1 -0
  116. package/dist/esm/{wms-feature-info-loader.js → wip/wms-feature-info-loader.js} +3 -3
  117. package/dist/esm/wip/wms-feature-info-loader.js.map +1 -0
  118. package/dist/esm/wip/wms-layer-description-loader.js +14 -0
  119. package/dist/esm/wip/wms-layer-description-loader.js.map +1 -0
  120. package/dist/esm/wip/wms-layer-description-loader.md.disabled.md +47 -0
  121. package/dist/esm/wip/wmts-capabilities-loader.js +25 -0
  122. package/dist/esm/wip/wmts-capabilities-loader.js.map +1 -0
  123. package/dist/esm/wms-capabilities-loader.js +3 -3
  124. package/dist/esm/wms-capabilities-loader.js.map +1 -1
  125. package/dist/esm/wms-error-loader.js +40 -0
  126. package/dist/esm/wms-error-loader.js.map +1 -0
  127. package/dist/index.d.ts +27 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +33 -0
  130. package/dist/lerc-loader.d.ts +30 -0
  131. package/dist/lerc-loader.d.ts.map +1 -0
  132. package/dist/lerc-loader.js +56 -0
  133. package/dist/lib/data-sources/adhoc-image-service.d.ts +24 -0
  134. package/dist/lib/data-sources/adhoc-image-service.d.ts.map +1 -0
  135. package/dist/lib/data-sources/adhoc-image-service.js +46 -0
  136. package/dist/lib/data-sources/arcgis-image-service.d.ts +79 -0
  137. package/dist/lib/data-sources/arcgis-image-service.d.ts.map +1 -0
  138. package/dist/lib/data-sources/arcgis-image-service.js +85 -0
  139. package/dist/lib/data-sources/create-image-source.d.ts +16 -0
  140. package/dist/lib/data-sources/create-image-source.d.ts.map +1 -0
  141. package/dist/lib/data-sources/create-image-source.js +39 -0
  142. package/dist/lib/data-sources/image-services/arcgis-image-service.d.ts +71 -0
  143. package/dist/lib/data-sources/image-services/arcgis-image-service.d.ts.map +1 -0
  144. package/dist/lib/data-sources/image-services/arcgis-image-service.js +85 -0
  145. package/dist/lib/data-sources/image-services/image-service.d.ts +39 -0
  146. package/dist/lib/data-sources/image-services/image-service.d.ts.map +1 -0
  147. package/dist/lib/data-sources/image-services/image-service.js +82 -0
  148. package/dist/lib/data-sources/image-services/wms-service.d.ts +188 -0
  149. package/dist/lib/data-sources/image-services/wms-service.d.ts.map +1 -0
  150. package/dist/lib/data-sources/image-services/wms-service.js +218 -0
  151. package/dist/lib/data-sources/image-source.d.ts +73 -0
  152. package/dist/lib/data-sources/image-source.d.ts.map +1 -0
  153. package/dist/lib/data-sources/image-source.js +12 -0
  154. package/dist/lib/gml/deep-strict-equal.d.ts +3 -0
  155. package/dist/lib/gml/deep-strict-equal.d.ts.map +1 -0
  156. package/dist/lib/gml/deep-strict-equal.js +119 -0
  157. package/dist/lib/gml/parse-gml.d.ts +28 -0
  158. package/dist/lib/gml/parse-gml.d.ts.map +1 -0
  159. package/dist/lib/gml/parse-gml.js +371 -0
  160. package/dist/lib/lerc/lerc-types.d.ts +30 -0
  161. package/dist/lib/lerc/lerc-types.d.ts.map +1 -0
  162. package/dist/lib/lerc/lerc-types.js +3 -0
  163. package/dist/lib/wcs/parse-wcs.d.ts +7 -0
  164. package/dist/lib/wcs/parse-wcs.d.ts.map +1 -0
  165. package/dist/lib/wcs/parse-wcs.js +36 -0
  166. package/dist/lib/wcs/wcs-types.d.ts +73 -0
  167. package/dist/lib/wcs/wcs-types.d.ts.map +1 -0
  168. package/dist/lib/wcs/wcs-types.js +3 -0
  169. package/dist/lib/wfs/parse-wfs.d.ts +7 -0
  170. package/dist/lib/wfs/parse-wfs.d.ts.map +1 -0
  171. package/dist/lib/wfs/parse-wfs.js +36 -0
  172. package/dist/lib/wfs/wfs-types.d.ts +73 -0
  173. package/dist/lib/wfs/wfs-types.d.ts.map +1 -0
  174. package/dist/lib/wfs/wfs-types.js +3 -0
  175. package/dist/lib/wms/parse-wms.d.ts +24 -0
  176. package/dist/lib/wms/parse-wms.d.ts.map +1 -0
  177. package/dist/lib/wms/parse-wms.js +115 -0
  178. package/dist/lib/wms/wms-types.d.ts +100 -0
  179. package/dist/lib/wms/wms-types.d.ts.map +1 -0
  180. package/dist/lib/wms/wms-types.js +1908 -0
  181. package/dist/lib/wmts/parse-wmts.d.ts +7 -0
  182. package/dist/lib/wmts/parse-wmts.d.ts.map +1 -0
  183. package/dist/lib/wmts/parse-wmts.js +36 -0
  184. package/dist/lib/wmts/wmts-types.d.ts +73 -0
  185. package/dist/lib/wmts/wmts-types.d.ts.map +1 -0
  186. package/dist/lib/wmts/wmts-types.js +3 -0
  187. package/dist/wip/arcgis-feature-service.d.ts +56 -0
  188. package/dist/wip/arcgis-feature-service.d.ts.map +1 -0
  189. package/dist/wip/arcgis-feature-service.js +28 -0
  190. package/dist/wip/data-source.d.ts +54 -0
  191. package/dist/wip/data-source.d.ts.map +1 -0
  192. package/dist/wip/data-source.js +59 -0
  193. package/dist/wip/gml-loader.d.ts +26 -0
  194. package/dist/wip/gml-loader.d.ts.map +1 -0
  195. package/dist/wip/gml-loader.js +31 -0
  196. package/dist/wip/wcs-capabilities-loader.d.ts +26 -0
  197. package/dist/wip/wcs-capabilities-loader.d.ts.map +1 -0
  198. package/dist/wip/wcs-capabilities-loader.js +31 -0
  199. package/dist/wip/wfs-capabilities-loader.d.ts +26 -0
  200. package/dist/wip/wfs-capabilities-loader.d.ts.map +1 -0
  201. package/dist/wip/wfs-capabilities-loader.js +31 -0
  202. package/dist/wip/wms-feature-info-loader.d.ts +22 -0
  203. package/dist/wip/wms-feature-info-loader.d.ts.map +1 -0
  204. package/dist/wip/wms-feature-info-loader.js +17 -0
  205. package/dist/wip/wms-layer-description-loader.d.ts +22 -0
  206. package/dist/wip/wms-layer-description-loader.d.ts.map +1 -0
  207. package/dist/wip/wms-layer-description-loader.js +17 -0
  208. package/dist/wip/wmts-capabilities-loader.d.ts +26 -0
  209. package/dist/wip/wmts-capabilities-loader.d.ts.map +1 -0
  210. package/dist/wip/wmts-capabilities-loader.js +31 -0
  211. package/dist/wms-capabilities-loader.d.ts +26 -0
  212. package/dist/wms-capabilities-loader.d.ts.map +1 -0
  213. package/dist/wms-capabilities-loader.js +31 -0
  214. package/dist/wms-error-loader.d.ts +34 -0
  215. package/dist/wms-error-loader.d.ts.map +1 -0
  216. package/dist/wms-error-loader.js +43 -0
  217. package/package.json +17 -6
  218. package/src/index.ts +51 -6
  219. package/src/lerc-loader.ts +50 -0
  220. package/src/lib/data-sources/adhoc-image-service.ts +61 -0
  221. package/src/lib/data-sources/arcgis-image-service.ts +146 -0
  222. package/src/lib/data-sources/create-image-source.ts +46 -0
  223. package/src/lib/data-sources/image-services/arcgis-image-service.ts +136 -0
  224. package/src/lib/data-sources/image-services/image-service.ts +105 -0
  225. package/src/lib/data-sources/image-services/wms-service.ts +351 -0
  226. package/src/lib/data-sources/image-source.ts +82 -0
  227. package/src/lib/gml/deep-strict-equal.ts +119 -0
  228. package/src/lib/gml/parse-gml.ts +500 -0
  229. package/src/lib/lerc/lerc-types.ts +43 -0
  230. package/src/lib/wcs/parse-wcs.ts +39 -0
  231. package/src/lib/wcs/wcs-types.ts +77 -0
  232. package/src/lib/wfs/parse-wfs.ts +39 -0
  233. package/src/lib/wfs/wfs-types.ts +78 -0
  234. package/src/lib/{parse-wms.ts → wms/parse-wms.ts} +54 -4
  235. package/src/{wms-types.ts → lib/wms/wms-types.ts} +3 -1
  236. package/src/lib/wmts/parse-wmts.ts +39 -0
  237. package/src/lib/wmts/wmts-types.ts +77 -0
  238. package/src/wip/arcgis-feature-service.ts +89 -0
  239. package/src/{lib/data-sources/image-data-source.ts → wip/data-source.ts} +20 -42
  240. package/src/wip/gml-loader.ts +40 -0
  241. package/src/wip/wcs-capabilities-loader.ts +40 -0
  242. package/src/wip/wfs-capabilities-loader.ts +40 -0
  243. package/src/{wms-feature-info-loader.ts → wip/wms-feature-info-loader.ts} +3 -3
  244. package/src/wip/wms-layer-description-loader.md.disabled.md +47 -0
  245. package/src/{wms-layer-description-loader.ts → wip/wms-layer-description-loader.ts} +6 -6
  246. package/src/wip/wmts-capabilities-loader.ts +40 -0
  247. package/src/wms-capabilities-loader.ts +2 -2
  248. package/src/wms-error-loader.ts +59 -0
  249. package/dist/es5/lib/data-sources/image-data-source.js +0 -4
  250. package/dist/es5/lib/data-sources/image-data-source.js.map +0 -1
  251. package/dist/es5/lib/data-sources/wms-data-source.js +0 -223
  252. package/dist/es5/lib/data-sources/wms-data-source.js.map +0 -1
  253. package/dist/es5/lib/parse-wms.js.map +0 -1
  254. package/dist/es5/wms-feature-info-loader.js.map +0 -1
  255. package/dist/es5/wms-layer-description-loader.js.map +0 -1
  256. package/dist/es5/wms-types.js.map +0 -1
  257. package/dist/esm/lib/data-sources/image-data-source.js +0 -2
  258. package/dist/esm/lib/data-sources/image-data-source.js.map +0 -1
  259. package/dist/esm/lib/data-sources/wms-data-source.js +0 -70
  260. package/dist/esm/lib/data-sources/wms-data-source.js.map +0 -1
  261. package/dist/esm/lib/parse-wms.js.map +0 -1
  262. package/dist/esm/wms-feature-info-loader.js.map +0 -1
  263. package/dist/esm/wms-layer-description-loader.js +0 -14
  264. package/dist/esm/wms-layer-description-loader.js.map +0 -1
  265. package/dist/esm/wms-types.js.map +0 -1
  266. package/src/lib/data-sources/wms-data-source.ts +0 -99
@@ -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
+
@@ -4,10 +4,11 @@ import type {
4
4
  WMSCapabilities,
5
5
  WMSLayer,
6
6
  WMSRequest,
7
- WMSFeatureInfo
7
+ WMSFeatureInfo,
8
+ WMSLayerDescription
8
9
  // WMSFeature,
9
10
  // WMSLayerDescription
10
- } from '../wms-types';
11
+ } from './wms-types';
11
12
 
12
13
  import {XMLLoader} from '@loaders.gl/xml';
13
14
 
@@ -62,13 +63,26 @@ function extractLayer(xmlLayer: any): WMSLayer {
62
63
  layers: []
63
64
  };
64
65
 
65
- for (const xmlSubLayer of xmlLayer?.Layer || []) {
66
+ // Single layer is not represented as array in XML
67
+ const xmlLayers = getXMLArray(xmlLayer?.Layer);
68
+
69
+ for (const xmlSubLayer of xmlLayers) {
66
70
  layer.layers?.push(extractLayer(xmlSubLayer));
67
71
  }
68
72
 
69
73
  return layer;
70
74
  }
71
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
+
72
86
  // GetFeatureInfo
73
87
 
74
88
  /**
@@ -88,5 +102,41 @@ export function parseWMSFeatureInfo(text: string, options): WMSFeatureInfo {
88
102
 
89
103
  function extractFeature(xmlFeature: any) {
90
104
  const xmlFields = xmlFeature || {};
91
- return {attributes: xmlFields};
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;
92
142
  }
@@ -39,13 +39,15 @@ export type WMSFeatureInfo = {
39
39
 
40
40
  export type WMSFeature = {
41
41
  attributes: Record<string, number | string>;
42
+ type: string;
43
+ bounds: {top: number; bottom: number; left: number; right: number};
42
44
  };
43
45
 
44
46
  // DescribeLayer
45
47
 
46
48
  /** Layer description - response to a WMS `DescribeLayer` request */
47
49
  export type WMSLayerDescription = {
48
- // layers: {}[];
50
+ layers: {}[];
49
51
  };
50
52
 
51
53
  // // WIP
@@ -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
+ }
@@ -1,52 +1,16 @@
1
1
  // loaders.gl, MIT license
2
2
 
3
- /*
4
- import {ImageType} from '@loaders.gl/images';
3
+ /** General data source class */
4
+ // export abstract class DataSource {};
5
+ // export type DataSourceMetadata = {};
5
6
 
6
- /** General data source class *
7
- export abstract class DataSource {};
7
+ // ImageSource
8
+
9
+ // Tile Source
8
10
 
9
11
  /** Data source that serves data by tile index *
10
12
  export abstract class TileDataSource extends DataSource {};
11
13
 
12
- export type ImageFeatureInfo = {};
13
-
14
- export type ImageLayerInfo = {};
15
-
16
- export type ImageDataSourceCapabilities = {}
17
-
18
- /**
19
- * ImageDataSource - data sources that allow data to be queried by (geospatial) extents
20
- * @note
21
- * - If geospatial, bounding box is expected to be in web mercator coordinates
22
- *
23
- export abstract class ImageDataSource extends DataSource {
24
- abstract getCapabilities(): Promise<ImageDataSourceCapabilities>;
25
- abstract getImage({boundingBox, width, height, layers, parameters}): Promise<ImageType>;
26
- getFeatureInfo({layers, parameters}): Promise<ImageFeatureInfo> {
27
- throw new Error('not implemented');
28
- }
29
- getLayerInfo({layers, parameters}): Promise<ImageLayerInfo> {
30
- throw new Error('not implemented');
31
- }
32
- getLegendImage({layers, parameters}): Promise<ImageType> {
33
- throw new Error('not implemented');
34
- }
35
- }
36
-
37
- // Vector Tile Data Source
38
-
39
- export type VectorTileDataSourceCapabilities = {
40
- // check tile.json
41
- }
42
-
43
- export type VectorTile = Record<string, any>;
44
-
45
- export abstract class VectorTileDataSource extends TileDataSource {
46
- abstract getCapabilities(): Promise<VectorTileDataSourceCapabilities>;
47
- abstract getTile({x, y, z, width, height, layers, parameters}): Promise<VectorTile>;
48
- }
49
-
50
14
  // Image Tile Data Source
51
15
 
52
16
  export type ImageTileDataSourceCapabilities = {
@@ -81,4 +45,18 @@ export abstract class ImageTileDataSource extends TileDataSource {
81
45
  return [0, 0, 1, 1];
82
46
  }
83
47
  }
48
+
49
+ // Vector Tile Source
50
+
51
+ export type VectorTileDataSourceCapabilities = {
52
+ // check tile.json
53
+ }
54
+
55
+ export type VectorTile = Record<string, any>;
56
+
57
+ export abstract class VectorTileDataSource extends TileDataSource {
58
+ abstract getCapabilities(): Promise<VectorTileDataSourceCapabilities>;
59
+ abstract getTile({x, y, z, width, height, layers, parameters}): Promise<VectorTile>;
60
+ }
61
+
84
62
  */
@@ -0,0 +1,40 @@
1
+ // loaders.gl, MIT license
2
+
3
+ import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';
4
+ import {parseGML} from '../lib/gml/parse-gml';
5
+
6
+ // __VERSION__ is injected by babel-plugin-version-inline
7
+ // @ts-ignore TS2304: Cannot find name '__VERSION__'.
8
+ const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
9
+
10
+ export type GMLLoaderOptions = LoaderOptions & {
11
+ gml?: {};
12
+ };
13
+
14
+ /**
15
+ * Loader for the response to the GML GetCapability request
16
+ */
17
+ export const GMLLoader = {
18
+ name: 'GML',
19
+ id: 'gml',
20
+
21
+ module: 'wms',
22
+ version: VERSION,
23
+ worker: false,
24
+ extensions: ['xml'],
25
+ mimeTypes: ['application/vnd.ogc.gml_xml', 'application/xml', 'text/xml'],
26
+ testText: testXMLFile,
27
+ options: {
28
+ gml: {}
29
+ },
30
+ parse: async (arrayBuffer: ArrayBuffer, options?: GMLLoaderOptions) =>
31
+ parseGML(new TextDecoder().decode(arrayBuffer), options),
32
+ parseTextSync: (text: string, options?: GMLLoaderOptions) => parseGML(text, options)
33
+ };
34
+
35
+ function testXMLFile(text: string): boolean {
36
+ // TODO - There could be space first.
37
+ return text.startsWith('<?xml');
38
+ }
39
+
40
+ export const _typecheckGMLLoader: LoaderWithParser = GMLLoader;
@@ -0,0 +1,40 @@
1
+ // loaders.gl, MIT license
2
+
3
+ import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';
4
+ import {parseWFSCapabilities} from '../lib/wcs/parse-wcs';
5
+
6
+ // __VERSION__ is injected by babel-plugin-version-inline
7
+ // @ts-ignore TS2304: Cannot find name '__VERSION__'.
8
+ const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
9
+
10
+ export type WCSLoaderOptions = LoaderOptions & {
11
+ wcs?: {};
12
+ };
13
+
14
+ /**
15
+ * Loader for the response to the WCS GetCapability request
16
+ */
17
+ export const WCSCapabilitiesLoader = {
18
+ id: 'wcs-capabilities',
19
+ name: 'WFS Capabilities',
20
+
21
+ module: 'wms',
22
+ version: VERSION,
23
+ worker: false,
24
+ extensions: ['xml'],
25
+ mimeTypes: ['application/vnd.ogc.wcs_xml', 'application/xml', 'text/xml'],
26
+ testText: testXMLFile,
27
+ options: {
28
+ wms: {}
29
+ },
30
+ parse: async (arrayBuffer: ArrayBuffer, options?: WCSLoaderOptions) =>
31
+ parseWFSCapabilities(new TextDecoder().decode(arrayBuffer), options),
32
+ parseTextSync: (text: string, options?: WCSLoaderOptions) => parseWFSCapabilities(text, options)
33
+ };
34
+
35
+ function testXMLFile(text: string): boolean {
36
+ // TODO - There could be space first.
37
+ return text.startsWith('<?xml');
38
+ }
39
+
40
+ export const _typecheckWFSCapabilitiesLoader: LoaderWithParser = WCSCapabilitiesLoader;