@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.
- package/dist/dist.min.js +359 -174
- package/dist/es5/csw-capabilities-loader.js +7 -11
- package/dist/es5/csw-capabilities-loader.js.map +1 -1
- package/dist/es5/csw-domain-loader.js +7 -10
- package/dist/es5/csw-domain-loader.js.map +1 -1
- package/dist/es5/csw-records-loader.js +7 -10
- package/dist/es5/csw-records-loader.js.map +1 -1
- package/dist/es5/gml-loader.js +7 -10
- package/dist/es5/gml-loader.js.map +1 -1
- package/dist/es5/index.js +0 -7
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lerc-loader.js +17 -22
- package/dist/es5/lerc-loader.js.map +1 -1
- package/dist/es5/lib/create-image-source.js +1 -2
- package/dist/es5/lib/create-image-source.js.map +1 -1
- package/dist/es5/lib/parsers/csw/parse-csw-capabilities.js.map +1 -1
- package/dist/es5/lib/parsers/csw/parse-csw-domain.js +1 -1
- package/dist/es5/lib/parsers/csw/parse-csw-domain.js.map +1 -1
- package/dist/es5/lib/parsers/csw/parse-csw-records.js +1 -2
- package/dist/es5/lib/parsers/csw/parse-csw-records.js.map +1 -1
- package/dist/es5/lib/parsers/csw/parse-exception-report.js +0 -2
- package/dist/es5/lib/parsers/csw/parse-exception-report.js.map +1 -1
- package/dist/es5/lib/parsers/gml/deep-strict-equal.js +0 -8
- package/dist/es5/lib/parsers/gml/deep-strict-equal.js.map +1 -1
- package/dist/es5/lib/parsers/gml/parse-gml.js +1 -13
- package/dist/es5/lib/parsers/gml/parse-gml.js.map +1 -1
- package/dist/es5/lib/parsers/wms/parse-wms-capabilities.js +197 -54
- package/dist/es5/lib/parsers/wms/parse-wms-capabilities.js.map +1 -1
- package/dist/es5/lib/parsers/wms/parse-wms-error.js +0 -1
- package/dist/es5/lib/parsers/wms/parse-wms-error.js.map +1 -1
- package/dist/es5/lib/parsers/wms/parse-wms-features.js +0 -1
- package/dist/es5/lib/parsers/wms/parse-wms-features.js.map +1 -1
- package/dist/es5/lib/parsers/wms/parse-wms-layer-description.js +0 -1
- package/dist/es5/lib/parsers/wms/parse-wms-layer-description.js.map +1 -1
- package/dist/es5/lib/parsers/xml/parse-xml-helpers.js +67 -0
- package/dist/es5/lib/parsers/xml/parse-xml-helpers.js.map +1 -0
- package/dist/es5/lib/services/arcgis/arcgis-image-service.js +35 -54
- package/dist/es5/lib/services/arcgis/arcgis-image-service.js.map +1 -1
- package/dist/es5/lib/services/arcgis/arcgis-server.js +50 -54
- package/dist/es5/lib/services/arcgis/arcgis-server.js.map +1 -1
- package/dist/es5/lib/services/generic/image-service.js +27 -36
- package/dist/es5/lib/services/generic/image-service.js.map +1 -1
- package/dist/es5/lib/services/ogc/csw-service.js +161 -186
- package/dist/es5/lib/services/ogc/csw-service.js.map +1 -1
- package/dist/es5/lib/services/ogc/wms-service.js +283 -245
- package/dist/es5/lib/services/ogc/wms-service.js.map +1 -1
- package/dist/es5/lib/sources/data-source.js +1 -6
- package/dist/es5/lib/sources/data-source.js.map +1 -1
- package/dist/es5/lib/sources/image-source.js.map +1 -1
- package/dist/es5/lib/sources/tile-source.js.map +1 -1
- package/dist/es5/lib/sources/utils/utils.js +0 -4
- package/dist/es5/lib/sources/utils/utils.js.map +1 -1
- package/dist/es5/wip/arcgis-feature-service.js +2 -7
- package/dist/es5/wip/arcgis-feature-service.js.map +1 -1
- package/dist/es5/wip/data-source.js +0 -2
- package/dist/es5/wip/lib/wcs/parse-wcs-capabilities.js.map +1 -1
- package/dist/es5/wip/lib/wfs/parse-wfs-capabilities.js.map +1 -1
- package/dist/es5/wip/lib/wmts/parse-wmts-capabilities.js.map +1 -1
- package/dist/es5/wip/wcs-capabilities-loader.js +7 -10
- package/dist/es5/wip/wcs-capabilities-loader.js.map +1 -1
- package/dist/es5/wip/wfs-capabilities-loader.js +7 -10
- package/dist/es5/wip/wfs-capabilities-loader.js.map +1 -1
- package/dist/es5/wip/wms-feature-info-loader.js +6 -8
- package/dist/es5/wip/wms-feature-info-loader.js.map +1 -1
- package/dist/es5/wip/wms-layer-description-loader.js +6 -8
- package/dist/es5/wip/wms-layer-description-loader.js.map +1 -1
- package/dist/es5/wip/wmts-capabilities-loader.js +7 -16
- package/dist/es5/wip/wmts-capabilities-loader.js.map +1 -1
- package/dist/es5/wms-capabilities-loader.js +8 -12
- package/dist/es5/wms-capabilities-loader.js.map +1 -1
- package/dist/es5/wms-error-loader.js +7 -9
- package/dist/es5/wms-error-loader.js.map +1 -1
- package/dist/esm/bundle.js +0 -2
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/csw-capabilities-loader.js +1 -5
- package/dist/esm/csw-capabilities-loader.js.map +1 -1
- package/dist/esm/csw-domain-loader.js +1 -4
- package/dist/esm/csw-domain-loader.js.map +1 -1
- package/dist/esm/csw-records-loader.js +1 -4
- package/dist/esm/csw-records-loader.js.map +1 -1
- package/dist/esm/gml-loader.js +1 -4
- package/dist/esm/gml-loader.js.map +1 -1
- package/dist/esm/index.js +0 -11
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lerc-loader.js +1 -4
- package/dist/esm/lerc-loader.js.map +1 -1
- package/dist/esm/lib/create-image-source.js +0 -3
- package/dist/esm/lib/create-image-source.js.map +1 -1
- package/dist/esm/lib/parsers/csw/parse-csw-capabilities.js +0 -3
- package/dist/esm/lib/parsers/csw/parse-csw-capabilities.js.map +1 -1
- package/dist/esm/lib/parsers/csw/parse-csw-domain.js +0 -3
- package/dist/esm/lib/parsers/csw/parse-csw-domain.js.map +1 -1
- package/dist/esm/lib/parsers/csw/parse-csw-records.js +0 -3
- package/dist/esm/lib/parsers/csw/parse-csw-records.js.map +1 -1
- package/dist/esm/lib/parsers/csw/parse-exception-report.js +0 -3
- package/dist/esm/lib/parsers/csw/parse-exception-report.js.map +1 -1
- package/dist/esm/lib/parsers/gml/deep-strict-equal.js +0 -9
- package/dist/esm/lib/parsers/gml/deep-strict-equal.js.map +1 -1
- package/dist/esm/lib/parsers/gml/parse-gml.js +0 -14
- package/dist/esm/lib/parsers/gml/parse-gml.js.map +1 -1
- package/dist/esm/lib/parsers/wms/parse-wms-capabilities.js +151 -42
- package/dist/esm/lib/parsers/wms/parse-wms-capabilities.js.map +1 -1
- package/dist/esm/lib/parsers/wms/parse-wms-error.js +0 -3
- package/dist/esm/lib/parsers/wms/parse-wms-error.js.map +1 -1
- package/dist/esm/lib/parsers/wms/parse-wms-features.js +0 -3
- package/dist/esm/lib/parsers/wms/parse-wms-features.js.map +1 -1
- package/dist/esm/lib/parsers/wms/parse-wms-layer-description.js +0 -3
- package/dist/esm/lib/parsers/wms/parse-wms-layer-description.js.map +1 -1
- package/dist/esm/lib/parsers/xml/parse-xml-helpers.js +53 -0
- package/dist/esm/lib/parsers/xml/parse-xml-helpers.js.map +1 -0
- package/dist/esm/lib/services/arcgis/arcgis-image-service.js +0 -9
- package/dist/esm/lib/services/arcgis/arcgis-image-service.js.map +1 -1
- package/dist/esm/lib/services/arcgis/arcgis-server.js +0 -2
- package/dist/esm/lib/services/arcgis/arcgis-server.js.map +1 -1
- package/dist/esm/lib/services/generic/image-service.js +0 -5
- package/dist/esm/lib/services/generic/image-service.js.map +1 -1
- package/dist/esm/lib/services/ogc/csw-service.js +0 -11
- package/dist/esm/lib/services/ogc/csw-service.js.map +1 -1
- package/dist/esm/lib/services/ogc/wms-service.js +96 -87
- package/dist/esm/lib/services/ogc/wms-service.js.map +1 -1
- package/dist/esm/lib/sources/data-source.js +0 -6
- package/dist/esm/lib/sources/data-source.js.map +1 -1
- package/dist/esm/lib/sources/image-source.js +0 -3
- package/dist/esm/lib/sources/image-source.js.map +1 -1
- package/dist/esm/lib/sources/tile-source.js +0 -3
- package/dist/esm/lib/sources/tile-source.js.map +1 -1
- package/dist/esm/lib/sources/utils/utils.js +0 -5
- package/dist/esm/lib/sources/utils/utils.js.map +1 -1
- package/dist/esm/wip/arcgis-feature-service.js +0 -3
- package/dist/esm/wip/arcgis-feature-service.js.map +1 -1
- package/dist/esm/wip/lib/wcs/parse-wcs-capabilities.js +0 -3
- package/dist/esm/wip/lib/wcs/parse-wcs-capabilities.js.map +1 -1
- package/dist/esm/wip/lib/wfs/parse-wfs-capabilities.js +0 -3
- package/dist/esm/wip/lib/wfs/parse-wfs-capabilities.js.map +1 -1
- package/dist/esm/wip/lib/wmts/parse-wmts-capabilities.js +0 -3
- package/dist/esm/wip/lib/wmts/parse-wmts-capabilities.js.map +1 -1
- package/dist/esm/wip/wcs-capabilities-loader.js +1 -4
- package/dist/esm/wip/wcs-capabilities-loader.js.map +1 -1
- package/dist/esm/wip/wfs-capabilities-loader.js +1 -4
- package/dist/esm/wip/wfs-capabilities-loader.js.map +1 -1
- package/dist/esm/wip/wms-feature-info-loader.js +0 -2
- package/dist/esm/wip/wms-feature-info-loader.js.map +1 -1
- package/dist/esm/wip/wms-layer-description-loader.js +0 -2
- package/dist/esm/wip/wms-layer-description-loader.js.map +1 -1
- package/dist/esm/wip/wmts-capabilities-loader.js +1 -6
- package/dist/esm/wip/wmts-capabilities-loader.js.map +1 -1
- package/dist/esm/wms-capabilities-loader.js +3 -7
- package/dist/esm/wms-capabilities-loader.js.map +1 -1
- package/dist/esm/wms-error-loader.js +1 -4
- package/dist/esm/wms-error-loader.js.map +1 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -5
- package/dist/lib/parsers/wms/parse-wms-capabilities.d.ts +78 -62
- package/dist/lib/parsers/wms/parse-wms-capabilities.d.ts.map +1 -1
- package/dist/lib/parsers/wms/parse-wms-capabilities.js +165 -1935
- package/dist/lib/parsers/xml/parse-xml-helpers.d.ts +11 -0
- package/dist/lib/parsers/xml/parse-xml-helpers.d.ts.map +1 -0
- package/dist/lib/parsers/xml/parse-xml-helpers.js +68 -0
- package/dist/lib/services/arcgis/arcgis-image-service.js +1 -1
- package/dist/lib/services/generic/image-service.js +1 -1
- package/dist/lib/services/ogc/csw-service.d.ts +1 -1
- package/dist/lib/services/ogc/csw-service.d.ts.map +1 -1
- package/dist/lib/services/ogc/csw-service.js +1 -1
- package/dist/lib/services/ogc/wms-service.d.ts +63 -58
- package/dist/lib/services/ogc/wms-service.d.ts.map +1 -1
- package/dist/lib/services/ogc/wms-service.js +106 -71
- package/dist/lib/sources/image-source.d.ts +3 -9
- package/dist/lib/sources/image-source.d.ts.map +1 -1
- package/dist/wip/wmts-capabilities-loader.d.ts +3 -4
- package/dist/wip/wmts-capabilities-loader.d.ts.map +1 -1
- package/dist/wip/wmts-capabilities-loader.js +1 -0
- package/dist/wms-capabilities-loader.d.ts +6 -1
- package/dist/wms-capabilities-loader.d.ts.map +1 -1
- package/dist/wms-capabilities-loader.js +2 -2
- package/package.json +6 -6
- package/src/index.ts +3 -4
- package/src/lib/parsers/wms/parse-wms-capabilities.ts +293 -2004
- package/src/lib/parsers/xml/parse-xml-helpers.ts +65 -0
- package/src/lib/services/ogc/csw-service.ts +1 -1
- package/src/lib/services/ogc/wms-service.ts +169 -109
- package/src/lib/sources/image-source.ts +3 -9
- package/src/wip/wmts-capabilities-loader.ts +2 -2
- package/src/wms-capabilities-loader.ts +9 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-wms-capabilities.js","names":["parseWMSCapabilities","text","options","parsedXML","XMLLoader","parseTextSync","xmlCapabilities","WMT_MS_Capabilities","WMS_Capabilities","extractCapabilities","xml","capabilities","name","Service","Name","title","Title","keywords","requests","layer","extractLayer","Capability","Layer","raw","KeywordList","Keyword","keyword","push","Object","entries","Request","xmlRequest","extractRequest","format","Format","mimeTypes","Array","isArray","xmlLayer","srs","SRS","layers","xmlLayers","getXMLArray","xmlSubLayer","xmlValue"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-capabilities.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\n\n/** All capabilities of a WMS service - response to a WMS `GetCapabilities` data structure extracted from XML */\nexport type WMSCapabilities = {\n name: string;\n title?: string;\n abstract?: string;\n keywords: string[];\n layer: {\n name: string;\n title?: string;\n srs?: string[];\n boundingBox?: [number, number, number, number];\n layers: WMSLayer[];\n };\n requests: Record<string, WMSRequest>;\n raw: Record<string, unknown>;\n};\n\nexport type WMSLayer = {\n name: string;\n title?: string;\n srs?: string[];\n boundingBox?: [number, number, number, number];\n layers: WMSLayer[];\n};\n\nexport type WMSRequest = {\n name: string;\n mimeTypes: string[];\n};\n\n/**\n * <EX_GeographicBoundingBox>\n * <westBoundLongitude>-180</westBoundLongitude>\n * <eastBoundLongitude>180</eastBoundLongitude>\n * <southBoundLatitude>-65</southBoundLatitude>\n * <northBoundLatitude>75</northBoundLatitude>\n * </EX_GeographicBoundingBox>\n * <BoundingBox CRS=\"EPSG:4326\"\n * minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n */\nexport type Layer = {\n name: string; // e.g. DMSP-Global-Composites-Version-4\n title: string; // e.g. DMSP-Global-Composites-Version-4</Title>\n abstract?: string; // DMSP-Global-Composites-Version-4</Abstract>\n crs: string; // e.g. EPSG:4326</CRS>\n queryable?: boolean;\n opaque?: boolean;\n cascaded?: boolean;\n geographicBoundingBox: number[];\n boundingBox: number[];\n boundingBoxCRS: string;\n layers: Layer[];\n};\n\n/**\n * <Style>\n * <Name>default</Name>\n * <Title>default</Title>\n * <LegendURL width=\"89\" height=\"21\">\n * <Format>image/png</Format>\n * <OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:type=\"simple\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=countries&format=image/png&STYLE=default\"/>\n * </LegendURL>\n * </Style>\n */\nexport type Style = {\n name: string; // e.g. DMSP-Global-Composites-Version-4\n title: string; // e.g. DMSP-Global-Composites-Version-4</Title>\n legendUrl?: {\n width: number;\n height: number;\n format: string;\n onlineResource: string;\n };\n};\n\n// export type Capability = GetCapabilities | GetMap;\n\nexport type WMSService = {\n rawData: unknown;\n name: string;\n title: string;\n onlineResource?: string;\n contactInformation?: string;\n maxWidth?: number;\n maxHeight?: number;\n capabilities: {\n // getCapabilities: GetCapabilities;\n // getMap: GetMap;\n // getFeatureInfo?: GetFeatureInfo;\n };\n\n untypedData: unknown; // The raw, untyped JSON converted from XML\n};\n\n/* \n<Capability>\n <Request>\n <GetCapabilities>\n <Format>text/xml</Format>\n <DCPType>\n <HTTP>\n <Get><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Get>\n <Post><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Post>\n </HTTP>\n </DCPType>\n </GetCapabilities>\n <GetMap>\n <Format>image/png</Format>\n <Format>image/tiff</Format>\n <Format>image/jpeg</Format>\n <Format>image/png; mode=8bit</Format>\n <Format>application/x-pdf</Format>\n <Format>image/svg+xml</Format>\n <DCPType>\n <HTTP>\n <Get><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Get>\n <Post><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Post>\n </HTTP>\n </DCPType>\n </GetMap>\n <GetFeatureInfo>\n <Format>text/plain</Format>\n <Format>application/vnd.ogc.gml</Format>\n <DCPType>\n <HTTP>\n <Get><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Get>\n <Post><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Post>\n </HTTP>\n </DCPType>\n </GetFeatureInfo>\n <sld:DescribeLayer>\n <Format>text/xml</Format>\n <DCPType>\n <HTTP>\n <Get><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Get>\n <Post><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Post>\n </HTTP>\n </DCPType>\n </sld:DescribeLayer>\n <sld:GetLegendGraphic>\n <Format>image/png</Format>\n <Format>image/jpeg</Format>\n <Format>image/png; mode=8bit</Format>\n <DCPType>\n <HTTP>\n <Get><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Get>\n <Post><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Post>\n </HTTP>\n </DCPType>\n </sld:GetLegendGraphic>\n <ms:GetStyles>\n <Format>text/xml</Format>\n <DCPType>\n <HTTP>\n <Get><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Get>\n <Post><OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?\"/></Post>\n </HTTP>\n </DCPType>\n </ms:GetStyles>\n </Request>\n <Exception>\n <Format>XML</Format>\n <Format>INIMAGE</Format>\n <Format>BLANK</Format>\n </Exception>\n <sld:UserDefinedSymbolization SupportSLD=\"1\" UserLayer=\"0\" UserStyle=\"1\" RemoteWFS=\"0\" InlineFeature=\"0\" RemoteWCS=\"0\"/>\n <Layer>\n <Name>DMSP-Global-Composites-Version-4</Name>\n <Title>DMSP-Global-Composites-Version-4</Title>\n <Abstract>DMSP-Global-Composites-Version-4</Abstract>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>countries</Name>\n <Title>Countries</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-90</southBoundLatitude>\n <northBoundLatitude>83.6236</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-90\" miny=\"-180\" maxx=\"83.6236\" maxy=\"180\" />\n <Style>\n <Name>default</Name>\n <Title>default</Title>\n <LegendURL width=\"89\" height=\"21\">\n <Format>image/png</Format>\n <OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:type=\"simple\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=countries&format=image/png&STYLE=default\"/>\n </LegendURL>\n </Style>\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>adminboundaries</Name>\n <Title>Administrative Boundaries</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-90</southBoundLatitude>\n <northBoundLatitude>83.6236</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-90\" miny=\"-180\" maxx=\"83.6236\" maxy=\"180\" />\n <Style>\n <Name>default</Name>\n <Title>default</Title>\n <LegendURL width=\"65\" height=\"21\">\n <Format>image/png</Format>\n <OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:type=\"simple\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=adminboundaries&format=image/png&STYLE=default\"/>\n </LegendURL>\n </Style>\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>eez</Name>\n <Title>EEZ Boundaries</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-179.999</westBoundLongitude>\n <eastBoundLongitude>179.999</eastBoundLongitude>\n <southBoundLatitude>-85.4703</southBoundLatitude>\n <northBoundLatitude>87.0239</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-85.4703\" miny=\"-179.999\" maxx=\"87.0239\" maxy=\"179.999\" />\n <Style>\n <Name>default</Name>\n <Title>default</Title>\n <LegendURL width=\"53\" height=\"21\">\n <Format>image/png</Format>\n <OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:type=\"simple\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=eez&format=image/png&STYLE=default\"/>\n </LegendURL>\n </Style>\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>cities</Name>\n <Title>Cities</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-176.152</westBoundLongitude>\n <eastBoundLongitude>179.222</eastBoundLongitude>\n <southBoundLatitude>-54.792</southBoundLatitude>\n <northBoundLatitude>78.2</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-54.792\" miny=\"-176.152\" maxx=\"78.2\" maxy=\"179.222\" />\n <Style>\n <Name>default</Name>\n <Title>default</Title>\n <LegendURL width=\"71\" height=\"21\">\n <Format>image/png</Format>\n <OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:type=\"simple\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=cities&format=image/png&STYLE=default\"/>\n </LegendURL>\n </Style>\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>citieslabeled</Name>\n <Title>Cities With Labels</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-176.152</westBoundLongitude>\n <eastBoundLongitude>179.222</eastBoundLongitude>\n <southBoundLatitude>-54.792</southBoundLatitude>\n <northBoundLatitude>78.2</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-54.792\" miny=\"-176.152\" maxx=\"78.2\" maxy=\"179.222\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>land</Name>\n <Title>Land Sea Mask</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-90</southBoundLatitude>\n <northBoundLatitude>83.6236</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-90\" miny=\"-180\" maxx=\"83.6236\" maxy=\"180\" />\n <Style>\n <Name>default</Name>\n <Title>default</Title>\n <LegendURL width=\"59\" height=\"21\">\n <Format>image/png</Format>\n <OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:type=\"simple\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=land&format=image/png&STYLE=default\"/>\n </LegendURL>\n </Style>\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>LandSeaMask</Name>\n <Title>LandSeaMask</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-90</southBoundLatitude>\n <northBoundLatitude>90</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-90\" miny=\"-180\" maxx=\"90\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>Rivers</Name>\n <Title>Rivers</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-164.887</westBoundLongitude>\n <eastBoundLongitude>160.764</eastBoundLongitude>\n <southBoundLatitude>-36.9694</southBoundLatitude>\n <northBoundLatitude>71.3925</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-36.9694\" miny=\"-164.887\" maxx=\"71.3925\" maxy=\"160.764\" />\n <Style>\n <Name>default</Name>\n <Title>default</Title>\n <LegendURL width=\"71\" height=\"21\">\n <Format>image/png</Format>\n <OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:type=\"simple\" xlink:href=\"http://mapserver.ngdc.noaa.gov/cgi-bin/public/gcv4/?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=Rivers&format=image/png&STYLE=default\"/>\n </LegendURL>\n </Style>\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101992.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F101992.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101992.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F101992.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101992.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F101992.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101992.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F101992.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101993.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F101993.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101993.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F101993.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101993.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F101993.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101993.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F101993.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101994.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F101994.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101994.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F101994.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101994.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F101994.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F101994.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F101994.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121994.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F121994.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121994.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F121994.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121994.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F121994.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121994.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F121994.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121995.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F121995.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121995.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F121995.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121995.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F121995.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121995.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F121995.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121996.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F121996.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121996.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F121996.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121996.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F121996.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121996.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F121996.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121997.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F121997.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121997.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F121997.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121997.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F121997.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121997.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F121997.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121998.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F121998.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121998.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F121998.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121998.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F121998.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121998.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F121998.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121999.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F121999.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121999.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F121999.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121999.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F121999.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F121999.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F121999.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141997.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F141997.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141997.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F141997.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141997.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F141997.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141997.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F141997.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141998.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F141998.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141998.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F141998.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141998.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F141998.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141998.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F141998.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141999.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F141999.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141999.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F141999.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141999.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F141999.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F141999.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F141999.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142000.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F142000.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142000.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F142000.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142000.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F142000.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142000.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F142000.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142001.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F142001.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142001.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F142001.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142001.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F142001.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142001.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F142001.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142002.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F142002.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142002.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F142002.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142002.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F142002.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142002.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F142002.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142003.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F142003.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142003.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F142003.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142003.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F142003.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F142003.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F142003.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152000.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F152000.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152000.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F152000.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152000.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F152000.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152000.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F152000.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152001.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F152001.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152001.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F152001.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152001.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F152001.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152001.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F152001.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152002.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F152002.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152002.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F152002.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152002.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F152002.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152002.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F152002.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152003.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F152003.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152003.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F152003.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152003.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F152003.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152003.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F152003.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152004.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F152004.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152004.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F152004.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152004.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F152004.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152004.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F152004.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152005.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F152005.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152005.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F152005.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152005.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F152005.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152005.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F152005.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152006.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F152006.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152006.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F152006.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152006.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F152006.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152006.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F152006.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152007.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F152007.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152007.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F152007.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152007.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F152007.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152007.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F152007.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152008.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F152008.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152008.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F152008.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152008.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F152008.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F152008.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F152008.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162004.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F162004.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162004.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F162004.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162004.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F162004.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162004.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F162004.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162005.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F162005.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162005.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F162005.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162005.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F162005.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162005.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F162005.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162006.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F162006.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162006.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F162006.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162006.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F162006.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162006.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F162006.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162007.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F162007.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162007.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F162007.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162007.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F162007.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162007.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F162007.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162008.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F162008.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162008.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F162008.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162008.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F162008.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162008.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F162008.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162009.v4b.avg_lights_x_pct.lzw.tif</Name>\n <Title>F162009.v4b.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162009.v4b_web.avg_vis.lzw.tif</Name>\n <Title>F162009.v4b_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162009.v4b_web.cf_cvg.lzw.tif</Name>\n <Title>F162009.v4b_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F162009.v4b_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F162009.v4b_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F182010.v4c.avg_lights_x_pct.lzw.tif</Name>\n <Title>F182010.v4c.avg_lights_x_pct.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F182010.v4c_web.avg_vis.lzw.tif</Name>\n <Title>F182010.v4c_web.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F182010.v4c_web.cf_cvg.lzw.tif</Name>\n <Title>F182010.v4c_web.cf_cvg.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n <Layer queryable=\"0\" opaque=\"0\" cascaded=\"0\">\n <Name>F182010.v4c_web.stable_lights.avg_vis.lzw.tif</Name>\n <Title>F182010.v4c_web.stable_lights.avg_vis.lzw.tif</Title>\n <CRS>EPSG:4326</CRS>\n <EX_GeographicBoundingBox>\n <westBoundLongitude>-180</westBoundLongitude>\n <eastBoundLongitude>180</eastBoundLongitude>\n <southBoundLatitude>-65</southBoundLatitude>\n <northBoundLatitude>75</northBoundLatitude>\n </EX_GeographicBoundingBox>\n <BoundingBox CRS=\"EPSG:4326\"\n minx=\"-65\" miny=\"-180\" maxx=\"75\" maxy=\"180\" />\n </Layer>\n </Layer>\n</Capability>\n</WMS_Capabilities>\n*/\n\n/**\n * Parses a typed data structure from raw XML for `GetCapabilities` response\n * @note Error handlings is fairly weak\n */\nexport function parseWMSCapabilities(text: string, options): WMSCapabilities {\n const parsedXML = XMLLoader.parseTextSync(text, options);\n const xmlCapabilities: any =\n parsedXML.WMT_MS_Capabilities || parsedXML.WMS_Capabilities || parsedXML;\n return extractCapabilities(xmlCapabilities);\n}\n\n/** Extract typed capability data from XML */\nfunction extractCapabilities(xml: any): WMSCapabilities {\n const capabilities: WMSCapabilities = {\n name: xml.Service?.Name || 'unnamed',\n title: xml.Service?.Title,\n keywords: [],\n requests: {},\n layer: extractLayer(xml.Capability?.Layer),\n raw: xml\n };\n\n for (const keyword of xml.Service?.KeywordList?.Keyword || []) {\n capabilities.keywords.push(keyword);\n }\n\n for (const [name, xmlRequest] of Object.entries(xml.Capability?.Request || {})) {\n capabilities.requests[name] = extractRequest(name, xmlRequest);\n }\n\n return capabilities;\n}\n\n/** Extract typed request data from XML */\nfunction extractRequest(name: string, xmlRequest: any): WMSRequest {\n const format: string | string[] = xmlRequest?.Format;\n const mimeTypes: string[] = Array.isArray(format) ? format : [format];\n return {name, mimeTypes};\n}\n\n/** Extract request data */\nfunction extractLayer(xmlLayer: any): WMSLayer {\n const layer: WMSLayer = {\n name: xmlLayer?.Name,\n title: xmlLayer?.Title,\n srs: xmlLayer?.SRS || [],\n layers: []\n };\n\n // Single layer is not represented as array in XML\n const xmlLayers = getXMLArray(xmlLayer?.Layer);\n\n for (const xmlSubLayer of xmlLayers) {\n layer.layers?.push(extractLayer(xmlSubLayer));\n }\n\n return layer;\n}\n\nfunction getXMLArray(xmlValue: any) {\n if (Array.isArray(xmlValue)) {\n return xmlValue;\n }\n if (xmlValue) {\n return [xmlValue];\n }\n return [];\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parse-wms-capabilities.js","names":["_xml","require","_parseXmlHelpers","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","parseWMSCapabilities","xmlText","options","parsedXML","XMLLoader","parseTextSync","xmlCapabilities","WMT_MS_Capabilities","WMS_Capabilities","capabilities","extractCapabilities","inheritedLayerProps","_iterator","layers","_step","layer","addInheritedLayerProps","includeRawData","raw","includeXMLText","xml","_xml$Service","_xml$Service2","_xml$Service3","_xml$Service4","_xml$Service5","_xml$Service6","_xml$Service6$Keyword","_xml$Service7","_xml$Service8","_xml$Service9","_xml$Service10","_xml$Service11","_xml$Service12","_xml$Service13","_xml$Capability","_xml$Capability2","version","String","Service","Name","title","Title","undefined","abstract","Abstract","keywords","getXMLStringArray","KeywordList","Keyword","fees","Fees","JSON","stringify","accessConstraints","AccessConstraints","layerLimit","getXMLInteger","LayerLimit","maxWidth","maxHeight","requests","extractRequests","Capability","Request","exceptions","extractExceptions","Exception","xmlLayers","getXMLArray","Layer","_iterator2","_step2","xmlSubLayer","push","extractLayer","_i","_Object$entries","entries","_Object$entries$_i","_slicedToArray2","default","key","xmlRequests","_iterator3","_step3","_step3$value","xmlRequest","mimeTypes","Format","xmlException","xmlExceptionFormats","xmlLayer","_xmlLayer$KeywordList","crs","CRS","SRS","every","_","geographicBoundingBox","EX_GeographicBoundingBox","extractEXBoundingBox","LatLonBoundingBox","extractLatLonBoundingBox","boundingBoxes","BoundingBox","extractWMSBoundingBoxes","opaque","getXMLBoolean","cascaded","queryable","_iterator4","_step4","_i2","_Object$entries2","_Object$entries2$_i","xmlBoundingBox","w","westBoundLongitude","northBoundLatitude","eastBoundLongitude","southBoundLatitude","minx","miny","maxx","maxy","xmlBoundingBoxes","xmlBoxes","map","xmlBox","extractWMSBoundingBox","resx","resy","boundingBox","getXMLFloat","xResolution","yResolution","parent","_toConsumableArray2","_iterator5","_step5","subLayer"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-capabilities.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\nimport {\n getXMLArray,\n getXMLStringArray,\n getXMLInteger,\n getXMLFloat,\n getXMLBoolean\n} from '../xml/parse-xml-helpers';\n\n/** All capabilities of a WMS service - response to a WMS `GetCapabilities` data structure extracted from XML */\nexport type WMSCapabilities = {\n /** Version of the WMS service */\n version?: string; // '1.3.0' | '1.1.1' | '1.1.0' | '1.0.0'\n /** A short name for the service */\n name: string;\n /** A human readable name for the service */\n title?: string;\n /** A more extensive description of the service */\n abstract?: string;\n /** A set of keywords e.g. for searching services */\n keywords: string[];\n /** A field of unspecified format, if present describes any access constraints required to use the service. */\n accessConstraints?: string;\n /** A field of unspecified format, if present describes any fees associated with the use of the service */\n fees?: string;\n /** If present, the max number of layers that can be rendered by the service */\n layerLimit?: number;\n /** If present, the widest image that can be rendered by the service */\n maxWidth?: number;\n /** If present, the tallest image that can be rendered by the service */\n maxHeight?: number;\n /** Hierarchical list of layers. */\n layers: WMSLayer[];\n /** A map with information about supported WMS requests. If a record is present, the request is supported by the service */\n requests: Record<string, WMSRequest>;\n /** Information about any exceptions that the service will report (HTTP status != 2xx) */\n exceptions?: WMSExceptions;\n /** Only if `options.raw`: raw untyped JSON parsed from XML. Can include information not extracted in the typed response. */\n raw?: Record<string, unknown>;\n /** Only if `options.xml`, the unparsed XML string can be requested */\n xml?: string;\n};\n\n/**\n * Metadata about a layer\n * Layers inherit many properties from their parent layers, see description of individual props for details.\n * @see https://www.ogc.org/standard/wms/ 7.2.4.6\n */\nexport type WMSLayer = {\n /** The title is a human readable name. It is mandatory on each layer. Not inherited. */\n title: string;\n /** A layer is renderable if it has a name. A named parent layer will render all its sublayers. Not inherited. */\n name?: string;\n /** A narrative description of the map layer. */\n abstract?: string;\n /** A set of keywords e.g. for searching layers */\n keywords: string[];\n /** layer limits in unspecified CRS:84-like lng/lat, for quick access w/o CRS calculations. Defined or inherited. */\n geographicBoundingBox?: [min: [x: number, y: number], max: [x: number, y: number]];\n /** Supported CRS. Either defined or inherited. */\n crs?: string[];\n /** Bounding boxes in specific CRS:es */\n boundingBoxes?: WMSBoundingBox[];\n\n // minScale: number;\n // maxScale: number;\n // dimensions: ?? 7.2.4.6.10\n // MetadataURL\n // Attribution\n // Identifier and AuthorityURL\n // FeatureListURL\n // DataURL\n\n /** Whether queries can be performed on the layer */\n queryable?: boolean;\n /** `false` if layer has significant no-data areas that the client can display as transparent. */\n opaque?: boolean;\n /** WMS cascading allows server to expose layers coming from other WMS servers as if they were local layers */\n cascaded?: boolean;\n // noSubsets: boolean\n // fixedWith: number\n // fixedHeight: number\n\n /** A list of styles. @note not yet supported by WMSCapabilitiesLoader */\n styles?: unknown[];\n\n /** Sublayers - these inherit crs and boundingBox) if not overridden) */\n layers?: WMSLayer[];\n};\n\n/**\n * A bounding box specifies the coordinate range for data in the layer.\n * No data is available outside the bounding box.\n */\nexport type WMSBoundingBox = {\n /** CRS indicates the Layer CRS that applies to this bounding box. */\n crs: string;\n /** `[[w, s], [e, n]]`, indicates the limits of the bounding box using the axis units and order of the specified CRS. */\n boundingBox: [min: [x: number, y: number], max: [x: number, y: number]];\n /** Spatial horizontal resolution of data in same units as bounding box */\n xResolution?: number;\n /** Spatial vertical resolution of data in same units as bounding box */\n yResolution?: number;\n};\n\n/** Metadata about a supported WMS request */\nexport type WMSRequest = {\n /** MIMEtypes that can be returned by this request. */\n mimeTypes: string[];\n};\n\nexport type WMSExceptions = {\n /** MIME types for exception response payloads. */\n mimeTypes: string[];\n};\n\nexport type parseWMSCapabilitiesOptions = {\n /** Add inherited layer information to sub layers */\n inheritedLayerProps?: boolean;\n /** Include the \"raw\" JSON (parsed but untyped, unprocessed XML). May contain additional fields */\n includeRawData?: boolean;\n /** Include the original XML document text. May contain additional information. */\n includeXMLText?: boolean;\n /** @deprecated Use includeRawData` */\n raw?: boolean;\n\n // xml options are passed through to xml loader\n};\n\n/**\n * Parses a typed data structure from raw XML for `GetCapabilities` response\n * @note Error handlings is fairly weak\n */\nexport function parseWMSCapabilities(\n xmlText: string,\n options?: parseWMSCapabilitiesOptions\n): WMSCapabilities {\n const parsedXML = XMLLoader.parseTextSync(xmlText, options);\n const xmlCapabilities: any =\n parsedXML.WMT_MS_Capabilities || parsedXML.WMS_Capabilities || parsedXML;\n const capabilities = extractCapabilities(xmlCapabilities);\n // In case the processed, normalized capabilities do not contain everything,\n // the user can get the parsed XML structure.\n if (options?.inheritedLayerProps) {\n // Traverse layers and inject missing props from parents\n for (const layer of capabilities.layers) {\n addInheritedLayerProps(layer, null);\n }\n // Not yet implemented\n }\n\n if (options?.includeRawData || options?.raw) {\n capabilities.raw = xmlCapabilities;\n }\n\n if (options?.includeXMLText) {\n capabilities.xml = xmlText;\n }\n\n return capabilities;\n}\n\n/** Extract typed capability data from XML */\nfunction extractCapabilities(xml: any): WMSCapabilities {\n const capabilities: WMSCapabilities = {\n version: String(xml.version || ''),\n name: String(xml.Service?.Name || 'unnamed'),\n title: xml.Service?.Title ? String(xml.Service?.Title) : undefined,\n abstract: xml.Service?.Abstract ? String(xml.Service?.Abstract) : undefined,\n keywords: getXMLStringArray(xml.Service?.KeywordList?.Keyword),\n fees: xml.Service?.Fees ? JSON.stringify(xml.Service?.Fees) : undefined,\n accessConstraints: xml.Service?.AccessConstraints\n ? JSON.stringify(xml.Service?.AccessConstraints)\n : undefined,\n layerLimit: getXMLInteger(xml.Service?.LayerLimit),\n maxWidth: getXMLInteger(xml.Service?.maxWidth),\n maxHeight: getXMLInteger(xml.Service?.maxHeight),\n layers: [],\n requests: extractRequests(xml.Capability?.Request),\n exceptions: extractExceptions(xml.Exception)\n // contact field is a mess of largely irrelevant information, put it last\n // contact: xml.Service?.Contact ? JSON.stringify(xml.Service?.Contact) : undefined,\n };\n\n // LAYERS\n const xmlLayers = getXMLArray(xml.Capability?.Layer);\n for (const xmlSubLayer of xmlLayers) {\n capabilities.layers.push(extractLayer(xmlSubLayer));\n }\n\n // Clean up object\n for (const [key, value] of Object.entries(capabilities)) {\n if (value === undefined) {\n delete capabilities[key];\n }\n }\n\n return capabilities;\n}\n\n/** Extract typed request metadata from XML requests field */\nfunction extractRequests(xmlRequests: any): Record<string, WMSRequest> {\n const requests: Record<string, WMSRequest> = {};\n for (const [name, xmlRequest] of Object.entries(xmlRequests || {}) as any) {\n const mimeTypes = getXMLStringArray(xmlRequest?.Format);\n requests[name] = {mimeTypes};\n }\n return requests;\n}\n\nfunction extractExceptions(xmlException: any): WMSExceptions | undefined {\n const xmlExceptionFormats = getXMLArray(xmlException?.Format);\n if (xmlExceptionFormats.length > 0) {\n return {\n mimeTypes: getXMLStringArray(xmlException)\n };\n }\n return undefined;\n}\n\n/** Extract request data */\n// eslint-disable-next-line complexity, max-statements\nfunction extractLayer(xmlLayer: any): WMSLayer {\n const layer: WMSLayer = {\n // All layers must have a title\n title: String(xmlLayer?.Title || ''),\n // Name is required only if renderable\n name: String(xmlLayer?.Name),\n abstract: String(xmlLayer?.Abstract),\n keywords: getXMLStringArray(xmlLayer.KeywordList?.Keyword)\n };\n\n // WMS 1.3.0 changes SRS to CRS\n const crs = xmlLayer?.CRS || xmlLayer?.SRS;\n if (crs && Array.isArray(crs) && crs.every((_) => typeof _ === 'string')) {\n layer.crs = crs;\n }\n\n // v1.3.0 extract simple geographic bounding box\n let geographicBoundingBox =\n xmlLayer?.EX_GeographicBoundingBox && extractEXBoundingBox(xmlLayer?.EX_GeographicBoundingBox);\n if (geographicBoundingBox) {\n layer.geographicBoundingBox = geographicBoundingBox;\n }\n\n // v1.1.1 extract simple geographic bounding box\n geographicBoundingBox =\n xmlLayer?.LatLonBoundingBox && extractLatLonBoundingBox(xmlLayer?.LatLonBoundingBox);\n if (geographicBoundingBox) {\n layer.geographicBoundingBox = geographicBoundingBox;\n }\n\n // Extract per-CRS bounding boxes\n const boundingBoxes = xmlLayer?.BoundingBox && extractWMSBoundingBoxes(xmlLayer?.BoundingBox);\n if (boundingBoxes && boundingBoxes.length > 0) {\n layer.boundingBoxes = boundingBoxes;\n }\n\n if (xmlLayer?.opaque) {\n layer.opaque = getXMLBoolean(xmlLayer?.opaque);\n }\n if (xmlLayer?.cascaded) {\n layer.cascaded = getXMLBoolean(xmlLayer?.cascaded);\n }\n if (xmlLayer?.queryable) {\n layer.queryable = getXMLBoolean(xmlLayer?.queryable);\n }\n\n // Single layer is not represented as array in XML\n const xmlLayers = getXMLArray(xmlLayer?.Layer);\n const layers: WMSLayer[] = [];\n\n for (const xmlSubLayer of xmlLayers) {\n layers.push(extractLayer(xmlSubLayer));\n }\n\n if (layers.length > 0) {\n layer.layers = layers;\n }\n\n // Clean up object\n for (const [key, value] of Object.entries(layer)) {\n if (value === undefined) {\n delete layer[key];\n }\n }\n\n return layer;\n}\n\n/** WMS 1.3.0 Loosely defined geospatial bounding box in unspecified CRS for quick content searches */\nfunction extractEXBoundingBox(xmlBoundingBox: any): [[number, number], [number, number]] {\n const {\n westBoundLongitude: w,\n northBoundLatitude: n,\n eastBoundLongitude: e,\n southBoundLatitude: s\n } = xmlBoundingBox;\n return [\n [w, s],\n [e, n]\n ];\n}\n\n/** WMS 1.1.1 Loosely defined geospatial bounding box in unspecified CRS for quick content searches */\nfunction extractLatLonBoundingBox(xmlBoundingBox: any): [[number, number], [number, number]] {\n const {minx, miny, maxx, maxy} = xmlBoundingBox;\n return [\n [minx, miny],\n [maxx, maxy]\n ];\n}\n\n/** Loosely defined geospatial bounding box in unspecified CRS for quick content searches */\nfunction extractWMSBoundingBoxes(xmlBoundingBoxes: any): WMSBoundingBox[] {\n const xmlBoxes = getXMLArray(xmlBoundingBoxes);\n return xmlBoxes.map((xmlBox) => extractWMSBoundingBox(xmlBox));\n}\n\n/** Loosely defined geospatial bounding box in unspecified CRS for quick content searches */\nfunction extractWMSBoundingBox(xmlBoundingBox: any): WMSBoundingBox {\n const {CRS, SRS, minx, miny, maxx, maxy, resx, resy} = xmlBoundingBox;\n const boundingBox: WMSBoundingBox = {\n // CRS in 1.3.0, SRS in 1.1.1\n crs: CRS || SRS,\n boundingBox: [\n [getXMLFloat(minx) as number, getXMLFloat(miny) as number],\n [getXMLFloat(maxx) as number, getXMLFloat(maxy) as number]\n ]\n };\n if (resx) {\n boundingBox.xResolution = resx;\n }\n if (resy) {\n boundingBox.yResolution = resy;\n }\n return boundingBox;\n}\n\n/** Traverse layers and inject missing props from parents */\nfunction addInheritedLayerProps(layer: WMSLayer, parent: WMSLayer | null): void {\n if (parent && parent.geographicBoundingBox && !layer.geographicBoundingBox) {\n layer.geographicBoundingBox = [...parent.geographicBoundingBox];\n }\n\n if (parent && parent.crs && !layer.crs) {\n layer.crs = [...parent.crs];\n }\n\n if (parent && parent.boundingBoxes && !layer.boundingBoxes) {\n layer.boundingBoxes = [...parent.boundingBoxes];\n }\n\n // TODO inherit other elements\n\n for (const subLayer of layer.layers || []) {\n addInheritedLayerProps(subLayer, layer);\n }\n}\n"],"mappings":"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"}
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.parseWMSError = parseWMSError;
|
|
7
7
|
var _xml = require("@loaders.gl/xml");
|
|
8
|
-
|
|
9
8
|
function parseWMSError(text, options) {
|
|
10
9
|
var _XMLLoader$parseTextS, _parsedXML$ServiceExc, _parsedXML$ogcServic;
|
|
11
10
|
var parsedXML = (_XMLLoader$parseTextS = _xml.XMLLoader.parseTextSync) === null || _XMLLoader$parseTextS === void 0 ? void 0 : _XMLLoader$parseTextS.call(_xml.XMLLoader, text, options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-wms-error.js","names":["parseWMSError","text","options","parsedXML","XMLLoader","parseTextSync","serviceExceptionXML","ServiceExceptionReport","ServiceException","message","value","code"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-error.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\n\n/**\n * Extract an error message from WMS error response XML\n * @param text\n * @param options\n * @returns a string with a human readable message\n */\nexport function parseWMSError(text: string, options): string {\n const parsedXML = XMLLoader.parseTextSync?.(text, options);\n const serviceExceptionXML =\n parsedXML?.ServiceExceptionReport?.ServiceException ||\n parsedXML?.['ogc:ServiceExceptionReport']?.['ogc:ServiceException'];\n // Sigh, can be either a string or an object\n const message =\n typeof serviceExceptionXML === 'string'\n ? serviceExceptionXML\n : serviceExceptionXML.value || serviceExceptionXML.code || 'Unknown error';\n return message;\n}\n"],"mappings":";;;;;;AAEA
|
|
1
|
+
{"version":3,"file":"parse-wms-error.js","names":["_xml","require","parseWMSError","text","options","_XMLLoader$parseTextS","_parsedXML$ServiceExc","_parsedXML$ogcServic","parsedXML","XMLLoader","parseTextSync","call","serviceExceptionXML","ServiceExceptionReport","ServiceException","message","value","code"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-error.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\n\n/**\n * Extract an error message from WMS error response XML\n * @param text\n * @param options\n * @returns a string with a human readable message\n */\nexport function parseWMSError(text: string, options): string {\n const parsedXML = XMLLoader.parseTextSync?.(text, options);\n const serviceExceptionXML =\n parsedXML?.ServiceExceptionReport?.ServiceException ||\n parsedXML?.['ogc:ServiceExceptionReport']?.['ogc:ServiceException'];\n // Sigh, can be either a string or an object\n const message =\n typeof serviceExceptionXML === 'string'\n ? serviceExceptionXML\n : serviceExceptionXML.value || serviceExceptionXML.code || 'Unknown error';\n return message;\n}\n"],"mappings":";;;;;;AAEA,IAAAA,IAAA,GAAAC,OAAA;AAQO,SAASC,aAAaA,CAACC,IAAY,EAAEC,OAAO,EAAU;EAAA,IAAAC,qBAAA,EAAAC,qBAAA,EAAAC,oBAAA;EAC3D,IAAMC,SAAS,IAAAH,qBAAA,GAAGI,cAAS,CAACC,aAAa,cAAAL,qBAAA,uBAAvBA,qBAAA,CAAAM,IAAA,CAAAF,cAAS,EAAiBN,IAAI,EAAEC,OAAO,CAAC;EAC1D,IAAMQ,mBAAmB,GACvB,CAAAJ,SAAS,aAATA,SAAS,wBAAAF,qBAAA,GAATE,SAAS,CAAEK,sBAAsB,cAAAP,qBAAA,uBAAjCA,qBAAA,CAAmCQ,gBAAgB,MACnDN,SAAS,aAATA,SAAS,wBAAAD,oBAAA,GAATC,SAAS,CAAG,4BAA4B,CAAC,cAAAD,oBAAA,uBAAzCA,oBAAA,CAA4C,sBAAsB,CAAC;EAErE,IAAMQ,OAAO,GACX,OAAOH,mBAAmB,KAAK,QAAQ,GACnCA,mBAAmB,GACnBA,mBAAmB,CAACI,KAAK,IAAIJ,mBAAmB,CAACK,IAAI,IAAI,eAAe;EAC9E,OAAOF,OAAO;AAChB"}
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.parseWMSFeatureInfo = parseWMSFeatureInfo;
|
|
7
7
|
var _xml = require("@loaders.gl/xml");
|
|
8
|
-
|
|
9
8
|
function parseWMSFeatureInfo(text, options) {
|
|
10
9
|
var _parsedXML$FeatureInf;
|
|
11
10
|
var parsedXML = _xml.XMLLoader.parseTextSync(text, options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-wms-features.js","names":["parseWMSFeatureInfo","text","options","parsedXML","XMLLoader","parseTextSync","xmlFeatureInfo","FeatureInfoResponse","FIELDS","xmlFeatures","Array","isArray","features","map","xmlFeature","extractFeature","xmlFields","attributes","type","bounds","bottom","top","left","right"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-features.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\n\n/** WMS Feature info - response to a WMS `GetFeatureInfo` request */\nexport type WMSFeatureInfo = {\n features: WMSFeature[];\n};\n\nexport type WMSFeature = {\n attributes: Record<string, number | string>;\n type: string;\n bounds: {top: number; bottom: number; left: number; right: number};\n};\n\n/**\n * Parses a typed data structure from raw XML for `GetFeatureInfo` response\n * @note Error handlings is fairly weak\n */\nexport function parseWMSFeatureInfo(text: string, options): WMSFeatureInfo {\n const parsedXML = XMLLoader.parseTextSync(text, options);\n const xmlFeatureInfo: any = parsedXML.FeatureInfoResponse?.FIELDS || [];\n\n const xmlFeatures = Array.isArray(xmlFeatureInfo) ? xmlFeatureInfo : [xmlFeatureInfo];\n\n return {\n features: xmlFeatures.map((xmlFeature) => extractFeature(xmlFeature))\n };\n}\n\nfunction extractFeature(xmlFeature: any) {\n const xmlFields = xmlFeature || {};\n // TODO - not correct\n return {\n attributes: xmlFields,\n type: '',\n bounds: {bottom: 0, top: 0, left: 0, right: 0}\n };\n}\n"],"mappings":";;;;;;AAEA
|
|
1
|
+
{"version":3,"file":"parse-wms-features.js","names":["_xml","require","parseWMSFeatureInfo","text","options","_parsedXML$FeatureInf","parsedXML","XMLLoader","parseTextSync","xmlFeatureInfo","FeatureInfoResponse","FIELDS","xmlFeatures","Array","isArray","features","map","xmlFeature","extractFeature","xmlFields","attributes","type","bounds","bottom","top","left","right"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-features.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\n\n/** WMS Feature info - response to a WMS `GetFeatureInfo` request */\nexport type WMSFeatureInfo = {\n features: WMSFeature[];\n};\n\nexport type WMSFeature = {\n attributes: Record<string, number | string>;\n type: string;\n bounds: {top: number; bottom: number; left: number; right: number};\n};\n\n/**\n * Parses a typed data structure from raw XML for `GetFeatureInfo` response\n * @note Error handlings is fairly weak\n */\nexport function parseWMSFeatureInfo(text: string, options): WMSFeatureInfo {\n const parsedXML = XMLLoader.parseTextSync(text, options);\n const xmlFeatureInfo: any = parsedXML.FeatureInfoResponse?.FIELDS || [];\n\n const xmlFeatures = Array.isArray(xmlFeatureInfo) ? xmlFeatureInfo : [xmlFeatureInfo];\n\n return {\n features: xmlFeatures.map((xmlFeature) => extractFeature(xmlFeature))\n };\n}\n\nfunction extractFeature(xmlFeature: any) {\n const xmlFields = xmlFeature || {};\n // TODO - not correct\n return {\n attributes: xmlFields,\n type: '',\n bounds: {bottom: 0, top: 0, left: 0, right: 0}\n };\n}\n"],"mappings":";;;;;;AAEA,IAAAA,IAAA,GAAAC,OAAA;AAiBO,SAASC,mBAAmBA,CAACC,IAAY,EAAEC,OAAO,EAAkB;EAAA,IAAAC,qBAAA;EACzE,IAAMC,SAAS,GAAGC,cAAS,CAACC,aAAa,CAACL,IAAI,EAAEC,OAAO,CAAC;EACxD,IAAMK,cAAmB,GAAG,EAAAJ,qBAAA,GAAAC,SAAS,CAACI,mBAAmB,cAAAL,qBAAA,uBAA7BA,qBAAA,CAA+BM,MAAM,KAAI,EAAE;EAEvE,IAAMC,WAAW,GAAGC,KAAK,CAACC,OAAO,CAACL,cAAc,CAAC,GAAGA,cAAc,GAAG,CAACA,cAAc,CAAC;EAErF,OAAO;IACLM,QAAQ,EAAEH,WAAW,CAACI,GAAG,CAAC,UAACC,UAAU;MAAA,OAAKC,cAAc,CAACD,UAAU,CAAC;IAAA;EACtE,CAAC;AACH;AAEA,SAASC,cAAcA,CAACD,UAAe,EAAE;EACvC,IAAME,SAAS,GAAGF,UAAU,IAAI,CAAC,CAAC;EAElC,OAAO;IACLG,UAAU,EAAED,SAAS;IACrBE,IAAI,EAAE,EAAE;IACRC,MAAM,EAAE;MAACC,MAAM,EAAE,CAAC;MAAEC,GAAG,EAAE,CAAC;MAAEC,IAAI,EAAE,CAAC;MAAEC,KAAK,EAAE;IAAC;EAC/C,CAAC;AACH"}
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.parseWMSLayerDescription = parseWMSLayerDescription;
|
|
7
7
|
var _xml = require("@loaders.gl/xml");
|
|
8
|
-
|
|
9
8
|
function parseWMSLayerDescription(text, options) {
|
|
10
9
|
var parsedXML = _xml.XMLLoader.parseTextSync(text, options);
|
|
11
10
|
return parsedXML;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-wms-layer-description.js","names":["parseWMSLayerDescription","text","options","parsedXML","XMLLoader","parseTextSync"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-layer-description.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\n\n/** Layer description - response to a WMS `DescribeLayer` request */\nexport type WMSLayerDescription = {\n layers: {}[];\n};\n\n/**\n * Parses a typed data structure from raw XML for `GetFeatureInfo` response\n * @note Error handlings is fairly weak\n */\nexport function parseWMSLayerDescription(text: string, options): WMSLayerDescription {\n const parsedXML = XMLLoader.parseTextSync(text, options);\n // TODO - implement parser\n return parsedXML as unknown as WMSLayerDescription;\n}\n"],"mappings":";;;;;;AAEA
|
|
1
|
+
{"version":3,"file":"parse-wms-layer-description.js","names":["_xml","require","parseWMSLayerDescription","text","options","parsedXML","XMLLoader","parseTextSync"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-layer-description.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\n\n/** Layer description - response to a WMS `DescribeLayer` request */\nexport type WMSLayerDescription = {\n layers: {}[];\n};\n\n/**\n * Parses a typed data structure from raw XML for `GetFeatureInfo` response\n * @note Error handlings is fairly weak\n */\nexport function parseWMSLayerDescription(text: string, options): WMSLayerDescription {\n const parsedXML = XMLLoader.parseTextSync(text, options);\n // TODO - implement parser\n return parsedXML as unknown as WMSLayerDescription;\n}\n"],"mappings":";;;;;;AAEA,IAAAA,IAAA,GAAAC,OAAA;AAWO,SAASC,wBAAwBA,CAACC,IAAY,EAAEC,OAAO,EAAuB;EACnF,IAAMC,SAAS,GAAGC,cAAS,CAACC,aAAa,CAACJ,IAAI,EAAEC,OAAO,CAAC;EAExD,OAAOC,SAAS;AAClB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.getXMLArray = getXMLArray;
|
|
8
|
+
exports.getXMLBoolean = getXMLBoolean;
|
|
9
|
+
exports.getXMLFloat = getXMLFloat;
|
|
10
|
+
exports.getXMLInteger = getXMLInteger;
|
|
11
|
+
exports.getXMLStringArray = getXMLStringArray;
|
|
12
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
13
|
+
function getXMLArray(xmlValue) {
|
|
14
|
+
if (Array.isArray(xmlValue)) {
|
|
15
|
+
return xmlValue;
|
|
16
|
+
}
|
|
17
|
+
if (xmlValue) {
|
|
18
|
+
return [xmlValue];
|
|
19
|
+
}
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
function getXMLStringArray(xmlValue) {
|
|
23
|
+
var xmlArray = getXMLArray(xmlValue);
|
|
24
|
+
if (xmlArray.length > 0 && xmlArray.every(function (_) {
|
|
25
|
+
return typeof _ === 'string';
|
|
26
|
+
})) {
|
|
27
|
+
return xmlArray;
|
|
28
|
+
}
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
function getXMLFloat(xmlValue) {
|
|
32
|
+
var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
|
|
33
|
+
switch ((0, _typeof2.default)(xmlValue)) {
|
|
34
|
+
case 'number':
|
|
35
|
+
return xmlValue;
|
|
36
|
+
case 'string':
|
|
37
|
+
return parseFloat(xmlValue);
|
|
38
|
+
default:
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function getXMLInteger(xmlValue) {
|
|
43
|
+
var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
|
|
44
|
+
switch ((0, _typeof2.default)(xmlValue)) {
|
|
45
|
+
case 'number':
|
|
46
|
+
return xmlValue;
|
|
47
|
+
case 'string':
|
|
48
|
+
return parseInt(xmlValue, 10);
|
|
49
|
+
default:
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function getXMLBoolean(xmlValue) {
|
|
54
|
+
switch (xmlValue) {
|
|
55
|
+
case 'true':
|
|
56
|
+
return true;
|
|
57
|
+
case 'false':
|
|
58
|
+
return false;
|
|
59
|
+
case '1':
|
|
60
|
+
return true;
|
|
61
|
+
case '0':
|
|
62
|
+
return false;
|
|
63
|
+
default:
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=parse-xml-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-xml-helpers.js","names":["getXMLArray","xmlValue","Array","isArray","getXMLStringArray","xmlArray","length","every","_","getXMLFloat","defaultValue","arguments","undefined","_typeof2","default","parseFloat","getXMLInteger","parseInt","getXMLBoolean"],"sources":["../../../../../src/lib/parsers/xml/parse-xml-helpers.ts"],"sourcesContent":["// loaders.gl, MIT license\n\n/** A single element of an array is not represented as an array in XML */\nexport function getXMLArray(xmlValue: any): any[] {\n // Already an array, return as is\n if (Array.isArray(xmlValue)) {\n return xmlValue;\n }\n // Single value, wrap in array\n if (xmlValue) {\n return [xmlValue];\n }\n // nullish, return empty array\n return [];\n}\n\n/** Get a list of strings from XML */\nexport function getXMLStringArray(xmlValue: any): string[] {\n const xmlArray = getXMLArray(xmlValue);\n if (xmlArray.length > 0 && xmlArray.every((_) => typeof _ === 'string')) {\n return xmlArray as string[];\n }\n // TODO - error handling?\n return [];\n}\n\n/** Get XML float */\nexport function getXMLFloat(xmlValue: any, defaultValue = undefined): number | undefined {\n switch (typeof xmlValue) {\n case 'number':\n return xmlValue;\n case 'string':\n return parseFloat(xmlValue);\n default:\n return undefined;\n }\n}\n\n/** Get XML integer */\nexport function getXMLInteger(xmlValue: any, defaultValue = undefined): number | undefined {\n switch (typeof xmlValue) {\n case 'number':\n return xmlValue;\n case 'string':\n return parseInt(xmlValue, 10);\n default:\n return undefined;\n }\n}\n\n/** Somewhat arbitrary boolean parsing */\nexport function getXMLBoolean(xmlValue: any): boolean {\n switch (xmlValue) {\n case 'true':\n return true;\n case 'false':\n return false;\n case '1':\n return true;\n case '0':\n return false;\n default:\n return false;\n }\n}\n"],"mappings":";;;;;;;;;;;;AAGO,SAASA,WAAWA,CAACC,QAAa,EAAS;EAEhD,IAAIC,KAAK,CAACC,OAAO,CAACF,QAAQ,CAAC,EAAE;IAC3B,OAAOA,QAAQ;EACjB;EAEA,IAAIA,QAAQ,EAAE;IACZ,OAAO,CAACA,QAAQ,CAAC;EACnB;EAEA,OAAO,EAAE;AACX;AAGO,SAASG,iBAAiBA,CAACH,QAAa,EAAY;EACzD,IAAMI,QAAQ,GAAGL,WAAW,CAACC,QAAQ,CAAC;EACtC,IAAII,QAAQ,CAACC,MAAM,GAAG,CAAC,IAAID,QAAQ,CAACE,KAAK,CAAC,UAACC,CAAC;IAAA,OAAK,OAAOA,CAAC,KAAK,QAAQ;EAAA,EAAC,EAAE;IACvE,OAAOH,QAAQ;EACjB;EAEA,OAAO,EAAE;AACX;AAGO,SAASI,WAAWA,CAACR,QAAa,EAAgD;EAAA,IAA9CS,YAAY,GAAAC,SAAA,CAAAL,MAAA,QAAAK,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAGC,SAAS;EACjE,YAAAC,QAAA,CAAAC,OAAA,EAAeb,QAAQ;IACrB,KAAK,QAAQ;MACX,OAAOA,QAAQ;IACjB,KAAK,QAAQ;MACX,OAAOc,UAAU,CAACd,QAAQ,CAAC;IAC7B;MACE,OAAOW,SAAS;EAAC;AAEvB;AAGO,SAASI,aAAaA,CAACf,QAAa,EAAgD;EAAA,IAA9CS,YAAY,GAAAC,SAAA,CAAAL,MAAA,QAAAK,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAGC,SAAS;EACnE,YAAAC,QAAA,CAAAC,OAAA,EAAeb,QAAQ;IACrB,KAAK,QAAQ;MACX,OAAOA,QAAQ;IACjB,KAAK,QAAQ;MACX,OAAOgB,QAAQ,CAAChB,QAAQ,EAAE,EAAE,CAAC;IAC/B;MACE,OAAOW,SAAS;EAAC;AAEvB;AAGO,SAASM,aAAaA,CAACjB,QAAa,EAAW;EACpD,QAAQA,QAAQ;IACd,KAAK,MAAM;MACT,OAAO,IAAI;IACb,KAAK,OAAO;MACV,OAAO,KAAK;IACd,KAAK,GAAG;MACN,OAAO,IAAI;IACb,KAAK,GAAG;MACN,OAAO,KAAK;IACd;MACE,OAAO,KAAK;EAAC;AAEnB"}
|