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

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 (184) hide show
  1. package/dist/dist.min.js +359 -174
  2. package/dist/es5/csw-capabilities-loader.js +7 -11
  3. package/dist/es5/csw-capabilities-loader.js.map +1 -1
  4. package/dist/es5/csw-domain-loader.js +7 -10
  5. package/dist/es5/csw-domain-loader.js.map +1 -1
  6. package/dist/es5/csw-records-loader.js +7 -10
  7. package/dist/es5/csw-records-loader.js.map +1 -1
  8. package/dist/es5/gml-loader.js +7 -10
  9. package/dist/es5/gml-loader.js.map +1 -1
  10. package/dist/es5/index.js +0 -7
  11. package/dist/es5/index.js.map +1 -1
  12. package/dist/es5/lerc-loader.js +17 -22
  13. package/dist/es5/lerc-loader.js.map +1 -1
  14. package/dist/es5/lib/create-image-source.js +1 -2
  15. package/dist/es5/lib/create-image-source.js.map +1 -1
  16. package/dist/es5/lib/parsers/csw/parse-csw-capabilities.js.map +1 -1
  17. package/dist/es5/lib/parsers/csw/parse-csw-domain.js +1 -1
  18. package/dist/es5/lib/parsers/csw/parse-csw-domain.js.map +1 -1
  19. package/dist/es5/lib/parsers/csw/parse-csw-records.js +1 -2
  20. package/dist/es5/lib/parsers/csw/parse-csw-records.js.map +1 -1
  21. package/dist/es5/lib/parsers/csw/parse-exception-report.js +0 -2
  22. package/dist/es5/lib/parsers/csw/parse-exception-report.js.map +1 -1
  23. package/dist/es5/lib/parsers/gml/deep-strict-equal.js +0 -8
  24. package/dist/es5/lib/parsers/gml/deep-strict-equal.js.map +1 -1
  25. package/dist/es5/lib/parsers/gml/parse-gml.js +1 -13
  26. package/dist/es5/lib/parsers/gml/parse-gml.js.map +1 -1
  27. package/dist/es5/lib/parsers/wms/parse-wms-capabilities.js +197 -54
  28. package/dist/es5/lib/parsers/wms/parse-wms-capabilities.js.map +1 -1
  29. package/dist/es5/lib/parsers/wms/parse-wms-error.js +0 -1
  30. package/dist/es5/lib/parsers/wms/parse-wms-error.js.map +1 -1
  31. package/dist/es5/lib/parsers/wms/parse-wms-features.js +0 -1
  32. package/dist/es5/lib/parsers/wms/parse-wms-features.js.map +1 -1
  33. package/dist/es5/lib/parsers/wms/parse-wms-layer-description.js +0 -1
  34. package/dist/es5/lib/parsers/wms/parse-wms-layer-description.js.map +1 -1
  35. package/dist/es5/lib/parsers/xml/parse-xml-helpers.js +67 -0
  36. package/dist/es5/lib/parsers/xml/parse-xml-helpers.js.map +1 -0
  37. package/dist/es5/lib/services/arcgis/arcgis-image-service.js +35 -54
  38. package/dist/es5/lib/services/arcgis/arcgis-image-service.js.map +1 -1
  39. package/dist/es5/lib/services/arcgis/arcgis-server.js +50 -54
  40. package/dist/es5/lib/services/arcgis/arcgis-server.js.map +1 -1
  41. package/dist/es5/lib/services/generic/image-service.js +27 -36
  42. package/dist/es5/lib/services/generic/image-service.js.map +1 -1
  43. package/dist/es5/lib/services/ogc/csw-service.js +161 -186
  44. package/dist/es5/lib/services/ogc/csw-service.js.map +1 -1
  45. package/dist/es5/lib/services/ogc/wms-service.js +283 -245
  46. package/dist/es5/lib/services/ogc/wms-service.js.map +1 -1
  47. package/dist/es5/lib/sources/data-source.js +1 -6
  48. package/dist/es5/lib/sources/data-source.js.map +1 -1
  49. package/dist/es5/lib/sources/image-source.js.map +1 -1
  50. package/dist/es5/lib/sources/tile-source.js.map +1 -1
  51. package/dist/es5/lib/sources/utils/utils.js +0 -4
  52. package/dist/es5/lib/sources/utils/utils.js.map +1 -1
  53. package/dist/es5/wip/arcgis-feature-service.js +2 -7
  54. package/dist/es5/wip/arcgis-feature-service.js.map +1 -1
  55. package/dist/es5/wip/data-source.js +0 -2
  56. package/dist/es5/wip/lib/wcs/parse-wcs-capabilities.js.map +1 -1
  57. package/dist/es5/wip/lib/wfs/parse-wfs-capabilities.js.map +1 -1
  58. package/dist/es5/wip/lib/wmts/parse-wmts-capabilities.js.map +1 -1
  59. package/dist/es5/wip/wcs-capabilities-loader.js +7 -10
  60. package/dist/es5/wip/wcs-capabilities-loader.js.map +1 -1
  61. package/dist/es5/wip/wfs-capabilities-loader.js +7 -10
  62. package/dist/es5/wip/wfs-capabilities-loader.js.map +1 -1
  63. package/dist/es5/wip/wms-feature-info-loader.js +6 -8
  64. package/dist/es5/wip/wms-feature-info-loader.js.map +1 -1
  65. package/dist/es5/wip/wms-layer-description-loader.js +6 -8
  66. package/dist/es5/wip/wms-layer-description-loader.js.map +1 -1
  67. package/dist/es5/wip/wmts-capabilities-loader.js +7 -16
  68. package/dist/es5/wip/wmts-capabilities-loader.js.map +1 -1
  69. package/dist/es5/wms-capabilities-loader.js +8 -12
  70. package/dist/es5/wms-capabilities-loader.js.map +1 -1
  71. package/dist/es5/wms-error-loader.js +7 -9
  72. package/dist/es5/wms-error-loader.js.map +1 -1
  73. package/dist/esm/bundle.js +0 -2
  74. package/dist/esm/bundle.js.map +1 -1
  75. package/dist/esm/csw-capabilities-loader.js +1 -5
  76. package/dist/esm/csw-capabilities-loader.js.map +1 -1
  77. package/dist/esm/csw-domain-loader.js +1 -4
  78. package/dist/esm/csw-domain-loader.js.map +1 -1
  79. package/dist/esm/csw-records-loader.js +1 -4
  80. package/dist/esm/csw-records-loader.js.map +1 -1
  81. package/dist/esm/gml-loader.js +1 -4
  82. package/dist/esm/gml-loader.js.map +1 -1
  83. package/dist/esm/index.js +0 -11
  84. package/dist/esm/index.js.map +1 -1
  85. package/dist/esm/lerc-loader.js +1 -4
  86. package/dist/esm/lerc-loader.js.map +1 -1
  87. package/dist/esm/lib/create-image-source.js +0 -3
  88. package/dist/esm/lib/create-image-source.js.map +1 -1
  89. package/dist/esm/lib/parsers/csw/parse-csw-capabilities.js +0 -3
  90. package/dist/esm/lib/parsers/csw/parse-csw-capabilities.js.map +1 -1
  91. package/dist/esm/lib/parsers/csw/parse-csw-domain.js +0 -3
  92. package/dist/esm/lib/parsers/csw/parse-csw-domain.js.map +1 -1
  93. package/dist/esm/lib/parsers/csw/parse-csw-records.js +0 -3
  94. package/dist/esm/lib/parsers/csw/parse-csw-records.js.map +1 -1
  95. package/dist/esm/lib/parsers/csw/parse-exception-report.js +0 -3
  96. package/dist/esm/lib/parsers/csw/parse-exception-report.js.map +1 -1
  97. package/dist/esm/lib/parsers/gml/deep-strict-equal.js +0 -9
  98. package/dist/esm/lib/parsers/gml/deep-strict-equal.js.map +1 -1
  99. package/dist/esm/lib/parsers/gml/parse-gml.js +0 -14
  100. package/dist/esm/lib/parsers/gml/parse-gml.js.map +1 -1
  101. package/dist/esm/lib/parsers/wms/parse-wms-capabilities.js +151 -42
  102. package/dist/esm/lib/parsers/wms/parse-wms-capabilities.js.map +1 -1
  103. package/dist/esm/lib/parsers/wms/parse-wms-error.js +0 -3
  104. package/dist/esm/lib/parsers/wms/parse-wms-error.js.map +1 -1
  105. package/dist/esm/lib/parsers/wms/parse-wms-features.js +0 -3
  106. package/dist/esm/lib/parsers/wms/parse-wms-features.js.map +1 -1
  107. package/dist/esm/lib/parsers/wms/parse-wms-layer-description.js +0 -3
  108. package/dist/esm/lib/parsers/wms/parse-wms-layer-description.js.map +1 -1
  109. package/dist/esm/lib/parsers/xml/parse-xml-helpers.js +53 -0
  110. package/dist/esm/lib/parsers/xml/parse-xml-helpers.js.map +1 -0
  111. package/dist/esm/lib/services/arcgis/arcgis-image-service.js +0 -9
  112. package/dist/esm/lib/services/arcgis/arcgis-image-service.js.map +1 -1
  113. package/dist/esm/lib/services/arcgis/arcgis-server.js +0 -2
  114. package/dist/esm/lib/services/arcgis/arcgis-server.js.map +1 -1
  115. package/dist/esm/lib/services/generic/image-service.js +0 -5
  116. package/dist/esm/lib/services/generic/image-service.js.map +1 -1
  117. package/dist/esm/lib/services/ogc/csw-service.js +0 -11
  118. package/dist/esm/lib/services/ogc/csw-service.js.map +1 -1
  119. package/dist/esm/lib/services/ogc/wms-service.js +96 -87
  120. package/dist/esm/lib/services/ogc/wms-service.js.map +1 -1
  121. package/dist/esm/lib/sources/data-source.js +0 -6
  122. package/dist/esm/lib/sources/data-source.js.map +1 -1
  123. package/dist/esm/lib/sources/image-source.js +0 -3
  124. package/dist/esm/lib/sources/image-source.js.map +1 -1
  125. package/dist/esm/lib/sources/tile-source.js +0 -3
  126. package/dist/esm/lib/sources/tile-source.js.map +1 -1
  127. package/dist/esm/lib/sources/utils/utils.js +0 -5
  128. package/dist/esm/lib/sources/utils/utils.js.map +1 -1
  129. package/dist/esm/wip/arcgis-feature-service.js +0 -3
  130. package/dist/esm/wip/arcgis-feature-service.js.map +1 -1
  131. package/dist/esm/wip/lib/wcs/parse-wcs-capabilities.js +0 -3
  132. package/dist/esm/wip/lib/wcs/parse-wcs-capabilities.js.map +1 -1
  133. package/dist/esm/wip/lib/wfs/parse-wfs-capabilities.js +0 -3
  134. package/dist/esm/wip/lib/wfs/parse-wfs-capabilities.js.map +1 -1
  135. package/dist/esm/wip/lib/wmts/parse-wmts-capabilities.js +0 -3
  136. package/dist/esm/wip/lib/wmts/parse-wmts-capabilities.js.map +1 -1
  137. package/dist/esm/wip/wcs-capabilities-loader.js +1 -4
  138. package/dist/esm/wip/wcs-capabilities-loader.js.map +1 -1
  139. package/dist/esm/wip/wfs-capabilities-loader.js +1 -4
  140. package/dist/esm/wip/wfs-capabilities-loader.js.map +1 -1
  141. package/dist/esm/wip/wms-feature-info-loader.js +0 -2
  142. package/dist/esm/wip/wms-feature-info-loader.js.map +1 -1
  143. package/dist/esm/wip/wms-layer-description-loader.js +0 -2
  144. package/dist/esm/wip/wms-layer-description-loader.js.map +1 -1
  145. package/dist/esm/wip/wmts-capabilities-loader.js +1 -6
  146. package/dist/esm/wip/wmts-capabilities-loader.js.map +1 -1
  147. package/dist/esm/wms-capabilities-loader.js +3 -7
  148. package/dist/esm/wms-capabilities-loader.js.map +1 -1
  149. package/dist/esm/wms-error-loader.js +1 -4
  150. package/dist/esm/wms-error-loader.js.map +1 -1
  151. package/dist/index.d.ts +0 -3
  152. package/dist/index.d.ts.map +1 -1
  153. package/dist/index.js +3 -5
  154. package/dist/lib/parsers/wms/parse-wms-capabilities.d.ts +78 -62
  155. package/dist/lib/parsers/wms/parse-wms-capabilities.d.ts.map +1 -1
  156. package/dist/lib/parsers/wms/parse-wms-capabilities.js +165 -1935
  157. package/dist/lib/parsers/xml/parse-xml-helpers.d.ts +11 -0
  158. package/dist/lib/parsers/xml/parse-xml-helpers.d.ts.map +1 -0
  159. package/dist/lib/parsers/xml/parse-xml-helpers.js +68 -0
  160. package/dist/lib/services/arcgis/arcgis-image-service.js +1 -1
  161. package/dist/lib/services/generic/image-service.js +1 -1
  162. package/dist/lib/services/ogc/csw-service.d.ts +1 -1
  163. package/dist/lib/services/ogc/csw-service.d.ts.map +1 -1
  164. package/dist/lib/services/ogc/csw-service.js +1 -1
  165. package/dist/lib/services/ogc/wms-service.d.ts +63 -58
  166. package/dist/lib/services/ogc/wms-service.d.ts.map +1 -1
  167. package/dist/lib/services/ogc/wms-service.js +106 -71
  168. package/dist/lib/sources/image-source.d.ts +3 -9
  169. package/dist/lib/sources/image-source.d.ts.map +1 -1
  170. package/dist/wip/wmts-capabilities-loader.d.ts +3 -4
  171. package/dist/wip/wmts-capabilities-loader.d.ts.map +1 -1
  172. package/dist/wip/wmts-capabilities-loader.js +1 -0
  173. package/dist/wms-capabilities-loader.d.ts +6 -1
  174. package/dist/wms-capabilities-loader.d.ts.map +1 -1
  175. package/dist/wms-capabilities-loader.js +2 -2
  176. package/package.json +6 -6
  177. package/src/index.ts +3 -4
  178. package/src/lib/parsers/wms/parse-wms-capabilities.ts +293 -2004
  179. package/src/lib/parsers/xml/parse-xml-helpers.ts +65 -0
  180. package/src/lib/services/ogc/csw-service.ts +1 -1
  181. package/src/lib/services/ogc/wms-service.ts +169 -109
  182. package/src/lib/sources/image-source.ts +3 -9
  183. package/src/wip/wmts-capabilities-loader.ts +2 -2
  184. package/src/wms-capabilities-loader.ts +9 -3
@@ -1,2072 +1,361 @@
1
1
  // loaders.gl, MIT license
2
2
 
3
3
  import {XMLLoader} from '@loaders.gl/xml';
4
+ import {
5
+ getXMLArray,
6
+ getXMLStringArray,
7
+ getXMLInteger,
8
+ getXMLFloat,
9
+ getXMLBoolean
10
+ } from '../xml/parse-xml-helpers';
4
11
 
5
12
  /** All capabilities of a WMS service - response to a WMS `GetCapabilities` data structure extracted from XML */
6
13
  export type WMSCapabilities = {
14
+ /** Version of the WMS service */
15
+ version?: string; // '1.3.0' | '1.1.1' | '1.1.0' | '1.0.0'
16
+ /** A short name for the service */
7
17
  name: string;
18
+ /** A human readable name for the service */
8
19
  title?: string;
20
+ /** A more extensive description of the service */
9
21
  abstract?: string;
22
+ /** A set of keywords e.g. for searching services */
10
23
  keywords: string[];
11
- layer: {
12
- name: string;
13
- title?: string;
14
- srs?: string[];
15
- boundingBox?: [number, number, number, number];
16
- layers: WMSLayer[];
17
- };
24
+ /** A field of unspecified format, if present describes any access constraints required to use the service. */
25
+ accessConstraints?: string;
26
+ /** A field of unspecified format, if present describes any fees associated with the use of the service */
27
+ fees?: string;
28
+ /** If present, the max number of layers that can be rendered by the service */
29
+ layerLimit?: number;
30
+ /** If present, the widest image that can be rendered by the service */
31
+ maxWidth?: number;
32
+ /** If present, the tallest image that can be rendered by the service */
33
+ maxHeight?: number;
34
+ /** Hierarchical list of layers. */
35
+ layers: WMSLayer[];
36
+ /** A map with information about supported WMS requests. If a record is present, the request is supported by the service */
18
37
  requests: Record<string, WMSRequest>;
19
- raw: Record<string, unknown>;
38
+ /** Information about any exceptions that the service will report (HTTP status != 2xx) */
39
+ exceptions?: WMSExceptions;
40
+ /** Only if `options.raw`: raw untyped JSON parsed from XML. Can include information not extracted in the typed response. */
41
+ raw?: Record<string, unknown>;
42
+ /** Only if `options.xml`, the unparsed XML string can be requested */
43
+ xml?: string;
20
44
  };
21
45
 
46
+ /**
47
+ * Metadata about a layer
48
+ * Layers inherit many properties from their parent layers, see description of individual props for details.
49
+ * @see https://www.ogc.org/standard/wms/ 7.2.4.6
50
+ */
22
51
  export type WMSLayer = {
23
- name: string;
24
- title?: string;
25
- srs?: string[];
26
- boundingBox?: [number, number, number, number];
27
- layers: WMSLayer[];
28
- };
52
+ /** The title is a human readable name. It is mandatory on each layer. Not inherited. */
53
+ title: string;
54
+ /** A layer is renderable if it has a name. A named parent layer will render all its sublayers. Not inherited. */
55
+ name?: string;
56
+ /** A narrative description of the map layer. */
57
+ abstract?: string;
58
+ /** A set of keywords e.g. for searching layers */
59
+ keywords: string[];
60
+ /** layer limits in unspecified CRS:84-like lng/lat, for quick access w/o CRS calculations. Defined or inherited. */
61
+ geographicBoundingBox?: [min: [x: number, y: number], max: [x: number, y: number]];
62
+ /** Supported CRS. Either defined or inherited. */
63
+ crs?: string[];
64
+ /** Bounding boxes in specific CRS:es */
65
+ boundingBoxes?: WMSBoundingBox[];
29
66
 
30
- export type WMSRequest = {
31
- name: string;
32
- mimeTypes: string[];
33
- };
67
+ // minScale: number;
68
+ // maxScale: number;
69
+ // dimensions: ?? 7.2.4.6.10
70
+ // MetadataURL
71
+ // Attribution
72
+ // Identifier and AuthorityURL
73
+ // FeatureListURL
74
+ // DataURL
34
75
 
35
- /**
36
- * <EX_GeographicBoundingBox>
37
- * <westBoundLongitude>-180</westBoundLongitude>
38
- * <eastBoundLongitude>180</eastBoundLongitude>
39
- * <southBoundLatitude>-65</southBoundLatitude>
40
- * <northBoundLatitude>75</northBoundLatitude>
41
- * </EX_GeographicBoundingBox>
42
- * <BoundingBox CRS="EPSG:4326"
43
- * minx="-65" miny="-180" maxx="75" maxy="180" />
44
- */
45
- export type Layer = {
46
- name: string; // e.g. DMSP-Global-Composites-Version-4
47
- title: string; // e.g. DMSP-Global-Composites-Version-4</Title>
48
- abstract?: string; // DMSP-Global-Composites-Version-4</Abstract>
49
- crs: string; // e.g. EPSG:4326</CRS>
76
+ /** Whether queries can be performed on the layer */
50
77
  queryable?: boolean;
78
+ /** `false` if layer has significant no-data areas that the client can display as transparent. */
51
79
  opaque?: boolean;
80
+ /** WMS cascading allows server to expose layers coming from other WMS servers as if they were local layers */
52
81
  cascaded?: boolean;
53
- geographicBoundingBox: number[];
54
- boundingBox: number[];
55
- boundingBoxCRS: string;
56
- layers: Layer[];
82
+ // noSubsets: boolean
83
+ // fixedWith: number
84
+ // fixedHeight: number
85
+
86
+ /** A list of styles. @note not yet supported by WMSCapabilitiesLoader */
87
+ styles?: unknown[];
88
+
89
+ /** Sublayers - these inherit crs and boundingBox) if not overridden) */
90
+ layers?: WMSLayer[];
57
91
  };
58
92
 
59
93
  /**
60
- * <Style>
61
- * <Name>default</Name>
62
- * <Title>default</Title>
63
- * <LegendURL width="89" height="21">
64
- * <Format>image/png</Format>
65
- * <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"/>
66
- * </LegendURL>
67
- * </Style>
94
+ * A bounding box specifies the coordinate range for data in the layer.
95
+ * No data is available outside the bounding box.
68
96
  */
69
- export type Style = {
70
- name: string; // e.g. DMSP-Global-Composites-Version-4
71
- title: string; // e.g. DMSP-Global-Composites-Version-4</Title>
72
- legendUrl?: {
73
- width: number;
74
- height: number;
75
- format: string;
76
- onlineResource: string;
77
- };
97
+ export type WMSBoundingBox = {
98
+ /** CRS indicates the Layer CRS that applies to this bounding box. */
99
+ crs: string;
100
+ /** `[[w, s], [e, n]]`, indicates the limits of the bounding box using the axis units and order of the specified CRS. */
101
+ boundingBox: [min: [x: number, y: number], max: [x: number, y: number]];
102
+ /** Spatial horizontal resolution of data in same units as bounding box */
103
+ xResolution?: number;
104
+ /** Spatial vertical resolution of data in same units as bounding box */
105
+ yResolution?: number;
78
106
  };
79
107
 
80
- // export type Capability = GetCapabilities | GetMap;
81
-
82
- export type WMSService = {
83
- rawData: unknown;
84
- name: string;
85
- title: string;
86
- onlineResource?: string;
87
- contactInformation?: string;
88
- maxWidth?: number;
89
- maxHeight?: number;
90
- capabilities: {
91
- // getCapabilities: GetCapabilities;
92
- // getMap: GetMap;
93
- // getFeatureInfo?: GetFeatureInfo;
94
- };
108
+ /** Metadata about a supported WMS request */
109
+ export type WMSRequest = {
110
+ /** MIMEtypes that can be returned by this request. */
111
+ mimeTypes: string[];
112
+ };
95
113
 
96
- untypedData: unknown; // The raw, untyped JSON converted from XML
114
+ export type WMSExceptions = {
115
+ /** MIME types for exception response payloads. */
116
+ mimeTypes: string[];
97
117
  };
98
118
 
99
- /*
100
- <Capability>
101
- <Request>
102
- <GetCapabilities>
103
- <Format>text/xml</Format>
104
- <DCPType>
105
- <HTTP>
106
- <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?"/></Get>
107
- <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?"/></Post>
108
- </HTTP>
109
- </DCPType>
110
- </GetCapabilities>
111
- <GetMap>
112
- <Format>image/png</Format>
113
- <Format>image/tiff</Format>
114
- <Format>image/jpeg</Format>
115
- <Format>image/png; mode=8bit</Format>
116
- <Format>application/x-pdf</Format>
117
- <Format>image/svg+xml</Format>
118
- <DCPType>
119
- <HTTP>
120
- <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?"/></Get>
121
- <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?"/></Post>
122
- </HTTP>
123
- </DCPType>
124
- </GetMap>
125
- <GetFeatureInfo>
126
- <Format>text/plain</Format>
127
- <Format>application/vnd.ogc.gml</Format>
128
- <DCPType>
129
- <HTTP>
130
- <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?"/></Get>
131
- <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?"/></Post>
132
- </HTTP>
133
- </DCPType>
134
- </GetFeatureInfo>
135
- <sld:DescribeLayer>
136
- <Format>text/xml</Format>
137
- <DCPType>
138
- <HTTP>
139
- <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?"/></Get>
140
- <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?"/></Post>
141
- </HTTP>
142
- </DCPType>
143
- </sld:DescribeLayer>
144
- <sld:GetLegendGraphic>
145
- <Format>image/png</Format>
146
- <Format>image/jpeg</Format>
147
- <Format>image/png; mode=8bit</Format>
148
- <DCPType>
149
- <HTTP>
150
- <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?"/></Get>
151
- <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?"/></Post>
152
- </HTTP>
153
- </DCPType>
154
- </sld:GetLegendGraphic>
155
- <ms:GetStyles>
156
- <Format>text/xml</Format>
157
- <DCPType>
158
- <HTTP>
159
- <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?"/></Get>
160
- <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?"/></Post>
161
- </HTTP>
162
- </DCPType>
163
- </ms:GetStyles>
164
- </Request>
165
- <Exception>
166
- <Format>XML</Format>
167
- <Format>INIMAGE</Format>
168
- <Format>BLANK</Format>
169
- </Exception>
170
- <sld:UserDefinedSymbolization SupportSLD="1" UserLayer="0" UserStyle="1" RemoteWFS="0" InlineFeature="0" RemoteWCS="0"/>
171
- <Layer>
172
- <Name>DMSP-Global-Composites-Version-4</Name>
173
- <Title>DMSP-Global-Composites-Version-4</Title>
174
- <Abstract>DMSP-Global-Composites-Version-4</Abstract>
175
- <CRS>EPSG:4326</CRS>
176
- <EX_GeographicBoundingBox>
177
- <westBoundLongitude>-180</westBoundLongitude>
178
- <eastBoundLongitude>180</eastBoundLongitude>
179
- <southBoundLatitude>-65</southBoundLatitude>
180
- <northBoundLatitude>75</northBoundLatitude>
181
- </EX_GeographicBoundingBox>
182
- <BoundingBox CRS="EPSG:4326"
183
- minx="-65" miny="-180" maxx="75" maxy="180" />
184
- <Layer queryable="0" opaque="0" cascaded="0">
185
- <Name>countries</Name>
186
- <Title>Countries</Title>
187
- <CRS>EPSG:4326</CRS>
188
- <EX_GeographicBoundingBox>
189
- <westBoundLongitude>-180</westBoundLongitude>
190
- <eastBoundLongitude>180</eastBoundLongitude>
191
- <southBoundLatitude>-90</southBoundLatitude>
192
- <northBoundLatitude>83.6236</northBoundLatitude>
193
- </EX_GeographicBoundingBox>
194
- <BoundingBox CRS="EPSG:4326"
195
- minx="-90" miny="-180" maxx="83.6236" maxy="180" />
196
- <Style>
197
- <Name>default</Name>
198
- <Title>default</Title>
199
- <LegendURL width="89" height="21">
200
- <Format>image/png</Format>
201
- <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"/>
202
- </LegendURL>
203
- </Style>
204
- </Layer>
205
- <Layer queryable="0" opaque="0" cascaded="0">
206
- <Name>adminboundaries</Name>
207
- <Title>Administrative Boundaries</Title>
208
- <CRS>EPSG:4326</CRS>
209
- <EX_GeographicBoundingBox>
210
- <westBoundLongitude>-180</westBoundLongitude>
211
- <eastBoundLongitude>180</eastBoundLongitude>
212
- <southBoundLatitude>-90</southBoundLatitude>
213
- <northBoundLatitude>83.6236</northBoundLatitude>
214
- </EX_GeographicBoundingBox>
215
- <BoundingBox CRS="EPSG:4326"
216
- minx="-90" miny="-180" maxx="83.6236" maxy="180" />
217
- <Style>
218
- <Name>default</Name>
219
- <Title>default</Title>
220
- <LegendURL width="65" height="21">
221
- <Format>image/png</Format>
222
- <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"/>
223
- </LegendURL>
224
- </Style>
225
- </Layer>
226
- <Layer queryable="0" opaque="0" cascaded="0">
227
- <Name>eez</Name>
228
- <Title>EEZ Boundaries</Title>
229
- <CRS>EPSG:4326</CRS>
230
- <EX_GeographicBoundingBox>
231
- <westBoundLongitude>-179.999</westBoundLongitude>
232
- <eastBoundLongitude>179.999</eastBoundLongitude>
233
- <southBoundLatitude>-85.4703</southBoundLatitude>
234
- <northBoundLatitude>87.0239</northBoundLatitude>
235
- </EX_GeographicBoundingBox>
236
- <BoundingBox CRS="EPSG:4326"
237
- minx="-85.4703" miny="-179.999" maxx="87.0239" maxy="179.999" />
238
- <Style>
239
- <Name>default</Name>
240
- <Title>default</Title>
241
- <LegendURL width="53" height="21">
242
- <Format>image/png</Format>
243
- <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"/>
244
- </LegendURL>
245
- </Style>
246
- </Layer>
247
- <Layer queryable="0" opaque="0" cascaded="0">
248
- <Name>cities</Name>
249
- <Title>Cities</Title>
250
- <CRS>EPSG:4326</CRS>
251
- <EX_GeographicBoundingBox>
252
- <westBoundLongitude>-176.152</westBoundLongitude>
253
- <eastBoundLongitude>179.222</eastBoundLongitude>
254
- <southBoundLatitude>-54.792</southBoundLatitude>
255
- <northBoundLatitude>78.2</northBoundLatitude>
256
- </EX_GeographicBoundingBox>
257
- <BoundingBox CRS="EPSG:4326"
258
- minx="-54.792" miny="-176.152" maxx="78.2" maxy="179.222" />
259
- <Style>
260
- <Name>default</Name>
261
- <Title>default</Title>
262
- <LegendURL width="71" height="21">
263
- <Format>image/png</Format>
264
- <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"/>
265
- </LegendURL>
266
- </Style>
267
- </Layer>
268
- <Layer queryable="0" opaque="0" cascaded="0">
269
- <Name>citieslabeled</Name>
270
- <Title>Cities With Labels</Title>
271
- <CRS>EPSG:4326</CRS>
272
- <EX_GeographicBoundingBox>
273
- <westBoundLongitude>-176.152</westBoundLongitude>
274
- <eastBoundLongitude>179.222</eastBoundLongitude>
275
- <southBoundLatitude>-54.792</southBoundLatitude>
276
- <northBoundLatitude>78.2</northBoundLatitude>
277
- </EX_GeographicBoundingBox>
278
- <BoundingBox CRS="EPSG:4326"
279
- minx="-54.792" miny="-176.152" maxx="78.2" maxy="179.222" />
280
- </Layer>
281
- <Layer queryable="0" opaque="0" cascaded="0">
282
- <Name>land</Name>
283
- <Title>Land Sea Mask</Title>
284
- <CRS>EPSG:4326</CRS>
285
- <EX_GeographicBoundingBox>
286
- <westBoundLongitude>-180</westBoundLongitude>
287
- <eastBoundLongitude>180</eastBoundLongitude>
288
- <southBoundLatitude>-90</southBoundLatitude>
289
- <northBoundLatitude>83.6236</northBoundLatitude>
290
- </EX_GeographicBoundingBox>
291
- <BoundingBox CRS="EPSG:4326"
292
- minx="-90" miny="-180" maxx="83.6236" maxy="180" />
293
- <Style>
294
- <Name>default</Name>
295
- <Title>default</Title>
296
- <LegendURL width="59" height="21">
297
- <Format>image/png</Format>
298
- <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"/>
299
- </LegendURL>
300
- </Style>
301
- </Layer>
302
- <Layer queryable="0" opaque="0" cascaded="0">
303
- <Name>LandSeaMask</Name>
304
- <Title>LandSeaMask</Title>
305
- <CRS>EPSG:4326</CRS>
306
- <EX_GeographicBoundingBox>
307
- <westBoundLongitude>-180</westBoundLongitude>
308
- <eastBoundLongitude>180</eastBoundLongitude>
309
- <southBoundLatitude>-90</southBoundLatitude>
310
- <northBoundLatitude>90</northBoundLatitude>
311
- </EX_GeographicBoundingBox>
312
- <BoundingBox CRS="EPSG:4326"
313
- minx="-90" miny="-180" maxx="90" maxy="180" />
314
- </Layer>
315
- <Layer queryable="0" opaque="0" cascaded="0">
316
- <Name>Rivers</Name>
317
- <Title>Rivers</Title>
318
- <CRS>EPSG:4326</CRS>
319
- <EX_GeographicBoundingBox>
320
- <westBoundLongitude>-164.887</westBoundLongitude>
321
- <eastBoundLongitude>160.764</eastBoundLongitude>
322
- <southBoundLatitude>-36.9694</southBoundLatitude>
323
- <northBoundLatitude>71.3925</northBoundLatitude>
324
- </EX_GeographicBoundingBox>
325
- <BoundingBox CRS="EPSG:4326"
326
- minx="-36.9694" miny="-164.887" maxx="71.3925" maxy="160.764" />
327
- <Style>
328
- <Name>default</Name>
329
- <Title>default</Title>
330
- <LegendURL width="71" height="21">
331
- <Format>image/png</Format>
332
- <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"/>
333
- </LegendURL>
334
- </Style>
335
- </Layer>
336
- <Layer queryable="0" opaque="0" cascaded="0">
337
- <Name>F101992.v4b.avg_lights_x_pct.lzw.tif</Name>
338
- <Title>F101992.v4b.avg_lights_x_pct.lzw.tif</Title>
339
- <CRS>EPSG:4326</CRS>
340
- <EX_GeographicBoundingBox>
341
- <westBoundLongitude>-180</westBoundLongitude>
342
- <eastBoundLongitude>180</eastBoundLongitude>
343
- <southBoundLatitude>-65</southBoundLatitude>
344
- <northBoundLatitude>75</northBoundLatitude>
345
- </EX_GeographicBoundingBox>
346
- <BoundingBox CRS="EPSG:4326"
347
- minx="-65" miny="-180" maxx="75" maxy="180" />
348
- </Layer>
349
- <Layer queryable="0" opaque="0" cascaded="0">
350
- <Name>F101992.v4b_web.avg_vis.lzw.tif</Name>
351
- <Title>F101992.v4b_web.avg_vis.lzw.tif</Title>
352
- <CRS>EPSG:4326</CRS>
353
- <EX_GeographicBoundingBox>
354
- <westBoundLongitude>-180</westBoundLongitude>
355
- <eastBoundLongitude>180</eastBoundLongitude>
356
- <southBoundLatitude>-65</southBoundLatitude>
357
- <northBoundLatitude>75</northBoundLatitude>
358
- </EX_GeographicBoundingBox>
359
- <BoundingBox CRS="EPSG:4326"
360
- minx="-65" miny="-180" maxx="75" maxy="180" />
361
- </Layer>
362
- <Layer queryable="0" opaque="0" cascaded="0">
363
- <Name>F101992.v4b_web.cf_cvg.lzw.tif</Name>
364
- <Title>F101992.v4b_web.cf_cvg.lzw.tif</Title>
365
- <CRS>EPSG:4326</CRS>
366
- <EX_GeographicBoundingBox>
367
- <westBoundLongitude>-180</westBoundLongitude>
368
- <eastBoundLongitude>180</eastBoundLongitude>
369
- <southBoundLatitude>-65</southBoundLatitude>
370
- <northBoundLatitude>75</northBoundLatitude>
371
- </EX_GeographicBoundingBox>
372
- <BoundingBox CRS="EPSG:4326"
373
- minx="-65" miny="-180" maxx="75" maxy="180" />
374
- </Layer>
375
- <Layer queryable="0" opaque="0" cascaded="0">
376
- <Name>F101992.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
377
- <Title>F101992.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
378
- <CRS>EPSG:4326</CRS>
379
- <EX_GeographicBoundingBox>
380
- <westBoundLongitude>-180</westBoundLongitude>
381
- <eastBoundLongitude>180</eastBoundLongitude>
382
- <southBoundLatitude>-65</southBoundLatitude>
383
- <northBoundLatitude>75</northBoundLatitude>
384
- </EX_GeographicBoundingBox>
385
- <BoundingBox CRS="EPSG:4326"
386
- minx="-65" miny="-180" maxx="75" maxy="180" />
387
- </Layer>
388
- <Layer queryable="0" opaque="0" cascaded="0">
389
- <Name>F101993.v4b.avg_lights_x_pct.lzw.tif</Name>
390
- <Title>F101993.v4b.avg_lights_x_pct.lzw.tif</Title>
391
- <CRS>EPSG:4326</CRS>
392
- <EX_GeographicBoundingBox>
393
- <westBoundLongitude>-180</westBoundLongitude>
394
- <eastBoundLongitude>180</eastBoundLongitude>
395
- <southBoundLatitude>-65</southBoundLatitude>
396
- <northBoundLatitude>75</northBoundLatitude>
397
- </EX_GeographicBoundingBox>
398
- <BoundingBox CRS="EPSG:4326"
399
- minx="-65" miny="-180" maxx="75" maxy="180" />
400
- </Layer>
401
- <Layer queryable="0" opaque="0" cascaded="0">
402
- <Name>F101993.v4b_web.avg_vis.lzw.tif</Name>
403
- <Title>F101993.v4b_web.avg_vis.lzw.tif</Title>
404
- <CRS>EPSG:4326</CRS>
405
- <EX_GeographicBoundingBox>
406
- <westBoundLongitude>-180</westBoundLongitude>
407
- <eastBoundLongitude>180</eastBoundLongitude>
408
- <southBoundLatitude>-65</southBoundLatitude>
409
- <northBoundLatitude>75</northBoundLatitude>
410
- </EX_GeographicBoundingBox>
411
- <BoundingBox CRS="EPSG:4326"
412
- minx="-65" miny="-180" maxx="75" maxy="180" />
413
- </Layer>
414
- <Layer queryable="0" opaque="0" cascaded="0">
415
- <Name>F101993.v4b_web.cf_cvg.lzw.tif</Name>
416
- <Title>F101993.v4b_web.cf_cvg.lzw.tif</Title>
417
- <CRS>EPSG:4326</CRS>
418
- <EX_GeographicBoundingBox>
419
- <westBoundLongitude>-180</westBoundLongitude>
420
- <eastBoundLongitude>180</eastBoundLongitude>
421
- <southBoundLatitude>-65</southBoundLatitude>
422
- <northBoundLatitude>75</northBoundLatitude>
423
- </EX_GeographicBoundingBox>
424
- <BoundingBox CRS="EPSG:4326"
425
- minx="-65" miny="-180" maxx="75" maxy="180" />
426
- </Layer>
427
- <Layer queryable="0" opaque="0" cascaded="0">
428
- <Name>F101993.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
429
- <Title>F101993.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
430
- <CRS>EPSG:4326</CRS>
431
- <EX_GeographicBoundingBox>
432
- <westBoundLongitude>-180</westBoundLongitude>
433
- <eastBoundLongitude>180</eastBoundLongitude>
434
- <southBoundLatitude>-65</southBoundLatitude>
435
- <northBoundLatitude>75</northBoundLatitude>
436
- </EX_GeographicBoundingBox>
437
- <BoundingBox CRS="EPSG:4326"
438
- minx="-65" miny="-180" maxx="75" maxy="180" />
439
- </Layer>
440
- <Layer queryable="0" opaque="0" cascaded="0">
441
- <Name>F101994.v4b.avg_lights_x_pct.lzw.tif</Name>
442
- <Title>F101994.v4b.avg_lights_x_pct.lzw.tif</Title>
443
- <CRS>EPSG:4326</CRS>
444
- <EX_GeographicBoundingBox>
445
- <westBoundLongitude>-180</westBoundLongitude>
446
- <eastBoundLongitude>180</eastBoundLongitude>
447
- <southBoundLatitude>-65</southBoundLatitude>
448
- <northBoundLatitude>75</northBoundLatitude>
449
- </EX_GeographicBoundingBox>
450
- <BoundingBox CRS="EPSG:4326"
451
- minx="-65" miny="-180" maxx="75" maxy="180" />
452
- </Layer>
453
- <Layer queryable="0" opaque="0" cascaded="0">
454
- <Name>F101994.v4b_web.avg_vis.lzw.tif</Name>
455
- <Title>F101994.v4b_web.avg_vis.lzw.tif</Title>
456
- <CRS>EPSG:4326</CRS>
457
- <EX_GeographicBoundingBox>
458
- <westBoundLongitude>-180</westBoundLongitude>
459
- <eastBoundLongitude>180</eastBoundLongitude>
460
- <southBoundLatitude>-65</southBoundLatitude>
461
- <northBoundLatitude>75</northBoundLatitude>
462
- </EX_GeographicBoundingBox>
463
- <BoundingBox CRS="EPSG:4326"
464
- minx="-65" miny="-180" maxx="75" maxy="180" />
465
- </Layer>
466
- <Layer queryable="0" opaque="0" cascaded="0">
467
- <Name>F101994.v4b_web.cf_cvg.lzw.tif</Name>
468
- <Title>F101994.v4b_web.cf_cvg.lzw.tif</Title>
469
- <CRS>EPSG:4326</CRS>
470
- <EX_GeographicBoundingBox>
471
- <westBoundLongitude>-180</westBoundLongitude>
472
- <eastBoundLongitude>180</eastBoundLongitude>
473
- <southBoundLatitude>-65</southBoundLatitude>
474
- <northBoundLatitude>75</northBoundLatitude>
475
- </EX_GeographicBoundingBox>
476
- <BoundingBox CRS="EPSG:4326"
477
- minx="-65" miny="-180" maxx="75" maxy="180" />
478
- </Layer>
479
- <Layer queryable="0" opaque="0" cascaded="0">
480
- <Name>F101994.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
481
- <Title>F101994.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
482
- <CRS>EPSG:4326</CRS>
483
- <EX_GeographicBoundingBox>
484
- <westBoundLongitude>-180</westBoundLongitude>
485
- <eastBoundLongitude>180</eastBoundLongitude>
486
- <southBoundLatitude>-65</southBoundLatitude>
487
- <northBoundLatitude>75</northBoundLatitude>
488
- </EX_GeographicBoundingBox>
489
- <BoundingBox CRS="EPSG:4326"
490
- minx="-65" miny="-180" maxx="75" maxy="180" />
491
- </Layer>
492
- <Layer queryable="0" opaque="0" cascaded="0">
493
- <Name>F121994.v4b.avg_lights_x_pct.lzw.tif</Name>
494
- <Title>F121994.v4b.avg_lights_x_pct.lzw.tif</Title>
495
- <CRS>EPSG:4326</CRS>
496
- <EX_GeographicBoundingBox>
497
- <westBoundLongitude>-180</westBoundLongitude>
498
- <eastBoundLongitude>180</eastBoundLongitude>
499
- <southBoundLatitude>-65</southBoundLatitude>
500
- <northBoundLatitude>75</northBoundLatitude>
501
- </EX_GeographicBoundingBox>
502
- <BoundingBox CRS="EPSG:4326"
503
- minx="-65" miny="-180" maxx="75" maxy="180" />
504
- </Layer>
505
- <Layer queryable="0" opaque="0" cascaded="0">
506
- <Name>F121994.v4b_web.avg_vis.lzw.tif</Name>
507
- <Title>F121994.v4b_web.avg_vis.lzw.tif</Title>
508
- <CRS>EPSG:4326</CRS>
509
- <EX_GeographicBoundingBox>
510
- <westBoundLongitude>-180</westBoundLongitude>
511
- <eastBoundLongitude>180</eastBoundLongitude>
512
- <southBoundLatitude>-65</southBoundLatitude>
513
- <northBoundLatitude>75</northBoundLatitude>
514
- </EX_GeographicBoundingBox>
515
- <BoundingBox CRS="EPSG:4326"
516
- minx="-65" miny="-180" maxx="75" maxy="180" />
517
- </Layer>
518
- <Layer queryable="0" opaque="0" cascaded="0">
519
- <Name>F121994.v4b_web.cf_cvg.lzw.tif</Name>
520
- <Title>F121994.v4b_web.cf_cvg.lzw.tif</Title>
521
- <CRS>EPSG:4326</CRS>
522
- <EX_GeographicBoundingBox>
523
- <westBoundLongitude>-180</westBoundLongitude>
524
- <eastBoundLongitude>180</eastBoundLongitude>
525
- <southBoundLatitude>-65</southBoundLatitude>
526
- <northBoundLatitude>75</northBoundLatitude>
527
- </EX_GeographicBoundingBox>
528
- <BoundingBox CRS="EPSG:4326"
529
- minx="-65" miny="-180" maxx="75" maxy="180" />
530
- </Layer>
531
- <Layer queryable="0" opaque="0" cascaded="0">
532
- <Name>F121994.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
533
- <Title>F121994.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
534
- <CRS>EPSG:4326</CRS>
535
- <EX_GeographicBoundingBox>
536
- <westBoundLongitude>-180</westBoundLongitude>
537
- <eastBoundLongitude>180</eastBoundLongitude>
538
- <southBoundLatitude>-65</southBoundLatitude>
539
- <northBoundLatitude>75</northBoundLatitude>
540
- </EX_GeographicBoundingBox>
541
- <BoundingBox CRS="EPSG:4326"
542
- minx="-65" miny="-180" maxx="75" maxy="180" />
543
- </Layer>
544
- <Layer queryable="0" opaque="0" cascaded="0">
545
- <Name>F121995.v4b.avg_lights_x_pct.lzw.tif</Name>
546
- <Title>F121995.v4b.avg_lights_x_pct.lzw.tif</Title>
547
- <CRS>EPSG:4326</CRS>
548
- <EX_GeographicBoundingBox>
549
- <westBoundLongitude>-180</westBoundLongitude>
550
- <eastBoundLongitude>180</eastBoundLongitude>
551
- <southBoundLatitude>-65</southBoundLatitude>
552
- <northBoundLatitude>75</northBoundLatitude>
553
- </EX_GeographicBoundingBox>
554
- <BoundingBox CRS="EPSG:4326"
555
- minx="-65" miny="-180" maxx="75" maxy="180" />
556
- </Layer>
557
- <Layer queryable="0" opaque="0" cascaded="0">
558
- <Name>F121995.v4b_web.avg_vis.lzw.tif</Name>
559
- <Title>F121995.v4b_web.avg_vis.lzw.tif</Title>
560
- <CRS>EPSG:4326</CRS>
561
- <EX_GeographicBoundingBox>
562
- <westBoundLongitude>-180</westBoundLongitude>
563
- <eastBoundLongitude>180</eastBoundLongitude>
564
- <southBoundLatitude>-65</southBoundLatitude>
565
- <northBoundLatitude>75</northBoundLatitude>
566
- </EX_GeographicBoundingBox>
567
- <BoundingBox CRS="EPSG:4326"
568
- minx="-65" miny="-180" maxx="75" maxy="180" />
569
- </Layer>
570
- <Layer queryable="0" opaque="0" cascaded="0">
571
- <Name>F121995.v4b_web.cf_cvg.lzw.tif</Name>
572
- <Title>F121995.v4b_web.cf_cvg.lzw.tif</Title>
573
- <CRS>EPSG:4326</CRS>
574
- <EX_GeographicBoundingBox>
575
- <westBoundLongitude>-180</westBoundLongitude>
576
- <eastBoundLongitude>180</eastBoundLongitude>
577
- <southBoundLatitude>-65</southBoundLatitude>
578
- <northBoundLatitude>75</northBoundLatitude>
579
- </EX_GeographicBoundingBox>
580
- <BoundingBox CRS="EPSG:4326"
581
- minx="-65" miny="-180" maxx="75" maxy="180" />
582
- </Layer>
583
- <Layer queryable="0" opaque="0" cascaded="0">
584
- <Name>F121995.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
585
- <Title>F121995.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
586
- <CRS>EPSG:4326</CRS>
587
- <EX_GeographicBoundingBox>
588
- <westBoundLongitude>-180</westBoundLongitude>
589
- <eastBoundLongitude>180</eastBoundLongitude>
590
- <southBoundLatitude>-65</southBoundLatitude>
591
- <northBoundLatitude>75</northBoundLatitude>
592
- </EX_GeographicBoundingBox>
593
- <BoundingBox CRS="EPSG:4326"
594
- minx="-65" miny="-180" maxx="75" maxy="180" />
595
- </Layer>
596
- <Layer queryable="0" opaque="0" cascaded="0">
597
- <Name>F121996.v4b.avg_lights_x_pct.lzw.tif</Name>
598
- <Title>F121996.v4b.avg_lights_x_pct.lzw.tif</Title>
599
- <CRS>EPSG:4326</CRS>
600
- <EX_GeographicBoundingBox>
601
- <westBoundLongitude>-180</westBoundLongitude>
602
- <eastBoundLongitude>180</eastBoundLongitude>
603
- <southBoundLatitude>-65</southBoundLatitude>
604
- <northBoundLatitude>75</northBoundLatitude>
605
- </EX_GeographicBoundingBox>
606
- <BoundingBox CRS="EPSG:4326"
607
- minx="-65" miny="-180" maxx="75" maxy="180" />
608
- </Layer>
609
- <Layer queryable="0" opaque="0" cascaded="0">
610
- <Name>F121996.v4b_web.avg_vis.lzw.tif</Name>
611
- <Title>F121996.v4b_web.avg_vis.lzw.tif</Title>
612
- <CRS>EPSG:4326</CRS>
613
- <EX_GeographicBoundingBox>
614
- <westBoundLongitude>-180</westBoundLongitude>
615
- <eastBoundLongitude>180</eastBoundLongitude>
616
- <southBoundLatitude>-65</southBoundLatitude>
617
- <northBoundLatitude>75</northBoundLatitude>
618
- </EX_GeographicBoundingBox>
619
- <BoundingBox CRS="EPSG:4326"
620
- minx="-65" miny="-180" maxx="75" maxy="180" />
621
- </Layer>
622
- <Layer queryable="0" opaque="0" cascaded="0">
623
- <Name>F121996.v4b_web.cf_cvg.lzw.tif</Name>
624
- <Title>F121996.v4b_web.cf_cvg.lzw.tif</Title>
625
- <CRS>EPSG:4326</CRS>
626
- <EX_GeographicBoundingBox>
627
- <westBoundLongitude>-180</westBoundLongitude>
628
- <eastBoundLongitude>180</eastBoundLongitude>
629
- <southBoundLatitude>-65</southBoundLatitude>
630
- <northBoundLatitude>75</northBoundLatitude>
631
- </EX_GeographicBoundingBox>
632
- <BoundingBox CRS="EPSG:4326"
633
- minx="-65" miny="-180" maxx="75" maxy="180" />
634
- </Layer>
635
- <Layer queryable="0" opaque="0" cascaded="0">
636
- <Name>F121996.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
637
- <Title>F121996.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
638
- <CRS>EPSG:4326</CRS>
639
- <EX_GeographicBoundingBox>
640
- <westBoundLongitude>-180</westBoundLongitude>
641
- <eastBoundLongitude>180</eastBoundLongitude>
642
- <southBoundLatitude>-65</southBoundLatitude>
643
- <northBoundLatitude>75</northBoundLatitude>
644
- </EX_GeographicBoundingBox>
645
- <BoundingBox CRS="EPSG:4326"
646
- minx="-65" miny="-180" maxx="75" maxy="180" />
647
- </Layer>
648
- <Layer queryable="0" opaque="0" cascaded="0">
649
- <Name>F121997.v4b.avg_lights_x_pct.lzw.tif</Name>
650
- <Title>F121997.v4b.avg_lights_x_pct.lzw.tif</Title>
651
- <CRS>EPSG:4326</CRS>
652
- <EX_GeographicBoundingBox>
653
- <westBoundLongitude>-180</westBoundLongitude>
654
- <eastBoundLongitude>180</eastBoundLongitude>
655
- <southBoundLatitude>-65</southBoundLatitude>
656
- <northBoundLatitude>75</northBoundLatitude>
657
- </EX_GeographicBoundingBox>
658
- <BoundingBox CRS="EPSG:4326"
659
- minx="-65" miny="-180" maxx="75" maxy="180" />
660
- </Layer>
661
- <Layer queryable="0" opaque="0" cascaded="0">
662
- <Name>F121997.v4b_web.avg_vis.lzw.tif</Name>
663
- <Title>F121997.v4b_web.avg_vis.lzw.tif</Title>
664
- <CRS>EPSG:4326</CRS>
665
- <EX_GeographicBoundingBox>
666
- <westBoundLongitude>-180</westBoundLongitude>
667
- <eastBoundLongitude>180</eastBoundLongitude>
668
- <southBoundLatitude>-65</southBoundLatitude>
669
- <northBoundLatitude>75</northBoundLatitude>
670
- </EX_GeographicBoundingBox>
671
- <BoundingBox CRS="EPSG:4326"
672
- minx="-65" miny="-180" maxx="75" maxy="180" />
673
- </Layer>
674
- <Layer queryable="0" opaque="0" cascaded="0">
675
- <Name>F121997.v4b_web.cf_cvg.lzw.tif</Name>
676
- <Title>F121997.v4b_web.cf_cvg.lzw.tif</Title>
677
- <CRS>EPSG:4326</CRS>
678
- <EX_GeographicBoundingBox>
679
- <westBoundLongitude>-180</westBoundLongitude>
680
- <eastBoundLongitude>180</eastBoundLongitude>
681
- <southBoundLatitude>-65</southBoundLatitude>
682
- <northBoundLatitude>75</northBoundLatitude>
683
- </EX_GeographicBoundingBox>
684
- <BoundingBox CRS="EPSG:4326"
685
- minx="-65" miny="-180" maxx="75" maxy="180" />
686
- </Layer>
687
- <Layer queryable="0" opaque="0" cascaded="0">
688
- <Name>F121997.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
689
- <Title>F121997.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
690
- <CRS>EPSG:4326</CRS>
691
- <EX_GeographicBoundingBox>
692
- <westBoundLongitude>-180</westBoundLongitude>
693
- <eastBoundLongitude>180</eastBoundLongitude>
694
- <southBoundLatitude>-65</southBoundLatitude>
695
- <northBoundLatitude>75</northBoundLatitude>
696
- </EX_GeographicBoundingBox>
697
- <BoundingBox CRS="EPSG:4326"
698
- minx="-65" miny="-180" maxx="75" maxy="180" />
699
- </Layer>
700
- <Layer queryable="0" opaque="0" cascaded="0">
701
- <Name>F121998.v4b.avg_lights_x_pct.lzw.tif</Name>
702
- <Title>F121998.v4b.avg_lights_x_pct.lzw.tif</Title>
703
- <CRS>EPSG:4326</CRS>
704
- <EX_GeographicBoundingBox>
705
- <westBoundLongitude>-180</westBoundLongitude>
706
- <eastBoundLongitude>180</eastBoundLongitude>
707
- <southBoundLatitude>-65</southBoundLatitude>
708
- <northBoundLatitude>75</northBoundLatitude>
709
- </EX_GeographicBoundingBox>
710
- <BoundingBox CRS="EPSG:4326"
711
- minx="-65" miny="-180" maxx="75" maxy="180" />
712
- </Layer>
713
- <Layer queryable="0" opaque="0" cascaded="0">
714
- <Name>F121998.v4b_web.avg_vis.lzw.tif</Name>
715
- <Title>F121998.v4b_web.avg_vis.lzw.tif</Title>
716
- <CRS>EPSG:4326</CRS>
717
- <EX_GeographicBoundingBox>
718
- <westBoundLongitude>-180</westBoundLongitude>
719
- <eastBoundLongitude>180</eastBoundLongitude>
720
- <southBoundLatitude>-65</southBoundLatitude>
721
- <northBoundLatitude>75</northBoundLatitude>
722
- </EX_GeographicBoundingBox>
723
- <BoundingBox CRS="EPSG:4326"
724
- minx="-65" miny="-180" maxx="75" maxy="180" />
725
- </Layer>
726
- <Layer queryable="0" opaque="0" cascaded="0">
727
- <Name>F121998.v4b_web.cf_cvg.lzw.tif</Name>
728
- <Title>F121998.v4b_web.cf_cvg.lzw.tif</Title>
729
- <CRS>EPSG:4326</CRS>
730
- <EX_GeographicBoundingBox>
731
- <westBoundLongitude>-180</westBoundLongitude>
732
- <eastBoundLongitude>180</eastBoundLongitude>
733
- <southBoundLatitude>-65</southBoundLatitude>
734
- <northBoundLatitude>75</northBoundLatitude>
735
- </EX_GeographicBoundingBox>
736
- <BoundingBox CRS="EPSG:4326"
737
- minx="-65" miny="-180" maxx="75" maxy="180" />
738
- </Layer>
739
- <Layer queryable="0" opaque="0" cascaded="0">
740
- <Name>F121998.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
741
- <Title>F121998.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
742
- <CRS>EPSG:4326</CRS>
743
- <EX_GeographicBoundingBox>
744
- <westBoundLongitude>-180</westBoundLongitude>
745
- <eastBoundLongitude>180</eastBoundLongitude>
746
- <southBoundLatitude>-65</southBoundLatitude>
747
- <northBoundLatitude>75</northBoundLatitude>
748
- </EX_GeographicBoundingBox>
749
- <BoundingBox CRS="EPSG:4326"
750
- minx="-65" miny="-180" maxx="75" maxy="180" />
751
- </Layer>
752
- <Layer queryable="0" opaque="0" cascaded="0">
753
- <Name>F121999.v4b.avg_lights_x_pct.lzw.tif</Name>
754
- <Title>F121999.v4b.avg_lights_x_pct.lzw.tif</Title>
755
- <CRS>EPSG:4326</CRS>
756
- <EX_GeographicBoundingBox>
757
- <westBoundLongitude>-180</westBoundLongitude>
758
- <eastBoundLongitude>180</eastBoundLongitude>
759
- <southBoundLatitude>-65</southBoundLatitude>
760
- <northBoundLatitude>75</northBoundLatitude>
761
- </EX_GeographicBoundingBox>
762
- <BoundingBox CRS="EPSG:4326"
763
- minx="-65" miny="-180" maxx="75" maxy="180" />
764
- </Layer>
765
- <Layer queryable="0" opaque="0" cascaded="0">
766
- <Name>F121999.v4b_web.avg_vis.lzw.tif</Name>
767
- <Title>F121999.v4b_web.avg_vis.lzw.tif</Title>
768
- <CRS>EPSG:4326</CRS>
769
- <EX_GeographicBoundingBox>
770
- <westBoundLongitude>-180</westBoundLongitude>
771
- <eastBoundLongitude>180</eastBoundLongitude>
772
- <southBoundLatitude>-65</southBoundLatitude>
773
- <northBoundLatitude>75</northBoundLatitude>
774
- </EX_GeographicBoundingBox>
775
- <BoundingBox CRS="EPSG:4326"
776
- minx="-65" miny="-180" maxx="75" maxy="180" />
777
- </Layer>
778
- <Layer queryable="0" opaque="0" cascaded="0">
779
- <Name>F121999.v4b_web.cf_cvg.lzw.tif</Name>
780
- <Title>F121999.v4b_web.cf_cvg.lzw.tif</Title>
781
- <CRS>EPSG:4326</CRS>
782
- <EX_GeographicBoundingBox>
783
- <westBoundLongitude>-180</westBoundLongitude>
784
- <eastBoundLongitude>180</eastBoundLongitude>
785
- <southBoundLatitude>-65</southBoundLatitude>
786
- <northBoundLatitude>75</northBoundLatitude>
787
- </EX_GeographicBoundingBox>
788
- <BoundingBox CRS="EPSG:4326"
789
- minx="-65" miny="-180" maxx="75" maxy="180" />
790
- </Layer>
791
- <Layer queryable="0" opaque="0" cascaded="0">
792
- <Name>F121999.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
793
- <Title>F121999.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
794
- <CRS>EPSG:4326</CRS>
795
- <EX_GeographicBoundingBox>
796
- <westBoundLongitude>-180</westBoundLongitude>
797
- <eastBoundLongitude>180</eastBoundLongitude>
798
- <southBoundLatitude>-65</southBoundLatitude>
799
- <northBoundLatitude>75</northBoundLatitude>
800
- </EX_GeographicBoundingBox>
801
- <BoundingBox CRS="EPSG:4326"
802
- minx="-65" miny="-180" maxx="75" maxy="180" />
803
- </Layer>
804
- <Layer queryable="0" opaque="0" cascaded="0">
805
- <Name>F141997.v4b.avg_lights_x_pct.lzw.tif</Name>
806
- <Title>F141997.v4b.avg_lights_x_pct.lzw.tif</Title>
807
- <CRS>EPSG:4326</CRS>
808
- <EX_GeographicBoundingBox>
809
- <westBoundLongitude>-180</westBoundLongitude>
810
- <eastBoundLongitude>180</eastBoundLongitude>
811
- <southBoundLatitude>-65</southBoundLatitude>
812
- <northBoundLatitude>75</northBoundLatitude>
813
- </EX_GeographicBoundingBox>
814
- <BoundingBox CRS="EPSG:4326"
815
- minx="-65" miny="-180" maxx="75" maxy="180" />
816
- </Layer>
817
- <Layer queryable="0" opaque="0" cascaded="0">
818
- <Name>F141997.v4b_web.avg_vis.lzw.tif</Name>
819
- <Title>F141997.v4b_web.avg_vis.lzw.tif</Title>
820
- <CRS>EPSG:4326</CRS>
821
- <EX_GeographicBoundingBox>
822
- <westBoundLongitude>-180</westBoundLongitude>
823
- <eastBoundLongitude>180</eastBoundLongitude>
824
- <southBoundLatitude>-65</southBoundLatitude>
825
- <northBoundLatitude>75</northBoundLatitude>
826
- </EX_GeographicBoundingBox>
827
- <BoundingBox CRS="EPSG:4326"
828
- minx="-65" miny="-180" maxx="75" maxy="180" />
829
- </Layer>
830
- <Layer queryable="0" opaque="0" cascaded="0">
831
- <Name>F141997.v4b_web.cf_cvg.lzw.tif</Name>
832
- <Title>F141997.v4b_web.cf_cvg.lzw.tif</Title>
833
- <CRS>EPSG:4326</CRS>
834
- <EX_GeographicBoundingBox>
835
- <westBoundLongitude>-180</westBoundLongitude>
836
- <eastBoundLongitude>180</eastBoundLongitude>
837
- <southBoundLatitude>-65</southBoundLatitude>
838
- <northBoundLatitude>75</northBoundLatitude>
839
- </EX_GeographicBoundingBox>
840
- <BoundingBox CRS="EPSG:4326"
841
- minx="-65" miny="-180" maxx="75" maxy="180" />
842
- </Layer>
843
- <Layer queryable="0" opaque="0" cascaded="0">
844
- <Name>F141997.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
845
- <Title>F141997.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
846
- <CRS>EPSG:4326</CRS>
847
- <EX_GeographicBoundingBox>
848
- <westBoundLongitude>-180</westBoundLongitude>
849
- <eastBoundLongitude>180</eastBoundLongitude>
850
- <southBoundLatitude>-65</southBoundLatitude>
851
- <northBoundLatitude>75</northBoundLatitude>
852
- </EX_GeographicBoundingBox>
853
- <BoundingBox CRS="EPSG:4326"
854
- minx="-65" miny="-180" maxx="75" maxy="180" />
855
- </Layer>
856
- <Layer queryable="0" opaque="0" cascaded="0">
857
- <Name>F141998.v4b.avg_lights_x_pct.lzw.tif</Name>
858
- <Title>F141998.v4b.avg_lights_x_pct.lzw.tif</Title>
859
- <CRS>EPSG:4326</CRS>
860
- <EX_GeographicBoundingBox>
861
- <westBoundLongitude>-180</westBoundLongitude>
862
- <eastBoundLongitude>180</eastBoundLongitude>
863
- <southBoundLatitude>-65</southBoundLatitude>
864
- <northBoundLatitude>75</northBoundLatitude>
865
- </EX_GeographicBoundingBox>
866
- <BoundingBox CRS="EPSG:4326"
867
- minx="-65" miny="-180" maxx="75" maxy="180" />
868
- </Layer>
869
- <Layer queryable="0" opaque="0" cascaded="0">
870
- <Name>F141998.v4b_web.avg_vis.lzw.tif</Name>
871
- <Title>F141998.v4b_web.avg_vis.lzw.tif</Title>
872
- <CRS>EPSG:4326</CRS>
873
- <EX_GeographicBoundingBox>
874
- <westBoundLongitude>-180</westBoundLongitude>
875
- <eastBoundLongitude>180</eastBoundLongitude>
876
- <southBoundLatitude>-65</southBoundLatitude>
877
- <northBoundLatitude>75</northBoundLatitude>
878
- </EX_GeographicBoundingBox>
879
- <BoundingBox CRS="EPSG:4326"
880
- minx="-65" miny="-180" maxx="75" maxy="180" />
881
- </Layer>
882
- <Layer queryable="0" opaque="0" cascaded="0">
883
- <Name>F141998.v4b_web.cf_cvg.lzw.tif</Name>
884
- <Title>F141998.v4b_web.cf_cvg.lzw.tif</Title>
885
- <CRS>EPSG:4326</CRS>
886
- <EX_GeographicBoundingBox>
887
- <westBoundLongitude>-180</westBoundLongitude>
888
- <eastBoundLongitude>180</eastBoundLongitude>
889
- <southBoundLatitude>-65</southBoundLatitude>
890
- <northBoundLatitude>75</northBoundLatitude>
891
- </EX_GeographicBoundingBox>
892
- <BoundingBox CRS="EPSG:4326"
893
- minx="-65" miny="-180" maxx="75" maxy="180" />
894
- </Layer>
895
- <Layer queryable="0" opaque="0" cascaded="0">
896
- <Name>F141998.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
897
- <Title>F141998.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
898
- <CRS>EPSG:4326</CRS>
899
- <EX_GeographicBoundingBox>
900
- <westBoundLongitude>-180</westBoundLongitude>
901
- <eastBoundLongitude>180</eastBoundLongitude>
902
- <southBoundLatitude>-65</southBoundLatitude>
903
- <northBoundLatitude>75</northBoundLatitude>
904
- </EX_GeographicBoundingBox>
905
- <BoundingBox CRS="EPSG:4326"
906
- minx="-65" miny="-180" maxx="75" maxy="180" />
907
- </Layer>
908
- <Layer queryable="0" opaque="0" cascaded="0">
909
- <Name>F141999.v4b.avg_lights_x_pct.lzw.tif</Name>
910
- <Title>F141999.v4b.avg_lights_x_pct.lzw.tif</Title>
911
- <CRS>EPSG:4326</CRS>
912
- <EX_GeographicBoundingBox>
913
- <westBoundLongitude>-180</westBoundLongitude>
914
- <eastBoundLongitude>180</eastBoundLongitude>
915
- <southBoundLatitude>-65</southBoundLatitude>
916
- <northBoundLatitude>75</northBoundLatitude>
917
- </EX_GeographicBoundingBox>
918
- <BoundingBox CRS="EPSG:4326"
919
- minx="-65" miny="-180" maxx="75" maxy="180" />
920
- </Layer>
921
- <Layer queryable="0" opaque="0" cascaded="0">
922
- <Name>F141999.v4b_web.avg_vis.lzw.tif</Name>
923
- <Title>F141999.v4b_web.avg_vis.lzw.tif</Title>
924
- <CRS>EPSG:4326</CRS>
925
- <EX_GeographicBoundingBox>
926
- <westBoundLongitude>-180</westBoundLongitude>
927
- <eastBoundLongitude>180</eastBoundLongitude>
928
- <southBoundLatitude>-65</southBoundLatitude>
929
- <northBoundLatitude>75</northBoundLatitude>
930
- </EX_GeographicBoundingBox>
931
- <BoundingBox CRS="EPSG:4326"
932
- minx="-65" miny="-180" maxx="75" maxy="180" />
933
- </Layer>
934
- <Layer queryable="0" opaque="0" cascaded="0">
935
- <Name>F141999.v4b_web.cf_cvg.lzw.tif</Name>
936
- <Title>F141999.v4b_web.cf_cvg.lzw.tif</Title>
937
- <CRS>EPSG:4326</CRS>
938
- <EX_GeographicBoundingBox>
939
- <westBoundLongitude>-180</westBoundLongitude>
940
- <eastBoundLongitude>180</eastBoundLongitude>
941
- <southBoundLatitude>-65</southBoundLatitude>
942
- <northBoundLatitude>75</northBoundLatitude>
943
- </EX_GeographicBoundingBox>
944
- <BoundingBox CRS="EPSG:4326"
945
- minx="-65" miny="-180" maxx="75" maxy="180" />
946
- </Layer>
947
- <Layer queryable="0" opaque="0" cascaded="0">
948
- <Name>F141999.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
949
- <Title>F141999.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
950
- <CRS>EPSG:4326</CRS>
951
- <EX_GeographicBoundingBox>
952
- <westBoundLongitude>-180</westBoundLongitude>
953
- <eastBoundLongitude>180</eastBoundLongitude>
954
- <southBoundLatitude>-65</southBoundLatitude>
955
- <northBoundLatitude>75</northBoundLatitude>
956
- </EX_GeographicBoundingBox>
957
- <BoundingBox CRS="EPSG:4326"
958
- minx="-65" miny="-180" maxx="75" maxy="180" />
959
- </Layer>
960
- <Layer queryable="0" opaque="0" cascaded="0">
961
- <Name>F142000.v4b.avg_lights_x_pct.lzw.tif</Name>
962
- <Title>F142000.v4b.avg_lights_x_pct.lzw.tif</Title>
963
- <CRS>EPSG:4326</CRS>
964
- <EX_GeographicBoundingBox>
965
- <westBoundLongitude>-180</westBoundLongitude>
966
- <eastBoundLongitude>180</eastBoundLongitude>
967
- <southBoundLatitude>-65</southBoundLatitude>
968
- <northBoundLatitude>75</northBoundLatitude>
969
- </EX_GeographicBoundingBox>
970
- <BoundingBox CRS="EPSG:4326"
971
- minx="-65" miny="-180" maxx="75" maxy="180" />
972
- </Layer>
973
- <Layer queryable="0" opaque="0" cascaded="0">
974
- <Name>F142000.v4b_web.avg_vis.lzw.tif</Name>
975
- <Title>F142000.v4b_web.avg_vis.lzw.tif</Title>
976
- <CRS>EPSG:4326</CRS>
977
- <EX_GeographicBoundingBox>
978
- <westBoundLongitude>-180</westBoundLongitude>
979
- <eastBoundLongitude>180</eastBoundLongitude>
980
- <southBoundLatitude>-65</southBoundLatitude>
981
- <northBoundLatitude>75</northBoundLatitude>
982
- </EX_GeographicBoundingBox>
983
- <BoundingBox CRS="EPSG:4326"
984
- minx="-65" miny="-180" maxx="75" maxy="180" />
985
- </Layer>
986
- <Layer queryable="0" opaque="0" cascaded="0">
987
- <Name>F142000.v4b_web.cf_cvg.lzw.tif</Name>
988
- <Title>F142000.v4b_web.cf_cvg.lzw.tif</Title>
989
- <CRS>EPSG:4326</CRS>
990
- <EX_GeographicBoundingBox>
991
- <westBoundLongitude>-180</westBoundLongitude>
992
- <eastBoundLongitude>180</eastBoundLongitude>
993
- <southBoundLatitude>-65</southBoundLatitude>
994
- <northBoundLatitude>75</northBoundLatitude>
995
- </EX_GeographicBoundingBox>
996
- <BoundingBox CRS="EPSG:4326"
997
- minx="-65" miny="-180" maxx="75" maxy="180" />
998
- </Layer>
999
- <Layer queryable="0" opaque="0" cascaded="0">
1000
- <Name>F142000.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
1001
- <Title>F142000.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
1002
- <CRS>EPSG:4326</CRS>
1003
- <EX_GeographicBoundingBox>
1004
- <westBoundLongitude>-180</westBoundLongitude>
1005
- <eastBoundLongitude>180</eastBoundLongitude>
1006
- <southBoundLatitude>-65</southBoundLatitude>
1007
- <northBoundLatitude>75</northBoundLatitude>
1008
- </EX_GeographicBoundingBox>
1009
- <BoundingBox CRS="EPSG:4326"
1010
- minx="-65" miny="-180" maxx="75" maxy="180" />
1011
- </Layer>
1012
- <Layer queryable="0" opaque="0" cascaded="0">
1013
- <Name>F142001.v4b.avg_lights_x_pct.lzw.tif</Name>
1014
- <Title>F142001.v4b.avg_lights_x_pct.lzw.tif</Title>
1015
- <CRS>EPSG:4326</CRS>
1016
- <EX_GeographicBoundingBox>
1017
- <westBoundLongitude>-180</westBoundLongitude>
1018
- <eastBoundLongitude>180</eastBoundLongitude>
1019
- <southBoundLatitude>-65</southBoundLatitude>
1020
- <northBoundLatitude>75</northBoundLatitude>
1021
- </EX_GeographicBoundingBox>
1022
- <BoundingBox CRS="EPSG:4326"
1023
- minx="-65" miny="-180" maxx="75" maxy="180" />
1024
- </Layer>
1025
- <Layer queryable="0" opaque="0" cascaded="0">
1026
- <Name>F142001.v4b_web.avg_vis.lzw.tif</Name>
1027
- <Title>F142001.v4b_web.avg_vis.lzw.tif</Title>
1028
- <CRS>EPSG:4326</CRS>
1029
- <EX_GeographicBoundingBox>
1030
- <westBoundLongitude>-180</westBoundLongitude>
1031
- <eastBoundLongitude>180</eastBoundLongitude>
1032
- <southBoundLatitude>-65</southBoundLatitude>
1033
- <northBoundLatitude>75</northBoundLatitude>
1034
- </EX_GeographicBoundingBox>
1035
- <BoundingBox CRS="EPSG:4326"
1036
- minx="-65" miny="-180" maxx="75" maxy="180" />
1037
- </Layer>
1038
- <Layer queryable="0" opaque="0" cascaded="0">
1039
- <Name>F142001.v4b_web.cf_cvg.lzw.tif</Name>
1040
- <Title>F142001.v4b_web.cf_cvg.lzw.tif</Title>
1041
- <CRS>EPSG:4326</CRS>
1042
- <EX_GeographicBoundingBox>
1043
- <westBoundLongitude>-180</westBoundLongitude>
1044
- <eastBoundLongitude>180</eastBoundLongitude>
1045
- <southBoundLatitude>-65</southBoundLatitude>
1046
- <northBoundLatitude>75</northBoundLatitude>
1047
- </EX_GeographicBoundingBox>
1048
- <BoundingBox CRS="EPSG:4326"
1049
- minx="-65" miny="-180" maxx="75" maxy="180" />
1050
- </Layer>
1051
- <Layer queryable="0" opaque="0" cascaded="0">
1052
- <Name>F142001.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
1053
- <Title>F142001.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
1054
- <CRS>EPSG:4326</CRS>
1055
- <EX_GeographicBoundingBox>
1056
- <westBoundLongitude>-180</westBoundLongitude>
1057
- <eastBoundLongitude>180</eastBoundLongitude>
1058
- <southBoundLatitude>-65</southBoundLatitude>
1059
- <northBoundLatitude>75</northBoundLatitude>
1060
- </EX_GeographicBoundingBox>
1061
- <BoundingBox CRS="EPSG:4326"
1062
- minx="-65" miny="-180" maxx="75" maxy="180" />
1063
- </Layer>
1064
- <Layer queryable="0" opaque="0" cascaded="0">
1065
- <Name>F142002.v4b.avg_lights_x_pct.lzw.tif</Name>
1066
- <Title>F142002.v4b.avg_lights_x_pct.lzw.tif</Title>
1067
- <CRS>EPSG:4326</CRS>
1068
- <EX_GeographicBoundingBox>
1069
- <westBoundLongitude>-180</westBoundLongitude>
1070
- <eastBoundLongitude>180</eastBoundLongitude>
1071
- <southBoundLatitude>-65</southBoundLatitude>
1072
- <northBoundLatitude>75</northBoundLatitude>
1073
- </EX_GeographicBoundingBox>
1074
- <BoundingBox CRS="EPSG:4326"
1075
- minx="-65" miny="-180" maxx="75" maxy="180" />
1076
- </Layer>
1077
- <Layer queryable="0" opaque="0" cascaded="0">
1078
- <Name>F142002.v4b_web.avg_vis.lzw.tif</Name>
1079
- <Title>F142002.v4b_web.avg_vis.lzw.tif</Title>
1080
- <CRS>EPSG:4326</CRS>
1081
- <EX_GeographicBoundingBox>
1082
- <westBoundLongitude>-180</westBoundLongitude>
1083
- <eastBoundLongitude>180</eastBoundLongitude>
1084
- <southBoundLatitude>-65</southBoundLatitude>
1085
- <northBoundLatitude>75</northBoundLatitude>
1086
- </EX_GeographicBoundingBox>
1087
- <BoundingBox CRS="EPSG:4326"
1088
- minx="-65" miny="-180" maxx="75" maxy="180" />
1089
- </Layer>
1090
- <Layer queryable="0" opaque="0" cascaded="0">
1091
- <Name>F142002.v4b_web.cf_cvg.lzw.tif</Name>
1092
- <Title>F142002.v4b_web.cf_cvg.lzw.tif</Title>
1093
- <CRS>EPSG:4326</CRS>
1094
- <EX_GeographicBoundingBox>
1095
- <westBoundLongitude>-180</westBoundLongitude>
1096
- <eastBoundLongitude>180</eastBoundLongitude>
1097
- <southBoundLatitude>-65</southBoundLatitude>
1098
- <northBoundLatitude>75</northBoundLatitude>
1099
- </EX_GeographicBoundingBox>
1100
- <BoundingBox CRS="EPSG:4326"
1101
- minx="-65" miny="-180" maxx="75" maxy="180" />
1102
- </Layer>
1103
- <Layer queryable="0" opaque="0" cascaded="0">
1104
- <Name>F142002.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
1105
- <Title>F142002.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
1106
- <CRS>EPSG:4326</CRS>
1107
- <EX_GeographicBoundingBox>
1108
- <westBoundLongitude>-180</westBoundLongitude>
1109
- <eastBoundLongitude>180</eastBoundLongitude>
1110
- <southBoundLatitude>-65</southBoundLatitude>
1111
- <northBoundLatitude>75</northBoundLatitude>
1112
- </EX_GeographicBoundingBox>
1113
- <BoundingBox CRS="EPSG:4326"
1114
- minx="-65" miny="-180" maxx="75" maxy="180" />
1115
- </Layer>
1116
- <Layer queryable="0" opaque="0" cascaded="0">
1117
- <Name>F142003.v4b.avg_lights_x_pct.lzw.tif</Name>
1118
- <Title>F142003.v4b.avg_lights_x_pct.lzw.tif</Title>
1119
- <CRS>EPSG:4326</CRS>
1120
- <EX_GeographicBoundingBox>
1121
- <westBoundLongitude>-180</westBoundLongitude>
1122
- <eastBoundLongitude>180</eastBoundLongitude>
1123
- <southBoundLatitude>-65</southBoundLatitude>
1124
- <northBoundLatitude>75</northBoundLatitude>
1125
- </EX_GeographicBoundingBox>
1126
- <BoundingBox CRS="EPSG:4326"
1127
- minx="-65" miny="-180" maxx="75" maxy="180" />
1128
- </Layer>
1129
- <Layer queryable="0" opaque="0" cascaded="0">
1130
- <Name>F142003.v4b_web.avg_vis.lzw.tif</Name>
1131
- <Title>F142003.v4b_web.avg_vis.lzw.tif</Title>
1132
- <CRS>EPSG:4326</CRS>
1133
- <EX_GeographicBoundingBox>
1134
- <westBoundLongitude>-180</westBoundLongitude>
1135
- <eastBoundLongitude>180</eastBoundLongitude>
1136
- <southBoundLatitude>-65</southBoundLatitude>
1137
- <northBoundLatitude>75</northBoundLatitude>
1138
- </EX_GeographicBoundingBox>
1139
- <BoundingBox CRS="EPSG:4326"
1140
- minx="-65" miny="-180" maxx="75" maxy="180" />
1141
- </Layer>
1142
- <Layer queryable="0" opaque="0" cascaded="0">
1143
- <Name>F142003.v4b_web.cf_cvg.lzw.tif</Name>
1144
- <Title>F142003.v4b_web.cf_cvg.lzw.tif</Title>
1145
- <CRS>EPSG:4326</CRS>
1146
- <EX_GeographicBoundingBox>
1147
- <westBoundLongitude>-180</westBoundLongitude>
1148
- <eastBoundLongitude>180</eastBoundLongitude>
1149
- <southBoundLatitude>-65</southBoundLatitude>
1150
- <northBoundLatitude>75</northBoundLatitude>
1151
- </EX_GeographicBoundingBox>
1152
- <BoundingBox CRS="EPSG:4326"
1153
- minx="-65" miny="-180" maxx="75" maxy="180" />
1154
- </Layer>
1155
- <Layer queryable="0" opaque="0" cascaded="0">
1156
- <Name>F142003.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
1157
- <Title>F142003.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
1158
- <CRS>EPSG:4326</CRS>
1159
- <EX_GeographicBoundingBox>
1160
- <westBoundLongitude>-180</westBoundLongitude>
1161
- <eastBoundLongitude>180</eastBoundLongitude>
1162
- <southBoundLatitude>-65</southBoundLatitude>
1163
- <northBoundLatitude>75</northBoundLatitude>
1164
- </EX_GeographicBoundingBox>
1165
- <BoundingBox CRS="EPSG:4326"
1166
- minx="-65" miny="-180" maxx="75" maxy="180" />
1167
- </Layer>
1168
- <Layer queryable="0" opaque="0" cascaded="0">
1169
- <Name>F152000.v4b.avg_lights_x_pct.lzw.tif</Name>
1170
- <Title>F152000.v4b.avg_lights_x_pct.lzw.tif</Title>
1171
- <CRS>EPSG:4326</CRS>
1172
- <EX_GeographicBoundingBox>
1173
- <westBoundLongitude>-180</westBoundLongitude>
1174
- <eastBoundLongitude>180</eastBoundLongitude>
1175
- <southBoundLatitude>-65</southBoundLatitude>
1176
- <northBoundLatitude>75</northBoundLatitude>
1177
- </EX_GeographicBoundingBox>
1178
- <BoundingBox CRS="EPSG:4326"
1179
- minx="-65" miny="-180" maxx="75" maxy="180" />
1180
- </Layer>
1181
- <Layer queryable="0" opaque="0" cascaded="0">
1182
- <Name>F152000.v4b_web.avg_vis.lzw.tif</Name>
1183
- <Title>F152000.v4b_web.avg_vis.lzw.tif</Title>
1184
- <CRS>EPSG:4326</CRS>
1185
- <EX_GeographicBoundingBox>
1186
- <westBoundLongitude>-180</westBoundLongitude>
1187
- <eastBoundLongitude>180</eastBoundLongitude>
1188
- <southBoundLatitude>-65</southBoundLatitude>
1189
- <northBoundLatitude>75</northBoundLatitude>
1190
- </EX_GeographicBoundingBox>
1191
- <BoundingBox CRS="EPSG:4326"
1192
- minx="-65" miny="-180" maxx="75" maxy="180" />
1193
- </Layer>
1194
- <Layer queryable="0" opaque="0" cascaded="0">
1195
- <Name>F152000.v4b_web.cf_cvg.lzw.tif</Name>
1196
- <Title>F152000.v4b_web.cf_cvg.lzw.tif</Title>
1197
- <CRS>EPSG:4326</CRS>
1198
- <EX_GeographicBoundingBox>
1199
- <westBoundLongitude>-180</westBoundLongitude>
1200
- <eastBoundLongitude>180</eastBoundLongitude>
1201
- <southBoundLatitude>-65</southBoundLatitude>
1202
- <northBoundLatitude>75</northBoundLatitude>
1203
- </EX_GeographicBoundingBox>
1204
- <BoundingBox CRS="EPSG:4326"
1205
- minx="-65" miny="-180" maxx="75" maxy="180" />
1206
- </Layer>
1207
- <Layer queryable="0" opaque="0" cascaded="0">
1208
- <Name>F152000.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
1209
- <Title>F152000.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
1210
- <CRS>EPSG:4326</CRS>
1211
- <EX_GeographicBoundingBox>
1212
- <westBoundLongitude>-180</westBoundLongitude>
1213
- <eastBoundLongitude>180</eastBoundLongitude>
1214
- <southBoundLatitude>-65</southBoundLatitude>
1215
- <northBoundLatitude>75</northBoundLatitude>
1216
- </EX_GeographicBoundingBox>
1217
- <BoundingBox CRS="EPSG:4326"
1218
- minx="-65" miny="-180" maxx="75" maxy="180" />
1219
- </Layer>
1220
- <Layer queryable="0" opaque="0" cascaded="0">
1221
- <Name>F152001.v4b.avg_lights_x_pct.lzw.tif</Name>
1222
- <Title>F152001.v4b.avg_lights_x_pct.lzw.tif</Title>
1223
- <CRS>EPSG:4326</CRS>
1224
- <EX_GeographicBoundingBox>
1225
- <westBoundLongitude>-180</westBoundLongitude>
1226
- <eastBoundLongitude>180</eastBoundLongitude>
1227
- <southBoundLatitude>-65</southBoundLatitude>
1228
- <northBoundLatitude>75</northBoundLatitude>
1229
- </EX_GeographicBoundingBox>
1230
- <BoundingBox CRS="EPSG:4326"
1231
- minx="-65" miny="-180" maxx="75" maxy="180" />
1232
- </Layer>
1233
- <Layer queryable="0" opaque="0" cascaded="0">
1234
- <Name>F152001.v4b_web.avg_vis.lzw.tif</Name>
1235
- <Title>F152001.v4b_web.avg_vis.lzw.tif</Title>
1236
- <CRS>EPSG:4326</CRS>
1237
- <EX_GeographicBoundingBox>
1238
- <westBoundLongitude>-180</westBoundLongitude>
1239
- <eastBoundLongitude>180</eastBoundLongitude>
1240
- <southBoundLatitude>-65</southBoundLatitude>
1241
- <northBoundLatitude>75</northBoundLatitude>
1242
- </EX_GeographicBoundingBox>
1243
- <BoundingBox CRS="EPSG:4326"
1244
- minx="-65" miny="-180" maxx="75" maxy="180" />
1245
- </Layer>
1246
- <Layer queryable="0" opaque="0" cascaded="0">
1247
- <Name>F152001.v4b_web.cf_cvg.lzw.tif</Name>
1248
- <Title>F152001.v4b_web.cf_cvg.lzw.tif</Title>
1249
- <CRS>EPSG:4326</CRS>
1250
- <EX_GeographicBoundingBox>
1251
- <westBoundLongitude>-180</westBoundLongitude>
1252
- <eastBoundLongitude>180</eastBoundLongitude>
1253
- <southBoundLatitude>-65</southBoundLatitude>
1254
- <northBoundLatitude>75</northBoundLatitude>
1255
- </EX_GeographicBoundingBox>
1256
- <BoundingBox CRS="EPSG:4326"
1257
- minx="-65" miny="-180" maxx="75" maxy="180" />
1258
- </Layer>
1259
- <Layer queryable="0" opaque="0" cascaded="0">
1260
- <Name>F152001.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
1261
- <Title>F152001.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
1262
- <CRS>EPSG:4326</CRS>
1263
- <EX_GeographicBoundingBox>
1264
- <westBoundLongitude>-180</westBoundLongitude>
1265
- <eastBoundLongitude>180</eastBoundLongitude>
1266
- <southBoundLatitude>-65</southBoundLatitude>
1267
- <northBoundLatitude>75</northBoundLatitude>
1268
- </EX_GeographicBoundingBox>
1269
- <BoundingBox CRS="EPSG:4326"
1270
- minx="-65" miny="-180" maxx="75" maxy="180" />
1271
- </Layer>
1272
- <Layer queryable="0" opaque="0" cascaded="0">
1273
- <Name>F152002.v4b.avg_lights_x_pct.lzw.tif</Name>
1274
- <Title>F152002.v4b.avg_lights_x_pct.lzw.tif</Title>
1275
- <CRS>EPSG:4326</CRS>
1276
- <EX_GeographicBoundingBox>
1277
- <westBoundLongitude>-180</westBoundLongitude>
1278
- <eastBoundLongitude>180</eastBoundLongitude>
1279
- <southBoundLatitude>-65</southBoundLatitude>
1280
- <northBoundLatitude>75</northBoundLatitude>
1281
- </EX_GeographicBoundingBox>
1282
- <BoundingBox CRS="EPSG:4326"
1283
- minx="-65" miny="-180" maxx="75" maxy="180" />
1284
- </Layer>
1285
- <Layer queryable="0" opaque="0" cascaded="0">
1286
- <Name>F152002.v4b_web.avg_vis.lzw.tif</Name>
1287
- <Title>F152002.v4b_web.avg_vis.lzw.tif</Title>
1288
- <CRS>EPSG:4326</CRS>
1289
- <EX_GeographicBoundingBox>
1290
- <westBoundLongitude>-180</westBoundLongitude>
1291
- <eastBoundLongitude>180</eastBoundLongitude>
1292
- <southBoundLatitude>-65</southBoundLatitude>
1293
- <northBoundLatitude>75</northBoundLatitude>
1294
- </EX_GeographicBoundingBox>
1295
- <BoundingBox CRS="EPSG:4326"
1296
- minx="-65" miny="-180" maxx="75" maxy="180" />
1297
- </Layer>
1298
- <Layer queryable="0" opaque="0" cascaded="0">
1299
- <Name>F152002.v4b_web.cf_cvg.lzw.tif</Name>
1300
- <Title>F152002.v4b_web.cf_cvg.lzw.tif</Title>
1301
- <CRS>EPSG:4326</CRS>
1302
- <EX_GeographicBoundingBox>
1303
- <westBoundLongitude>-180</westBoundLongitude>
1304
- <eastBoundLongitude>180</eastBoundLongitude>
1305
- <southBoundLatitude>-65</southBoundLatitude>
1306
- <northBoundLatitude>75</northBoundLatitude>
1307
- </EX_GeographicBoundingBox>
1308
- <BoundingBox CRS="EPSG:4326"
1309
- minx="-65" miny="-180" maxx="75" maxy="180" />
1310
- </Layer>
1311
- <Layer queryable="0" opaque="0" cascaded="0">
1312
- <Name>F152002.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
1313
- <Title>F152002.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
1314
- <CRS>EPSG:4326</CRS>
1315
- <EX_GeographicBoundingBox>
1316
- <westBoundLongitude>-180</westBoundLongitude>
1317
- <eastBoundLongitude>180</eastBoundLongitude>
1318
- <southBoundLatitude>-65</southBoundLatitude>
1319
- <northBoundLatitude>75</northBoundLatitude>
1320
- </EX_GeographicBoundingBox>
1321
- <BoundingBox CRS="EPSG:4326"
1322
- minx="-65" miny="-180" maxx="75" maxy="180" />
1323
- </Layer>
1324
- <Layer queryable="0" opaque="0" cascaded="0">
1325
- <Name>F152003.v4b.avg_lights_x_pct.lzw.tif</Name>
1326
- <Title>F152003.v4b.avg_lights_x_pct.lzw.tif</Title>
1327
- <CRS>EPSG:4326</CRS>
1328
- <EX_GeographicBoundingBox>
1329
- <westBoundLongitude>-180</westBoundLongitude>
1330
- <eastBoundLongitude>180</eastBoundLongitude>
1331
- <southBoundLatitude>-65</southBoundLatitude>
1332
- <northBoundLatitude>75</northBoundLatitude>
1333
- </EX_GeographicBoundingBox>
1334
- <BoundingBox CRS="EPSG:4326"
1335
- minx="-65" miny="-180" maxx="75" maxy="180" />
1336
- </Layer>
1337
- <Layer queryable="0" opaque="0" cascaded="0">
1338
- <Name>F152003.v4b_web.avg_vis.lzw.tif</Name>
1339
- <Title>F152003.v4b_web.avg_vis.lzw.tif</Title>
1340
- <CRS>EPSG:4326</CRS>
1341
- <EX_GeographicBoundingBox>
1342
- <westBoundLongitude>-180</westBoundLongitude>
1343
- <eastBoundLongitude>180</eastBoundLongitude>
1344
- <southBoundLatitude>-65</southBoundLatitude>
1345
- <northBoundLatitude>75</northBoundLatitude>
1346
- </EX_GeographicBoundingBox>
1347
- <BoundingBox CRS="EPSG:4326"
1348
- minx="-65" miny="-180" maxx="75" maxy="180" />
1349
- </Layer>
1350
- <Layer queryable="0" opaque="0" cascaded="0">
1351
- <Name>F152003.v4b_web.cf_cvg.lzw.tif</Name>
1352
- <Title>F152003.v4b_web.cf_cvg.lzw.tif</Title>
1353
- <CRS>EPSG:4326</CRS>
1354
- <EX_GeographicBoundingBox>
1355
- <westBoundLongitude>-180</westBoundLongitude>
1356
- <eastBoundLongitude>180</eastBoundLongitude>
1357
- <southBoundLatitude>-65</southBoundLatitude>
1358
- <northBoundLatitude>75</northBoundLatitude>
1359
- </EX_GeographicBoundingBox>
1360
- <BoundingBox CRS="EPSG:4326"
1361
- minx="-65" miny="-180" maxx="75" maxy="180" />
1362
- </Layer>
1363
- <Layer queryable="0" opaque="0" cascaded="0">
1364
- <Name>F152003.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
1365
- <Title>F152003.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
1366
- <CRS>EPSG:4326</CRS>
1367
- <EX_GeographicBoundingBox>
1368
- <westBoundLongitude>-180</westBoundLongitude>
1369
- <eastBoundLongitude>180</eastBoundLongitude>
1370
- <southBoundLatitude>-65</southBoundLatitude>
1371
- <northBoundLatitude>75</northBoundLatitude>
1372
- </EX_GeographicBoundingBox>
1373
- <BoundingBox CRS="EPSG:4326"
1374
- minx="-65" miny="-180" maxx="75" maxy="180" />
1375
- </Layer>
1376
- <Layer queryable="0" opaque="0" cascaded="0">
1377
- <Name>F152004.v4b.avg_lights_x_pct.lzw.tif</Name>
1378
- <Title>F152004.v4b.avg_lights_x_pct.lzw.tif</Title>
1379
- <CRS>EPSG:4326</CRS>
1380
- <EX_GeographicBoundingBox>
1381
- <westBoundLongitude>-180</westBoundLongitude>
1382
- <eastBoundLongitude>180</eastBoundLongitude>
1383
- <southBoundLatitude>-65</southBoundLatitude>
1384
- <northBoundLatitude>75</northBoundLatitude>
1385
- </EX_GeographicBoundingBox>
1386
- <BoundingBox CRS="EPSG:4326"
1387
- minx="-65" miny="-180" maxx="75" maxy="180" />
1388
- </Layer>
1389
- <Layer queryable="0" opaque="0" cascaded="0">
1390
- <Name>F152004.v4b_web.avg_vis.lzw.tif</Name>
1391
- <Title>F152004.v4b_web.avg_vis.lzw.tif</Title>
1392
- <CRS>EPSG:4326</CRS>
1393
- <EX_GeographicBoundingBox>
1394
- <westBoundLongitude>-180</westBoundLongitude>
1395
- <eastBoundLongitude>180</eastBoundLongitude>
1396
- <southBoundLatitude>-65</southBoundLatitude>
1397
- <northBoundLatitude>75</northBoundLatitude>
1398
- </EX_GeographicBoundingBox>
1399
- <BoundingBox CRS="EPSG:4326"
1400
- minx="-65" miny="-180" maxx="75" maxy="180" />
1401
- </Layer>
1402
- <Layer queryable="0" opaque="0" cascaded="0">
1403
- <Name>F152004.v4b_web.cf_cvg.lzw.tif</Name>
1404
- <Title>F152004.v4b_web.cf_cvg.lzw.tif</Title>
1405
- <CRS>EPSG:4326</CRS>
1406
- <EX_GeographicBoundingBox>
1407
- <westBoundLongitude>-180</westBoundLongitude>
1408
- <eastBoundLongitude>180</eastBoundLongitude>
1409
- <southBoundLatitude>-65</southBoundLatitude>
1410
- <northBoundLatitude>75</northBoundLatitude>
1411
- </EX_GeographicBoundingBox>
1412
- <BoundingBox CRS="EPSG:4326"
1413
- minx="-65" miny="-180" maxx="75" maxy="180" />
1414
- </Layer>
1415
- <Layer queryable="0" opaque="0" cascaded="0">
1416
- <Name>F152004.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
1417
- <Title>F152004.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
1418
- <CRS>EPSG:4326</CRS>
1419
- <EX_GeographicBoundingBox>
1420
- <westBoundLongitude>-180</westBoundLongitude>
1421
- <eastBoundLongitude>180</eastBoundLongitude>
1422
- <southBoundLatitude>-65</southBoundLatitude>
1423
- <northBoundLatitude>75</northBoundLatitude>
1424
- </EX_GeographicBoundingBox>
1425
- <BoundingBox CRS="EPSG:4326"
1426
- minx="-65" miny="-180" maxx="75" maxy="180" />
1427
- </Layer>
1428
- <Layer queryable="0" opaque="0" cascaded="0">
1429
- <Name>F152005.v4b.avg_lights_x_pct.lzw.tif</Name>
1430
- <Title>F152005.v4b.avg_lights_x_pct.lzw.tif</Title>
1431
- <CRS>EPSG:4326</CRS>
1432
- <EX_GeographicBoundingBox>
1433
- <westBoundLongitude>-180</westBoundLongitude>
1434
- <eastBoundLongitude>180</eastBoundLongitude>
1435
- <southBoundLatitude>-65</southBoundLatitude>
1436
- <northBoundLatitude>75</northBoundLatitude>
1437
- </EX_GeographicBoundingBox>
1438
- <BoundingBox CRS="EPSG:4326"
1439
- minx="-65" miny="-180" maxx="75" maxy="180" />
1440
- </Layer>
1441
- <Layer queryable="0" opaque="0" cascaded="0">
1442
- <Name>F152005.v4b_web.avg_vis.lzw.tif</Name>
1443
- <Title>F152005.v4b_web.avg_vis.lzw.tif</Title>
1444
- <CRS>EPSG:4326</CRS>
1445
- <EX_GeographicBoundingBox>
1446
- <westBoundLongitude>-180</westBoundLongitude>
1447
- <eastBoundLongitude>180</eastBoundLongitude>
1448
- <southBoundLatitude>-65</southBoundLatitude>
1449
- <northBoundLatitude>75</northBoundLatitude>
1450
- </EX_GeographicBoundingBox>
1451
- <BoundingBox CRS="EPSG:4326"
1452
- minx="-65" miny="-180" maxx="75" maxy="180" />
1453
- </Layer>
1454
- <Layer queryable="0" opaque="0" cascaded="0">
1455
- <Name>F152005.v4b_web.cf_cvg.lzw.tif</Name>
1456
- <Title>F152005.v4b_web.cf_cvg.lzw.tif</Title>
1457
- <CRS>EPSG:4326</CRS>
1458
- <EX_GeographicBoundingBox>
1459
- <westBoundLongitude>-180</westBoundLongitude>
1460
- <eastBoundLongitude>180</eastBoundLongitude>
1461
- <southBoundLatitude>-65</southBoundLatitude>
1462
- <northBoundLatitude>75</northBoundLatitude>
1463
- </EX_GeographicBoundingBox>
1464
- <BoundingBox CRS="EPSG:4326"
1465
- minx="-65" miny="-180" maxx="75" maxy="180" />
1466
- </Layer>
1467
- <Layer queryable="0" opaque="0" cascaded="0">
1468
- <Name>F152005.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
1469
- <Title>F152005.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
1470
- <CRS>EPSG:4326</CRS>
1471
- <EX_GeographicBoundingBox>
1472
- <westBoundLongitude>-180</westBoundLongitude>
1473
- <eastBoundLongitude>180</eastBoundLongitude>
1474
- <southBoundLatitude>-65</southBoundLatitude>
1475
- <northBoundLatitude>75</northBoundLatitude>
1476
- </EX_GeographicBoundingBox>
1477
- <BoundingBox CRS="EPSG:4326"
1478
- minx="-65" miny="-180" maxx="75" maxy="180" />
1479
- </Layer>
1480
- <Layer queryable="0" opaque="0" cascaded="0">
1481
- <Name>F152006.v4b.avg_lights_x_pct.lzw.tif</Name>
1482
- <Title>F152006.v4b.avg_lights_x_pct.lzw.tif</Title>
1483
- <CRS>EPSG:4326</CRS>
1484
- <EX_GeographicBoundingBox>
1485
- <westBoundLongitude>-180</westBoundLongitude>
1486
- <eastBoundLongitude>180</eastBoundLongitude>
1487
- <southBoundLatitude>-65</southBoundLatitude>
1488
- <northBoundLatitude>75</northBoundLatitude>
1489
- </EX_GeographicBoundingBox>
1490
- <BoundingBox CRS="EPSG:4326"
1491
- minx="-65" miny="-180" maxx="75" maxy="180" />
1492
- </Layer>
1493
- <Layer queryable="0" opaque="0" cascaded="0">
1494
- <Name>F152006.v4b_web.avg_vis.lzw.tif</Name>
1495
- <Title>F152006.v4b_web.avg_vis.lzw.tif</Title>
1496
- <CRS>EPSG:4326</CRS>
1497
- <EX_GeographicBoundingBox>
1498
- <westBoundLongitude>-180</westBoundLongitude>
1499
- <eastBoundLongitude>180</eastBoundLongitude>
1500
- <southBoundLatitude>-65</southBoundLatitude>
1501
- <northBoundLatitude>75</northBoundLatitude>
1502
- </EX_GeographicBoundingBox>
1503
- <BoundingBox CRS="EPSG:4326"
1504
- minx="-65" miny="-180" maxx="75" maxy="180" />
1505
- </Layer>
1506
- <Layer queryable="0" opaque="0" cascaded="0">
1507
- <Name>F152006.v4b_web.cf_cvg.lzw.tif</Name>
1508
- <Title>F152006.v4b_web.cf_cvg.lzw.tif</Title>
1509
- <CRS>EPSG:4326</CRS>
1510
- <EX_GeographicBoundingBox>
1511
- <westBoundLongitude>-180</westBoundLongitude>
1512
- <eastBoundLongitude>180</eastBoundLongitude>
1513
- <southBoundLatitude>-65</southBoundLatitude>
1514
- <northBoundLatitude>75</northBoundLatitude>
1515
- </EX_GeographicBoundingBox>
1516
- <BoundingBox CRS="EPSG:4326"
1517
- minx="-65" miny="-180" maxx="75" maxy="180" />
1518
- </Layer>
1519
- <Layer queryable="0" opaque="0" cascaded="0">
1520
- <Name>F152006.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
1521
- <Title>F152006.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
1522
- <CRS>EPSG:4326</CRS>
1523
- <EX_GeographicBoundingBox>
1524
- <westBoundLongitude>-180</westBoundLongitude>
1525
- <eastBoundLongitude>180</eastBoundLongitude>
1526
- <southBoundLatitude>-65</southBoundLatitude>
1527
- <northBoundLatitude>75</northBoundLatitude>
1528
- </EX_GeographicBoundingBox>
1529
- <BoundingBox CRS="EPSG:4326"
1530
- minx="-65" miny="-180" maxx="75" maxy="180" />
1531
- </Layer>
1532
- <Layer queryable="0" opaque="0" cascaded="0">
1533
- <Name>F152007.v4b.avg_lights_x_pct.lzw.tif</Name>
1534
- <Title>F152007.v4b.avg_lights_x_pct.lzw.tif</Title>
1535
- <CRS>EPSG:4326</CRS>
1536
- <EX_GeographicBoundingBox>
1537
- <westBoundLongitude>-180</westBoundLongitude>
1538
- <eastBoundLongitude>180</eastBoundLongitude>
1539
- <southBoundLatitude>-65</southBoundLatitude>
1540
- <northBoundLatitude>75</northBoundLatitude>
1541
- </EX_GeographicBoundingBox>
1542
- <BoundingBox CRS="EPSG:4326"
1543
- minx="-65" miny="-180" maxx="75" maxy="180" />
1544
- </Layer>
1545
- <Layer queryable="0" opaque="0" cascaded="0">
1546
- <Name>F152007.v4b_web.avg_vis.lzw.tif</Name>
1547
- <Title>F152007.v4b_web.avg_vis.lzw.tif</Title>
1548
- <CRS>EPSG:4326</CRS>
1549
- <EX_GeographicBoundingBox>
1550
- <westBoundLongitude>-180</westBoundLongitude>
1551
- <eastBoundLongitude>180</eastBoundLongitude>
1552
- <southBoundLatitude>-65</southBoundLatitude>
1553
- <northBoundLatitude>75</northBoundLatitude>
1554
- </EX_GeographicBoundingBox>
1555
- <BoundingBox CRS="EPSG:4326"
1556
- minx="-65" miny="-180" maxx="75" maxy="180" />
1557
- </Layer>
1558
- <Layer queryable="0" opaque="0" cascaded="0">
1559
- <Name>F152007.v4b_web.cf_cvg.lzw.tif</Name>
1560
- <Title>F152007.v4b_web.cf_cvg.lzw.tif</Title>
1561
- <CRS>EPSG:4326</CRS>
1562
- <EX_GeographicBoundingBox>
1563
- <westBoundLongitude>-180</westBoundLongitude>
1564
- <eastBoundLongitude>180</eastBoundLongitude>
1565
- <southBoundLatitude>-65</southBoundLatitude>
1566
- <northBoundLatitude>75</northBoundLatitude>
1567
- </EX_GeographicBoundingBox>
1568
- <BoundingBox CRS="EPSG:4326"
1569
- minx="-65" miny="-180" maxx="75" maxy="180" />
1570
- </Layer>
1571
- <Layer queryable="0" opaque="0" cascaded="0">
1572
- <Name>F152007.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
1573
- <Title>F152007.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
1574
- <CRS>EPSG:4326</CRS>
1575
- <EX_GeographicBoundingBox>
1576
- <westBoundLongitude>-180</westBoundLongitude>
1577
- <eastBoundLongitude>180</eastBoundLongitude>
1578
- <southBoundLatitude>-65</southBoundLatitude>
1579
- <northBoundLatitude>75</northBoundLatitude>
1580
- </EX_GeographicBoundingBox>
1581
- <BoundingBox CRS="EPSG:4326"
1582
- minx="-65" miny="-180" maxx="75" maxy="180" />
1583
- </Layer>
1584
- <Layer queryable="0" opaque="0" cascaded="0">
1585
- <Name>F152008.v4b.avg_lights_x_pct.lzw.tif</Name>
1586
- <Title>F152008.v4b.avg_lights_x_pct.lzw.tif</Title>
1587
- <CRS>EPSG:4326</CRS>
1588
- <EX_GeographicBoundingBox>
1589
- <westBoundLongitude>-180</westBoundLongitude>
1590
- <eastBoundLongitude>180</eastBoundLongitude>
1591
- <southBoundLatitude>-65</southBoundLatitude>
1592
- <northBoundLatitude>75</northBoundLatitude>
1593
- </EX_GeographicBoundingBox>
1594
- <BoundingBox CRS="EPSG:4326"
1595
- minx="-65" miny="-180" maxx="75" maxy="180" />
1596
- </Layer>
1597
- <Layer queryable="0" opaque="0" cascaded="0">
1598
- <Name>F152008.v4b_web.avg_vis.lzw.tif</Name>
1599
- <Title>F152008.v4b_web.avg_vis.lzw.tif</Title>
1600
- <CRS>EPSG:4326</CRS>
1601
- <EX_GeographicBoundingBox>
1602
- <westBoundLongitude>-180</westBoundLongitude>
1603
- <eastBoundLongitude>180</eastBoundLongitude>
1604
- <southBoundLatitude>-65</southBoundLatitude>
1605
- <northBoundLatitude>75</northBoundLatitude>
1606
- </EX_GeographicBoundingBox>
1607
- <BoundingBox CRS="EPSG:4326"
1608
- minx="-65" miny="-180" maxx="75" maxy="180" />
1609
- </Layer>
1610
- <Layer queryable="0" opaque="0" cascaded="0">
1611
- <Name>F152008.v4b_web.cf_cvg.lzw.tif</Name>
1612
- <Title>F152008.v4b_web.cf_cvg.lzw.tif</Title>
1613
- <CRS>EPSG:4326</CRS>
1614
- <EX_GeographicBoundingBox>
1615
- <westBoundLongitude>-180</westBoundLongitude>
1616
- <eastBoundLongitude>180</eastBoundLongitude>
1617
- <southBoundLatitude>-65</southBoundLatitude>
1618
- <northBoundLatitude>75</northBoundLatitude>
1619
- </EX_GeographicBoundingBox>
1620
- <BoundingBox CRS="EPSG:4326"
1621
- minx="-65" miny="-180" maxx="75" maxy="180" />
1622
- </Layer>
1623
- <Layer queryable="0" opaque="0" cascaded="0">
1624
- <Name>F152008.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
1625
- <Title>F152008.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
1626
- <CRS>EPSG:4326</CRS>
1627
- <EX_GeographicBoundingBox>
1628
- <westBoundLongitude>-180</westBoundLongitude>
1629
- <eastBoundLongitude>180</eastBoundLongitude>
1630
- <southBoundLatitude>-65</southBoundLatitude>
1631
- <northBoundLatitude>75</northBoundLatitude>
1632
- </EX_GeographicBoundingBox>
1633
- <BoundingBox CRS="EPSG:4326"
1634
- minx="-65" miny="-180" maxx="75" maxy="180" />
1635
- </Layer>
1636
- <Layer queryable="0" opaque="0" cascaded="0">
1637
- <Name>F162004.v4b.avg_lights_x_pct.lzw.tif</Name>
1638
- <Title>F162004.v4b.avg_lights_x_pct.lzw.tif</Title>
1639
- <CRS>EPSG:4326</CRS>
1640
- <EX_GeographicBoundingBox>
1641
- <westBoundLongitude>-180</westBoundLongitude>
1642
- <eastBoundLongitude>180</eastBoundLongitude>
1643
- <southBoundLatitude>-65</southBoundLatitude>
1644
- <northBoundLatitude>75</northBoundLatitude>
1645
- </EX_GeographicBoundingBox>
1646
- <BoundingBox CRS="EPSG:4326"
1647
- minx="-65" miny="-180" maxx="75" maxy="180" />
1648
- </Layer>
1649
- <Layer queryable="0" opaque="0" cascaded="0">
1650
- <Name>F162004.v4b_web.avg_vis.lzw.tif</Name>
1651
- <Title>F162004.v4b_web.avg_vis.lzw.tif</Title>
1652
- <CRS>EPSG:4326</CRS>
1653
- <EX_GeographicBoundingBox>
1654
- <westBoundLongitude>-180</westBoundLongitude>
1655
- <eastBoundLongitude>180</eastBoundLongitude>
1656
- <southBoundLatitude>-65</southBoundLatitude>
1657
- <northBoundLatitude>75</northBoundLatitude>
1658
- </EX_GeographicBoundingBox>
1659
- <BoundingBox CRS="EPSG:4326"
1660
- minx="-65" miny="-180" maxx="75" maxy="180" />
1661
- </Layer>
1662
- <Layer queryable="0" opaque="0" cascaded="0">
1663
- <Name>F162004.v4b_web.cf_cvg.lzw.tif</Name>
1664
- <Title>F162004.v4b_web.cf_cvg.lzw.tif</Title>
1665
- <CRS>EPSG:4326</CRS>
1666
- <EX_GeographicBoundingBox>
1667
- <westBoundLongitude>-180</westBoundLongitude>
1668
- <eastBoundLongitude>180</eastBoundLongitude>
1669
- <southBoundLatitude>-65</southBoundLatitude>
1670
- <northBoundLatitude>75</northBoundLatitude>
1671
- </EX_GeographicBoundingBox>
1672
- <BoundingBox CRS="EPSG:4326"
1673
- minx="-65" miny="-180" maxx="75" maxy="180" />
1674
- </Layer>
1675
- <Layer queryable="0" opaque="0" cascaded="0">
1676
- <Name>F162004.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
1677
- <Title>F162004.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
1678
- <CRS>EPSG:4326</CRS>
1679
- <EX_GeographicBoundingBox>
1680
- <westBoundLongitude>-180</westBoundLongitude>
1681
- <eastBoundLongitude>180</eastBoundLongitude>
1682
- <southBoundLatitude>-65</southBoundLatitude>
1683
- <northBoundLatitude>75</northBoundLatitude>
1684
- </EX_GeographicBoundingBox>
1685
- <BoundingBox CRS="EPSG:4326"
1686
- minx="-65" miny="-180" maxx="75" maxy="180" />
1687
- </Layer>
1688
- <Layer queryable="0" opaque="0" cascaded="0">
1689
- <Name>F162005.v4b.avg_lights_x_pct.lzw.tif</Name>
1690
- <Title>F162005.v4b.avg_lights_x_pct.lzw.tif</Title>
1691
- <CRS>EPSG:4326</CRS>
1692
- <EX_GeographicBoundingBox>
1693
- <westBoundLongitude>-180</westBoundLongitude>
1694
- <eastBoundLongitude>180</eastBoundLongitude>
1695
- <southBoundLatitude>-65</southBoundLatitude>
1696
- <northBoundLatitude>75</northBoundLatitude>
1697
- </EX_GeographicBoundingBox>
1698
- <BoundingBox CRS="EPSG:4326"
1699
- minx="-65" miny="-180" maxx="75" maxy="180" />
1700
- </Layer>
1701
- <Layer queryable="0" opaque="0" cascaded="0">
1702
- <Name>F162005.v4b_web.avg_vis.lzw.tif</Name>
1703
- <Title>F162005.v4b_web.avg_vis.lzw.tif</Title>
1704
- <CRS>EPSG:4326</CRS>
1705
- <EX_GeographicBoundingBox>
1706
- <westBoundLongitude>-180</westBoundLongitude>
1707
- <eastBoundLongitude>180</eastBoundLongitude>
1708
- <southBoundLatitude>-65</southBoundLatitude>
1709
- <northBoundLatitude>75</northBoundLatitude>
1710
- </EX_GeographicBoundingBox>
1711
- <BoundingBox CRS="EPSG:4326"
1712
- minx="-65" miny="-180" maxx="75" maxy="180" />
1713
- </Layer>
1714
- <Layer queryable="0" opaque="0" cascaded="0">
1715
- <Name>F162005.v4b_web.cf_cvg.lzw.tif</Name>
1716
- <Title>F162005.v4b_web.cf_cvg.lzw.tif</Title>
1717
- <CRS>EPSG:4326</CRS>
1718
- <EX_GeographicBoundingBox>
1719
- <westBoundLongitude>-180</westBoundLongitude>
1720
- <eastBoundLongitude>180</eastBoundLongitude>
1721
- <southBoundLatitude>-65</southBoundLatitude>
1722
- <northBoundLatitude>75</northBoundLatitude>
1723
- </EX_GeographicBoundingBox>
1724
- <BoundingBox CRS="EPSG:4326"
1725
- minx="-65" miny="-180" maxx="75" maxy="180" />
1726
- </Layer>
1727
- <Layer queryable="0" opaque="0" cascaded="0">
1728
- <Name>F162005.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
1729
- <Title>F162005.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
1730
- <CRS>EPSG:4326</CRS>
1731
- <EX_GeographicBoundingBox>
1732
- <westBoundLongitude>-180</westBoundLongitude>
1733
- <eastBoundLongitude>180</eastBoundLongitude>
1734
- <southBoundLatitude>-65</southBoundLatitude>
1735
- <northBoundLatitude>75</northBoundLatitude>
1736
- </EX_GeographicBoundingBox>
1737
- <BoundingBox CRS="EPSG:4326"
1738
- minx="-65" miny="-180" maxx="75" maxy="180" />
1739
- </Layer>
1740
- <Layer queryable="0" opaque="0" cascaded="0">
1741
- <Name>F162006.v4b.avg_lights_x_pct.lzw.tif</Name>
1742
- <Title>F162006.v4b.avg_lights_x_pct.lzw.tif</Title>
1743
- <CRS>EPSG:4326</CRS>
1744
- <EX_GeographicBoundingBox>
1745
- <westBoundLongitude>-180</westBoundLongitude>
1746
- <eastBoundLongitude>180</eastBoundLongitude>
1747
- <southBoundLatitude>-65</southBoundLatitude>
1748
- <northBoundLatitude>75</northBoundLatitude>
1749
- </EX_GeographicBoundingBox>
1750
- <BoundingBox CRS="EPSG:4326"
1751
- minx="-65" miny="-180" maxx="75" maxy="180" />
1752
- </Layer>
1753
- <Layer queryable="0" opaque="0" cascaded="0">
1754
- <Name>F162006.v4b_web.avg_vis.lzw.tif</Name>
1755
- <Title>F162006.v4b_web.avg_vis.lzw.tif</Title>
1756
- <CRS>EPSG:4326</CRS>
1757
- <EX_GeographicBoundingBox>
1758
- <westBoundLongitude>-180</westBoundLongitude>
1759
- <eastBoundLongitude>180</eastBoundLongitude>
1760
- <southBoundLatitude>-65</southBoundLatitude>
1761
- <northBoundLatitude>75</northBoundLatitude>
1762
- </EX_GeographicBoundingBox>
1763
- <BoundingBox CRS="EPSG:4326"
1764
- minx="-65" miny="-180" maxx="75" maxy="180" />
1765
- </Layer>
1766
- <Layer queryable="0" opaque="0" cascaded="0">
1767
- <Name>F162006.v4b_web.cf_cvg.lzw.tif</Name>
1768
- <Title>F162006.v4b_web.cf_cvg.lzw.tif</Title>
1769
- <CRS>EPSG:4326</CRS>
1770
- <EX_GeographicBoundingBox>
1771
- <westBoundLongitude>-180</westBoundLongitude>
1772
- <eastBoundLongitude>180</eastBoundLongitude>
1773
- <southBoundLatitude>-65</southBoundLatitude>
1774
- <northBoundLatitude>75</northBoundLatitude>
1775
- </EX_GeographicBoundingBox>
1776
- <BoundingBox CRS="EPSG:4326"
1777
- minx="-65" miny="-180" maxx="75" maxy="180" />
1778
- </Layer>
1779
- <Layer queryable="0" opaque="0" cascaded="0">
1780
- <Name>F162006.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
1781
- <Title>F162006.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
1782
- <CRS>EPSG:4326</CRS>
1783
- <EX_GeographicBoundingBox>
1784
- <westBoundLongitude>-180</westBoundLongitude>
1785
- <eastBoundLongitude>180</eastBoundLongitude>
1786
- <southBoundLatitude>-65</southBoundLatitude>
1787
- <northBoundLatitude>75</northBoundLatitude>
1788
- </EX_GeographicBoundingBox>
1789
- <BoundingBox CRS="EPSG:4326"
1790
- minx="-65" miny="-180" maxx="75" maxy="180" />
1791
- </Layer>
1792
- <Layer queryable="0" opaque="0" cascaded="0">
1793
- <Name>F162007.v4b.avg_lights_x_pct.lzw.tif</Name>
1794
- <Title>F162007.v4b.avg_lights_x_pct.lzw.tif</Title>
1795
- <CRS>EPSG:4326</CRS>
1796
- <EX_GeographicBoundingBox>
1797
- <westBoundLongitude>-180</westBoundLongitude>
1798
- <eastBoundLongitude>180</eastBoundLongitude>
1799
- <southBoundLatitude>-65</southBoundLatitude>
1800
- <northBoundLatitude>75</northBoundLatitude>
1801
- </EX_GeographicBoundingBox>
1802
- <BoundingBox CRS="EPSG:4326"
1803
- minx="-65" miny="-180" maxx="75" maxy="180" />
1804
- </Layer>
1805
- <Layer queryable="0" opaque="0" cascaded="0">
1806
- <Name>F162007.v4b_web.avg_vis.lzw.tif</Name>
1807
- <Title>F162007.v4b_web.avg_vis.lzw.tif</Title>
1808
- <CRS>EPSG:4326</CRS>
1809
- <EX_GeographicBoundingBox>
1810
- <westBoundLongitude>-180</westBoundLongitude>
1811
- <eastBoundLongitude>180</eastBoundLongitude>
1812
- <southBoundLatitude>-65</southBoundLatitude>
1813
- <northBoundLatitude>75</northBoundLatitude>
1814
- </EX_GeographicBoundingBox>
1815
- <BoundingBox CRS="EPSG:4326"
1816
- minx="-65" miny="-180" maxx="75" maxy="180" />
1817
- </Layer>
1818
- <Layer queryable="0" opaque="0" cascaded="0">
1819
- <Name>F162007.v4b_web.cf_cvg.lzw.tif</Name>
1820
- <Title>F162007.v4b_web.cf_cvg.lzw.tif</Title>
1821
- <CRS>EPSG:4326</CRS>
1822
- <EX_GeographicBoundingBox>
1823
- <westBoundLongitude>-180</westBoundLongitude>
1824
- <eastBoundLongitude>180</eastBoundLongitude>
1825
- <southBoundLatitude>-65</southBoundLatitude>
1826
- <northBoundLatitude>75</northBoundLatitude>
1827
- </EX_GeographicBoundingBox>
1828
- <BoundingBox CRS="EPSG:4326"
1829
- minx="-65" miny="-180" maxx="75" maxy="180" />
1830
- </Layer>
1831
- <Layer queryable="0" opaque="0" cascaded="0">
1832
- <Name>F162007.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
1833
- <Title>F162007.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
1834
- <CRS>EPSG:4326</CRS>
1835
- <EX_GeographicBoundingBox>
1836
- <westBoundLongitude>-180</westBoundLongitude>
1837
- <eastBoundLongitude>180</eastBoundLongitude>
1838
- <southBoundLatitude>-65</southBoundLatitude>
1839
- <northBoundLatitude>75</northBoundLatitude>
1840
- </EX_GeographicBoundingBox>
1841
- <BoundingBox CRS="EPSG:4326"
1842
- minx="-65" miny="-180" maxx="75" maxy="180" />
1843
- </Layer>
1844
- <Layer queryable="0" opaque="0" cascaded="0">
1845
- <Name>F162008.v4b.avg_lights_x_pct.lzw.tif</Name>
1846
- <Title>F162008.v4b.avg_lights_x_pct.lzw.tif</Title>
1847
- <CRS>EPSG:4326</CRS>
1848
- <EX_GeographicBoundingBox>
1849
- <westBoundLongitude>-180</westBoundLongitude>
1850
- <eastBoundLongitude>180</eastBoundLongitude>
1851
- <southBoundLatitude>-65</southBoundLatitude>
1852
- <northBoundLatitude>75</northBoundLatitude>
1853
- </EX_GeographicBoundingBox>
1854
- <BoundingBox CRS="EPSG:4326"
1855
- minx="-65" miny="-180" maxx="75" maxy="180" />
1856
- </Layer>
1857
- <Layer queryable="0" opaque="0" cascaded="0">
1858
- <Name>F162008.v4b_web.avg_vis.lzw.tif</Name>
1859
- <Title>F162008.v4b_web.avg_vis.lzw.tif</Title>
1860
- <CRS>EPSG:4326</CRS>
1861
- <EX_GeographicBoundingBox>
1862
- <westBoundLongitude>-180</westBoundLongitude>
1863
- <eastBoundLongitude>180</eastBoundLongitude>
1864
- <southBoundLatitude>-65</southBoundLatitude>
1865
- <northBoundLatitude>75</northBoundLatitude>
1866
- </EX_GeographicBoundingBox>
1867
- <BoundingBox CRS="EPSG:4326"
1868
- minx="-65" miny="-180" maxx="75" maxy="180" />
1869
- </Layer>
1870
- <Layer queryable="0" opaque="0" cascaded="0">
1871
- <Name>F162008.v4b_web.cf_cvg.lzw.tif</Name>
1872
- <Title>F162008.v4b_web.cf_cvg.lzw.tif</Title>
1873
- <CRS>EPSG:4326</CRS>
1874
- <EX_GeographicBoundingBox>
1875
- <westBoundLongitude>-180</westBoundLongitude>
1876
- <eastBoundLongitude>180</eastBoundLongitude>
1877
- <southBoundLatitude>-65</southBoundLatitude>
1878
- <northBoundLatitude>75</northBoundLatitude>
1879
- </EX_GeographicBoundingBox>
1880
- <BoundingBox CRS="EPSG:4326"
1881
- minx="-65" miny="-180" maxx="75" maxy="180" />
1882
- </Layer>
1883
- <Layer queryable="0" opaque="0" cascaded="0">
1884
- <Name>F162008.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
1885
- <Title>F162008.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
1886
- <CRS>EPSG:4326</CRS>
1887
- <EX_GeographicBoundingBox>
1888
- <westBoundLongitude>-180</westBoundLongitude>
1889
- <eastBoundLongitude>180</eastBoundLongitude>
1890
- <southBoundLatitude>-65</southBoundLatitude>
1891
- <northBoundLatitude>75</northBoundLatitude>
1892
- </EX_GeographicBoundingBox>
1893
- <BoundingBox CRS="EPSG:4326"
1894
- minx="-65" miny="-180" maxx="75" maxy="180" />
1895
- </Layer>
1896
- <Layer queryable="0" opaque="0" cascaded="0">
1897
- <Name>F162009.v4b.avg_lights_x_pct.lzw.tif</Name>
1898
- <Title>F162009.v4b.avg_lights_x_pct.lzw.tif</Title>
1899
- <CRS>EPSG:4326</CRS>
1900
- <EX_GeographicBoundingBox>
1901
- <westBoundLongitude>-180</westBoundLongitude>
1902
- <eastBoundLongitude>180</eastBoundLongitude>
1903
- <southBoundLatitude>-65</southBoundLatitude>
1904
- <northBoundLatitude>75</northBoundLatitude>
1905
- </EX_GeographicBoundingBox>
1906
- <BoundingBox CRS="EPSG:4326"
1907
- minx="-65" miny="-180" maxx="75" maxy="180" />
1908
- </Layer>
1909
- <Layer queryable="0" opaque="0" cascaded="0">
1910
- <Name>F162009.v4b_web.avg_vis.lzw.tif</Name>
1911
- <Title>F162009.v4b_web.avg_vis.lzw.tif</Title>
1912
- <CRS>EPSG:4326</CRS>
1913
- <EX_GeographicBoundingBox>
1914
- <westBoundLongitude>-180</westBoundLongitude>
1915
- <eastBoundLongitude>180</eastBoundLongitude>
1916
- <southBoundLatitude>-65</southBoundLatitude>
1917
- <northBoundLatitude>75</northBoundLatitude>
1918
- </EX_GeographicBoundingBox>
1919
- <BoundingBox CRS="EPSG:4326"
1920
- minx="-65" miny="-180" maxx="75" maxy="180" />
1921
- </Layer>
1922
- <Layer queryable="0" opaque="0" cascaded="0">
1923
- <Name>F162009.v4b_web.cf_cvg.lzw.tif</Name>
1924
- <Title>F162009.v4b_web.cf_cvg.lzw.tif</Title>
1925
- <CRS>EPSG:4326</CRS>
1926
- <EX_GeographicBoundingBox>
1927
- <westBoundLongitude>-180</westBoundLongitude>
1928
- <eastBoundLongitude>180</eastBoundLongitude>
1929
- <southBoundLatitude>-65</southBoundLatitude>
1930
- <northBoundLatitude>75</northBoundLatitude>
1931
- </EX_GeographicBoundingBox>
1932
- <BoundingBox CRS="EPSG:4326"
1933
- minx="-65" miny="-180" maxx="75" maxy="180" />
1934
- </Layer>
1935
- <Layer queryable="0" opaque="0" cascaded="0">
1936
- <Name>F162009.v4b_web.stable_lights.avg_vis.lzw.tif</Name>
1937
- <Title>F162009.v4b_web.stable_lights.avg_vis.lzw.tif</Title>
1938
- <CRS>EPSG:4326</CRS>
1939
- <EX_GeographicBoundingBox>
1940
- <westBoundLongitude>-180</westBoundLongitude>
1941
- <eastBoundLongitude>180</eastBoundLongitude>
1942
- <southBoundLatitude>-65</southBoundLatitude>
1943
- <northBoundLatitude>75</northBoundLatitude>
1944
- </EX_GeographicBoundingBox>
1945
- <BoundingBox CRS="EPSG:4326"
1946
- minx="-65" miny="-180" maxx="75" maxy="180" />
1947
- </Layer>
1948
- <Layer queryable="0" opaque="0" cascaded="0">
1949
- <Name>F182010.v4c.avg_lights_x_pct.lzw.tif</Name>
1950
- <Title>F182010.v4c.avg_lights_x_pct.lzw.tif</Title>
1951
- <CRS>EPSG:4326</CRS>
1952
- <EX_GeographicBoundingBox>
1953
- <westBoundLongitude>-180</westBoundLongitude>
1954
- <eastBoundLongitude>180</eastBoundLongitude>
1955
- <southBoundLatitude>-65</southBoundLatitude>
1956
- <northBoundLatitude>75</northBoundLatitude>
1957
- </EX_GeographicBoundingBox>
1958
- <BoundingBox CRS="EPSG:4326"
1959
- minx="-65" miny="-180" maxx="75" maxy="180" />
1960
- </Layer>
1961
- <Layer queryable="0" opaque="0" cascaded="0">
1962
- <Name>F182010.v4c_web.avg_vis.lzw.tif</Name>
1963
- <Title>F182010.v4c_web.avg_vis.lzw.tif</Title>
1964
- <CRS>EPSG:4326</CRS>
1965
- <EX_GeographicBoundingBox>
1966
- <westBoundLongitude>-180</westBoundLongitude>
1967
- <eastBoundLongitude>180</eastBoundLongitude>
1968
- <southBoundLatitude>-65</southBoundLatitude>
1969
- <northBoundLatitude>75</northBoundLatitude>
1970
- </EX_GeographicBoundingBox>
1971
- <BoundingBox CRS="EPSG:4326"
1972
- minx="-65" miny="-180" maxx="75" maxy="180" />
1973
- </Layer>
1974
- <Layer queryable="0" opaque="0" cascaded="0">
1975
- <Name>F182010.v4c_web.cf_cvg.lzw.tif</Name>
1976
- <Title>F182010.v4c_web.cf_cvg.lzw.tif</Title>
1977
- <CRS>EPSG:4326</CRS>
1978
- <EX_GeographicBoundingBox>
1979
- <westBoundLongitude>-180</westBoundLongitude>
1980
- <eastBoundLongitude>180</eastBoundLongitude>
1981
- <southBoundLatitude>-65</southBoundLatitude>
1982
- <northBoundLatitude>75</northBoundLatitude>
1983
- </EX_GeographicBoundingBox>
1984
- <BoundingBox CRS="EPSG:4326"
1985
- minx="-65" miny="-180" maxx="75" maxy="180" />
1986
- </Layer>
1987
- <Layer queryable="0" opaque="0" cascaded="0">
1988
- <Name>F182010.v4c_web.stable_lights.avg_vis.lzw.tif</Name>
1989
- <Title>F182010.v4c_web.stable_lights.avg_vis.lzw.tif</Title>
1990
- <CRS>EPSG:4326</CRS>
1991
- <EX_GeographicBoundingBox>
1992
- <westBoundLongitude>-180</westBoundLongitude>
1993
- <eastBoundLongitude>180</eastBoundLongitude>
1994
- <southBoundLatitude>-65</southBoundLatitude>
1995
- <northBoundLatitude>75</northBoundLatitude>
1996
- </EX_GeographicBoundingBox>
1997
- <BoundingBox CRS="EPSG:4326"
1998
- minx="-65" miny="-180" maxx="75" maxy="180" />
1999
- </Layer>
2000
- </Layer>
2001
- </Capability>
2002
- </WMS_Capabilities>
2003
- */
119
+ export type parseWMSCapabilitiesOptions = {
120
+ /** Add inherited layer information to sub layers */
121
+ inheritedLayerProps?: boolean;
122
+ /** Include the "raw" JSON (parsed but untyped, unprocessed XML). May contain additional fields */
123
+ includeRawData?: boolean;
124
+ /** Include the original XML document text. May contain additional information. */
125
+ includeXMLText?: boolean;
126
+ /** @deprecated Use includeRawData` */
127
+ raw?: boolean;
128
+
129
+ // xml options are passed through to xml loader
130
+ };
2004
131
 
2005
132
  /**
2006
133
  * Parses a typed data structure from raw XML for `GetCapabilities` response
2007
134
  * @note Error handlings is fairly weak
2008
135
  */
2009
- export function parseWMSCapabilities(text: string, options): WMSCapabilities {
2010
- const parsedXML = XMLLoader.parseTextSync(text, options);
136
+ export function parseWMSCapabilities(
137
+ xmlText: string,
138
+ options?: parseWMSCapabilitiesOptions
139
+ ): WMSCapabilities {
140
+ const parsedXML = XMLLoader.parseTextSync(xmlText, options);
2011
141
  const xmlCapabilities: any =
2012
142
  parsedXML.WMT_MS_Capabilities || parsedXML.WMS_Capabilities || parsedXML;
2013
- return extractCapabilities(xmlCapabilities);
143
+ const capabilities = extractCapabilities(xmlCapabilities);
144
+ // In case the processed, normalized capabilities do not contain everything,
145
+ // the user can get the parsed XML structure.
146
+ if (options?.inheritedLayerProps) {
147
+ // Traverse layers and inject missing props from parents
148
+ for (const layer of capabilities.layers) {
149
+ addInheritedLayerProps(layer, null);
150
+ }
151
+ // Not yet implemented
152
+ }
153
+
154
+ if (options?.includeRawData || options?.raw) {
155
+ capabilities.raw = xmlCapabilities;
156
+ }
157
+
158
+ if (options?.includeXMLText) {
159
+ capabilities.xml = xmlText;
160
+ }
161
+
162
+ return capabilities;
2014
163
  }
2015
164
 
2016
165
  /** Extract typed capability data from XML */
2017
166
  function extractCapabilities(xml: any): WMSCapabilities {
2018
167
  const capabilities: WMSCapabilities = {
2019
- name: xml.Service?.Name || 'unnamed',
2020
- title: xml.Service?.Title,
2021
- keywords: [],
2022
- requests: {},
2023
- layer: extractLayer(xml.Capability?.Layer),
2024
- raw: xml
168
+ version: String(xml.version || ''),
169
+ name: String(xml.Service?.Name || 'unnamed'),
170
+ title: xml.Service?.Title ? String(xml.Service?.Title) : undefined,
171
+ abstract: xml.Service?.Abstract ? String(xml.Service?.Abstract) : undefined,
172
+ keywords: getXMLStringArray(xml.Service?.KeywordList?.Keyword),
173
+ fees: xml.Service?.Fees ? JSON.stringify(xml.Service?.Fees) : undefined,
174
+ accessConstraints: xml.Service?.AccessConstraints
175
+ ? JSON.stringify(xml.Service?.AccessConstraints)
176
+ : undefined,
177
+ layerLimit: getXMLInteger(xml.Service?.LayerLimit),
178
+ maxWidth: getXMLInteger(xml.Service?.maxWidth),
179
+ maxHeight: getXMLInteger(xml.Service?.maxHeight),
180
+ layers: [],
181
+ requests: extractRequests(xml.Capability?.Request),
182
+ exceptions: extractExceptions(xml.Exception)
183
+ // contact field is a mess of largely irrelevant information, put it last
184
+ // contact: xml.Service?.Contact ? JSON.stringify(xml.Service?.Contact) : undefined,
2025
185
  };
2026
186
 
2027
- for (const keyword of xml.Service?.KeywordList?.Keyword || []) {
2028
- capabilities.keywords.push(keyword);
187
+ // LAYERS
188
+ const xmlLayers = getXMLArray(xml.Capability?.Layer);
189
+ for (const xmlSubLayer of xmlLayers) {
190
+ capabilities.layers.push(extractLayer(xmlSubLayer));
2029
191
  }
2030
192
 
2031
- for (const [name, xmlRequest] of Object.entries(xml.Capability?.Request || {})) {
2032
- capabilities.requests[name] = extractRequest(name, xmlRequest);
193
+ // Clean up object
194
+ for (const [key, value] of Object.entries(capabilities)) {
195
+ if (value === undefined) {
196
+ delete capabilities[key];
197
+ }
2033
198
  }
2034
199
 
2035
200
  return capabilities;
2036
201
  }
2037
202
 
2038
- /** Extract typed request data from XML */
2039
- function extractRequest(name: string, xmlRequest: any): WMSRequest {
2040
- const format: string | string[] = xmlRequest?.Format;
2041
- const mimeTypes: string[] = Array.isArray(format) ? format : [format];
2042
- return {name, mimeTypes};
203
+ /** Extract typed request metadata from XML requests field */
204
+ function extractRequests(xmlRequests: any): Record<string, WMSRequest> {
205
+ const requests: Record<string, WMSRequest> = {};
206
+ for (const [name, xmlRequest] of Object.entries(xmlRequests || {}) as any) {
207
+ const mimeTypes = getXMLStringArray(xmlRequest?.Format);
208
+ requests[name] = {mimeTypes};
209
+ }
210
+ return requests;
211
+ }
212
+
213
+ function extractExceptions(xmlException: any): WMSExceptions | undefined {
214
+ const xmlExceptionFormats = getXMLArray(xmlException?.Format);
215
+ if (xmlExceptionFormats.length > 0) {
216
+ return {
217
+ mimeTypes: getXMLStringArray(xmlException)
218
+ };
219
+ }
220
+ return undefined;
2043
221
  }
2044
222
 
2045
223
  /** Extract request data */
224
+ // eslint-disable-next-line complexity, max-statements
2046
225
  function extractLayer(xmlLayer: any): WMSLayer {
2047
226
  const layer: WMSLayer = {
2048
- name: xmlLayer?.Name,
2049
- title: xmlLayer?.Title,
2050
- srs: xmlLayer?.SRS || [],
2051
- layers: []
227
+ // All layers must have a title
228
+ title: String(xmlLayer?.Title || ''),
229
+ // Name is required only if renderable
230
+ name: String(xmlLayer?.Name),
231
+ abstract: String(xmlLayer?.Abstract),
232
+ keywords: getXMLStringArray(xmlLayer.KeywordList?.Keyword)
2052
233
  };
2053
234
 
235
+ // WMS 1.3.0 changes SRS to CRS
236
+ const crs = xmlLayer?.CRS || xmlLayer?.SRS;
237
+ if (crs && Array.isArray(crs) && crs.every((_) => typeof _ === 'string')) {
238
+ layer.crs = crs;
239
+ }
240
+
241
+ // v1.3.0 extract simple geographic bounding box
242
+ let geographicBoundingBox =
243
+ xmlLayer?.EX_GeographicBoundingBox && extractEXBoundingBox(xmlLayer?.EX_GeographicBoundingBox);
244
+ if (geographicBoundingBox) {
245
+ layer.geographicBoundingBox = geographicBoundingBox;
246
+ }
247
+
248
+ // v1.1.1 extract simple geographic bounding box
249
+ geographicBoundingBox =
250
+ xmlLayer?.LatLonBoundingBox && extractLatLonBoundingBox(xmlLayer?.LatLonBoundingBox);
251
+ if (geographicBoundingBox) {
252
+ layer.geographicBoundingBox = geographicBoundingBox;
253
+ }
254
+
255
+ // Extract per-CRS bounding boxes
256
+ const boundingBoxes = xmlLayer?.BoundingBox && extractWMSBoundingBoxes(xmlLayer?.BoundingBox);
257
+ if (boundingBoxes && boundingBoxes.length > 0) {
258
+ layer.boundingBoxes = boundingBoxes;
259
+ }
260
+
261
+ if (xmlLayer?.opaque) {
262
+ layer.opaque = getXMLBoolean(xmlLayer?.opaque);
263
+ }
264
+ if (xmlLayer?.cascaded) {
265
+ layer.cascaded = getXMLBoolean(xmlLayer?.cascaded);
266
+ }
267
+ if (xmlLayer?.queryable) {
268
+ layer.queryable = getXMLBoolean(xmlLayer?.queryable);
269
+ }
270
+
2054
271
  // Single layer is not represented as array in XML
2055
272
  const xmlLayers = getXMLArray(xmlLayer?.Layer);
273
+ const layers: WMSLayer[] = [];
2056
274
 
2057
275
  for (const xmlSubLayer of xmlLayers) {
2058
- layer.layers?.push(extractLayer(xmlSubLayer));
276
+ layers.push(extractLayer(xmlSubLayer));
277
+ }
278
+
279
+ if (layers.length > 0) {
280
+ layer.layers = layers;
281
+ }
282
+
283
+ // Clean up object
284
+ for (const [key, value] of Object.entries(layer)) {
285
+ if (value === undefined) {
286
+ delete layer[key];
287
+ }
2059
288
  }
2060
289
 
2061
290
  return layer;
2062
291
  }
2063
292
 
2064
- function getXMLArray(xmlValue: any) {
2065
- if (Array.isArray(xmlValue)) {
2066
- return xmlValue;
293
+ /** WMS 1.3.0 Loosely defined geospatial bounding box in unspecified CRS for quick content searches */
294
+ function extractEXBoundingBox(xmlBoundingBox: any): [[number, number], [number, number]] {
295
+ const {
296
+ westBoundLongitude: w,
297
+ northBoundLatitude: n,
298
+ eastBoundLongitude: e,
299
+ southBoundLatitude: s
300
+ } = xmlBoundingBox;
301
+ return [
302
+ [w, s],
303
+ [e, n]
304
+ ];
305
+ }
306
+
307
+ /** WMS 1.1.1 Loosely defined geospatial bounding box in unspecified CRS for quick content searches */
308
+ function extractLatLonBoundingBox(xmlBoundingBox: any): [[number, number], [number, number]] {
309
+ const {minx, miny, maxx, maxy} = xmlBoundingBox;
310
+ return [
311
+ [minx, miny],
312
+ [maxx, maxy]
313
+ ];
314
+ }
315
+
316
+ /** Loosely defined geospatial bounding box in unspecified CRS for quick content searches */
317
+ function extractWMSBoundingBoxes(xmlBoundingBoxes: any): WMSBoundingBox[] {
318
+ const xmlBoxes = getXMLArray(xmlBoundingBoxes);
319
+ return xmlBoxes.map((xmlBox) => extractWMSBoundingBox(xmlBox));
320
+ }
321
+
322
+ /** Loosely defined geospatial bounding box in unspecified CRS for quick content searches */
323
+ function extractWMSBoundingBox(xmlBoundingBox: any): WMSBoundingBox {
324
+ const {CRS, SRS, minx, miny, maxx, maxy, resx, resy} = xmlBoundingBox;
325
+ const boundingBox: WMSBoundingBox = {
326
+ // CRS in 1.3.0, SRS in 1.1.1
327
+ crs: CRS || SRS,
328
+ boundingBox: [
329
+ [getXMLFloat(minx) as number, getXMLFloat(miny) as number],
330
+ [getXMLFloat(maxx) as number, getXMLFloat(maxy) as number]
331
+ ]
332
+ };
333
+ if (resx) {
334
+ boundingBox.xResolution = resx;
335
+ }
336
+ if (resy) {
337
+ boundingBox.yResolution = resy;
2067
338
  }
2068
- if (xmlValue) {
2069
- return [xmlValue];
339
+ return boundingBox;
340
+ }
341
+
342
+ /** Traverse layers and inject missing props from parents */
343
+ function addInheritedLayerProps(layer: WMSLayer, parent: WMSLayer | null): void {
344
+ if (parent && parent.geographicBoundingBox && !layer.geographicBoundingBox) {
345
+ layer.geographicBoundingBox = [...parent.geographicBoundingBox];
346
+ }
347
+
348
+ if (parent && parent.crs && !layer.crs) {
349
+ layer.crs = [...parent.crs];
350
+ }
351
+
352
+ if (parent && parent.boundingBoxes && !layer.boundingBoxes) {
353
+ layer.boundingBoxes = [...parent.boundingBoxes];
354
+ }
355
+
356
+ // TODO inherit other elements
357
+
358
+ for (const subLayer of layer.layers || []) {
359
+ addInheritedLayerProps(subLayer, layer);
2070
360
  }
2071
- return [];
2072
361
  }