@loaders.gl/wms 3.4.0-alpha.1 → 3.4.0-alpha.2

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 (404) hide show
  1. package/dist/csw-capabilities-loader.d.ts +29 -0
  2. package/dist/csw-capabilities-loader.d.ts.map +1 -0
  3. package/dist/csw-capabilities-loader.js +31 -0
  4. package/dist/csw-domain-loader.d.ts +28 -0
  5. package/dist/csw-domain-loader.d.ts.map +1 -0
  6. package/dist/csw-domain-loader.js +31 -0
  7. package/dist/csw-records-loader.d.ts +12 -0
  8. package/dist/csw-records-loader.d.ts.map +1 -0
  9. package/dist/csw-records-loader.js +30 -0
  10. package/dist/dist.min.js +3781 -4001
  11. package/dist/es5/csw-capabilities-loader.js +55 -0
  12. package/dist/es5/csw-capabilities-loader.js.map +1 -0
  13. package/dist/es5/csw-domain-loader.js +54 -0
  14. package/dist/es5/csw-domain-loader.js.map +1 -0
  15. package/dist/es5/csw-records-loader.js +52 -0
  16. package/dist/es5/csw-records-loader.js.map +1 -0
  17. package/dist/es5/{wip/gml-loader.js → gml-loader.js} +3 -3
  18. package/dist/es5/gml-loader.js.map +1 -0
  19. package/dist/es5/index.js +43 -8
  20. package/dist/es5/index.js.map +1 -1
  21. package/dist/es5/lerc-loader.js +1 -1
  22. package/dist/es5/lerc-loader.js.map +1 -1
  23. package/dist/es5/lib/{data-sources/create-image-source.js → create-image-source.js} +4 -4
  24. package/dist/es5/lib/create-image-source.js.map +1 -0
  25. package/dist/es5/lib/parsers/csw/parse-csw-capabilities.js +24 -0
  26. package/dist/es5/lib/parsers/csw/parse-csw-capabilities.js.map +1 -0
  27. package/dist/es5/lib/parsers/csw/parse-csw-domain.js +42 -0
  28. package/dist/es5/lib/parsers/csw/parse-csw-domain.js.map +1 -0
  29. package/dist/es5/lib/parsers/csw/parse-csw-records.js +76 -0
  30. package/dist/es5/lib/parsers/csw/parse-csw-records.js.map +1 -0
  31. package/dist/es5/lib/parsers/csw/parse-exception-report.js +18 -0
  32. package/dist/es5/lib/parsers/csw/parse-exception-report.js.map +1 -0
  33. package/dist/es5/lib/parsers/gml/deep-strict-equal.js.map +1 -0
  34. package/dist/es5/lib/parsers/gml/parse-gml.js.map +1 -0
  35. package/dist/es5/lib/parsers/lerc/lerc-types.js.map +1 -0
  36. package/dist/es5/lib/{wms/parse-wms.js → parsers/wms/parse-wms-capabilities.js} +1 -42
  37. package/dist/es5/lib/parsers/wms/parse-wms-capabilities.js.map +1 -0
  38. package/dist/es5/lib/parsers/wms/parse-wms-error.js +16 -0
  39. package/dist/es5/lib/parsers/wms/parse-wms-error.js.map +1 -0
  40. package/dist/es5/lib/parsers/wms/parse-wms-features.js +33 -0
  41. package/dist/es5/lib/parsers/wms/parse-wms-features.js.map +1 -0
  42. package/dist/es5/lib/parsers/wms/parse-wms-layer-description.js +13 -0
  43. package/dist/es5/lib/parsers/wms/parse-wms-layer-description.js.map +1 -0
  44. package/dist/es5/lib/{data-sources/image-services → services/arcgis}/arcgis-image-service.js +36 -29
  45. package/dist/es5/lib/services/arcgis/arcgis-image-service.js.map +1 -0
  46. package/dist/es5/lib/services/arcgis/arcgis-server.js +115 -0
  47. package/dist/es5/lib/services/arcgis/arcgis-server.js.map +1 -0
  48. package/dist/es5/lib/{data-sources/adhoc-image-service.js → services/generic/image-service.js} +22 -19
  49. package/dist/es5/lib/services/generic/image-service.js.map +1 -0
  50. package/dist/es5/lib/services/generic/tile-service.js +2 -0
  51. package/dist/es5/lib/services/generic/tile-service.js.map +1 -0
  52. package/dist/es5/lib/services/ogc/csw-service.js +384 -0
  53. package/dist/es5/lib/services/ogc/csw-service.js.map +1 -0
  54. package/dist/es5/lib/{data-sources/image-services → services/ogc}/wms-service.js +163 -115
  55. package/dist/es5/lib/services/ogc/wms-service.js.map +1 -0
  56. package/dist/es5/lib/services/ogc/wmts-service.ts.disabled +348 -0
  57. package/dist/es5/lib/sources/data-source.js +44 -0
  58. package/dist/es5/lib/sources/data-source.js.map +1 -0
  59. package/dist/es5/lib/sources/image-source.js +26 -0
  60. package/dist/es5/lib/sources/image-source.js.map +1 -0
  61. package/dist/es5/lib/sources/tile-source.js +26 -0
  62. package/dist/es5/lib/sources/tile-source.js.map +1 -0
  63. package/dist/es5/lib/sources/utils/utils.js +40 -0
  64. package/dist/es5/lib/sources/utils/utils.js.map +1 -0
  65. package/dist/es5/{lib/wfs/parse-wfs.js → wip/lib/wcs/parse-wcs-capabilities.js} +7 -29
  66. package/dist/es5/wip/lib/wcs/parse-wcs-capabilities.js.map +1 -0
  67. package/dist/es5/{lib/wcs/parse-wcs.js → wip/lib/wfs/parse-wfs-capabilities.js} +7 -28
  68. package/dist/es5/wip/lib/wfs/parse-wfs-capabilities.js.map +1 -0
  69. package/dist/es5/{lib/wmts/parse-wmts.js → wip/lib/wmts/parse-wmts-capabilities.js} +7 -28
  70. package/dist/es5/wip/lib/wmts/parse-wmts-capabilities.js.map +1 -0
  71. package/dist/es5/wip/wcs-capabilities-loader.js +4 -4
  72. package/dist/es5/wip/wcs-capabilities-loader.js.map +1 -1
  73. package/dist/es5/wip/wfs-capabilities-loader.js +4 -4
  74. package/dist/es5/wip/wfs-capabilities-loader.js.map +1 -1
  75. package/dist/es5/wip/wms-feature-info-loader.js +3 -3
  76. package/dist/es5/wip/wms-feature-info-loader.js.map +1 -1
  77. package/dist/es5/wip/wms-layer-description-loader.js +3 -3
  78. package/dist/es5/wip/wms-layer-description-loader.js.map +1 -1
  79. package/dist/es5/wip/wmts-capabilities-loader.js +10 -4
  80. package/dist/es5/wip/wmts-capabilities-loader.js.map +1 -1
  81. package/dist/es5/wms-capabilities-loader.js +5 -4
  82. package/dist/es5/wms-capabilities-loader.js.map +1 -1
  83. package/dist/es5/wms-error-loader.js +3 -3
  84. package/dist/es5/wms-error-loader.js.map +1 -1
  85. package/dist/esm/csw-capabilities-loader.js +26 -0
  86. package/dist/esm/csw-capabilities-loader.js.map +1 -0
  87. package/dist/esm/csw-domain-loader.js +25 -0
  88. package/dist/esm/csw-domain-loader.js.map +1 -0
  89. package/dist/esm/csw-records-loader.js +24 -0
  90. package/dist/esm/csw-records-loader.js.map +1 -0
  91. package/dist/esm/{wip/gml-loader.js → gml-loader.js} +3 -3
  92. package/dist/esm/gml-loader.js.map +1 -0
  93. package/dist/esm/index.js +16 -8
  94. package/dist/esm/index.js.map +1 -1
  95. package/dist/esm/lerc-loader.js +1 -1
  96. package/dist/esm/lerc-loader.js.map +1 -1
  97. package/dist/esm/lib/{data-sources/create-image-source.js → create-image-source.js} +4 -4
  98. package/dist/esm/lib/create-image-source.js.map +1 -0
  99. package/dist/esm/lib/parsers/csw/parse-csw-capabilities.js +19 -0
  100. package/dist/esm/lib/parsers/csw/parse-csw-capabilities.js.map +1 -0
  101. package/dist/esm/lib/parsers/csw/parse-csw-domain.js +25 -0
  102. package/dist/esm/lib/parsers/csw/parse-csw-domain.js.map +1 -0
  103. package/dist/esm/lib/parsers/csw/parse-csw-records.js +46 -0
  104. package/dist/esm/lib/parsers/csw/parse-csw-records.js.map +1 -0
  105. package/dist/esm/lib/parsers/csw/parse-exception-report.js +13 -0
  106. package/dist/esm/lib/parsers/csw/parse-exception-report.js.map +1 -0
  107. package/dist/esm/lib/parsers/gml/deep-strict-equal.js.map +1 -0
  108. package/dist/esm/lib/parsers/gml/parse-gml.js.map +1 -0
  109. package/dist/esm/lib/parsers/lerc/lerc-types.js.map +1 -0
  110. package/dist/esm/lib/{wms/parse-wms.js → parsers/wms/parse-wms-capabilities.js} +1 -37
  111. package/dist/esm/lib/parsers/wms/parse-wms-capabilities.js.map +1 -0
  112. package/dist/esm/lib/parsers/wms/parse-wms-error.js +12 -0
  113. package/dist/esm/lib/parsers/wms/parse-wms-error.js.map +1 -0
  114. package/dist/esm/lib/parsers/wms/parse-wms-features.js +27 -0
  115. package/dist/esm/lib/parsers/wms/parse-wms-features.js.map +1 -0
  116. package/dist/esm/lib/parsers/wms/parse-wms-layer-description.js +9 -0
  117. package/dist/esm/lib/parsers/wms/parse-wms-layer-description.js.map +1 -0
  118. package/dist/esm/lib/services/arcgis/arcgis-image-service.js +67 -0
  119. package/dist/esm/lib/services/arcgis/arcgis-image-service.js.map +1 -0
  120. package/dist/esm/lib/services/arcgis/arcgis-server.js +35 -0
  121. package/dist/esm/lib/services/arcgis/arcgis-server.js.map +1 -0
  122. package/dist/esm/lib/{data-sources/adhoc-image-service.js → services/generic/image-service.js} +13 -10
  123. package/dist/esm/lib/services/generic/image-service.js.map +1 -0
  124. package/dist/esm/lib/services/generic/tile-service.js +2 -0
  125. package/dist/esm/lib/services/generic/tile-service.js.map +1 -0
  126. package/dist/esm/lib/services/ogc/csw-service.js +162 -0
  127. package/dist/esm/lib/services/ogc/csw-service.js.map +1 -0
  128. package/dist/esm/lib/{data-sources/image-services → services/ogc}/wms-service.js +40 -34
  129. package/dist/esm/lib/services/ogc/wms-service.js.map +1 -0
  130. package/dist/esm/lib/services/ogc/wmts-service.ts.disabled +348 -0
  131. package/dist/esm/lib/sources/data-source.js +29 -0
  132. package/dist/esm/lib/sources/data-source.js.map +1 -0
  133. package/dist/esm/lib/sources/image-source.js +6 -0
  134. package/dist/esm/lib/sources/image-source.js.map +1 -0
  135. package/dist/esm/lib/sources/tile-source.js +6 -0
  136. package/dist/esm/lib/sources/tile-source.js.map +1 -0
  137. package/dist/esm/lib/sources/utils/utils.js +26 -0
  138. package/dist/esm/lib/sources/utils/utils.js.map +1 -0
  139. package/dist/esm/wip/lib/wcs/parse-wcs-capabilities.js +16 -0
  140. package/dist/esm/wip/lib/wcs/parse-wcs-capabilities.js.map +1 -0
  141. package/dist/esm/wip/lib/wfs/parse-wfs-capabilities.js +17 -0
  142. package/dist/esm/wip/lib/wfs/parse-wfs-capabilities.js.map +1 -0
  143. package/dist/esm/wip/lib/wmts/parse-wmts-capabilities.js +17 -0
  144. package/dist/esm/wip/lib/wmts/parse-wmts-capabilities.js.map +1 -0
  145. package/dist/esm/wip/wcs-capabilities-loader.js +4 -4
  146. package/dist/esm/wip/wcs-capabilities-loader.js.map +1 -1
  147. package/dist/esm/wip/wfs-capabilities-loader.js +2 -2
  148. package/dist/esm/wip/wfs-capabilities-loader.js.map +1 -1
  149. package/dist/esm/wip/wms-feature-info-loader.js +1 -2
  150. package/dist/esm/wip/wms-feature-info-loader.js.map +1 -1
  151. package/dist/esm/wip/wms-layer-description-loader.js +1 -2
  152. package/dist/esm/wip/wms-layer-description-loader.js.map +1 -1
  153. package/dist/esm/wip/wmts-capabilities-loader.js +4 -2
  154. package/dist/esm/wip/wmts-capabilities-loader.js.map +1 -1
  155. package/dist/esm/wms-capabilities-loader.js +3 -2
  156. package/dist/esm/wms-capabilities-loader.js.map +1 -1
  157. package/dist/esm/wms-error-loader.js +2 -2
  158. package/dist/esm/wms-error-loader.js.map +1 -1
  159. package/dist/gml-loader.d.ts.map +1 -0
  160. package/dist/{wip/gml-loader.js → gml-loader.js} +2 -2
  161. package/dist/index.d.ts +25 -16
  162. package/dist/index.d.ts.map +1 -1
  163. package/dist/index.js +26 -14
  164. package/dist/lerc-loader.d.ts +1 -1
  165. package/dist/lerc-loader.d.ts.map +1 -1
  166. package/dist/lib/create-image-source.d.ts +17 -0
  167. package/dist/lib/create-image-source.d.ts.map +1 -0
  168. package/dist/lib/{data-sources/create-image-source.js → create-image-source.js} +5 -5
  169. package/dist/lib/{wmts/wmts-types.d.ts → parsers/csw/parse-csw-capabilities.d.ts} +9 -3
  170. package/dist/lib/parsers/csw/parse-csw-capabilities.d.ts.map +1 -0
  171. package/dist/lib/parsers/csw/parse-csw-capabilities.js +24 -0
  172. package/dist/lib/parsers/csw/parse-csw-domain.d.ts +17 -0
  173. package/dist/lib/parsers/csw/parse-csw-domain.d.ts.map +1 -0
  174. package/dist/lib/parsers/csw/parse-csw-domain.js +33 -0
  175. package/dist/lib/parsers/csw/parse-csw-records.d.ts +33 -0
  176. package/dist/lib/parsers/csw/parse-csw-records.d.ts.map +1 -0
  177. package/dist/lib/parsers/csw/parse-csw-records.js +58 -0
  178. package/dist/lib/parsers/csw/parse-exception-report.d.ts +6 -0
  179. package/dist/lib/parsers/csw/parse-exception-report.d.ts.map +1 -0
  180. package/dist/lib/parsers/csw/parse-exception-report.js +30 -0
  181. package/dist/lib/parsers/gml/deep-strict-equal.d.ts.map +1 -0
  182. package/dist/lib/parsers/gml/parse-gml.d.ts.map +1 -0
  183. package/dist/lib/parsers/lerc/lerc-types.d.ts.map +1 -0
  184. package/dist/lib/{wms/wms-types.d.ts → parsers/wms/parse-wms-capabilities.d.ts} +6 -19
  185. package/dist/lib/parsers/wms/parse-wms-capabilities.d.ts.map +1 -0
  186. package/dist/lib/{wms/wms-types.js → parsers/wms/parse-wms-capabilities.js} +61 -1
  187. package/dist/lib/parsers/wms/parse-wms-error.d.ts +8 -0
  188. package/dist/lib/parsers/wms/parse-wms-error.d.ts.map +1 -0
  189. package/dist/lib/parsers/wms/parse-wms-error.js +22 -0
  190. package/dist/lib/parsers/wms/parse-wms-features.d.ts +20 -0
  191. package/dist/lib/parsers/wms/parse-wms-features.d.ts.map +1 -0
  192. package/dist/lib/parsers/wms/parse-wms-features.js +27 -0
  193. package/dist/lib/parsers/wms/parse-wms-layer-description.d.ts +10 -0
  194. package/dist/lib/parsers/wms/parse-wms-layer-description.d.ts.map +1 -0
  195. package/dist/lib/parsers/wms/parse-wms-layer-description.js +15 -0
  196. package/dist/lib/{data-sources/image-services → services/arcgis}/arcgis-image-service.d.ts +25 -13
  197. package/dist/lib/services/arcgis/arcgis-image-service.d.ts.map +1 -0
  198. package/dist/lib/{data-sources → services/arcgis}/arcgis-image-service.js +33 -23
  199. package/dist/lib/services/arcgis/arcgis-server.d.ts +15 -0
  200. package/dist/lib/services/arcgis/arcgis-server.d.ts.map +1 -0
  201. package/dist/lib/services/arcgis/arcgis-server.js +42 -0
  202. package/dist/lib/{data-sources/image-services → services/generic}/image-service.d.ts +3 -13
  203. package/dist/lib/services/generic/image-service.d.ts.map +1 -0
  204. package/dist/lib/{data-sources/adhoc-image-service.js → services/generic/image-service.js} +12 -10
  205. package/dist/lib/services/generic/tile-service.d.ts +1 -0
  206. package/dist/lib/services/generic/tile-service.d.ts.map +1 -0
  207. package/dist/lib/services/generic/tile-service.js +1 -0
  208. package/dist/lib/services/ogc/csw-service.d.ts +115 -0
  209. package/dist/lib/services/ogc/csw-service.d.ts.map +1 -0
  210. package/dist/lib/services/ogc/csw-service.js +170 -0
  211. package/dist/lib/{data-sources/image-services → services/ogc}/wms-service.d.ts +41 -22
  212. package/dist/lib/services/ogc/wms-service.d.ts.map +1 -0
  213. package/dist/lib/{data-sources/image-services → services/ogc}/wms-service.js +41 -28
  214. package/dist/lib/sources/data-source.d.ts +22 -0
  215. package/dist/lib/sources/data-source.d.ts.map +1 -0
  216. package/dist/lib/sources/data-source.js +34 -0
  217. package/dist/lib/{data-sources → sources}/image-source.d.ts +4 -1
  218. package/dist/lib/sources/image-source.d.ts.map +1 -0
  219. package/dist/lib/{data-sources → sources}/image-source.js +2 -1
  220. package/dist/lib/sources/tile-source.d.ts +54 -0
  221. package/dist/lib/sources/tile-source.d.ts.map +1 -0
  222. package/dist/lib/sources/tile-source.js +13 -0
  223. package/dist/lib/sources/utils/utils.d.ts +13 -0
  224. package/dist/lib/sources/utils/utils.d.ts.map +1 -0
  225. package/dist/lib/sources/utils/utils.js +38 -0
  226. package/dist/{lib/wfs/wfs-types.d.ts → wip/lib/wcs/parse-wcs-capabilities.d.ts} +8 -3
  227. package/dist/wip/lib/wcs/parse-wcs-capabilities.d.ts.map +1 -0
  228. package/dist/wip/lib/wcs/parse-wcs-capabilities.js +15 -0
  229. package/dist/{lib/wcs/wcs-types.d.ts → wip/lib/wfs/parse-wfs-capabilities.d.ts} +6 -1
  230. package/dist/wip/lib/wfs/parse-wfs-capabilities.d.ts.map +1 -0
  231. package/dist/wip/lib/wfs/parse-wfs-capabilities.js +19 -0
  232. package/dist/wip/lib/wmts/parse-wmts-capabilities.d.ts +87 -0
  233. package/dist/wip/lib/wmts/parse-wmts-capabilities.d.ts.map +1 -0
  234. package/dist/wip/lib/wmts/parse-wmts-capabilities.js +77 -0
  235. package/dist/wip/wcs-capabilities-loader.d.ts +4 -3
  236. package/dist/wip/wcs-capabilities-loader.d.ts.map +1 -1
  237. package/dist/wip/wcs-capabilities-loader.js +3 -3
  238. package/dist/wip/wfs-capabilities-loader.d.ts +4 -3
  239. package/dist/wip/wfs-capabilities-loader.d.ts.map +1 -1
  240. package/dist/wip/wfs-capabilities-loader.js +3 -3
  241. package/dist/wip/wms-feature-info-loader.d.ts +4 -2
  242. package/dist/wip/wms-feature-info-loader.d.ts.map +1 -1
  243. package/dist/wip/wms-feature-info-loader.js +3 -3
  244. package/dist/wip/wms-layer-description-loader.d.ts +5 -3
  245. package/dist/wip/wms-layer-description-loader.d.ts.map +1 -1
  246. package/dist/wip/wms-layer-description-loader.js +3 -3
  247. package/dist/wip/wmts-capabilities-loader.d.ts +4 -3
  248. package/dist/wip/wmts-capabilities-loader.d.ts.map +1 -1
  249. package/dist/wip/wmts-capabilities-loader.js +3 -3
  250. package/dist/wms-capabilities-loader.d.ts +4 -3
  251. package/dist/wms-capabilities-loader.d.ts.map +1 -1
  252. package/dist/wms-capabilities-loader.js +3 -3
  253. package/dist/wms-error-loader.js +2 -2
  254. package/package.json +7 -7
  255. package/src/csw-capabilities-loader.ts +46 -0
  256. package/src/csw-domain-loader.ts +44 -0
  257. package/src/csw-records-loader.ts +42 -0
  258. package/src/{wip/gml-loader.ts → gml-loader.ts} +2 -2
  259. package/src/index.ts +48 -28
  260. package/src/lerc-loader.ts +1 -1
  261. package/src/lib/{data-sources/create-image-source.ts → create-image-source.ts} +12 -10
  262. package/src/lib/parsers/csw/parse-csw-capabilities.ts +103 -0
  263. package/src/lib/parsers/csw/parse-csw-domain.ts +45 -0
  264. package/src/lib/parsers/csw/parse-csw-records.ts +90 -0
  265. package/src/lib/parsers/csw/parse-exception-report.ts +31 -0
  266. package/src/lib/{wms/wms-types.ts → parsers/wms/parse-wms-capabilities.ts} +72 -53
  267. package/src/lib/parsers/wms/parse-wms-error.ts +22 -0
  268. package/src/lib/parsers/wms/parse-wms-features.ts +39 -0
  269. package/src/lib/parsers/wms/parse-wms-layer-description.ts +18 -0
  270. package/src/lib/{data-sources/image-services → services/arcgis}/arcgis-image-service.ts +44 -26
  271. package/src/lib/services/arcgis/arcgis-server.ts +59 -0
  272. package/src/lib/{data-sources/adhoc-image-service.ts → services/generic/image-service.ts} +18 -12
  273. package/src/lib/services/generic/tile-service.ts +0 -0
  274. package/src/lib/services/ogc/csw-service.ts +251 -0
  275. package/src/lib/{data-sources/image-services → services/ogc}/wms-service.ts +73 -34
  276. package/src/lib/services/ogc/wmts-service.ts.disabled +348 -0
  277. package/src/lib/sources/data-source.ts +46 -0
  278. package/src/lib/{data-sources → sources}/image-source.ts +5 -1
  279. package/src/lib/sources/tile-source.ts +59 -0
  280. package/src/lib/sources/utils/utils.ts +42 -0
  281. package/src/{lib/wmts/wmts-types.ts → wip/lib/wcs/parse-wcs-capabilities.ts} +15 -3
  282. package/src/{lib/wcs/wcs-types.ts → wip/lib/wfs/parse-wfs-capabilities.ts} +18 -1
  283. package/src/wip/lib/wmts/parse-wmts-capabilities.ts +170 -0
  284. package/src/wip/wcs-capabilities-loader.ts +6 -3
  285. package/src/wip/wfs-capabilities-loader.ts +4 -1
  286. package/src/wip/wms-feature-info-loader.ts +5 -1
  287. package/src/wip/wms-layer-description-loader.ts +7 -2
  288. package/src/wip/wmts-capabilities-loader.ts +4 -1
  289. package/src/wms-capabilities-loader.ts +5 -1
  290. package/src/wms-error-loader.ts +1 -1
  291. package/dist/es5/lib/data-sources/adhoc-image-service.js.map +0 -1
  292. package/dist/es5/lib/data-sources/arcgis-image-service.js +0 -180
  293. package/dist/es5/lib/data-sources/arcgis-image-service.js.map +0 -1
  294. package/dist/es5/lib/data-sources/create-image-source.js.map +0 -1
  295. package/dist/es5/lib/data-sources/image-services/arcgis-image-service.js.map +0 -1
  296. package/dist/es5/lib/data-sources/image-services/image-service.js +0 -163
  297. package/dist/es5/lib/data-sources/image-services/image-service.js.map +0 -1
  298. package/dist/es5/lib/data-sources/image-services/wms-service.js.map +0 -1
  299. package/dist/es5/lib/data-sources/image-source.js +0 -14
  300. package/dist/es5/lib/data-sources/image-source.js.map +0 -1
  301. package/dist/es5/lib/gml/deep-strict-equal.js.map +0 -1
  302. package/dist/es5/lib/gml/parse-gml.js.map +0 -1
  303. package/dist/es5/lib/lerc/lerc-types.js.map +0 -1
  304. package/dist/es5/lib/wcs/parse-wcs.js.map +0 -1
  305. package/dist/es5/lib/wcs/wcs-types.js +0 -2
  306. package/dist/es5/lib/wcs/wcs-types.js.map +0 -1
  307. package/dist/es5/lib/wfs/parse-wfs.js.map +0 -1
  308. package/dist/es5/lib/wfs/wfs-types.js +0 -2
  309. package/dist/es5/lib/wfs/wfs-types.js.map +0 -1
  310. package/dist/es5/lib/wms/parse-wms.js.map +0 -1
  311. package/dist/es5/lib/wms/wms-types.js +0 -2
  312. package/dist/es5/lib/wms/wms-types.js.map +0 -1
  313. package/dist/es5/lib/wmts/parse-wmts.js.map +0 -1
  314. package/dist/es5/lib/wmts/wmts-types.js +0 -2
  315. package/dist/es5/lib/wmts/wmts-types.js.map +0 -1
  316. package/dist/es5/wip/gml-loader.js.map +0 -1
  317. package/dist/esm/lib/data-sources/adhoc-image-service.js.map +0 -1
  318. package/dist/esm/lib/data-sources/arcgis-image-service.js +0 -62
  319. package/dist/esm/lib/data-sources/arcgis-image-service.js.map +0 -1
  320. package/dist/esm/lib/data-sources/create-image-source.js.map +0 -1
  321. package/dist/esm/lib/data-sources/image-services/arcgis-image-service.js +0 -61
  322. package/dist/esm/lib/data-sources/image-services/arcgis-image-service.js.map +0 -1
  323. package/dist/esm/lib/data-sources/image-services/image-service.js +0 -72
  324. package/dist/esm/lib/data-sources/image-services/image-service.js.map +0 -1
  325. package/dist/esm/lib/data-sources/image-services/wms-service.js.map +0 -1
  326. package/dist/esm/lib/data-sources/image-source.js +0 -4
  327. package/dist/esm/lib/data-sources/image-source.js.map +0 -1
  328. package/dist/esm/lib/gml/deep-strict-equal.js.map +0 -1
  329. package/dist/esm/lib/gml/parse-gml.js.map +0 -1
  330. package/dist/esm/lib/lerc/lerc-types.js.map +0 -1
  331. package/dist/esm/lib/wcs/parse-wcs.js +0 -32
  332. package/dist/esm/lib/wcs/parse-wcs.js.map +0 -1
  333. package/dist/esm/lib/wcs/wcs-types.js +0 -2
  334. package/dist/esm/lib/wcs/wcs-types.js.map +0 -1
  335. package/dist/esm/lib/wfs/parse-wfs.js +0 -32
  336. package/dist/esm/lib/wfs/parse-wfs.js.map +0 -1
  337. package/dist/esm/lib/wfs/wfs-types.js +0 -2
  338. package/dist/esm/lib/wfs/wfs-types.js.map +0 -1
  339. package/dist/esm/lib/wms/parse-wms.js.map +0 -1
  340. package/dist/esm/lib/wms/wms-types.js +0 -2
  341. package/dist/esm/lib/wms/wms-types.js.map +0 -1
  342. package/dist/esm/lib/wmts/parse-wmts.js +0 -32
  343. package/dist/esm/lib/wmts/parse-wmts.js.map +0 -1
  344. package/dist/esm/lib/wmts/wmts-types.js +0 -2
  345. package/dist/esm/lib/wmts/wmts-types.js.map +0 -1
  346. package/dist/esm/wip/gml-loader.js.map +0 -1
  347. package/dist/lib/data-sources/adhoc-image-service.d.ts +0 -24
  348. package/dist/lib/data-sources/adhoc-image-service.d.ts.map +0 -1
  349. package/dist/lib/data-sources/arcgis-image-service.d.ts +0 -79
  350. package/dist/lib/data-sources/arcgis-image-service.d.ts.map +0 -1
  351. package/dist/lib/data-sources/create-image-source.d.ts +0 -16
  352. package/dist/lib/data-sources/create-image-source.d.ts.map +0 -1
  353. package/dist/lib/data-sources/image-services/arcgis-image-service.d.ts.map +0 -1
  354. package/dist/lib/data-sources/image-services/arcgis-image-service.js +0 -85
  355. package/dist/lib/data-sources/image-services/image-service.d.ts.map +0 -1
  356. package/dist/lib/data-sources/image-services/image-service.js +0 -82
  357. package/dist/lib/data-sources/image-services/wms-service.d.ts.map +0 -1
  358. package/dist/lib/data-sources/image-source.d.ts.map +0 -1
  359. package/dist/lib/gml/deep-strict-equal.d.ts.map +0 -1
  360. package/dist/lib/gml/parse-gml.d.ts.map +0 -1
  361. package/dist/lib/lerc/lerc-types.d.ts.map +0 -1
  362. package/dist/lib/wcs/parse-wcs.d.ts +0 -7
  363. package/dist/lib/wcs/parse-wcs.d.ts.map +0 -1
  364. package/dist/lib/wcs/parse-wcs.js +0 -36
  365. package/dist/lib/wcs/wcs-types.d.ts.map +0 -1
  366. package/dist/lib/wcs/wcs-types.js +0 -3
  367. package/dist/lib/wfs/parse-wfs.d.ts +0 -7
  368. package/dist/lib/wfs/parse-wfs.d.ts.map +0 -1
  369. package/dist/lib/wfs/parse-wfs.js +0 -36
  370. package/dist/lib/wfs/wfs-types.d.ts.map +0 -1
  371. package/dist/lib/wfs/wfs-types.js +0 -3
  372. package/dist/lib/wms/parse-wms.d.ts +0 -24
  373. package/dist/lib/wms/parse-wms.d.ts.map +0 -1
  374. package/dist/lib/wms/parse-wms.js +0 -115
  375. package/dist/lib/wms/wms-types.d.ts.map +0 -1
  376. package/dist/lib/wmts/parse-wmts.d.ts +0 -7
  377. package/dist/lib/wmts/parse-wmts.d.ts.map +0 -1
  378. package/dist/lib/wmts/parse-wmts.js +0 -36
  379. package/dist/lib/wmts/wmts-types.d.ts.map +0 -1
  380. package/dist/lib/wmts/wmts-types.js +0 -3
  381. package/dist/wip/gml-loader.d.ts.map +0 -1
  382. package/src/lib/data-sources/arcgis-image-service.ts +0 -146
  383. package/src/lib/data-sources/image-services/image-service.ts +0 -105
  384. package/src/lib/wcs/parse-wcs.ts +0 -39
  385. package/src/lib/wfs/parse-wfs.ts +0 -39
  386. package/src/lib/wfs/wfs-types.ts +0 -78
  387. package/src/lib/wms/parse-wms.ts +0 -142
  388. package/src/lib/wmts/parse-wmts.ts +0 -39
  389. /package/dist/es5/lib/{gml → parsers/gml}/deep-strict-equal.js +0 -0
  390. /package/dist/es5/lib/{gml → parsers/gml}/parse-gml.js +0 -0
  391. /package/dist/es5/lib/{lerc → parsers/lerc}/lerc-types.js +0 -0
  392. /package/dist/esm/lib/{gml → parsers/gml}/deep-strict-equal.js +0 -0
  393. /package/dist/esm/lib/{gml → parsers/gml}/parse-gml.js +0 -0
  394. /package/dist/esm/lib/{lerc → parsers/lerc}/lerc-types.js +0 -0
  395. /package/dist/{wip/gml-loader.d.ts → gml-loader.d.ts} +0 -0
  396. /package/dist/lib/{gml → parsers/gml}/deep-strict-equal.d.ts +0 -0
  397. /package/dist/lib/{gml → parsers/gml}/deep-strict-equal.js +0 -0
  398. /package/dist/lib/{gml → parsers/gml}/parse-gml.d.ts +0 -0
  399. /package/dist/lib/{gml → parsers/gml}/parse-gml.js +0 -0
  400. /package/dist/lib/{lerc → parsers/lerc}/lerc-types.d.ts +0 -0
  401. /package/dist/lib/{lerc → parsers/lerc}/lerc-types.js +0 -0
  402. /package/src/lib/{gml → parsers/gml}/deep-strict-equal.ts +0 -0
  403. /package/src/lib/{gml → parsers/gml}/parse-gml.ts +0 -0
  404. /package/src/lib/{lerc → parsers/lerc}/lerc-types.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-wms-capabilities.js","names":["XMLLoader","parseWMSCapabilities","text","options","parsedXML","parseTextSync","xmlCapabilities","WMT_MS_Capabilities","WMS_Capabilities","extractCapabilities","xml","capabilities","name","Service","Name","title","Title","keywords","requests","layer","extractLayer","Capability","Layer","raw","keyword","KeywordList","Keyword","push","xmlRequest","Object","entries","Request","extractRequest","format","Format","mimeTypes","Array","isArray","xmlLayer","srs","SRS","layers","xmlLayers","getXMLArray","xmlSubLayer","xmlValue"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-capabilities.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\n\n/** All capabilities of a WMS service - response to a WMS `GetCapabilities` data structure extracted from XML */\nexport type WMSCapabilities = {\n name: string;\n title?: string;\n abstract?: string;\n keywords: string[];\n layer: {\n name: string;\n title?: string;\n srs?: string[];\n boundingBox?: [number, number, number, number];\n layers: WMSLayer[];\n };\n requests: Record<string, WMSRequest>;\n raw: Record<string, unknown>;\n};\n\nexport type WMSLayer = {\n name: string;\n title?: string;\n srs?: string[];\n boundingBox?: [number, number, number, number];\n layers: WMSLayer[];\n};\n\nexport type WMSRequest = {\n name: string;\n mimeTypes: string[];\n};\n\n/**\n * <EX_GeographicBoundingBox>\n * <westBoundLongitude>-180</westBoundLongitude>\n * <eastBoundLongitude>180</eastBoundLongitude>\n * <southBoundLatitude>-65</southBoundLatitude>\n * <northBoundLatitude>75</northBoundLatitude>\n * </EX_GeographicBoundingBox>\n * <BoundingBox CRS=\"EPSG:4326\"\n * minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n */\nexport type Layer = {\n name: string; // e.g. DMSP-Global-Composites-Version-4\n title: string; // e.g. DMSP-Global-Composites-Version-4</Title>\n abstract?: string; // DMSP-Global-Composites-Version-4</Abstract>\n crs: string; // e.g. EPSG:4326</CRS>\n queryable?: boolean;\n opaque?: boolean;\n cascaded?: boolean;\n geographicBoundingBox: number[];\n boundingBox: number[];\n boundingBoxCRS: string;\n layers: Layer[];\n};\n\n/**\n * <Style>\n * <Name>default</Name>\n * <Title>default</Title>\n * <LegendURL width=\"89\" height=\"21\">\n * <Format>image/png</Format>\n * <OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:type=\"simple\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?version=1.3.0&amp;service=WMS&amp;request=GetLegendGraphic&amp;sld_version=1.1.0&amp;layer=countries&amp;format=image/png&amp;STYLE=default\"/>\n * </LegendURL>\n * </Style>\n */\nexport type Style = {\n name: string; // e.g. DMSP-Global-Composites-Version-4\n title: string; // e.g. DMSP-Global-Composites-Version-4</Title>\n legendUrl?: {\n width: number;\n height: number;\n format: string;\n onlineResource: string;\n };\n};\n\n// export type Capability = GetCapabilities | GetMap;\n\nexport type WMSService = {\n rawData: unknown;\n name: string;\n title: string;\n onlineResource?: string;\n contactInformation?: string;\n maxWidth?: number;\n maxHeight?: number;\n capabilities: {\n // getCapabilities: GetCapabilities;\n // getMap: GetMap;\n // getFeatureInfo?: GetFeatureInfo;\n };\n\n untypedData: unknown; // The raw, untyped JSON converted from XML\n};\n\n/* \n<Capability>\n <Request>\n <GetCapabilities>\n <Format>text/xml</Format>\n <DCPType>\n <HTTP>\n <Get><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Get>\n <Post><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Post>\n </HTTP>\n </DCPType>\n </GetCapabilities>\n <GetMap>\n <Format>image/png</Format>\n <Format>image/tiff</Format>\n <Format>image/jpeg</Format>\n <Format>image/png; mode=8bit</Format>\n <Format>application/x-pdf</Format>\n <Format>image/svg+xml</Format>\n <DCPType>\n <HTTP>\n <Get><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Get>\n <Post><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Post>\n </HTTP>\n </DCPType>\n </GetMap>\n <GetFeatureInfo>\n <Format>text/plain</Format>\n <Format>application/vnd.ogc.gml</Format>\n <DCPType>\n <HTTP>\n <Get><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Get>\n <Post><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Post>\n </HTTP>\n </DCPType>\n </GetFeatureInfo>\n <sld:DescribeLayer>\n <Format>text/xml</Format>\n <DCPType>\n <HTTP>\n <Get><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Get>\n <Post><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Post>\n </HTTP>\n </DCPType>\n </sld:DescribeLayer>\n <sld:GetLegendGraphic>\n <Format>image/png</Format>\n <Format>image/jpeg</Format>\n <Format>image/png; mode=8bit</Format>\n <DCPType>\n <HTTP>\n <Get><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Get>\n <Post><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Post>\n </HTTP>\n </DCPType>\n </sld:GetLegendGraphic>\n <ms:GetStyles>\n <Format>text/xml</Format>\n <DCPType>\n <HTTP>\n <Get><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Get>\n <Post><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Post>\n </HTTP>\n </DCPType>\n </ms:GetStyles>\n </Request>\n <Exception>\n <Format>XML</Format>\n <Format>INIMAGE</Format>\n <Format>BLANK</Format>\n </Exception>\n <sld:UserDefinedSymbolization SupportSLD=\"1\" UserLayer=\"0\" UserStyle=\"1\" RemoteWFS=\"0\" InlineFeature=\"0\" RemoteWCS=\"0\"/>\n <Layer>\n <Name>DMSP-Global-Composites-Version-4</Name>\n <Title>DMSP-Global-Composites-Version-4</Title>\n <Abstract>DMSP-Global-Composites-Version-4</Abstract>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>countries</Name>\n <Title>Countries</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-90</southBoundLatitude>\n <northBoundLatitude>83.6236</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-90\" miny=\"-180\" maxx=\"83.6236\" maxy=\"180\" />\n <Style>\n <Name>default</Name>\n <Title>default</Title>\n <LegendURL width=\"89\" height=\"21\">\n <Format>image/png</Format>\n <OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:type=\"simple\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?version=1.3.0&amp;service=WMS&amp;request=GetLegendGraphic&amp;sld_version=1.1.0&amp;layer=countries&amp;format=image/png&amp;STYLE=default\"/>\n </LegendURL>\n </Style>\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>adminboundaries</Name>\n <Title>Administrative Boundaries</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-90</southBoundLatitude>\n <northBoundLatitude>83.6236</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-90\" miny=\"-180\" maxx=\"83.6236\" maxy=\"180\" />\n <Style>\n <Name>default</Name>\n <Title>default</Title>\n <LegendURL width=\"65\" height=\"21\">\n <Format>image/png</Format>\n <OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:type=\"simple\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?version=1.3.0&amp;service=WMS&amp;request=GetLegendGraphic&amp;sld_version=1.1.0&amp;layer=adminboundaries&amp;format=image/png&amp;STYLE=default\"/>\n </LegendURL>\n </Style>\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>eez</Name>\n <Title>EEZ Boundaries</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-179.999</westBoundLongitude>\n <eastBoundLongitude>179.999</eastBoundLongitude>\n <southBoundLatitude>-85.4703</southBoundLatitude>\n <northBoundLatitude>87.0239</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-85.4703\" miny=\"-179.999\" maxx=\"87.0239\" maxy=\"179.999\" />\n <Style>\n <Name>default</Name>\n <Title>default</Title>\n <LegendURL width=\"53\" height=\"21\">\n <Format>image/png</Format>\n <OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:type=\"simple\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?version=1.3.0&amp;service=WMS&amp;request=GetLegendGraphic&amp;sld_version=1.1.0&amp;layer=eez&amp;format=image/png&amp;STYLE=default\"/>\n </LegendURL>\n </Style>\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>cities</Name>\n <Title>Cities</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-176.152</westBoundLongitude>\n <eastBoundLongitude>179.222</eastBoundLongitude>\n <southBoundLatitude>-54.792</southBoundLatitude>\n <northBoundLatitude>78.2</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-54.792\" miny=\"-176.152\" maxx=\"78.2\" maxy=\"179.222\" />\n <Style>\n <Name>default</Name>\n <Title>default</Title>\n <LegendURL width=\"71\" height=\"21\">\n <Format>image/png</Format>\n <OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:type=\"simple\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?version=1.3.0&amp;service=WMS&amp;request=GetLegendGraphic&amp;sld_version=1.1.0&amp;layer=cities&amp;format=image/png&amp;STYLE=default\"/>\n </LegendURL>\n </Style>\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>citieslabeled</Name>\n <Title>Cities With Labels</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-176.152</westBoundLongitude>\n <eastBoundLongitude>179.222</eastBoundLongitude>\n <southBoundLatitude>-54.792</southBoundLatitude>\n <northBoundLatitude>78.2</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-54.792\" miny=\"-176.152\" maxx=\"78.2\" maxy=\"179.222\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>land</Name>\n <Title>Land Sea Mask</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-90</southBoundLatitude>\n <northBoundLatitude>83.6236</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-90\" miny=\"-180\" maxx=\"83.6236\" maxy=\"180\" />\n <Style>\n <Name>default</Name>\n <Title>default</Title>\n <LegendURL width=\"59\" height=\"21\">\n <Format>image/png</Format>\n <OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:type=\"simple\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?version=1.3.0&amp;service=WMS&amp;request=GetLegendGraphic&amp;sld_version=1.1.0&amp;layer=land&amp;format=image/png&amp;STYLE=default\"/>\n </LegendURL>\n </Style>\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>LandSeaMask</Name>\n <Title>LandSeaMask</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-90</southBoundLatitude>\n <northBoundLatitude>90</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-90\" miny=\"-180\" maxx=\"90\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>Rivers</Name>\n <Title>Rivers</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-164.887</westBoundLongitude>\n <eastBoundLongitude>160.764</eastBoundLongitude>\n <southBoundLatitude>-36.9694</southBoundLatitude>\n <northBoundLatitude>71.3925</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-36.9694\" miny=\"-164.887\" maxx=\"71.3925\" maxy=\"160.764\" />\n <Style>\n <Name>default</Name>\n <Title>default</Title>\n <LegendURL width=\"71\" height=\"21\">\n <Format>image/png</Format>\n <OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:type=\"simple\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?version=1.3.0&amp;service=WMS&amp;request=GetLegendGraphic&amp;sld_version=1.1.0&amp;layer=Rivers&amp;format=image/png&amp;STYLE=default\"/>\n </LegendURL>\n </Style>\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101992.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F101992.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101992.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F101992.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101992.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F101992.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101992.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F101992.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101993.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F101993.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101993.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F101993.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101993.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F101993.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101993.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F101993.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101994.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F101994.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101994.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F101994.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101994.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F101994.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101994.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F101994.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121994.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F121994.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121994.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F121994.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121994.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F121994.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121994.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F121994.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121995.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F121995.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121995.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F121995.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121995.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F121995.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121995.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F121995.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121996.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F121996.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121996.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F121996.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121996.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F121996.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121996.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F121996.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121997.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F121997.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121997.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F121997.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121997.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F121997.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121997.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F121997.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121998.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F121998.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121998.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F121998.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121998.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F121998.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121998.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F121998.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121999.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F121999.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121999.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F121999.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121999.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F121999.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121999.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F121999.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141997.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F141997.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141997.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F141997.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141997.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F141997.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141997.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F141997.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141998.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F141998.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141998.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F141998.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141998.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F141998.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141998.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F141998.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141999.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F141999.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141999.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F141999.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141999.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F141999.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141999.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F141999.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142000.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F142000.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142000.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F142000.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142000.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F142000.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142000.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F142000.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142001.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F142001.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142001.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F142001.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142001.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F142001.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142001.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F142001.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142002.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F142002.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142002.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F142002.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142002.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F142002.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142002.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F142002.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142003.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F142003.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142003.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F142003.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142003.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F142003.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142003.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F142003.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152000.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F152000.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152000.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F152000.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152000.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F152000.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152000.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F152000.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152001.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F152001.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152001.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F152001.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152001.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F152001.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152001.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F152001.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152002.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F152002.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152002.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F152002.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152002.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F152002.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152002.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F152002.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152003.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F152003.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152003.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F152003.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152003.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F152003.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152003.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F152003.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152004.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F152004.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152004.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F152004.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152004.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F152004.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152004.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F152004.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152005.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F152005.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152005.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F152005.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152005.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F152005.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152005.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F152005.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152006.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F152006.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152006.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F152006.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152006.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F152006.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152006.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F152006.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152007.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F152007.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152007.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F152007.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152007.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F152007.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152007.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F152007.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152008.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F152008.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152008.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F152008.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152008.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F152008.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152008.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F152008.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162004.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F162004.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162004.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F162004.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162004.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F162004.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162004.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F162004.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162005.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F162005.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162005.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F162005.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162005.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F162005.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162005.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F162005.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162006.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F162006.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162006.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F162006.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162006.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F162006.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162006.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F162006.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162007.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F162007.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162007.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F162007.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162007.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F162007.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162007.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F162007.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162008.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F162008.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162008.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F162008.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162008.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F162008.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162008.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F162008.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162009.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F162009.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162009.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F162009.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162009.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F162009.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162009.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F162009.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F182010.v4c.avg_lights_x_pct.lzw.tif</Name>\n <Title>F182010.v4c.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F182010.v4c_web.avg_vis.lzw.tif</Name>\n <Title>F182010.v4c_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F182010.v4c_web.cf_cvg.lzw.tif</Name>\n <Title>F182010.v4c_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F182010.v4c_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F182010.v4c_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n </Layer>\n</Capability>\n</WMS_Capabilities>\n*/\n\n/**\n * Parses a typed data structure from raw XML for `GetCapabilities` response\n * @note Error handlings is fairly weak\n */\nexport function parseWMSCapabilities(text: string, options): WMSCapabilities {\n const parsedXML = XMLLoader.parseTextSync(text, options);\n const xmlCapabilities: any =\n parsedXML.WMT_MS_Capabilities || parsedXML.WMS_Capabilities || parsedXML;\n return extractCapabilities(xmlCapabilities);\n}\n\n/** Extract typed capability data from XML */\nfunction extractCapabilities(xml: any): WMSCapabilities {\n const capabilities: WMSCapabilities = {\n name: xml.Service?.Name || 'unnamed',\n title: xml.Service?.Title,\n keywords: [],\n requests: {},\n layer: extractLayer(xml.Capability?.Layer),\n raw: xml\n };\n\n for (const keyword of xml.Service?.KeywordList?.Keyword || []) {\n capabilities.keywords.push(keyword);\n }\n\n for (const [name, xmlRequest] of Object.entries(xml.Capability?.Request || {})) {\n capabilities.requests[name] = extractRequest(name, xmlRequest);\n }\n\n return capabilities;\n}\n\n/** Extract typed request data from XML */\nfunction extractRequest(name: string, xmlRequest: any): WMSRequest {\n const format: string | string[] = xmlRequest?.Format;\n const mimeTypes: string[] = Array.isArray(format) ? format : [format];\n return {name, mimeTypes};\n}\n\n/** Extract request data */\nfunction extractLayer(xmlLayer: any): WMSLayer {\n const layer: WMSLayer = {\n name: xmlLayer?.Name,\n title: xmlLayer?.Title,\n srs: xmlLayer?.SRS || [],\n layers: []\n };\n\n // Single layer is not represented as array in XML\n const xmlLayers = getXMLArray(xmlLayer?.Layer);\n\n for (const xmlSubLayer of xmlLayers) {\n layer.layers?.push(extractLayer(xmlSubLayer));\n }\n\n return layer;\n}\n\nfunction getXMLArray(xmlValue: any) {\n if (Array.isArray(xmlValue)) {\n return xmlValue;\n }\n if (xmlValue) {\n return [xmlValue];\n }\n return [];\n}\n"],"mappings":";;AAEA,SAAQA,SAAS,QAAO,iBAAiB;;AAs9DzC,OAAO,SAASC,oBAAoB,CAACC,IAAY,EAAEC,OAAO,EAAmB;EAC3E,MAAMC,SAAS,GAAGJ,SAAS,CAACK,aAAa,CAACH,IAAI,EAAEC,OAAO,CAAC;EACxD,MAAMG,eAAoB,GACxBF,SAAS,CAACG,mBAAmB,IAAIH,SAAS,CAACI,gBAAgB,IAAIJ,SAAS;EAC1E,OAAOK,mBAAmB,CAACH,eAAe,CAAC;AAC7C;;AAGA,SAASG,mBAAmB,CAACC,GAAQ,EAAmB;EAAA;EACtD,MAAMC,YAA6B,GAAG;IACpCC,IAAI,EAAE,iBAAAF,GAAG,CAACG,OAAO,iDAAX,aAAaC,IAAI,KAAI,SAAS;IACpCC,KAAK,mBAAEL,GAAG,CAACG,OAAO,kDAAX,cAAaG,KAAK;IACzBC,QAAQ,EAAE,EAAE;IACZC,QAAQ,EAAE,CAAC,CAAC;IACZC,KAAK,EAAEC,YAAY,oBAACV,GAAG,CAACW,UAAU,oDAAd,gBAAgBC,KAAK,CAAC;IAC1CC,GAAG,EAAEb;EACP,CAAC;EAED,KAAK,MAAMc,OAAO,IAAI,kBAAAd,GAAG,CAACG,OAAO,2EAAX,cAAaY,WAAW,0DAAxB,sBAA0BC,OAAO,KAAI,EAAE,EAAE;IAAA;IAC7Df,YAAY,CAACM,QAAQ,CAACU,IAAI,CAACH,OAAO,CAAC;EACrC;EAEA,KAAK,MAAM,CAACZ,IAAI,EAAEgB,UAAU,CAAC,IAAIC,MAAM,CAACC,OAAO,CAAC,qBAAApB,GAAG,CAACW,UAAU,qDAAd,iBAAgBU,OAAO,KAAI,CAAC,CAAC,CAAC,EAAE;IAAA;IAC9EpB,YAAY,CAACO,QAAQ,CAACN,IAAI,CAAC,GAAGoB,cAAc,CAACpB,IAAI,EAAEgB,UAAU,CAAC;EAChE;EAEA,OAAOjB,YAAY;AACrB;;AAGA,SAASqB,cAAc,CAACpB,IAAY,EAAEgB,UAAe,EAAc;EACjE,MAAMK,MAAyB,GAAGL,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEM,MAAM;EACpD,MAAMC,SAAmB,GAAGC,KAAK,CAACC,OAAO,CAACJ,MAAM,CAAC,GAAGA,MAAM,GAAG,CAACA,MAAM,CAAC;EACrE,OAAO;IAACrB,IAAI;IAAEuB;EAAS,CAAC;AAC1B;;AAGA,SAASf,YAAY,CAACkB,QAAa,EAAY;EAC7C,MAAMnB,KAAe,GAAG;IACtBP,IAAI,EAAE0B,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAExB,IAAI;IACpBC,KAAK,EAAEuB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEtB,KAAK;IACtBuB,GAAG,EAAE,CAAAD,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEE,GAAG,KAAI,EAAE;IACxBC,MAAM,EAAE;EACV,CAAC;;EAGD,MAAMC,SAAS,GAAGC,WAAW,CAACL,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEhB,KAAK,CAAC;EAE9C,KAAK,MAAMsB,WAAW,IAAIF,SAAS,EAAE;IAAA;IACnC,iBAAAvB,KAAK,CAACsB,MAAM,kDAAZ,cAAcd,IAAI,CAACP,YAAY,CAACwB,WAAW,CAAC,CAAC;EAC/C;EAEA,OAAOzB,KAAK;AACd;AAEA,SAASwB,WAAW,CAACE,QAAa,EAAE;EAClC,IAAIT,KAAK,CAACC,OAAO,CAACQ,QAAQ,CAAC,EAAE;IAC3B,OAAOA,QAAQ;EACjB;EACA,IAAIA,QAAQ,EAAE;IACZ,OAAO,CAACA,QAAQ,CAAC;EACnB;EACA,OAAO,EAAE;AACX"}
@@ -0,0 +1,12 @@
1
+
2
+
3
+ import { XMLLoader } from '@loaders.gl/xml';
4
+
5
+ export function parseWMSError(text, options) {
6
+ var _XMLLoader$parseTextS, _parsedXML$ServiceExc, _parsedXML$ogcServic;
7
+ const parsedXML = (_XMLLoader$parseTextS = XMLLoader.parseTextSync) === null || _XMLLoader$parseTextS === void 0 ? void 0 : _XMLLoader$parseTextS.call(XMLLoader, text, options);
8
+ const serviceExceptionXML = (parsedXML === null || parsedXML === void 0 ? void 0 : (_parsedXML$ServiceExc = parsedXML.ServiceExceptionReport) === null || _parsedXML$ServiceExc === void 0 ? void 0 : _parsedXML$ServiceExc.ServiceException) || (parsedXML === null || parsedXML === void 0 ? void 0 : (_parsedXML$ogcServic = parsedXML['ogc:ServiceExceptionReport']) === null || _parsedXML$ogcServic === void 0 ? void 0 : _parsedXML$ogcServic['ogc:ServiceException']);
9
+ const message = typeof serviceExceptionXML === 'string' ? serviceExceptionXML : serviceExceptionXML.value || serviceExceptionXML.code || 'Unknown error';
10
+ return message;
11
+ }
12
+ //# sourceMappingURL=parse-wms-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-wms-error.js","names":["XMLLoader","parseWMSError","text","options","parsedXML","parseTextSync","serviceExceptionXML","ServiceExceptionReport","ServiceException","message","value","code"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-error.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\n\n/**\n * Extract an error message from WMS error response XML\n * @param text\n * @param options\n * @returns a string with a human readable message\n */\nexport function parseWMSError(text: string, options): string {\n const parsedXML = XMLLoader.parseTextSync?.(text, options);\n const serviceExceptionXML =\n parsedXML?.ServiceExceptionReport?.ServiceException ||\n parsedXML?.['ogc:ServiceExceptionReport']?.['ogc:ServiceException'];\n // Sigh, can be either a string or an object\n const message =\n typeof serviceExceptionXML === 'string'\n ? serviceExceptionXML\n : serviceExceptionXML.value || serviceExceptionXML.code || 'Unknown error';\n return message;\n}\n"],"mappings":";;AAEA,SAAQA,SAAS,QAAO,iBAAiB;;AAQzC,OAAO,SAASC,aAAa,CAACC,IAAY,EAAEC,OAAO,EAAU;EAAA;EAC3D,MAAMC,SAAS,4BAAGJ,SAAS,CAACK,aAAa,0DAAvB,2BAAAL,SAAS,EAAiBE,IAAI,EAAEC,OAAO,CAAC;EAC1D,MAAMG,mBAAmB,GACvB,CAAAF,SAAS,aAATA,SAAS,gDAATA,SAAS,CAAEG,sBAAsB,0DAAjC,sBAAmCC,gBAAgB,MACnDJ,SAAS,aAATA,SAAS,+CAATA,SAAS,CAAG,4BAA4B,CAAC,yDAAzC,qBAA4C,sBAAsB,CAAC;EAErE,MAAMK,OAAO,GACX,OAAOH,mBAAmB,KAAK,QAAQ,GACnCA,mBAAmB,GACnBA,mBAAmB,CAACI,KAAK,IAAIJ,mBAAmB,CAACK,IAAI,IAAI,eAAe;EAC9E,OAAOF,OAAO;AAChB"}
@@ -0,0 +1,27 @@
1
+
2
+
3
+ import { XMLLoader } from '@loaders.gl/xml';
4
+
5
+ export function parseWMSFeatureInfo(text, options) {
6
+ var _parsedXML$FeatureInf;
7
+ const parsedXML = XMLLoader.parseTextSync(text, options);
8
+ const xmlFeatureInfo = ((_parsedXML$FeatureInf = parsedXML.FeatureInfoResponse) === null || _parsedXML$FeatureInf === void 0 ? void 0 : _parsedXML$FeatureInf.FIELDS) || [];
9
+ const xmlFeatures = Array.isArray(xmlFeatureInfo) ? xmlFeatureInfo : [xmlFeatureInfo];
10
+ return {
11
+ features: xmlFeatures.map(xmlFeature => extractFeature(xmlFeature))
12
+ };
13
+ }
14
+ function extractFeature(xmlFeature) {
15
+ const xmlFields = xmlFeature || {};
16
+ return {
17
+ attributes: xmlFields,
18
+ type: '',
19
+ bounds: {
20
+ bottom: 0,
21
+ top: 0,
22
+ left: 0,
23
+ right: 0
24
+ }
25
+ };
26
+ }
27
+ //# sourceMappingURL=parse-wms-features.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-wms-features.js","names":["XMLLoader","parseWMSFeatureInfo","text","options","parsedXML","parseTextSync","xmlFeatureInfo","FeatureInfoResponse","FIELDS","xmlFeatures","Array","isArray","features","map","xmlFeature","extractFeature","xmlFields","attributes","type","bounds","bottom","top","left","right"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-features.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\n\n/** WMS Feature info - response to a WMS `GetFeatureInfo` request */\nexport type WMSFeatureInfo = {\n features: WMSFeature[];\n};\n\nexport type WMSFeature = {\n attributes: Record<string, number | string>;\n type: string;\n bounds: {top: number; bottom: number; left: number; right: number};\n};\n\n/**\n * Parses a typed data structure from raw XML for `GetFeatureInfo` response\n * @note Error handlings is fairly weak\n */\nexport function parseWMSFeatureInfo(text: string, options): WMSFeatureInfo {\n const parsedXML = XMLLoader.parseTextSync(text, options);\n const xmlFeatureInfo: any = parsedXML.FeatureInfoResponse?.FIELDS || [];\n\n const xmlFeatures = Array.isArray(xmlFeatureInfo) ? xmlFeatureInfo : [xmlFeatureInfo];\n\n return {\n features: xmlFeatures.map((xmlFeature) => extractFeature(xmlFeature))\n };\n}\n\nfunction extractFeature(xmlFeature: any) {\n const xmlFields = xmlFeature || {};\n // TODO - not correct\n return {\n attributes: xmlFields,\n type: '',\n bounds: {bottom: 0, top: 0, left: 0, right: 0}\n };\n}\n"],"mappings":";;AAEA,SAAQA,SAAS,QAAO,iBAAiB;;AAiBzC,OAAO,SAASC,mBAAmB,CAACC,IAAY,EAAEC,OAAO,EAAkB;EAAA;EACzE,MAAMC,SAAS,GAAGJ,SAAS,CAACK,aAAa,CAACH,IAAI,EAAEC,OAAO,CAAC;EACxD,MAAMG,cAAmB,GAAG,0BAAAF,SAAS,CAACG,mBAAmB,0DAA7B,sBAA+BC,MAAM,KAAI,EAAE;EAEvE,MAAMC,WAAW,GAAGC,KAAK,CAACC,OAAO,CAACL,cAAc,CAAC,GAAGA,cAAc,GAAG,CAACA,cAAc,CAAC;EAErF,OAAO;IACLM,QAAQ,EAAEH,WAAW,CAACI,GAAG,CAAEC,UAAU,IAAKC,cAAc,CAACD,UAAU,CAAC;EACtE,CAAC;AACH;AAEA,SAASC,cAAc,CAACD,UAAe,EAAE;EACvC,MAAME,SAAS,GAAGF,UAAU,IAAI,CAAC,CAAC;EAElC,OAAO;IACLG,UAAU,EAAED,SAAS;IACrBE,IAAI,EAAE,EAAE;IACRC,MAAM,EAAE;MAACC,MAAM,EAAE,CAAC;MAAEC,GAAG,EAAE,CAAC;MAAEC,IAAI,EAAE,CAAC;MAAEC,KAAK,EAAE;IAAC;EAC/C,CAAC;AACH"}
@@ -0,0 +1,9 @@
1
+
2
+
3
+ import { XMLLoader } from '@loaders.gl/xml';
4
+
5
+ export function parseWMSLayerDescription(text, options) {
6
+ const parsedXML = XMLLoader.parseTextSync(text, options);
7
+ return parsedXML;
8
+ }
9
+ //# sourceMappingURL=parse-wms-layer-description.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-wms-layer-description.js","names":["XMLLoader","parseWMSLayerDescription","text","options","parsedXML","parseTextSync"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-layer-description.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\n\n/** Layer description - response to a WMS `DescribeLayer` request */\nexport type WMSLayerDescription = {\n layers: {}[];\n};\n\n/**\n * Parses a typed data structure from raw XML for `GetFeatureInfo` response\n * @note Error handlings is fairly weak\n */\nexport function parseWMSLayerDescription(text: string, options): WMSLayerDescription {\n const parsedXML = XMLLoader.parseTextSync(text, options);\n // TODO - implement parser\n return parsedXML as unknown as WMSLayerDescription;\n}\n"],"mappings":";;AAEA,SAAQA,SAAS,QAAO,iBAAiB;;AAWzC,OAAO,SAASC,wBAAwB,CAACC,IAAY,EAAEC,OAAO,EAAuB;EACnF,MAAMC,SAAS,GAAGJ,SAAS,CAACK,aAAa,CAACH,IAAI,EAAEC,OAAO,CAAC;EAExD,OAAOC,SAAS;AAClB"}
@@ -0,0 +1,67 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+
3
+ import { ImageSource } from '../../sources/image-source';
4
+ export class ArcGISImageServer extends ImageSource {
5
+ constructor(props) {
6
+ super(props);
7
+ _defineProperty(this, "props", void 0);
8
+ this.props = props;
9
+ }
10
+
11
+ async getMetadata() {
12
+ return await this.metadata();
13
+ }
14
+
15
+ async getImage(parameters) {
16
+ throw new Error('not implemented');
17
+ }
18
+
19
+ async metadata() {
20
+ throw new Error('not implemented');
21
+ }
22
+
23
+ exportImage(options) {
24
+ throw new Error('not implemented');
25
+ }
26
+
27
+ metadataURL(options) {
28
+ return "".concat(this.props.url, "?f=pjson");
29
+ }
30
+
31
+ exportImageURL(options) {
32
+ const bbox = "bbox=".concat(options.bbox[0], ",").concat(options.bbox[1], ",").concat(options.bbox[2], ",").concat(options.bbox[3]);
33
+ const size = "size=".concat(options.width, ",").concat(options.height);
34
+ const arcgisOptions = {
35
+ ...options,
36
+ bbox,
37
+ size
38
+ };
39
+ delete arcgisOptions.width;
40
+ delete arcgisOptions.height;
41
+ return this.getUrl('exportImage', arcgisOptions);
42
+ }
43
+
44
+ getUrl(path, options, extra) {
45
+ let url = "".concat(this.props.url, "/").concat(path);
46
+ let first = true;
47
+ for (const [key, value] of Object.entries(options)) {
48
+ url += first ? '?' : '&';
49
+ first = false;
50
+ if (Array.isArray(value)) {
51
+ url += "".concat(key.toUpperCase(), "=").concat(value.join(','));
52
+ } else {
53
+ url += "".concat(key.toUpperCase(), "=").concat(value ? String(value) : '');
54
+ }
55
+ }
56
+ return url;
57
+ }
58
+
59
+ async checkResponse(response) {
60
+ if (!response.ok) {
61
+ throw new Error('error');
62
+ }
63
+ }
64
+ }
65
+ _defineProperty(ArcGISImageServer, "type", 'arcgis-image-server');
66
+ _defineProperty(ArcGISImageServer, "testURL", url => url.toLowerCase().includes('ImageServer'));
67
+ //# sourceMappingURL=arcgis-image-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arcgis-image-service.js","names":["ImageSource","ArcGISImageServer","constructor","props","getMetadata","metadata","getImage","parameters","Error","exportImage","options","metadataURL","url","exportImageURL","bbox","size","width","height","arcgisOptions","getUrl","path","extra","first","key","value","Object","entries","Array","isArray","toUpperCase","join","String","checkResponse","response","ok","toLowerCase","includes"],"sources":["../../../../../src/lib/services/arcgis/arcgis-image-service.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {ImageType} from '@loaders.gl/images';\nimport type {ImageSourceMetadata, GetImageParameters} from '../../sources/image-source';\nimport type {ImageSourceProps} from '../../sources/image-source';\nimport {ImageSource} from '../../sources/image-source';\n\nexport type ArcGISImageServerProps = ImageSourceProps & {\n url: string;\n};\n\n/**\n * ArcGIS ImageServer\n * Note - exports a big API, that could be exposed here if there is a use case\n * @see https://developers.arcgis.com/rest/services-reference/enterprise/image-service.htm\n */\nexport class ArcGISImageServer extends ImageSource {\n static type: 'arcgis-image-server' = 'arcgis-image-server';\n static testURL = (url: string): boolean => url.toLowerCase().includes('ImageServer');\n\n props: ArcGISImageServerProps;\n\n constructor(props: ArcGISImageServerProps) {\n super(props);\n this.props = props;\n }\n\n // ImageSource (normalized endpoints)\n\n async getMetadata(): Promise<ImageSourceMetadata> {\n return (await this.metadata()) as ImageSourceMetadata;\n // TODO - normalize metadata\n }\n\n async getImage(parameters: GetImageParameters): Promise<ImageType> {\n throw new Error('not implemented');\n // TODO - Map generic parameters to ArcGIS specific parameters\n // return await this.exportImage(parameters);\n }\n\n // ImageServer endpoints\n\n async metadata(): Promise<unknown> {\n // We just need a JSON parsing...\n // return this.getUrl({path: '', ...options});\n throw new Error('not implemented');\n }\n\n /** \n * Form a URL to an ESRI ImageServer\n // https://sampleserver6.arcgisonline.com/arcgis/rest/services/NLCDLandCover2001/ImageServer/exportImage?bbox=${bounds[0]},${bounds[1]},${bounds[2]},${bounds[3]}&bboxSR=4326&size=${width},${height}&imageSR=102100&time=&format=jpgpng&pixelType=U8&noData=&noDataInterpretation=esriNoDataMatchAny&interpolation=+RSP_NearestNeighbor&compression=&compressionQuality=&bandIds=&mosaicRule=&renderingRule=&f=image`,\n */\n exportImage(options: {\n boundingBox: [number, number, number, number];\n boundingBoxSR?: string;\n width: number;\n height: number;\n imageSR?: string;\n time?: never;\n format?: 'jpgpng';\n pixelType?: 'U8';\n noData?: never;\n noDataInterpretation?: 'esriNoDataMatchAny';\n interpolation?: '+RSP_NearestNeighbor';\n compression?: never;\n compressionQuality?: never;\n bandIds?: never;\n mosaicRule?: never;\n renderingRule?: never;\n f?: 'image';\n }): Promise<ImageType> {\n // See WMSService.getMap()\n throw new Error('not implemented');\n }\n\n // URL creators\n\n metadataURL(options: {parameters?: Record<string, unknown>}): string {\n return `${this.props.url}?f=pjson`;\n }\n\n /** \n * Form a URL to an ESRI ImageServer\n // https://sampleserver6.arcgisonline.com/arcgis/rest/services/NLCDLandCover2001/ImageServer/exportImage?\n // bbox=${bounds[0]},${bounds[1]},${bounds[2]},${bounds[3]}&bboxSR=4326&\n // size=${width},${height}&imageSR=102100&time=&format=jpgpng&pixelType=U8&\n // noData=&noDataInterpretation=esriNoDataMatchAny&interpolation=+RSP_NearestNeighbor&compression=&\n // compressionQuality=&bandIds=&mosaicRule=&renderingRule=&\n // f=image\n */\n exportImageURL(options: {\n bbox: [number, number, number, number];\n boxSR?: string;\n width: number;\n height: number;\n imageSR?: string;\n time?: never;\n format?: 'jpgpng';\n pixelType?: 'U8';\n noData?: never;\n noDataInterpretation?: 'esriNoDataMatchAny';\n interpolation?: '+RSP_NearestNeighbor';\n compression?: never;\n compressionQuality?: never;\n bandIds?: never;\n mosaicRule?: never;\n renderingRule?: never;\n f?: 'image';\n }): string {\n const bbox = `bbox=${options.bbox[0]},${options.bbox[1]},${options.bbox[2]},${options.bbox[3]}`;\n const size = `size=${options.width},${options.height}`;\n const arcgisOptions = {...options, bbox, size};\n // @ts-expect-error\n delete arcgisOptions.width;\n // @ts-expect-error\n delete arcgisOptions.height;\n return this.getUrl('exportImage', arcgisOptions);\n }\n\n // INTERNAL METHODS\n\n /**\n * @note protected, since perhaps getWMSUrl may need to be overridden to handle certain backends?\n * @note if override is common, maybe add a callback prop?\n * */\n protected getUrl(\n path: string,\n options: Record<string, unknown>,\n extra?: Record<string, unknown>\n ): string {\n let url = `${this.props.url}/${path}`;\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 url;\n }\n\n /** Checks for and parses a WMS XML formatted ServiceError and throws an exception */\n protected async checkResponse(response: Response) {\n if (!response.ok) {\n // } || response.headers['content-type'] === WMSErrorLoader.mimeTypes[0]) {\n // const arrayBuffer = await response.arrayBuffer();\n // const error = await WMSErrorLoader.parse(arrayBuffer, this.loadOptions);\n throw new Error('error');\n }\n }\n}\n"],"mappings":";;AAKA,SAAQA,WAAW,QAAO,4BAA4B;AAWtD,OAAO,MAAMC,iBAAiB,SAASD,WAAW,CAAC;EAMjDE,WAAW,CAACC,KAA6B,EAAE;IACzC,KAAK,CAACA,KAAK,CAAC;IAAC;IACb,IAAI,CAACA,KAAK,GAAGA,KAAK;EACpB;;EAIA,MAAMC,WAAW,GAAiC;IAChD,OAAQ,MAAM,IAAI,CAACC,QAAQ,EAAE;EAE/B;;EAEA,MAAMC,QAAQ,CAACC,UAA8B,EAAsB;IACjE,MAAM,IAAIC,KAAK,CAAC,iBAAiB,CAAC;EAGpC;;EAIA,MAAMH,QAAQ,GAAqB;IAGjC,MAAM,IAAIG,KAAK,CAAC,iBAAiB,CAAC;EACpC;;EAMAC,WAAW,CAACC,OAkBX,EAAsB;IAErB,MAAM,IAAIF,KAAK,CAAC,iBAAiB,CAAC;EACpC;;EAIAG,WAAW,CAACD,OAA+C,EAAU;IACnE,iBAAU,IAAI,CAACP,KAAK,CAACS,GAAG;EAC1B;;EAWAC,cAAc,CAACH,OAkBd,EAAU;IACT,MAAMI,IAAI,kBAAWJ,OAAO,CAACI,IAAI,CAAC,CAAC,CAAC,cAAIJ,OAAO,CAACI,IAAI,CAAC,CAAC,CAAC,cAAIJ,OAAO,CAACI,IAAI,CAAC,CAAC,CAAC,cAAIJ,OAAO,CAACI,IAAI,CAAC,CAAC,CAAC,CAAE;IAC/F,MAAMC,IAAI,kBAAWL,OAAO,CAACM,KAAK,cAAIN,OAAO,CAACO,MAAM,CAAE;IACtD,MAAMC,aAAa,GAAG;MAAC,GAAGR,OAAO;MAAEI,IAAI;MAAEC;IAAI,CAAC;IAE9C,OAAOG,aAAa,CAACF,KAAK;IAE1B,OAAOE,aAAa,CAACD,MAAM;IAC3B,OAAO,IAAI,CAACE,MAAM,CAAC,aAAa,EAAED,aAAa,CAAC;EAClD;;EAQUC,MAAM,CACdC,IAAY,EACZV,OAAgC,EAChCW,KAA+B,EACvB;IACR,IAAIT,GAAG,aAAM,IAAI,CAACT,KAAK,CAACS,GAAG,cAAIQ,IAAI,CAAE;IACrC,IAAIE,KAAK,GAAG,IAAI;IAChB,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAAChB,OAAO,CAAC,EAAE;MAClDE,GAAG,IAAIU,KAAK,GAAG,GAAG,GAAG,GAAG;MACxBA,KAAK,GAAG,KAAK;MACb,IAAIK,KAAK,CAACC,OAAO,CAACJ,KAAK,CAAC,EAAE;QACxBZ,GAAG,cAAOW,GAAG,CAACM,WAAW,EAAE,cAAIL,KAAK,CAACM,IAAI,CAAC,GAAG,CAAC,CAAE;MAClD,CAAC,MAAM;QACLlB,GAAG,cAAOW,GAAG,CAACM,WAAW,EAAE,cAAIL,KAAK,GAAGO,MAAM,CAACP,KAAK,CAAC,GAAG,EAAE,CAAE;MAC7D;IACF;IACA,OAAOZ,GAAG;EACZ;;EAGA,MAAgBoB,aAAa,CAACC,QAAkB,EAAE;IAChD,IAAI,CAACA,QAAQ,CAACC,EAAE,EAAE;MAIhB,MAAM,IAAI1B,KAAK,CAAC,OAAO,CAAC;IAC1B;EACF;AACF;AAAC,gBAzIYP,iBAAiB,UACS,qBAAqB;AAAA,gBAD/CA,iBAAiB,aAEVW,GAAW,IAAcA,GAAG,CAACuB,WAAW,EAAE,CAACC,QAAQ,CAAC,aAAa,CAAC"}
@@ -0,0 +1,35 @@
1
+
2
+
3
+ export async function getArcGISServices(url) {
4
+ let fetchFile = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : fetch;
5
+ if (url.includes('rest/services')) {
6
+ const serverUrl = url.replace(/rest\/services.*$/i, 'rest/services');
7
+ return loadServiceDirectory(serverUrl, fetchFile, []);
8
+ }
9
+ return null;
10
+ }
11
+ async function loadServiceDirectory(serverUrl, fetch, path) {
12
+ const serviceUrl = "".concat(serverUrl, "/").concat(path.join('/'));
13
+ const response = await fetch("".concat(serviceUrl, "?f=pjson"));
14
+ const directory = await response.json();
15
+ const services = extractServices(directory, serviceUrl);
16
+ const folders = directory.folders || [];
17
+ const promises = folders.map(folder => loadServiceDirectory("".concat(serverUrl), fetch, [...path, folder]));
18
+ for (const folderServices of await Promise.all(promises)) {
19
+ services.push(...folderServices);
20
+ }
21
+ return services;
22
+ }
23
+ function extractServices(directory, url) {
24
+ const arcgisServices = directory.services || [];
25
+ const services = [];
26
+ for (const service of arcgisServices) {
27
+ services.push({
28
+ name: service.name,
29
+ type: "arcgis-".concat(service.type.toLocaleLowerCase().replace('server', '-server')),
30
+ url: "".concat(url).concat(service.name, "/").concat(service.type)
31
+ });
32
+ }
33
+ return services;
34
+ }
35
+ //# sourceMappingURL=arcgis-server.js.map
@@ -0,0 +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":";;AAYA,OAAO,eAAeA,iBAAiB,CACrCC,GAAW,EAEgB;EAAA,IAD3BC,SAAoB,uEAAGC,KAAK;EAE5B,IAAIF,GAAG,CAACG,QAAQ,CAAC,eAAe,CAAC,EAAE;IACjC,MAAMC,SAAS,GAAGJ,GAAG,CAACK,OAAO,CAAC,oBAAoB,EAAE,eAAe,CAAC;IACpE,OAAOC,oBAAoB,CAACF,SAAS,EAAEH,SAAS,EAAE,EAAE,CAAC;EACvD;EACA,OAAO,IAAI;AACb;AAEA,eAAeK,oBAAoB,CACjCF,SAAiB,EACjBF,KAAgB,EAChBK,IAAc,EACM;EACpB,MAAMC,UAAU,aAAMJ,SAAS,cAAIG,IAAI,CAACE,IAAI,CAAC,GAAG,CAAC,CAAE;EAEnD,MAAMC,QAAQ,GAAG,MAAMR,KAAK,WAAIM,UAAU,cAAW;EACrD,MAAMG,SAAS,GAAG,MAAMD,QAAQ,CAACE,IAAI,EAAE;EAEvC,MAAMC,QAAQ,GAAGC,eAAe,CAACH,SAAS,EAAEH,UAAU,CAAC;EAEvD,MAAMO,OAAO,GAAIJ,SAAS,CAACI,OAAO,IAAI,EAAe;EACrD,MAAMC,QAAQ,GAAGD,OAAO,CAACE,GAAG,CAAEC,MAAM,IAClCZ,oBAAoB,WAAIF,SAAS,GAAIF,KAAK,EAAE,CAAC,GAAGK,IAAI,EAAEW,MAAM,CAAC,CAAC,CAC/D;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,eAAe,CAACH,SAAkB,EAAEX,GAAW,EAAa;EACnE,MAAMuB,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,mBAAYF,OAAO,CAACE,IAAI,CAACC,iBAAiB,EAAE,CAACtB,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAE;MAC/EL,GAAG,YAAKA,GAAG,SAAGwB,OAAO,CAACC,IAAI,cAAID,OAAO,CAACE,IAAI;IAC5C,CAAC,CAAC;EACJ;EACA,OAAOb,QAAQ;AACjB"}
@@ -1,12 +1,13 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
2
 
3
3
  import { ImageLoader } from '@loaders.gl/images';
4
- import { ImageSource } from './image-source';
5
- export class AdHocImageService extends ImageSource {
4
+ import { ImageSource } from '../../sources/image-source';
5
+
6
+ export class ImageService extends ImageSource {
6
7
  constructor(props) {
7
- super();
8
- _defineProperty(this, "templateUrl", void 0);
9
- this.templateUrl = props.templateUrl;
8
+ super(props);
9
+ _defineProperty(this, "props", void 0);
10
+ this.props = props;
10
11
  }
11
12
 
12
13
  async getMetadata() {
@@ -15,7 +16,7 @@ export class AdHocImageService extends ImageSource {
15
16
  async getImage(parameters) {
16
17
  const granularParameters = this.getGranularParameters(parameters);
17
18
  const url = this.getURLFromTemplate(granularParameters);
18
- const response = await fetch(url);
19
+ const response = await this.fetch(url);
19
20
  const arrayBuffer = await response.arrayBuffer();
20
21
  return await ImageLoader.parse(arrayBuffer);
21
22
  }
@@ -30,14 +31,16 @@ export class AdHocImageService extends ImageSource {
30
31
  west
31
32
  };
32
33
  }
34
+
33
35
  getURLFromTemplate(parameters) {
34
- let url = this.templateUrl;
36
+ let url = this.props.url;
35
37
  for (const [key, value] of Object.entries(parameters)) {
36
38
  url = url.replace("${".concat(key, "}"), String(value));
39
+ url = url.replace("{".concat(key, "}"), String(value));
37
40
  }
38
41
  return url;
39
42
  }
40
43
  }
41
- _defineProperty(AdHocImageService, "type", 'template');
42
- _defineProperty(AdHocImageService, "testURL", url => url.toLowerCase().includes('{'));
43
- //# sourceMappingURL=adhoc-image-service.js.map
44
+ _defineProperty(ImageService, "type", 'template');
45
+ _defineProperty(ImageService, "testURL", url => url.toLowerCase().includes('{'));
46
+ //# sourceMappingURL=image-service.js.map
@@ -0,0 +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 props: ImageServiceProps;\n\n constructor(props: ImageServiceProps) {\n super(props);\n this.props = 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,SAASD,WAAW,CAAC;EAM5CE,WAAW,CAACC,KAAwB,EAAE;IACpC,KAAK,CAACA,KAAK,CAAC;IAAC;IACb,IAAI,CAACA,KAAK,GAAGA,KAAK;EACpB;;EAIA,MAAMC,WAAW,GAAiC;IAChD,MAAM,IAAIC,KAAK,CAAC,yCAAyC,CAAC;EAC5D;EAEA,MAAMC,QAAQ,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,EAAE;IAChD,OAAO,MAAMf,WAAW,CAACgB,KAAK,CAACD,WAAW,CAAC;EAC7C;;EAKUL,qBAAqB,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,kBAAkB,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,aAAOJ,GAAG,QAAKK,MAAM,CAACJ,KAAK,CAAC,CAAC;MAC9CZ,GAAG,GAAGA,GAAG,CAACe,OAAO,YAAKJ,GAAG,QAAKK,MAAM,CAACJ,KAAK,CAAC,CAAC;IAC9C;IACA,OAAOZ,GAAG;EACZ;AACF;AAAC,gBA5CYT,YAAY,UACG,UAAU;AAAA,gBADzBA,YAAY,aAELS,GAAW,IAAcA,GAAG,CAACiB,WAAW,EAAE,CAACC,QAAQ,CAAC,GAAG,CAAC"}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=tile-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile-service.js","names":[],"sources":["../../../../../src/lib/services/generic/tile-service.ts"],"sourcesContent":[""],"mappings":""}