From 36dd1183b0a00b4dd79c0556f669019c14dc14ea Mon Sep 17 00:00:00 2001 From: Tim Sutton Date: Mon, 3 Jan 2022 07:47:29 +0000 Subject: [PATCH 001/209] Update configuration.rst I really bumped my head hard on this issue https://github.com/mapproxy/mapproxy/issues/490 which requires to use the older layer syntax. Further the deprecated example uses source: (singular) for sources key which further makes even trying to use the deprecated syntax by following the example given hard. This PR tries to make things a little clearer. --- doc/configuration.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/configuration.rst b/doc/configuration.rst index ea98e6b65..50370d602 100644 --- a/doc/configuration.rst +++ b/doc/configuration.rst @@ -127,7 +127,7 @@ The old syntax to configure each layer as a dictionary with the key as the name layers: mylayer: title: My Layer - source: [mysource] + sources: [mysource] should become @@ -138,7 +138,7 @@ should become title: My Layer source: [mysource] -The mixed format where the layers are a list (``-``) but each layer is still a dictionary is no longer supported (e.g. ``- mylayer:`` becomes ``- name: mylayer``). +The mixed format where the layers are a list (``-``) but each layer is still a dictionary is no longer supported (e.g. ``- mylayer:`` becomes ``- name: mylayer``). Note that the deprecated format is still currently required if you are using the base: option due to `issue #490 `. .. _layers_name: From a97f641563e429404ae9658face060e69a50a866 Mon Sep 17 00:00:00 2001 From: Tim Sutton Date: Mon, 3 Jan 2022 07:51:02 +0000 Subject: [PATCH 002/209] Update configuration.rst One more pluralisation fix --- doc/configuration.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/configuration.rst b/doc/configuration.rst index 50370d602..b4d42519c 100644 --- a/doc/configuration.rst +++ b/doc/configuration.rst @@ -136,7 +136,7 @@ should become layers: - name: mylayer title: My Layer - source: [mysource] + sources: [mysource] The mixed format where the layers are a list (``-``) but each layer is still a dictionary is no longer supported (e.g. ``- mylayer:`` becomes ``- name: mylayer``). Note that the deprecated format is still currently required if you are using the base: option due to `issue #490 `. From 1556ffc7a376d42ae9bad6f874201e97017efb63 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 14 Jun 2022 17:50:50 +0200 Subject: [PATCH 003/209] SRS class: add a get_geographic_srs() method Return the "canoncial" geographic CRS corresponding to this CRS. EPSG:4326 for Earth CRS, or another one from other celestial bodies. --- mapproxy/srs.py | 18 ++++++++++++++++++ mapproxy/test/unit/test_srs.py | 27 +++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/mapproxy/srs.py b/mapproxy/srs.py index 92e488955..10952290b 100644 --- a/mapproxy/srs.py +++ b/mapproxy/srs.py @@ -238,6 +238,13 @@ def is_latlong(self): """ return self.proj.is_latlong() + + def get_geographic_srs(self): + """ Return the "canonical" geographic CRS corresponding to this CRS. + Always EPSG:4326 for Proj4 implementation """ + return SRS(4326) + + @property def is_axis_order_ne(self): """ @@ -432,6 +439,17 @@ def is_latlong(self): """ return self.proj.is_geographic + + def get_geographic_srs(self): + """ Return the "canonical" geographic CRS corresponding to this CRS. + EPSG:4326 for Earth CRS, or another one from other celestial bodies """ + auth = self.proj.to_authority() + if auth is None or not auth[0].startswith('IAU'): + ret = SRS(4326) + else: + return _SRS(':'.join(self.proj.geodetic_crs.to_authority())) + return ret + @property def is_axis_order_ne(self): """ diff --git a/mapproxy/test/unit/test_srs.py b/mapproxy/test/unit/test_srs.py index 4e8275dc5..ec633a8d8 100644 --- a/mapproxy/test/unit/test_srs.py +++ b/mapproxy/test/unit/test_srs.py @@ -31,6 +31,8 @@ def test_epsg4326(self): assert not srs.is_axis_order_en assert srs.is_axis_order_ne + assert srs.get_geographic_srs() == srs + def test_crs84(self): srs = SRS("CRS:84") @@ -47,6 +49,8 @@ def test_epsg31467(self): assert not srs.is_axis_order_en assert srs.is_axis_order_ne + assert srs.get_geographic_srs() == SRS(4326) + def test_epsg900913(self): srs = SRS("epsg:900913") @@ -61,6 +65,29 @@ def test_non_epsg_auth(self): assert srs.is_axis_order_en assert not srs.is_axis_order_ne + assert srs.get_geographic_srs() == SRS(4326) + + + def test_iau_crs(self): + try: + srs = SRS("IAU:49900") # "Mars (2015) - Sphere / Ocentric" + except: + pytest.skip('Requires recent pyproj version') + + assert srs.is_latlong + assert '49900' in str(srs.get_geographic_srs()) + + + def test_iau_crs_projected(self): + try: + srs = SRS("IAU:49910") # "Mars (2015) - Sphere / Ocentric / Equirectangular, clon = 0" + except: + pytest.skip('Requires recent pyproj version') + + assert not srs.is_latlong + assert '49900' in str(srs.get_geographic_srs()) + + def test_from_srs(self): srs1 = SRS("epsg:4326") srs2 = SRS(srs1) From 767c14ba4c4b9da9dd6618d5c1f68791221b20c6 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 14 Jun 2022 17:52:03 +0200 Subject: [PATCH 004/209] MapExtent: do not hardcode EPSG:4326 in llbox()/bbox_for() methods, but use SRS.get_geographic_srs() --- mapproxy/layer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mapproxy/layer.py b/mapproxy/layer.py index c55b30a2e..e79b94559 100644 --- a/mapproxy/layer.py +++ b/mapproxy/layer.py @@ -200,7 +200,7 @@ def __init__(self, bbox, srs): @property def llbbox(self): if not self._llbbox: - self._llbbox = self.srs.transform_bbox_to(SRS(4326), self.bbox) + self._llbbox = self.srs.transform_bbox_to(self.srs.get_geographic_srs(), self.bbox) return self._llbbox def bbox_for(self, srs): @@ -236,7 +236,7 @@ def __add__(self, other): return self if self.is_default: return other - return MapExtent(merge_bbox(self.llbbox, other.llbbox), SRS(4326)) + return MapExtent(merge_bbox(self.llbbox, other.llbbox), self.srs.get_geographic_srs()) def contains(self, other): if not isinstance(other, MapExtent): From e14cf646b4f0ff380683dbba500f3ff4b3e83c84 Mon Sep 17 00:00:00 2001 From: Tristan Date: Fri, 22 Jul 2022 13:08:40 +0200 Subject: [PATCH 005/209] fix typo: optoins -> options --- doc/mapproxy_util_autoconfig.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/mapproxy_util_autoconfig.rst b/doc/mapproxy_util_autoconfig.rst index b880bc8a6..7feda74bf 100644 --- a/doc/mapproxy_util_autoconfig.rst +++ b/doc/mapproxy_util_autoconfig.rst @@ -49,7 +49,7 @@ Options .. cmdoption:: --overwrite .. cmdoption:: --overwrite-seed - YAML configuration that overwrites configuration optoins before the generated configuration is written to ``--output``/``--output-seed``. + YAML configuration that overwrites configuration options before the generated configuration is written to ``--output``/``--output-seed``. Example ~~~~~~~ From 6197fc012dd65bcf51ff293785189d304beabaa6 Mon Sep 17 00:00:00 2001 From: Tristan Date: Tue, 26 Jul 2022 16:38:15 +0200 Subject: [PATCH 006/209] fix typo: pleas -> please --- doc/configuration.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/configuration.rst b/doc/configuration.rst index b4d42519c..89967ebc7 100644 --- a/doc/configuration.rst +++ b/doc/configuration.rst @@ -208,7 +208,7 @@ Limit the layer to the given min and max resolution or scale. MapProxy will retu The values will also apear in the capabilities documents (i.e. WMS ScaleHint and Min/MaxScaleDenominator). -Pleas read :ref:`scale vs. resolution ` for some notes on `scale`. +Please read :ref:`scale vs. resolution ` for some notes on `scale`. ``legendurl`` """"""""""""" From 53745e70b628b20c172709fd1503b67dea2b27d0 Mon Sep 17 00:00:00 2001 From: Tristan Date: Tue, 26 Jul 2022 16:39:19 +0200 Subject: [PATCH 007/209] added missing : after myseed2 --- doc/seed.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/seed.rst b/doc/seed.rst index 156660f75..984ad776d 100644 --- a/doc/seed.rst +++ b/doc/seed.rst @@ -195,7 +195,7 @@ Example seeds: myseed1: [...] - myseed2 + myseed2: [...] cleanups: @@ -300,7 +300,7 @@ Example levels: to: 10 - myseed2 + myseed2: caches: [osm_cache] coverages: [niedersachsen, bremen, hamburg] grids: [GLOBAL_MERCATOR] From dd4fa8ba3f28e1ab5a4687e52d4cc963c4fe2adb Mon Sep 17 00:00:00 2001 From: Denis Rykov Date: Thu, 4 Aug 2022 14:11:32 +0200 Subject: [PATCH 008/209] Use 'shape()' function instead of 'asShape()' --- mapproxy/util/geom.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapproxy/util/geom.py b/mapproxy/util/geom.py index 3402c0cf1..4573a3557 100644 --- a/mapproxy/util/geom.py +++ b/mapproxy/util/geom.py @@ -144,7 +144,7 @@ def load_geojson(datasource): polygons = [] for geom in geometries: - geom = shapely.geometry.asShape(geom) + geom = shapely.geometry.shape(geom) if geom.type == 'Polygon': polygons.append(geom) elif geom.type == 'MultiPolygon': From 55faec9b69e78e4e909b81e20e8e6bf9da1420a2 Mon Sep 17 00:00:00 2001 From: stijnblommerde Date: Fri, 12 Aug 2022 15:42:18 +0200 Subject: [PATCH 009/209] add application/json to image_formats --- mapproxy/config/defaults.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapproxy/config/defaults.py b/mapproxy/config/defaults.py index 013ca455c..dcc266878 100644 --- a/mapproxy/config/defaults.py +++ b/mapproxy/config/defaults.py @@ -16,7 +16,7 @@ server = ['wms', 'tms', 'kml'] wms = dict( - image_formats = ['image/png', 'image/jpeg', 'image/gif', 'image/GeoTIFF', 'image/tiff'], + image_formats = ['image/png', 'image/jpeg', 'image/gif', 'image/GeoTIFF', 'image/tiff', 'application/json'], srs = set(['EPSG:4326', 'EPSG:4258', 'CRS:84', 'EPSG:900913', 'EPSG:3857']), strict = False, request_parser = 'default', From a161346d7738b8ee5cc25f0b1ea960da2acd25cb Mon Sep 17 00:00:00 2001 From: stijnblommerde Date: Fri, 12 Aug 2022 15:56:50 +0200 Subject: [PATCH 010/209] add application/json to image_formats --- mapproxy/config/loader.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mapproxy/config/loader.py b/mapproxy/config/loader.py index 2749c128b..99911cd82 100644 --- a/mapproxy/config/loader.py +++ b/mapproxy/config/loader.py @@ -461,6 +461,9 @@ def image_opts(self, image_conf, format): # caches shall be able to store png and jpeg tiles with mixed format if format == 'mixed': conf['format'] = format + + if format == 'application/json': + conf['format'] = format # force 256 colors for image.paletted for backwards compat paletted = self.context.globals.get_value('image.paletted', self.conf) From 8186e0f154f8e9d6e17296bc92ef861edd3ca7ab Mon Sep 17 00:00:00 2001 From: jansule Date: Wed, 7 Sep 2022 11:49:20 +0200 Subject: [PATCH 011/209] export - derive image format from cache config --- mapproxy/script/export.py | 44 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/mapproxy/script/export.py b/mapproxy/script/export.py index 234ef423f..ca00aefcf 100644 --- a/mapproxy/script/export.py +++ b/mapproxy/script/export.py @@ -28,6 +28,7 @@ from mapproxy.config.loader import ( load_configuration, ConfigurationError, CacheConfiguration, GridConfiguration, + ProxyConfiguration, ) from mapproxy.util.coverage import BBOXCoverage from mapproxy.seed.util import ProgressLog, format_bbox @@ -56,6 +57,37 @@ def parse_levels(level_str): return sorted(levels) + +def resolve_source(source_name, conf) -> (dict, bool): + """ + Resolves the source with the given name. + + >>> config = ProxyConfiguration({'sources': {'mysource': {'type': 'wms'}}}) + >>> resolve_source('mysource', config) + (, False) + + >>> config = ProxyConfiguration({'caches': {'mysource': {}}}) + >>> resolve_source('mysource', config) + (, True) + + >>> config = ProxyConfiguration({'caches': {'mysource': {'type': 'foo'}}}) + >>> resolve_source('nonexistingsource', config) + (None, None) + + :param source_name: The name of the source to resolve. + :param conf: The mapproxy config to resolve from. + :rtype: (dict, bool) A tuple containing the resolved source and a boolean + indicating if the resolved source is a cache (True), or a source (False). + """ + resolved_source = conf.sources.get(source_name) + if resolved_source is not None: + return resolved_source, False + resolved_source = conf.caches.get(source_name) + if resolved_source is not None: + return resolved_source, True + return None, None + + def parse_grid_definition(definition): """ >>> sorted(parse_grid_definition("res=[10000,1000,100,10] srs=EPSG:4326 bbox=5,50,10,60").items()) @@ -197,12 +229,21 @@ def export_command(args=None): print('ERROR: destination exists, remove first or use --force', file=sys.stderr) sys.exit(2) - cache_conf = { 'name': 'export', 'grids': [options.grid], 'sources': [options.source], } + + resolved_source, source_is_cache = resolve_source(options.source, conf) + if source_is_cache: + image_format = resolved_source.conf.get('format') or resolved_source.defaults.get('format') + if image_format is not None: + cache_conf['format'] = image_format + if image_format == 'mixed': + request_format = resolved_source.conf.get('request_format') or 'image/png' + cache_conf['request_format'] = request_format + if options.type == 'mbtile': cache_conf['cache'] = { 'type': 'mbtiles', @@ -257,7 +298,6 @@ def export_command(args=None): tile_grid, extent, mgr = CacheConfiguration(cache_conf, conf).caches()[0] - levels = parse_levels(options.levels) if levels[-1] >= tile_grid.levels: print('ERROR: destination grid only has %d levels' % tile_grid.levels, file=sys.stderr) From c84857d25c2891a4ce320764a639c0777d37b968 Mon Sep 17 00:00:00 2001 From: jansule Date: Fri, 9 Sep 2022 10:14:27 +0200 Subject: [PATCH 012/209] export - fix exporting mixed cache --- mapproxy/config/loader.py | 1 + mapproxy/image/__init__.py | 1 + mapproxy/seed/seeder.py | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/mapproxy/config/loader.py b/mapproxy/config/loader.py index 7bcf6eb4b..179408a4e 100644 --- a/mapproxy/config/loader.py +++ b/mapproxy/config/loader.py @@ -462,6 +462,7 @@ def image_opts(self, image_conf, format): # caches shall be able to store png and jpeg tiles with mixed format if format == 'mixed': conf['format'] = format + conf['transparent'] = True # force 256 colors for image.paletted for backwards compat paletted = self.context.globals.get_value('image.paletted', self.conf) diff --git a/mapproxy/image/__init__.py b/mapproxy/image/__init__.py index e0a362cd7..d07f6d529 100644 --- a/mapproxy/image/__init__.py +++ b/mapproxy/image/__init__.py @@ -346,6 +346,7 @@ def img_to_buf(img, image_opts, georef=None): if format == 'mixed': if img_has_transparency(img): format = 'png' + image_opts.transparent = True else: format = 'jpeg' image_opts.colors = None diff --git a/mapproxy/seed/seeder.py b/mapproxy/seed/seeder.py index bd329ff72..aa6727ced 100644 --- a/mapproxy/seed/seeder.py +++ b/mapproxy/seed/seeder.py @@ -351,7 +351,7 @@ def _walk(self, cur_bbox, levels, current_level=0, all_subtiles=False): self.tile_mgr.cleanup() raise StopProcess() - process = False; + process = False if current_level in levels: levels = levels[1:] process = True From 064a7073990704db099547c2cfb9199393ad8703 Mon Sep 17 00:00:00 2001 From: Stijn Blommerde Date: Sat, 10 Sep 2022 11:55:47 +0200 Subject: [PATCH 013/209] add json functionality; no test yet --- mapproxy/client/wms.py | 23 ++++++++++++++------- mapproxy/service/wms.py | 5 ++++- mapproxy/source/wms.py | 6 ++++-- mapproxy/test/system/pytest.old/__init__.py | 0 4 files changed, 24 insertions(+), 10 deletions(-) create mode 100644 mapproxy/test/system/pytest.old/__init__.py diff --git a/mapproxy/client/wms.py b/mapproxy/client/wms.py index 59bbec41b..63b4305ff 100644 --- a/mapproxy/client/wms.py +++ b/mapproxy/client/wms.py @@ -199,22 +199,31 @@ def __init__(self, request_template, http_client=None): def get_legend(self, query): resp = self._retrieve(query) - format = split_mime_type(query.format)[1] - self._check_resp(resp) - return ImageSource(resp, image_opts=ImageOptions(format=format)) + self._check_resp(resp, query.format) + if query.format == 'json': + return resp + else: + return ImageSource(resp, image_opts=ImageOptions(format=query.format)) def _retrieve(self, query): url = self._query_url(query) return self.http_client.open(url) - def _check_resp(self, resp): - if not resp.headers.get('Content-type', 'image/').startswith('image/'): - raise SourceError('no image returned from source WMS') + def _check_resp(self, resp, request_format): + if request_format == 'json': + if not resp.headers.get('Content-type') == 'application/json': + raise SourceError('no json returned from source WMS') + else: + if not resp.headers.get('Content-type', 'image/').startswith('image/'): + raise SourceError('no image returned from source WMS') def _query_url(self, query): req = self.request_template.copy() if not req.params.format: - req.params.format = query.format or 'image/png' + if query.format == 'json': + req.params.format = 'application/json' + else: + req.params.format = query.format or 'image/png' if query.scale: req.params['scale'] = query.scale return req.complete_url diff --git a/mapproxy/service/wms.py b/mapproxy/service/wms.py index b98b5a8ad..bef7ec998 100644 --- a/mapproxy/service/wms.py +++ b/mapproxy/service/wms.py @@ -45,7 +45,6 @@ get_template = template_loader(__name__, 'templates', namespace=template_helper.__dict__) - class PERMIT_ALL_LAYERS(object): pass @@ -312,6 +311,10 @@ def legendgraphic(self, request): mimetype = request.params.format_mime_type else: mimetype = 'image/png' + + if mimetype == 'application/json': + return Response(legends[0].read(), mimetype='application/json') + img_opts = self.image_formats[request.params.format_mime_type] return Response(result.as_buffer(img_opts), mimetype=mimetype) diff --git a/mapproxy/source/wms.py b/mapproxy/source/wms.py index fc9bd46be..f700f8149 100644 --- a/mapproxy/source/wms.py +++ b/mapproxy/source/wms.py @@ -12,7 +12,6 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - """ Retrieve maps/information from WMS servers. """ @@ -248,6 +247,8 @@ def get_legend(self, query): error_occured = False for client in self.clients: try: + if query.format == 'json': + return client.get_legend(query) legends.append(client.get_legend(query)) except HTTPClientError as e: error_occured = True @@ -261,5 +262,6 @@ def get_legend(self, query): id=self.identifier, scale=query.scale) if not error_occured: self._cache.store(legend) - return legend.source + # returns ImageSource + return legend.source diff --git a/mapproxy/test/system/pytest.old/__init__.py b/mapproxy/test/system/pytest.old/__init__.py new file mode 100644 index 000000000..e69de29bb From f89e4283c55a7b03548975491866811d2301fa38 Mon Sep 17 00:00:00 2001 From: Stijn Blommerde Date: Sat, 10 Sep 2022 16:16:36 +0200 Subject: [PATCH 014/209] remove application/json from config --- mapproxy/config/defaults.py | 2 +- mapproxy/config/loader.py | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/mapproxy/config/defaults.py b/mapproxy/config/defaults.py index dcc266878..013ca455c 100644 --- a/mapproxy/config/defaults.py +++ b/mapproxy/config/defaults.py @@ -16,7 +16,7 @@ server = ['wms', 'tms', 'kml'] wms = dict( - image_formats = ['image/png', 'image/jpeg', 'image/gif', 'image/GeoTIFF', 'image/tiff', 'application/json'], + image_formats = ['image/png', 'image/jpeg', 'image/gif', 'image/GeoTIFF', 'image/tiff'], srs = set(['EPSG:4326', 'EPSG:4258', 'CRS:84', 'EPSG:900913', 'EPSG:3857']), strict = False, request_parser = 'default', diff --git a/mapproxy/config/loader.py b/mapproxy/config/loader.py index 99911cd82..2749c128b 100644 --- a/mapproxy/config/loader.py +++ b/mapproxy/config/loader.py @@ -461,9 +461,6 @@ def image_opts(self, image_conf, format): # caches shall be able to store png and jpeg tiles with mixed format if format == 'mixed': conf['format'] = format - - if format == 'application/json': - conf['format'] = format # force 256 colors for image.paletted for backwards compat paletted = self.context.globals.get_value('image.paletted', self.conf) From 8ec5c80793c8943672d85e8bda1bedd826cafbbb Mon Sep 17 00:00:00 2001 From: Stijn Blommerde Date: Sat, 10 Sep 2022 21:46:15 +0200 Subject: [PATCH 015/209] add system test --- mapproxy/test/system/test_legendgraphic.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/mapproxy/test/system/test_legendgraphic.py b/mapproxy/test/system/test_legendgraphic.py index b4463f042..41c536bb3 100644 --- a/mapproxy/test/system/test_legendgraphic.py +++ b/mapproxy/test/system/test_legendgraphic.py @@ -18,6 +18,7 @@ from io import BytesIO import pytest +import json from mapproxy.compat.image import Image from mapproxy.request.wms import ( @@ -268,3 +269,21 @@ def test_get_legendgraphic_invalid_sld_version_130(self, app): xml, "//ogc:ServiceException/text()", "invalid sld_version 1.0.0" ) assert validate_with_xsd(xml, xsd_name="wms/1.3.0/exceptions_1_3_0.xsd") + + def test_get_legendgraphic_json(self, app): + self.common_lg_req_111.params["format"] = "application/json" + json_data = "{\"Legend\": [{\"title\": \"Give me a json legend!\"}]}" + expected_req1 = ( + { + "path": r"/service?LAYER=foo&SERVICE=WMS&FORMAT=application%2Fjson" + "&REQUEST=GetLegendGraphic&" + "&VERSION=1.1.1&SLD_VERSION=1.1.0" + }, + {"body": json_data.encode(), "headers": {"content-type": "application/json"}}, + ) + with mock_httpd(("localhost", 42423), [expected_req1]): + resp = app.get(self.common_lg_req_111) + assert resp.content_type == "application/json" + json_str = resp.body.decode("utf-8") + json_data = json.loads(json_str) + assert json_data['Legend'][0]['title'] == 'Give me a json legend!' From fef53b72b030587f9c0be4011295c6ece0256568 Mon Sep 17 00:00:00 2001 From: jansule Date: Mon, 12 Sep 2022 10:14:33 +0200 Subject: [PATCH 016/209] fix passing dimensions by changing from positional to keyword argument --- mapproxy/cache/mbtiles.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mapproxy/cache/mbtiles.py b/mapproxy/cache/mbtiles.py index 60086d51b..a5f657ad8 100644 --- a/mapproxy/cache/mbtiles.py +++ b/mapproxy/cache/mbtiles.py @@ -344,7 +344,7 @@ def store_tile(self, tile, dimensions=None): return self._get_level(tile.coord[2]).store_tile(tile, dimensions=dimensions) - def store_tiles(self, tiles, dimensions): + def store_tiles(self, tiles, dimensions=None): failed = False for level, tiles in itertools.groupby(tiles, key=lambda t: t.coord[2]): tiles = [t for t in tiles if not t.stored] @@ -352,11 +352,11 @@ def store_tiles(self, tiles, dimensions): if not res: failed = True return failed - def load_tile(self, tile, with_metadata=False): + def load_tile(self, tile, with_metadata=False, dimensions=None): if tile.source or tile.coord is None: return True - return self._get_level(tile.coord[2]).load_tile(tile, with_metadata=with_metadata) + return self._get_level(tile.coord[2]).load_tile(tile, with_metadata=with_metadata, dimensions=dimensions) def load_tiles(self, tiles, with_metadata=False, dimensions=None): level = None @@ -377,7 +377,7 @@ def remove_tile(self, tile): return self._get_level(tile.coord[2]).remove_tile(tile) - def load_tile_metadata(self, tile, dimensions): + def load_tile_metadata(self, tile, dimensions=None): self.load_tile(tile, dimensions=dimensions) def remove_level_tiles_before(self, level, timestamp): From 3e7bd181546376f37e05523c5bf57a88c6fcf9b5 Mon Sep 17 00:00:00 2001 From: jansule Date: Wed, 14 Sep 2022 13:32:29 +0200 Subject: [PATCH 017/209] remove type hint to support python 2.7 --- mapproxy/script/export.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapproxy/script/export.py b/mapproxy/script/export.py index ca00aefcf..1d5a0ac60 100644 --- a/mapproxy/script/export.py +++ b/mapproxy/script/export.py @@ -58,7 +58,7 @@ def parse_levels(level_str): return sorted(levels) -def resolve_source(source_name, conf) -> (dict, bool): +def resolve_source(source_name, conf): """ Resolves the source with the given name. From c9e9a603f442a22941265ef2eaeaa48cad625976 Mon Sep 17 00:00:00 2001 From: Stijn Blommerde Date: Thu, 15 Sep 2022 21:32:25 +0200 Subject: [PATCH 018/209] ignore cache when fetching json legend --- mapproxy/source/wms.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mapproxy/source/wms.py b/mapproxy/source/wms.py index f700f8149..0ce379115 100644 --- a/mapproxy/source/wms.py +++ b/mapproxy/source/wms.py @@ -242,7 +242,8 @@ def get_legend(self, query): legend = Legend(id=self.identifier, scale=None) else: legend = Legend(id=self.identifier, scale=query.scale) - if not self._cache.load(legend): + + if not self._cache.load(legend) or (self._cache.load(legend) and query.format == 'json'): legends = [] error_occured = False for client in self.clients: From 4fe32acc55644bc3e11dbc9e76ca904cb36b2773 Mon Sep 17 00:00:00 2001 From: Stijn Blommerde Date: Fri, 16 Sep 2022 19:09:23 +0200 Subject: [PATCH 019/209] remove pytest.old folder --- mapproxy/test/system/pytest.old/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 mapproxy/test/system/pytest.old/__init__.py diff --git a/mapproxy/test/system/pytest.old/__init__.py b/mapproxy/test/system/pytest.old/__init__.py deleted file mode 100644 index e69de29bb..000000000 From 19342c1fb3b84c6bfde36e6b4af901525fc74990 Mon Sep 17 00:00:00 2001 From: Stijn Blommerde Date: Fri, 16 Sep 2022 20:27:14 +0200 Subject: [PATCH 020/209] test with WMS130LegendGraphicRequest --- mapproxy/test/system/test_legendgraphic.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mapproxy/test/system/test_legendgraphic.py b/mapproxy/test/system/test_legendgraphic.py index 41c536bb3..358bbcba0 100644 --- a/mapproxy/test/system/test_legendgraphic.py +++ b/mapproxy/test/system/test_legendgraphic.py @@ -271,19 +271,19 @@ def test_get_legendgraphic_invalid_sld_version_130(self, app): assert validate_with_xsd(xml, xsd_name="wms/1.3.0/exceptions_1_3_0.xsd") def test_get_legendgraphic_json(self, app): - self.common_lg_req_111.params["format"] = "application/json" + self.common_lg_req_130.params["format"] = "application/json" json_data = "{\"Legend\": [{\"title\": \"Give me a json legend!\"}]}" expected_req1 = ( { "path": r"/service?LAYER=foo&SERVICE=WMS&FORMAT=application%2Fjson" "&REQUEST=GetLegendGraphic&" "&VERSION=1.1.1&SLD_VERSION=1.1.0" - }, + }, {"body": json_data.encode(), "headers": {"content-type": "application/json"}}, ) with mock_httpd(("localhost", 42423), [expected_req1]): - resp = app.get(self.common_lg_req_111) + resp = app.get(self.common_lg_req_130) assert resp.content_type == "application/json" json_str = resp.body.decode("utf-8") json_data = json.loads(json_str) - assert json_data['Legend'][0]['title'] == 'Give me a json legend!' + assert json_data['Legend'][0]['title'] == 'Give me a json legend!' \ No newline at end of file From e49200e8ca16e4d1fc04387fa2703ad5bb7a3ad6 Mon Sep 17 00:00:00 2001 From: Stijn Blommerde Date: Sat, 17 Sep 2022 09:39:37 +0200 Subject: [PATCH 021/209] simplify cache condition --- mapproxy/source/wms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapproxy/source/wms.py b/mapproxy/source/wms.py index 0ce379115..149a64b1d 100644 --- a/mapproxy/source/wms.py +++ b/mapproxy/source/wms.py @@ -243,7 +243,7 @@ def get_legend(self, query): else: legend = Legend(id=self.identifier, scale=query.scale) - if not self._cache.load(legend) or (self._cache.load(legend) and query.format == 'json'): + if not self._cache.load(legend) or query.format == 'json': legends = [] error_occured = False for client in self.clients: From d63a7d7ce73f0796f1712139145c277f9781db7f Mon Sep 17 00:00:00 2001 From: Stijn Blommerde Date: Tue, 20 Sep 2022 21:32:43 +0200 Subject: [PATCH 022/209] split mimetype, just to be sure --- mapproxy/client/wms.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mapproxy/client/wms.py b/mapproxy/client/wms.py index 63b4305ff..840db7931 100644 --- a/mapproxy/client/wms.py +++ b/mapproxy/client/wms.py @@ -199,11 +199,12 @@ def __init__(self, request_template, http_client=None): def get_legend(self, query): resp = self._retrieve(query) - self._check_resp(resp, query.format) - if query.format == 'json': + format = split_mime_type(query.format)[1] + self._check_resp(resp, format) + if format == 'json': return resp else: - return ImageSource(resp, image_opts=ImageOptions(format=query.format)) + return ImageSource(resp, image_opts=ImageOptions(format=format)) def _retrieve(self, query): url = self._query_url(query) From 07fa7ca87daca38621acc97b816ae7bb2e55c702 Mon Sep 17 00:00:00 2001 From: Grant Date: Mon, 26 Sep 2022 00:55:22 +0300 Subject: [PATCH 023/209] doc: minor typo updates to configuration.rst Minor typo updates --- doc/configuration.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/configuration.rst b/doc/configuration.rst index 89967ebc7..55bebb5bc 100644 --- a/doc/configuration.rst +++ b/doc/configuration.rst @@ -494,7 +494,7 @@ MapProxy is able to create missing tiles by rescaling tiles from zoom levels bel MapProxy will scale up tiles from one or more zoom levels above (with lower resolutions) if you set ``upscale_tiles`` to 1 or higher. The value configures by how many zoom levels MapProxy can search for a proper tile. Higher values allow more blurry results. -You can use ``upscale_tiles`` if you want to provide tiles or WMS responses in a higher resolution then your available cache. This also works with partially seeded caches, eg. where you have an arial image cache of 20cm, with some areas also in 10cm resolution. ``upscale_tiles`` allows you to provide responses for 10cm requests in all areas, allways returning the best available data. +You can use ``upscale_tiles`` if you want to provide tiles or WMS responses in a higher resolution then your available cache. This also works with partially seeded caches, eg. where you have an aerial image cache of 20cm, with some areas also in 10cm resolution. ``upscale_tiles`` allows you to provide responses for 10cm requests in all areas, always returning the best available data. MapProxy will scale down tiles from one or more zoom levels below (with higher resolutions) if you set ``downscale_tiles`` to 1 or higher. The value configures by how many zoom levels MapProxy can search for a proper tile. Note that the number of tiles growth exponentialy. Typically, a single tile can be downscaled from four tiles of the next zoom level. Downscaling from two levels below requires 16 tiles, three levels below requires 64, etc.. A larger WMS request can quickly accumulate thousands of tiles required for downscaling. It is therefore `not` recommended to use ``downscale_tiles`` values larger then one. From 111e0e9bf17192265465e9fe2d65ce51954d7946 Mon Sep 17 00:00:00 2001 From: Denis Rykov Date: Fri, 30 Sep 2022 09:21:51 +0200 Subject: [PATCH 024/209] Remove 'six' from dependencies --- mapproxy/util/ext/wmsparse/util.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mapproxy/util/ext/wmsparse/util.py b/mapproxy/util/ext/wmsparse/util.py index 16d160cd2..86bf86e0a 100644 --- a/mapproxy/util/ext/wmsparse/util.py +++ b/mapproxy/util/ext/wmsparse/util.py @@ -13,7 +13,7 @@ import re import datetime -from six import string_types +from mapproxy.compat import string_type from mapproxy.util.ext.wmsparse.duration import parse_datetime,Duration,ISO8601Error from decimal import Decimal import calendar @@ -47,7 +47,7 @@ def parse_duration(datestring): -PYYYY-DDDThh:mm:ss extended alternative ordinal date format """ - if not isinstance(datestring, string_types): + if not isinstance(datestring, string_type): raise TypeError("Expecting a string %r" % datestring) match = ISO8601_INTERVAL_REGEX.match(datestring) if not match: From 90f62db41ef4b9394cadad0c81cc0e3ea139ffbd Mon Sep 17 00:00:00 2001 From: Boris Manojlovic Date: Sun, 4 Dec 2022 10:14:45 +0100 Subject: [PATCH 025/209] add auth to redis --- mapproxy/cache/redis.py | 4 ++-- mapproxy/config/spec.py | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/mapproxy/cache/redis.py b/mapproxy/cache/redis.py index 2c9e40787..2d76548fe 100644 --- a/mapproxy/cache/redis.py +++ b/mapproxy/cache/redis.py @@ -35,14 +35,14 @@ class RedisCache(TileCacheBase): - def __init__(self, host, port, prefix, ttl=0, db=0): + def __init__(self, host, port, username, password, prefix, ttl=0, db=0): if redis is None: raise ImportError("Redis backend requires 'redis' package.") self.prefix = prefix self.lock_cache_id = 'redis-' + hashlib.md5((host + str(port) + prefix + str(db)).encode('utf-8')).hexdigest() self.ttl = ttl - self.r = redis.StrictRedis(host=host, port=port, db=db) + self.r = redis.StrictRedis(host=host, port=port, username=username, password=password, db=db) def _key(self, tile): x, y, z = tile.coord diff --git a/mapproxy/config/spec.py b/mapproxy/config/spec.py index 31d9ba11a..8a4b43c7e 100644 --- a/mapproxy/config/spec.py +++ b/mapproxy/config/spec.py @@ -174,6 +174,8 @@ def validate_options(conf_dict): 'redis': { 'host': str(), 'port': int(), + 'password': str(), + 'username': str(), 'db': int(), 'prefix': str(), 'default_ttl': int(), From 9f64935201bc0155469cdd63fb7c614a203bc440 Mon Sep 17 00:00:00 2001 From: Boris Manojlovic Date: Sun, 4 Dec 2022 10:20:40 +0100 Subject: [PATCH 026/209] add empty defaults --- mapproxy/cache/redis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapproxy/cache/redis.py b/mapproxy/cache/redis.py index 2d76548fe..57d8328bc 100644 --- a/mapproxy/cache/redis.py +++ b/mapproxy/cache/redis.py @@ -35,7 +35,7 @@ class RedisCache(TileCacheBase): - def __init__(self, host, port, username, password, prefix, ttl=0, db=0): + def __init__(self, host, port, prefix, ttl=0, db=0, username="", password=""): if redis is None: raise ImportError("Redis backend requires 'redis' package.") From 86b9d2ebe0f20682b9e0b36774cb774ccba2b3ba Mon Sep 17 00:00:00 2001 From: Boris Manojlovic Date: Mon, 5 Dec 2022 08:47:01 +0100 Subject: [PATCH 027/209] finalize redis auth support and document it --- doc/caches.rst | 8 ++++++++ mapproxy/cache/redis.py | 5 +++-- mapproxy/config/loader.py | 4 ++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/doc/caches.rst b/doc/caches.rst index da13084ad..e1370b1e9 100644 --- a/doc/caches.rst +++ b/doc/caches.rst @@ -363,6 +363,12 @@ Available options: ``db``: Number of the Redis database. Please refer to the Redis documentation. Defaults to `0`. +``username``: + Optional authentication username. No defaults. + +``password``: + Optional authentication password. No defaults. + ``prefix``: The prefix added to each tile-key in the Redis cache. Used to distinguish tiles from different caches and grids. Defaults to ``cache-name_grid-name``. @@ -381,6 +387,8 @@ Example grids: [mygrid] cache: type: redis + username: mapproxy + password: iamgreatpassword default_ttl: 600 diff --git a/mapproxy/cache/redis.py b/mapproxy/cache/redis.py index 57d8328bc..41d034305 100644 --- a/mapproxy/cache/redis.py +++ b/mapproxy/cache/redis.py @@ -35,12 +35,13 @@ class RedisCache(TileCacheBase): - def __init__(self, host, port, prefix, ttl=0, db=0, username="", password=""): + def __init__(self, host, port, username, password, prefix, ttl=0, db=0): if redis is None: raise ImportError("Redis backend requires 'redis' package.") self.prefix = prefix - self.lock_cache_id = 'redis-' + hashlib.md5((host + str(port) + prefix + str(db)).encode('utf-8')).hexdigest() + # str(username) => if not set defaults to None + self.lock_cache_id = 'redis-' + hashlib.md5((host + str(port) + prefix + str(db) + str(username)).encode('utf-8')).hexdigest() self.ttl = ttl self.r = redis.StrictRedis(host=host, port=port, username=username, password=password, db=db) diff --git a/mapproxy/config/loader.py b/mapproxy/config/loader.py index 179408a4e..6a401a401 100644 --- a/mapproxy/config/loader.py +++ b/mapproxy/config/loader.py @@ -1285,6 +1285,8 @@ def _redis_cache(self, grid_conf, file_ext): port = self.conf['cache'].get('port', 6379) db = self.conf['cache'].get('db', 0) ttl = self.conf['cache'].get('default_ttl', 3600) + username = self.conf['cache'].get('username',None) + password = self.conf['cache'].get('password', None) prefix = self.conf['cache'].get('prefix') if not prefix: @@ -1294,6 +1296,8 @@ def _redis_cache(self, grid_conf, file_ext): host=host, port=port, db=db, + username=username, + password=password, prefix=prefix, ttl=ttl, ) From a723415635ea550d32a800a3298bca3d3ad68f56 Mon Sep 17 00:00:00 2001 From: "blitza@terrrestris.de" Date: Wed, 11 Jan 2023 15:19:11 +0100 Subject: [PATCH 028/209] Add docs for install via docker --- doc/index.rst | 1 + doc/install_docker.rst | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 doc/install_docker.rst diff --git a/doc/index.rst b/doc/index.rst index 9b4149dd5..b0560ba60 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -7,6 +7,7 @@ MapProxy Documentation install install_windows install_osgeo4w + install_docker tutorial configuration services diff --git a/doc/install_docker.rst b/doc/install_docker.rst new file mode 100644 index 000000000..69e093af4 --- /dev/null +++ b/doc/install_docker.rst @@ -0,0 +1,27 @@ +Installation via Docker +======================= + + +There are several inofficial Docker images available on `Docker Hub`_ that provide ready-to-use containers for MapProxy. + +.. _`Docker Hub`: https://hub.docker.com/search?q=mapproxy + + +Quickstart +------------------ + +As for an example the image of `kartoza/mapproxy`_ is used. +Create a directory (e.g. `mapproxy`) for your configuration files and mount it as a volume: + +:: + + docker run --name "mapproxy" -p 8080:8080 -d -t -v `pwd`/mapproxy:/mapproxy kartoza/mapproxy + +Afterwards, the `MapProxy` instance is running on `localhost:8080`. + +I a production environment you might want to put a `nginx`_ in front of the MapProxy container, that serves as a reverse proxy. +See the `GitHub Repository`_ for detailed documentation and example docker-compose files. + +.. _`kartoza/mapproxy`: https://hub.docker.com/r/kartoza/mapproxy +.. _`nginx`: https://nginx.org +.. _`GitHub Repository`: https://github.com/kartoza/docker-mapproxy From 520adc634d367e8b96b3906cba1afbf78d041a5b Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Thu, 12 Jan 2023 10:03:03 +0100 Subject: [PATCH 029/209] Updating the Layer Preview to use OpenLayers 7 --- .../templates/demo/static/OpenLayers.js | 619 ------------------ mapproxy/service/templates/demo/static/ol.css | 345 ++++++++++ mapproxy/service/templates/demo/static/ol.js | 4 + .../templates/demo/static/proj4.min.js | 1 + .../templates/demo/static/proj4defs.js | 1 + .../service/templates/demo/static/site.css | 5 + mapproxy/service/templates/demo/tms_demo.html | 76 ++- mapproxy/service/templates/demo/wms_demo.html | 105 ++- .../service/templates/demo/wmts_demo.html | 97 ++- mapproxy/test/system/test_demo.py | 2 +- 10 files changed, 544 insertions(+), 711 deletions(-) delete mode 100644 mapproxy/service/templates/demo/static/OpenLayers.js create mode 100644 mapproxy/service/templates/demo/static/ol.css create mode 100644 mapproxy/service/templates/demo/static/ol.js create mode 100644 mapproxy/service/templates/demo/static/proj4.min.js create mode 100644 mapproxy/service/templates/demo/static/proj4defs.js diff --git a/mapproxy/service/templates/demo/static/OpenLayers.js b/mapproxy/service/templates/demo/static/OpenLayers.js deleted file mode 100644 index 4269bdd62..000000000 --- a/mapproxy/service/templates/demo/static/OpenLayers.js +++ /dev/null @@ -1,619 +0,0 @@ -/* - - OpenLayers.js -- OpenLayers Map Viewer Library - - Copyright (c) 2006-2012 by OpenLayers Contributors - Published under the 2-clause BSD license. - See http://openlayers.org/dev/license.txt for the full text of the license, and http://openlayers.org/dev/authors.txt for full list of contributors. - - Includes compressed code under the following licenses: - - (For uncompressed versions of the code used, please see the - OpenLayers Github repository: ) - -*/ - -/** - * Contains XMLHttpRequest.js - * Copyright 2007 Sergey Ilinsky (http://www.ilinsky.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - */ - -/** - * OpenLayers.Util.pagePosition is based on Yahoo's getXY method, which is - * Copyright (c) 2006, Yahoo! Inc. - * All rights reserved. - * - * Redistribution and use of this software in source and binary forms, with or - * without modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of Yahoo! Inc. nor the names of its contributors may be - * used to endorse or promote products derived from this software without - * specific prior written permission of Yahoo! Inc. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -var OpenLayers={VERSION_NUMBER:"Release 2.12",singleFile:true,_getScriptLocation:(function(){var r=new RegExp("(^|(.*?\\/))(OpenLayers[^\\/]*?\\.js)(\\?|$)"),s=document.getElementsByTagName('script'),src,m,l="";for(var i=0,len=s.length;i1){var newArgs=[C,P].concat(Array.prototype.slice.call(arguments).slice(1,len-1),F);OpenLayers.inherit.apply(null,newArgs);}else{C.prototype=F;} -return C;};OpenLayers.inherit=function(C,P){var F=function(){};F.prototype=P.prototype;C.prototype=new F;var i,l,o;for(i=2,l=arguments.length;i0?duration:Number.POSITIVE_INFINITY;var id=++counter;var start=+new Date;loops[id]=function(){if(loops[id]&&+new Date-start<=duration){callback();if(loops[id]){requestFrame(loops[id],element);}}else{delete loops[id];}};requestFrame(loops[id],element);return id;} -function stop(id){delete loops[id];} -return{isNative:isNative,requestFrame:requestFrame,start:start,stop:stop};})(window);OpenLayers.Tween=OpenLayers.Class({easing:null,begin:null,finish:null,duration:null,callbacks:null,time:null,animationId:null,playing:false,initialize:function(easing){this.easing=(easing)?easing:OpenLayers.Easing.Expo.easeOut;},start:function(begin,finish,duration,options){this.playing=true;this.begin=begin;this.finish=finish;this.duration=duration;this.callbacks=options.callbacks;this.time=0;OpenLayers.Animation.stop(this.animationId);this.animationId=null;if(this.callbacks&&this.callbacks.start){this.callbacks.start.call(this,this.begin);} -this.animationId=OpenLayers.Animation.start(OpenLayers.Function.bind(this.play,this));},stop:function(){if(!this.playing){return;} -if(this.callbacks&&this.callbacks.done){this.callbacks.done.call(this,this.finish);} -OpenLayers.Animation.stop(this.animationId);this.animationId=null;this.playing=false;},play:function(){var value={};for(var i in this.begin){var b=this.begin[i];var f=this.finish[i];if(b==null||f==null||isNaN(b)||isNaN(f)){throw new TypeError('invalid value for Tween');} -var c=f-b;value[i]=this.easing.apply(this,[this.time,b,c,this.duration]);} -this.time++;if(this.callbacks&&this.callbacks.eachStep){this.callbacks.eachStep.call(this,value);} -if(this.time>this.duration){this.stop();}},CLASS_NAME:"OpenLayers.Tween"});OpenLayers.Easing={CLASS_NAME:"OpenLayers.Easing"};OpenLayers.Easing.Linear={easeIn:function(t,b,c,d){return c*t/d+b;},easeOut:function(t,b,c,d){return c*t/d+b;},easeInOut:function(t,b,c,d){return c*t/d+b;},CLASS_NAME:"OpenLayers.Easing.Linear"};OpenLayers.Easing.Expo={easeIn:function(t,b,c,d){return(t==0)?b:c*Math.pow(2,10*(t/d-1))+b;},easeOut:function(t,b,c,d){return(t==d)?b+c:c*(-Math.pow(2,-10*t/d)+1)+b;},easeInOut:function(t,b,c,d){if(t==0)return b;if(t==d)return b+c;if((t/=d/2)<1)return c/2*Math.pow(2,10*(t-1))+b;return c/2*(-Math.pow(2,-10*--t)+2)+b;},CLASS_NAME:"OpenLayers.Easing.Expo"};OpenLayers.Easing.Quad={easeIn:function(t,b,c,d){return c*(t/=d)*t+b;},easeOut:function(t,b,c,d){return-c*(t/=d)*(t-2)+b;},easeInOut:function(t,b,c,d){if((t/=d/2)<1)return c/2*t*t+b;return-c/2*((--t)*(t-2)-1)+b;},CLASS_NAME:"OpenLayers.Easing.Quad"};OpenLayers.String={startsWith:function(str,sub){return(str.indexOf(sub)==0);},contains:function(str,sub){return(str.indexOf(sub)!=-1);},trim:function(str){return str.replace(/^\s\s*/,'').replace(/\s\s*$/,'');},camelize:function(str){var oStringList=str.split('-');var camelizedString=oStringList[0];for(var i=1,len=oStringList.length;i0){fig=parseFloat(num.toPrecision(sig));} -return fig;},format:function(num,dec,tsep,dsep){dec=(typeof dec!="undefined")?dec:0;tsep=(typeof tsep!="undefined")?tsep:OpenLayers.Number.thousandsSeparator;dsep=(typeof dsep!="undefined")?dsep:OpenLayers.Number.decimalSeparator;if(dec!=null){num=parseFloat(num.toFixed(dec));} -var parts=num.toString().split(".");if(parts.length==1&&dec==null){dec=0;} -var integer=parts[0];if(tsep){var thousands=/(-?[0-9]+)([0-9]{3})/;while(thousands.test(integer)){integer=integer.replace(thousands,"$1"+tsep+"$2");}} -var str;if(dec==0){str=integer;}else{var rem=parts.length>1?parts[1]:"0";if(dec!=null){rem=rem+new Array(dec-rem.length+1).join("0");} -str=integer+dsep+rem;} -return str;}};OpenLayers.Function={bind:function(func,object){var args=Array.prototype.slice.apply(arguments,[2]);return function(){var newArgs=args.concat(Array.prototype.slice.apply(arguments,[0]));return func.apply(object,newArgs);};},bindAsEventListener:function(func,object){return function(event){return func.call(object,event||window.event);};},False:function(){return false;},True:function(){return true;},Void:function(){}};OpenLayers.Array={filter:function(array,callback,caller){var selected=[];if(Array.prototype.filter){selected=array.filter(callback,caller);}else{var len=array.length;if(typeof callback!="function"){throw new TypeError();} -for(var i=0;ithis.right)){this.right=bounds.right;} -if((this.top==null)||(bounds.top>this.top)){this.top=bounds.top;}}}},containsLonLat:function(ll,options){if(typeof options==="boolean"){options={inclusive:options};} -options=options||{};var contains=this.contains(ll.lon,ll.lat,options.inclusive),worldBounds=options.worldBounds;if(worldBounds&&!contains){var worldWidth=worldBounds.getWidth();var worldCenterX=(worldBounds.left+worldBounds.right)/2;var worldsAway=Math.round((ll.lon-worldCenterX)/worldWidth);contains=this.containsLonLat({lon:ll.lon-worldsAway*worldWidth,lat:ll.lat},{inclusive:options.inclusive});} -return contains;},containsPixel:function(px,inclusive){return this.contains(px.x,px.y,inclusive);},contains:function(x,y,inclusive){if(inclusive==null){inclusive=true;} -if(x==null||y==null){return false;} -x=OpenLayers.Util.toFloat(x);y=OpenLayers.Util.toFloat(y);var contains=false;if(inclusive){contains=((x>=this.left)&&(x<=this.right)&&(y>=this.bottom)&&(y<=this.top));}else{contains=((x>this.left)&&(xthis.bottom)&&(y=self.bottom)&&(bounds.bottom<=self.top))||((self.bottom>=bounds.bottom)&&(self.bottom<=bounds.top)));var inTop=(((bounds.top>=self.bottom)&&(bounds.top<=self.top))||((self.top>bounds.bottom)&&(self.top=self.left)&&(bounds.left<=self.right))||((self.left>=bounds.left)&&(self.left<=bounds.right)));var inRight=(((bounds.right>=self.left)&&(bounds.right<=self.right))||((self.right>=bounds.left)&&(self.right<=bounds.right)));intersects=((inBottom||inTop)&&(inLeft||inRight));} -if(options.worldBounds&&!intersects){var world=options.worldBounds;var width=world.getWidth();var selfCrosses=!world.containsBounds(self);var boundsCrosses=!world.containsBounds(bounds);if(selfCrosses&&!boundsCrosses){bounds=bounds.add(-width,0);intersects=self.intersectsBounds(bounds,{inclusive:options.inclusive});}else if(boundsCrosses&&!selfCrosses){self=self.add(-width,0);intersects=bounds.intersectsBounds(self,{inclusive:options.inclusive});}} -return intersects;},containsBounds:function(bounds,partial,inclusive){if(partial==null){partial=false;} -if(inclusive==null){inclusive=true;} -var bottomLeft=this.contains(bounds.left,bounds.bottom,inclusive);var bottomRight=this.contains(bounds.right,bounds.bottom,inclusive);var topLeft=this.contains(bounds.left,bounds.top,inclusive);var topRight=this.contains(bounds.right,bounds.top,inclusive);return(partial)?(bottomLeft||bottomRight||topLeft||topRight):(bottomLeft&&bottomRight&&topLeft&&topRight);},determineQuadrant:function(lonlat){var quadrant="";var center=this.getCenterLonLat();quadrant+=(lonlat.lat=maxExtent.right&&newBounds.right>maxExtent.right){newBounds=newBounds.add(-width,0);} -var newLeft=newBounds.left+leftTolerance;if(newLeftmaxExtent.left&&newBounds.right-rightTolerance>maxExtent.right){newBounds=newBounds.add(-width,0);}} -return newBounds;},CLASS_NAME:"OpenLayers.Bounds"});OpenLayers.Bounds.fromString=function(str,reverseAxisOrder){var bounds=str.split(",");return OpenLayers.Bounds.fromArray(bounds,reverseAxisOrder);};OpenLayers.Bounds.fromArray=function(bbox,reverseAxisOrder){return reverseAxisOrder===true?new OpenLayers.Bounds(bbox[1],bbox[0],bbox[3],bbox[2]):new OpenLayers.Bounds(bbox[0],bbox[1],bbox[2],bbox[3]);};OpenLayers.Bounds.fromSize=function(size){return new OpenLayers.Bounds(0,size.h,size.w,0);};OpenLayers.Bounds.oppositeQuadrant=function(quadrant){var opp="";opp+=(quadrant.charAt(0)=='t')?'b':'t';opp+=(quadrant.charAt(1)=='l')?'r':'l';return opp;};OpenLayers.Element={visible:function(element){return OpenLayers.Util.getElement(element).style.display!='none';},toggle:function(){for(var i=0,len=arguments.length;imaxExtent.right){newLonLat.lon-=maxExtent.getWidth();}} -return newLonLat;},CLASS_NAME:"OpenLayers.LonLat"});OpenLayers.LonLat.fromString=function(str){var pair=str.split(",");return new OpenLayers.LonLat(pair[0],pair[1]);};OpenLayers.LonLat.fromArray=function(arr){var gotArr=OpenLayers.Util.isArray(arr),lon=gotArr&&arr[0],lat=gotArr&&arr[1];return new OpenLayers.LonLat(lon,lat);};OpenLayers.Pixel=OpenLayers.Class({x:0.0,y:0.0,initialize:function(x,y){this.x=parseFloat(x);this.y=parseFloat(y);},toString:function(){return("x="+this.x+",y="+this.y);},clone:function(){return new OpenLayers.Pixel(this.x,this.y);},equals:function(px){var equals=false;if(px!=null){equals=((this.x==px.x&&this.y==px.y)||(isNaN(this.x)&&isNaN(this.y)&&isNaN(px.x)&&isNaN(px.y)));} -return equals;},distanceTo:function(px){return Math.sqrt(Math.pow(this.x-px.x,2)+ -Math.pow(this.y-px.y,2));},add:function(x,y){if((x==null)||(y==null)){throw new TypeError('Pixel.add cannot receive null values');} -return new OpenLayers.Pixel(this.x+x,this.y+y);},offset:function(px){var newPx=this.clone();if(px){newPx=this.add(px.x,px.y);} -return newPx;},CLASS_NAME:"OpenLayers.Pixel"});OpenLayers.Size=OpenLayers.Class({w:0.0,h:0.0,initialize:function(w,h){this.w=parseFloat(w);this.h=parseFloat(h);},toString:function(){return("w="+this.w+",h="+this.h);},clone:function(){return new OpenLayers.Size(this.w,this.h);},equals:function(sz){var equals=false;if(sz!=null){equals=((this.w==sz.w&&this.h==sz.h)||(isNaN(this.w)&&isNaN(this.h)&&isNaN(sz.w)&&isNaN(sz.h)));} -return equals;},CLASS_NAME:"OpenLayers.Size"});OpenLayers.Console={log:function(){},debug:function(){},info:function(){},warn:function(){},error:function(){},userError:function(error){alert(error);},assert:function(){},dir:function(){},dirxml:function(){},trace:function(){},group:function(){},groupEnd:function(){},time:function(){},timeEnd:function(){},profile:function(){},profileEnd:function(){},count:function(){},CLASS_NAME:"OpenLayers.Console"};(function(){var scripts=document.getElementsByTagName("script");for(var i=0,len=scripts.length;i=0;i--){if(array[i]==item){array.splice(i,1);}} -return array;};OpenLayers.Util.indexOf=function(array,obj){if(typeof array.indexOf=="function"){return array.indexOf(obj);}else{for(var i=0,len=array.length;i=0.0&&parseFloat(opacity)<1.0){element.style.filter='alpha(opacity='+(opacity*100)+')';element.style.opacity=opacity;}else if(parseFloat(opacity)==1.0){element.style.filter='';element.style.opacity='';}};OpenLayers.Util.createDiv=function(id,px,sz,imgURL,position,border,overflow,opacity){var dom=document.createElement('div');if(imgURL){dom.style.backgroundImage='url('+imgURL+')';} -if(!id){id=OpenLayers.Util.createUniqueID("OpenLayersDiv");} -if(!position){position="absolute";} -OpenLayers.Util.modifyDOMElement(dom,id,px,sz,position,border,overflow,opacity);return dom;};OpenLayers.Util.createImage=function(id,px,sz,imgURL,position,border,opacity,delayDisplay){var image=document.createElement("img");if(!id){id=OpenLayers.Util.createUniqueID("OpenLayersDiv");} -if(!position){position="relative";} -OpenLayers.Util.modifyDOMElement(image,id,px,sz,position,border,null,opacity);if(delayDisplay){image.style.display="none";function display(){image.style.display="";OpenLayers.Event.stopObservingElement(image);} -OpenLayers.Event.observe(image,"load",display);OpenLayers.Event.observe(image,"error",display);} -image.style.alt=id;image.galleryImg="no";if(imgURL){image.src=imgURL;} -return image;};OpenLayers.IMAGE_RELOAD_ATTEMPTS=0;OpenLayers.Util.alphaHackNeeded=null;OpenLayers.Util.alphaHack=function(){if(OpenLayers.Util.alphaHackNeeded==null){var arVersion=navigator.appVersion.split("MSIE");var version=parseFloat(arVersion[1]);var filter=false;try{filter=!!(document.body.filters);}catch(e){} -OpenLayers.Util.alphaHackNeeded=(filter&&(version>=5.5)&&(version<7));} -return OpenLayers.Util.alphaHackNeeded;};OpenLayers.Util.modifyAlphaImageDiv=function(div,id,px,sz,imgURL,position,border,sizing,opacity){OpenLayers.Util.modifyDOMElement(div,id,px,sz,position,null,null,opacity);var img=div.childNodes[0];if(imgURL){img.src=imgURL;} -OpenLayers.Util.modifyDOMElement(img,div.id+"_innerImage",null,sz,"relative",border);if(OpenLayers.Util.alphaHack()){if(div.style.display!="none"){div.style.display="inline-block";} -if(sizing==null){sizing="scale";} -div.style.filter="progid:DXImageTransform.Microsoft"+".AlphaImageLoader(src='"+img.src+"', "+"sizingMethod='"+sizing+"')";if(parseFloat(div.style.opacity)>=0.0&&parseFloat(div.style.opacity)<1.0){div.style.filter+=" alpha(opacity="+div.style.opacity*100+")";} -img.style.filter="alpha(opacity=0)";}};OpenLayers.Util.createAlphaImageDiv=function(id,px,sz,imgURL,position,border,sizing,opacity,delayDisplay){var div=OpenLayers.Util.createDiv();var img=OpenLayers.Util.createImage(null,null,null,null,null,null,null,delayDisplay);img.className="olAlphaImg";div.appendChild(img);OpenLayers.Util.modifyAlphaImageDiv(div,id,px,sz,imgURL,position,border,sizing,opacity);return div;};OpenLayers.Util.upperCaseObject=function(object){var uObject={};for(var key in object){uObject[key.toUpperCase()]=object[key];} -return uObject;};OpenLayers.Util.applyDefaults=function(to,from){to=to||{};var fromIsEvt=typeof window.Event=="function"&&from instanceof window.Event;for(var key in from){if(to[key]===undefined||(!fromIsEvt&&from.hasOwnProperty&&from.hasOwnProperty(key)&&!to.hasOwnProperty(key))){to[key]=from[key];}} -if(!fromIsEvt&&from&&from.hasOwnProperty&&from.hasOwnProperty('toString')&&!to.hasOwnProperty('toString')){to.toString=from.toString;} -return to;};OpenLayers.Util.getParameterString=function(params){var paramsArray=[];for(var key in params){var value=params[key];if((value!=null)&&(typeof value!='function')){var encodedValue;if(typeof value=='object'&&value.constructor==Array){var encodedItemArray=[];var item;for(var itemIndex=0,len=value.length;itemIndex1e-12&&--iterLimit>0){var sinLambda=Math.sin(lambda),cosLambda=Math.cos(lambda);var sinSigma=Math.sqrt((cosU2*sinLambda)*(cosU2*sinLambda)+ -(cosU1*sinU2-sinU1*cosU2*cosLambda)*(cosU1*sinU2-sinU1*cosU2*cosLambda));if(sinSigma==0){return 0;} -var cosSigma=sinU1*sinU2+cosU1*cosU2*cosLambda;var sigma=Math.atan2(sinSigma,cosSigma);var alpha=Math.asin(cosU1*cosU2*sinLambda/sinSigma);var cosSqAlpha=Math.cos(alpha)*Math.cos(alpha);var cos2SigmaM=cosSigma-2*sinU1*sinU2/cosSqAlpha;var C=f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha));lambdaP=lambda;lambda=L+(1-C)*f*Math.sin(alpha)*(sigma+C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)));} -if(iterLimit==0){return NaN;} -var uSq=cosSqAlpha*(a*a-b*b)/(b*b);var A=1+uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq)));var B=uSq/1024*(256+uSq*(-128+uSq*(74-47*uSq)));var deltaSigma=B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)- -B/6*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM*cos2SigmaM)));var s=b*A*(sigma-deltaSigma);var d=s.toFixed(3)/1000;return d;};OpenLayers.Util.destinationVincenty=function(lonlat,brng,dist){var u=OpenLayers.Util;var ct=u.VincentyConstants;var a=ct.a,b=ct.b,f=ct.f;var lon1=lonlat.lon;var lat1=lonlat.lat;var s=dist;var alpha1=u.rad(brng);var sinAlpha1=Math.sin(alpha1);var cosAlpha1=Math.cos(alpha1);var tanU1=(1-f)*Math.tan(u.rad(lat1));var cosU1=1/Math.sqrt((1+tanU1*tanU1)),sinU1=tanU1*cosU1;var sigma1=Math.atan2(tanU1,cosAlpha1);var sinAlpha=cosU1*sinAlpha1;var cosSqAlpha=1-sinAlpha*sinAlpha;var uSq=cosSqAlpha*(a*a-b*b)/(b*b);var A=1+uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq)));var B=uSq/1024*(256+uSq*(-128+uSq*(74-47*uSq)));var sigma=s/(b*A),sigmaP=2*Math.PI;while(Math.abs(sigma-sigmaP)>1e-12){var cos2SigmaM=Math.cos(2*sigma1+sigma);var sinSigma=Math.sin(sigma);var cosSigma=Math.cos(sigma);var deltaSigma=B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)- -B/6*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM*cos2SigmaM)));sigmaP=sigma;sigma=s/(b*A)+deltaSigma;} -var tmp=sinU1*sinSigma-cosU1*cosSigma*cosAlpha1;var lat2=Math.atan2(sinU1*cosSigma+cosU1*sinSigma*cosAlpha1,(1-f)*Math.sqrt(sinAlpha*sinAlpha+tmp*tmp));var lambda=Math.atan2(sinSigma*sinAlpha1,cosU1*cosSigma-sinU1*sinSigma*cosAlpha1);var C=f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha));var L=lambda-(1-C)*f*sinAlpha*(sigma+C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)));var revAz=Math.atan2(sinAlpha,-tmp);return new OpenLayers.LonLat(lon1+u.deg(L),u.deg(lat2));};OpenLayers.Util.getParameters=function(url){url=(url===null||url===undefined)?window.location.href:url;var paramsString="";if(OpenLayers.String.contains(url,'?')){var start=url.indexOf('?')+1;var end=OpenLayers.String.contains(url,"#")?url.indexOf('#'):url.length;paramsString=url.substring(start,end);} -var parameters={};var pairs=paramsString.split(/[&;]/);for(var i=0,len=pairs.length;i1.0)?(1.0/scale):scale;return normScale;};OpenLayers.Util.getResolutionFromScale=function(scale,units){var resolution;if(scale){if(units==null){units="degrees";} -var normScale=OpenLayers.Util.normalizeScale(scale);resolution=1/(normScale*OpenLayers.INCHES_PER_UNIT[units]*OpenLayers.DOTS_PER_INCH);} -return resolution;};OpenLayers.Util.getScaleFromResolution=function(resolution,units){if(units==null){units="degrees";} -var scale=resolution*OpenLayers.INCHES_PER_UNIT[units]*OpenLayers.DOTS_PER_INCH;return scale;};OpenLayers.Util.pagePosition=function(forElement){var pos=[0,0];var viewportElement=OpenLayers.Util.getViewportElement();if(!forElement||forElement==window||forElement==viewportElement){return pos;} -var BUGGY_GECKO_BOX_OBJECT=OpenLayers.IS_GECKO&&document.getBoxObjectFor&&OpenLayers.Element.getStyle(forElement,'position')=='absolute'&&(forElement.style.top==''||forElement.style.left=='');var parent=null;var box;if(forElement.getBoundingClientRect){box=forElement.getBoundingClientRect();var scrollTop=viewportElement.scrollTop;var scrollLeft=viewportElement.scrollLeft;pos[0]=box.left+scrollLeft;pos[1]=box.top+scrollTop;}else if(document.getBoxObjectFor&&!BUGGY_GECKO_BOX_OBJECT){box=document.getBoxObjectFor(forElement);var vpBox=document.getBoxObjectFor(viewportElement);pos[0]=box.screenX-vpBox.screenX;pos[1]=box.screenY-vpBox.screenY;}else{pos[0]=forElement.offsetLeft;pos[1]=forElement.offsetTop;parent=forElement.offsetParent;if(parent!=forElement){while(parent){pos[0]+=parent.offsetLeft;pos[1]+=parent.offsetTop;parent=parent.offsetParent;}} -var browser=OpenLayers.BROWSER_NAME;if(browser=="opera"||(browser=="safari"&&OpenLayers.Element.getStyle(forElement,'position')=='absolute')){pos[1]-=document.body.offsetTop;} -parent=forElement.offsetParent;while(parent&&parent!=document.body){pos[0]-=parent.scrollLeft;if(browser!="opera"||parent.tagName!='TR'){pos[1]-=parent.scrollTop;} -parent=parent.offsetParent;}} -return pos;};OpenLayers.Util.getViewportElement=function(){var viewportElement=arguments.callee.viewportElement;if(viewportElement==undefined){viewportElement=(OpenLayers.BROWSER_NAME=="msie"&&document.compatMode!='CSS1Compat')?document.body:document.documentElement;arguments.callee.viewportElement=viewportElement;} -return viewportElement;};OpenLayers.Util.isEquivalentUrl=function(url1,url2,options){options=options||{};OpenLayers.Util.applyDefaults(options,{ignoreCase:true,ignorePort80:true,ignoreHash:true});var urlObj1=OpenLayers.Util.createUrlObject(url1,options);var urlObj2=OpenLayers.Util.createUrlObject(url2,options);for(var key in urlObj1){if(key!=="args"){if(urlObj1[key]!=urlObj2[key]){return false;}}} -for(var key in urlObj1.args){if(urlObj1.args[key]!=urlObj2.args[key]){return false;} -delete urlObj2.args[key];} -for(var key in urlObj2.args){return false;} -return true;};OpenLayers.Util.createUrlObject=function(url,options){options=options||{};if(!(/^\w+:\/\//).test(url)){var loc=window.location;var port=loc.port?":"+loc.port:"";var fullUrl=loc.protocol+"//"+loc.host.split(":").shift()+port;if(url.indexOf("/")===0){url=fullUrl+url;}else{var parts=loc.pathname.split("/");parts.pop();url=fullUrl+parts.join("/")+"/"+url;}} -if(options.ignoreCase){url=url.toLowerCase();} -var a=document.createElement('a');a.href=url;var urlObject={};urlObject.host=a.host.split(":").shift();urlObject.protocol=a.protocol;if(options.ignorePort80){urlObject.port=(a.port=="80"||a.port=="0")?"":a.port;}else{urlObject.port=(a.port==""||a.port=="0")?"80":a.port;} -urlObject.hash=(options.ignoreHash||a.hash==="#")?"":a.hash;var queryString=a.search;if(!queryString){var qMark=url.indexOf("?");queryString=(qMark!=-1)?url.substr(qMark):"";} -urlObject.args=OpenLayers.Util.getParameters(queryString);urlObject.pathname=(a.pathname.charAt(0)=="/")?a.pathname:"/"+a.pathname;return urlObject;};OpenLayers.Util.removeTail=function(url){var head=null;var qMark=url.indexOf("?");var hashMark=url.indexOf("#");if(qMark==-1){head=(hashMark!=-1)?url.substr(0,hashMark):url;}else{head=(hashMark!=-1)?url.substr(0,Math.min(qMark,hashMark)):url.substr(0,qMark);} -return head;};OpenLayers.IS_GECKO=(function(){var ua=navigator.userAgent.toLowerCase();return ua.indexOf("webkit")==-1&&ua.indexOf("gecko")!=-1;})();OpenLayers.CANVAS_SUPPORTED=(function(){var elem=document.createElement('canvas');return!!(elem.getContext&&elem.getContext('2d'));})();OpenLayers.BROWSER_NAME=(function(){var name="";var ua=navigator.userAgent.toLowerCase();if(ua.indexOf("opera")!=-1){name="opera";}else if(ua.indexOf("msie")!=-1){name="msie";}else if(ua.indexOf("safari")!=-1){name="safari";}else if(ua.indexOf("mozilla")!=-1){if(ua.indexOf("firefox")!=-1){name="firefox";}else{name="mozilla";}} -return name;})();OpenLayers.Util.getBrowserName=function(){return OpenLayers.BROWSER_NAME;};OpenLayers.Util.getRenderedDimensions=function(contentHTML,size,options){var w,h;var container=document.createElement("div");container.style.visibility="hidden";var containerElement=(options&&options.containerElement)?options.containerElement:document.body;var parentHasPositionAbsolute=false;var superContainer=null;var parent=containerElement;while(parent&&parent.tagName.toLowerCase()!="body"){var parentPosition=OpenLayers.Element.getStyle(parent,"position");if(parentPosition=="absolute"){parentHasPositionAbsolute=true;break;}else if(parentPosition&&parentPosition!="static"){break;} -parent=parent.parentNode;} -if(parentHasPositionAbsolute&&(containerElement.clientHeight===0||containerElement.clientWidth===0)){superContainer=document.createElement("div");superContainer.style.visibility="hidden";superContainer.style.position="absolute";superContainer.style.overflow="visible";superContainer.style.width=document.body.clientWidth+"px";superContainer.style.height=document.body.clientHeight+"px";superContainer.appendChild(container);} -container.style.position="absolute";if(size){if(size.w){w=size.w;container.style.width=w+"px";}else if(size.h){h=size.h;container.style.height=h+"px";}} -if(options&&options.displayClass){container.className=options.displayClass;} -var content=document.createElement("div");content.innerHTML=contentHTML;content.style.overflow="visible";if(content.childNodes){for(var i=0,l=content.childNodes.length;i=60){coordinateseconds-=60;coordinateminutes+=1;if(coordinateminutes>=60){coordinateminutes-=60;coordinatedegrees+=1;}} -if(coordinatedegrees<10){coordinatedegrees="0"+coordinatedegrees;} -var str=coordinatedegrees+"\u00B0";if(dmsOption.indexOf('dm')>=0){if(coordinateminutes<10){coordinateminutes="0"+coordinateminutes;} -str+=coordinateminutes+"'";if(dmsOption.indexOf('dms')>=0){if(coordinateseconds<10){coordinateseconds="0"+coordinateseconds;} -str+=coordinateseconds+'"';}} -if(axis=="lon"){str+=coordinate<0?OpenLayers.i18n("W"):OpenLayers.i18n("E");}else{str+=coordinate<0?OpenLayers.i18n("S"):OpenLayers.i18n("N");} -return str;};OpenLayers.Event={observers:false,KEY_SPACE:32,KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,element:function(event){return event.target||event.srcElement;},isSingleTouch:function(event){return event.touches&&event.touches.length==1;},isMultiTouch:function(event){return event.touches&&event.touches.length>1;},isLeftClick:function(event){return(((event.which)&&(event.which==1))||((event.button)&&(event.button==1)));},isRightClick:function(event){return(((event.which)&&(event.which==3))||((event.button)&&(event.button==2)));},stop:function(event,allowDefault){if(!allowDefault){if(event.preventDefault){event.preventDefault();}else{event.returnValue=false;}} -if(event.stopPropagation){event.stopPropagation();}else{event.cancelBubble=true;}},findElement:function(event,tagName){var element=OpenLayers.Event.element(event);while(element.parentNode&&(!element.tagName||(element.tagName.toUpperCase()!=tagName.toUpperCase()))){element=element.parentNode;} -return element;},observe:function(elementParam,name,observer,useCapture){var element=OpenLayers.Util.getElement(elementParam);useCapture=useCapture||false;if(name=='keypress'&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.attachEvent)){name='keydown';} -if(!this.observers){this.observers={};} -if(!element._eventCacheID){var idPrefix="eventCacheID_";if(element.id){idPrefix=element.id+"_"+idPrefix;} -element._eventCacheID=OpenLayers.Util.createUniqueID(idPrefix);} -var cacheID=element._eventCacheID;if(!this.observers[cacheID]){this.observers[cacheID]=[];} -this.observers[cacheID].push({'element':element,'name':name,'observer':observer,'useCapture':useCapture});if(element.addEventListener){element.addEventListener(name,observer,useCapture);}else if(element.attachEvent){element.attachEvent('on'+name,observer);}},stopObservingElement:function(elementParam){var element=OpenLayers.Util.getElement(elementParam);var cacheID=element._eventCacheID;this._removeElementObservers(OpenLayers.Event.observers[cacheID]);},_removeElementObservers:function(elementObservers){if(elementObservers){for(var i=elementObservers.length-1;i>=0;i--){var entry=elementObservers[i];var args=new Array(entry.element,entry.name,entry.observer,entry.useCapture);var removed=OpenLayers.Event.stopObserving.apply(this,args);}}},stopObserving:function(elementParam,name,observer,useCapture){useCapture=useCapture||false;var element=OpenLayers.Util.getElement(elementParam);var cacheID=element._eventCacheID;if(name=='keypress'){if(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.detachEvent){name='keydown';}} -var foundEntry=false;var elementObservers=OpenLayers.Event.observers[cacheID];if(elementObservers){var i=0;while(!foundEntry&&i=0;--i){map(mercator[i],geographic);} -for(i=geographic.length-1;i>=0;--i){map(geographic[i],mercator);}})();OpenLayers.Map=OpenLayers.Class({Z_INDEX_BASE:{BaseLayer:100,Overlay:325,Feature:725,Popup:750,Control:1000},id:null,fractionalZoom:false,events:null,allOverlays:false,div:null,dragging:false,size:null,viewPortDiv:null,layerContainerOrigin:null,layerContainerDiv:null,layers:null,controls:null,popups:null,baseLayer:null,center:null,resolution:null,zoom:0,panRatio:1.5,options:null,tileSize:null,projection:"EPSG:4326",units:null,resolutions:null,maxResolution:null,minResolution:null,maxScale:null,minScale:null,maxExtent:null,minExtent:null,restrictedExtent:null,numZoomLevels:16,theme:null,displayProjection:null,fallThrough:true,panTween:null,eventListeners:null,panMethod:OpenLayers.Easing.Expo.easeOut,panDuration:50,paddingForPopups:null,minPx:null,maxPx:null,initialize:function(div,options){if(arguments.length===1&&typeof div==="object"){options=div;div=options&&options.div;} -this.tileSize=new OpenLayers.Size(OpenLayers.Map.TILE_WIDTH,OpenLayers.Map.TILE_HEIGHT);this.paddingForPopups=new OpenLayers.Bounds(15,15,15,15);this.theme=OpenLayers._getScriptLocation()+'theme/default/style.css';this.options=OpenLayers.Util.extend({},options);OpenLayers.Util.extend(this,options);var projCode=this.projection instanceof OpenLayers.Projection?this.projection.projCode:this.projection;OpenLayers.Util.applyDefaults(this,OpenLayers.Projection.defaults[projCode]);if(this.maxExtent&&!(this.maxExtent instanceof OpenLayers.Bounds)){this.maxExtent=new OpenLayers.Bounds(this.maxExtent);} -if(this.minExtent&&!(this.minExtent instanceof OpenLayers.Bounds)){this.minExtent=new OpenLayers.Bounds(this.minExtent);} -if(this.restrictedExtent&&!(this.restrictedExtent instanceof OpenLayers.Bounds)){this.restrictedExtent=new OpenLayers.Bounds(this.restrictedExtent);} -if(this.center&&!(this.center instanceof OpenLayers.LonLat)){this.center=new OpenLayers.LonLat(this.center);} -this.layers=[];this.id=OpenLayers.Util.createUniqueID("OpenLayers.Map_");this.div=OpenLayers.Util.getElement(div);if(!this.div){this.div=document.createElement("div");this.div.style.height="1px";this.div.style.width="1px";} -OpenLayers.Element.addClass(this.div,'olMap');var id=this.id+"_OpenLayers_ViewPort";this.viewPortDiv=OpenLayers.Util.createDiv(id,null,null,null,"relative",null,"hidden");this.viewPortDiv.style.width="100%";this.viewPortDiv.style.height="100%";this.viewPortDiv.className="olMapViewport";this.div.appendChild(this.viewPortDiv);this.events=new OpenLayers.Events(this,this.viewPortDiv,null,this.fallThrough,{includeXY:true});id=this.id+"_OpenLayers_Container";this.layerContainerDiv=OpenLayers.Util.createDiv(id);this.layerContainerDiv.style.width='100px';this.layerContainerDiv.style.height='100px';this.layerContainerDiv.style.zIndex=this.Z_INDEX_BASE['Popup']-1;this.viewPortDiv.appendChild(this.layerContainerDiv);this.updateSize();if(this.eventListeners instanceof Object){this.events.on(this.eventListeners);} -if(parseFloat(navigator.appVersion.split("MSIE")[1])<9){this.events.register("resize",this,this.updateSize);}else{this.updateSizeDestroy=OpenLayers.Function.bind(this.updateSize,this);OpenLayers.Event.observe(window,'resize',this.updateSizeDestroy);} -if(this.theme){var addNode=true;var nodes=document.getElementsByTagName('link');for(var i=0,len=nodes.length;i=0;--i){this.controls[i].destroy();} -this.controls=null;} -if(this.layers!=null){for(var i=this.layers.length-1;i>=0;--i){this.layers[i].destroy(false);} -this.layers=null;} -if(this.viewPortDiv){this.div.removeChild(this.viewPortDiv);} -this.viewPortDiv=null;if(this.eventListeners){this.events.un(this.eventListeners);this.eventListeners=null;} -this.events.destroy();this.events=null;this.options=null;},setOptions:function(options){var updatePxExtent=this.minPx&&options.restrictedExtent!=this.restrictedExtent;OpenLayers.Util.extend(this,options);updatePxExtent&&this.moveTo(this.getCachedCenter(),this.zoom,{forceZoomChange:true});},getTileSize:function(){return this.tileSize;},getBy:function(array,property,match){var test=(typeof match.test=="function");var found=OpenLayers.Array.filter(this[array],function(item){return item[property]==match||(test&&match.test(item[property]));});return found;},getLayersBy:function(property,match){return this.getBy("layers",property,match);},getLayersByName:function(match){return this.getLayersBy("name",match);},getLayersByClass:function(match){return this.getLayersBy("CLASS_NAME",match);},getControlsBy:function(property,match){return this.getBy("controls",property,match);},getControlsByClass:function(match){return this.getControlsBy("CLASS_NAME",match);},getLayer:function(id){var foundLayer=null;for(var i=0,len=this.layers.length;ithis.layers.length){idx=this.layers.length;} -if(base!=idx){this.layers.splice(base,1);this.layers.splice(idx,0,layer);for(var i=0,len=this.layers.length;i=0;--i){this.removePopup(this.popups[i]);}} -popup.map=this;this.popups.push(popup);var popupDiv=popup.draw();if(popupDiv){popupDiv.style.zIndex=this.Z_INDEX_BASE['Popup']+ -this.popups.length;this.layerContainerDiv.appendChild(popupDiv);}},removePopup:function(popup){OpenLayers.Util.removeItem(this.popups,popup);if(popup.div){try{this.layerContainerDiv.removeChild(popup.div);} -catch(e){}} -popup.map=null;},getSize:function(){var size=null;if(this.size!=null){size=this.size.clone();} -return size;},updateSize:function(){var newSize=this.getCurrentSize();if(newSize&&!isNaN(newSize.h)&&!isNaN(newSize.w)){this.events.clearMouseCache();var oldSize=this.getSize();if(oldSize==null){this.size=oldSize=newSize;} -if(!newSize.equals(oldSize)){this.size=newSize;for(var i=0,len=this.layers.length;i=this.minPx.x+xRestriction?Math.round(dx):0;dy=y<=this.maxPx.y-yRestriction&&y>=this.minPx.y+yRestriction?Math.round(dy):0;if(dx||dy){if(!this.dragging){this.dragging=true;this.events.triggerEvent("movestart");} -this.center=null;if(dx){this.layerContainerDiv.style.left=parseInt(this.layerContainerDiv.style.left)-dx+"px";this.minPx.x-=dx;this.maxPx.x-=dx;} -if(dy){this.layerContainerDiv.style.top=parseInt(this.layerContainerDiv.style.top)-dy+"px";this.minPx.y-=dy;this.maxPx.y-=dy;} -var layer,i,len;for(i=0,len=this.layers.length;imaxResolution){for(var i=zoom|0,ii=resolutions.length;ithis.restrictedExtent.getWidth()){lonlat=new OpenLayers.LonLat(maxCenter.lon,lonlat.lat);}else if(extent.leftthis.restrictedExtent.right){lonlat=lonlat.add(this.restrictedExtent.right- -extent.right,0);} -if(extent.getHeight()>this.restrictedExtent.getHeight()){lonlat=new OpenLayers.LonLat(lonlat.lon,maxCenter.lat);}else if(extent.bottomthis.restrictedExtent.top){lonlat=lonlat.add(0,this.restrictedExtent.top- -extent.top);}}} -var zoomChanged=forceZoomChange||((this.isValidZoomLevel(zoom))&&(zoom!=this.getZoom()));var centerChanged=(this.isValidLonLat(lonlat))&&(!lonlat.equals(this.center));if(zoomChanged||centerChanged||dragging){dragging||this.events.triggerEvent("movestart");if(centerChanged){if(!zoomChanged&&this.center){this.centerLayerContainer(lonlat);} -this.center=lonlat.clone();} -var res=zoomChanged?this.getResolutionForZoom(zoom):this.getResolution();if(zoomChanged||this.layerContainerOrigin==null){this.layerContainerOrigin=this.getCachedCenter();this.layerContainerDiv.style.left="0px";this.layerContainerDiv.style.top="0px";var maxExtent=this.getMaxExtent({restricted:true});var maxExtentCenter=maxExtent.getCenterLonLat();var lonDelta=this.center.lon-maxExtentCenter.lon;var latDelta=maxExtentCenter.lat-this.center.lat;var extentWidth=Math.round(maxExtent.getWidth()/res);var extentHeight=Math.round(maxExtent.getHeight()/res);this.minPx={x:(this.size.w-extentWidth)/2-lonDelta/res,y:(this.size.h-extentHeight)/2-latDelta/res};this.maxPx={x:this.minPx.x+Math.round(maxExtent.getWidth()/res),y:this.minPx.y+Math.round(maxExtent.getHeight()/res)};} -if(zoomChanged){this.zoom=zoom;this.resolution=res;} -var bounds=this.getExtent();if(this.baseLayer.visibility){this.baseLayer.moveTo(bounds,zoomChanged,options.dragging);options.dragging||this.baseLayer.events.triggerEvent("moveend",{zoomChanged:zoomChanged});} -bounds=this.baseLayer.getExtent();for(var i=this.layers.length-1;i>=0;--i){var layer=this.layers[i];if(layer!==this.baseLayer&&!layer.isBaseLayer){var inRange=layer.calculateInRange();if(layer.inRange!=inRange){layer.inRange=inRange;if(!inRange){layer.display(false);} -this.events.triggerEvent("changelayer",{layer:layer,property:"visibility"});} -if(inRange&&layer.visibility){layer.moveTo(bounds,zoomChanged,options.dragging);options.dragging||layer.events.triggerEvent("moveend",{zoomChanged:zoomChanged});}}} -this.events.triggerEvent("move");dragging||this.events.triggerEvent("moveend");if(zoomChanged){for(var i=0,len=this.popups.length;i=0)&&(zoomLevel0){resolution=this.layers[0].getResolution();} -return resolution;},getUnits:function(){var units=null;if(this.baseLayer!=null){units=this.baseLayer.units;} -return units;},getScale:function(){var scale=null;if(this.baseLayer!=null){var res=this.getResolution();var units=this.baseLayer.units;scale=OpenLayers.Util.getScaleFromResolution(res,units);} -return scale;},getZoomForExtent:function(bounds,closest){var zoom=null;if(this.baseLayer!=null){zoom=this.baseLayer.getZoomForExtent(bounds,closest);} -return zoom;},getResolutionForZoom:function(zoom){var resolution=null;if(this.baseLayer){resolution=this.baseLayer.getResolutionForZoom(zoom);} -return resolution;},getZoomForResolution:function(resolution,closest){var zoom=null;if(this.baseLayer!=null){zoom=this.baseLayer.getZoomForResolution(resolution,closest);} -return zoom;},zoomTo:function(zoom){if(this.isValidZoomLevel(zoom)){this.setCenter(null,zoom);}},zoomIn:function(){this.zoomTo(this.getZoom()+1);},zoomOut:function(){this.zoomTo(this.getZoom()-1);},zoomToExtent:function(bounds,closest){if(!(bounds instanceof OpenLayers.Bounds)){bounds=new OpenLayers.Bounds(bounds);} -var center=bounds.getCenterLonLat();if(this.baseLayer.wrapDateLine){var maxExtent=this.getMaxExtent();bounds=bounds.clone();while(bounds.right=0){this.initResolutions();if(reinitialize&&this.map.baseLayer===this){this.map.setCenter(this.map.getCenter(),this.map.getZoomForResolution(resolution),false,true);this.map.events.triggerEvent("changebaselayer",{layer:this});} -break;}}}},onMapResize:function(){},redraw:function(){var redrawn=false;if(this.map){this.inRange=this.calculateInRange();var extent=this.getExtent();if(extent&&this.inRange&&this.visibility){var zoomChanged=true;this.moveTo(extent,zoomChanged,false);this.events.triggerEvent("moveend",{"zoomChanged":zoomChanged});redrawn=true;}} -return redrawn;},moveTo:function(bounds,zoomChanged,dragging){var display=this.visibility;if(!this.isBaseLayer){display=display&&this.inRange;} -this.display(display);},moveByPx:function(dx,dy){},setMap:function(map){if(this.map==null){this.map=map;this.maxExtent=this.maxExtent||this.map.maxExtent;this.minExtent=this.minExtent||this.map.minExtent;this.projection=this.projection||this.map.projection;if(typeof this.projection=="string"){this.projection=new OpenLayers.Projection(this.projection);} -this.units=this.projection.getUnits()||this.units||this.map.units;this.initResolutions();if(!this.isBaseLayer){this.inRange=this.calculateInRange();var show=((this.visibility)&&(this.inRange));this.div.style.display=show?"":"none";} -this.setTileSize();}},afterAdd:function(){},removeMap:function(map){},getImageSize:function(bounds){return(this.imageSize||this.tileSize);},setTileSize:function(size){var tileSize=(size)?size:((this.tileSize)?this.tileSize:this.map.getTileSize());this.tileSize=tileSize;if(this.gutter){this.imageSize=new OpenLayers.Size(tileSize.w+(2*this.gutter),tileSize.h+(2*this.gutter));}},getVisibility:function(){return this.visibility;},setVisibility:function(visibility){if(visibility!=this.visibility){this.visibility=visibility;this.display(visibility);this.redraw();if(this.map!=null){this.map.events.triggerEvent("changelayer",{layer:this,property:"visibility"});} -this.events.triggerEvent("visibilitychanged");}},display:function(display){if(display!=(this.div.style.display!="none")){this.div.style.display=(display&&this.calculateInRange())?"block":"none";}},calculateInRange:function(){var inRange=false;if(this.alwaysInRange){inRange=true;}else{if(this.map){var resolution=this.map.getResolution();inRange=((resolution>=this.minResolution)&&(resolution<=this.maxResolution));}} -return inRange;},setIsBaseLayer:function(isBaseLayer){if(isBaseLayer!=this.isBaseLayer){this.isBaseLayer=isBaseLayer;if(this.map!=null){this.map.events.triggerEvent("changebaselayer",{layer:this});}}},initResolutions:function(){var i,len,p;var props={},alwaysInRange=true;for(i=0,len=this.RESOLUTION_PROPERTIES.length;i=resolution){highRes=res;lowZoom=i;} -if(res<=resolution){lowRes=res;highZoom=i;break;}} -var dRes=highRes-lowRes;if(dRes>0){zoom=lowZoom+((highRes-resolution)/dRes);}else{zoom=lowZoom;}}else{var diff;var minDiff=Number.POSITIVE_INFINITY;for(i=0,len=this.resolutions.length;iminDiff){break;} -minDiff=diff;}else{if(this.resolutions[i]=0&&row=0;i--){serverResolution=this.serverResolutions[i];if(serverResolution>resolution){resolution=serverResolution;break;}} -if(i===-1){throw'no appropriate resolution in serverResolutions';}} -return resolution;},getServerZoom:function(){var resolution=this.getServerResolution();return this.serverResolutions?OpenLayers.Util.indexOf(this.serverResolutions,resolution):this.map.getZoomForResolution(resolution)+(this.zoomOffset||0);},transformDiv:function(scale){this.div.style.width=100*scale+'%';this.div.style.height=100*scale+'%';var size=this.map.getSize();var lcX=parseInt(this.map.layerContainerDiv.style.left,10);var lcY=parseInt(this.map.layerContainerDiv.style.top,10);var x=(lcX-(size.w/2.0))*(scale-1);var y=(lcY-(size.h/2.0))*(scale-1);this.div.style.left=x+'%';this.div.style.top=y+'%';},getResolutionScale:function(){return parseInt(this.div.style.width,10)/100;},applyBackBuffer:function(resolution){if(this.backBufferTimerId!==null){this.removeBackBuffer();} -var backBuffer=this.backBuffer;if(!backBuffer){backBuffer=this.createBackBuffer();if(!backBuffer){return;} -this.div.insertBefore(backBuffer,this.div.firstChild);this.backBuffer=backBuffer;var topLeftTileBounds=this.grid[0][0].bounds;this.backBufferLonLat={lon:topLeftTileBounds.left,lat:topLeftTileBounds.top};this.backBufferResolution=this.gridResolution;} -var style=backBuffer.style;var ratio=this.backBufferResolution/resolution;style.width=100*ratio+'%';style.height=100*ratio+'%';var position=this.getViewPortPxFromLonLat(this.backBufferLonLat,resolution);var leftOffset=parseInt(this.map.layerContainerDiv.style.left,10);var topOffset=parseInt(this.map.layerContainerDiv.style.top,10);backBuffer.style.left=Math.round(position.x-leftOffset)+'%';backBuffer.style.top=Math.round(position.y-topOffset)+'%';},createBackBuffer:function(){var backBuffer;if(this.grid.length>0){backBuffer=document.createElement('div');backBuffer.id=this.div.id+'_bb';backBuffer.className='olBackBuffer';backBuffer.style.position='absolute';backBuffer.style.width='100%';backBuffer.style.height='100%';for(var i=0,lenI=this.grid.length;i=bounds.bottom-tilelat*this.buffer)||rowidx-tileSize.w*(buffer-1)){this.shiftColumn(true);}else if(tlViewPort.x<-tileSize.w*buffer){this.shiftColumn(false);}else if(tlViewPort.y>-tileSize.h*(buffer-1)){this.shiftRow(true);}else if(tlViewPort.y<-tileSize.h*buffer){this.shiftRow(false);}else{break;}}},shiftRow:function(prepend){var modelRowIndex=(prepend)?0:(this.grid.length-1);var grid=this.grid;var modelRow=grid[modelRowIndex];var resolution=this.getServerResolution();var deltaY=(prepend)?-this.tileSize.h:this.tileSize.h;var deltaLat=resolution*-deltaY;var row=(prepend)?grid.pop():grid.shift();for(var i=0,len=modelRow.length;irows){var row=this.grid.pop();for(i=0,l=row.length;icolumns){var row=this.grid[i];var tile=row.pop();this.destroyTile(tile);}}},onMapResize:function(){if(this.singleTile){this.clearGrid();this.setTileSize();}},getTileBounds:function(viewPortPx){var maxExtent=this.maxExtent;var resolution=this.getResolution();var tileMapWidth=resolution*this.tileSize.w;var tileMapHeight=resolution*this.tileSize.h;var mapPoint=this.getLonLatFromViewPortPx(viewPortPx);var tileLeft=maxExtent.left+(tileMapWidth*Math.floor((mapPoint.lon- -maxExtent.left)/tileMapWidth));var tileBottom=maxExtent.bottom+(tileMapHeight*Math.floor((mapPoint.lat- -maxExtent.bottom)/tileMapHeight));return new OpenLayers.Bounds(tileLeft,tileBottom,tileLeft+tileMapWidth,tileBottom+tileMapHeight);},CLASS_NAME:"OpenLayers.Layer.Grid"});OpenLayers.Control=OpenLayers.Class({id:null,map:null,div:null,type:null,allowSelection:false,displayClass:"",title:"",autoActivate:false,active:null,handler:null,eventListeners:null,events:null,initialize:function(options){this.displayClass=this.CLASS_NAME.replace("OpenLayers.","ol").replace(/\./g,"");OpenLayers.Util.extend(this,options);this.events=new OpenLayers.Events(this);if(this.eventListeners instanceof Object){this.events.on(this.eventListeners);} -if(this.id==null){this.id=OpenLayers.Util.createUniqueID(this.CLASS_NAME+"_");}},destroy:function(){if(this.events){if(this.eventListeners){this.events.un(this.eventListeners);} -this.events.destroy();this.events=null;} -this.eventListeners=null;if(this.handler){this.handler.destroy();this.handler=null;} -if(this.handlers){for(var key in this.handlers){if(this.handlers.hasOwnProperty(key)&&typeof this.handlers[key].destroy=="function"){this.handlers[key].destroy();}} -this.handlers=null;} -if(this.map){this.map.removeControl(this);this.map=null;} -this.div=null;},setMap:function(map){this.map=map;if(this.handler){this.handler.setMap(map);}},draw:function(px){if(this.div==null){this.div=OpenLayers.Util.createDiv(this.id);this.div.className=this.displayClass;if(!this.allowSelection){this.div.className+=" olControlNoSelect";this.div.setAttribute("unselectable","on",0);this.div.onselectstart=OpenLayers.Function.False;} -if(this.title!=""){this.div.title=this.title;}} -if(px!=null){this.position=px.clone();} -this.moveTo(this.position);return this.div;},moveTo:function(px){if((px!=null)&&(this.div!=null)){this.div.style.left=px.x+"px";this.div.style.top=px.y+"px";}},activate:function(){if(this.active){return false;} -if(this.handler){this.handler.activate();} -this.active=true;if(this.map){OpenLayers.Element.addClass(this.map.viewPortDiv,this.displayClass.replace(/ /g,"")+"Active");} -this.events.triggerEvent("activate");return true;},deactivate:function(){if(this.active){if(this.handler){this.handler.deactivate();} -this.active=false;if(this.map){OpenLayers.Element.removeClass(this.map.viewPortDiv,this.displayClass.replace(/ /g,"")+"Active");} -this.events.triggerEvent("deactivate");return true;} -return false;},CLASS_NAME:"OpenLayers.Control"});OpenLayers.Control.TYPE_BUTTON=1;OpenLayers.Control.TYPE_TOGGLE=2;OpenLayers.Control.TYPE_TOOL=3;OpenLayers.Control.Attribution=OpenLayers.Class(OpenLayers.Control,{separator:", ",template:"${layers}",destroy:function(){this.map.events.un({"removelayer":this.updateAttribution,"addlayer":this.updateAttribution,"changelayer":this.updateAttribution,"changebaselayer":this.updateAttribution,scope:this});OpenLayers.Control.prototype.destroy.apply(this,arguments);},draw:function(){OpenLayers.Control.prototype.draw.apply(this,arguments);this.map.events.on({'changebaselayer':this.updateAttribution,'changelayer':this.updateAttribution,'addlayer':this.updateAttribution,'removelayer':this.updateAttribution,scope:this});this.updateAttribution();return this.div;},updateAttribution:function(){var attributions=[];if(this.map&&this.map.layers){for(var i=0,len=this.map.layers.length;i=this.down.xy.distanceTo(evt.xy);if(passes&&this.touch&&this.down.touches.length===this.last.touches.length){for(var i=0,ii=this.down.touches.length;ithis.pixelTolerance){passes=false;break;}}}} -return passes;},getTouchDistance:function(from,to){return Math.sqrt(Math.pow(from.clientX-to.clientX,2)+ -Math.pow(from.clientY-to.clientY,2));},passesDblclickTolerance:function(evt){var passes=true;if(this.down&&this.first){passes=this.down.xy.distanceTo(this.first.xy)<=this.dblclickTolerance;} -return passes;},clearTimer:function(){if(this.timerId!=null){window.clearTimeout(this.timerId);this.timerId=null;} -if(this.rightclickTimerId!=null){window.clearTimeout(this.rightclickTimerId);this.rightclickTimerId=null;}},delayedCall:function(evt){this.timerId=null;if(evt){this.callback("click",[evt]);}},getEventInfo:function(evt){var touches;if(evt.touches){var len=evt.touches.length;touches=new Array(len);var touch;for(var i=0;i=0;--i){this.target.register(this.events[i],this,this.buttonClick,{extension:true});}},destroy:function(){for(var i=this.events.length-1;i>=0;--i){this.target.unregister(this.events[i],this,this.buttonClick);} -delete this.target;},getPressedButton:function(element){var depth=3,button;do{if(OpenLayers.Element.hasClass(element,"olButton")){button=element;break;} -element=element.parentNode;}while(--depth>0&&element);return button;},buttonClick:function(evt){var propagate=true,element=OpenLayers.Event.element(evt);if(element&&(OpenLayers.Event.isLeftClick(evt)||!~evt.type.indexOf("mouse"))){var button=this.getPressedButton(element);if(button){if(evt.type==="keydown"){switch(evt.keyCode){case OpenLayers.Event.KEY_RETURN:case OpenLayers.Event.KEY_SPACE:this.target.triggerEvent("buttonclick",{buttonElement:button});OpenLayers.Event.stop(evt);propagate=false;break;}}else if(this.startEvt){if(this.completeRegEx.test(evt.type)){var pos=OpenLayers.Util.pagePosition(button);this.target.triggerEvent("buttonclick",{buttonElement:button,buttonXY:{x:this.startEvt.clientX-pos[0],y:this.startEvt.clientY-pos[1]}});} -if(this.cancelRegEx.test(evt.type)){delete this.startEvt;} -OpenLayers.Event.stop(evt);propagate=false;} -if(this.startRegEx.test(evt.type)){this.startEvt=evt;OpenLayers.Event.stop(evt);propagate=false;}}else{delete this.startEvt;}} -return propagate;}});OpenLayers.Handler.Drag=OpenLayers.Class(OpenLayers.Handler,{started:false,stopDown:true,dragging:false,touch:false,last:null,start:null,lastMoveEvt:null,oldOnselectstart:null,interval:0,timeoutId:null,documentDrag:false,documentEvents:null,initialize:function(control,callbacks,options){OpenLayers.Handler.prototype.initialize.apply(this,arguments);if(this.documentDrag===true){var me=this;this._docMove=function(evt){me.mousemove({xy:{x:evt.clientX,y:evt.clientY},element:document});};this._docUp=function(evt){me.mouseup({xy:{x:evt.clientX,y:evt.clientY}});};}},dragstart:function(evt){var propagate=true;this.dragging=false;if(this.checkModifiers(evt)&&(OpenLayers.Event.isLeftClick(evt)||OpenLayers.Event.isSingleTouch(evt))){this.started=true;this.start=evt.xy;this.last=evt.xy;OpenLayers.Element.addClass(this.map.viewPortDiv,"olDragDown");this.down(evt);this.callback("down",[evt.xy]);OpenLayers.Event.stop(evt);if(!this.oldOnselectstart){this.oldOnselectstart=document.onselectstart?document.onselectstart:OpenLayers.Function.True;} -document.onselectstart=OpenLayers.Function.False;propagate=!this.stopDown;}else{this.started=false;this.start=null;this.last=null;} -return propagate;},dragmove:function(evt){this.lastMoveEvt=evt;if(this.started&&!this.timeoutId&&(evt.xy.x!=this.last.x||evt.xy.y!=this.last.y)){if(this.documentDrag===true&&this.documentEvents){if(evt.element===document){this.adjustXY(evt);this.setEvent(evt);}else{this.removeDocumentEvents();}} -if(this.interval>0){this.timeoutId=setTimeout(OpenLayers.Function.bind(this.removeTimeout,this),this.interval);} -this.dragging=true;this.move(evt);this.callback("move",[evt.xy]);if(!this.oldOnselectstart){this.oldOnselectstart=document.onselectstart;document.onselectstart=OpenLayers.Function.False;} -this.last=evt.xy;} -return true;},dragend:function(evt){if(this.started){if(this.documentDrag===true&&this.documentEvents){this.adjustXY(evt);this.removeDocumentEvents();} -var dragged=(this.start!=this.last);this.started=false;this.dragging=false;OpenLayers.Element.removeClass(this.map.viewPortDiv,"olDragDown");this.up(evt);this.callback("up",[evt.xy]);if(dragged){this.callback("done",[evt.xy]);} -document.onselectstart=this.oldOnselectstart;} -return true;},down:function(evt){},move:function(evt){},up:function(evt){},out:function(evt){},mousedown:function(evt){return this.dragstart(evt);},touchstart:function(evt){if(!this.touch){this.touch=true;this.map.events.un({mousedown:this.mousedown,mouseup:this.mouseup,mousemove:this.mousemove,click:this.click,scope:this});} -return this.dragstart(evt);},mousemove:function(evt){return this.dragmove(evt);},touchmove:function(evt){return this.dragmove(evt);},removeTimeout:function(){this.timeoutId=null;if(this.dragging){this.mousemove(this.lastMoveEvt);}},mouseup:function(evt){return this.dragend(evt);},touchend:function(evt){evt.xy=this.last;return this.dragend(evt);},mouseout:function(evt){if(this.started&&OpenLayers.Util.mouseLeft(evt,this.map.viewPortDiv)){if(this.documentDrag===true){this.addDocumentEvents();}else{var dragged=(this.start!=this.last);this.started=false;this.dragging=false;OpenLayers.Element.removeClass(this.map.viewPortDiv,"olDragDown");this.out(evt);this.callback("out",[]);if(dragged){this.callback("done",[evt.xy]);} -if(document.onselectstart){document.onselectstart=this.oldOnselectstart;}}} -return true;},click:function(evt){return(this.start==this.last);},activate:function(){var activated=false;if(OpenLayers.Handler.prototype.activate.apply(this,arguments)){this.dragging=false;activated=true;} -return activated;},deactivate:function(){var deactivated=false;if(OpenLayers.Handler.prototype.deactivate.apply(this,arguments)){this.touch=false;this.started=false;this.dragging=false;this.start=null;this.last=null;deactivated=true;OpenLayers.Element.removeClass(this.map.viewPortDiv,"olDragDown");} -return deactivated;},adjustXY:function(evt){var pos=OpenLayers.Util.pagePosition(this.map.viewPortDiv);evt.xy.x-=pos[0];evt.xy.y-=pos[1];},addDocumentEvents:function(){OpenLayers.Element.addClass(document.body,"olDragDown");this.documentEvents=true;OpenLayers.Event.observe(document,"mousemove",this._docMove);OpenLayers.Event.observe(document,"mouseup",this._docUp);},removeDocumentEvents:function(){OpenLayers.Element.removeClass(document.body,"olDragDown");this.documentEvents=false;OpenLayers.Event.stopObserving(document,"mousemove",this._docMove);OpenLayers.Event.stopObserving(document,"mouseup",this._docUp);},CLASS_NAME:"OpenLayers.Handler.Drag"});OpenLayers.Handler.Box=OpenLayers.Class(OpenLayers.Handler,{dragHandler:null,boxDivClassName:'olHandlerBoxZoomBox',boxOffsets:null,initialize:function(control,callbacks,options){OpenLayers.Handler.prototype.initialize.apply(this,arguments);this.dragHandler=new OpenLayers.Handler.Drag(this,{down:this.startBox,move:this.moveBox,out:this.removeBox,up:this.endBox},{keyMask:this.keyMask});},destroy:function(){OpenLayers.Handler.prototype.destroy.apply(this,arguments);if(this.dragHandler){this.dragHandler.destroy();this.dragHandler=null;}},setMap:function(map){OpenLayers.Handler.prototype.setMap.apply(this,arguments);if(this.dragHandler){this.dragHandler.setMap(map);}},startBox:function(xy){this.callback("start",[]);this.zoomBox=OpenLayers.Util.createDiv('zoomBox',{x:-9999,y:-9999});this.zoomBox.className=this.boxDivClassName;this.zoomBox.style.zIndex=this.map.Z_INDEX_BASE["Popup"]-1;this.map.viewPortDiv.appendChild(this.zoomBox);OpenLayers.Element.addClass(this.map.viewPortDiv,"olDrawBox");},moveBox:function(xy){var startX=this.dragHandler.start.x;var startY=this.dragHandler.start.y;var deltaX=Math.abs(startX-xy.x);var deltaY=Math.abs(startY-xy.y);var offset=this.getBoxOffsets();this.zoomBox.style.width=(deltaX+offset.width+1)+"px";this.zoomBox.style.height=(deltaY+offset.height+1)+"px";this.zoomBox.style.left=(xy.x5||Math.abs(this.dragHandler.start.y-end.y)>5){var start=this.dragHandler.start;var top=Math.min(start.y,end.y);var bottom=Math.max(start.y,end.y);var left=Math.min(start.x,end.x);var right=Math.max(start.x,end.x);result=new OpenLayers.Bounds(left,bottom,right,top);}else{result=this.dragHandler.start.clone();} -this.removeBox();this.callback("done",[result]);},removeBox:function(){this.map.viewPortDiv.removeChild(this.zoomBox);this.zoomBox=null;this.boxOffsets=null;OpenLayers.Element.removeClass(this.map.viewPortDiv,"olDrawBox");},activate:function(){if(OpenLayers.Handler.prototype.activate.apply(this,arguments)){this.dragHandler.activate();return true;}else{return false;}},deactivate:function(){if(OpenLayers.Handler.prototype.deactivate.apply(this,arguments)){if(this.dragHandler.deactivate()){if(this.zoomBox){this.removeBox();}} -return true;}else{return false;}},getBoxOffsets:function(){if(!this.boxOffsets){var testDiv=document.createElement("div");testDiv.style.position="absolute";testDiv.style.border="1px solid black";testDiv.style.width="3px";document.body.appendChild(testDiv);var w3cBoxModel=testDiv.clientWidth==3;document.body.removeChild(testDiv);var left=parseInt(OpenLayers.Element.getStyle(this.zoomBox,"border-left-width"));var right=parseInt(OpenLayers.Element.getStyle(this.zoomBox,"border-right-width"));var top=parseInt(OpenLayers.Element.getStyle(this.zoomBox,"border-top-width"));var bottom=parseInt(OpenLayers.Element.getStyle(this.zoomBox,"border-bottom-width"));this.boxOffsets={left:left,right:right,top:top,bottom:bottom,width:w3cBoxModel===false?left+right:0,height:w3cBoxModel===false?top+bottom:0};} -return this.boxOffsets;},CLASS_NAME:"OpenLayers.Handler.Box"});OpenLayers.Control.ZoomBox=OpenLayers.Class(OpenLayers.Control,{type:OpenLayers.Control.TYPE_TOOL,out:false,keyMask:null,alwaysZoom:false,draw:function(){this.handler=new OpenLayers.Handler.Box(this,{done:this.zoomBox},{keyMask:this.keyMask});},zoomBox:function(position){if(position instanceof OpenLayers.Bounds){var bounds;if(!this.out){var minXY=this.map.getLonLatFromPixel({x:position.left,y:position.bottom});var maxXY=this.map.getLonLatFromPixel({x:position.right,y:position.top});bounds=new OpenLayers.Bounds(minXY.lon,minXY.lat,maxXY.lon,maxXY.lat);}else{var pixWidth=Math.abs(position.right-position.left);var pixHeight=Math.abs(position.top-position.bottom);var zoomFactor=Math.min((this.map.size.h/pixHeight),(this.map.size.w/pixWidth));var extent=this.map.getExtent();var center=this.map.getLonLatFromPixel(position.getCenterPixel());var xmin=center.lon-(extent.getWidth()/2)*zoomFactor;var xmax=center.lon+(extent.getWidth()/2)*zoomFactor;var ymin=center.lat-(extent.getHeight()/2)*zoomFactor;var ymax=center.lat+(extent.getHeight()/2)*zoomFactor;bounds=new OpenLayers.Bounds(xmin,ymin,xmax,ymax);} -var lastZoom=this.map.getZoom();this.map.zoomToExtent(bounds);if(lastZoom==this.map.getZoom()&&this.alwaysZoom==true){this.map.zoomTo(lastZoom+(this.out?-1:1));}}else{if(!this.out){this.map.setCenter(this.map.getLonLatFromPixel(position),this.map.getZoom()+1);}else{this.map.setCenter(this.map.getLonLatFromPixel(position),this.map.getZoom()-1);}}},CLASS_NAME:"OpenLayers.Control.ZoomBox"});OpenLayers.Control.DragPan=OpenLayers.Class(OpenLayers.Control,{type:OpenLayers.Control.TYPE_TOOL,panned:false,interval:1,documentDrag:false,kinetic:null,enableKinetic:false,kineticInterval:10,draw:function(){if(this.enableKinetic){var config={interval:this.kineticInterval};if(typeof this.enableKinetic==="object"){config=OpenLayers.Util.extend(config,this.enableKinetic);} -this.kinetic=new OpenLayers.Kinetic(config);} -this.handler=new OpenLayers.Handler.Drag(this,{"move":this.panMap,"done":this.panMapDone,"down":this.panMapStart},{interval:this.interval,documentDrag:this.documentDrag});},panMapStart:function(){if(this.kinetic){this.kinetic.begin();}},panMap:function(xy){if(this.kinetic){this.kinetic.update(xy);} -this.panned=true;this.map.pan(this.handler.last.x-xy.x,this.handler.last.y-xy.y,{dragging:true,animate:false});},panMapDone:function(xy){if(this.panned){var res=null;if(this.kinetic){res=this.kinetic.end(xy);} -this.map.pan(this.handler.last.x-xy.x,this.handler.last.y-xy.y,{dragging:!!res,animate:false});if(res){var self=this;this.kinetic.move(res,function(x,y,end){self.map.pan(x,y,{dragging:!end,animate:false});});} -this.panned=false;}},CLASS_NAME:"OpenLayers.Control.DragPan"});OpenLayers.Handler.MouseWheel=OpenLayers.Class(OpenLayers.Handler,{wheelListener:null,mousePosition:null,interval:0,delta:0,cumulative:true,initialize:function(control,callbacks,options){OpenLayers.Handler.prototype.initialize.apply(this,arguments);this.wheelListener=OpenLayers.Function.bindAsEventListener(this.onWheelEvent,this);},destroy:function(){OpenLayers.Handler.prototype.destroy.apply(this,arguments);this.wheelListener=null;},onWheelEvent:function(e){if(!this.map||!this.checkModifiers(e)){return;} -var overScrollableDiv=false;var overLayerDiv=false;var overMapDiv=false;var elem=OpenLayers.Event.element(e);while((elem!=null)&&!overMapDiv&&!overScrollableDiv){if(!overScrollableDiv){try{if(elem.currentStyle){overflow=elem.currentStyle["overflow"];}else{var style=document.defaultView.getComputedStyle(elem,null);var overflow=style.getPropertyValue("overflow");} -overScrollableDiv=(overflow&&(overflow=="auto")||(overflow=="scroll"));}catch(err){}} -if(!overLayerDiv){for(var i=0,len=this.map.layers.length;i=1.3&&!params.EXCEPTIONS){params.EXCEPTIONS="INIMAGE";} -newArguments.push(name,url,params,options);OpenLayers.Layer.Grid.prototype.initialize.apply(this,newArguments);OpenLayers.Util.applyDefaults(this.params,OpenLayers.Util.upperCaseObject(this.DEFAULT_PARAMS));if(!this.noMagic&&this.params.TRANSPARENT&&this.params.TRANSPARENT.toString().toLowerCase()=="true"){if((options==null)||(!options.isBaseLayer)){this.isBaseLayer=false;} -if(this.params.FORMAT=="image/jpeg"){this.params.FORMAT=OpenLayers.Util.alphaHack()?"image/gif":"image/png";}}},clone:function(obj){if(obj==null){obj=new OpenLayers.Layer.WMS(this.name,this.url,this.params,this.getOptions());} -obj=OpenLayers.Layer.Grid.prototype.clone.apply(this,[obj]);return obj;},reverseAxisOrder:function(){var projCode=this.projection.getCode();return parseFloat(this.params.VERSION)>=1.3&&!!(this.yx[projCode]||OpenLayers.Projection.defaults[projCode].yx);},getURL:function(bounds){bounds=this.adjustBounds(bounds);var imageSize=this.getImageSize();var newParams={};var reverseAxisOrder=this.reverseAxisOrder();newParams.BBOX=this.encodeBBOX?bounds.toBBOX(null,reverseAxisOrder):bounds.toArray(reverseAxisOrder);newParams.WIDTH=imageSize.w;newParams.HEIGHT=imageSize.h;var requestString=this.getFullRequestString(newParams);return requestString;},mergeNewParams:function(newParams){var upperParams=OpenLayers.Util.upperCaseObject(newParams);var newArguments=[upperParams];return OpenLayers.Layer.Grid.prototype.mergeNewParams.apply(this,newArguments);},getFullRequestString:function(newParams,altUrl){var mapProjection=this.map.getProjectionObject();var projectionCode=this.projection&&this.projection.equals(mapProjection)?this.projection.getCode():mapProjection.getCode();var value=(projectionCode=="none")?null:projectionCode;if(parseFloat(this.params.VERSION)>=1.3){this.params.CRS=value;}else{this.params.SRS=value;} -if(typeof this.params.TRANSPARENT=="boolean"){newParams.TRANSPARENT=this.params.TRANSPARENT?"TRUE":"FALSE";} -return OpenLayers.Layer.Grid.prototype.getFullRequestString.apply(this,arguments);},CLASS_NAME:"OpenLayers.Layer.WMS"});OpenLayers.Control.PanZoom=OpenLayers.Class(OpenLayers.Control,{slideFactor:50,slideRatio:null,buttons:null,position:null,initialize:function(options){this.position=new OpenLayers.Pixel(OpenLayers.Control.PanZoom.X,OpenLayers.Control.PanZoom.Y);OpenLayers.Control.prototype.initialize.apply(this,arguments);},destroy:function(){if(this.map){this.map.events.unregister("buttonclick",this,this.onButtonClick);} -this.removeButtons();this.buttons=null;this.position=null;OpenLayers.Control.prototype.destroy.apply(this,arguments);},setMap:function(map){OpenLayers.Control.prototype.setMap.apply(this,arguments);this.map.events.register("buttonclick",this,this.onButtonClick);},draw:function(px){OpenLayers.Control.prototype.draw.apply(this,arguments);px=this.position;this.buttons=[];var sz={w:18,h:18};var centered=new OpenLayers.Pixel(px.x+sz.w/2,px.y);this._addButton("panup","north-mini.png",centered,sz);px.y=centered.y+sz.h;this._addButton("panleft","west-mini.png",px,sz);this._addButton("panright","east-mini.png",px.add(sz.w,0),sz);this._addButton("pandown","south-mini.png",centered.add(0,sz.h*2),sz);this._addButton("zoomin","zoom-plus-mini.png",centered.add(0,sz.h*3+5),sz);this._addButton("zoomworld","zoom-world-mini.png",centered.add(0,sz.h*4+5),sz);this._addButton("zoomout","zoom-minus-mini.png",centered.add(0,sz.h*5+5),sz);return this.div;},_addButton:function(id,img,xy,sz){var imgLocation=OpenLayers.Util.getImageLocation(img);var btn=OpenLayers.Util.createAlphaImageDiv(this.id+"_"+id,xy,sz,imgLocation,"absolute");btn.style.cursor="pointer";this.div.appendChild(btn);btn.action=id;btn.className="olButton";this.buttons.push(btn);return btn;},_removeButton:function(btn){this.div.removeChild(btn);OpenLayers.Util.removeItem(this.buttons,btn);},removeButtons:function(){for(var i=this.buttons.length-1;i>=0;--i){this._removeButton(this.buttons[i]);}},onButtonClick:function(evt){var btn=evt.buttonElement;switch(btn.action){case"panup":this.map.pan(0,-this.getSlideFactor("h"));break;case"pandown":this.map.pan(0,this.getSlideFactor("h"));break;case"panleft":this.map.pan(-this.getSlideFactor("w"),0);break;case"panright":this.map.pan(this.getSlideFactor("w"),0);break;case"zoomin":this.map.zoomIn();break;case"zoomout":this.map.zoomOut();break;case"zoomworld":this.map.zoomToMaxExtent();break;}},getSlideFactor:function(dim){return this.slideRatio?this.map.getSize()[dim]*this.slideRatio:this.slideFactor;},CLASS_NAME:"OpenLayers.Control.PanZoom"});OpenLayers.Control.PanZoom.X=4;OpenLayers.Control.PanZoom.Y=4;OpenLayers.Layer.TMS=OpenLayers.Class(OpenLayers.Layer.Grid,{serviceVersion:"1.0.0",layername:null,type:null,isBaseLayer:true,tileOrigin:null,serverResolutions:null,zoomOffset:0,initialize:function(name,url,options){var newArguments=[];newArguments.push(name,url,{},options);OpenLayers.Layer.Grid.prototype.initialize.apply(this,newArguments);},clone:function(obj){if(obj==null){obj=new OpenLayers.Layer.TMS(this.name,this.url,this.getOptions());} -obj=OpenLayers.Layer.Grid.prototype.clone.apply(this,[obj]);return obj;},getURL:function(bounds){bounds=this.adjustBounds(bounds);var res=this.getServerResolution();var x=Math.round((bounds.left-this.tileOrigin.lon)/(res*this.tileSize.w));var y=Math.round((bounds.bottom-this.tileOrigin.lat)/(res*this.tileSize.h));var z=this.getServerZoom();var path=this.serviceVersion+"/"+this.layername+"/"+z+"/"+x+"/"+y+"."+this.type;var url=this.url;if(OpenLayers.Util.isArray(url)){url=this.selectUrl(path,url);} -return url+path;},setMap:function(map){OpenLayers.Layer.Grid.prototype.setMap.apply(this,arguments);if(!this.tileOrigin){this.tileOrigin=new OpenLayers.LonLat(this.map.maxExtent.left,this.map.maxExtent.bottom);}},CLASS_NAME:"OpenLayers.Layer.TMS"});OpenLayers.Layer.WMTS=OpenLayers.Class(OpenLayers.Layer.Grid,{isBaseLayer:true,version:"1.0.0",requestEncoding:"KVP",url:null,layer:null,matrixSet:null,style:null,format:"image/jpeg",tileOrigin:null,tileFullExtent:null,formatSuffix:null,matrixIds:null,dimensions:null,params:null,zoomOffset:0,serverResolutions:null,formatSuffixMap:{"image/png":"png","image/png8":"png","image/png24":"png","image/png32":"png","png":"png","image/jpeg":"jpg","image/jpg":"jpg","jpeg":"jpg","jpg":"jpg"},matrix:null,initialize:function(config){var required={url:true,layer:true,style:true,matrixSet:true};for(var prop in required){if(!(prop in config)){throw new Error("Missing property '"+prop+"' in layer configuration.");}} -config.params=OpenLayers.Util.upperCaseObject(config.params);var args=[config.name,config.url,config.params,config];OpenLayers.Layer.Grid.prototype.initialize.apply(this,args);if(!this.formatSuffix){this.formatSuffix=this.formatSuffixMap[this.format]||this.format.split("/").pop();} -if(this.matrixIds){var len=this.matrixIds.length;if(len&&typeof this.matrixIds[0]==="string"){var ids=this.matrixIds;this.matrixIds=new Array(len);for(var i=0;i=0;--i){dimension=dimensions[i];context[dimension]=params[dimension.toUpperCase()];}} -url=OpenLayers.String.format(template,context);}else{var path=this.version+"/"+this.layer+"/"+this.style+"/";if(dimensions){for(var i=0;i>1),r=+i(t[n],e),r<0?s=n+1:(o=n,a=!r);return a?s:~s}function l(t,e){return t>e?1:t0){for(r=1;r0?r-1:r:t[r-1]-e0||i&&0===s)}))}function f(){return!0}function p(){return!1}function m(){}function _(t){let e,i,n,r=!1;return function(){const s=Array.prototype.slice.call(arguments);return r&&this===n&&d(s,i)||(r=!0,n=this,i=s,e=t.apply(this,arguments)),e}}function y(t){return function(){let e;try{e=t()}catch(t){return Promise.reject(t)}return e instanceof Promise?e:Promise.resolve(e)}()}function x(t){for(const e in t)delete t[e]}function v(t){let e;for(e in t)return!1;return!e}var S=class extends o{constructor(t){super(),this.eventTarget_=t,this.pendingRemovals_=null,this.dispatching_=null,this.listeners_=null}addEventListener(t,e){if(!t||!e)return;const i=this.listeners_||(this.listeners_={}),n=i[t]||(i[t]=[]);n.includes(e)||n.push(e)}dispatchEvent(t){const e="string"==typeof t,i=e?t:t.type,n=this.listeners_&&this.listeners_[i];if(!n)return;const s=e?new r(t):t;s.target||(s.target=this.eventTarget_||this);const o=this.dispatching_||(this.dispatching_={}),a=this.pendingRemovals_||(this.pendingRemovals_={});let l;i in o||(o[i]=0,a[i]=0),++o[i];for(let t=0,e=n.length;t0)}removeEventListener(t,e){const i=this.listeners_&&this.listeners_[t];if(i){const n=i.indexOf(e);-1!==n&&(this.pendingRemovals_&&t in this.pendingRemovals_?(i[n]=m,++this.pendingRemovals_[t]):(i.splice(n,1),0===i.length&&delete this.listeners_[t]))}}},w="change",T="error",E="contextmenu",C="click",R="dblclick",b="dragenter",P="dragover",I="drop",L="keydown",F="keypress",M="load",A="touchmove",O="wheel";function N(t,e,i,n,r){if(n&&n!==t&&(i=i.bind(n)),r){const n=i;i=function(){t.removeEventListener(e,i),n.apply(this,arguments)}}const s={target:t,type:e,listener:i};return t.addEventListener(e,i),s}function D(t,e,i,n){return N(t,e,i,n,!0)}function G(t){t&&t.target&&(t.target.removeEventListener(t.type,t.listener),x(t))}class k extends S{constructor(){super(),this.on=this.onInternal,this.once=this.onceInternal,this.un=this.unInternal,this.revision_=0}changed(){++this.revision_,this.dispatchEvent(w)}getRevision(){return this.revision_}onInternal(t,e){if(Array.isArray(t)){const i=t.length,n=new Array(i);for(let r=0;r0;)this.pop()}extend(t){for(let e=0,i=t.length;ethis.getLength())throw new Error("Index out of bounds: "+t);this.unique_&&this.assertUnique_(e),this.array_.splice(t,0,e),this.updateLength_(),this.dispatchEvent(new q(Z,e,t))}pop(){return this.removeAt(this.getLength()-1)}push(t){this.unique_&&this.assertUnique_(t);const e=this.getLength();return this.insertAt(e,t),this.getLength()}remove(t){const e=this.array_;for(let i=0,n=e.length;i=this.getLength())return;const e=this.array_[t];return this.array_.splice(t,1),this.updateLength_(),this.dispatchEvent(new q(Y,e,t)),e}setAt(t,e){if(t>=this.getLength())return void this.insertAt(t,e);if(t<0)throw new Error("Index out of bounds: "+t);this.unique_&&this.assertUnique_(e,t);const i=this.array_[t];this.array_[t]=e,this.dispatchEvent(new q(Y,i,t)),this.dispatchEvent(new q(Z,e,t))}updateLength_(){this.set(K,this.array_.length)}assertUnique_(t,e){for(let n=0,r=this.array_.length;nt)throw new Error("Tile load sequence violation");this.state=t,this.changed()}load(){z()}getAlpha(t,e){if(!this.transition_)return 1;let i=this.transitionStarts_[t];if(i){if(-1===i)return 1}else i=e,this.transitionStarts_[t]=i;const n=e-i+1e3/60;return n>=this.transition_?1:it(n/this.transition_)}inTransition(t){return!!this.transition_&&-1!==this.transitionStarts_[t]}endTransition(t){this.transition_&&(this.transitionStarts_[t]=-1)}};const at="undefined"!=typeof navigator&&void 0!==navigator.userAgent?navigator.userAgent.toLowerCase():"",lt=at.includes("firefox"),ht=at.includes("safari")&&!at.includes("chrom"),ct=ht&&(at.includes("version/15.4")||/cpu (os|iphone os) 15_4 like mac os x/.test(at)),ut=at.includes("webkit")&&!at.includes("edge"),dt=at.includes("macintosh"),gt="undefined"!=typeof devicePixelRatio?devicePixelRatio:1,ft="undefined"!=typeof WorkerGlobalScope&&"undefined"!=typeof OffscreenCanvas&&self instanceof WorkerGlobalScope,pt="undefined"!=typeof Image&&Image.prototype.decode,mt=function(){let t=!1;try{const e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("_",null,e),window.removeEventListener("_",null,e)}catch(t){}return t}();function _t(t,e,i,n){let r;return r=i&&i.length?i.shift():ft?new OffscreenCanvas(t||300,e||300):document.createElement("canvas"),t&&(r.width=t),e&&(r.height=e),r.getContext("2d",n)}function yt(t){const e=t.canvas;e.width=1,e.height=1,t.clearRect(0,0,1,1)}function xt(t){let e=t.offsetWidth;const i=getComputedStyle(t);return e+=parseInt(i.marginLeft,10)+parseInt(i.marginRight,10),e}function vt(t){let e=t.offsetHeight;const i=getComputedStyle(t);return e+=parseInt(i.marginTop,10)+parseInt(i.marginBottom,10),e}function St(t,e){const i=e.parentNode;i&&i.replaceChild(t,e)}function wt(t){return t&&t.parentNode?t.parentNode.removeChild(t):null}function Tt(t){for(;t.lastChild;)t.removeChild(t.lastChild)}function Et(t,e){const i=t.childNodes;for(let n=0;;++n){const r=i[n],s=e[n];if(!r&&!s)break;r!==s&&(r?s?t.insertBefore(s,r):(t.removeChild(r),--n):t.appendChild(s))}}function Ct(t){return t instanceof Image||t instanceof HTMLCanvasElement||t instanceof HTMLVideoElement?t:null}function Rt(t){return t instanceof Uint8Array||t instanceof Uint8ClampedArray||t instanceof Float32Array||t instanceof DataView?t:null}let bt=null;function Pt(t){bt||(bt=_t(t.width,t.height,void 0,{willReadFrequently:!0}));const e=bt.canvas,i=t.width;e.width!==i&&(e.width=i);const n=t.height;return e.height!==n&&(e.height=n),bt.drawImage(t,i,n),bt.getImageData(0,0,i,n).data}const It=[256,256];var Lt=class extends ot{constructor(t){const e=$;super(t.tileCoord,e,{transition:t.transition,interpolate:t.interpolate}),this.loader_=t.loader,this.data_=null,this.error_=null,this.size_=t.size||null}getSize(){if(this.size_)return this.size_;const t=Ct(this.data_);return t?[t.width,t.height]:It}getData(){return this.data_}getError(){return this.error_}load(){if(this.state!==$&&this.state!==tt)return;this.state=J,this.changed();const t=this;this.loader_().then((function(e){t.data_=e,t.state=Q,t.changed()})).catch((function(e){t.error_=e,t.state=tt,t.changed()}))}};function Ft(t,e){if(!t)throw new i(e)}class Mt extends W{constructor(t){if(super(),this.on,this.once,this.un,this.id_=void 0,this.geometryName_="geometry",this.style_=null,this.styleFunction_=void 0,this.geometryChangeKey_=null,this.addChangeListener(this.geometryName_,this.handleGeometryChanged_),t)if("function"==typeof t.getSimplifiedGeometry){const e=t;this.setGeometry(e)}else{const e=t;this.setProperties(e)}}clone(){const t=new Mt(this.hasProperties()?this.getProperties():null);t.setGeometryName(this.getGeometryName());const e=this.getGeometry();e&&t.setGeometry(e.clone());const i=this.getStyle();return i&&t.setStyle(i),t}getGeometry(){return this.get(this.geometryName_)}getId(){return this.id_}getGeometryName(){return this.geometryName_}getStyle(){return this.style_}getStyleFunction(){return this.styleFunction_}handleGeometryChange_(){this.changed()}handleGeometryChanged_(){this.geometryChangeKey_&&(G(this.geometryChangeKey_),this.geometryChangeKey_=null);const t=this.getGeometry();t&&(this.geometryChangeKey_=N(t,w,this.handleGeometryChange_,this)),this.changed()}setGeometry(t){this.set(this.geometryName_,t)}setStyle(t){this.style_=t,this.styleFunction_=t?At(t):void 0,this.changed()}setId(t){this.id_=t,this.changed()}setGeometryName(t){this.removeChangeListener(this.geometryName_,this.handleGeometryChanged_),this.geometryName_=t,this.addChangeListener(this.geometryName_,this.handleGeometryChanged_),this.handleGeometryChanged_()}}function At(t){if("function"==typeof t)return t;let e;if(Array.isArray(t))e=t;else{Ft("function"==typeof t.getZIndex,41);e=[t]}return function(){return e}}var Ot=Mt;const Nt=new Array(6);function Dt(){return[1,0,0,1,0,0]}function Gt(t){return jt(t,1,0,0,1,0,0)}function kt(t,e){const i=t[0],n=t[1],r=t[2],s=t[3],o=t[4],a=t[5],l=e[0],h=e[1],c=e[2],u=e[3],d=e[4],g=e[5];return t[0]=i*l+r*h,t[1]=n*l+s*h,t[2]=i*c+r*u,t[3]=n*c+s*u,t[4]=i*d+r*g+o,t[5]=n*d+s*g+a,t}function jt(t,e,i,n,r,s,o){return t[0]=e,t[1]=i,t[2]=n,t[3]=r,t[4]=s,t[5]=o,t}function Bt(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function zt(t,e){const i=e[0],n=e[1];return e[0]=t[0]*i+t[2]*n+t[4],e[1]=t[1]*i+t[3]*n+t[5],e}function Ut(t,e){const i=Math.cos(e),n=Math.sin(e);return kt(t,jt(Nt,i,n,-n,i,0,0))}function Xt(t,e,i){return kt(t,jt(Nt,e,0,0,i,0,0))}function Vt(t,e,i){return jt(t,e,0,0,i,0,0)}function Wt(t,e,i){return kt(t,jt(Nt,1,0,0,1,e,i))}function Zt(t,e,i,n,r,s,o,a){const l=Math.sin(s),h=Math.cos(s);return t[0]=n*h,t[1]=r*l,t[2]=-n*l,t[3]=r*h,t[4]=o*n*h-a*n*l+e,t[5]=o*r*l+a*r*h+i,t}function Yt(t,e){const i=Kt(e);Ft(0!==i,32);const n=e[0],r=e[1],s=e[2],o=e[3],a=e[4],l=e[5];return t[0]=o/i,t[1]=-r/i,t[2]=-s/i,t[3]=n/i,t[4]=(s*l-o*a)/i,t[5]=-(n*l-r*a)/i,t}function Kt(t){return t[0]*t[3]-t[1]*t[2]}let qt;function Ht(t){const e="matrix("+t.join(", ")+")";if(ft)return e;const i=qt||(qt=document.createElement("div"));return i.style.transform=e,i.style.transform}var $t=0,Jt=1,Qt=2,te=4,ee=8,ie=16;function ne(t){const e=ue();for(let i=0,n=t.length;ir&&(l|=te),as&&(l|=Qt),l===$t&&(l=Jt),l}function ue(){return[1/0,1/0,-1/0,-1/0]}function de(t,e,i,n,r){return r?(r[0]=t,r[1]=e,r[2]=i,r[3]=n,r):[t,e,i,n]}function ge(t){return de(1/0,1/0,-1/0,-1/0,t)}function fe(t,e){const i=t[0],n=t[1];return de(i,n,i,n,e)}function pe(t,e,i,n,r){return Se(ge(r),t,e,i,n)}function me(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function _e(t,e,i){return Math.abs(t[0]-e[0])t[2]&&(t[2]=e[2]),e[1]t[3]&&(t[3]=e[3]),t}function xe(t,e){e[0]t[2]&&(t[2]=e[0]),e[1]t[3]&&(t[3]=e[1])}function ve(t,e){for(let i=0,n=e.length;ie[0]?n[0]=t[0]:n[0]=e[0],t[1]>e[1]?n[1]=t[1]:n[1]=e[1],t[2]=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}function ke(t){return t[2]=o&&p<=l),n||!(s&te)||r&te||(m=g-(d-l)*f,n=m>=a&&m<=h),n||!(s&ee)||r&ee||(p=d-(g-a)/f,n=p>=o&&p<=l),n||!(s&ie)||r&ie||(m=g-(d-o)*f,n=m>=a&&m<=h)}return n}function Ue(t,e,i,n){let r=[];if(n>1){const e=t[2]-t[0],i=t[3]-t[1];for(let s=0;s=i[2])){const e=De(i),r=Math.floor((n[0]-i[0])/e)*e;t[0]-=r,t[2]-=r}return t}function Ve(t,e){if(e.canWrapX()){const i=e.getExtent();if(!isFinite(t[0])||!isFinite(t[2]))return[[i[0],t[1],i[2],t[3]]];Xe(t,e);const n=De(i);if(De(t)>n)return[[i[0],t[1],i[2],t[3]]];if(t[0]i[2])return[[t[0],t[1],i[2],t[3]],[i[0],t[1],t[2]-n,t[3]]]}return[t]}const We={9001:"m",9002:"ft",9003:"us-ft",9101:"radians",9102:"degrees"};function Ze(t){return We[t]}const Ye={radians:6370997/(2*Math.PI),degrees:2*Math.PI*6370997/360,ft:.3048,m:1,"us-ft":1200/3937};var Ke=class{constructor(t){this.code_=t.code,this.units_=t.units,this.extent_=void 0!==t.extent?t.extent:null,this.worldExtent_=void 0!==t.worldExtent?t.worldExtent:null,this.axisOrientation_=void 0!==t.axisOrientation?t.axisOrientation:"enu",this.global_=void 0!==t.global&&t.global,this.canWrapX_=!(!this.global_||!this.extent_),this.getPointResolutionFunc_=t.getPointResolution,this.defaultTileGrid_=null,this.metersPerUnit_=t.metersPerUnit}canWrapX(){return this.canWrapX_}getCode(){return this.code_}getExtent(){return this.extent_}getUnits(){return this.units_}getMetersPerUnit(){return this.metersPerUnit_||Ye[this.units_]}getWorldExtent(){return this.worldExtent_}getAxisOrientation(){return this.axisOrientation_}isGlobal(){return this.global_}setGlobal(t){this.global_=t,this.canWrapX_=!(!t||!this.extent_)}getDefaultTileGrid(){return this.defaultTileGrid_}setDefaultTileGrid(t){this.defaultTileGrid_=t}setExtent(t){this.extent_=t,this.canWrapX_=!(!this.global_||!t)}setWorldExtent(t){this.worldExtent_=t}setGetPointResolution(t){this.getPointResolutionFunc_=t}getPointResolutionFunc(){return this.getPointResolutionFunc_}};const qe=6378137,He=Math.PI*qe,$e=[-He,-He,He,He],Je=[-180,-85,180,85],Qe=qe*Math.log(Math.tan(Math.PI/2));class ti extends Ke{constructor(t){super({code:t,units:"m",extent:$e,global:!0,worldExtent:Je,getPointResolution:function(t,e){return t/Math.cosh(e[1]/qe)}})}}const ei=[new ti("EPSG:3857"),new ti("EPSG:102100"),new ti("EPSG:102113"),new ti("EPSG:900913"),new ti("http://www.opengis.net/def/crs/EPSG/0/3857"),new ti("http://www.opengis.net/gml/srs/epsg.xml#3857")];function ii(t,e,i){const n=t.length;i=i>1?i:2,void 0===e&&(e=i>2?t.slice():new Array(n));for(let r=0;rQe?i=Qe:i<-Qe&&(i=-Qe),e[r+1]=i}return e}function ni(t,e,i){const n=t.length;i=i>1?i:2,void 0===e&&(e=i>2?t.slice():new Array(n));for(let r=0;r1?(i=r,n=s):l>0&&(i+=o*l,n+=a*l)}return xi(t,e,i,n)}function xi(t,e,i,n){const r=i-t,s=n-e;return r*r+s*s}function vi(t){const e=t.length;for(let i=0;ir&&(r=e,n=s)}if(0===r)return null;const s=t[n];t[n]=t[i],t[i]=s;for(let n=i+1;n=0;n--){i[n]=t[n][e]/t[n][n];for(let r=n-1;r>=0;r--)t[r][e]-=t[r][n]*i[n]}return i}function Si(t){return 180*t/Math.PI}function wi(t){return t*Math.PI/180}function Ti(t,e){const i=t%e;return i*e<0?i+e:i}function Ei(t,e,i){return t+i*(e-t)}function Ci(t,e){const i=Math.pow(10,e);return Math.round(t*i)/i}function Ri(t,e){return Math.round(Ci(t,e))}function bi(t,e){return Math.floor(Ci(t,e))}function Pi(t,e){return Math.ceil(Ci(t,e))}function Ii(t,e,i){const n=void 0!==i?t.toFixed(i):""+t;let r=n.indexOf(".");return r=-1===r?n.length:r,r>e?n:new Array(1+e-r).join("0")+n}function Li(t,e){const i=(""+t).split("."),n=(""+e).split(".");for(let t=0;tr)return 1;if(r>e)return-1}return 0}function Fi(t,e){return t[0]+=+e[0],t[1]+=+e[1],t}function Mi(t,e){const i=e.getRadius(),n=e.getCenter(),r=n[0],s=n[1];let o=t[0]-r;const a=t[1]-s;0===o&&0===a&&(o=1);const l=Math.sqrt(o*o+a*a);return[r+i*o/l,s+i*a/l]}function Ai(t,e){const i=t[0],n=t[1],r=e[0],s=e[1],o=r[0],a=r[1],l=s[0],h=s[1],c=l-o,u=h-a,d=0===c&&0===u?0:(c*(i-o)+u*(n-a))/(c*c+u*u||0);let g,f;return d<=0?(g=o,f=a):d>=1?(g=l,f=h):(g=o+d*c,f=a+d*u),[g,f]}function Oi(t,e,i){const n=Ti(e+180,360)-180,r=Math.abs(3600*n),s=i||0;let o=Math.floor(r/3600),a=Math.floor((r-3600*o)/60),l=Ci(r-3600*o-60*a,s);l>=60&&(l=0,a+=1),a>=60&&(a=0,o+=1);let h=o+"°";return 0===a&&0===l||(h+=" "+Ii(a,2)+"′"),0!==l&&(h+=" "+Ii(l,2,s)+"″"),0!==n&&(h+=" "+t.charAt(n<0?1:0)),h}function Ni(t,e,i){return t?e.replace("{x}",t[0].toFixed(i)).replace("{y}",t[1].toFixed(i)):""}function Di(t,e){let i=!0;for(let n=t.length-1;n>=0;--n)if(t[n]!=e[n]){i=!1;break}return i}function Gi(t,e){const i=Math.cos(e),n=Math.sin(e),r=t[0]*i-t[1]*n,s=t[1]*i+t[0]*n;return t[0]=r,t[1]=s,t}function ki(t,e){return t[0]*=e,t[1]*=e,t}function ji(t,e){const i=t[0]-e[0],n=t[1]-e[1];return i*i+n*n}function Bi(t,e){return Math.sqrt(ji(t,e))}function zi(t,e){return ji(t,Ai(t,e))}function Ui(t,e){return Ni(t,"{x}, {y}",e)}function Xi(t,e){if(e.canWrapX()){const i=De(e.getExtent()),n=Vi(t,e,i);n&&(t[0]-=n*i)}return t}function Vi(t,e,i){const n=e.getExtent();let r=0;return e.canWrapX()&&(t[0]n[2])&&(i=i||De(n),r=Math.floor((t[0]-n[0])/i)),r}const Wi=6371008.8;function Zi(t,e,i){i=i||Wi;const n=wi(t[1]),r=wi(e[1]),s=(r-n)/2,o=wi(e[0]-t[0])/2,a=Math.sin(s)*Math.sin(s)+Math.sin(o)*Math.sin(o)*Math.cos(n)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(a),Math.sqrt(1-a))}function Yi(t,e){let i=0;for(let n=0,r=t.length;nHi.warn||console.warn(...t)}function Qi(...t){$i>Hi.error||console.error(...t)}let tn=!0;function en(t){tn=!(void 0===t||t)}function nn(t,e){if(void 0!==e)for(let i=0,n=t.length;i=o?e[s+t]:r[t]}return i}}function gn(t,e,i,n){const r=an(t),s=an(e);pi(r,s,dn(i)),pi(s,r,dn(n))}function fn(t,e){if(t===e)return!0;const i=t.getUnits()===e.getUnits();if(t.getCode()===e.getCode())return i;return pn(t,e)===nn&&i}function pn(t,e){let i=mi(t.getCode(),e.getCode());return i||(i=rn),i}function mn(t,e){return pn(an(t),an(e))}function _n(t,e,i){return mn(e,i)(t,void 0,t.length)}function yn(t,e,i,n){return Ue(t,mn(e,i),void 0,n)}let xn=null;function vn(t){xn=an(t)}function Sn(){return xn}function wn(t,e){return xn?_n(t,e,xn):t}function Tn(t,e){return xn?_n(t,xn,e):(tn&&!Di(t,[0,0])&&t[0]>=-180&&t[0]<=180&&t[1]>=-90&&t[1]<=90&&(tn=!1,Ji("Call useGeographic() from ol/proj once to work with [longitude, latitude] coordinates.")),t)}function En(t,e){return xn?yn(t,e,xn):t}function Cn(t,e){return xn?yn(t,xn,e):t}function Rn(t,e){if(!xn)return t;const i=an(e).getUnits(),n=xn.getUnits();return i&&n?t*Ye[i]/Ye[n]:t}function bn(t,e){if(!xn)return t;const i=an(e).getUnits(),n=xn.getUnits();return i&&n?t*Ye[n]/Ye[i]:t}function Pn(t,e,i){return function(n){let r,s;if(t.canWrapX()){const e=t.getExtent(),o=De(e);s=Vi(n=n.slice(0),t,o),s&&(n[0]=n[0]-s*o),n[0]=_i(n[0],e[0],e[2]),n[1]=_i(n[1],e[1],e[3]),r=i(n)}else r=i(n);return s&&e.canWrapX()&&(r[0]+=s*De(e.getExtent())),r}}function In(){hn(ei),hn(li),cn(li,ei,ii,ni)}function Ln(t,e,i,n,r,s){s=s||[];let o=0;for(let a=e;a1)u=i;else{if(d>0){for(let r=0;rr&&(r=a),s=i,o=n}return r}function zn(t,e,i,n,r){for(let s=0,o=i.length;s0;){const i=h.pop(),s=h.pop();let o=0;const a=t[s],u=t[s+1],d=t[i],g=t[i+1];for(let e=s+n;eo&&(c=e,o=i)}o>r&&(l[(c-e)/n]=1,s+nr&&(s[o++]=h,s[o++]=c,a=h,l=c);return h==a&&c==l||(s[o++]=h,s[o++]=c),o}function Qn(t,e){return e*Math.round(t/e)}function tr(t,e,i,n,r,s,o){if(e==i)return o;let a,l,h=Qn(t[e],r),c=Qn(t[e+1],r);e+=n,s[o++]=h,s[o++]=c;do{if(a=Qn(t[e],r),l=Qn(t[e+1],r),(e+=n)==i)return s[o++]=a,s[o++]=l,o}while(a==h&&l==c);for(;e0&&f>d)&&(g<0&&p0&&p>g)?(a=i,l=u):(s[o++]=a,s[o++]=l,h=a,c=l,a=i,l=u)}return s[o++]=a,s[o++]=l,o}function er(t,e,i,n,r,s,o,a){for(let l=0,h=i.length;ls&&(i-a)*(s-l)-(r-a)*(n-l)>0&&o++:n<=s&&(i-a)*(s-l)-(r-a)*(n-l)<0&&o--,a=i,l=n}return 0!==o}function pr(t,e,i,n,r,s){if(0===i.length)return!1;if(!fr(t,e,i[0],n,r,s))return!1;for(let e=1,o=i.length;ey&&(c=(u+d)/2,pr(t,e,i,n,c,p)&&(_=c,y=r)),u=d}return isNaN(_)&&(_=r[s]),o?(o.push(_,p,y),o):[_,p,y]}function yr(t,e,i,n,r){let s=[];for(let o=0,a=i.length;o=r[0]&&s[2]<=r[2]||(s[1]>=r[1]&&s[3]<=r[3]||xr(t,e,i,n,(function(t,e){return ze(r,t,e)})))))}function Sr(t,e,i,n,r){for(let s=0,o=i.length;s0}function br(t,e,i,n,r){r=void 0!==r&&r;for(let s=0,o=i.length;s0&&this.points_[i+2]>t;)i-=3;const n=this.points_[e+2]-this.points_[i+2];if(n<1e3/60)return!1;const r=this.points_[e]-this.points_[i],s=this.points_[e+1]-this.points_[i+1];return this.angle_=Math.atan2(s,r),this.initialVelocity_=Math.sqrt(r*r+s*s)/n,this.initialVelocity_>this.minVelocity_}getDistance(){return(this.minVelocity_-this.initialVelocity_)/this.decay_}getAngle(){return this.angle_}};const ls=/^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i,hs=/^([a-z]*)$|^hsla?\(.*\)$/i;function cs(t){return"string"==typeof t?t:ps(t)}function us(t){const e=document.createElement("div");if(e.style.color=t,""!==e.style.color){document.body.appendChild(e);const t=getComputedStyle(e).color;return document.body.removeChild(e),t}return""}const ds=function(){const t={};let e=0;return function(i){let n;if(t.hasOwnProperty(i))n=t[i];else{if(e>=1024){let i=0;for(const n in t)0==(3&i++)&&(delete t[n],--e)}n=function(t){let e,i,n,r,s;hs.exec(t)&&(t=us(t));if(ls.exec(t)){const o=t.length-1;let a;a=o<=4?1:2;const l=4===o||8===o;e=parseInt(t.substr(1+0*a,a),16),i=parseInt(t.substr(1+1*a,a),16),n=parseInt(t.substr(1+2*a,a),16),r=l?parseInt(t.substr(1+3*a,a),16):255,1==a&&(e=(e<<4)+e,i=(i<<4)+i,n=(n<<4)+n,l&&(r=(r<<4)+r)),s=[e,i,n,r/255]}else t.startsWith("rgba(")?(s=t.slice(5,-1).split(",").map(Number),fs(s)):t.startsWith("rgb(")?(s=t.slice(4,-1).split(",").map(Number),s.push(1),fs(s)):Ft(!1,14);return s}(i),t[i]=n,++e}return n}}();function gs(t){return Array.isArray(t)?t:ds(t)}function fs(t){return t[0]=_i(t[0]+.5|0,0,255),t[1]=_i(t[1]+.5|0,0,255),t[2]=_i(t[2]+.5|0,0,255),t[3]=_i(t[3],0,1),t}function ps(t){let e=t[0];e!=(0|e)&&(e=e+.5|0);let i=t[1];i!=(0|i)&&(i=i+.5|0);let n=t[2];n!=(0|n)&&(n=n+.5|0);return"rgba("+e+","+i+","+n+","+(void 0===t[3]?1:Math.round(100*t[3])/100)+")"}function ms(t){return hs.test(t)&&(t=us(t)),ls.test(t)||t.startsWith("rgba(")||t.startsWith("rgb(")}class _s{constructor(){this.cache_={},this.cacheSize_=0,this.maxCacheSize_=32}clear(){this.cache_={},this.cacheSize_=0}canExpireCache(){return this.cacheSize_>this.maxCacheSize_}expire(){if(this.canExpireCache()){let t=0;for(const e in this.cache_){const i=this.cache_[e];0!=(3&t++)||i.hasListener()||(delete this.cache_[e],--this.cacheSize_)}}}get(t,e,i){const n=ys(t,e,i);return n in this.cache_?this.cache_[n]:null}set(t,e,i,n){const r=ys(t,e,i);this.cache_[r]=n,++this.cacheSize_}setSize(t){this.maxCacheSize_=t,this.expire()}}function ys(t,e,i){return e+":"+t+":"+(i?cs(i):"null")}var xs=_s;const vs=new _s;var Ss="opacity",ws="visible",Ts="extent",Es="zIndex",Cs="maxResolution",Rs="minResolution",bs="maxZoom",Ps="minZoom",Is="source",Ls="map";var Fs=class extends W{constructor(t){super(),this.on,this.once,this.un,this.background_=t.background;const e=Object.assign({},t);"object"==typeof t.properties&&(delete e.properties,Object.assign(e,t.properties)),e[Ss]=void 0!==t.opacity?t.opacity:1,Ft("number"==typeof e[Ss],64),e[ws]=void 0===t.visible||t.visible,e[Es]=t.zIndex,e[Cs]=void 0!==t.maxResolution?t.maxResolution:1/0,e[Rs]=void 0!==t.minResolution?t.minResolution:0,e[Ps]=void 0!==t.minZoom?t.minZoom:-1/0,e[bs]=void 0!==t.maxZoom?t.maxZoom:1/0,this.className_=void 0!==e.className?e.className:"ol-layer",delete e.className,this.setProperties(e),this.state_=null}getBackground(){return this.background_}getClassName(){return this.className_}getLayerState(t){const e=this.state_||{layer:this,managed:void 0===t||t},i=this.getZIndex();return e.opacity=_i(Math.round(100*this.getOpacity())/100,0,1),e.visible=this.getVisible(),e.extent=this.getExtent(),e.zIndex=void 0!==i||e.managed?i:1/0,e.maxResolution=this.getMaxResolution(),e.minResolution=Math.max(this.getMinResolution(),0),e.minZoom=this.getMinZoom(),e.maxZoom=this.getMaxZoom(),this.state_=e,e}getLayersArray(t){return z()}getLayerStatesArray(t){return z()}getExtent(){return this.get(Ts)}getMaxResolution(){return this.get(Cs)}getMinResolution(){return this.get(Rs)}getMinZoom(){return this.get(Ps)}getMaxZoom(){return this.get(bs)}getOpacity(){return this.get(Ss)}getSourceState(){return z()}getVisible(){return this.get(ws)}getZIndex(){return this.get(Es)}setBackground(t){this.background_=t,this.changed()}setExtent(t){this.set(Ts,t)}setMaxResolution(t){this.set(Cs,t)}setMinResolution(t){this.set(Rs,t)}setMaxZoom(t){this.set(bs,t)}setMinZoom(t){this.set(Ps,t)}setOpacity(t){Ft("number"==typeof t,64),this.set(Ss,t)}setVisible(t){this.set(ws,t)}setZIndex(t){this.set(Es,t)}disposeInternal(){this.state_&&(this.state_.layer=null,this.state_=null),super.disposeInternal()}},Ms="prerender",As="postrender",Os="precompose",Ns="postcompose",Ds="rendercomplete";function Gs(t,e){if(!t.visible)return!1;const i=e.resolution;if(i=t.maxResolution)return!1;const n=e.zoom;return n>t.minZoom&&n<=t.maxZoom}var ks=class extends Fs{constructor(t){const e=Object.assign({},t);delete e.source,super(e),this.on,this.once,this.un,this.mapPrecomposeKey_=null,this.mapRenderKey_=null,this.sourceChangeKey_=null,this.renderer_=null,this.sourceReady_=!1,this.rendered=!1,t.render&&(this.render=t.render),t.map&&this.setMap(t.map),this.addChangeListener(Is,this.handleSourcePropertyChange_);const i=t.source?t.source:null;this.setSource(i)}getLayersArray(t){return(t=t||[]).push(this),t}getLayerStatesArray(t){return(t=t||[]).push(this.getLayerState()),t}getSource(){return this.get(Is)||null}getRenderSource(){return this.getSource()}getSourceState(){const t=this.getSource();return t?t.getState():"undefined"}handleSourceChange_(){this.changed(),this.sourceReady_||"ready"!==this.getSource().getState()||(this.sourceReady_=!0,this.dispatchEvent("sourceready"))}handleSourcePropertyChange_(){this.sourceChangeKey_&&(G(this.sourceChangeKey_),this.sourceChangeKey_=null),this.sourceReady_=!1;const t=this.getSource();t&&(this.sourceChangeKey_=N(t,w,this.handleSourceChange_,this),"ready"===t.getState()&&(this.sourceReady_=!0,setTimeout((()=>{this.dispatchEvent("sourceready")}),0))),this.changed()}getFeatures(t){return this.renderer_?this.renderer_.getFeatures(t):Promise.resolve([])}getData(t){return this.renderer_&&this.rendered?this.renderer_.getData(t):null}render(t,e){const i=this.getRenderer();if(i.prepareFrame(t))return this.rendered=!0,i.renderFrame(t,e)}unrender(){this.rendered=!1}setMapInternal(t){t||this.unrender(),this.set(Ls,t)}getMapInternal(){return this.get(Ls)}setMap(t){this.mapPrecomposeKey_&&(G(this.mapPrecomposeKey_),this.mapPrecomposeKey_=null),t||this.changed(),this.mapRenderKey_&&(G(this.mapRenderKey_),this.mapRenderKey_=null),t&&(this.mapPrecomposeKey_=N(t,Os,(function(t){const e=t.frameState.layerStatesArray,i=this.getLayerState(!1);Ft(!e.some((function(t){return t.layer===i.layer})),67),e.push(i)}),this),this.mapRenderKey_=N(this,w,t.render,t),this.changed())}setSource(t){this.set(Is,t)}getRenderer(){return this.renderer_||(this.renderer_=this.createRenderer()),this.renderer_}hasRenderer(){return!!this.renderer_}createRenderer(){return null}disposeInternal(){this.renderer_&&(this.renderer_.dispose(),delete this.renderer_),this.setSource(null),super.disposeInternal()}};function js(t,e){vs.expire()}var Bs=class extends o{constructor(t){super(),this.map_=t}dispatchRenderEvent(t,e){z()}calculateMatrices2D(t){const e=t.viewState,i=t.coordinateToPixelTransform,n=t.pixelToCoordinateTransform;Zt(i,t.size[0]/2,t.size[1]/2,1/e.resolution,-1/e.resolution,-e.rotation,-e.center[0],-e.center[1]),Yt(n,i)}forEachFeatureAtCoordinate(t,e,i,n,r,s,o,a){let l;const h=e.viewState;function c(t,e,i,n){return r.call(s,e,t?i:null,n)}const u=h.projection,d=Xi(t.slice(),u),g=[[0,0]];if(u.canWrapX()&&n){const t=De(u.getExtent());g.push([-t,0],[t,0])}const f=e.layerStatesArray,p=f.length,m=[],_=[];for(let n=0;n=0;--r){const s=f[r],u=s.layer;if(u.hasRenderer()&&Gs(s,h)&&o.call(a,u)){const r=u.getRenderer(),o=u.getSource();if(r&&o){const a=o.getWrapX()?d:t,h=c.bind(null,s.managed);_[0]=a[0]+g[n][0],_[1]=a[1]+g[n][1],l=r.forEachFeatureAtCoordinate(_,e,i,h,m)}if(l)return l}}if(0===m.length)return;const y=1/m.length;return m.forEach(((t,e)=>t.distanceSq+=e*y)),m.sort(((t,e)=>t.distanceSq-e.distanceSq)),m.some((t=>l=t.callback(t.feature,t.layer,t.geometry))),l}hasFeatureAtCoordinate(t,e,i,n,r,s){return void 0!==this.forEachFeatureAtCoordinate(t,e,i,n,f,this,r,s)}getMap(){return this.map_}renderFrame(t){z()}scheduleExpireIconCache(t){vs.canExpireCache()&&t.postRenderFunctions.push(js)}};var zs=class extends r{constructor(t,e,i,n){super(t),this.inversePixelTransform=e,this.frameState=i,this.context=n}};const Us="ol-hidden",Xs="ol-selectable",Vs="ol-unselectable",Ws="ol-unsupported",Zs="ol-control",Ys="ol-collapsed",Ks=new RegExp(["^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)","(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)","(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)","(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?","(?:small|large)|medium|smaller|larger|[\\.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))","(?:\\s*\\/\\s*(normal|[\\.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])?))","?\\s*([-,\\\"\\'\\sa-z]+?)\\s*$"].join(""),"i"),qs=["style","variant","weight","size","lineHeight","family"],Hs=function(t){const e=t.match(Ks);if(!e)return null;const i={lineHeight:"normal",size:"1.2em",style:"normal",weight:"normal",variant:"normal"};for(let t=0,n=qs.length;tMath.max(e,po(t,i))),0);return i[e]=n,n}function _o(t,e){const i=[],n=[],r=[];let s=0,o=0,a=0,l=0;for(let h=0,c=e.length;h<=c;h+=2){const u=e[h];if("\n"===u||h===c){s=Math.max(s,o),r.push(o),o=0,a+=l;continue}const d=e[h+1]||t.font,g=po(d,u);i.push(g),o+=g;const f=go(d);n.push(f),l=Math.max(l,f)}return{width:s,height:a,widths:i,heights:n,lineWidths:r}}function yo(t,e,i,n,r,s,o,a,l,h,c){t.save(),1!==i&&(t.globalAlpha*=i),e&&t.setTransform.apply(t,e),n.contextInstructions?(t.translate(l,h),t.scale(c[0],c[1]),function(t,e){const i=t.contextInstructions;for(let t=0,n=i.length;t=0;--e)n[e].renderDeclutter(t);Et(this.element_,this.children_),this.dispatchRenderEvent(Ns,t),this.renderedVisible_||(this.element_.style.display="",this.renderedVisible_=!0),this.scheduleExpireIconCache(t)}};class vo extends r{constructor(t,e){super(t),this.layer=e}}const So="layers";class wo extends Fs{constructor(t){t=t||{};const e=Object.assign({},t);delete e.layers;let i=t.layers;super(e),this.on,this.once,this.un,this.layersListenerKeys_=[],this.listenerKeys_={},this.addChangeListener(So,this.handleLayersChanged_),i?Array.isArray(i)?i=new H(i.slice(),{unique:!0}):Ft("function"==typeof i.getArray,43):i=new H(void 0,{unique:!0}),this.setLayers(i)}handleLayerChange_(){this.changed()}handleLayersChanged_(){this.layersListenerKeys_.forEach(G),this.layersListenerKeys_.length=0;const t=this.getLayers();this.layersListenerKeys_.push(N(t,Z,this.handleLayersAdd_,this),N(t,Y,this.handleLayersRemove_,this));for(const t in this.listenerKeys_)this.listenerKeys_[t].forEach(G);x(this.listenerKeys_);const e=t.getArray();for(let t=0,i=e.length;t{this.clickTimeoutId_=void 0;const e=new Co(Ro.SINGLECLICK,this.map_,t);this.dispatchEvent(e)}),250)}updateActivePointers_(t){const e=t,i=e.pointerId;if(e.type==Ro.POINTERUP||e.type==Ro.POINTERCANCEL){delete this.trackedTouches_[i];for(const t in this.trackedTouches_)if(this.trackedTouches_[t].target!==e.target){delete this.trackedTouches_[t];break}}else e.type!=Ro.POINTERDOWN&&e.type!=Ro.POINTERMOVE||(this.trackedTouches_[i]=e);this.activePointers_=Object.values(this.trackedTouches_)}handlePointerUp_(t){this.updateActivePointers_(t);const e=new Co(Ro.POINTERUP,this.map_,t,void 0,void 0,this.activePointers_);this.dispatchEvent(e),this.emulateClicks_&&!e.defaultPrevented&&!this.dragging_&&this.isMouseActionButton_(t)&&this.emulateClick_(this.down_),0===this.activePointers_.length&&(this.dragListenerKeys_.forEach(G),this.dragListenerKeys_.length=0,this.dragging_=!1,this.down_=null)}isMouseActionButton_(t){return 0===t.button}handlePointerDown_(t){this.emulateClicks_=0===this.activePointers_.length,this.updateActivePointers_(t);const e=new Co(Ro.POINTERDOWN,this.map_,t,void 0,void 0,this.activePointers_);this.dispatchEvent(e),this.down_={};for(const e in t){const i=t[e];this.down_[e]="function"==typeof i?m:i}if(0===this.dragListenerKeys_.length){const t=this.map_.getOwnerDocument();this.dragListenerKeys_.push(N(t,Ro.POINTERMOVE,this.handlePointerMove_,this),N(t,Ro.POINTERUP,this.handlePointerUp_,this),N(this.element_,Ro.POINTERCANCEL,this.handlePointerUp_,this)),this.element_.getRootNode&&this.element_.getRootNode()!==t&&this.dragListenerKeys_.push(N(this.element_.getRootNode(),Ro.POINTERUP,this.handlePointerUp_,this))}}handlePointerMove_(t){if(this.isMoving_(t)){this.updateActivePointers_(t),this.dragging_=!0;const e=new Co(Ro.POINTERDRAG,this.map_,t,this.dragging_,void 0,this.activePointers_);this.dispatchEvent(e)}}relayMoveEvent_(t){this.originalPointerMoveEvent_=t;const e=!(!this.down_||!this.isMoving_(t));this.dispatchEvent(new Co(Ro.POINTERMOVE,this.map_,t,e))}handleTouchMove_(t){const e=this.originalPointerMoveEvent_;e&&!e.defaultPrevented||"boolean"==typeof t.cancelable&&!0!==t.cancelable||t.preventDefault()}isMoving_(t){return this.dragging_||Math.abs(t.clientX-this.down_.clientX)>this.moveTolerance_||Math.abs(t.clientY-this.down_.clientY)>this.moveTolerance_}disposeInternal(){this.relayedListenerKey_&&(G(this.relayedListenerKey_),this.relayedListenerKey_=null),this.element_.removeEventListener(A,this.boundHandleTouchMove_),this.pointerdownListenerKey_&&(G(this.pointerdownListenerKey_),this.pointerdownListenerKey_=null),this.dragListenerKeys_.forEach(G),this.dragListenerKeys_.length=0,this.element_=null,super.disposeInternal()}},Mo="postrender",Ao="movestart",Oo="moveend",No="loadstart",Do="loadend",Go="layergroup",ko="size",jo="target",Bo="view";const zo=1/0;var Uo=class{constructor(t,e){this.priorityFunction_=t,this.keyFunction_=e,this.elements_=[],this.priorities_=[],this.queuedElements_={}}clear(){this.elements_.length=0,this.priorities_.length=0,x(this.queuedElements_)}dequeue(){const t=this.elements_,e=this.priorities_,i=t[0];1==t.length?(t.length=0,e.length=0):(t[0]=t.pop(),e[0]=e.pop(),this.siftUp_(0));const n=this.keyFunction_(i);return delete this.queuedElements_[n],i}enqueue(t){Ft(!(this.keyFunction_(t)in this.queuedElements_),31);const e=this.priorityFunction_(t);return e!=zo&&(this.elements_.push(t),this.priorities_.push(e),this.queuedElements_[this.keyFunction_(t)]=!0,this.siftDown_(0,this.elements_.length-1),!0)}getCount(){return this.elements_.length}getLeftChildIndex_(t){return 2*t+1}getRightChildIndex_(t){return 2*t+2}getParentIndex_(t){return t-1>>1}heapify_(){let t;for(t=(this.elements_.length>>1)-1;t>=0;t--)this.siftUp_(t)}isEmpty(){return 0===this.elements_.length}isKeyQueued(t){return t in this.queuedElements_}isQueued(t){return this.isKeyQueued(this.keyFunction_(t))}siftUp_(t){const e=this.elements_,i=this.priorities_,n=e.length,r=e[t],s=i[t],o=t;for(;t>1;){const r=this.getLeftChildIndex_(t),s=this.getRightChildIndex_(t),o=st;){const t=this.getParentIndex_(e);if(!(n[t]>s))break;i[e]=i[t],n[e]=n[t],e=t}i[e]=r,n[e]=s}reprioritize(){const t=this.priorityFunction_,e=this.elements_,i=this.priorities_;let n=0;const r=e.length;let s,o,a;for(o=0;o0;)n=this.dequeue()[0],r=n.getKey(),i=n.getState(),i!==$||r in this.tilesLoadingKeys_||(this.tilesLoadingKeys_[r]=!0,++this.tilesLoading_,++s,n.load())}};function Vo(t,e,i,n,r){if(!t||!(i in t.wantedTiles))return zo;if(!t.wantedTiles[i][e.getKey()])return zo;const s=t.viewState.center,o=n[0]-s[0],a=n[1]-s[1];return 65536*Math.log(r)+Math.sqrt(o*o+a*a)/r}var Wo=0,Zo=1,Yo={CENTER:"center",RESOLUTION:"resolution",ROTATION:"rotation"};const Ko=256;function qo(t,e,i){return function(n,r,s,o,a){if(!n)return;if(!r&&!e)return n;const l=e?0:s[0]*r,h=e?0:s[1]*r,c=a?a[0]:0,u=a?a[1]:0;let d=t[0]+l/2+c,g=t[2]-l/2+c,f=t[1]+h/2+u,p=t[3]-h/2+u;d>g&&(d=(g+d)/2,g=d),f>p&&(f=(p+f)/2,p=f);let m=_i(n[0],d,g),_=_i(n[1],f,p);if(o&&i&&r){const t=30*r;m+=-t*Math.log(1+Math.max(0,d-n[0])/t)+t*Math.log(1+Math.max(0,n[0]-g)/t),_+=-t*Math.log(1+Math.max(0,f-n[1])/t)+t*Math.log(1+Math.max(0,n[1]-p)/t)}return[m,_]}}function Ho(t){return t}function $o(t,e,i,n){const r=De(e)/i[0],s=Me(e)/i[1];return n?Math.min(t,Math.max(r,s)):Math.min(t,Math.min(r,s))}function Jo(t,e,i){let n=Math.min(t,e);return n*=Math.log(1+50*Math.max(0,t/e-1))/50+1,i&&(n=Math.max(n,i),n/=Math.log(1+50*Math.max(0,i/t-1))/50+1),_i(n,i/2,2*e)}function Qo(t,e,i,n){return e=void 0===e||e,function(r,s,o,a){if(void 0!==r){const l=t[0],c=t[t.length-1],u=i?$o(l,i,o,n):l;if(a)return e?Jo(r,u,c):_i(r,c,u);const d=Math.min(u,r),g=Math.floor(h(t,d,s));return t[g]>u&&g1&&"function"==typeof arguments[i-1]&&(e=arguments[i-1],--i);let n=0;for(;n0}getInteracting(){return this.hints_[Zo]>0}cancelAnimations(){let t;this.setHint(Wo,-this.hints_[Wo]);for(let e=0,i=this.animations_.length;e=0;--i){const n=this.animations_[i];let r=!0;for(let i=0,s=n.length;i0?o/s.duration:1;a>=1?(s.complete=!0,a=1):r=!1;const l=s.easing(a);if(s.sourceCenter){const t=s.sourceCenter[0],e=s.sourceCenter[1],i=s.targetCenter[0],n=s.targetCenter[1];this.nextCenter_=s.targetCenter;const r=t+l*(i-t),o=e+l*(n-e);this.targetCenter_=[r,o]}if(s.sourceResolution&&s.targetResolution){const t=1===l?s.targetResolution:s.sourceResolution+l*(s.targetResolution-s.sourceResolution);if(s.anchor){const e=this.getViewportSize_(this.getRotation()),i=this.constraints_.resolution(t,0,e,!0);this.targetCenter_=this.calculateCenterZoom(i,s.anchor)}this.nextResolution_=s.targetResolution,this.targetResolution_=t,this.applyTargetState_(!0)}if(void 0!==s.sourceRotation&&void 0!==s.targetRotation){const t=1===l?Ti(s.targetRotation+Math.PI,2*Math.PI)-Math.PI:s.sourceRotation+l*(s.targetRotation-s.sourceRotation);if(s.anchor){const e=this.constraints_.rotation(t,!0);this.targetCenter_=this.calculateCenterRotate(e,s.anchor)}this.nextRotation_=s.targetRotation,this.targetRotation_=t}if(this.applyTargetState_(!0),e=!0,!s.complete)break}if(r){this.animations_[i]=null,this.setHint(Wo,-1),this.nextCenter_=null,this.nextResolution_=NaN,this.nextRotation_=NaN;const t=n[0].callback;t&&oa(t,!0)}}this.animations_=this.animations_.filter(Boolean),e&&void 0===this.updateAnimationKey_&&(this.updateAnimationKey_=requestAnimationFrame(this.updateAnimations_.bind(this)))}calculateCenterRotate(t,e){let i;const n=this.getCenterInternal();return void 0!==n&&(i=[n[0]-e[0],n[1]-e[1]],Gi(i,t-this.getRotation()),Fi(i,e)),i}calculateCenterZoom(t,e){let i;const n=this.getCenterInternal(),r=this.getResolution();if(void 0!==n&&void 0!==r){i=[e[0]-t*(e[0]-n[0])/r,e[1]-t*(e[1]-n[1])/r]}return i}getViewportSize_(t){const e=this.viewportSize_;if(t){const i=e[0],n=e[1];return[Math.abs(i*Math.cos(t))+Math.abs(n*Math.sin(t)),Math.abs(i*Math.sin(t))+Math.abs(n*Math.cos(t))]}return e}setViewportSize(t){this.viewportSize_=Array.isArray(t)?t.slice():[100,100],this.getAnimating()||this.resolveConstraints(0)}getCenter(){const t=this.getCenterInternal();return t?wn(t,this.getProjection()):t}getCenterInternal(){return this.get(Yo.CENTER)}getConstraints(){return this.constraints_}getConstrainResolution(){return this.get("constrainResolution")}getHints(t){return void 0!==t?(t[0]=this.hints_[0],t[1]=this.hints_[1],t):this.hints_.slice()}calculateExtent(t){return En(this.calculateExtentInternal(t),this.getProjection())}calculateExtentInternal(t){t=t||this.getViewportSizeMinusPadding_();const e=this.getCenterInternal();Ft(e,1);const i=this.getResolution();Ft(void 0!==i,2);const n=this.getRotation();return Ft(void 0!==n,3),Le(e,i,n,t)}getMaxResolution(){return this.maxResolution_}getMinResolution(){return this.minResolution_}getMaxZoom(){return this.getZoomForResolution(this.minResolution_)}setMaxZoom(t){this.applyOptions_(this.getUpdatedOptions_({maxZoom:t}))}getMinZoom(){return this.getZoomForResolution(this.maxResolution_)}setMinZoom(t){this.applyOptions_(this.getUpdatedOptions_({minZoom:t}))}setConstrainResolution(t){this.applyOptions_(this.getUpdatedOptions_({constrainResolution:t}))}getProjection(){return this.projection_}getResolution(){return this.get(Yo.RESOLUTION)}getResolutions(){return this.resolutions_}getResolutionForExtent(t,e){return this.getResolutionForExtentInternal(Cn(t,this.getProjection()),e)}getResolutionForExtentInternal(t,e){e=e||this.getViewportSizeMinusPadding_();const i=De(t)/e[0],n=Me(t)/e[1];return Math.max(i,n)}getResolutionForValueFunction(t){t=t||2;const e=this.getConstrainedResolution(this.maxResolution_),i=this.minResolution_,n=Math.log(e/i)/Math.log(t);return function(i){return e/Math.pow(t,i*n)}}getRotation(){return this.get(Yo.ROTATION)}getValueForResolutionFunction(t){const e=Math.log(t||2),i=this.getConstrainedResolution(this.maxResolution_),n=this.minResolution_,r=Math.log(i/n)/e;return function(t){return Math.log(i/t)/e/r}}getViewportSizeMinusPadding_(t){let e=this.getViewportSize_(t);const i=this.padding_;return i&&(e=[e[0]-i[1]-i[3],e[1]-i[0]-i[2]]),e}getState(){const t=this.getProjection(),e=this.getResolution(),i=this.getRotation();let n=this.getCenterInternal();const r=this.padding_;if(r){const t=this.getViewportSizeMinusPadding_();n=ua(n,this.getViewportSize_(),[t[0]/2+r[3],t[1]/2+r[0]],e,i)}return{center:n.slice(0),projection:void 0!==t?t:null,resolution:e,nextCenter:this.nextCenter_,nextResolution:this.nextResolution_,nextRotation:this.nextRotation_,rotation:i,zoom:this.getZoom()}}getZoom(){let t;const e=this.getResolution();return void 0!==e&&(t=this.getZoomForResolution(e)),t}getZoomForResolution(t){let e,i,n=this.minZoom_||0;if(this.resolutions_){const r=h(this.resolutions_,t,1);n=r,e=this.resolutions_[r],i=r==this.resolutions_.length-1?2:e/this.resolutions_[r+1]}else e=this.maxResolution_,i=this.zoomFactor_;return n+Math.log(e/t)/Math.log(i)}getResolutionForZoom(t){if(this.resolutions_){if(this.resolutions_.length<=1)return 0;const e=_i(Math.floor(t),0,this.resolutions_.length-2),i=this.resolutions_[e]/this.resolutions_[e+1];return this.resolutions_[e]/Math.pow(i,_i(t-e,0,1))}return this.maxResolution_/Math.pow(this.zoomFactor_,t-this.minZoom_)}fit(t,e){let i;if(Ft(Array.isArray(t)||"function"==typeof t.getSimplifiedGeometry,24),Array.isArray(t)){Ft(!ke(t),25);i=Nr(Cn(t,this.getProjection()))}else if("Circle"===t.getType()){const e=Cn(t.getExtent(),this.getProjection());i=Nr(e),i.rotate(this.getRotation(),Pe(e))}else{const e=Sn();i=e?t.clone().transform(e,this.getProjection()):t}this.fitInternal(i,e)}rotatedExtentForGeometry(t){const e=this.getRotation(),i=Math.cos(e),n=Math.sin(-e),r=t.getFlatCoordinates(),s=t.getStride();let o=1/0,a=1/0,l=-1/0,h=-1/0;for(let t=0,e=r.length;t0;if(this.renderedVisible_!=i&&(this.element.style.display=i?"":"none",this.renderedVisible_=i),!d(e,this.renderedAttributions_)){Tt(this.ulElement_);for(let t=0,i=e.length;t0&&e%(2*Math.PI)!=0?t.animate({rotation:0,duration:this.duration_,easing:nt}):t.setRotation(0))}render(t){const e=t.frameState;if(!e)return;const i=e.viewState.rotation;if(i!=this.rotation_){const t="rotate("+i+"rad)";if(this.autoHide_){const t=this.element.classList.contains(Us);t||0!==i?t&&0!==i&&this.element.classList.remove(Us):this.element.classList.add(Us)}this.label_.style.transform=t}this.rotation_=i}};var ma=class extends ga{constructor(t){t=t||{},super({element:document.createElement("div"),target:t.target});const e=void 0!==t.className?t.className:"ol-zoom",i=void 0!==t.delta?t.delta:1,n=void 0!==t.zoomInClassName?t.zoomInClassName:e+"-in",r=void 0!==t.zoomOutClassName?t.zoomOutClassName:e+"-out",s=void 0!==t.zoomInLabel?t.zoomInLabel:"+",o=void 0!==t.zoomOutLabel?t.zoomOutLabel:"–",a=void 0!==t.zoomInTipLabel?t.zoomInTipLabel:"Zoom in",l=void 0!==t.zoomOutTipLabel?t.zoomOutTipLabel:"Zoom out",h=document.createElement("button");h.className=n,h.setAttribute("type","button"),h.title=a,h.appendChild("string"==typeof s?document.createTextNode(s):s),h.addEventListener(C,this.handleClick_.bind(this,i),!1);const c=document.createElement("button");c.className=r,c.setAttribute("type","button"),c.title=l,c.appendChild("string"==typeof o?document.createTextNode(o):o),c.addEventListener(C,this.handleClick_.bind(this,-i),!1);const u=e+" "+"ol-unselectable "+Zs,d=this.element;d.className=u,d.appendChild(h),d.appendChild(c),this.duration_=void 0!==t.duration?t.duration:250}handleClick_(t,e){e.preventDefault(),this.zoomByDelta_(t)}zoomByDelta_(t){const e=this.getMap().getView();if(!e)return;const i=e.getZoom();if(void 0!==i){const n=e.getConstrainedZoom(i+t);this.duration_>0?(e.getAnimating()&&e.cancelAnimations(),e.animate({zoom:n,duration:this.duration_,easing:nt})):e.setZoom(n)}}};function _a(t){t=t||{};const e=new H;(void 0===t.zoom||t.zoom)&&e.push(new ma(t.zoomOptions));(void 0===t.rotate||t.rotate)&&e.push(new pa(t.rotateOptions));return(void 0===t.attribution||t.attribution)&&e.push(new fa(t.attributionOptions)),e}var ya="active";function xa(t,e,i){const n=t.getCenterInternal();if(n){const r=[n[0]+e[0],n[1]+e[1]];t.animateInternal({duration:void 0!==i?i:250,easing:st,center:t.getConstrainedCenter(r)})}}function va(t,e,i,n){const r=t.getZoom();if(void 0===r)return;const s=t.getConstrainedZoom(r+e),o=t.getResolutionForZoom(s);t.getAnimating()&&t.cancelAnimations(),t.animate({resolution:o,anchor:i,duration:void 0!==n?n:250,easing:nt})}var Sa=class extends W{constructor(t){super(),this.on,this.once,this.un,t&&t.handleEvent&&(this.handleEvent=t.handleEvent),this.map_=null,this.setActive(!0)}getActive(){return this.get(ya)}getMap(){return this.map_}handleEvent(t){return!0}setActive(t){this.set(ya,t)}setMap(t){this.map_=t}};var wa=class extends Sa{constructor(t){super(),t=t||{},this.delta_=t.delta?t.delta:1,this.duration_=void 0!==t.duration?t.duration:250}handleEvent(t){let e=!1;if(t.type==Ro.DBLCLICK){const i=t.originalEvent,n=t.map,r=t.coordinate,s=i.shiftKey?-this.delta_:this.delta_;va(n.getView(),s,r,this.duration_),i.preventDefault(),e=!0}return!e}};function Ta(t){const e=t.length;let i=0,n=0;for(let r=0;r0}}else if(t.type==Ro.POINTERDOWN){const i=this.handleDownEvent(t);this.handlingDownUpSequence=i,e=this.stopDown(i)}else t.type==Ro.POINTERMOVE&&this.handleMoveEvent(t);return!e}handleMoveEvent(t){}handleUpEvent(t){return!1}stopDown(t){return t}updateTrackedPointers_(t){t.activePointers&&(this.targetPointers=t.activePointers)}};function Ca(t){const e=arguments;return function(t){let i=!0;for(let n=0,r=e.length;n0&&this.condition_(t)){const e=t.map.getView();return this.lastCentroid=null,e.getAnimating()&&e.cancelAnimations(),this.kinetic_&&this.kinetic_.begin(),this.noKinetic_=this.targetPointers.length>1,!0}return!1}};var Ba=class extends Ea{constructor(t){t=t||{},super({stopDown:p}),this.condition_=t.condition?t.condition:ba,this.lastAngle_=void 0,this.duration_=void 0!==t.duration?t.duration:250}handleDragEvent(t){if(!Ga(t))return;const e=t.map,i=e.getView();if(i.getConstraints().rotation===ia)return;const n=e.getSize(),r=t.pixel,s=Math.atan2(n[1]/2-r[1],r[0]-n[0]/2);if(void 0!==this.lastAngle_){const t=s-this.lastAngle_;i.adjustRotationInternal(-t)}this.lastAngle_=s}handleUpEvent(t){if(!Ga(t))return!0;return t.map.getView().endInteraction(this.duration_),!1}handleDownEvent(t){if(!Ga(t))return!1;if(Fa(t)&&this.condition_(t)){return t.map.getView().beginInteraction(),this.lastAngle_=void 0,!0}return!1}};var za=class extends o{constructor(t){super(),this.geometry_=null,this.element_=document.createElement("div"),this.element_.style.position="absolute",this.element_.style.pointerEvents="auto",this.element_.className="ol-box "+t,this.map_=null,this.startPixel_=null,this.endPixel_=null}disposeInternal(){this.setMap(null)}render_(){const t=this.startPixel_,e=this.endPixel_,i="px",n=this.element_.style;n.left=Math.min(t[0],e[0])+i,n.top=Math.min(t[1],e[1])+i,n.width=Math.abs(e[0]-t[0])+i,n.height=Math.abs(e[1]-t[1])+i}setMap(t){if(this.map_){this.map_.getOverlayContainer().removeChild(this.element_);const t=this.element_.style;t.left="inherit",t.top="inherit",t.width="inherit",t.height="inherit"}this.map_=t,this.map_&&this.map_.getOverlayContainer().appendChild(this.element_)}setPixels(t,e){this.startPixel_=t,this.endPixel_=e,this.createOrUpdateGeometry(),this.render_()}createOrUpdateGeometry(){const t=this.startPixel_,e=this.endPixel_,i=[t,[t[0],e[1]],e,[e[0],t[1]]].map(this.map_.getCoordinateFromPixelInternal,this.map_);i[4]=i[0].slice(),this.geometry_?this.geometry_.setCoordinates([i]):this.geometry_=new Ar([i])}getGeometry(){return this.geometry_}};const Ua="boxstart",Xa="boxdrag",Va="boxend",Wa="boxcancel";class Za extends r{constructor(t,e,i){super(t),this.coordinate=e,this.mapBrowserEvent=i}}var Ya=class extends Ea{constructor(t){super(),this.on,this.once,this.un,t=t||{},this.box_=new za(t.className||"ol-dragbox"),this.minArea_=void 0!==t.minArea?t.minArea:64,t.onBoxEnd&&(this.onBoxEnd=t.onBoxEnd),this.startPixel_=null,this.condition_=t.condition?t.condition:Fa,this.boxEndCondition_=t.boxEndCondition?t.boxEndCondition:this.defaultBoxEndCondition}defaultBoxEndCondition(t,e,i){const n=i[0]-e[0],r=i[1]-e[1];return n*n+r*r>=this.minArea_}getGeometry(){return this.box_.getGeometry()}handleDragEvent(t){this.box_.setPixels(this.startPixel_,t.pixel),this.dispatchEvent(new Za(Xa,t.coordinate,t))}handleUpEvent(t){this.box_.setMap(null);const e=this.boxEndCondition_(t,this.startPixel_,t.pixel);return e&&this.onBoxEnd(t),this.dispatchEvent(new Za(e?Va:Wa,t.coordinate,t)),!1}handleDownEvent(t){return!!this.condition_(t)&&(this.startPixel_=t.pixel,this.box_.setMap(t.map),this.box_.setPixels(this.startPixel_,this.startPixel_),this.dispatchEvent(new Za(Ua,t.coordinate,t)),!0)}onBoxEnd(t){}};var Ka=class extends Ya{constructor(t){super({condition:(t=t||{}).condition?t.condition:Na,className:t.className||"ol-dragzoom",minArea:t.minArea}),this.duration_=void 0!==t.duration?t.duration:200,this.out_=void 0!==t.out&&t.out}onBoxEnd(t){const e=this.getMap().getView();let i=this.getGeometry();if(this.out_){const t=e.rotatedExtentForGeometry(i),n=e.getResolutionForExtentInternal(t),r=e.getResolution()/n;i=i.clone(),i.scale(r*r)}e.fitInternal(i,{duration:this.duration_,easing:nt})}},qa=37,Ha=38,$a=39,Ja=40;var Qa=class extends Sa{constructor(t){super(),t=t||{},this.defaultCondition_=function(t){return Oa(t)&&Da(t)},this.condition_=void 0!==t.condition?t.condition:this.defaultCondition_,this.duration_=void 0!==t.duration?t.duration:100,this.pixelDelta_=void 0!==t.pixelDelta?t.pixelDelta:128}handleEvent(t){let e=!1;if(t.type==L){const i=t.originalEvent,n=i.keyCode;if(this.condition_(t)&&(n==Ja||n==qa||n==$a||n==Ha)){const r=t.map.getView(),s=r.getResolution()*this.pixelDelta_;let o=0,a=0;n==Ja?a=-s:n==qa?o=-s:n==$a?o=s:a=s;const l=[o,a];Gi(l,r.getRotation()),xa(r,l,this.duration_),i.preventDefault(),e=!0}}return!e}};var tl=class extends Sa{constructor(t){super(),t=t||{},this.condition_=t.condition?t.condition:Da,this.delta_=t.delta?t.delta:1,this.duration_=void 0!==t.duration?t.duration:100}handleEvent(t){let e=!1;if(t.type==L||t.type==F){const i=t.originalEvent,n=i.charCode;if(this.condition_(t)&&(n=="+".charCodeAt(0)||n=="-".charCodeAt(0))){const r=t.map,s=n=="+".charCodeAt(0)?this.delta_:-this.delta_;va(r.getView(),s,void 0,this.duration_),i.preventDefault(),e=!0}}return!e}};var el=class extends Sa{constructor(t){super(t=t||{}),this.totalDelta_=0,this.lastDelta_=0,this.maxDelta_=void 0!==t.maxDelta?t.maxDelta:1,this.duration_=void 0!==t.duration?t.duration:250,this.timeout_=void 0!==t.timeout?t.timeout:80,this.useAnchor_=void 0===t.useAnchor||t.useAnchor,this.constrainResolution_=void 0!==t.constrainResolution&&t.constrainResolution;const e=t.condition?t.condition:La;this.condition_=t.onFocusOnly?Ca(Ia,e):e,this.lastAnchor_=null,this.startTime_=void 0,this.timeoutId_,this.mode_=void 0,this.trackpadEventGap_=400,this.trackpadTimeoutId_,this.deltaPerZoom_=300}endInteraction_(){this.trackpadTimeoutId_=void 0;const t=this.getMap();if(!t)return;t.getView().endInteraction(void 0,this.lastDelta_?this.lastDelta_>0?1:-1:0,this.lastAnchor_)}handleEvent(t){if(!this.condition_(t))return!0;if(t.type!==O)return!0;const e=t.map,i=t.originalEvent;let n;if(i.preventDefault(),this.useAnchor_&&(this.lastAnchor_=t.coordinate),t.type==O&&(n=i.deltaY,lt&&i.deltaMode===WheelEvent.DOM_DELTA_PIXEL&&(n/=gt),i.deltaMode===WheelEvent.DOM_DELTA_LINE&&(n*=40)),0===n)return!1;this.lastDelta_=n;const r=Date.now();void 0===this.startTime_&&(this.startTime_=r),(!this.mode_||r-this.startTime_>this.trackpadEventGap_)&&(this.mode_=Math.abs(n)<4?"trackpad":"wheel");const s=e.getView();if("trackpad"===this.mode_&&!s.getConstrainResolution()&&!this.constrainResolution_)return this.trackpadTimeoutId_?clearTimeout(this.trackpadTimeoutId_):(s.getAnimating()&&s.cancelAnimations(),s.beginInteraction()),this.trackpadTimeoutId_=setTimeout(this.endInteraction_.bind(this),this.timeout_),s.adjustZoom(-n/this.deltaPerZoom_,this.lastAnchor_),this.startTime_=r,!1;this.totalDelta_+=n;const o=Math.max(this.timeout_-(r-this.startTime_),0);return clearTimeout(this.timeoutId_),this.timeoutId_=setTimeout(this.handleWheelZoom_.bind(this,e),o),!1}handleWheelZoom_(t){const e=t.getView();e.getAnimating()&&e.cancelAnimations();let i=-_i(this.totalDelta_,-this.maxDelta_*this.deltaPerZoom_,this.maxDelta_*this.deltaPerZoom_)/this.deltaPerZoom_;(e.getConstrainResolution()||this.constrainResolution_)&&(i=i?i>0?1:-1:0),va(e,i,this.lastAnchor_,this.duration_),this.mode_=void 0,this.totalDelta_=0,this.lastAnchor_=null,this.startTime_=void 0,this.timeoutId_=void 0}setMouseAnchor(t){this.useAnchor_=t,t||(this.lastAnchor_=null)}};var il=class extends Ea{constructor(t){const e=t=t||{};e.stopDown||(e.stopDown=p),super(e),this.anchor_=null,this.lastAngle_=void 0,this.rotating_=!1,this.rotationDelta_=0,this.threshold_=void 0!==t.threshold?t.threshold:.3,this.duration_=void 0!==t.duration?t.duration:250}handleDragEvent(t){let e=0;const i=this.targetPointers[0],n=this.targetPointers[1],r=Math.atan2(n.clientY-i.clientY,n.clientX-i.clientX);if(void 0!==this.lastAngle_){const t=r-this.lastAngle_;this.rotationDelta_+=t,!this.rotating_&&Math.abs(this.rotationDelta_)>this.threshold_&&(this.rotating_=!0),e=t}this.lastAngle_=r;const s=t.map,o=s.getView();o.getConstraints().rotation!==ia&&(this.anchor_=s.getCoordinateFromPixelInternal(s.getEventPixel(Ta(this.targetPointers))),this.rotating_&&(s.render(),o.adjustRotationInternal(e,this.anchor_)))}handleUpEvent(t){if(this.targetPointers.length<2){return t.map.getView().endInteraction(this.duration_),!1}return!0}handleDownEvent(t){if(this.targetPointers.length>=2){const e=t.map;return this.anchor_=null,this.lastAngle_=void 0,this.rotating_=!1,this.rotationDelta_=0,this.handlingDownUpSequence||e.getView().beginInteraction(),!0}return!1}};var nl=class extends Ea{constructor(t){const e=t=t||{};e.stopDown||(e.stopDown=p),super(e),this.anchor_=null,this.duration_=void 0!==t.duration?t.duration:400,this.lastDistance_=void 0,this.lastScaleDelta_=1}handleDragEvent(t){let e=1;const i=this.targetPointers[0],n=this.targetPointers[1],r=i.clientX-n.clientX,s=i.clientY-n.clientY,o=Math.sqrt(r*r+s*s);void 0!==this.lastDistance_&&(e=this.lastDistance_/o),this.lastDistance_=o;const a=t.map,l=a.getView();1!=e&&(this.lastScaleDelta_=e),this.anchor_=a.getCoordinateFromPixelInternal(a.getEventPixel(Ta(this.targetPointers))),a.render(),l.adjustResolutionInternal(e,this.anchor_)}handleUpEvent(t){if(this.targetPointers.length<2){const e=t.map.getView(),i=this.lastScaleDelta_>1?1:-1;return e.endInteraction(this.duration_,i),!1}return!0}handleDownEvent(t){if(this.targetPointers.length>=2){const e=t.map;return this.anchor_=null,this.lastDistance_=void 0,this.lastScaleDelta_=1,this.handlingDownUpSequence||e.getView().beginInteraction(),!0}return!1}};function rl(t){t=t||{};const e=new H,i=new as(-.005,.05,100);(void 0===t.altShiftDragRotate||t.altShiftDragRotate)&&e.push(new Ba);(void 0===t.doubleClickZoom||t.doubleClickZoom)&&e.push(new wa({delta:t.zoomDelta,duration:t.zoomDuration}));(void 0===t.dragPan||t.dragPan)&&e.push(new ja({onFocusOnly:t.onFocusOnly,kinetic:i}));(void 0===t.pinchRotate||t.pinchRotate)&&e.push(new il);(void 0===t.pinchZoom||t.pinchZoom)&&e.push(new nl({duration:t.zoomDuration}));(void 0===t.keyboard||t.keyboard)&&(e.push(new Qa),e.push(new tl({delta:t.zoomDelta,duration:t.zoomDuration})));(void 0===t.mouseWheelZoom||t.mouseWheelZoom)&&e.push(new el({onFocusOnly:t.onFocusOnly,duration:t.zoomDuration}));return(void 0===t.shiftDragZoom||t.shiftDragZoom)&&e.push(new Ka({duration:t.zoomDuration})),e}function sl(t,e,i){return void 0===i&&(i=[0,0]),i[0]=t[0]+2*e,i[1]=t[1]+2*e,i}function ol(t){return t[0]>0&&t[1]>0}function al(t,e,i){return void 0===i&&(i=[0,0]),i[0]=t[0]*e+.5|0,i[1]=t[1]*e+.5|0,i}function ll(t,e){return Array.isArray(t)?t:(void 0===e?e=[t,t]:(e[0]=t,e[1]=t),e)}function hl(t){t instanceof ks?t.setMapInternal(null):t instanceof To&&t.getLayers().forEach(hl)}function cl(t,e){if(t instanceof ks)t.setMapInternal(e);else if(t instanceof To){const i=t.getLayers().getArray();for(let t=0,n=i.length;tthis.updateSize())),this.controls=e.controls||_a(),this.interactions=e.interactions||rl({onFocusOnly:!0}),this.overlays_=e.overlays,this.overlayIdIndex_={},this.renderer_=null,this.postRenderFunctions_=[],this.tileQueue_=new Xo(this.getTilePriority.bind(this),this.handleTileChange_.bind(this)),this.addChangeListener(Go,this.handleLayerGroupChanged_),this.addChangeListener(Bo,this.handleViewChanged_),this.addChangeListener(ko,this.handleSizeChanged_),this.addChangeListener(jo,this.handleTargetChanged_),this.setProperties(e.values);const i=this;!t.view||t.view instanceof da||t.view.then((function(t){i.setView(new da(t))})),this.controls.addEventListener(Z,(t=>{t.element.setMap(this)})),this.controls.addEventListener(Y,(t=>{t.element.setMap(null)})),this.interactions.addEventListener(Z,(t=>{t.element.setMap(this)})),this.interactions.addEventListener(Y,(t=>{t.element.setMap(null)})),this.overlays_.addEventListener(Z,(t=>{this.addOverlayInternal_(t.element)})),this.overlays_.addEventListener(Y,(t=>{const e=t.element.getId();void 0!==e&&delete this.overlayIdIndex_[e.toString()],t.element.setMap(null)})),this.controls.forEach((t=>{t.setMap(this)})),this.interactions.forEach((t=>{t.setMap(this)})),this.overlays_.forEach(this.addOverlayInternal_.bind(this))}addControl(t){this.getControls().push(t)}addInteraction(t){this.getInteractions().push(t)}addLayer(t){this.getLayerGroup().getLayers().push(t)}handleLayerAdd_(t){cl(t.layer,this)}addOverlay(t){this.getOverlays().push(t)}addOverlayInternal_(t){const e=t.getId();void 0!==e&&(this.overlayIdIndex_[e.toString()]=t),t.setMap(this)}disposeInternal(){this.controls.clear(),this.interactions.clear(),this.overlays_.clear(),this.resizeObserver_.disconnect(),this.setTarget(null),super.disposeInternal()}forEachFeatureAtPixel(t,e,i){if(!this.frameState_||!this.renderer_)return;const n=this.getCoordinateFromPixelInternal(t),r=void 0!==(i=void 0!==i?i:{}).hitTolerance?i.hitTolerance:0,s=void 0!==i.layerFilter?i.layerFilter:f,o=!1!==i.checkWrapped;return this.renderer_.forEachFeatureAtCoordinate(n,this.frameState_,r,o,e,null,s,null)}getFeaturesAtPixel(t,e){const i=[];return this.forEachFeatureAtPixel(t,(function(t){i.push(t)}),e),i}getAllLayers(){const t=[];return function e(i){i.forEach((function(i){i instanceof To?e(i.getLayers()):t.push(i)}))}(this.getLayers()),t}hasFeatureAtPixel(t,e){if(!this.frameState_||!this.renderer_)return!1;const i=this.getCoordinateFromPixelInternal(t),n=void 0!==(e=void 0!==e?e:{}).layerFilter?e.layerFilter:f,r=void 0!==e.hitTolerance?e.hitTolerance:0,s=!1!==e.checkWrapped;return this.renderer_.hasFeatureAtCoordinate(i,this.frameState_,r,s,n,null)}getEventCoordinate(t){return this.getCoordinateFromPixel(this.getEventPixel(t))}getEventCoordinateInternal(t){return this.getCoordinateFromPixelInternal(this.getEventPixel(t))}getEventPixel(t){const e=this.viewport_.getBoundingClientRect(),i=this.getSize(),n=e.width/i[0],r=e.height/i[1],s="changedTouches"in t?t.changedTouches[0]:t;return[(s.clientX-e.left)/n,(s.clientY-e.top)/r]}getTarget(){return this.get(jo)}getTargetElement(){return this.targetElement_}getCoordinateFromPixel(t){return wn(this.getCoordinateFromPixelInternal(t),this.getView().getProjection())}getCoordinateFromPixelInternal(t){const e=this.frameState_;return e?zt(e.pixelToCoordinateTransform,t.slice()):null}getControls(){return this.controls}getOverlays(){return this.overlays_}getOverlayById(t){const e=this.overlayIdIndex_[t.toString()];return void 0!==e?e:null}getInteractions(){return this.interactions}getLayerGroup(){return this.get(Go)}setLayers(t){const e=this.getLayerGroup();if(t instanceof H)return void e.setLayers(t);const i=e.getLayers();i.clear(),i.extend(t)}getLayers(){return this.getLayerGroup().getLayers()}getLoadingOrNotReady(){const t=this.getLayerGroup().getLayerStatesArray();for(let e=0,i=t.length;e=0;i--){const n=e[i];if(n.getMap()!==this||!n.getActive()||!this.getTargetElement())continue;if(!n.handleEvent(t)||t.propagationStopped)break}}}handlePostRender(){const t=this.frameState_,e=this.tileQueue_;if(!e.isEmpty()){let i=this.maxTilesLoading_,n=i;if(t){const e=t.viewHints;if(e[Wo]||e[Zo]){const e=Date.now()-t.time>8;i=e?0:8,n=e?0:2}}e.getTilesLoading(){this.postRenderTimeoutHandle_=void 0,this.handlePostRender()}),0))}setLayerGroup(t){const e=this.getLayerGroup();e&&this.handleLayerRemove_(new vo("removelayer",e)),this.set(Go,t)}setSize(t){this.set(ko,t)}setTarget(t){this.set(jo,t)}setView(t){if(!t||t instanceof da)return void this.set(Bo,t);this.set(Bo,new da);const e=this;t.then((function(t){e.setView(new da(t))}))}updateSize(){const t=this.getTargetElement();let e;if(t){const i=getComputedStyle(t),n=t.offsetWidth-parseFloat(i.borderLeftWidth)-parseFloat(i.paddingLeft)-parseFloat(i.paddingRight)-parseFloat(i.borderRightWidth),r=t.offsetHeight-parseFloat(i.borderTopWidth)-parseFloat(i.paddingTop)-parseFloat(i.paddingBottom)-parseFloat(i.borderBottomWidth);isNaN(n)||isNaN(r)||(e=[n,r],!ol(e)&&(t.offsetWidth||t.offsetHeight||t.getClientRects().length)&&Ji("No map visible because the map container's width or height are 0."))}const i=this.getSize();!e||i&&d(e,i)||(this.setSize(e),this.updateViewportSize_())}updateViewportSize_(){const t=this.getView();if(t){let e;const i=getComputedStyle(this.viewport_);i.width&&i.height&&(e=[parseInt(i.width,10),parseInt(i.height,10)]),t.setViewportSize(e)}}};const dl="element",gl="map",fl="offset",pl="position",ml="positioning";var _l=class extends W{constructor(t){super(),this.on,this.once,this.un,this.options=t,this.id=t.id,this.insertFirst=void 0===t.insertFirst||t.insertFirst,this.stopEvent=void 0===t.stopEvent||t.stopEvent,this.element=document.createElement("div"),this.element.className=void 0!==t.className?t.className:"ol-overlay-container ol-selectable",this.element.style.position="absolute",this.element.style.pointerEvents="auto",this.autoPan=!0===t.autoPan?{}:t.autoPan||void 0,this.rendered={transform_:"",visible:!0},this.mapPostrenderListenerKey=null,this.addChangeListener(dl,this.handleElementChanged),this.addChangeListener(gl,this.handleMapChanged),this.addChangeListener(fl,this.handleOffsetChanged),this.addChangeListener(pl,this.handlePositionChanged),this.addChangeListener(ml,this.handlePositioningChanged),void 0!==t.element&&this.setElement(t.element),this.setOffset(void 0!==t.offset?t.offset:[0,0]),this.setPositioning(t.positioning||"top-left"),void 0!==t.position&&this.setPosition(t.position)}getElement(){return this.get(dl)}getId(){return this.id}getMap(){return this.get(gl)||null}getOffset(){return this.get(fl)}getPosition(){return this.get(pl)}getPositioning(){return this.get(ml)}handleElementChanged(){Tt(this.element);const t=this.getElement();t&&this.element.appendChild(t)}handleMapChanged(){this.mapPostrenderListenerKey&&(wt(this.element),G(this.mapPostrenderListenerKey),this.mapPostrenderListenerKey=null);const t=this.getMap();if(t){this.mapPostrenderListenerKey=N(t,Mo,this.render,this),this.updatePixelPosition();const e=this.stopEvent?t.getOverlayContainerStopEvent():t.getOverlayContainer();this.insertFirst?e.insertBefore(this.element,e.childNodes[0]||null):e.appendChild(this.element),this.performAutoPan()}}render(){this.updatePixelPosition()}handleOffsetChanged(){this.updatePixelPosition()}handlePositionChanged(){this.updatePixelPosition(),this.performAutoPan()}handlePositioningChanged(){this.updatePixelPosition()}setElement(t){this.set(dl,t)}setMap(t){this.set(gl,t)}setOffset(t){this.set(fl,t)}setPosition(t){this.set(pl,t)}performAutoPan(){this.autoPan&&this.panIntoView(this.autoPan)}panIntoView(t){const e=this.getMap();if(!e||!e.getTargetElement()||!this.get(pl))return;const i=this.getRect(e.getTargetElement(),e.getSize()),n=this.getElement(),r=this.getRect(n,[xt(n),vt(n)]),s=void 0===(t=t||{}).margin?20:t.margin;if(!le(i,r)){const n=r[0]-i[0],o=i[2]-r[2],a=r[1]-i[1],l=i[3]-r[3],h=[0,0];if(n<0?h[0]=n-s:o<0&&(h[0]=Math.abs(o)+s),a<0?h[1]=a-s:l<0&&(h[1]=Math.abs(l)+s),0!==h[0]||0!==h[1]){const i=e.getView().getCenterInternal(),n=e.getPixelFromCoordinateInternal(i);if(!n)return;const r=[n[0]+h[0],n[1]+h[1]],s=t.animation||{};e.getView().animateInternal({center:e.getCoordinateFromPixelInternal(r),duration:s.duration,easing:s.easing})}}}getRect(t,e){const i=t.getBoundingClientRect(),n=i.left+window.pageXOffset,r=i.top+window.pageYOffset;return[n,r,n+e[0],r+e[1]]}setPositioning(t){this.set(ml,t)}setVisible(t){this.rendered.visible!==t&&(this.element.style.display=t?"":"none",this.rendered.visible=t)}updatePixelPosition(){const t=this.getMap(),e=this.getPosition();if(!t||!t.isRendered()||!e)return void this.setVisible(!1);const i=t.getPixelFromCoordinate(e),n=t.getSize();this.updateRenderedPosition(i,n)}updateRenderedPosition(t,e){const i=this.element.style,n=this.getOffset(),r=this.getPositioning();this.setVisible(!0);let s="0%",o="0%";"bottom-right"==r||"center-right"==r||"top-right"==r?s="-100%":"bottom-center"!=r&&"center-center"!=r&&"top-center"!=r||(s="-50%"),"bottom-left"==r||"bottom-center"==r||"bottom-right"==r?o="-100%":"center-left"!=r&&"center-center"!=r&&"center-right"!=r||(o="-50%");const a=`translate(${s}, ${o}) translate(${Math.round(t[0]+n[0])+"px"}, ${Math.round(t[1]+n[1])+"px"})`;this.rendered.transform_!=a&&(this.rendered.transform_=a,i.transform=a)}getOptions(){return this.options}};var yl=class{constructor(t){this.highWaterMark=void 0!==t?t:2048,this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null}canExpireCache(){return this.highWaterMark>0&&this.getCount()>this.highWaterMark}expireCache(t){for(;this.canExpireCache();)this.pop()}clear(){this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null}containsKey(t){return this.entries_.hasOwnProperty(t)}forEach(t){let e=this.oldest_;for(;e;)t(e.value_,e.key_,this),e=e.newer}get(t,e){const i=this.entries_[t];return Ft(void 0!==i,15),i===this.newest_||(i===this.oldest_?(this.oldest_=this.oldest_.newer,this.oldest_.older=null):(i.newer.older=i.older,i.older.newer=i.newer),i.newer=null,i.older=this.newest_,this.newest_.newer=i,this.newest_=i),i.value_}remove(t){const e=this.entries_[t];return Ft(void 0!==e,15),e===this.newest_?(this.newest_=e.older,this.newest_&&(this.newest_.newer=null)):e===this.oldest_?(this.oldest_=e.newer,this.oldest_&&(this.oldest_.older=null)):(e.newer.older=e.older,e.older.newer=e.newer),delete this.entries_[t],--this.count_,e.value_}getCount(){return this.count_}getKeys(){const t=new Array(this.count_);let e,i=0;for(e=this.newest_;e;e=e.older)t[i++]=e.key_;return t}getValues(){const t=new Array(this.count_);let e,i=0;for(e=this.newest_;e;e=e.older)t[i++]=e.value_;return t}peekLast(){return this.oldest_.value_}peekLastKey(){return this.oldest_.key_}peekFirstKey(){return this.newest_.key_}peek(t){if(this.containsKey(t))return this.entries_[t].value_}pop(){const t=this.oldest_;return delete this.entries_[t.key_],t.newer&&(t.newer.older=null),this.oldest_=t.newer,this.oldest_||(this.newest_=null),--this.count_,t.value_}replace(t,e){this.get(t),this.entries_[t].value_=e}set(t,e){Ft(!(t in this.entries_),16);const i={key_:t,newer:null,older:this.newest_,value_:e};this.newest_?this.newest_.newer=i:this.oldest_=i,this.newest_=i,this.entries_[t]=i,++this.count_}setSize(t){this.highWaterMark=t}};function xl(t,e,i,n){return void 0!==n?(n[0]=t,n[1]=e,n[2]=i,n):[t,e,i]}function vl(t,e,i){return t+"/"+e+"/"+i}function Sl(t){return vl(t[0],t[1],t[2])}function wl(t){const[e,i,n]=t.substring(t.lastIndexOf("/")+1,t.length).split(",").map(Number);return vl(e,i,n)}function Tl(t){return t.split("/").map(Number)}function El(t){return(t[1]<i||i>e.getMaxZoom())return!1;const s=e.getFullTileRange(i);return!s||s.containsXY(n,r)}var Rl=class extends yl{clear(){for(;this.getCount()>0;)this.pop().release();super.clear()}expireCache(t){for(;this.canExpireCache();){if(this.peekLast().getKey()in t)break;this.pop().release()}}pruneExceptNewestZ(){if(0===this.getCount())return;const t=Tl(this.peekFirstKey())[0];this.forEach((e=>{e.tileCoord[0]!==t&&(this.remove(Sl(e.tileCoord)),e.release())}))}};class bl{constructor(t,e,i,n){this.minX=t,this.maxX=e,this.minY=i,this.maxY=n}contains(t){return this.containsXY(t[1],t[2])}containsTileRange(t){return this.minX<=t.minX&&t.maxX<=this.maxX&&this.minY<=t.minY&&t.maxY<=this.maxY}containsXY(t,e){return this.minX<=t&&t<=this.maxX&&this.minY<=e&&e<=this.maxY}equals(t){return this.minX==t.minX&&this.minY==t.minY&&this.maxX==t.maxX&&this.maxY==t.maxY}extend(t){t.minXthis.maxX&&(this.maxX=t.maxX),t.minYthis.maxY&&(this.maxY=t.maxY)}getHeight(){return this.maxY-this.minY+1}getSize(){return[this.getWidth(),this.getHeight()]}getWidth(){return this.maxX-this.minX+1}intersects(t){return this.minX<=t.maxX&&this.maxX>=t.minX&&this.minY<=t.maxY&&this.maxY>=t.minY}}function Pl(t,e,i,n,r){return void 0!==r?(r.minX=t,r.maxX=e,r.minY=i,r.maxY=n,r):new bl(t,e,i,n)}var Il=bl;const Ll=[];var Fl=class extends ot{constructor(t,e,i,n){super(t,e,{transition:0}),this.context_={},this.executorGroups={},this.declutterExecutorGroups={},this.loadingSourceTiles=0,this.hitDetectionImageData={},this.replayState_={},this.sourceTiles=[],this.errorTileKeys={},this.wantedResolution,this.getSourceTiles=n.bind(void 0,this),this.wrappedTileCoord=i}getContext(t){const e=X(t);return e in this.context_||(this.context_[e]=_t(1,1,Ll)),this.context_[e]}hasContext(t){return X(t)in this.context_}getImage(t){return this.hasContext(t)?this.getContext(t).canvas:null}getReplayState(t){const e=X(t);return e in this.replayState_||(this.replayState_[e]={dirty:!1,renderedRenderOrder:null,renderedResolution:NaN,renderedRevision:-1,renderedTileResolution:NaN,renderedTileRevision:-1,renderedTileZ:-1}),this.replayState_[e]}load(){this.getSourceTiles()}release(){for(const t in this.context_){const e=this.context_[t];yt(e),Ll.push(e.canvas),delete this.context_[t]}super.release()}};var Ml=class extends ot{constructor(t,e,i,n,r,s){super(t,e,s),this.extent=null,this.format_=n,this.features_=null,this.loader_,this.projection=null,this.resolution,this.tileLoadFunction_=r,this.url_=i,this.key=i}getFormat(){return this.format_}getFeatures(){return this.features_}load(){this.state==$&&(this.setState(J),this.tileLoadFunction_(this,this.url_),this.loader_&&this.loader_(this.extent,this.resolution,this.projection))}onLoad(t,e){this.setFeatures(t)}onError(){this.setState(tt)}setFeatures(t){this.features_=t,this.setState(Q)}setLoader(t){this.loader_=t}};function Al(t){return Array.isArray(t)?ps(t):t}let Ol,Nl=!1;function Dl(t,e,i,n,r,s,o){const a=new XMLHttpRequest;a.open("GET","function"==typeof t?t(i,n,r):t,!0),"arraybuffer"==e.getType()&&(a.responseType="arraybuffer"),a.withCredentials=Nl,a.onload=function(t){if(!a.status||a.status>=200&&a.status<300){const t=e.getType();let n;"json"==t||"text"==t?n=a.responseText:"xml"==t?(n=a.responseXML,n||(n=(new DOMParser).parseFromString(a.responseText,"application/xml"))):"arraybuffer"==t&&(n=a.response),n?s(e.readFeatures(n,{extent:i,featureProjection:r}),e.readProjection(n)):o()}else o()},a.onerror=o,a.send()}function Gl(t,e){return function(i,n,r,s,o){const a=this;Dl(t,e,i,n,r,(function(t,e){a.addFeatures(t),void 0!==s&&s(t)}),o||m)}}function kl(t,e){return[[-1/0,-1/0,1/0,1/0]]}function jl(t,e,i,n){const r=document.createElement("script"),s="olc_"+X(e);function o(){delete window[s],r.parentNode.removeChild(r)}r.async=!0,r.src=t+(t.includes("?")?"&":"?")+(n||"callback")+"="+s;const a=setTimeout((function(){o(),i&&i()}),1e4);window[s]=function(t){clearTimeout(a),o(),e(t)},document.head.appendChild(r)}class Bl extends Error{constructor(t){super("Unexpected response status: "+t.status),this.name="ResponseError",this.response=t}}class zl extends Error{constructor(t){super("Failed to issue request"),this.name="ClientError",this.client=t}}function Ul(t){return new Promise((function(e,i){const n=new XMLHttpRequest;n.addEventListener("load",(function(t){const n=t.target;if(!n.status||n.status>=200&&n.status<300){let t;try{t=JSON.parse(n.responseText)}catch(t){const e="Error parsing response text as JSON: "+t.message;return void i(new Error(e))}e(t)}else i(new Bl(n))})),n.addEventListener("error",(function(t){i(new zl(t.target))})),n.open("GET",t),n.setRequestHeader("Accept","application/json"),n.send()}))}function Xl(t,e){return e.includes("://")?e:new URL(e,t).href}var Vl=class{drawCustom(t,e,i,n){}drawGeometry(t){}setStyle(t){}drawCircle(t,e){}drawFeature(t,e){}drawGeometryCollection(t,e){}drawLineString(t,e){}drawMultiLineString(t,e){}drawMultiPoint(t,e){}drawMultiPolygon(t,e){}drawPoint(t,e){}drawPolygon(t,e){}drawText(t,e){}setFillStrokeStyle(t,e){}setImageStyle(t,e){}setTextStyle(t,e){}};var Wl=class extends Vl{constructor(t,e,i,n,r,s,o){super(),this.context_=t,this.pixelRatio_=e,this.extent_=i,this.transform_=n,this.transformRotation_=n?Ci(Math.atan2(n[1],n[0]),10):0,this.viewRotation_=r,this.squaredTolerance_=s,this.userTransform_=o,this.contextFillState_=null,this.contextStrokeState_=null,this.contextTextState_=null,this.fillState_=null,this.strokeState_=null,this.image_=null,this.imageAnchorX_=0,this.imageAnchorY_=0,this.imageHeight_=0,this.imageOpacity_=0,this.imageOriginX_=0,this.imageOriginY_=0,this.imageRotateWithView_=!1,this.imageRotation_=0,this.imageScale_=[0,0],this.imageWidth_=0,this.text_="",this.textOffsetX_=0,this.textOffsetY_=0,this.textRotateWithView_=!1,this.textRotation_=0,this.textScale_=[0,0],this.textFillState_=null,this.textStrokeState_=null,this.textState_=null,this.pixelCoordinates_=[],this.tmpLocalTransform_=[1,0,0,1,0,0]}drawImages_(t,e,i,n){if(!this.image_)return;const r=Ln(t,e,i,n,this.transform_,this.pixelCoordinates_),s=this.context_,o=this.tmpLocalTransform_,a=s.globalAlpha;1!=this.imageOpacity_&&(s.globalAlpha=a*this.imageOpacity_);let l=this.imageRotation_;0===this.transformRotation_&&(l-=this.viewRotation_),this.imageRotateWithView_&&(l+=this.viewRotation_);for(let t=0,e=r.length;tt*this.pixelRatio_)),lineDashOffset:(r||0)*this.pixelRatio_,lineJoin:void 0!==s?s:eo,lineWidth:(void 0!==o?o:1)*this.pixelRatio_,miterLimit:void 0!==a?a:io,strokeStyle:Al(t||no)}}else this.strokeState_=null}setImageStyle(t){let e;if(!t||!(e=t.getSize()))return void(this.image_=null);const i=t.getPixelRatio(this.pixelRatio_),n=t.getAnchor(),r=t.getOrigin();this.image_=t.getImage(this.pixelRatio_),this.imageAnchorX_=n[0]*i,this.imageAnchorY_=n[1]*i,this.imageHeight_=e[1]*i,this.imageOpacity_=t.getOpacity(),this.imageOriginX_=r[0],this.imageOriginY_=r[1],this.imageRotateWithView_=t.getRotateWithView(),this.imageRotation_=t.getRotation();const s=t.getScaleArray();this.imageScale_=[s[0]*this.pixelRatio_/i,s[1]*this.pixelRatio_/i],this.imageWidth_=e[0]*i}setTextStyle(t){if(t){const e=t.getFill();if(e){const t=e.getColor();this.textFillState_={fillStyle:Al(t||Js)}}else this.textFillState_=null;const i=t.getStroke();if(i){const t=i.getColor(),e=i.getLineCap(),n=i.getLineDash(),r=i.getLineDashOffset(),s=i.getLineJoin(),o=i.getWidth(),a=i.getMiterLimit();this.textStrokeState_={lineCap:void 0!==e?e:Qs,lineDash:n||to,lineDashOffset:r||0,lineJoin:void 0!==s?s:eo,lineWidth:void 0!==o?o:1,miterLimit:void 0!==a?a:io,strokeStyle:Al(t||no)}}else this.textStrokeState_=null;const n=t.getFont(),r=t.getOffsetX(),s=t.getOffsetY(),o=t.getRotateWithView(),a=t.getRotation(),l=t.getScaleArray(),h=t.getText(),c=t.getTextAlign(),u=t.getTextBaseline();this.textState_={font:void 0!==n?n:$s,textAlign:void 0!==c?c:ro,textBaseline:void 0!==u?u:so},this.text_=void 0!==h?Array.isArray(h)?h.reduce(((t,e,i)=>t+(i%2?" ":e)),""):h:"",this.textOffsetX_=void 0!==r?this.pixelRatio_*r:0,this.textOffsetY_=void 0!==s?this.pixelRatio_*s:0,this.textRotateWithView_=void 0!==o&&o,this.textRotation_=void 0!==a?a:0,this.textScale_=[this.pixelRatio_*l[0],this.pixelRatio_*l[1]]}else this.text_=""}};const Zl={Point:function(t,e,i,n,r){const s=i.getImage(),o=i.getText();let a;if(s){if(s.getImageState()!=ts)return;let l=t;if(r){const h=s.getDeclutterMode();if("none"!==h)if(l=r,"obstacle"===h){const r=t.getBuilder(i.getZIndex(),"Image");r.setImageStyle(s,a),r.drawPoint(e,n)}else o&&o.getText()&&(a={})}const h=l.getBuilder(i.getZIndex(),"Image");h.setImageStyle(s,a),h.drawPoint(e,n)}if(o&&o.getText()){let s=t;r&&(s=r);const l=s.getBuilder(i.getZIndex(),"Text");l.setTextStyle(o,a),l.drawText(e,n)}},LineString:function(t,e,i,n,r){const s=i.getStroke();if(s){const r=t.getBuilder(i.getZIndex(),"LineString");r.setFillStrokeStyle(null,s),r.drawLineString(e,n)}const o=i.getText();if(o&&o.getText()){const s=(r||t).getBuilder(i.getZIndex(),"Text");s.setTextStyle(o),s.drawText(e,n)}},Polygon:function(t,e,i,n,r){const s=i.getFill(),o=i.getStroke();if(s||o){const r=t.getBuilder(i.getZIndex(),"Polygon");r.setFillStrokeStyle(s,o),r.drawPolygon(e,n)}const a=i.getText();if(a&&a.getText()){const s=(r||t).getBuilder(i.getZIndex(),"Text");s.setTextStyle(a),s.drawText(e,n)}},MultiPoint:function(t,e,i,n,r){const s=i.getImage(),o=i.getText();let a;if(s){if(s.getImageState()!=ts)return;let l=t;if(r){const h=s.getDeclutterMode();if("none"!==h)if(l=r,"obstacle"===h){const r=t.getBuilder(i.getZIndex(),"Image");r.setImageStyle(s,a),r.drawMultiPoint(e,n)}else o&&o.getText()&&(a={})}const h=l.getBuilder(i.getZIndex(),"Image");h.setImageStyle(s,a),h.drawMultiPoint(e,n)}if(o&&o.getText()){let s=t;r&&(s=r);const l=s.getBuilder(i.getZIndex(),"Text");l.setTextStyle(o,a),l.drawText(e,n)}},MultiLineString:function(t,e,i,n,r){const s=i.getStroke();if(s){const r=t.getBuilder(i.getZIndex(),"LineString");r.setFillStrokeStyle(null,s),r.drawMultiLineString(e,n)}const o=i.getText();if(o&&o.getText()){const s=(r||t).getBuilder(i.getZIndex(),"Text");s.setTextStyle(o),s.drawText(e,n)}},MultiPolygon:function(t,e,i,n,r){const s=i.getFill(),o=i.getStroke();if(o||s){const r=t.getBuilder(i.getZIndex(),"Polygon");r.setFillStrokeStyle(s,o),r.drawMultiPolygon(e,n)}const a=i.getText();if(a&&a.getText()){const s=(r||t).getBuilder(i.getZIndex(),"Text");s.setTextStyle(a),s.drawText(e,n)}},GeometryCollection:function(t,e,i,n,r){const s=e.getGeometriesArray();let o,a;for(o=0,a=s.length;o2||Math.abs(t[4*e+3]-191.25)>2}function nh(t,e,i,n){const r=_n(i,e,t);let s=ln(e,n,i);const o=e.getMetersPerUnit();void 0!==o&&(s*=o);const a=t.getMetersPerUnit();void 0!==a&&(s/=a);const l=t.getExtent();if(!l||ae(l,r)){const e=ln(t,s,r)/s;isFinite(e)&&e>0&&(s/=e)}return s}function rh(t,e,i,n){const r=Pe(i);let s=nh(t,e,r,n);return(!isFinite(s)||s<=0)&&Ee(i,(function(i){return s=nh(t,e,i,n),isFinite(s)&&s>0})),s}function sh(t,e,i,n,r,s,o,a,l,h,c,u){const d=_t(Math.round(i*t),Math.round(i*e),th);if(u||(d.imageSmoothingEnabled=!1),0===l.length)return d.canvas;function g(t){return Math.round(t*i)/i}d.scale(i,i),d.globalCompositeOperation="lighter";const f=[1/0,1/0,-1/0,-1/0];l.forEach((function(t,e,i){ye(f,t.extent)}));const p=De(f),m=Me(f),_=_t(Math.round(i*p/n),Math.round(i*m/n),th);u||(_.imageSmoothingEnabled=!1);const y=i/n;l.forEach((function(t,e,i){const n=t.extent[0]-f[0],r=-(t.extent[3]-f[3]),s=De(t.extent),o=Me(t.extent);t.image.width>0&&t.image.height>0&&_.drawImage(t.image,h,h,t.image.width-2*h,t.image.height-2*h,n*y,r*y,s*y,o*y)}));const x=Oe(o);return a.getTriangles().forEach((function(t,e,r){const o=t.source,a=t.target;let l=o[0][0],h=o[0][1],c=o[1][0],p=o[1][1],m=o[2][0],y=o[2][1];const v=g((a[0][0]-x[0])/s),S=g(-(a[0][1]-x[1])/s),w=g((a[1][0]-x[0])/s),T=g(-(a[1][1]-x[1])/s),E=g((a[2][0]-x[0])/s),C=g(-(a[2][1]-x[1])/s),R=l,b=h;l=0,h=0,c-=R,p-=b,m-=R,y-=b;const P=vi([[c,p,0,0,w-v],[m,y,0,0,E-v],[0,0,c,p,T-S],[0,0,m,y,C-S]]);if(P){if(d.save(),d.beginPath(),function(){if(void 0===Ql){const t=_t(6,6,th);t.globalCompositeOperation="lighter",t.fillStyle="rgba(210, 0, 0, 0.75)",eh(t,4,5,4,0),eh(t,4,5,0,5);const e=t.getImageData(0,0,3,3).data;Ql=ih(e,0)||ih(e,4)||ih(e,8),yt(t),th.push(t.canvas)}return Ql}()||!u){d.moveTo(w,T);const t=4,e=v-w,i=S-T;for(let n=0;n{if(Math.max(e.source[0][0],e.source[1][0],e.source[2][0])-t>this.sourceWorldWidth_/2){const i=[[e.source[0][0],e.source[0][1]],[e.source[1][0],e.source[1][1]],[e.source[2][0],e.source[2][1]]];i[0][0]-t>this.sourceWorldWidth_/2&&(i[0][0]-=this.sourceWorldWidth_),i[1][0]-t>this.sourceWorldWidth_/2&&(i[1][0]-=this.sourceWorldWidth_),i[2][0]-t>this.sourceWorldWidth_/2&&(i[2][0]-=this.sourceWorldWidth_);const n=Math.min(i[0][0],i[1][0],i[2][0]);Math.max(i[0][0],i[1][0],i[2][0])-n.5&&c<1;let g=!1;if(l>0){if(this.targetProj_.isGlobal()&&this.targetWorldWidth_){g=De(ne([t,e,i,n]))/this.targetWorldWidth_>.25||g}!d&&this.sourceProj_.isGlobal()&&c&&(g=c>.25||g)}if(!g&&this.maxSourceExtent_&&isFinite(h[0])&&isFinite(h[1])&&isFinite(h[2])&&isFinite(h[3])&&!Ge(h,this.maxSourceExtent_))return;let f=0;if(!(g||isFinite(r[0])&&isFinite(r[1])&&isFinite(s[0])&&isFinite(s[1])&&isFinite(o[0])&&isFinite(o[1])&&isFinite(a[0])&&isFinite(a[1])))if(l>0)g=!0;else if(f=(isFinite(r[0])&&isFinite(r[1])?0:8)+(isFinite(s[0])&&isFinite(s[1])?0:4)+(isFinite(o[0])&&isFinite(o[1])?0:2)+(isFinite(a[0])&&isFinite(a[1])?0:1),1!=f&&2!=f&&4!=f&&8!=f)return;if(l>0){if(!g){const e=[(t[0]+i[0])/2,(t[1]+i[1])/2],n=this.transformInv_(e);let s;if(d){s=(Ti(r[0],u)+Ti(o[0],u))/2-Ti(n[0],u)}else s=(r[0]+o[0])/2-n[0];const a=(r[1]+o[1])/2-n[1];g=s*s+a*a>this.errorThresholdSquared_}if(g){if(Math.abs(t[0]-i[0])<=Math.abs(t[1]-i[1])){const h=[(e[0]+i[0])/2,(e[1]+i[1])/2],c=this.transformInv_(h),u=[(n[0]+t[0])/2,(n[1]+t[1])/2],d=this.transformInv_(u);this.addQuad_(t,e,h,u,r,s,c,d,l-1),this.addQuad_(u,h,i,n,d,c,o,a,l-1)}else{const h=[(t[0]+e[0])/2,(t[1]+e[1])/2],c=this.transformInv_(h),u=[(i[0]+n[0])/2,(i[1]+n[1])/2],d=this.transformInv_(u);this.addQuad_(t,h,u,n,r,c,d,a,l-1),this.addQuad_(h,e,i,u,c,s,o,d,l-1)}return}}if(d){if(!this.canWrapXInSource_)return;this.wrapsXInSource_=!0}0==(11&f)&&this.addTriangle_(t,i,n,r,o,a),0==(14&f)&&this.addTriangle_(t,i,e,r,o,s),f&&(0==(13&f)&&this.addTriangle_(e,n,t,s,a,r),0==(7&f)&&this.addTriangle_(e,n,i,s,a,o))}calculateSourceExtent(){const t=[1/0,1/0,-1/0,-1/0];return this.triangles_.forEach((function(e,i,n){const r=e.source;xe(t,r[0]),xe(t,r[1]),xe(t,r[2])})),t}getTriangles(){return this.triangles_}};var lh=class extends ot{constructor(t,e,i,n,r,s,o,a,l,h,c,u){super(r,$,{interpolate:!!u}),this.renderEdges_=void 0!==c&&c,this.pixelRatio_=o,this.gutter_=a,this.canvas_=null,this.sourceTileGrid_=e,this.targetTileGrid_=n,this.wrappedTileCoord_=s||r,this.sourceTiles_=[],this.sourcesListenerKeys_=null,this.sourceZ_=0;const d=n.getTileCoordExtent(this.wrappedTileCoord_),g=this.targetTileGrid_.getExtent();let f=this.sourceTileGrid_.getExtent();const p=g?Ae(d,g):d;if(0===Ce(p))return void(this.state=et);const m=t.getExtent();m&&(f=f?Ae(f,m):m);const _=n.getResolution(this.wrappedTileCoord_[0]),y=rh(t,i,p,_);if(!isFinite(y)||y<=0)return void(this.state=et);const x=void 0!==h?h:oh;if(this.triangulation_=new ah(t,i,p,f,y*x,_),0===this.triangulation_.getTriangles().length)return void(this.state=et);this.sourceZ_=e.getZForResolution(y);let v=this.triangulation_.calculateSourceExtent();if(f&&(t.canWrapX()?(v[1]=_i(v[1],f[1],f[3]),v[3]=_i(v[3],f[1],f[3])):v=Ae(v,f)),Ce(v)){const t=e.getTileRangeForExtentAndZ(v,this.sourceZ_);for(let e=t.minX;e<=t.maxX;e++)for(let i=t.minY;i<=t.maxY;i++){const t=l(this.sourceZ_,e,i,o);t&&this.sourceTiles_.push(t)}0===this.sourceTiles_.length&&(this.state=et)}else this.state=et}getImage(){return this.canvas_}reproject_(){const t=[];if(this.sourceTiles_.forEach((e=>{e&&e.getState()==Q&&t.push({extent:this.sourceTileGrid_.getTileCoordExtent(e.tileCoord),image:e.getImage()})})),this.sourceTiles_.length=0,0===t.length)this.state=tt;else{const e=this.wrappedTileCoord_[0],i=this.targetTileGrid_.getTileSize(e),n="number"==typeof i?i:i[0],r="number"==typeof i?i:i[1],s=this.targetTileGrid_.getResolution(e),o=this.sourceTileGrid_.getResolution(this.sourceZ_),a=this.targetTileGrid_.getTileCoordExtent(this.wrappedTileCoord_);this.canvas_=sh(n,r,this.pixelRatio_,o,this.sourceTileGrid_.getExtent(),s,a,this.triangulation_,t,this.gutter_,this.renderEdges_,this.interpolate),this.state=Q}this.changed()}load(){if(this.state==$){this.state=J,this.changed();let t=0;this.sourcesListenerKeys_=[],this.sourceTiles_.forEach((e=>{const i=e.getState();if(i==$||i==J){t++;const i=N(e,w,(function(n){const r=e.getState();r!=Q&&r!=tt&&r!=et||(G(i),t--,0===t&&(this.unlistenSources_(),this.reproject_()))}),this);this.sourcesListenerKeys_.push(i)}})),0===t?setTimeout(this.reproject_.bind(this),0):this.sourceTiles_.forEach((function(t,e,i){t.getState()==$&&t.load()}))}}unlistenSources_(){this.sourcesListenerKeys_.forEach(G),this.sourcesListenerKeys_=null}release(){this.canvas_&&(yt(this.canvas_.getContext("2d")),th.push(this.canvas_),this.canvas_=null),super.release()}},hh="tileloadstart",ch="tileloadend",uh="tileloaderror";function dh(t){return t?Array.isArray(t)?function(e){return t}:"function"==typeof t?t:function(e){return[t]}:null}var gh=class extends W{constructor(t){super(),this.projection=an(t.projection),this.attributions_=dh(t.attributions),this.attributionsCollapsible_=void 0===t.attributionsCollapsible||t.attributionsCollapsible,this.loading=!1,this.state_=void 0!==t.state?t.state:"ready",this.wrapX_=void 0!==t.wrapX&&t.wrapX,this.interpolate_=!!t.interpolate,this.viewResolver=null,this.viewRejector=null;const e=this;this.viewPromise_=new Promise((function(t,i){e.viewResolver=t,e.viewRejector=i}))}getAttributions(){return this.attributions_}getAttributionsCollapsible(){return this.attributionsCollapsible_}getProjection(){return this.projection}getResolutions(t){return null}getView(){return this.viewPromise_}getState(){return this.state_}getWrapX(){return this.wrapX_}getInterpolate(){return this.interpolate_}refresh(){this.changed()}setAttributions(t){this.attributions_=dh(t),this.changed()}setState(t){this.state_=t,this.changed()}};const fh=[0,0,0];var ph=class{constructor(t){let e;if(this.minZoom=void 0!==t.minZoom?t.minZoom:0,this.resolutions_=t.resolutions,Ft(g(this.resolutions_,(function(t,e){return e-t}),!0),17),!t.origins)for(let t=0,i=this.resolutions_.length-1;t=this.minZoom;){if(2===this.zoomFactor_?(s=Math.floor(s/2),o=Math.floor(o/2),r=Pl(s,s,o,o,i)):r=this.getTileRangeForExtentAndZ(a,l,i),e(l,r))return!0;--l}return!1}getExtent(){return this.extent_}getMaxZoom(){return this.maxZoom}getMinZoom(){return this.minZoom}getOrigin(t){return this.origin_?this.origin_:this.origins_[t]}getResolution(t){return this.resolutions_[t]}getResolutions(){return this.resolutions_}getTileCoordChildTileRange(t,e,i){if(t[0]this.maxZoom||e0?n:Math.max(s/i[0],r/i[1]);const o=e+1,a=new Array(o);for(let t=0;ti.highWaterMark&&(i.highWaterMark=t)}useTile(t,e,i,n){}};function Ch(t,e){const i=/\{z\}/g,n=/\{x\}/g,r=/\{y\}/g,s=/\{-y\}/g;return function(o,a,l){if(o)return t.replace(i,o[0].toString()).replace(n,o[1].toString()).replace(r,o[2].toString()).replace(s,(function(){const t=o[0],i=e.getFullTileRange(t);Ft(i,55);return(i.getHeight()-o[2]-1).toString()}))}}function Rh(t,e){const i=t.length,n=new Array(i);for(let r=0;rthis.getTileInternal(t,e,i,n,s)),this.reprojectionErrorThreshold_,this.renderReprojectionEdges_,this.getInterpolate());return f.key=c,l?(f.interimTile=l,f.refreshInterimChain(),o.replace(h,f)):o.set(h,f),f}getTileInternal(t,e,i,n,r){let s=null;const o=vl(t,e,i),a=this.getKey();if(this.tileCache.containsKey(o)){if(s=this.tileCache.get(o),s.key!=a){const l=s;s=this.createTile_(t,e,i,n,r,a),l.getState()==$?s.interimTile=l.interimTile:s.interimTile=l,s.refreshInterimChain(),this.tileCache.replace(o,s)}}else s=this.createTile_(t,e,i,n,r,a),this.tileCache.set(o,s);return s}setRenderReprojectionEdges(t){if(this.renderReprojectionEdges_!=t){this.renderReprojectionEdges_=t;for(const t in this.tileCacheForProjection)this.tileCacheForProjection[t].clear();this.changed()}}setTileGridForProjection(t,e){const i=an(t);if(i){const t=X(i);t in this.tileGridForProjection||(this.tileGridForProjection[t]=e)}}clear(){super.clear();for(const t in this.tileCacheForProjection)this.tileCacheForProjection[t].clear()}};function Oh(t){const e=t[0],i=new Array(e);let n,r,s=1<>=1;return i.join("")}var Nh=class extends Ah{constructor(t){const e=void 0!==t.hidpi&&t.hidpi;super({cacheSize:t.cacheSize,crossOrigin:"anonymous",interpolate:t.interpolate,opaque:!0,projection:an("EPSG:3857"),reprojectionErrorThreshold:t.reprojectionErrorThreshold,state:"loading",tileLoadFunction:t.tileLoadFunction,tilePixelRatio:e?2:1,wrapX:void 0===t.wrapX||t.wrapX,transition:t.transition,zDirection:t.zDirection}),this.hidpi_=e,this.culture_=void 0!==t.culture?t.culture:"en-us",this.maxZoom_=void 0!==t.maxZoom?t.maxZoom:-1,this.apiKey_=t.key,this.imagerySet_=t.imagerySet;jl("https://dev.virtualearth.net/REST/v1/Imagery/Metadata/"+this.imagerySet_+"?uriScheme=https&include=ImageryProviders&key="+this.apiKey_+"&c="+this.culture_,this.handleImageryMetadataResponse.bind(this),void 0,"jsonp")}getApiKey(){return this.apiKey_}getImagerySet(){return this.imagerySet_}handleImageryMetadataResponse(t){if(200!=t.statusCode||"OK"!=t.statusDescription||"ValidCredentials"!=t.authenticationResultCode||1!=t.resourceSets.length||1!=t.resourceSets[0].resources.length)return void this.setState("error");const e=t.resourceSets[0].resources[0],i=-1==this.maxZoom_?e.zoomMax:this.maxZoom_,n=wh(this.getProjection()),r=this.hidpi_?2:1,s=e.imageWidth==e.imageHeight?e.imageWidth/r:[e.imageWidth/r,e.imageHeight/r],o=xh({extent:n,minZoom:e.zoomMin,maxZoom:i,tileSize:s});this.tileGrid=o;const a=this.culture_,l=this.hidpi_;if(this.tileUrlFunction=bh(e.imageUrlSubdomains.map((function(t){const i=[0,0,0],n=e.imageUrl.replace("{subdomain}",t).replace("{culture}",a);return function(t,e,r){if(!t)return;xl(t[0],t[1],t[2],i);let s=n;return l&&(s+="&dpi=d1&device=mobile"),s.replace("{quadkey}",Oh(i))}}))),e.imageryProviders){const t=pn(an("EPSG:4326"),this.getProjection());this.setAttributions((i=>{const n=[],r=i.viewState,s=this.getTileGrid(),o=s.getZForResolution(r.resolution,this.zDirection),a=s.getTileCoordForCoordAndZ(r.center,o)[0];return e.imageryProviders.map((function(e){let r=!1;const s=e.coverageAreas;for(let e=0,n=s.length;e=n.zoomMin&&a<=n.zoomMax){const e=n.bbox;if(Ge(Ue([e[1],e[0],e[3],e[2]],t),i.extent)){r=!0;break}}}r&&n.push(e.attribution)})),n.push('Terms of Use'),n}))}this.setState("ready")}};var Dh=class extends Ah{constructor(t){const e=void 0!==(t=t||{}).projection?t.projection:"EPSG:3857",i=void 0!==t.tileGrid?t.tileGrid:xh({extent:wh(e),maxResolution:t.maxResolution,maxZoom:t.maxZoom,minZoom:t.minZoom,tileSize:t.tileSize});super({attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,interpolate:t.interpolate,opaque:t.opaque,projection:e,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileGrid:i,tileLoadFunction:t.tileLoadFunction,tilePixelRatio:t.tilePixelRatio,tileUrlFunction:t.tileUrlFunction,url:t.url,urls:t.urls,wrapX:void 0===t.wrapX||t.wrapX,transition:t.transition,attributionsCollapsible:t.attributionsCollapsible,zDirection:t.zDirection}),this.gutter_=void 0!==t.gutter?t.gutter:0}getGutter(){return this.gutter_}};var Gh=class extends Dh{constructor(t){super({attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,maxZoom:void 0!==t.maxZoom?t.maxZoom:18,minZoom:t.minZoom,projection:t.projection,transition:t.transition,wrapX:t.wrapX,zDirection:t.zDirection}),this.account_=t.account,this.mapId_=t.map||"",this.config_=t.config||{},this.templateCache_={},this.initializeMap_()}getConfig(){return this.config_}updateConfig(t){Object.assign(this.config_,t),this.initializeMap_()}setConfig(t){this.config_=t||{},this.initializeMap_()}initializeMap_(){const t=JSON.stringify(this.config_);if(this.templateCache_[t])return void this.applyTemplate_(this.templateCache_[t]);let e="https://"+this.account_+".carto.com/api/v1/map";this.mapId_&&(e+="/named/"+this.mapId_);const i=new XMLHttpRequest;i.addEventListener("load",this.handleInitResponse_.bind(this,t)),i.addEventListener("error",this.handleInitError_.bind(this)),i.open("POST",e),i.setRequestHeader("Content-type","application/json"),i.send(JSON.stringify(this.config_))}handleInitResponse_(t,e){const i=e.target;if(!i.status||i.status>=200&&i.status<300){let e;try{e=JSON.parse(i.responseText)}catch(t){return void this.setState("error")}this.applyTemplate_(e),this.templateCache_[t]=e,this.setState("ready")}else this.setState("error")}handleInitError_(t){this.setState("error")}applyTemplate_(t){const e="https://"+t.cdn_url.https+"/"+this.account_+"/api/v1/map/"+t.layergroupid+"/{z}/{x}/{y}.png";this.setUrl(e)}};function kh(t,e,i,n,r){jh(t,e,i||0,n||t.length-1,r||zh)}function jh(t,e,i,n,r){for(;n>i;){if(n-i>600){var s=n-i+1,o=e-i+1,a=Math.log(s),l=.5*Math.exp(2*a/3),h=.5*Math.sqrt(a*l*(s-l)/s)*(o-s/2<0?-1:1);jh(t,e,Math.max(i,Math.floor(e-o*l/s+h)),Math.min(n,Math.floor(e+(s-o)*l/s+h)),r)}var c=t[e],u=i,d=n;for(Bh(t,i,e),r(t[n],c)>0&&Bh(t,i,n);u0;)d--}0===r(t[i],c)?Bh(t,i,d):Bh(t,++d,n),d<=e&&(i=d+1),e<=d&&(n=d-1)}}function Bh(t,e,i){var n=t[e];t[e]=t[i],t[i]=n}function zh(t,e){return te?1:0}class Uh{constructor(t=9){this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}all(){return this._all(this.data,[])}search(t){let e=this.data;const i=[];if(!Qh(t,e))return i;const n=this.toBBox,r=[];for(;e;){for(let s=0;s=0&&r[e].children.length>this._maxEntries;)this._split(r,e),e--;this._adjustParentBBoxes(n,r,e)}_split(t,e){const i=t[e],n=i.children.length,r=this._minEntries;this._chooseSplitAxis(i,r,n);const s=this._chooseSplitIndex(i,r,n),o=tc(i.children.splice(s,i.children.length-s));o.height=i.height,o.leaf=i.leaf,Vh(i,this.toBBox),Vh(o,this.toBBox),e?t[e-1].children.push(o):this._splitRoot(i,o)}_splitRoot(t,e){this.data=tc([t,e]),this.data.height=t.height+1,this.data.leaf=!1,Vh(this.data,this.toBBox)}_chooseSplitIndex(t,e,i){let n,r=1/0,s=1/0;for(let o=e;o<=i-e;o++){const e=Wh(t,0,o,this.toBBox),a=Wh(t,o,i,this.toBBox),l=$h(e,a),h=qh(e)+qh(a);l=e;n--){const e=t.children[n];Zh(o,t.leaf?r(e):e),a+=Hh(o)}return a}_adjustParentBBoxes(t,e,i){for(let n=i;n>=0;n--)Zh(e[n],t)}_condense(t){for(let e,i=t.length-1;i>=0;i--)0===t[i].children.length?i>0?(e=t[i-1].children,e.splice(e.indexOf(t[i]),1)):this.clear():Vh(t[i],this.toBBox)}}function Xh(t,e,i){if(!i)return e.indexOf(t);for(let n=0;n=t.minX&&e.maxY>=t.minY}function tc(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function ec(t,e,i,n,r){const s=[e,i];for(;s.length;){if((i=s.pop())-(e=s.pop())<=n)continue;const o=e+Math.ceil((i-e)/n/2)*n;kh(t,o,e,i,r),s.push(e,o,o,i)}}var ic=class{constructor(t){this.rbush_=new Uh(t),this.items_={}}insert(t,e){const i={minX:t[0],minY:t[1],maxX:t[2],maxY:t[3],value:e};this.rbush_.insert(i),this.items_[X(e)]=i}load(t,e){const i=new Array(e.length);for(let n=0,r=e.length;n{e||(e=!0,this.addFeature(t.element),e=!1)})),t.addEventListener(Y,(t=>{e||(e=!0,this.removeFeature(t.element),e=!1)})),this.featuresCollection_=t}clear(t){if(t){for(const t in this.featureChangeKeys_){this.featureChangeKeys_[t].forEach(G)}this.featuresCollection_||(this.featureChangeKeys_={},this.idIndex_={},this.uidIndex_={})}else if(this.featuresRtree_){const t=t=>{this.removeFeatureInternal(t)};this.featuresRtree_.forEach(t);for(const t in this.nullGeometryFeatures_)this.removeFeatureInternal(this.nullGeometryFeatures_[t])}this.featuresCollection_&&this.featuresCollection_.clear(),this.featuresRtree_&&this.featuresRtree_.clear(),this.nullGeometryFeatures_={};const e=new cc(sc);this.dispatchEvent(e),this.changed()}forEachFeature(t){if(this.featuresRtree_)return this.featuresRtree_.forEach(t);this.featuresCollection_&&this.featuresCollection_.forEach(t)}forEachFeatureAtCoordinateDirect(t,e){const i=[t[0],t[1],t[0],t[1]];return this.forEachFeatureInExtent(i,(function(i){if(i.getGeometry().intersectsCoordinate(t))return e(i)}))}forEachFeatureInExtent(t,e){if(this.featuresRtree_)return this.featuresRtree_.forEachInExtent(t,e);this.featuresCollection_&&this.featuresCollection_.forEach(e)}forEachFeatureIntersectingExtent(t,e){return this.forEachFeatureInExtent(t,(function(i){if(i.getGeometry().intersectsExtent(t)){const t=e(i);if(t)return t}}))}getFeaturesCollection(){return this.featuresCollection_}getFeatures(){let t;return this.featuresCollection_?t=this.featuresCollection_.getArray().slice(0):this.featuresRtree_&&(t=this.featuresRtree_.getAll(),v(this.nullGeometryFeatures_)||u(t,Object.values(this.nullGeometryFeatures_))),t}getFeaturesAtCoordinate(t){const e=[];return this.forEachFeatureAtCoordinateDirect(t,(function(t){e.push(t)})),e}getFeaturesInExtent(t,e){if(this.featuresRtree_){if(!(e&&e.canWrapX()&&this.getWrapX()))return this.featuresRtree_.getInExtent(t);const i=Ve(t,e);return[].concat(...i.map((t=>this.featuresRtree_.getInExtent(t))))}return this.featuresCollection_?this.featuresCollection_.getArray().slice(0):[]}getClosestFeatureToCoordinate(t,e){const i=t[0],n=t[1];let r=null;const s=[NaN,NaN];let o=1/0;const a=[-1/0,-1/0,1/0,1/0];return e=e||f,this.featuresRtree_.forEachInExtent(a,(function(t){if(e(t)){const e=t.getGeometry(),l=o;if(o=e.closestPointXY(i,n,s,o),o{--this.loadingExtentsCount_,this.dispatchEvent(new cc(lc,void 0,t))}),(()=>{--this.loadingExtentsCount_,this.dispatchEvent(new cc(hc))})),n.insert(s,{extent:s.slice()}))}this.loading=!(this.loader_.length<4)&&this.loadingExtentsCount_>0}refresh(){this.clear(!0),this.loadedExtentsRtree_.clear(),super.refresh()}removeLoadedExtent(t){const e=this.loadedExtentsRtree_;let i;e.forEachInExtent(t,(function(e){if(me(e.extent,t))return i=e,!0})),i&&e.remove(i)}removeFeature(t){if(!t)return;const e=X(t);e in this.nullGeometryFeatures_?delete this.nullGeometryFeatures_[e]:this.featuresRtree_&&this.featuresRtree_.remove(t);this.removeFeatureInternal(t)&&this.changed()}removeFeatureInternal(t){const e=X(t),i=this.featureChangeKeys_[e];if(!i)return;i.forEach(G),delete this.featureChangeKeys_[e];const n=t.getId();return void 0!==n&&delete this.idIndex_[n.toString()],delete this.uidIndex_[e],this.dispatchEvent(new cc(oc,t)),t}removeFromIdIndex_(t){let e=!1;for(const i in this.idIndex_)if(this.idIndex_[i]===t){delete this.idIndex_[i],e=!0;break}return e}setLoader(t){this.loader_=t}setUrl(t){Ft(this.format_,7),this.url_=t,this.setLoader(Gl(t,this.format_))}};var dc=class extends uc{constructor(t){super({attributions:t.attributions,wrapX:t.wrapX}),this.resolution=void 0,this.distance=void 0!==t.distance?t.distance:20,this.minDistance=t.minDistance||0,this.interpolationRatio=0,this.features=[],this.geometryFunction=t.geometryFunction||function(t){const e=t.getGeometry();return Ft("Point"==e.getType(),10),e},this.createCustomCluster_=t.createCluster,this.source=null,this.boundRefresh_=this.refresh.bind(this),this.updateDistance(this.distance,this.minDistance),this.setSource(t.source||null)}clear(t){this.features.length=0,super.clear(t)}getDistance(){return this.distance}getSource(){return this.source}loadFeatures(t,e,i){this.source.loadFeatures(t,e,i),e!==this.resolution&&(this.resolution=e,this.refresh())}setDistance(t){this.updateDistance(t,this.minDistance)}setMinDistance(t){this.updateDistance(this.distance,t)}getMinDistance(){return this.minDistance}setSource(t){this.source&&this.source.removeEventListener(w,this.boundRefresh_),this.source=t,t&&t.addEventListener(w,this.boundRefresh_),this.refresh()}refresh(){this.clear(),this.cluster(),this.addFeatures(this.features)}updateDistance(t,e){const i=0===t?0:Math.min(e,t)/t,n=t!==this.distance||this.interpolationRatio!==i;this.distance=t,this.minDistance=e,this.interpolationRatio=i,n&&this.refresh()}cluster(){if(void 0===this.resolution||!this.source)return;const t=[1/0,1/0,-1/0,-1/0],e=this.distance*this.resolution,i=this.source.getFeatures(),n={};for(let r=0,s=i.length;r=0;--e){const n=this.geometryFunction(t[e]);n?Fi(i,n.getCoordinates()):t.splice(e,1)}ki(i,1/t.length);const n=Pe(e),r=this.interpolationRatio,s=new dr([i[0]*(1-r)+n[0]*r,i[1]*(1-r)+n[1]*r]);return this.createCustomCluster_?this.createCustomCluster_(s,t):new Ot({geometry:s,features:t})}};var gc=class extends Lt{constructor(t){super({tileCoord:t.tileCoord,loader:()=>Promise.resolve(new Uint8Array(4)),interpolate:t.interpolate,transition:t.transition}),this.pixelRatio_=t.pixelRatio,this.gutter_=t.gutter,this.reprojData_=null,this.reprojError_=null,this.reprojSize_=void 0,this.sourceTileGrid_=t.sourceTileGrid,this.targetTileGrid_=t.targetTileGrid,this.wrappedTileCoord_=t.wrappedTileCoord||t.tileCoord,this.sourceTiles_=[],this.sourcesListenerKeys_=null,this.sourceZ_=0;const e=this.targetTileGrid_.getTileCoordExtent(this.wrappedTileCoord_),i=this.targetTileGrid_.getExtent();let n=this.sourceTileGrid_.getExtent();const r=i?Ae(e,i):e;if(0===Ce(r))return void(this.state=et);const s=t.sourceProj,o=s.getExtent();o&&(n=n?Ae(n,o):o);const a=this.targetTileGrid_.getResolution(this.wrappedTileCoord_[0]),l=t.targetProj,h=rh(s,l,r,a);if(!isFinite(h)||h<=0)return void(this.state=et);const c=void 0!==t.errorThreshold?t.errorThreshold:oh;if(this.triangulation_=new ah(s,l,r,n,h*c,a),0===this.triangulation_.getTriangles().length)return void(this.state=et);this.sourceZ_=this.sourceTileGrid_.getZForResolution(h);let u=this.triangulation_.calculateSourceExtent();if(n&&(s.canWrapX()?(u[1]=_i(u[1],n[1],n[3]),u[3]=_i(u[3],n[1],n[3])):u=Ae(u,n)),Ce(u)){const e=this.sourceTileGrid_.getTileRangeForExtentAndZ(u,this.sourceZ_),i=t.getTileFunction;for(let t=e.minX;t<=e.maxX;t++)for(let n=e.minY;n<=e.maxY;n++){const e=i(this.sourceZ_,t,n,this.pixelRatio_);e&&this.sourceTiles_.push(e)}0===this.sourceTiles_.length&&(this.state=et)}else this.state=et}getSize(){return this.reprojSize_}getData(){return this.reprojData_}getError(){return this.reprojError_}reproject_(){const t=[];if(this.sourceTiles_.forEach((e=>{if(!e||e.getState()!==Q)return;const i=e.getSize(),n=this.gutter_;let r;const s=Rt(e.getData());r=s||Pt(Ct(e.getData()));const o=[i[0]+2*n,i[1]+2*n],a=r instanceof Float32Array,l=o[0]*o[1],h=a?Float32Array:Uint8Array,c=new h(r.buffer),u=h.BYTES_PER_ELEMENT,d=u*c.length/l,g=c.byteLength/o[1],f=Math.floor(g/u/o[0]),p=l*f;let m=c;if(c.length!==p){m=new h(p);let t=0,e=0;const i=o[0]*f;for(let n=0;n=0;--e){const i=[];for(let n=0,r=t.length;n{const i=e.getState();if(i!==$&&i!==J)return;t++;const n=N(e,w,(function(){const i=e.getState();i!=Q&&i!=tt&&i!=et||(G(n),t--,0===t&&(this.unlistenSources_(),this.reproject_()))}),this);this.sourcesListenerKeys_.push(n)})),0===t?setTimeout(this.reproject_.bind(this),0):this.sourceTiles_.forEach((function(t){t.getState()==$&&t.load()}))}unlistenSources_(){this.sourcesListenerKeys_.forEach(G),this.sourcesListenerKeys_=null}};var fc=class extends Eh{constructor(t){const e=void 0===t.projection?"EPSG:3857":t.projection;let i=t.tileGrid;void 0===i&&e&&(i=xh({extent:wh(e),maxResolution:t.maxResolution,maxZoom:t.maxZoom,minZoom:t.minZoom,tileSize:t.tileSize})),super({cacheSize:.1,attributions:t.attributions,attributionsCollapsible:t.attributionsCollapsible,projection:e,tileGrid:i,opaque:t.opaque,state:t.state,wrapX:t.wrapX,transition:t.transition,interpolate:t.interpolate}),this.gutter_=void 0!==t.gutter?t.gutter:0,this.tileSize_=t.tileSize?ll(t.tileSize):null,this.tileSizes_=null,this.tileLoadingKeys_={},this.loader_=t.loader,this.handleTileChange_=this.handleTileChange_.bind(this),this.bandCount=void 0===t.bandCount?4:t.bandCount,this.tileGridForProjection_={},this.tileCacheForProjection_={}}setTileSizes(t){this.tileSizes_=t}getTileSize(t){if(this.tileSizes_)return this.tileSizes_[t];if(this.tileSize_)return this.tileSize_;const e=this.getTileGrid();return e?ll(e.getTileSize(t)):[256,256]}getGutterForProjection(t){const e=this.getProjection();return!e||fn(e,t)?this.gutter_:0}setLoader(t){this.loader_=t}getReprojTile_(t,e,i,n,r){const s=this.getTileCacheForProjection(n),o=vl(t,e,i);if(s.containsKey(o)){const t=s.get(o);if(t&&t.key==this.getKey())return t}const a=this.getTileGrid(),l=Math.max.apply(null,a.getResolutions().map(((t,e)=>{const i=ll(a.getTileSize(e)),n=this.getTileSize(e);return Math.max(n[0]/i[0],n[1]/i[1])}))),h=this.getTileGridForProjection(r),c=this.getTileGridForProjection(n),u=[t,e,i],d=this.getTileCoordForTileUrlFunction(u,n),g=Object.assign({sourceProj:r,sourceTileGrid:h,targetProj:n,targetTileGrid:c,tileCoord:u,wrappedTileCoord:d,pixelRatio:l,gutter:this.getGutterForProjection(r),getTileFunction:(t,e,i,n)=>this.getTile(t,e,i,n,r)},this.tileOptions),f=new gc(g);return f.key=this.getKey(),f}getTile(t,e,i,n,r){const s=this.getProjection();if(s&&r&&!fn(s,r))return this.getReprojTile_(t,e,i,r,s);const o=this.getTileSize(t),a=vl(t,e,i);if(this.tileCache.containsKey(a))return this.tileCache.get(a);const l=this.loader_;const h=Object.assign({tileCoord:[t,e,i],loader:function(){return y((function(){return l(t,e,i)}))},size:o},this.tileOptions),c=new Lt(h);return c.key=this.getKey(),c.addEventListener(w,this.handleTileChange_),this.tileCache.set(a,c),c}handleTileChange_(t){const e=t.target,i=X(e),n=e.getState();let r;n==J?(this.tileLoadingKeys_[i]=!0,r=hh):i in this.tileLoadingKeys_&&(delete this.tileLoadingKeys_[i],r=n==tt?uh:n==Q?ch:void 0),r&&this.dispatchEvent(new Th(r,e))}getTileGridForProjection(t){const e=this.getProjection();if(this.tileGrid&&(!e||fn(e,t)))return this.tileGrid;const i=X(t);return i in this.tileGridForProjection_||(this.tileGridForProjection_[i]=mh(t)),this.tileGridForProjection_[i]}setTileGridForProjection(t,e){const i=an(t);if(i){const t=X(i);t in this.tileGridForProjection_||(this.tileGridForProjection_[t]=e)}}getTileCacheForProjection(t){const e=this.getProjection();if(!e||fn(e,t))return this.tileCache;const i=X(t);return i in this.tileCacheForProjection_||(this.tileCacheForProjection_[i]=new Rl(.1)),this.tileCacheForProjection_[i]}expireCache(t,e){const i=this.getTileCacheForProjection(t);this.tileCache.expireCache(this.tileCache==i?e:{});for(const t in this.tileCacheForProjection_){const n=this.tileCacheForProjection_[t];n.expireCache(n==i?e:{})}}clear(){super.clear();for(const t in this.tileCacheForProjection_)this.tileCacheForProjection_[t].clear()}};function pc(t,e){if(!t)return!1;if(!0===t)return!0;if(3!==e.getSamplesPerPixel())return!1;const i=e.fileDirectory.PhotometricInterpretation,n=GeoTIFF.globals.photometricInterpretations;return i===n.CMYK||i===n.YCbCr||i===n.CIELab||i===n.ICCLab}const mc="STATISTICS_MAXIMUM",_c="STATISTICS_MINIMUM";let yc;function xc(t){try{return t.getBoundingBox()}catch(e){const i=t.fileDirectory;return[0,0,i.ImageWidth,i.ImageLength]}}function vc(t){try{return t.getOrigin().slice(0,2)}catch(e){return[0,t.fileDirectory.ImageLength]}}function Sc(t,e){try{return t.getResolution(e)}catch(i){return[e.fileDirectory.ImageWidth/t.fileDirectory.ImageWidth,e.fileDirectory.ImageHeight/t.fileDirectory.ImageHeight]}}function wc(t){const e=t.geoKeys;if(!e)return null;if(e.ProjectedCSTypeGeoKey&&32767!==e.ProjectedCSTypeGeoKey){const t="EPSG:"+e.ProjectedCSTypeGeoKey;let i=an(t);if(!i){const n=Ze(e.ProjLinearUnitsGeoKey);n&&(i=new Ke({code:t,units:n}))}return i}if(e.GeographicTypeGeoKey&&32767!==e.GeographicTypeGeoKey){const t="EPSG:"+e.GeographicTypeGeoKey;let i=an(t);if(!i){const n=Ze(e.GeogAngularUnitsGeoKey);n&&(i=new Ke({code:t,units:n}))}return i}return null}function Tc(t){return t.getImageCount().then((function(e){const i=new Array(e);for(let n=0;ni*t)throw new Error(n)}function Rc(t){return t instanceof Int8Array?127:t instanceof Uint8Array||t instanceof Uint8ClampedArray?255:t instanceof Int16Array?32767:t instanceof Uint16Array?65535:t instanceof Int32Array?2147483647:t instanceof Uint32Array?4294967295:t instanceof Float32Array?34e37:255}class bc extends fc{constructor(t){super({state:"loading",tileGrid:null,projection:null,opaque:t.opaque,transition:t.transition,interpolate:!1!==t.interpolate,wrapX:t.wrapX}),this.sourceInfo_=t.sources;const e=this.sourceInfo_.length;this.sourceOptions_=t.sourceOptions,this.sourceImagery_=new Array(e),this.sourceMasks_=new Array(e),this.resolutionFactors_=new Array(e),this.samplesPerPixel_,this.nodataValues_,this.metadata_,this.normalize_=!1!==t.normalize,this.addAlpha_=!1,this.error_=null,this.convertToRGB_=t.convertToRGB||!1,this.setKey(this.sourceInfo_.map((t=>t.url)).join(","));const i=this,n=new Array(e);for(let t=0;t=0;--t){const i=wc(e[t]);if(i){this.projection=i;break}}}configure_(t){let e,i,n,r,s;const o=new Array(t.length),a=new Array(t.length),l=new Array(t.length);let h=0;const c=t.length;for(let u=0;u{4==(4&(t.fileDirectory.NewSubfileType||0))?d.push(t):c.push(t)}));const g=c.length;if(d.length>0&&d.length!==g)throw new Error(`Expected one mask per image found ${d.length} masks and ${g} images`);let f,p;const m=new Array(g),_=new Array(g),y=new Array(g);a[u]=new Array(g),l[u]=new Array(g);for(let t=0;ty.length&&(h=s.length-y.length);const t=s[s.length-1]/y[y.length-1];this.resolutionFactors_[u]=t;const e=y.map((e=>e*t)),i=`Resolution mismatch for source ${u}, got [${e}] but expected [${s}]`;Cc(s.slice(h,s.length),e,.02,i,this.viewRejector)}else s=y,this.resolutionFactors_[u]=1;n?Cc(n.slice(h,n.length),_,.01,`Tile size mismatch for source ${u}`,this.viewRejector):n=_,r?Cc(r.slice(h,r.length),m,0,`Tile size mismatch for source ${u}`,this.viewRejector):r=m,this.sourceImagery_[u]=c.reverse(),this.sourceMasks_[u]=d.reverse()}for(let t=0,e=this.sourceImagery_.length;tl||s>l;)o.push([Math.ceil(r/l),Math.ceil(s/l)]),l+=l;break;case"truncated":let t=r,e=s;for(;t>l||e>l;)o.push([Math.ceil(t/l),Math.ceil(e/l)]),t>>=1,e>>=1;break;default:Ft(!1,53)}o.push([1,1]),o.reverse();const h=[n],c=[0];for(let t=1,e=o.length;t{f=a,this.changed()})),y.src=_}};const Fc="version1",Mc="version2",Ac="version3",Oc={};Oc[Fc]={level0:{supports:[],formats:[],qualities:["native"]},level1:{supports:["regionByPx","sizeByW","sizeByH","sizeByPct"],formats:["jpg"],qualities:["native"]},level2:{supports:["regionByPx","regionByPct","sizeByW","sizeByH","sizeByPct","sizeByConfinedWh","sizeByWh"],formats:["jpg","png"],qualities:["native","color","grey","bitonal"]}},Oc[Mc]={level0:{supports:[],formats:["jpg"],qualities:["default"]},level1:{supports:["regionByPx","sizeByW","sizeByH","sizeByPct"],formats:["jpg"],qualities:["default"]},level2:{supports:["regionByPx","regionByPct","sizeByW","sizeByH","sizeByPct","sizeByConfinedWh","sizeByDistortedWh","sizeByWh"],formats:["jpg","png"],qualities:["default","bitonal"]}},Oc[Ac]={level0:{supports:[],formats:["jpg"],qualities:["default"]},level1:{supports:["regionByPx","regionSquare","sizeByW","sizeByH","sizeByWh"],formats:["jpg"],qualities:["default"]},level2:{supports:["regionByPx","regionSquare","regionByPct","sizeByW","sizeByH","sizeByPct","sizeByConfinedWh","sizeByWh"],formats:["jpg","png"],qualities:["default"]}},Oc.none={none:{supports:[],formats:[],qualities:[]}};const Nc=/^https?:\/\/library\.stanford\.edu\/iiif\/image-api\/(?:1\.1\/)?compliance\.html#level[0-2]$/,Dc=/^https?:\/\/iiif\.io\/api\/image\/2\/level[0-2](?:\.json)?$/,Gc=/(^https?:\/\/iiif\.io\/api\/image\/3\/level[0-2](?:\.json)?$)|(^level[0-2]$)/;const kc={};kc[Fc]=function(t){let e=t.getComplianceLevelSupportedFeatures();return void 0===e&&(e=Oc[Fc].level0),{url:void 0===t.imageInfo["@id"]?void 0:t.imageInfo["@id"].replace(/\/?(?:info\.json)?$/g,""),supports:e.supports,formats:[...e.formats,void 0===t.imageInfo.formats?[]:t.imageInfo.formats],qualities:[...e.qualities,void 0===t.imageInfo.qualities?[]:t.imageInfo.qualities],resolutions:t.imageInfo.scale_factors,tileSize:void 0!==t.imageInfo.tile_width?void 0!==t.imageInfo.tile_height?[t.imageInfo.tile_width,t.imageInfo.tile_height]:[t.imageInfo.tile_width,t.imageInfo.tile_width]:null!=t.imageInfo.tile_height?[t.imageInfo.tile_height,t.imageInfo.tile_height]:void 0}},kc[Mc]=function(t){const e=t.getComplianceLevelSupportedFeatures(),i=Array.isArray(t.imageInfo.profile)&&t.imageInfo.profile.length>1,n=i&&t.imageInfo.profile[1].supports?t.imageInfo.profile[1].supports:[],r=i&&t.imageInfo.profile[1].formats?t.imageInfo.profile[1].formats:[],s=i&&t.imageInfo.profile[1].qualities?t.imageInfo.profile[1].qualities:[];return{url:t.imageInfo["@id"].replace(/\/?(?:info\.json)?$/g,""),sizes:void 0===t.imageInfo.sizes?void 0:t.imageInfo.sizes.map((function(t){return[t.width,t.height]})),tileSize:void 0===t.imageInfo.tiles?void 0:[t.imageInfo.tiles.map((function(t){return t.width}))[0],t.imageInfo.tiles.map((function(t){return void 0===t.height?t.width:t.height}))[0]],resolutions:void 0===t.imageInfo.tiles?void 0:t.imageInfo.tiles.map((function(t){return t.scaleFactors}))[0],supports:[...e.supports,...n],formats:[...e.formats,...r],qualities:[...e.qualities,...s]}},kc[Ac]=function(t){const e=t.getComplianceLevelSupportedFeatures(),i=void 0===t.imageInfo.extraFormats?e.formats:[...e.formats,...t.imageInfo.extraFormats],n=void 0!==t.imageInfo.preferredFormats&&Array.isArray(t.imageInfo.preferredFormats)&&t.imageInfo.preferredFormats.length>0?t.imageInfo.preferredFormats.filter((function(t){return["jpg","png","gif"].includes(t)})).reduce((function(t,e){return void 0===t&&i.includes(e)?e:t}),void 0):void 0;return{url:t.imageInfo.id,sizes:void 0===t.imageInfo.sizes?void 0:t.imageInfo.sizes.map((function(t){return[t.width,t.height]})),tileSize:void 0===t.imageInfo.tiles?void 0:[t.imageInfo.tiles.map((function(t){return t.width}))[0],t.imageInfo.tiles.map((function(t){return t.height}))[0]],resolutions:void 0===t.imageInfo.tiles?void 0:t.imageInfo.tiles.map((function(t){return t.scaleFactors}))[0],supports:void 0===t.imageInfo.extraFeatures?e.supports:[...e.supports,...t.imageInfo.extraFeatures],formats:i,qualities:void 0===t.imageInfo.extraQualities?e.qualities:[...e.qualities,...t.imageInfo.extraQualities],preferredFormat:n}};var jc=class{constructor(t){this.setImageInfo(t)}setImageInfo(t){this.imageInfo="string"==typeof t?JSON.parse(t):t}getImageApiVersion(){if(void 0===this.imageInfo)return;let t=this.imageInfo["@context"]||"ol-no-context";"string"==typeof t&&(t=[t]);for(let e=0;e0&&"string"==typeof this.imageInfo.profile[0]&&Dc.test(this.imageInfo.profile[0]))return this.imageInfo.profile[0]}}getComplianceLevelFromProfile(t){const e=this.getComplianceLevelEntryFromProfile(t);if(void 0===e)return;const i=e.match(/level[0-2](?:\.json)?$/g);return Array.isArray(i)?i[0].replace(".json",""):void 0}getComplianceLevelSupportedFeatures(){if(void 0===this.imageInfo)return;const t=this.getImageApiVersion(),e=this.getComplianceLevelFromProfile(t);return void 0===e?Oc.none.none:Oc[t][e]}getTileSourceOptions(t){const e=t||{},i=this.getImageApiVersion();if(void 0===i)return;const n=void 0===i?void 0:kc[i](this);return void 0!==n?{url:n.url,version:i,size:[this.imageInfo.width,this.imageInfo.height],sizes:n.sizes,format:void 0!==e.format&&n.formats.includes(e.format)?e.format:void 0!==n.preferredFormat?n.preferredFormat:"jpg",supports:n.supports,quality:e.quality&&n.qualities.includes(e.quality)?e.quality:n.qualities.includes("native")?"native":"default",resolutions:Array.isArray(n.resolutions)?n.resolutions.sort((function(t,e){return e-t})):void 0,tileSize:n.tileSize}:void 0}};function Bc(t){return t.toLocaleString("en",{maximumFractionDigits:10})}var zc=class extends Ah{constructor(t){const e=t||{};let i=e.url||"";i+=i.lastIndexOf("/")===i.length-1||""===i?"":"/";const n=e.version||Mc,r=e.sizes||[],s=e.size;Ft(null!=s&&Array.isArray(s)&&2==s.length&&!isNaN(s[0])&&s[0]>0&&!isNaN(s[1])&&s[1]>0,60);const o=s[0],a=s[1],l=e.tileSize,h=e.tilePixelRatio||1,c=e.format||"jpg",u=e.quality||(e.version==Fc?"native":"default");let d=e.resolutions||[];const g=e.supports||[],f=e.extent||[0,-a,o,0],p=null!=r&&Array.isArray(r)&&r.length>0,m=void 0!==l&&("number"==typeof l&&Number.isInteger(l)&&l>0||Array.isArray(l)&&l.length>0),_=null!=g&&Array.isArray(g)&&(g.includes("regionByPx")||g.includes("regionByPct"))&&(g.includes("sizeByWh")||g.includes("sizeByH")||g.includes("sizeByW")||g.includes("sizeByPct"));let y,x,v;if(d.sort((function(t,e){return e-t})),m||_)if(null!=l&&("number"==typeof l&&Number.isInteger(l)&&l>0?(y=l,x=l):Array.isArray(l)&&l.length>0&&((1==l.length||null==l[1]&&Number.isInteger(l[0]))&&(y=l[0],x=l[0]),2==l.length&&(Number.isInteger(l[0])&&Number.isInteger(l[1])?(y=l[0],x=l[1]):null==l[0]&&Number.isInteger(l[1])&&(y=l[1],x=l[1])))),void 0!==y&&void 0!==x||(y=Ko,x=Ko),0==d.length){v=Math.max(Math.ceil(Math.log(o/y)/Math.LN2),Math.ceil(Math.log(a/x)/Math.LN2));for(let t=v;t>=0;t--)d.push(Math.pow(2,t))}else{const t=Math.max(...d);v=Math.round(Math.log(t)/Math.LN2)}else if(y=o,x=a,d=[],p){r.sort((function(t,e){return t[0]-e[0]})),v=-1;const t=[];for(let e=0;e0&&d[d.length-1]==i?t.push(e):(d.push(i),v++)}if(t.length>0)for(let e=0;ev)return;const S=t[1],w=t[2],T=d[f];if(!(void 0===S||void 0===w||void 0===T||S<0||Math.ceil(o/T/y)<=S||w<0||Math.ceil(a/T/x)<=w)){if(_||m){const t=S*y*T,e=w*x*T;let i=y*T,r=x*T,s=y,c=x;if(t+i>o&&(i=o-t),e+r>a&&(r=a-e),t+y*T>o&&(s=Math.floor((o-t+T-1)/T)),e+x*T>a&&(c=Math.floor((a-e+T-1)/T)),0==t&&i==o&&0==e&&r==a)l="full";else if(!_||g.includes("regionByPx"))l=t+","+e+","+i+","+r;else if(g.includes("regionByPct")){l="pct:"+Bc(t/o*100)+","+Bc(e/a*100)+","+Bc(i/o*100)+","+Bc(r/a*100)}n!=Ac||_&&!g.includes("sizeByWh")?!_||g.includes("sizeByW")?h=s+",":g.includes("sizeByH")?h=","+c:g.includes("sizeByWh")?h=s+","+c:g.includes("sizeByPct")&&(h="pct:"+Bc(100/T)):h=s+","+c}else if(l="full",p){const t=r[f][0],e=r[f][1];h=n==Ac?t==o&&e==a?"max":t+","+e:t==o?"full":t+","}else h=n==Ac?"max":"full";return i+l+"/"+h+"/0/"+u+"."+c}},transition:e.transition}),this.zDirection=e.zDirection}};var Uc=class extends $r{constructor(t,e,i,n,r,s,o){const a=t.getExtent(),l=e.getExtent(),h=l?Ae(i,l):i,c=nh(t,e,Pe(h),n),u=new ah(t,e,h,a,.5*c,n),d=s(u.calculateSourceExtent(),c,r),g=d?Jr:is,f=d?d.getPixelRatio():1;super(i,n,f,g),this.targetProj_=e,this.maxSourceExtent_=a,this.triangulation_=u,this.targetResolution_=n,this.targetExtent_=i,this.sourceImage_=d,this.sourcePixelRatio_=f,this.interpolate_=o,this.canvas_=null,this.sourceListenerKey_=null}disposeInternal(){this.state==Qr&&this.unlistenSource_(),super.disposeInternal()}getImage(){return this.canvas_}getProjection(){return this.targetProj_}reproject_(){const t=this.sourceImage_.getState();if(t==ts){const t=De(this.targetExtent_)/this.targetResolution_,e=Me(this.targetExtent_)/this.targetResolution_;this.canvas_=sh(t,e,this.sourcePixelRatio_,this.sourceImage_.getResolution(),this.maxSourceExtent_,this.targetResolution_,this.targetExtent_,this.triangulation_,[{extent:this.sourceImage_.getExtent(),image:this.sourceImage_.getImage()}],0,void 0,this.interpolate_)}this.state=t,this.changed()}load(){if(this.state==Jr){this.state=Qr,this.changed();const t=this.sourceImage_.getState();t==ts||t==es?this.reproject_():(this.sourceListenerKey_=N(this.sourceImage_,w,(function(t){const e=this.sourceImage_.getState();e!=ts&&e!=es||(this.unlistenSource_(),this.reproject_())}),this),this.sourceImage_.load())}}unlistenSource_(){G(this.sourceListenerKey_),this.sourceListenerKey_=null}};const Xc="imageloadstart",Vc="imageloadend",Wc="imageloaderror";class Zc extends r{constructor(t,e){super(t),this.image=e}}function Yc(t,e){t.getImage().src=e}var Kc=class extends gh{constructor(t){super({attributions:t.attributions,projection:t.projection,state:t.state,interpolate:void 0===t.interpolate||t.interpolate}),this.on,this.once,this.un,this.resolutions_=void 0!==t.resolutions?t.resolutions:null,this.reprojectedImage_=null,this.reprojectedRevision_=0}getResolutions(){return this.resolutions_}setResolutions(t){this.resolutions_=t}findNearestResolution(t){const e=this.getResolutions();if(e){t=e[h(e,t,0)]}return t}getImage(t,e,i,n){const r=this.getProjection();if(!r||!n||fn(r,n))return r&&(n=r),this.getImageInternal(t,e,i,n);if(this.reprojectedImage_){if(this.reprojectedRevision_==this.getRevision()&&fn(this.reprojectedImage_.getProjection(),n)&&this.reprojectedImage_.getResolution()==e&&me(this.reprojectedImage_.getExtent(),t))return this.reprojectedImage_;this.reprojectedImage_.dispose(),this.reprojectedImage_=null}return this.reprojectedImage_=new Uc(r,n,t,e,i,((t,e,i)=>this.getImageInternal(t,e,i,r)),this.getInterpolate()),this.reprojectedRevision_=this.getRevision(),this.reprojectedImage_}getImageInternal(t,e,i,n){return z()}handleImageChange(t){const e=t.target;let i;switch(e.getState()){case Qr:this.loading=!0,i=Xc;break;case ts:this.loading=!1,i=Vc;break;case es:this.loading=!1,i=Wc;break;default:return}this.hasListener(i)&&this.dispatchEvent(new Zc(i,e))}};function qc(t,e){const i=[];Object.keys(e).forEach((function(t){null!==e[t]&&void 0!==e[t]&&i.push(t+"="+encodeURIComponent(e[t]))}));const n=i.join("&");return t=t.replace(/[?&]$/,""),(t+=t.includes("?")?"&":"?")+n}var Hc=class extends Kc{constructor(t){super({attributions:(t=t||{}).attributions,interpolate:t.interpolate,projection:t.projection,resolutions:t.resolutions}),this.crossOrigin_=void 0!==t.crossOrigin?t.crossOrigin:null,this.hidpi_=void 0===t.hidpi||t.hidpi,this.url_=t.url,this.imageLoadFunction_=void 0!==t.imageLoadFunction?t.imageLoadFunction:Yc,this.params_=t.params||{},this.image_=null,this.imageSize_=[0,0],this.renderedRevision_=0,this.ratio_=void 0!==t.ratio?t.ratio:1.5}getParams(){return this.params_}getImageInternal(t,e,i,n){if(void 0===this.url_)return null;e=this.findNearestResolution(e),i=this.hidpi_?i:1;const r=this.image_;if(r&&this.renderedRevision_==this.getRevision()&&r.getResolution()==e&&r.getPixelRatio()==i&&le(r.getExtent(),t))return r;const s={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};Object.assign(s,this.params_);const o=((t=t.slice())[0]+t[2])/2,a=(t[1]+t[3])/2;if(1!=this.ratio_){const e=this.ratio_*De(t)/2,i=this.ratio_*Me(t)/2;t[0]=o-e,t[1]=a-i,t[2]=o+e,t[3]=a+i}const l=e/i,h=Math.ceil(De(t)/l),c=Math.ceil(Me(t)/l);t[0]=o-l*h/2,t[2]=o+l*h/2,t[1]=a-l*c/2,t[3]=a+l*c/2,this.imageSize_[0]=h,this.imageSize_[1]=c;const u=this.getRequestUrl_(t,this.imageSize_,i,n,s);return this.image_=new rs(t,e,i,u,this.crossOrigin_,this.imageLoadFunction_),this.renderedRevision_=this.getRevision(),this.image_.addEventListener(w,this.handleImageChange.bind(this)),this.image_}getImageLoadFunction(){return this.imageLoadFunction_}getRequestUrl_(t,e,i,n,r){const s=n.getCode().split(/:(?=\d+$)/).pop();r.SIZE=e[0]+","+e[1],r.BBOX=t.join(","),r.BBOXSR=s,r.IMAGESR=s,r.DPI=Math.round(90*i);const o=this.url_,a=o.replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage");return a==o&&Ft(!1,50),qc(a,r)}getUrl(){return this.url_}setImageLoadFunction(t){this.image_=null,this.imageLoadFunction_=t,this.changed()}setUrl(t){t!=this.url_&&(this.url_=t,this.image_=null,this.changed())}updateParams(t){Object.assign(this.params_,t),this.image_=null,this.changed()}};var $c=class extends Kc{constructor(t){super({attributions:(t=t||{}).attributions,interpolate:t.interpolate,projection:t.projection,resolutions:t.resolutions,state:t.state}),this.canvasFunction_=t.canvasFunction,this.canvas_=null,this.renderedRevision_=0,this.ratio_=void 0!==t.ratio?t.ratio:1.5}getImageInternal(t,e,i,n){e=this.findNearestResolution(e);let r=this.canvas_;if(r&&this.renderedRevision_==this.getRevision()&&r.getResolution()==e&&r.getPixelRatio()==i&&le(r.getExtent(),t))return r;Be(t=t.slice(),this.ratio_);const s=[De(t)/e*i,Me(t)/e*i],o=this.canvasFunction_.call(this,t,e,i,s,n);return o&&(r=new ss(t,e,i,o)),this.canvas_=r,this.renderedRevision_=this.getRevision(),r}};var Jc=class extends Kc{constructor(t){super({interpolate:t.interpolate,projection:t.projection,resolutions:t.resolutions}),this.crossOrigin_=void 0!==t.crossOrigin?t.crossOrigin:null,this.displayDpi_=void 0!==t.displayDpi?t.displayDpi:96,this.params_=t.params||{},this.url_=t.url,this.imageLoadFunction_=void 0!==t.imageLoadFunction?t.imageLoadFunction:Yc,this.hidpi_=void 0===t.hidpi||t.hidpi,this.metersPerUnit_=void 0!==t.metersPerUnit?t.metersPerUnit:1,this.ratio_=void 0!==t.ratio?t.ratio:1,this.useOverlay_=void 0!==t.useOverlay&&t.useOverlay,this.image_=null,this.renderedRevision_=0}getParams(){return this.params_}getImageInternal(t,e,i,n){e=this.findNearestResolution(e),i=this.hidpi_?i:1;let r=this.image_;if(r&&this.renderedRevision_==this.getRevision()&&r.getResolution()==e&&r.getPixelRatio()==i&&le(r.getExtent(),t))return r;1!=this.ratio_&&Be(t=t.slice(),this.ratio_);const s=[De(t)/e*i,Me(t)/e*i];if(void 0!==this.url_){const o=this.getUrl(this.url_,this.params_,t,s,n);r=new rs(t,e,i,o,this.crossOrigin_,this.imageLoadFunction_),r.addEventListener(w,this.handleImageChange.bind(this))}else r=null;return this.image_=r,this.renderedRevision_=this.getRevision(),r}getImageLoadFunction(){return this.imageLoadFunction_}updateParams(t){Object.assign(this.params_,t),this.changed()}getUrl(t,e,i,n,r){const s=function(t,e,i,n){const r=De(t),s=Me(t),o=e[0],a=e[1],l=.0254/n;if(a*r>o*s)return r*i/(o*l);return s*i/(a*l)}(i,n,this.metersPerUnit_,this.displayDpi_),o=Pe(i),a={OPERATION:this.useOverlay_?"GETDYNAMICMAPOVERLAYIMAGE":"GETMAPIMAGE",VERSION:"2.0.0",LOCALE:"en",CLIENTAGENT:"ol/source/ImageMapGuide source",CLIP:"1",SETDISPLAYDPI:this.displayDpi_,SETDISPLAYWIDTH:Math.round(n[0]),SETDISPLAYHEIGHT:Math.round(n[1]),SETVIEWSCALE:s,SETVIEWCENTERX:o[0],SETVIEWCENTERY:o[1]};return Object.assign(a,e),qc(t,a)}setImageLoadFunction(t){this.image_=null,this.imageLoadFunction_=t,this.changed()}};var Qc=class extends Kc{constructor(t){const e=void 0!==t.crossOrigin?t.crossOrigin:null,i=void 0!==t.imageLoadFunction?t.imageLoadFunction:Yc;super({attributions:t.attributions,interpolate:t.interpolate,projection:an(t.projection)}),this.url_=t.url,this.imageExtent_=t.imageExtent,this.image_=new rs(this.imageExtent_,void 0,1,this.url_,e,i),this.imageSize_=t.imageSize?t.imageSize:null,this.image_.addEventListener(w,this.handleImageChange.bind(this))}getImageExtent(){return this.imageExtent_}getImageInternal(t,e,i,n){return Ge(t,this.image_.getExtent())?this.image_:null}getUrl(){return this.url_}handleImageChange(t){if(this.image_.getState()==ts){const t=this.image_.getExtent(),e=this.image_.getImage();let i,n;this.imageSize_?(i=this.imageSize_[0],n=this.imageSize_[1]):(i=e.width,n=e.height);const r=De(t),s=Me(t),o=r/i,a=s/n;let l=i,h=n;if(o>a?l=Math.round(r/a):h=Math.round(s/o),l!==i||h!==n){const t=_t(l,h);this.getInterpolate()||(t.imageSmoothingEnabled=!1);const r=t.canvas;t.drawImage(e,0,0,i,n,0,0,r.width,r.height),this.image_.setImage(r)}}super.handleImageChange(t)}};const tu="1.3.0",eu=[101,101];var iu=class extends Kc{constructor(t){super({attributions:(t=t||{}).attributions,interpolate:t.interpolate,projection:t.projection,resolutions:t.resolutions}),this.crossOrigin_=void 0!==t.crossOrigin?t.crossOrigin:null,this.url_=t.url,this.imageLoadFunction_=void 0!==t.imageLoadFunction?t.imageLoadFunction:Yc,this.params_=Object.assign({},t.params),this.v13_=!0,this.updateV13_(),this.serverType_=t.serverType,this.hidpi_=void 0===t.hidpi||t.hidpi,this.image_=null,this.imageSize_=[0,0],this.renderedRevision_=0,this.ratio_=void 0!==t.ratio?t.ratio:1.5}getFeatureInfoUrl(t,e,i,n){if(void 0===this.url_)return;const r=an(i),s=this.getProjection();s&&s!==r&&(e=nh(s,r,t,e),t=_n(t,r,s));const o=Le(t,e,0,eu),a={SERVICE:"WMS",VERSION:tu,REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.params_.LAYERS};Object.assign(a,this.params_,n);const l=bi((t[0]-o[0])/e,4),h=bi((o[3]-t[1])/e,4);return a[this.v13_?"I":"X"]=l,a[this.v13_?"J":"Y"]=h,this.getRequestUrl_(o,eu,1,s||r,a)}getLegendUrl(t,e){if(void 0===this.url_)return;const i={SERVICE:"WMS",VERSION:tu,REQUEST:"GetLegendGraphic",FORMAT:"image/png"};if(void 0===e||void 0===e.LAYER){const t=this.params_.LAYERS;if(!(!Array.isArray(t)||1===t.length))return;i.LAYER=t}if(void 0!==t){const e=this.getProjection()?this.getProjection().getMetersPerUnit():1,n=28e-5;i.SCALE=t*e/n}return Object.assign(i,e),qc(this.url_,i)}getParams(){return this.params_}getImageInternal(t,e,i,n){if(void 0===this.url_)return null;e=this.findNearestResolution(e),1==i||this.hidpi_&&void 0!==this.serverType_||(i=1);const r=e/i,s=Pe(t),o=Le(s,r,0,[Pi(De(t)/r,4),Pi(Me(t)/r,4)]),a=Le(s,r,0,[Pi(this.ratio_*De(t)/r,4),Pi(this.ratio_*Me(t)/r,4)]),l=this.image_;if(l&&this.renderedRevision_==this.getRevision()&&l.getResolution()==e&&l.getPixelRatio()==i&&le(l.getExtent(),o))return l;const h={SERVICE:"WMS",VERSION:tu,REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0};Object.assign(h,this.params_),this.imageSize_[0]=Ri(De(a)/r,4),this.imageSize_[1]=Ri(Me(a)/r,4);const c=this.getRequestUrl_(a,this.imageSize_,i,n,h);return this.image_=new rs(a,e,i,c,this.crossOrigin_,this.imageLoadFunction_),this.renderedRevision_=this.getRevision(),this.image_.addEventListener(w,this.handleImageChange.bind(this)),this.image_}getImageLoadFunction(){return this.imageLoadFunction_}getRequestUrl_(t,e,i,n,r){if(Ft(void 0!==this.url_,9),r[this.v13_?"CRS":"SRS"]=n.getCode(),"STYLES"in this.params_||(r.STYLES=""),1!=i)switch(this.serverType_){case"geoserver":const t=90*i+.5|0;"FORMAT_OPTIONS"in r?r.FORMAT_OPTIONS+=";dpi:"+t:r.FORMAT_OPTIONS="dpi:"+t;break;case"mapserver":r.MAP_RESOLUTION=90*i;break;case"carmentaserver":case"qgis":r.DPI=90*i;break;default:Ft(!1,8)}r.WIDTH=e[0],r.HEIGHT=e[1];const s=n.getAxisOrientation();let o;return o=this.v13_&&"ne"==s.substr(0,2)?[t[1],t[0],t[3],t[2]]:t,r.BBOX=o.join(","),qc(this.url_,r)}getUrl(){return this.url_}setImageLoadFunction(t){this.image_=null,this.imageLoadFunction_=t,this.changed()}setUrl(t){t!=this.url_&&(this.url_=t,this.image_=null,this.changed())}updateParams(t){Object.assign(this.params_,t),this.updateV13_(),this.image_=null,this.changed()}updateV13_(){const t=this.params_.VERSION||tu;this.v13_=Li(t,"1.3")>=0}};const nu='© OpenStreetMap contributors.';var ru=class extends Dh{constructor(t){let e;e=void 0!==(t=t||{}).attributions?t.attributions:[nu];const i=void 0!==t.crossOrigin?t.crossOrigin:"anonymous",n=void 0!==t.url?t.url:"https://tile.openstreetmap.org/{z}/{x}/{y}.png";super({attributions:e,attributionsCollapsible:!1,cacheSize:t.cacheSize,crossOrigin:i,interpolate:t.interpolate,maxZoom:void 0!==t.maxZoom?t.maxZoom:19,opaque:void 0===t.opaque||t.opaque,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileLoadFunction:t.tileLoadFunction,transition:t.transition,url:n,wrapX:t.wrapX,zDirection:t.zDirection})}};var su=class extends ks{constructor(t){super(t=t||{})}};var ou=class extends B{constructor(t){super(),this.ready=!0,this.boundHandleImageChange_=this.handleImageChange_.bind(this),this.layer_=t,this.declutterExecutorGroup=null}getFeatures(t){return z()}getData(t){return null}prepareFrame(t){return z()}renderFrame(t,e){return z()}loadedTileCallback(t,e,i){t[e]||(t[e]={}),t[e][i.tileCoord.toString()]=i}createLoadedTileFinder(t,e,i){return(n,r)=>{const s=this.loadedTileCallback.bind(this,i,n);return t.forEachLoadedTile(e,n,r,s)}}forEachFeatureAtCoordinate(t,e,i,n,r){}getLayer(){return this.layer_}handleFontsChanged(){}handleImageChange_(t){t.target.getState()===ts&&this.renderIfReadyAndVisible()}loadImage(t){let e=t.getState();return e!=ts&&e!=es&&t.addEventListener(w,this.boundHandleImageChange_),e==Jr&&(t.load(),e=t.getState()),e==ts}renderIfReadyAndVisible(){const t=this.getLayer();t&&t.getVisible()&&"ready"===t.getSourceState()&&t.changed()}disposeInternal(){delete this.layer_,super.disposeInternal()}};const au=[];let lu=null;var hu=class extends ou{constructor(t){super(t),this.container=null,this.renderedResolution,this.tempTransform=[1,0,0,1,0,0],this.pixelTransform=[1,0,0,1,0,0],this.inversePixelTransform=[1,0,0,1,0,0],this.context=null,this.containerReused=!1,this.pixelContext_=null,this.frameState=null}getImageData(t,e,i){let n;lu||(lu=_t(1,1,void 0,{willReadFrequently:!0})),lu.clearRect(0,0,1,1);try{lu.drawImage(t,e,i,1,1,0,0,1,1),n=lu.getImageData(0,0,1,1).data}catch(t){return lu=null,null}return n}getBackground(t){let e=this.getLayer().getBackground();return"function"==typeof e&&(e=e(t.viewState.resolution)),e||void 0}useContainer(t,e,i){const n=this.getLayer().getClassName();let r,s;if(t&&t.className===n&&(!i||t&&t.style.backgroundColor&&d(gs(t.style.backgroundColor),gs(i)))){const e=t.firstElementChild;e instanceof HTMLCanvasElement&&(s=e.getContext("2d"))}if(s&&s.canvas.style.transform===e?(this.container=t,this.context=s,this.containerReused=!0):this.containerReused&&(this.container=null,this.context=null,this.containerReused=!1),!this.container){r=document.createElement("div"),r.className=n;let t=r.style;t.position="absolute",t.width="100%",t.height="100%",s=_t();const e=s.canvas;r.appendChild(e),t=e.style,t.position="absolute",t.left="0",t.transformOrigin="top left",this.container=r,this.context=s}this.containerReused||!i||this.container.style.backgroundColor||(this.container.style.backgroundColor=i)}clipUnrotated(t,e,i){const n=Oe(i),r=Ne(i),s=be(i),o=Re(i);zt(e.coordinateToPixelTransform,n),zt(e.coordinateToPixelTransform,r),zt(e.coordinateToPixelTransform,s),zt(e.coordinateToPixelTransform,o);const a=this.inversePixelTransform;zt(a,n),zt(a,r),zt(a,s),zt(a,o),t.save(),t.beginPath(),t.moveTo(Math.round(n[0]),Math.round(n[1])),t.lineTo(Math.round(r[0]),Math.round(r[1])),t.lineTo(Math.round(s[0]),Math.round(s[1])),t.lineTo(Math.round(o[0]),Math.round(o[1])),t.clip()}dispatchRenderEvent_(t,e,i){const n=this.getLayer();if(n.hasListener(t)){const r=new zs(t,this.inversePixelTransform,i,e);n.dispatchEvent(r)}}preRender(t,e){this.frameState=e,this.dispatchRenderEvent_(Ms,t,e)}postRender(t,e){this.dispatchRenderEvent_(As,t,e)}getRenderTransform(t,e,i,n,r,s,o){const a=r/2,l=s/2,h=n/e,c=-h,u=-t[0]+o,d=-t[1];return Zt(this.tempTransform,a,l,h,c,-i,u,d)}disposeInternal(){delete this.frameState,super.disposeInternal()}};var cu=class extends hu{constructor(t){super(t),this.image_=null}getImage(){return this.image_?this.image_.getImage():null}prepareFrame(t){const e=t.layerStatesArray[t.layerIndex],i=t.pixelRatio,n=t.viewState,r=n.resolution,s=this.getLayer().getSource(),o=t.viewHints;let a=t.extent;if(void 0!==e.extent&&(a=Ae(a,Cn(e.extent,n.projection))),!o[Wo]&&!o[Zo]&&!ke(a))if(s){const t=n.projection,e=s.getImage(a,r,i,t);e&&(this.loadImage(e)?this.image_=e:e.getState()===is&&(this.image_=null))}else this.image_=null;return!!this.image_}getData(t){const e=this.frameState;if(!e)return null;const i=this.getLayer(),n=zt(e.pixelToCoordinateTransform,t.slice()),r=i.getExtent();if(r&&!ae(r,n))return null;const s=this.image_.getExtent(),o=this.image_.getImage(),a=De(s),l=Math.floor(o.width*((n[0]-s[0])/a));if(l<0||l>=o.width)return null;const h=Me(s),c=Math.floor(o.height*((s[3]-n[1])/h));return c<0||c>=o.height?null:this.getImageData(o,l,c)}renderFrame(t,e){const i=this.image_,n=i.getExtent(),r=i.getResolution(),s=i.getPixelRatio(),o=t.layerStatesArray[t.layerIndex],a=t.pixelRatio,l=t.viewState,h=l.center,c=a*r/(l.resolution*s),u=t.extent,d=l.resolution,g=l.rotation,f=Math.round(De(u)/d*a),p=Math.round(Me(u)/d*a);Zt(this.pixelTransform,t.size[0]/2,t.size[1]/2,1/a,1/a,g,-f/2,-p/2),Yt(this.inversePixelTransform,this.pixelTransform);const m=Ht(this.pixelTransform);this.useContainer(e,m,this.getBackground(t));const _=this.context,y=_.canvas;y.width!=f||y.height!=p?(y.width=f,y.height=p):this.containerReused||_.clearRect(0,0,f,p);let x=!1,v=!0;if(o.extent){const e=Cn(o.extent,l.projection);v=Ge(e,t.extent),x=v&&!le(e,t.extent),x&&this.clipUnrotated(_,t,e)}const S=i.getImage(),w=Zt(this.tempTransform,f/2,p/2,c,c,0,s*(n[0]-h[0])/r,s*(h[1]-n[3])/r);this.renderedResolution=r*a/s;const T=S.width*w[0],E=S.height*w[3];if(this.getLayer().getSource().getInterpolate()||(_.imageSmoothingEnabled=!1),this.preRender(_,t),v&&T>=.5&&E>=.5){const t=w[4],e=w[5],i=o.opacity;let n;1!==i&&(n=_.globalAlpha,_.globalAlpha=i),_.drawImage(S,0,0,+S.width,+S.height,t,e,T,E),1!==i&&(_.globalAlpha=n)}return this.postRender(_,t),x&&_.restore(),_.imageSmoothingEnabled=!0,m!==y.style.transform&&(y.style.transform=m),this.container}};var uu=class extends su{constructor(t){super(t)}createRenderer(){return new cu(this)}getData(t){return super.getData(t)}},du="preload",gu="useInterimTilesOnError";var fu=class extends ks{constructor(t){t=t||{};const e=Object.assign({},t);delete e.preload,delete e.useInterimTilesOnError,super(e),this.on,this.once,this.un,this.setPreload(void 0!==t.preload?t.preload:0),this.setUseInterimTilesOnError(void 0===t.useInterimTilesOnError||t.useInterimTilesOnError)}getPreload(){return this.get(du)}setPreload(t){this.set(du,t)}getUseInterimTilesOnError(){return this.get(gu)}setUseInterimTilesOnError(t){this.set(gu,t)}getData(t){return super.getData(t)}};var pu=class extends hu{constructor(t){super(t),this.extentChanged=!0,this.renderedExtent_=null,this.renderedPixelRatio,this.renderedProjection=null,this.renderedRevision,this.renderedTiles=[],this.newTiles_=!1,this.tmpExtent=[1/0,1/0,-1/0,-1/0],this.tmpTileRange_=new Il(0,0,0,0)}isDrawableTile(t){const e=this.getLayer(),i=t.getState(),n=e.getUseInterimTilesOnError();return i==Q||i==et||i==tt&&!n}getTile(t,e,i,n){const r=n.pixelRatio,s=n.viewState.projection,o=this.getLayer();let a=o.getSource().getTile(t,e,i,r,s);return a.getState()==tt&&o.getUseInterimTilesOnError()&&o.getPreload()>0&&(this.newTiles_=!0),this.isDrawableTile(a)||(a=a.getInterimTile()),a}getData(t){const e=this.frameState;if(!e)return null;const i=this.getLayer(),n=zt(e.pixelToCoordinateTransform,t.slice()),r=i.getExtent();if(r&&!ae(r,n))return null;const s=e.pixelRatio,o=e.viewState.projection,a=e.viewState,l=i.getRenderSource(),h=l.getTileGridForProjection(a.projection),c=l.getTilePixelRatio(e.pixelRatio);for(let t=h.getZForResolution(a.resolution);t>=h.getMinZoom();--t){const e=h.getTileCoordForCoordAndZ(n,t),i=l.getTile(t,e[1],e[2],s,o);if(!(i instanceof os||i instanceof lh)||i instanceof lh&&i.getState()===et)return null;if(i.getState()!==Q)continue;const r=h.getOrigin(t),u=ll(h.getTileSize(t)),d=h.getResolution(t),g=Math.floor(c*((n[0]-r[0])/d-e[1]*u[0])),f=Math.floor(c*((r[1]-n[1])/d-e[2]*u[1])),p=Math.round(c*l.getGutterForProjection(a.projection));return this.getImageData(i.getImage(),g+p,f+p)}return null}loadedTileCallback(t,e,i){return!!this.isDrawableTile(i)&&super.loadedTileCallback(t,e,i)}prepareFrame(t){return!!this.getLayer().getSource()}renderFrame(t,e){const i=t.layerStatesArray[t.layerIndex],n=t.viewState,r=n.projection,s=n.resolution,o=n.center,a=n.rotation,h=t.pixelRatio,c=this.getLayer(),u=c.getSource(),d=u.getRevision(),g=u.getTileGridForProjection(r),f=g.getZForResolution(s,u.zDirection),p=g.getResolution(f);let m=t.extent;const _=t.viewState.resolution,y=u.getTilePixelRatio(h),x=Math.round(De(m)/_*h),v=Math.round(Me(m)/_*h),S=i.extent&&Cn(i.extent,r);S&&(m=Ae(m,Cn(i.extent,r)));const w=p*x/2/y,T=p*v/2/y,E=[o[0]-w,o[1]-T,o[0]+w,o[1]+T],C=g.getTileRangeForExtentAndZ(m,f),R={};R[f]={};const b=this.createLoadedTileFinder(u,r,R),P=this.tmpExtent,I=this.tmpTileRange_;this.newTiles_=!1;const L=a?Fe(n.center,_,a,t.size):void 0;for(let e=C.minX;e<=C.maxX;++e)for(let n=C.minY;n<=C.maxY;++n){if(a&&!g.tileCoordIntersectsViewport([f,e,n],L))continue;const r=this.getTile(f,e,n,t);if(this.isDrawableTile(r)){const e=X(this);if(r.getState()==Q){R[f][r.tileCoord.toString()]=r;let t=r.inTransition(e);t&&1!==i.opacity&&(r.endTransition(e),t=!1),this.newTiles_||!t&&this.renderedTiles.includes(r)||(this.newTiles_=!0)}if(1===r.getAlpha(e,t.time))continue}const s=g.getTileCoordChildTileRange(r.tileCoord,I,P);let o=!1;s&&(o=b(f+1,s)),o||g.forEachTileCoordParentTileRange(r.tileCoord,b,I,P)}const F=p/s*h/y;Zt(this.pixelTransform,t.size[0]/2,t.size[1]/2,1/h,1/h,a,-x/2,-v/2);const M=Ht(this.pixelTransform);this.useContainer(e,M,this.getBackground(t));const A=this.context,O=A.canvas;Yt(this.inversePixelTransform,this.pixelTransform),Zt(this.tempTransform,x/2,v/2,F,F,0,-x/2,-v/2),O.width!=x||O.height!=v?(O.width=x,O.height=v):this.containerReused||A.clearRect(0,0,x,v),S&&this.clipUnrotated(A,t,S),u.getInterpolate()||(A.imageSmoothingEnabled=!1),this.preRender(A,t),this.renderedTiles.length=0;let N,D,G,k=Object.keys(R).map(Number);k.sort(l),1!==i.opacity||this.containerReused&&!u.getOpaque(t.viewState.projection)?(N=[],D=[]):k=k.reverse();for(let e=k.length-1;e>=0;--e){const i=k[e],n=u.getTilePixelSize(i,h,r),s=g.getResolution(i)/p,o=n[0]*s*F,a=n[1]*s*F,l=g.getTileCoordForCoordAndZ(Oe(E),i),c=g.getTileCoordExtent(l),d=zt(this.tempTransform,[y*(c[0]-E[0])/p,y*(E[3]-c[3])/p]),m=y*u.getGutterForProjection(r),_=R[i];for(const e in _){const n=_[e],r=n.tileCoord,s=l[1]-r[1],h=Math.round(d[0]-(s-1)*o),c=l[2]-r[2],g=Math.round(d[1]-(c-1)*a),p=Math.round(d[0]-s*o),y=Math.round(d[1]-c*a),x=h-p,v=g-y,S=f===i,w=S&&1!==n.getAlpha(X(this),t.time);let T=!1;if(!w)if(N){G=[p,y,p+x,y,p+x,y+v,p,y+v];for(let t=0,e=N.length;tthis._maxQueueLength;)this._queue.shift().callback(null,null)}_dispatch(){if(this._running||0===this._queue.length)return;const t=this._queue.shift();this._job=t;const e=t.inputs[0].width,i=t.inputs[0].height,n=t.inputs.map((function(t){return t.data.buffer})),r=this._workers.length;if(this._running=r,1===r)return void this._workers[0].postMessage({buffers:n,meta:t.meta,imageOps:this._imageOps,width:e,height:i},n);const s=t.inputs[0].data.length,o=4*Math.ceil(s/4/r);for(let s=0;sStamen Design, under CC BY 3.0.',nu],Mu={terrain:{extension:"png",opaque:!0},"terrain-background":{extension:"png",opaque:!0},"terrain-labels":{extension:"png",opaque:!1},"terrain-lines":{extension:"png",opaque:!1},"toner-background":{extension:"png",opaque:!0},toner:{extension:"png",opaque:!0},"toner-hybrid":{extension:"png",opaque:!1},"toner-labels":{extension:"png",opaque:!1},"toner-lines":{extension:"png",opaque:!1},"toner-lite":{extension:"png",opaque:!0},watercolor:{extension:"jpg",opaque:!0}},Au={terrain:{minZoom:0,maxZoom:18},toner:{minZoom:0,maxZoom:20},watercolor:{minZoom:0,maxZoom:18}};var Ou=class extends Dh{constructor(t){const e=t.layer.indexOf("-"),i=-1==e?t.layer:t.layer.slice(0,e),n=Au[i],r=Mu[t.layer],s=void 0!==t.url?t.url:"https://stamen-tiles-{a-d}.a.ssl.fastly.net/"+t.layer+"/{z}/{x}/{y}."+r.extension;super({attributions:Fu,cacheSize:t.cacheSize,crossOrigin:"anonymous",interpolate:t.interpolate,maxZoom:null!=t.maxZoom?t.maxZoom:n.maxZoom,minZoom:null!=t.minZoom?t.minZoom:n.minZoom,opaque:r.opaque,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileLoadFunction:t.tileLoadFunction,transition:t.transition,url:s,wrapX:t.wrapX,zDirection:t.zDirection})}};var Nu=class extends Ah{constructor(t){super({attributions:(t=t||{}).attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,interpolate:t.interpolate,projection:t.projection,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileGrid:t.tileGrid,tileLoadFunction:t.tileLoadFunction,url:t.url,urls:t.urls,wrapX:void 0===t.wrapX||t.wrapX,transition:t.transition,zDirection:t.zDirection}),this.params_=t.params||{},this.hidpi_=void 0===t.hidpi||t.hidpi,this.tmpExtent_=[1/0,1/0,-1/0,-1/0],this.setKey(this.getKeyForParams_())}getKeyForParams_(){let t=0;const e=[];for(const i in this.params_)e[t++]=i+"-"+this.params_[i];return e.join("/")}getParams(){return this.params_}getRequestUrl_(t,e,i,n,r,s){const o=this.urls;if(!o)return;const a=r.getCode().split(/:(?=\d+$)/).pop();let l;if(s.SIZE=e[0]+","+e[1],s.BBOX=i.join(","),s.BBOXSR=a,s.IMAGESR=a,s.DPI=Math.round(s.DPI?s.DPI*n:90*n),1==o.length)l=o[0];else{l=o[Ti(El(t),o.length)]}return qc(l.replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage"),s)}getTilePixelRatio(t){return this.hidpi_?t:1}updateParams(t){Object.assign(this.params_,t),this.setKey(this.getKeyForParams_())}tileUrlFunction(t,e,i){let n=this.getTileGrid();if(n||(n=this.getTileGridForProjection(i)),n.getResolutions().length<=t[0])return;1==e||this.hidpi_||(e=1);const r=n.getTileCoordExtent(t,this.tmpExtent_);let s=ll(n.getTileSize(t[0]),this.tmpSize);1!=e&&(s=al(s,e,this.tmpSize));const o={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};return Object.assign(o,this.params_),this.getRequestUrl_(t,s,r,e,i,o)}};var Du=class extends Dh{constructor(t){super({opaque:!1,projection:(t=t||{}).projection,tileGrid:t.tileGrid,wrapX:void 0===t.wrapX||t.wrapX,zDirection:t.zDirection,url:t.template||"z:{z} x:{x} y:{y}",tileLoadFunction:(t,e)=>{const i=t.getTileCoord()[0],n=ll(this.tileGrid.getTileSize(i)),r=_t(n[0],n[1]);r.strokeStyle="grey",r.strokeRect(.5,.5,n[0]+.5,n[1]+.5),r.fillStyle="grey",r.strokeStyle="white",r.textAlign="center",r.textBaseline="middle",r.font="24px sans-serif",r.lineWidth=4,r.strokeText(e,n[0]/2,n[1]/2,n[0]),r.fillText(e,n[0]/2,n[1]/2,n[0]),t.setImage(r.canvas)}})}};var Gu=class extends Ah{constructor(t){if(super({attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,interpolate:t.interpolate,projection:an("EPSG:3857"),reprojectionErrorThreshold:t.reprojectionErrorThreshold,state:"loading",tileLoadFunction:t.tileLoadFunction,wrapX:void 0===t.wrapX||t.wrapX,transition:t.transition,zDirection:t.zDirection}),this.tileJSON_=null,this.tileSize_=t.tileSize,t.url)if(t.jsonp)jl(t.url,this.handleTileJSONResponse.bind(this),this.handleTileJSONError.bind(this));else{const e=new XMLHttpRequest;e.addEventListener("load",this.onXHRLoad_.bind(this)),e.addEventListener("error",this.onXHRError_.bind(this)),e.open("GET",t.url),e.send()}else t.tileJSON?this.handleTileJSONResponse(t.tileJSON):Ft(!1,51)}onXHRLoad_(t){const e=t.target;if(!e.status||e.status>=200&&e.status<300){let t;try{t=JSON.parse(e.responseText)}catch(t){return void this.handleTileJSONError()}this.handleTileJSONResponse(t)}else this.handleTileJSONError()}onXHRError_(t){this.handleTileJSONError()}getTileJSON(){return this.tileJSON_}handleTileJSONResponse(t){const e=an("EPSG:4326"),i=this.getProjection();let n;if(void 0!==t.bounds){const r=pn(e,i);n=Ue(t.bounds,r)}const r=wh(i),s=t.minzoom||0,o=xh({extent:r,maxZoom:t.maxzoom||22,minZoom:s,tileSize:this.tileSize_});if(this.tileGrid=o,this.tileUrlFunction=Rh(t.tiles,o),t.attribution&&!this.getAttributions()){const e=void 0!==n?n:r;this.setAttributions((function(i){return Ge(e,i.extent)?[t.attribution]:null}))}this.tileJSON_=t,this.setState("ready")}handleTileJSONError(){this.setState("error")}};var ku=class extends Ah{constructor(t){t=t||{};const e=Object.assign({},t.params),i=!("TRANSPARENT"in e)||e.TRANSPARENT;super({attributions:t.attributions,attributionsCollapsible:t.attributionsCollapsible,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,interpolate:t.interpolate,opaque:!i,projection:t.projection,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileClass:t.tileClass,tileGrid:t.tileGrid,tileLoadFunction:t.tileLoadFunction,url:t.url,urls:t.urls,wrapX:void 0===t.wrapX||t.wrapX,transition:t.transition,zDirection:t.zDirection}),this.gutter_=void 0!==t.gutter?t.gutter:0,this.params_=e,this.v13_=!0,this.serverType_=t.serverType,this.hidpi_=void 0===t.hidpi||t.hidpi,this.tmpExtent_=[1/0,1/0,-1/0,-1/0],this.updateV13_(),this.setKey(this.getKeyForParams_())}getFeatureInfoUrl(t,e,i,n){const r=an(i),s=this.getProjection();let o=this.getTileGrid();o||(o=this.getTileGridForProjection(r));const a=o.getZForResolution(e,this.zDirection),l=o.getTileCoordForCoordAndZ(t,a);if(o.getResolutions().length<=l[0])return;let h=o.getResolution(l[0]),c=o.getTileCoordExtent(l,this.tmpExtent_),u=ll(o.getTileSize(l[0]),this.tmpSize);const d=this.gutter_;0!==d&&(u=sl(u,d,this.tmpSize),c=re(c,h*d,c)),s&&s!==r&&(h=nh(s,r,t,h),c=yn(c,r,s),t=_n(t,r,s));const g={SERVICE:"WMS",VERSION:tu,REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.params_.LAYERS};Object.assign(g,this.params_,n);const f=Math.floor((t[0]-c[0])/h),p=Math.floor((c[3]-t[1])/h);return g[this.v13_?"I":"X"]=f,g[this.v13_?"J":"Y"]=p,this.getRequestUrl_(l,u,c,1,s||r,g)}getLegendUrl(t,e){if(void 0===this.urls[0])return;const i={SERVICE:"WMS",VERSION:tu,REQUEST:"GetLegendGraphic",FORMAT:"image/png"};if(void 0===e||void 0===e.LAYER){const t=this.params_.LAYERS;if(!(!Array.isArray(t)||1===t.length))return;i.LAYER=t}if(void 0!==t){const e=this.getProjection()?this.getProjection().getMetersPerUnit():1,n=28e-5;i.SCALE=t*e/n}return Object.assign(i,e),qc(this.urls[0],i)}getGutter(){return this.gutter_}getParams(){return this.params_}getRequestUrl_(t,e,i,n,r,s){const o=this.urls;if(!o)return;if(s.WIDTH=e[0],s.HEIGHT=e[1],s[this.v13_?"CRS":"SRS"]=r.getCode(),"STYLES"in this.params_||(s.STYLES=""),1!=n)switch(this.serverType_){case"geoserver":const t=90*n+.5|0;"FORMAT_OPTIONS"in s?s.FORMAT_OPTIONS+=";dpi:"+t:s.FORMAT_OPTIONS="dpi:"+t;break;case"mapserver":s.MAP_RESOLUTION=90*n;break;case"carmentaserver":case"qgis":s.DPI=90*n;break;default:Ft(!1,52)}const a=r.getAxisOrientation(),l=i;if(this.v13_&&"ne"==a.substr(0,2)){let t;t=i[0],l[0]=i[1],l[1]=t,t=i[2],l[2]=i[3],l[3]=t}let h;if(s.BBOX=l.join(","),1==o.length)h=o[0];else{h=o[Ti(El(t),o.length)]}return qc(h,s)}getTilePixelRatio(t){return this.hidpi_&&void 0!==this.serverType_?t:1}getKeyForParams_(){let t=0;const e=[];for(const i in this.params_)e[t++]=i+"-"+this.params_[i];return e.join("/")}updateParams(t){Object.assign(this.params_,t),this.updateV13_(),this.setKey(this.getKeyForParams_())}updateV13_(){const t=this.params_.VERSION||tu;this.v13_=Li(t,"1.3")>=0}tileUrlFunction(t,e,i){let n=this.getTileGrid();if(n||(n=this.getTileGridForProjection(i)),n.getResolutions().length<=t[0])return;1==e||this.hidpi_&&void 0!==this.serverType_||(e=1);const r=n.getResolution(t[0]);let s=n.getTileCoordExtent(t,this.tmpExtent_),o=ll(n.getTileSize(t[0]),this.tmpSize);const a=this.gutter_;0!==a&&(o=sl(o,a,this.tmpSize),s=re(s,r*a,s)),1!=e&&(o=al(o,e,this.tmpSize));const l={SERVICE:"WMS",VERSION:tu,REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0};return Object.assign(l,this.params_),this.getRequestUrl_(t,o,s,e,i,l)}};class ju extends ot{constructor(t,e,i,n,r,s){super(t,e),this.src_=i,this.extent_=n,this.preemptive_=r,this.grid_=null,this.keys_=null,this.data_=null,this.jsonp_=s}getImage(){return null}getData(t){if(!this.grid_||!this.keys_)return null;const e=(t[0]-this.extent_[0])/(this.extent_[2]-this.extent_[0]),i=(t[1]-this.extent_[1])/(this.extent_[3]-this.extent_[1]),n=this.grid_[Math.floor((1-i)*this.grid_.length)];if("string"!=typeof n)return null;let r=n.charCodeAt(Math.floor(e*n.length));r>=93&&r--,r>=35&&r--,r-=32;let s=null;if(r in this.keys_){const t=this.keys_[r];s=this.data_&&t in this.data_?this.data_[t]:t}return s}forDataAtCoordinate(t,e,i){this.state==et&&!0===i?(this.state=$,D(this,w,(function(i){e(this.getData(t))}),this),this.loadInternal_()):!0===i?setTimeout((()=>{e(this.getData(t))}),0):e(this.getData(t))}getKey(){return this.src_}handleError_(){this.state=tt,this.changed()}handleLoad_(t){this.grid_=t.grid,this.keys_=t.keys,this.data_=t.data,this.state=Q,this.changed()}loadInternal_(){if(this.state==$)if(this.state=J,this.jsonp_)jl(this.src_,this.handleLoad_.bind(this),this.handleError_.bind(this));else{const t=new XMLHttpRequest;t.addEventListener("load",this.onXHRLoad_.bind(this)),t.addEventListener("error",this.onXHRError_.bind(this)),t.open("GET",this.src_),t.send()}}onXHRLoad_(t){const e=t.target;if(!e.status||e.status>=200&&e.status<300){let t;try{t=JSON.parse(e.responseText)}catch(t){return void this.handleError_()}this.handleLoad_(t)}else this.handleError_()}onXHRError_(t){this.handleError_()}load(){this.preemptive_?this.loadInternal_():this.setState(et)}}var Bu=class extends Eh{constructor(t){if(super({projection:an("EPSG:3857"),state:"loading",zDirection:t.zDirection}),this.preemptive_=void 0===t.preemptive||t.preemptive,this.tileUrlFunction_=Ph,this.template_=void 0,this.jsonp_=t.jsonp||!1,t.url)if(this.jsonp_)jl(t.url,this.handleTileJSONResponse.bind(this),this.handleTileJSONError.bind(this));else{const e=new XMLHttpRequest;e.addEventListener("load",this.onXHRLoad_.bind(this)),e.addEventListener("error",this.onXHRError_.bind(this)),e.open("GET",t.url),e.send()}else t.tileJSON?this.handleTileJSONResponse(t.tileJSON):Ft(!1,51)}onXHRLoad_(t){const e=t.target;if(!e.status||e.status>=200&&e.status<300){let t;try{t=JSON.parse(e.responseText)}catch(t){return void this.handleTileJSONError()}this.handleTileJSONResponse(t)}else this.handleTileJSONError()}onXHRError_(t){this.handleTileJSONError()}getTemplate(){return this.template_}forDataAtCoordinateAndResolution(t,e,i,n){if(this.tileGrid){const r=this.tileGrid.getZForResolution(e,this.zDirection),s=this.tileGrid.getTileCoordForCoordAndZ(t,r);this.getTile(s[0],s[1],s[2],1,this.getProjection()).forDataAtCoordinate(t,i,n)}else!0===n?setTimeout((function(){i(null)}),0):i(null)}handleTileJSONError(){this.setState("error")}handleTileJSONResponse(t){const e=an("EPSG:4326"),i=this.getProjection();let n;if(void 0!==t.bounds){const r=pn(e,i);n=Ue(t.bounds,r)}const r=wh(i),s=t.minzoom||0,o=xh({extent:r,maxZoom:t.maxzoom||22,minZoom:s});this.tileGrid=o,this.template_=t.template;const a=t.grids;if(a){if(this.tileUrlFunction_=Rh(a,o),void 0!==t.attribution){const e=void 0!==n?n:r;this.setAttributions((function(i){return Ge(e,i.extent)?[t.attribution]:null}))}this.setState("ready")}else this.setState("error")}getTile(t,e,i,n,r){const s=vl(t,e,i);if(this.tileCache.containsKey(s))return this.tileCache.get(s);const o=[t,e,i],a=this.getTileCoordForTileUrlFunction(o,r),l=this.tileUrlFunction_(a,n,r),h=new ju(o,void 0!==l?$:et,void 0!==l?l:"",this.tileGrid.getTileCoordExtent(o),this.preemptive_,this.jsonp_);return this.tileCache.set(s,h),h}useTile(t,e,i){const n=vl(t,e,i);this.tileCache.containsKey(n)&&this.tileCache.get(n)}};var zu=class extends Fh{constructor(t){const e=t.projection||"EPSG:3857",i=t.extent||wh(e),n=t.tileGrid||xh({extent:i,maxResolution:t.maxResolution,maxZoom:void 0!==t.maxZoom?t.maxZoom:22,minZoom:t.minZoom,tileSize:t.tileSize||512});super({attributions:t.attributions,attributionsCollapsible:t.attributionsCollapsible,cacheSize:t.cacheSize,interpolate:!0,opaque:!1,projection:e,state:t.state,tileGrid:n,tileLoadFunction:t.tileLoadFunction?t.tileLoadFunction:Uu,tileUrlFunction:t.tileUrlFunction,url:t.url,urls:t.urls,wrapX:void 0===t.wrapX||t.wrapX,transition:t.transition,zDirection:void 0===t.zDirection?1:t.zDirection}),this.format_=t.format?t.format:null,this.sourceTileCache=new Rl(this.tileCache.highWaterMark),this.overlaps_=null==t.overlaps||t.overlaps,this.tileClass=t.tileClass?t.tileClass:Ml,this.tileGrids_={}}getFeaturesInExtent(t){const e=[],i=this.tileCache;if(0===i.getCount())return e;const n=Tl(i.peekFirstKey())[0],r=this.tileGrid;return i.forEach((function(i){if(i.tileCoord[0]!==n||i.getState()!==Q)return;const s=i.getSourceTiles();for(let i=0,n=s.length;i{const n=wl(e),r=i.peek(n);if(r){const e=r.sourceTiles;for(let i=0,n=e.length;i{const r=this.tileUrlFunction(n,t,e),s=this.sourceTileCache.containsKey(r)?this.sourceTileCache.get(r):new this.tileClass(n,r?$:et,r,this.format_,this.tileLoadFunction);i.sourceTiles.push(s);const o=s.getState();if(o{this.handleTileChange(e);const n=s.getState();if(n===Q||n===tt){const e=s.getKey();e in i.errorTileKeys?s.getState()===Q&&delete i.errorTileKeys[e]:i.loadingSourceTiles--,n===tt?i.errorTileKeys[e]=!0:s.removeEventListener(w,t),0===i.loadingSourceTiles&&i.setState(v(i.errorTileKeys)?Q:tt)}};s.addEventListener(w,t),i.loadingSourceTiles++}o===$&&(s.extent=l.getTileCoordExtent(n),s.projection=e,s.resolution=l.getResolution(n[0]),this.sourceTileCache.set(r,s),s.load())})),i.loadingSourceTiles||i.setState(i.sourceTiles.some((t=>t.getState()===tt))?tt:Q)}return i.sourceTiles}getTile(t,e,i,n,r){const s=vl(t,e,i),o=this.getKey();let a;if(this.tileCache.containsKey(s)&&(a=this.tileCache.get(s),a.key===o))return a;const l=[t,e,i];let h=this.getTileCoordForTileUrlFunction(l,r);const c=this.getTileGrid().getExtent(),u=this.getTileGridForProjection(r);if(h&&c){const e=u.getTileCoordExtent(h);re(e,-u.getResolution(t),e),Ge(c,e)||(h=null)}let d=!0;if(null!==h){const e=this.tileGrid,i=u.getResolution(t),s=e.getZForResolution(i,1),o=u.getTileCoordExtent(h);re(o,-i,o),e.forEachTileCoord(o,s,(t=>{d=d&&!this.tileUrlFunction(t,n,r)}))}const g=new Fl(l,d?et:$,h,this.getSourceTiles.bind(this,n,r));return g.key=o,a?(g.interimTile=a,g.refreshInterimChain(),this.tileCache.replace(s,g)):this.tileCache.set(s,g),g}getTileGridForProjection(t){const e=t.getCode();let i=this.tileGrids_[e];if(!i){const t=this.tileGrid,n=t.getResolutions().slice(),r=n.map((function(e,i){return t.getOrigin(i)})),s=n.map((function(e,i){return t.getTileSize(i)})),o=43;for(let t=n.length;t0)||i.find((function(i){return e.Identifier==i.TileMatrix||!e.Identifier.includes(":")&&t.Identifier+":"+e.Identifier===i.TileMatrix})),l){r.push(e.Identifier);const t=28e-5*e.ScaleDenominator/h,i=e.TileWidth,l=e.TileHeight;c?s.push([e.TopLeftCorner[1],e.TopLeftCorner[0]]):s.push(e.TopLeftCorner),n.push(t),o.push(i==l?i:[i,l]),a.push([e.MatrixWidth,e.MatrixHeight])}})),new Xu({extent:e,origins:s,resolutions:n,matrixIds:r,tileSizes:o,sizes:a})}var Zu=class extends Ah{constructor(t){const e=void 0!==t.requestEncoding?t.requestEncoding:"KVP",i=t.tileGrid;let n=t.urls;void 0===n&&void 0!==t.url&&(n=Ih(t.url)),super({attributions:t.attributions,attributionsCollapsible:t.attributionsCollapsible,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,interpolate:t.interpolate,projection:t.projection,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileClass:t.tileClass,tileGrid:i,tileLoadFunction:t.tileLoadFunction,tilePixelRatio:t.tilePixelRatio,urls:n,wrapX:void 0!==t.wrapX&&t.wrapX,transition:t.transition,zDirection:t.zDirection}),this.version_=void 0!==t.version?t.version:"1.0.0",this.format_=void 0!==t.format?t.format:"image/jpeg",this.dimensions_=void 0!==t.dimensions?t.dimensions:{},this.layer_=t.layer,this.matrixSet_=t.matrixSet,this.style_=t.style,this.requestEncoding_=e,this.setKey(this.getKeyForDimensions_()),n&&n.length>0&&(this.tileUrlFunction=bh(n.map(this.createFromWMTSTemplate.bind(this))))}setUrls(t){this.urls=t;const e=t.join("\n");this.setTileUrlFunction(bh(t.map(this.createFromWMTSTemplate.bind(this))),e)}getDimensions(){return this.dimensions_}getFormat(){return this.format_}getLayer(){return this.layer_}getMatrixSet(){return this.matrixSet_}getRequestEncoding(){return this.requestEncoding_}getStyle(){return this.style_}getVersion(){return this.version_}getKeyForDimensions_(){const t=this.urls?this.urls.slice(0):[];for(const e in this.dimensions_)t.push(e+"-"+this.dimensions_[e]);return t.join("/")}updateDimensions(t){Object.assign(this.dimensions_,t),this.setKey(this.getKeyForDimensions_())}createFromWMTSTemplate(t){const e=this.requestEncoding_,i={layer:this.layer_,style:this.style_,tilematrixset:this.matrixSet_};"KVP"==e&&Object.assign(i,{Service:"WMTS",Request:"GetTile",Version:this.version_,Format:this.format_}),t="KVP"==e?qc(t,i):t.replace(/\{(\w+?)\}/g,(function(t,e){return e.toLowerCase()in i?i[e.toLowerCase()]:t}));const n=this.tileGrid,r=this.dimensions_;return function(i,s,o){if(!i)return;const a={TileMatrix:n.getMatrixId(i[0]),TileCol:i[1],TileRow:i[2]};Object.assign(a,r);let l=t;return l="KVP"==e?qc(l,a):l.replace(/\{(\w+?)\}/g,(function(t,e){return a[e]})),l}}};const Yu=34962,Ku=34963,qu=35044,Hu=35048,$u=5126,Ju=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function Qu(t,e){e=Object.assign({preserveDrawingBuffer:!0,antialias:!ct},e);const i=Ju.length;for(let n=0;n{this.uniforms_.push({value:t.uniforms[i],location:e.getUniformLocation(this.renderTargetProgram_,i)})}))}getGL(){return this.gl_}init(t){const e=this.getGL(),i=[e.drawingBufferWidth*this.scaleRatio_,e.drawingBufferHeight*this.scaleRatio_];if(e.bindFramebuffer(e.FRAMEBUFFER,this.getFrameBuffer()),e.viewport(0,0,i[0],i[1]),!this.renderTargetTextureSize_||this.renderTargetTextureSize_[0]!==i[0]||this.renderTargetTextureSize_[1]!==i[1]){this.renderTargetTextureSize_=i;const t=0,n=e.RGBA,r=0,s=e.RGBA,o=e.UNSIGNED_BYTE,a=null;e.bindTexture(e.TEXTURE_2D,this.renderTargetTexture_),e.texImage2D(e.TEXTURE_2D,t,n,i[0],i[1],r,s,o,a),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.renderTargetTexture_,0)}}apply(t,e,i,n){const r=this.getGL(),s=t.size;if(r.bindFramebuffer(r.FRAMEBUFFER,e?e.getFrameBuffer():null),r.activeTexture(r.TEXTURE0),r.bindTexture(r.TEXTURE_2D,this.renderTargetTexture_),!e){const e=X(r.canvas);if(!t.renderTargets[e]){const i=r.getContextAttributes();i&&i.preserveDrawingBuffer&&(r.clearColor(0,0,0,0),r.clear(r.COLOR_BUFFER_BIT)),t.renderTargets[e]=!0}}r.enable(r.BLEND),r.blendFunc(r.ONE,r.ONE_MINUS_SRC_ALPHA),r.viewport(0,0,r.drawingBufferWidth,r.drawingBufferHeight),r.bindBuffer(r.ARRAY_BUFFER,this.renderTargetVerticesBuffer_),r.useProgram(this.renderTargetProgram_),r.enableVertexAttribArray(this.renderTargetAttribLocation_),r.vertexAttribPointer(this.renderTargetAttribLocation_,2,r.FLOAT,!1,0,0),r.uniform2f(this.renderTargetUniformLocation_,s[0],s[1]),r.uniform1i(this.renderTargetTextureLocation_,0);const o=t.layerStatesArray[t.layerIndex].opacity;r.uniform1f(this.renderTargetOpacityLocation_,o),this.applyUniforms(t),i&&i(r,t),r.drawArrays(r.TRIANGLES,0,6),n&&n(r,t)}getFrameBuffer(){return this.frameBuffer_}applyUniforms(t){const e=this.getGL();let i,n=1;this.uniforms_.forEach((function(r){if(i="function"==typeof r.value?r.value(t):r.value,i instanceof HTMLCanvasElement||i instanceof ImageData)r.texture||(r.texture=e.createTexture()),e.activeTexture(e[`TEXTURE${n}`]),e.bindTexture(e.TEXTURE_2D,r.texture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),i instanceof ImageData?e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,i.width,i.height,0,e.UNSIGNED_BYTE,new Uint8Array(i.data)):e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,i),e.uniform1i(r.location,n++);else if(Array.isArray(i))switch(i.length){case 2:return void e.uniform2f(r.location,i[0],i[1]);case 3:return void e.uniform3f(r.location,i[0],i[1],i[2]);case 4:return void e.uniform4f(r.location,i[0],i[1],i[2],i[3]);default:return}else"number"==typeof i&&e.uniform1f(r.location,i)}))}};function Ad(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Od(t,e){return t[0]=e[0],t[1]=e[1],t[4]=e[2],t[5]=e[3],t[12]=e[4],t[13]=e[5],t}const Nd="u_projectionMatrix",Dd="u_offsetScaleMatrix",Gd="u_offsetRotateMatrix",kd="u_time",jd="u_zoom",Bd="u_resolution",zd="u_sizePx",Ud="u_pixelRatio",Xd={UNSIGNED_BYTE:5121,UNSIGNED_SHORT:5123,UNSIGNED_INT:5125,FLOAT:$u},Vd={};function Wd(t){return"shared/"+t}let Zd=0;function Yd(t){let e=0;for(let i=0;i0)return;const i=Qu(e.canvas).getExtension("WEBGL_lose_context");i&&i.loseContext(),delete Vd[t]}(this.canvasCacheKey_),delete this.gl_,delete this.canvas_}prepareDraw(t,e){const i=this.getGL(),n=this.getCanvas(),r=t.size,s=t.pixelRatio;n.width=r[0]*s,n.height=r[1]*s,n.style.width=r[0]+"px",n.style.height=r[1]+"px";for(let e=this.postProcessPasses_.length-1;e>=0;e--)this.postProcessPasses_[e].init(t);i.bindTexture(i.TEXTURE_2D,null),i.clearColor(0,0,0,0),i.clear(i.COLOR_BUFFER_BIT),i.enable(i.BLEND),i.blendFunc(i.ONE,e?i.ZERO:i.ONE_MINUS_SRC_ALPHA)}prepareDrawToRenderTarget(t,e,i){const n=this.getGL(),r=e.getSize();n.bindFramebuffer(n.FRAMEBUFFER,e.getFramebuffer()),n.viewport(0,0,r[0],r[1]),n.bindTexture(n.TEXTURE_2D,e.getTexture()),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.enable(n.BLEND),n.blendFunc(n.ONE,i?n.ZERO:n.ONE_MINUS_SRC_ALPHA)}drawElements(t,e){const i=this.getGL();this.getExtension("OES_element_index_uint");const n=i.UNSIGNED_INT,r=e-t,s=4*t;i.drawElements(i.TRIANGLES,r,n,s)}finalizeDraw(t,e,i){for(let n=0,r=this.postProcessPasses_.length;n{if(i="function"==typeof r.value?r.value(t):r.value,i instanceof HTMLCanvasElement||i instanceof HTMLImageElement||i instanceof ImageData){r.texture||(r.prevValue=void 0,r.texture=e.createTexture()),e.activeTexture(e[`TEXTURE${n}`]),e.bindTexture(e.TEXTURE_2D,r.texture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE);(!(i instanceof HTMLImageElement)||i.complete)&&r.prevValue!==i&&(r.prevValue=i,e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,i)),e.uniform1i(this.getUniformLocation(r.name),n++)}else if(Array.isArray(i)&&6===i.length)this.setUniformMatrixValue(r.name,Od(this.tmpMat4_,i));else if(Array.isArray(i)&&i.length<=4)switch(i.length){case 2:return void e.uniform2f(this.getUniformLocation(r.name),i[0],i[1]);case 3:return void e.uniform3f(this.getUniformLocation(r.name),i[0],i[1],i[2]);case 4:return void e.uniform4f(this.getUniformLocation(r.name),i[0],i[1],i[2],i[3]);default:return}else"number"==typeof i&&e.uniform1f(this.getUniformLocation(r.name),i)}))}useProgram(t,e){this.getGL().useProgram(t),this.currentProgram_=t,this.uniformLocations_={},this.attribLocations_={},this.applyFrameState(e),this.applyUniforms(e)}compileShader(t,e){const i=this.getGL(),n=i.createShader(e);return i.shaderSource(n,t),i.compileShader(n),n}getProgram(t,e){const i=this.getGL(),n=this.compileShader(t,i.FRAGMENT_SHADER),r=this.compileShader(e,i.VERTEX_SHADER),s=i.createProgram();if(i.attachShader(s,n),i.attachShader(s,r),i.linkProgram(s),!i.getShaderParameter(n,i.COMPILE_STATUS)){const t=`Fragment shader compilation failed: ${i.getShaderInfoLog(n)}`;throw new Error(t)}if(i.deleteShader(n),!i.getShaderParameter(r,i.COMPILE_STATUS)){const t=`Vertex shader compilation failed: ${i.getShaderInfoLog(r)}`;throw new Error(t)}if(i.deleteShader(r),!i.getProgramParameter(s,i.LINK_STATUS)){const t=`GL program linking failed: ${i.getShaderInfoLog(r)}`;throw new Error(t)}return s}getUniformLocation(t){return void 0===this.uniformLocations_[t]&&(this.uniformLocations_[t]=this.getGL().getUniformLocation(this.currentProgram_,t)),this.uniformLocations_[t]}getAttributeLocation(t){return void 0===this.attribLocations_[t]&&(this.attribLocations_[t]=this.getGL().getAttribLocation(this.currentProgram_,t)),this.attribLocations_[t]}makeProjectionTransform(t,e){const i=t.size,n=t.viewState.rotation,r=t.viewState.resolution,s=t.viewState.center;return Gt(e),Zt(e,0,0,2/(r*i[0]),2/(r*i[1]),-n,-s[0],-s[1]),e}setUniformFloatValue(t,e){this.getGL().uniform1f(this.getUniformLocation(t),e)}setUniformFloatVec2(t,e){this.getGL().uniform2fv(this.getUniformLocation(t),e)}setUniformFloatVec4(t,e){this.getGL().uniform4fv(this.getUniformLocation(t),e)}setUniformMatrixValue(t,e){this.getGL().uniformMatrix4fv(this.getUniformLocation(t),!1,e)}enableAttributeArray_(t,e,i,n,r){const s=this.getAttributeLocation(t);s<0||(this.getGL().enableVertexAttribArray(s),this.getGL().vertexAttribPointer(s,e,i,!1,n,r))}enableAttributes(t){const e=Yd(t);let i=0;for(let n=0;nthis.size_[0]||e>=this.size_[1])return $d[0]=0,$d[1]=0,$d[2]=0,$d[3]=0,$d;this.readAll();const i=Math.floor(t)+(this.size_[1]-Math.floor(e)-1)*this.size_[0];return $d[0]=this.data_[4*i],$d[1]=this.data_[4*i+1],$d[2]=this.data_[4*i+2],$d[3]=this.data_[4*i+3],$d}getTexture(){return this.texture_}getFramebuffer(){return this.framebuffer_}updateSize_(){const t=this.size_,e=this.helper_.getGL();this.texture_=this.helper_.createTexture(t,null,this.texture_),e.bindFramebuffer(e.FRAMEBUFFER,this.framebuffer_),e.viewport(0,0,t[0],t[1]),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture_,0),this.data_=new Uint8Array(t[0]*t[1]*4)}};function Qd(t,e,i){const n=i?t.LINEAR:t.NEAREST;t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,n),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,n)}function tg(t,e,i,n,r,s){const o=t.getGL();let a,l;if(i instanceof Float32Array){a=o.FLOAT,t.getExtension("OES_texture_float");l=null!==t.getExtension("OES_texture_float_linear")}else a=o.UNSIGNED_BYTE,l=!0;Qd(o,e,s&&l);const h=i.byteLength/n[1];let c,u=1;switch(h%8==0?u=8:h%4==0?u=4:h%2==0&&(u=2),r){case 1:c=o.LUMINANCE;break;case 2:c=o.LUMINANCE_ALPHA;break;case 3:c=o.RGB;break;case 4:c=o.RGBA;break;default:throw new Error(`Unsupported number of bands: ${r}`)}const d=o.getParameter(o.UNPACK_ALIGNMENT);o.pixelStorei(o.UNPACK_ALIGNMENT,u),o.texImage2D(o.TEXTURE_2D,0,c,n[0],n[1],0,c,a,i),o.pixelStorei(o.UNPACK_ALIGNMENT,d)}let eg=null;var ig=class extends S{constructor(t){super(),this.tile,this.textures=[],this.handleTileChange_=this.handleTileChange_.bind(this),this.renderSize_=ll(t.grid.getTileSize(t.tile.tileCoord[0])),this.gutter_=t.gutter||0,this.bandCount=NaN,this.helper_=t.helper;const e=new Id(Yu,qu);e.fromArray([0,1,1,1,1,0,0,0]),this.helper_.flushBufferData(e),this.coords=e,this.setTile(t.tile)}setTile(t){if(t!==this.tile)if(this.tile&&this.tile.removeEventListener(w,this.handleTileChange_),this.tile=t,this.textures.length=0,this.loaded=t.getState()===Q,this.loaded)this.uploadTile_();else{if(t instanceof os){const e=t.getImage();e instanceof Image&&!e.crossOrigin&&(e.crossOrigin="anonymous")}t.addEventListener(w,this.handleTileChange_)}}uploadTile_(){const t=this.helper_,e=t.getGL(),i=this.tile;let n;n=i instanceof os||i instanceof lh?i.getImage():i.getData();const r=Ct(n);if(r){const t=e.createTexture();return this.textures.push(t),this.bandCount=4,void function(t,e,i,n){Qd(t,e,n),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,i)}(e,t,r,i.interpolate)}n=Rt(n);const s=i.getSize(),o=[s[0]+2*this.gutter_,s[1]+2*this.gutter_],a=n instanceof Float32Array,l=o[0]*o[1],h=a?Float32Array:Uint8Array,c=h.BYTES_PER_ELEMENT,u=n.byteLength/o[1];this.bandCount=Math.floor(u/c/o[0]);const d=Math.ceil(this.bandCount/4);if(1===d){const r=e.createTexture();return this.textures.push(r),void tg(t,r,n,o,this.bandCount,i.interpolate)}const g=new Array(d);for(let t=0;t=f;--r){const i=l.getTileRangeForExtentAndZ(e,r,this.tempTileRange_),o=l.getResolution(r);for(let e=i.minX;e<=i.maxX;++e)for(let g=i.minY;g<=i.maxY;++g){const i=xl(r,e,g,this.tempTileCoord_),f=dg(a,i);let p,m;if(d.containsKey(f)&&(p=d.get(f),m=p.tile),!p||p.tile.key!==a.getKey())if(m=a.getTile(r,e,g,t.pixelRatio,s.projection),p)if(this.isDrawableTile_(m))p.setTile(m);else{const t=m.getInterimTile();p.setTile(t)}else p=new ig({tile:m,grid:l,helper:this.helper,gutter:h}),d.set(f,p);cg(n,p,r);const _=m.getKey();u[_]=!0,m.getState()===$&&(t.tileQueue.isKeyQueued(_)||t.tileQueue.enqueue([m,c,l.getTileCoordCenter(i),o]))}}}renderFrame(t){this.frameState_=t,this.renderComplete=!0;const e=this.helper.getGL();this.preRender(e,t);const i=t.viewState,n=this.getLayer(),r=n.getRenderSource(),s=r.getTileGridForProjection(i.projection),o=r.getGutterForProjection(i.projection),a=ug(t,t.extent),h=s.getZForResolution(i.resolution,r.zDirection),c={},u=n.getPreload();if(t.nextExtent){const e=s.getZForResolution(i.nextResolution,r.zDirection),n=ug(t,t.nextExtent);this.enqueueTiles(t,n,e,c,u)}this.enqueueTiles(t,a,h,c,0),u>0&&setTimeout((()=>{this.enqueueTiles(t,a,h-1,c,u-1)}),0);const d={},g=X(this),f=t.time;let p=!1;const m=c[h];for(let t=0,e=m.length;t=r;--t){if(this.findAltTiles_(s,n,t,c))break}}this.helper.useProgram(this.program_,t),this.helper.prepareDraw(t,!p);const _=Object.keys(c).map(Number).sort(l),y=i.center[0],x=i.center[1];for(let n=0,r=_.length;n0&&(R=s.getTileCoordExtent(c),Ae(R,a,R)),this.helper.setUniformFloatVec4(sg.RENDER_EXTENT,R),this.helper.setUniformFloatValue(sg.RESOLUTION,i.resolution),this.helper.setUniformFloatValue(sg.ZOOM,i.zoom),this.helper.drawElements(0,this.indices_.getSize())}}this.helper.finalizeDraw(t,this.dispatchPreComposeEvent,this.dispatchPostComposeEvent);const v=this.helper.getCanvas(),S=this.tileTextureCache_;for(;S.canExpireCache();){S.pop().dispose()}return t.postRenderFunctions.push((function(t,e){r.updateCacheSize(.1,e.viewState.projection),r.expireCache(e.viewState.projection,lg)})),this.postRender(e,t),v}getData(t){if(!this.helper.getGL())return null;const e=this.frameState_;if(!e)return null;const i=this.getLayer(),n=zt(e.pixelToCoordinateTransform,t.slice()),r=e.viewState,s=i.getExtent();if(s&&!ae(Cn(s,r.projection),n))return null;const o=i.getSources(ne([n]),r.resolution);let a,l,h;for(a=o.length-1;a>=0;--a)if(l=o[a],"ready"===l.getState()){if(h=l.getTileGridForProjection(r.projection),l.getWrapX())break;const t=h.getExtent();if(!t||ae(t,n))break}if(a<0)return null;const c=this.tileTextureCache_;for(let t=h.getZForResolution(r.resolution);t>=h.getMinZoom();--t){const e=h.getTileCoordForCoordAndZ(n,t),i=dg(l,e);if(!c.containsKey(i))continue;const r=c.get(i),s=r.tile;if((s instanceof lh||s instanceof gc)&&s.getState()===et)return null;if(!r.loaded)continue;const o=h.getOrigin(t),a=ll(h.getTileSize(t)),u=h.getResolution(t),d=(n[0]-o[0])/u-e[1]*a[0],g=(o[1]-n[1])/u-e[2]*a[1];return r.getPixelData(d,g)}return null}findAltTiles_(t,e,i,n){const r=t.getTileRangeForTileCoordAndZ(e,i,this.tempTileRange_);if(!r)return!1;let s=!0;const o=this.tileTextureCache_,a=this.getLayer().getRenderSource();for(let t=r.minX;t<=r.maxX;++t)for(let e=r.minY;e<=r.maxY;++e){const r=dg(a,[i,t,e]);let l=!1;if(o.containsKey(r)){const t=o.get(r);t.loaded&&(cg(n,t,i),l=!0)}l||(s=!1)}return s}clearCache(){const t=this.tileTextureCache_;t.forEach((t=>t.dispose())),t.clear()}removeHelper(){this.helper&&this.clearCache(),super.removeHelper()}disposeInternal(){const t=this.helper;if(t){t.getGL().deleteProgram(this.program_),delete this.program_,t.deleteBuffer(this.indices_)}super.disposeInternal(),delete this.indices_,delete this.tileTextureCache_,delete this.frameState_}};const fg=1,pg=2,mg=4,_g=8,yg=16,xg=31,vg=0,Sg={};function wg(t){if("number"==typeof t)return fg;if("boolean"==typeof t)return _g;if("string"==typeof t)return ms(t)?mg|pg:pg;if(!Array.isArray(t))throw new Error(`Unhandled value type: ${JSON.stringify(t)}`);const e=t;if(e.every((function(t){return"number"==typeof t})))return 3===e.length||4===e.length?mg|yg:yg;if("string"!=typeof e[0])throw new Error(`Expected an expression operator but received: ${JSON.stringify(e)}`);const i=Sg[e[0]];if(void 0===i)throw new Error(`Unrecognized expression operator: ${JSON.stringify(e)}`);return i.getReturnType(e.slice(1))}function Tg(t){return Math.log2(t)%1==0}function Eg(t){const e=t.toString();return e.includes(".")?e:e+".0"}function Cg(t){if(t.length<2||t.length>4)throw new Error("`formatArray` can only output `vec2`, `vec3` or `vec4` arrays.");return`vec${t.length}(${t.map(Eg).join(", ")})`}function Rg(t){const e=gs(t).slice();return e.length<4&&e.push(1),Cg(e.map((function(t,e){return e<3?t/255:t})))}function bg(t,e){return void 0===t.stringLiteralsMap[e]&&(t.stringLiteralsMap[e]=Object.keys(t.stringLiteralsMap).length),t.stringLiteralsMap[e]}function Pg(t,e){return Eg(bg(t,e))}function Ig(t,e,i){if(Array.isArray(e)&&"string"==typeof e[0]){const n=Sg[e[0]];if(void 0===n)throw new Error(`Unrecognized expression operator: ${JSON.stringify(e)}`);return n.toGlsl(t,e.slice(1),i)}const n=wg(e);if((n&fg)>0)return Eg(e);if((n&_g)>0)return e.toString();if((n&pg)>0&&(void 0===i||i==pg))return Pg(t,e.toString());if((n&mg)>0&&(void 0===i||i==mg))return Rg(e);if((n&yg)>0)return Cg(e);throw new Error(`Unexpected expression ${e} (expected type ${i})`)}function Lg(t){if(!(wg(t)&fg))throw new Error(`A numeric value was expected, got ${JSON.stringify(t)} instead`)}function Fg(t){for(let e=0;ee)throw new Error(`At most ${e} arguments were expected, got ${t.length} instead`)}function Gg(t){if(t.length%2!=0)throw new Error(`An even amount of arguments was expected, got ${t} instead`)}function kg(t,e){if(!Tg(e))throw new Error(`Could not infer only one type from the following expression: ${JSON.stringify(t)}`)}function jg(t){return"u_var_"+t}Sg.get={getReturnType:function(t){return xg},toGlsl:function(t,e){Og(e,1),Mg(e[0]);const i=e[0].toString();t.attributes.includes(i)||t.attributes.push(i);return(t.inFragmentShader?"v_":"a_")+i}},Sg.var={getReturnType:function(t){return xg},toGlsl:function(t,e){Og(e,1),Mg(e[0]);const i=e[0].toString();return t.variables.includes(i)||t.variables.push(i),jg(i)}};const Bg="u_paletteTextures";Sg.palette={getReturnType:function(t){return mg},toGlsl:function(t,e){Og(e,2),Lg(e[0]);const i=Ig(t,e[0]),n=e[1];if(!Array.isArray(n))throw new Error("The second argument of palette must be an array");const r=n.length,s=new Uint8Array(4*r);for(let t=0;tIg(e,t))).join(` ${t} `),n=`(${n})`,n}}}Sg.band={getReturnType:function(t){return fg},toGlsl:function(t,e){Ng(e,1),Dg(e,3);const i=e[0];if(!(zg in t.functions)){let e="";const i=t.bandCount||1;for(let t=0;tIg(t,e))).join(" * ")})`}},Sg["/"]={getReturnType:function(t){return fg},toGlsl:function(t,e){return Og(e,2),Fg(e),`(${Ig(t,e[0])} / ${Ig(t,e[1])})`}},Sg["+"]={getReturnType:function(t){return fg},toGlsl:function(t,e){return Ng(e,2),Fg(e),`(${e.map((e=>Ig(t,e))).join(" + ")})`}},Sg["-"]={getReturnType:function(t){return fg},toGlsl:function(t,e){return Og(e,2),Fg(e),`(${Ig(t,e[0])} - ${Ig(t,e[1])})`}},Sg.clamp={getReturnType:function(t){return fg},toGlsl:function(t,e){Og(e,3),Fg(e);const i=Ig(t,e[1]),n=Ig(t,e[2]);return`clamp(${Ig(t,e[0])}, ${i}, ${n})`}},Sg["%"]={getReturnType:function(t){return fg},toGlsl:function(t,e){return Og(e,2),Fg(e),`mod(${Ig(t,e[0])}, ${Ig(t,e[1])})`}},Sg["^"]={getReturnType:function(t){return fg},toGlsl:function(t,e){return Og(e,2),Fg(e),`pow(${Ig(t,e[0])}, ${Ig(t,e[1])})`}},Sg.abs={getReturnType:function(t){return fg},toGlsl:function(t,e){return Og(e,1),Fg(e),`abs(${Ig(t,e[0])})`}},Sg.floor={getReturnType:function(t){return fg},toGlsl:function(t,e){return Og(e,1),Fg(e),`floor(${Ig(t,e[0])})`}},Sg.round={getReturnType:function(t){return fg},toGlsl:function(t,e){return Og(e,1),Fg(e),`floor(${Ig(t,e[0])} + 0.5)`}},Sg.ceil={getReturnType:function(t){return fg},toGlsl:function(t,e){return Og(e,1),Fg(e),`ceil(${Ig(t,e[0])})`}},Sg.sin={getReturnType:function(t){return fg},toGlsl:function(t,e){return Og(e,1),Fg(e),`sin(${Ig(t,e[0])})`}},Sg.cos={getReturnType:function(t){return fg},toGlsl:function(t,e){return Og(e,1),Fg(e),`cos(${Ig(t,e[0])})`}},Sg.atan={getReturnType:function(t){return fg},toGlsl:function(t,e){return Ng(e,1),Dg(e,2),Fg(e),2===e.length?`atan(${Ig(t,e[0])}, ${Ig(t,e[1])})`:`atan(${Ig(t,e[0])})`}},Sg[">"]={getReturnType:function(t){return _g},toGlsl:function(t,e){return Og(e,2),Fg(e),`(${Ig(t,e[0])} > ${Ig(t,e[1])})`}},Sg[">="]={getReturnType:function(t){return _g},toGlsl:function(t,e){return Og(e,2),Fg(e),`(${Ig(t,e[0])} >= ${Ig(t,e[1])})`}},Sg["<"]={getReturnType:function(t){return _g},toGlsl:function(t,e){return Og(e,2),Fg(e),`(${Ig(t,e[0])} < ${Ig(t,e[1])})`}},Sg["<="]={getReturnType:function(t){return _g},toGlsl:function(t,e){return Og(e,2),Fg(e),`(${Ig(t,e[0])} <= ${Ig(t,e[1])})`}},Sg["=="]=Ug("=="),Sg["!="]=Ug("!="),Sg["!"]={getReturnType:function(t){return _g},toGlsl:function(t,e){return Og(e,1),Ag(e[0]),`(!${Ig(t,e[0])})`}},Sg.all=Xg("&&"),Sg.any=Xg("||"),Sg.between={getReturnType:function(t){return _g},toGlsl:function(t,e){Og(e,3),Fg(e);const i=Ig(t,e[1]),n=Ig(t,e[2]),r=Ig(t,e[0]);return`(${r} >= ${i} && ${r} <= ${n})`}},Sg.array={getReturnType:function(t){return yg},toGlsl:function(t,e){Ng(e,2),Dg(e,4),Fg(e);const i=e.map((function(e){return Ig(t,e,fg)}));return`vec${e.length}(${i.join(", ")})`}},Sg.color={getReturnType:function(t){return mg},toGlsl:function(t,e){Ng(e,3),Dg(e,4),Fg(e);const i=e;3===e.length&&i.push(1);const n=e.map((function(e,i){return Ig(t,e,fg)+(i<3?" / 255.0":"")}));return`vec${e.length}(${n.join(", ")})`}},Sg.interpolate={getReturnType:function(t){let e=mg|fg;for(let i=3;i=1;i-=2){o=`(${r} == ${Ig(t,e[i])} ? ${Ig(t,e[i+1],n)} : ${o||s})`}return o}},Sg.case={getReturnType:function(t){let e=xg;for(let i=1;i=0;i-=2){s=`(${Ig(t,e[i])} ? ${Ig(t,e[i+1],n)} : ${s||r})`}return s}};class Vg{constructor(){this.uniforms=[],this.attributes=[],this.varyings=[],this.sizeExpression="vec2(1.0)",this.rotationExpression="0.0",this.offsetExpression="vec2(0.0)",this.colorExpression="vec4(1.0)",this.texCoordExpression="vec4(0.0, 0.0, 1.0, 1.0)",this.discardExpression="false",this.rotateWithView=!1}addUniform(t){return this.uniforms.push(t),this}addAttribute(t){return this.attributes.push(t),this}addVarying(t,e,i){return this.varyings.push({name:t,type:e,expression:i}),this}setSizeExpression(t){return this.sizeExpression=t,this}setRotationExpression(t){return this.rotationExpression=t,this}setSymbolOffsetExpression(t){return this.offsetExpression=t,this}setColorExpression(t){return this.colorExpression=t,this}setTextureCoordinateExpression(t){return this.texCoordExpression=t,this}setFragmentDiscardExpression(t){return this.discardExpression=t,this}setSymbolRotateWithView(t){return this.rotateWithView=t,this}getSizeExpression(){return this.sizeExpression}getOffsetExpression(){return this.offsetExpression}getColorExpression(){return this.colorExpression}getTextureCoordinateExpression(){return this.texCoordExpression}getFragmentDiscardExpression(){return this.discardExpression}getSymbolVertexShader(t){const e=this.rotateWithView?"u_offsetScaleMatrix * u_offsetRotateMatrix":"u_offsetScaleMatrix";let i=this.attributes,n=this.varyings;return t&&(i=i.concat("vec4 a_hitColor"),n=n.concat({name:"v_hitColor",type:"vec4",expression:"a_hitColor"})),`precision mediump float;\nuniform mat4 u_projectionMatrix;\nuniform mat4 u_offsetScaleMatrix;\nuniform mat4 u_offsetRotateMatrix;\nuniform float u_time;\nuniform float u_zoom;\nuniform float u_resolution;\n${this.uniforms.map((function(t){return"uniform "+t+";"})).join("\n")}\nattribute vec2 a_position;\nattribute float a_index;\n${i.map((function(t){return"attribute "+t+";"})).join("\n")}\nvarying vec2 v_texCoord;\nvarying vec2 v_quadCoord;\n${n.map((function(t){return"varying "+t.type+" "+t.name+";"})).join("\n")}\nvoid main(void) {\n mat4 offsetMatrix = ${e};\n vec2 halfSize = ${this.sizeExpression} * 0.5;\n vec2 offset = ${this.offsetExpression};\n float angle = ${this.rotationExpression};\n float offsetX;\n float offsetY;\n if (a_index == 0.0) {\n offsetX = (offset.x - halfSize.x) * cos(angle) + (offset.y - halfSize.y) * sin(angle);\n offsetY = (offset.y - halfSize.y) * cos(angle) - (offset.x - halfSize.x) * sin(angle);\n } else if (a_index == 1.0) {\n offsetX = (offset.x + halfSize.x) * cos(angle) + (offset.y - halfSize.y) * sin(angle);\n offsetY = (offset.y - halfSize.y) * cos(angle) - (offset.x + halfSize.x) * sin(angle);\n } else if (a_index == 2.0) {\n offsetX = (offset.x + halfSize.x) * cos(angle) + (offset.y + halfSize.y) * sin(angle);\n offsetY = (offset.y + halfSize.y) * cos(angle) - (offset.x + halfSize.x) * sin(angle);\n } else {\n offsetX = (offset.x - halfSize.x) * cos(angle) + (offset.y + halfSize.y) * sin(angle);\n offsetY = (offset.y + halfSize.y) * cos(angle) - (offset.x - halfSize.x) * sin(angle);\n }\n vec4 offsets = offsetMatrix * vec4(offsetX, offsetY, 0.0, 0.0);\n gl_Position = u_projectionMatrix * vec4(a_position, 0.0, 1.0) + offsets;\n vec4 texCoord = ${this.texCoordExpression};\n float u = a_index == 0.0 || a_index == 3.0 ? texCoord.s : texCoord.p;\n float v = a_index == 2.0 || a_index == 3.0 ? texCoord.t : texCoord.q;\n v_texCoord = vec2(u, v);\n u = a_index == 0.0 || a_index == 3.0 ? 0.0 : 1.0;\n v = a_index == 2.0 || a_index == 3.0 ? 0.0 : 1.0;\n v_quadCoord = vec2(u, v);\n${n.map((function(t){return" "+t.name+" = "+t.expression+";"})).join("\n")}\n}`}getSymbolFragmentShader(t){const e=t?" if (gl_FragColor.a < 0.1) { discard; } gl_FragColor = v_hitColor;":"";let i=this.varyings;return t&&(i=i.concat({name:"v_hitColor",type:"vec4",expression:"a_hitColor"})),`precision mediump float;\nuniform float u_time;\nuniform float u_zoom;\nuniform float u_resolution;\n${this.uniforms.map((function(t){return"uniform "+t+";"})).join("\n")}\nvarying vec2 v_texCoord;\nvarying vec2 v_quadCoord;\n${i.map((function(t){return"varying "+t.type+" "+t.name+";"})).join("\n")}\nvoid main(void) {\n if (${this.discardExpression}) { discard; }\n gl_FragColor = ${this.colorExpression};\n gl_FragColor.rgb *= gl_FragColor.a;\n${e}\n}`}}function Wg(t){const e=t.symbol,i=void 0!==e.size?e.size:1,n=e.color||"white",r=e.textureCoord||[0,0,1,1],s=e.offset||[0,0],o=void 0!==e.opacity?e.opacity:1,a=void 0!==e.rotation?e.rotation:0,l={inFragmentShader:!1,variables:[],attributes:[],stringLiteralsMap:{},functions:{}},h=Ig(l,i,yg|fg),c=Ig(l,s,yg),u=Ig(l,r,yg),d=Ig(l,a,fg),g={inFragmentShader:!0,variables:l.variables,attributes:[],stringLiteralsMap:l.stringLiteralsMap,functions:{}},f=Ig(g,n,mg),p=Ig(g,o,fg);let m="1.0";const _=`vec2(${Ig(g,i,yg|fg)}).x`;switch(e.symbolType){case"square":case"image":break;case"circle":m=`(1.0-smoothstep(1.-4./${_},1.,dot(v_quadCoord-.5,v_quadCoord-.5)*4.))`;break;case"triangle":const t="(v_quadCoord*2.-1.)",i=`(atan(${t}.x,${t}.y))`;m=`(1.0-smoothstep(.5-3./${_},.5,cos(floor(.5+${i}/2.094395102)*2.094395102-${i})*length(${t})))`;break;default:throw new Error("Unexpected symbol type: "+e.symbolType)}const y=(new Vg).setSizeExpression(`vec2(${h})`).setRotationExpression(d).setSymbolOffsetExpression(c).setTextureCoordinateExpression(u).setSymbolRotateWithView(!!e.rotateWithView).setColorExpression(`vec4(${f}.rgb, ${f}.a * ${p} * ${m})`);if(t.filter){const e=Ig(g,t.filter,_g);y.setFragmentDiscardExpression(`!${e}`)}const x={};if(g.variables.forEach((function(e){const i=jg(e);y.addUniform(`float ${i}`),x[i]=function(){if(!t.variables||void 0===t.variables[e])throw new Error(`The following variable is missing from the style: ${e}`);let i=t.variables[e];return"string"==typeof i&&(i=bg(l,i)),void 0!==i?i:-9999999}})),"image"===e.symbolType&&e.src){const t=new Image;t.crossOrigin=void 0===e.crossOrigin?"anonymous":e.crossOrigin,t.src=e.src,y.addUniform("sampler2D u_texture").setColorExpression(y.getColorExpression()+" * texture2D(u_texture, v_texCoord)"),x.u_texture=t}return g.attributes.forEach((function(t){l.attributes.includes(t)||l.attributes.push(t),y.addVarying(`v_${t}`,"float",`a_${t}`)})),l.attributes.forEach((function(t){y.addAttribute(`float a_${t}`)})),{builder:y,attributes:l.attributes.map((function(t){return{name:t,callback:function(e,i){let n=i[t];return"string"==typeof n&&(n=bg(l,n)),void 0!==n?n:-9999999}}})),uniforms:x}}class Zg{constructor(t){this.opacity_=t.opacity,this.rotateWithView_=t.rotateWithView,this.rotation_=t.rotation,this.scale_=t.scale,this.scaleArray_=ll(t.scale),this.displacement_=t.displacement,this.declutterMode_=t.declutterMode}clone(){const t=this.getScale();return new Zg({opacity:this.getOpacity(),scale:Array.isArray(t)?t.slice():t,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()})}getOpacity(){return this.opacity_}getRotateWithView(){return this.rotateWithView_}getRotation(){return this.rotation_}getScale(){return this.scale_}getScaleArray(){return this.scaleArray_}getDisplacement(){return this.displacement_}getDeclutterMode(){return this.declutterMode_}getAnchor(){return z()}getImage(t){return z()}getHitDetectionImage(){return z()}getPixelRatio(t){return 1}getImageState(){return z()}getImageSize(){return z()}getOrigin(){return z()}getSize(){return z()}setDisplacement(t){this.displacement_=t}setOpacity(t){this.opacity_=t}setRotateWithView(t){this.rotateWithView_=t}setRotation(t){this.rotation_=t}setScale(t){this.scale_=t,this.scaleArray_=ll(t)}listenImageChange(t){z()}load(){z()}unlistenImageChange(t){z()}}var Yg=Zg;class Kg extends Yg{constructor(t){super({opacity:1,rotateWithView:void 0!==t.rotateWithView&&t.rotateWithView,rotation:void 0!==t.rotation?t.rotation:0,scale:void 0!==t.scale?t.scale:1,displacement:void 0!==t.displacement?t.displacement:[0,0],declutterMode:t.declutterMode}),this.canvas_=void 0,this.hitDetectionCanvas_=null,this.fill_=void 0!==t.fill?t.fill:null,this.origin_=[0,0],this.points_=t.points,this.radius_=void 0!==t.radius?t.radius:t.radius1,this.radius2_=t.radius2,this.angle_=void 0!==t.angle?t.angle:0,this.stroke_=void 0!==t.stroke?t.stroke:null,this.size_=null,this.renderOptions_=null,this.render()}clone(){const t=this.getScale(),e=new Kg({fill:this.getFill()?this.getFill().clone():void 0,points:this.getPoints(),radius:this.getRadius(),radius2:this.getRadius2(),angle:this.getAngle(),stroke:this.getStroke()?this.getStroke().clone():void 0,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),scale:Array.isArray(t)?t.slice():t,displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()});return e.setOpacity(this.getOpacity()),e}getAnchor(){const t=this.size_;if(!t)return null;const e=this.getDisplacement(),i=this.getScaleArray();return[t[0]/2-e[0]/i[0],t[1]/2+e[1]/i[1]]}getAngle(){return this.angle_}getFill(){return this.fill_}setFill(t){this.fill_=t,this.render()}getHitDetectionImage(){return this.hitDetectionCanvas_||this.createHitDetectionCanvas_(this.renderOptions_),this.hitDetectionCanvas_}getImage(t){let e=this.canvas_[t];if(!e){const i=this.renderOptions_,n=_t(i.size*t,i.size*t);this.draw_(i,n,t),e=n.canvas,this.canvas_[t]=e}return e}getPixelRatio(t){return t}getImageSize(){return this.size_}getImageState(){return ts}getOrigin(){return this.origin_}getPoints(){return this.points_}getRadius(){return this.radius_}getRadius2(){return this.radius2_}getSize(){return this.size_}getStroke(){return this.stroke_}setStroke(t){this.stroke_=t,this.render()}listenImageChange(t){}load(){}unlistenImageChange(t){}calculateLineJoinSize_(t,e,i){if(0===e||this.points_===1/0||"bevel"!==t&&"miter"!==t)return e;let n=this.radius_,r=void 0===this.radius2_?n:this.radius2_;if(n0,6),Ft(!((void 0!==t.width||void 0!==t.height)&&void 0!==t.scale),69);const a=void 0!==t.src?Jr:ts;if(this.color_=void 0!==t.color?gs(t.color):null,this.iconImage_=nf(s,o,void 0!==this.imgSize_?this.imgSize_:null,this.crossOrigin_,a,this.color_),this.offset_=void 0!==t.offset?t.offset:[0,0],this.offsetOrigin_=void 0!==t.offsetOrigin?t.offsetOrigin:"top-left",this.origin_=null,this.size_=void 0!==t.size?t.size:null,this.width_=t.width,this.height_=t.height,void 0!==this.width_||void 0!==this.height_){const t=this.getImage(1),e=()=>{this.updateScaleFromWidthAndHeight(this.width_,this.height_)};t.width>0?this.updateScaleFromWidthAndHeight(this.width_,this.height_):t.addEventListener("load",e)}}clone(){const t=this.getScale();return new sf({anchor:this.anchor_.slice(),anchorOrigin:this.anchorOrigin_,anchorXUnits:this.anchorXUnits_,anchorYUnits:this.anchorYUnits_,color:this.color_&&this.color_.slice?this.color_.slice():this.color_||void 0,crossOrigin:this.crossOrigin_,imgSize:this.imgSize_,offset:this.offset_.slice(),offsetOrigin:this.offsetOrigin_,opacity:this.getOpacity(),rotateWithView:this.getRotateWithView(),rotation:this.getRotation(),scale:Array.isArray(t)?t.slice():t,size:null!==this.size_?this.size_.slice():void 0,src:this.getSrc(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode(),width:this.width_,height:this.height_})}updateScaleFromWidthAndHeight(t,e){const i=this.getImage(1);void 0!==t&&void 0!==e?super.setScale([t/i.width,e/i.height]):void 0!==t?super.setScale([t/i.width,t/i.width]):void 0!==e?super.setScale([e/i.height,e/i.height]):super.setScale([1,1])}getAnchor(){let t=this.normalizedAnchor_;if(!t){t=this.anchor_;const e=this.getSize();if("fraction"==this.anchorXUnits_||"fraction"==this.anchorYUnits_){if(!e)return null;t=this.anchor_.slice(),"fraction"==this.anchorXUnits_&&(t[0]*=e[0]),"fraction"==this.anchorYUnits_&&(t[1]*=e[1])}if("top-left"!=this.anchorOrigin_){if(!e)return null;t===this.anchor_&&(t=this.anchor_.slice()),"top-right"!=this.anchorOrigin_&&"bottom-right"!=this.anchorOrigin_||(t[0]=-t[0]+e[0]),"bottom-left"!=this.anchorOrigin_&&"bottom-right"!=this.anchorOrigin_||(t[1]=-t[1]+e[1])}this.normalizedAnchor_=t}const e=this.getDisplacement(),i=this.getScaleArray();return[t[0]-e[0]/i[0],t[1]+e[1]/i[1]]}setAnchor(t){this.anchor_=t,this.normalizedAnchor_=null}getColor(){return this.color_}getImage(t){return this.iconImage_.getImage(t)}getPixelRatio(t){return this.iconImage_.getPixelRatio(t)}getImageSize(){return this.iconImage_.getSize()}getImageState(){return this.iconImage_.getImageState()}getHitDetectionImage(){return this.iconImage_.getHitDetectionImage()}getOrigin(){if(this.origin_)return this.origin_;let t=this.offset_;if("top-left"!=this.offsetOrigin_){const e=this.getSize(),i=this.iconImage_.getSize();if(!e||!i)return null;t=t.slice(),"top-right"!=this.offsetOrigin_&&"bottom-right"!=this.offsetOrigin_||(t[0]=i[0]-e[0]-t[0]),"bottom-left"!=this.offsetOrigin_&&"bottom-right"!=this.offsetOrigin_||(t[1]=i[1]-e[1]-t[1])}return this.origin_=t,this.origin_}getSrc(){return this.iconImage_.getSrc()}getSize(){return this.size_?this.size_:this.iconImage_.getSize()}getWidth(){return this.width_}getHeight(){return this.height_}setWidth(t){this.width_=t,this.updateScaleFromWidthAndHeight(t,this.height_)}setHeight(t){this.height_=t,this.updateScaleFromWidthAndHeight(this.width_,t)}setScale(t){super.setScale(t);const e=this.getImage(1);if(e){const i=Array.isArray(t)?t[0]:t;void 0!==i&&(this.width_=i*e.width);const n=Array.isArray(t)?t[1]:t;void 0!==n&&(this.height_=n*e.height)}}listenImageChange(t){this.iconImage_.addEventListener(w,t)}load(){this.iconImage_.load()}unlistenImageChange(t){this.iconImage_.removeEventListener(w,t)}}var of=sf;class af{constructor(t){t=t||{},this.color_=void 0!==t.color?t.color:null,this.lineCap_=t.lineCap,this.lineDash_=void 0!==t.lineDash?t.lineDash:null,this.lineDashOffset_=t.lineDashOffset,this.lineJoin_=t.lineJoin,this.miterLimit_=t.miterLimit,this.width_=t.width}clone(){const t=this.getColor();return new af({color:Array.isArray(t)?t.slice():t||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),width:this.getWidth()})}getColor(){return this.color_}getLineCap(){return this.lineCap_}getLineDash(){return this.lineDash_}getLineDashOffset(){return this.lineDashOffset_}getLineJoin(){return this.lineJoin_}getMiterLimit(){return this.miterLimit_}getWidth(){return this.width_}setColor(t){this.color_=t}setLineCap(t){this.lineCap_=t}setLineDash(t){this.lineDash_=t}setLineDashOffset(t){this.lineDashOffset_=t}setLineJoin(t){this.lineJoin_=t}setMiterLimit(t){this.miterLimit_=t}setWidth(t){this.width_=t}}var lf=af;class hf{constructor(t){t=t||{},this.geometry_=null,this.geometryFunction_=ff,void 0!==t.geometry&&this.setGeometry(t.geometry),this.fill_=void 0!==t.fill?t.fill:null,this.image_=void 0!==t.image?t.image:null,this.renderer_=void 0!==t.renderer?t.renderer:null,this.hitDetectionRenderer_=void 0!==t.hitDetectionRenderer?t.hitDetectionRenderer:null,this.stroke_=void 0!==t.stroke?t.stroke:null,this.text_=void 0!==t.text?t.text:null,this.zIndex_=t.zIndex}clone(){let t=this.getGeometry();return t&&"object"==typeof t&&(t=t.clone()),new hf({geometry:t,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,renderer:this.getRenderer(),stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()})}getRenderer(){return this.renderer_}setRenderer(t){this.renderer_=t}setHitDetectionRenderer(t){this.hitDetectionRenderer_=t}getHitDetectionRenderer(){return this.hitDetectionRenderer_}getGeometry(){return this.geometry_}getGeometryFunction(){return this.geometryFunction_}getFill(){return this.fill_}setFill(t){this.fill_=t}getImage(){return this.image_}setImage(t){this.image_=t}getStroke(){return this.stroke_}setStroke(t){this.stroke_=t}getText(){return this.text_}setText(t){this.text_=t}getZIndex(){return this.zIndex_}setGeometry(t){"function"==typeof t?this.geometryFunction_=t:"string"==typeof t?this.geometryFunction_=function(e){return e.get(t)}:t?void 0!==t&&(this.geometryFunction_=function(){return t}):this.geometryFunction_=ff,this.geometry_=t}setZIndex(t){this.zIndex_=t}}function cf(t){let e;if("function"==typeof t)e=t;else{let i;if(Array.isArray(t))i=t;else{Ft("function"==typeof t.getZIndex,41);i=[t]}e=function(){return i}}return e}let uf=null;function df(t,e){if(!uf){const t=new Qg({color:"rgba(255,255,255,0.4)"}),e=new lf({color:"#3399CC",width:1.25});uf=[new hf({image:new $g({fill:t,stroke:e,radius:5}),fill:t,stroke:e})]}return uf}function gf(){const t={},e=[255,255,255,1],i=[0,153,255,1];return t.Polygon=[new hf({fill:new Qg({color:[255,255,255,.5]})})],t.MultiPolygon=t.Polygon,t.LineString=[new hf({stroke:new lf({color:e,width:5})}),new hf({stroke:new lf({color:i,width:3})})],t.MultiLineString=t.LineString,t.Circle=t.Polygon.concat(t.LineString),t.Point=[new hf({image:new $g({radius:6,fill:new Qg({color:i}),stroke:new lf({color:e,width:1.5})}),zIndex:1/0})],t.MultiPoint=t.Point,t.GeometryCollection=t.Polygon.concat(t.LineString,t.Point),t}function ff(t){return t.getGeometry()}var pf=hf;class mf{constructor(t){t=t||{},this.font_=t.font,this.rotation_=t.rotation,this.rotateWithView_=t.rotateWithView,this.scale_=t.scale,this.scaleArray_=ll(void 0!==t.scale?t.scale:1),this.text_=t.text,this.textAlign_=t.textAlign,this.justify_=t.justify,this.textBaseline_=t.textBaseline,this.fill_=void 0!==t.fill?t.fill:new Qg({color:"#333"}),this.maxAngle_=void 0!==t.maxAngle?t.maxAngle:Math.PI/4,this.placement_=void 0!==t.placement?t.placement:"point",this.overflow_=!!t.overflow,this.stroke_=void 0!==t.stroke?t.stroke:null,this.offsetX_=void 0!==t.offsetX?t.offsetX:0,this.offsetY_=void 0!==t.offsetY?t.offsetY:0,this.backgroundFill_=t.backgroundFill?t.backgroundFill:null,this.backgroundStroke_=t.backgroundStroke?t.backgroundStroke:null,this.padding_=void 0===t.padding?null:t.padding}clone(){const t=this.getScale();return new mf({font:this.getFont(),placement:this.getPlacement(),maxAngle:this.getMaxAngle(),overflow:this.getOverflow(),rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),scale:Array.isArray(t)?t.slice():t,text:this.getText(),textAlign:this.getTextAlign(),justify:this.getJustify(),textBaseline:this.getTextBaseline(),fill:this.getFill()?this.getFill().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,offsetX:this.getOffsetX(),offsetY:this.getOffsetY(),backgroundFill:this.getBackgroundFill()?this.getBackgroundFill().clone():void 0,backgroundStroke:this.getBackgroundStroke()?this.getBackgroundStroke().clone():void 0,padding:this.getPadding()||void 0})}getOverflow(){return this.overflow_}getFont(){return this.font_}getMaxAngle(){return this.maxAngle_}getPlacement(){return this.placement_}getOffsetX(){return this.offsetX_}getOffsetY(){return this.offsetY_}getFill(){return this.fill_}getRotateWithView(){return this.rotateWithView_}getRotation(){return this.rotation_}getScale(){return this.scale_}getScaleArray(){return this.scaleArray_}getStroke(){return this.stroke_}getText(){return this.text_}getTextAlign(){return this.textAlign_}getJustify(){return this.justify_}getTextBaseline(){return this.textBaseline_}getBackgroundFill(){return this.backgroundFill_}getBackgroundStroke(){return this.backgroundStroke_}getPadding(){return this.padding_}setOverflow(t){this.overflow_=t}setFont(t){this.font_=t}setMaxAngle(t){this.maxAngle_=t}setOffsetX(t){this.offsetX_=t}setOffsetY(t){this.offsetY_=t}setPlacement(t){this.placement_=t}setRotateWithView(t){this.rotateWithView_=t}setFill(t){this.fill_=t}setRotation(t){this.rotation_=t}setScale(t){this.scale_=t,this.scaleArray_=ll(void 0!==t?t:1)}setStroke(t){this.stroke_=t}setText(t){this.text_=t}setTextAlign(t){this.textAlign_=t}setJustify(t){this.justify_=t}setTextBaseline(t){this.textBaseline_=t}setBackgroundFill(t){this.backgroundFill_=t}setBackgroundStroke(t){this.backgroundStroke_=t}setPadding(t){this.padding_=t}}var _f=mf;function yf(t){return new pf({fill:xf(t,""),stroke:vf(t,""),text:Sf(t),image:wf(t)})}function xf(t,e){const i=t[e+"fill-color"];if(i)return new Qg({color:i})}function vf(t,e){const i=t[e+"stroke-width"],n=t[e+"stroke-color"];if(i||n)return new lf({width:i,color:n,lineCap:t[e+"stroke-line-cap"],lineJoin:t[e+"stroke-line-join"],lineDash:t[e+"stroke-line-dash"],lineDashOffset:t[e+"stroke-line-dash-offset"],miterLimit:t[e+"stroke-miter-limit"]})}function Sf(t){const e=t["text-value"];if(!e)return;return new _f({text:e,font:t["text-font"],maxAngle:t["text-max-angle"],offsetX:t["text-offset-x"],offsetY:t["text-offset-y"],overflow:t["text-overflow"],placement:t["text-placement"],scale:t["text-scale"],rotateWithView:t["text-rotate-with-view"],rotation:t["text-rotation"],textAlign:t["text-align"],justify:t["text-justify"],textBaseline:t["text-baseline"],padding:t["text-padding"],fill:xf(t,"text-"),backgroundFill:xf(t,"text-background-"),stroke:vf(t,"text-"),backgroundStroke:vf(t,"text-background-")})}function wf(t){const e=t["icon-src"],i=t["icon-img"];if(e||i){return new of({src:e,img:i,imgSize:t["icon-img-size"],anchor:t["icon-anchor"],anchorOrigin:t["icon-anchor-origin"],anchorXUnits:t["icon-anchor-x-units"],anchorYUnits:t["icon-anchor-y-units"],color:t["icon-color"],crossOrigin:t["icon-cross-origin"],offset:t["icon-offset"],displacement:t["icon-displacement"],opacity:t["icon-opacity"],scale:t["icon-scale"],rotation:t["icon-rotation"],rotateWithView:t["icon-rotate-with-view"],size:t["icon-size"],declutterMode:t["icon-declutter-mode"]})}const n=t["shape-points"];if(n){const e="shape-";return new qg({points:n,fill:xf(t,e),stroke:vf(t,e),radius:t["shape-radius"],radius1:t["shape-radius1"],radius2:t["shape-radius2"],angle:t["shape-angle"],displacement:t["shape-displacement"],rotation:t["shape-rotation"],rotateWithView:t["shape-rotate-with-view"],scale:t["shape-scale"],declutterMode:t["shape-declutter-mode"]})}const r=t["circle-radius"];if(r){const e="circle-";return new $g({radius:r,fill:xf(t,e),stroke:vf(t,e),displacement:t["circle-displacement"],scale:t["circle-scale"],rotation:t["circle-rotation"],rotateWithView:t["circle-rotate-with-view"],declutterMode:t["circle-declutter-mode"]})}}var Tf=class{constructor(t){this.first_,this.last_,this.head_,this.circular_=void 0===t||t,this.length_=0}insertItem(t){const e={prev:void 0,next:void 0,data:t},i=this.head_;if(i){const t=i.next;e.prev=i,e.next=t,i.next=e,t&&(t.prev=e),i===this.last_&&(this.last_=e)}else this.first_=e,this.last_=e,this.circular_&&(e.next=e,e.prev=e);this.head_=e,this.length_++}removeItem(){const t=this.head_;if(t){const e=t.next,i=t.prev;e&&(e.prev=i),i&&(i.next=e),this.head_=e||i,this.first_===this.last_?(this.head_=void 0,this.first_=void 0,this.last_=void 0):this.first_===t?this.first_=this.head_:this.last_===t&&(this.last_=i?this.head_.prev:this.head_),this.length_--}}firstItem(){if(this.head_=this.first_,this.head_)return this.head_.data}lastItem(){if(this.head_=this.last_,this.head_)return this.head_.data}nextItem(){if(this.head_&&this.head_.next)return this.head_=this.head_.next,this.head_.data}getNextItem(){if(this.head_&&this.head_.next)return this.head_.next.data}prevItem(){if(this.head_&&this.head_.prev)return this.head_=this.head_.prev,this.head_.data}getPrevItem(){if(this.head_&&this.head_.prev)return this.head_.prev.data}getCurrItem(){if(this.head_)return this.head_.data}setFirstItem(){this.circular_&&this.head_&&(this.first_=this.head_,this.last_=this.head_.prev)}concat(t){if(t.head_){if(this.head_){const e=this.head_.next;this.head_.next=t.first_,t.first_.prev=this.head_,e.prev=t.last_,t.last_.next=e,this.length_+=t.length_}else this.head_=t.head_,this.first_=t.first_,this.last_=t.last_,this.length_=t.length_;t.head_=void 0,t.first_=void 0,t.last_=void 0,t.length_=0}}getLength(){return this.length_}};const Ef={"image/png":!0,"image/jpeg":!0,"image/gif":!0,"image/webp":!0},Cf={"application/vnd.mapbox-vector-tile":!0,"application/geo+json":!0};function Rf(t,e){let i,n;for(let r=0;rt.maxTileCol||u.tileRowt.maxTileRow)return}Object.assign(u,_);const d=i.replace(/\{(\w+?)\}/g,(function(t,e){return u[e]}));return Xl(y,d)}}}function If(t){return Ul(t.url).then((function(e){return function(t,e){const i=e.tileMatrixSetLimits;let n;if("map"===e.dataType)n=Rf(e.links,t.mediaType);else{if("vector"!==e.dataType)throw new Error('Expected tileset data type to be "map" or "vector"');n=bf(e.links,t.mediaType,t.supportedMediaTypes)}if(e.tileMatrixSet)return Pf(t,e.tileMatrixSet,n,i);const r=e.links.find((t=>"http://www.opengis.net/def/rel/ogc/1.0/tiling-scheme"===t.rel));if(!r)throw new Error("Expected http://www.opengis.net/def/rel/ogc/1.0/tiling-scheme link or tileMatrixSet");const s=r.href;return Ul(Xl(t.url,s)).then((function(e){return Pf(t,e,n,i)}))}(t,e)}))}var Lf=class extends Ah{constructor(t){super({attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,interpolate:t.interpolate,projection:t.projection,reprojectionErrorThreshold:t.reprojectionErrorThreshold,state:"loading",tileLoadFunction:t.tileLoadFunction,wrapX:void 0===t.wrapX||t.wrapX,transition:t.transition});If({url:t.url,projection:this.getProjection(),mediaType:t.mediaType,context:t.context||null}).then(this.handleTileSetInfo_.bind(this)).catch(this.handleError_.bind(this))}handleTileSetInfo_(t){this.tileGrid=t.grid,this.setTileUrlFunction(t.urlFunction,t.urlTemplate),this.setState("ready")}handleError_(t){Qi(t),this.setState("error")}};var Ff=class extends zu{constructor(t){super({attributions:t.attributions,attributionsCollapsible:t.attributionsCollapsible,cacheSize:t.cacheSize,format:t.format,overlaps:t.overlaps,projection:t.projection,tileClass:t.tileClass,transition:t.transition,wrapX:t.wrapX,zDirection:t.zDirection,state:"loading"});If({url:t.url,projection:this.getProjection(),mediaType:t.mediaType,supportedMediaTypes:t.format.supportedMediaTypes,context:t.context||null}).then(this.handleTileSetInfo_.bind(this)).catch(this.handleError_.bind(this))}handleTileSetInfo_(t){this.tileGrid=t.grid,this.setTileUrlFunction(t.urlFunction,t.urlTemplate),this.setState("ready")}handleError_(t){Qi(t),this.setState("error")}};const Mf="renderOrder";var Af=class extends ks{constructor(t){t=t||{};const e=Object.assign({},t);delete e.style,delete e.renderBuffer,delete e.updateWhileAnimating,delete e.updateWhileInteracting,super(e),this.declutter_=void 0!==t.declutter&&t.declutter,this.renderBuffer_=void 0!==t.renderBuffer?t.renderBuffer:100,this.style_=null,this.styleFunction_=void 0,this.setStyle(t.style),this.updateWhileAnimating_=void 0!==t.updateWhileAnimating&&t.updateWhileAnimating,this.updateWhileInteracting_=void 0!==t.updateWhileInteracting&&t.updateWhileInteracting}getDeclutter(){return this.declutter_}getFeatures(t){return super.getFeatures(t)}getRenderBuffer(){return this.renderBuffer_}getRenderOrder(){return this.get(Mf)}getStyle(){return this.style_}getStyleFunction(){return this.styleFunction_}getUpdateWhileAnimating(){return this.updateWhileAnimating_}getUpdateWhileInteracting(){return this.updateWhileInteracting_}renderDeclutter(t){t.declutterTree||(t.declutterTree=new Uh(9)),this.getRenderer().renderDeclutter(t)}setRenderOrder(t){this.set(Mf,t)}setStyle(t){let e;if(void 0===t)e=df;else if(null===t)e=null;else if("function"==typeof t)e=t;else if(t instanceof pf)e=t;else if(Array.isArray(t)){const i=t.length,n=new Array(i);for(let e=0;e80*i){n=s=t[0],r=o=t[1];for(var f=i;fs&&(s=a),l>o&&(o=l);h=0!==(h=Math.max(s-n,o-r))?32767/h:0}return zf(d,g,i,n,r,h,0),g}function jf(t,e,i,n,r){var s,o;if(r===hp(t,e,i,n)>0)for(s=e;s=e;s-=n)o=op(s,t[s],t[s+1],o);return o&&tp(o,o.next)&&(ap(o),o=o.next),o}function Bf(t,e){if(!t)return t;e||(e=t);var i,n=t;do{if(i=!1,n.steiner||!tp(n,n.next)&&0!==Qf(n.prev,n,n.next))n=n.next;else{if(ap(n),(n=e=n.prev)===n.next)break;i=!0}}while(i||n!==e);return e}function zf(t,e,i,n,r,s,o){if(t){!o&&s&&function(t,e,i,n){var r=t;do{0===r.z&&(r.z=qf(r.x,r.y,e,i,n)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){var e,i,n,r,s,o,a,l,h=1;do{for(i=t,t=null,s=null,o=0;i;){for(o++,n=i,a=0,e=0;e0||l>0&&n;)0!==a&&(0===l||!n||i.z<=n.z)?(r=i,i=i.nextZ,a--):(r=n,n=n.nextZ,l--),s?s.nextZ=r:t=r,r.prevZ=s,s=r;i=n}s.nextZ=null,h*=2}while(o>1)}(r)}(t,n,r,s);for(var a,l,h=t;t.prev!==t.next;)if(a=t.prev,l=t.next,s?Xf(t,n,r,s):Uf(t))e.push(a.i/i|0),e.push(t.i/i|0),e.push(l.i/i|0),ap(t),t=l.next,h=l.next;else if((t=l)===h){o?1===o?zf(t=Vf(Bf(t),e,i),e,i,n,r,s,2):2===o&&Wf(t,e,i,n,r,s):zf(Bf(t),e,i,n,r,s,1);break}}}function Uf(t){var e=t.prev,i=t,n=t.next;if(Qf(e,i,n)>=0)return!1;for(var r=e.x,s=i.x,o=n.x,a=e.y,l=i.y,h=n.y,c=rs?r>o?r:o:s>o?s:o,g=a>l?a>h?a:h:l>h?l:h,f=n.next;f!==e;){if(f.x>=c&&f.x<=d&&f.y>=u&&f.y<=g&&$f(r,a,s,l,o,h,f.x,f.y)&&Qf(f.prev,f,f.next)>=0)return!1;f=f.next}return!0}function Xf(t,e,i,n){var r=t.prev,s=t,o=t.next;if(Qf(r,s,o)>=0)return!1;for(var a=r.x,l=s.x,h=o.x,c=r.y,u=s.y,d=o.y,g=al?a>h?a:h:l>h?l:h,m=c>u?c>d?c:d:u>d?u:d,_=qf(g,f,e,i,n),y=qf(p,m,e,i,n),x=t.prevZ,v=t.nextZ;x&&x.z>=_&&v&&v.z<=y;){if(x.x>=g&&x.x<=p&&x.y>=f&&x.y<=m&&x!==r&&x!==o&&$f(a,c,l,u,h,d,x.x,x.y)&&Qf(x.prev,x,x.next)>=0)return!1;if(x=x.prevZ,v.x>=g&&v.x<=p&&v.y>=f&&v.y<=m&&v!==r&&v!==o&&$f(a,c,l,u,h,d,v.x,v.y)&&Qf(v.prev,v,v.next)>=0)return!1;v=v.nextZ}for(;x&&x.z>=_;){if(x.x>=g&&x.x<=p&&x.y>=f&&x.y<=m&&x!==r&&x!==o&&$f(a,c,l,u,h,d,x.x,x.y)&&Qf(x.prev,x,x.next)>=0)return!1;x=x.prevZ}for(;v&&v.z<=y;){if(v.x>=g&&v.x<=p&&v.y>=f&&v.y<=m&&v!==r&&v!==o&&$f(a,c,l,u,h,d,v.x,v.y)&&Qf(v.prev,v,v.next)>=0)return!1;v=v.nextZ}return!0}function Vf(t,e,i){var n=t;do{var r=n.prev,s=n.next.next;!tp(r,s)&&ep(r,n,n.next,s)&&rp(r,s)&&rp(s,r)&&(e.push(r.i/i|0),e.push(n.i/i|0),e.push(s.i/i|0),ap(n),ap(n.next),n=t=s),n=n.next}while(n!==t);return Bf(n)}function Wf(t,e,i,n,r,s){var o=t;do{for(var a=o.next.next;a!==o.prev;){if(o.i!==a.i&&Jf(o,a)){var l=sp(o,a);return o=Bf(o,o.next),l=Bf(l,l.next),zf(o,e,i,n,r,s,0),void zf(l,e,i,n,r,s,0)}a=a.next}o=o.next}while(o!==t)}function Zf(t,e){return t.x-e.x}function Yf(t,e){var i=function(t,e){var i,n=e,r=t.x,s=t.y,o=-1/0;do{if(s<=n.y&&s>=n.next.y&&n.next.y!==n.y){var a=n.x+(s-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(a<=r&&a>o&&(o=a,i=n.x=n.x&&n.x>=c&&r!==n.x&&$f(si.x||n.x===i.x&&Kf(i,n)))&&(i=n,d=l)),n=n.next}while(n!==h);return i}(t,e);if(!i)return e;var n=sp(i,t);return Bf(n,n.next),Bf(i,i.next)}function Kf(t,e){return Qf(t.prev,t,e.prev)<0&&Qf(e.next,t,t.next)<0}function qf(t,e,i,n,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-i)*r|0)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-n)*r|0)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function Hf(t){var e=t,i=t;do{(e.x=(t-o)*(s-a)&&(t-o)*(n-a)>=(i-o)*(e-a)&&(i-o)*(s-a)>=(r-o)*(n-a)}function Jf(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var i=t;do{if(i.i!==t.i&&i.next.i!==t.i&&i.i!==e.i&&i.next.i!==e.i&&ep(i,i.next,t,e))return!0;i=i.next}while(i!==t);return!1}(t,e)&&(rp(t,e)&&rp(e,t)&&function(t,e){var i=t,n=!1,r=(t.x+e.x)/2,s=(t.y+e.y)/2;do{i.y>s!=i.next.y>s&&i.next.y!==i.y&&r<(i.next.x-i.x)*(s-i.y)/(i.next.y-i.y)+i.x&&(n=!n),i=i.next}while(i!==t);return n}(t,e)&&(Qf(t.prev,t,e.prev)||Qf(t,e.prev,e))||tp(t,e)&&Qf(t.prev,t,t.next)>0&&Qf(e.prev,e,e.next)>0)}function Qf(t,e,i){return(e.y-t.y)*(i.x-e.x)-(e.x-t.x)*(i.y-e.y)}function tp(t,e){return t.x===e.x&&t.y===e.y}function ep(t,e,i,n){var r=np(Qf(t,e,i)),s=np(Qf(t,e,n)),o=np(Qf(i,n,t)),a=np(Qf(i,n,e));return r!==s&&o!==a||(!(0!==r||!ip(t,i,e))||(!(0!==s||!ip(t,n,e))||(!(0!==o||!ip(i,t,n))||!(0!==a||!ip(i,e,n)))))}function ip(t,e,i){return e.x<=Math.max(t.x,i.x)&&e.x>=Math.min(t.x,i.x)&&e.y<=Math.max(t.y,i.y)&&e.y>=Math.min(t.y,i.y)}function np(t){return t>0?1:t<0?-1:0}function rp(t,e){return Qf(t.prev,t,t.next)<0?Qf(t,e,t.next)>=0&&Qf(t,t.prev,e)>=0:Qf(t,e,t.prev)<0||Qf(t,t.next,e)<0}function sp(t,e){var i=new lp(t.i,t.x,t.y),n=new lp(e.i,e.x,e.y),r=t.next,s=e.prev;return t.next=e,e.prev=t,i.next=r,r.prev=i,n.next=i,i.prev=n,s.next=n,n.prev=s,n}function op(t,e,i,n){var r=new lp(t,e,i);return n?(r.next=n.next,r.prev=n,n.next.prev=r,n.next=r):(r.prev=r,r.next=r),r}function ap(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function lp(t,e,i){this.i=t,this.x=e,this.y=i,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}function hp(t,e,i,n){for(var r=0,s=e,o=i-n;s0&&(n+=t[r-1].length,i.holes.push(n))}return i};const cp=[],up={vertexPosition:0,indexPosition:0};function dp(t,e,i,n,r){t[e+0]=i,t[e+1]=n,t[e+2]=r}function gp(t,e){const i=256,n=255;return(e=e||[])[0]=Math.floor(t/i/i/i)/n,e[1]=Math.floor(t/i/i)%i/n,e[2]=Math.floor(t/i)%i/n,e[3]=t%i/n,e}function fp(t){let e=0;const i=256,n=255;return e+=Math.round(t[0]*i*i*i*n),e+=Math.round(t[1]*i*i*n),e+=Math.round(t[2]*i*n),e+=Math.round(t[3]*n),e}function pp(){const t='const e="GENERATE_POLYGON_BUFFERS",t="GENERATE_POINT_BUFFERS",n="GENERATE_LINE_STRING_BUFFERS",r={1:"The view center is not defined",2:"The view resolution is not defined",3:"The view rotation is not defined",4:"`image` and `src` cannot be provided at the same time",5:"`imgSize` must be set when `image` is provided",7:"`format` must be set when `url` is set",8:"Unknown `serverType` configured",9:"`url` must be configured or set using `#setUrl()`",10:"The default `geometryFunction` can only handle `Point` geometries",11:"`options.featureTypes` must be an Array",12:"`options.geometryName` must also be provided when `options.bbox` is set",13:"Invalid corner",14:"Invalid color",15:"Tried to get a value for a key that does not exist in the cache",16:"Tried to set a value for a key that is used already",17:"`resolutions` must be sorted in descending order",18:"Either `origin` or `origins` must be configured, never both",19:"Number of `tileSizes` and `resolutions` must be equal",20:"Number of `origins` and `resolutions` must be equal",22:"Either `tileSize` or `tileSizes` must be configured, never both",24:"Invalid extent or geometry provided as `geometry`",25:"Cannot fit empty extent provided as `geometry`",26:"Features must have an id set",27:"Features must have an id set",28:\'`renderMode` must be `"hybrid"` or `"vector"`\',30:"The passed `feature` was already added to the source",31:"Tried to enqueue an `element` that was already added to the queue",32:"Transformation matrix cannot be inverted",33:"Invalid units",34:"Invalid geometry layout",36:"Unknown SRS type",37:"Unknown geometry type found",38:"`styleMapValue` has an unknown type",39:"Unknown geometry type",40:"Expected `feature` to have a geometry",41:"Expected an `ol/style/Style` or an array of `ol/style/Style.js`",42:"Question unknown, the answer is 42",43:"Expected `layers` to be an array or a `Collection`",47:"Expected `controls` to be an array or an `ol/Collection`",48:"Expected `interactions` to be an array or an `ol/Collection`",49:"Expected `overlays` to be an array or an `ol/Collection`",50:"`options.featureTypes` should be an Array",51:"Either `url` or `tileJSON` options must be provided",52:"Unknown `serverType` configured",53:"Unknown `tierSizeCalculation` configured",55:"The {-y} placeholder requires a tile grid with extent",56:"mapBrowserEvent must originate from a pointer event",57:"At least 2 conditions are required",59:"Invalid command found in the PBF",60:"Missing or invalid `size`",61:"Cannot determine IIIF Image API version from provided image information JSON",62:"A `WebGLArrayBuffer` must either be of type `ELEMENT_ARRAY_BUFFER` or `ARRAY_BUFFER`",64:"Layer opacity must be a number",66:"`forEachFeatureAtCoordinate` cannot be used on a WebGL layer if the hit detection logic has not been enabled. This is done by providing adequate shaders using the `hitVertexShader` and `hitFragmentShader` properties of `WebGLPointsLayerRenderer`",67:"A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both",68:"A VectorTile source can only be rendered if it has a projection compatible with the view projection",69:"`width` or `height` cannot be provided together with `scale`"};class o extends Error{constructor(e){const t=r[e];super(t),this.code=e,this.name="AssertionError",this.message=t}}var i=o;function a(e,t){const n=t[0],r=t[1];return t[0]=e[0]*n+e[2]*r+e[4],t[1]=e[1]*n+e[3]*r+e[5],t}function s(e,t){const n=(r=t)[0]*r[3]-r[1]*r[2];var r;!function(e,t){if(!e)throw new i(t)}(0!==n,32);const o=t[0],a=t[1],s=t[2],u=t[3],f=t[4],x=t[5];return e[0]=u/n,e[1]=-a/n,e[2]=-s/n,e[3]=o/n,e[4]=(s*x-u*f)/n,e[5]=-(o*x-a*f)/n,e}new Array(6);var u={};function f(e,t,n){n=n||2;var r,o,i,a,s,u,f,l=t&&t.length,c=l?t[0]*n:e.length,v=x(e,0,c,n,!0),d=[];if(!v||v.next===v.prev)return d;if(l&&(v=function(e,t,n,r){var o,i,a,s=[];for(o=0,i=t.length;o80*n){r=i=e[0],o=a=e[1];for(var y=n;yi&&(i=s),u>a&&(a=u);f=0!==(f=Math.max(i-r,a-o))?32767/f:0}return h(v,d,n,r,o,f,0),d}function x(e,t,n,r,o){var i,a;if(o===B(e,t,n,r)>0)for(i=t;i=t;i-=r)a=k(i,e[i],e[i+1],a);return a&&M(a,a.next)&&(z(a),a=a.next),a}function l(e,t){if(!e)return e;t||(t=e);var n,r=e;do{if(n=!1,r.steiner||!M(r,r.next)&&0!==Z(r.prev,r,r.next))r=r.next;else{if(z(r),(r=t=r.prev)===r.next)break;n=!0}}while(n||r!==t);return t}function h(e,t,n,r,o,i,a){if(e){!a&&i&&function(e,t,n,r){var o=e;do{0===o.z&&(o.z=m(o.x,o.y,t,n,r)),o.prevZ=o.prev,o.nextZ=o.next,o=o.next}while(o!==e);o.prevZ.nextZ=null,o.prevZ=null,function(e){var t,n,r,o,i,a,s,u,f=1;do{for(n=e,e=null,i=null,a=0;n;){for(a++,r=n,s=0,t=0;t0||u>0&&r;)0!==s&&(0===u||!r||n.z<=r.z)?(o=n,n=n.nextZ,s--):(o=r,r=r.nextZ,u--),i?i.nextZ=o:e=o,o.prevZ=i,i=o;n=r}i.nextZ=null,f*=2}while(a>1)}(o)}(e,r,o,i);for(var s,u,f=e;e.prev!==e.next;)if(s=e.prev,u=e.next,i?v(e,r,o,i):c(e))t.push(s.i/n|0),t.push(e.i/n|0),t.push(u.i/n|0),z(e),e=u.next,f=u.next;else if((e=u)===f){a?1===a?h(e=d(l(e),t,n),t,n,r,o,i,2):2===a&&y(e,t,n,r,o,i):h(l(e),t,n,r,o,i,1);break}}}function c(e){var t=e.prev,n=e,r=e.next;if(Z(t,n,r)>=0)return!1;for(var o=t.x,i=n.x,a=r.x,s=t.y,u=n.y,f=r.y,x=oi?o>a?o:a:i>a?i:a,c=s>u?s>f?s:f:u>f?u:f,v=r.next;v!==t;){if(v.x>=x&&v.x<=h&&v.y>=l&&v.y<=c&&A(o,s,i,u,a,f,v.x,v.y)&&Z(v.prev,v,v.next)>=0)return!1;v=v.next}return!0}function v(e,t,n,r){var o=e.prev,i=e,a=e.next;if(Z(o,i,a)>=0)return!1;for(var s=o.x,u=i.x,f=a.x,x=o.y,l=i.y,h=a.y,c=su?s>f?s:f:u>f?u:f,y=x>l?x>h?x:h:l>h?l:h,p=m(c,v,t,n,r),b=m(d,y,t,n,r),g=e.prevZ,w=e.nextZ;g&&g.z>=p&&w&&w.z<=b;){if(g.x>=c&&g.x<=d&&g.y>=v&&g.y<=y&&g!==o&&g!==a&&A(s,x,u,l,f,h,g.x,g.y)&&Z(g.prev,g,g.next)>=0)return!1;if(g=g.prevZ,w.x>=c&&w.x<=d&&w.y>=v&&w.y<=y&&w!==o&&w!==a&&A(s,x,u,l,f,h,w.x,w.y)&&Z(w.prev,w,w.next)>=0)return!1;w=w.nextZ}for(;g&&g.z>=p;){if(g.x>=c&&g.x<=d&&g.y>=v&&g.y<=y&&g!==o&&g!==a&&A(s,x,u,l,f,h,g.x,g.y)&&Z(g.prev,g,g.next)>=0)return!1;g=g.prevZ}for(;w&&w.z<=b;){if(w.x>=c&&w.x<=d&&w.y>=v&&w.y<=y&&w!==o&&w!==a&&A(s,x,u,l,f,h,w.x,w.y)&&Z(w.prev,w,w.next)>=0)return!1;w=w.nextZ}return!0}function d(e,t,n){var r=e;do{var o=r.prev,i=r.next.next;!M(o,i)&&F(o,r,r.next,i)&&S(o,i)&&S(i,o)&&(t.push(o.i/n|0),t.push(r.i/n|0),t.push(i.i/n|0),z(r),z(r.next),r=e=i),r=r.next}while(r!==e);return l(r)}function y(e,t,n,r,o,i){var a=e;do{for(var s=a.next.next;s!==a.prev;){if(a.i!==s.i&&E(a,s)){var u=U(a,s);return a=l(a,a.next),u=l(u,u.next),h(a,t,n,r,o,i,0),void h(u,t,n,r,o,i,0)}s=s.next}a=a.next}while(a!==e)}function p(e,t){return e.x-t.x}function b(e,t){var n=function(e,t){var n,r=t,o=e.x,i=e.y,a=-1/0;do{if(i<=r.y&&i>=r.next.y&&r.next.y!==r.y){var s=r.x+(i-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(s<=o&&s>a&&(a=s,n=r.x=r.x&&r.x>=x&&o!==r.x&&A(in.x||r.x===n.x&&g(n,r)))&&(n=r,h=u)),r=r.next}while(r!==f);return n}(e,t);if(!n)return t;var r=U(n,e);return l(r,r.next),l(n,n.next)}function g(e,t){return Z(e.prev,e,t.prev)<0&&Z(t.next,e,e.next)<0}function m(e,t,n,r,o){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-n)*o|0)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-r)*o|0)|t<<8))|t<<4))|t<<2))|t<<1))<<1}function w(e){var t=e,n=e;do{(t.x=(e-a)*(i-s)&&(e-a)*(r-s)>=(n-a)*(t-s)&&(n-a)*(i-s)>=(o-a)*(r-s)}function E(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!function(e,t){var n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&F(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}(e,t)&&(S(e,t)&&S(t,e)&&function(e,t){var n=e,r=!1,o=(e.x+t.x)/2,i=(e.y+t.y)/2;do{n.y>i!=n.next.y>i&&n.next.y!==n.y&&o<(n.next.x-n.x)*(i-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next}while(n!==e);return r}(e,t)&&(Z(e.prev,e,t.prev)||Z(e,t.prev,t))||M(e,t)&&Z(e.prev,e,e.next)>0&&Z(t.prev,t,t.next)>0)}function Z(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function M(e,t){return e.x===t.x&&e.y===t.y}function F(e,t,n,r){var o=I(Z(e,t,n)),i=I(Z(e,t,r)),a=I(Z(n,r,e)),s=I(Z(n,r,t));return o!==i&&a!==s||(!(0!==o||!T(e,n,t))||(!(0!==i||!T(e,r,t))||(!(0!==a||!T(n,e,r))||!(0!==s||!T(n,t,r)))))}function T(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function I(e){return e>0?1:e<0?-1:0}function S(e,t){return Z(e.prev,e,e.next)<0?Z(e,t,e.next)>=0&&Z(e,e.prev,t)>=0:Z(e,t,e.prev)<0||Z(e,e.next,t)<0}function U(e,t){var n=new R(e.i,e.x,e.y),r=new R(t.i,t.x,t.y),o=e.next,i=t.prev;return e.next=t,t.prev=e,n.next=o,o.prev=n,r.next=n,n.prev=r,i.next=r,r.prev=i,r}function k(e,t,n,r){var o=new R(e,t,n);return r?(o.next=r.next,o.prev=r,r.next.prev=o,r.next=o):(o.prev=o,o.next=o),o}function z(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function R(e,t,n){this.i=e,this.x=t,this.y=n,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}function B(e,t,n,r){for(var o=0,i=t,a=n-r;i0&&(r+=e[o-1].length,n.holes.push(r))}return n};const N=[],P={vertexPosition:0,indexPosition:0};function C(e,t,n,r,o){e[t+0]=n,e[t+1]=r,e[t+2]=o}function _(e,t,n,r,o,i){const a=3+o,s=e[t+0],u=e[t+1],f=N;f.length=o;for(let n=0;n0?u:2*Math.PI-u}const g=null!==o;let m=0,w=0;if(null!==r){m=b(d,y,a(x,[...[e[r],e[r+1]]]))}if(g){w=b(y,d,a(x,[...[e[o],e[o+1]]]))}i.push(c[0],c[1],v[0],v[1],p(0,m,w)),i.push(...u),i.push(c[0],c[1],v[0],v[1],p(1,m,w)),i.push(...u),i.push(c[0],c[1],v[0],v[1],p(2,m,w)),i.push(...u),i.push(c[0],c[1],v[0],v[1],p(3,m,w)),i.push(...u),s.push(h,h+1,h+2,h+1,h+3,h+2)}function L(e,t,n,r,o){const i=2+o;let a=t;const s=e.slice(a,a+o);a+=o;const f=e[a++];let x=0;const l=new Array(f-1);for(let t=0;t{const o=r.data;switch(o.type){case t:{const e=3,t=2,n=o.customAttributesCount,r=t+n,i=new Float32Array(o.renderInstructions),a=i.length/r,s=4*a*(n+e),u=new Uint32Array(6*a),f=new Float32Array(s);let x;for(let e=0;e0?a+(n-1)*r:null,n{const e=t.data;if(e.type===Nf){const i=e.projectionTransform;e.hitDetection?(this.hitVerticesBuffer_.fromArrayBuffer(e.vertexBuffer),this.helper.flushBufferData(this.hitVerticesBuffer_)):(this.verticesBuffer_.fromArrayBuffer(e.vertexBuffer),this.helper.flushBufferData(this.verticesBuffer_)),this.indicesBuffer_.fromArrayBuffer(e.indexBuffer),this.helper.flushBufferData(this.indicesBuffer_),this.renderTransform_=i,Yt(this.invertRenderTransform_,this.renderTransform_),e.hitDetection?this.hitRenderInstructions_=new Float32Array(t.data.renderInstructions):(this.renderInstructions_=new Float32Array(t.data.renderInstructions),e.generateBuffersRun===this.generateBuffersRun_&&(this.ready=!0)),this.getLayer().changed()}})),this.featureCache_={},this.featureCount_=0;const s=this.getLayer().getSource();this.sourceListenKeys_=[N(s,nc,this.handleSourceFeatureAdded_,this),N(s,rc,this.handleSourceFeatureChanged_,this),N(s,oc,this.handleSourceFeatureDelete_,this),N(s,sc,this.handleSourceFeatureClear_,this)],s.forEachFeature((t=>{this.featureCache_[X(t)]={feature:t,properties:t.getProperties(),geometry:t.getGeometry()},this.featureCount_++}))}afterHelperCreated(){this.program_=this.helper.getProgram(this.fragmentShader_,this.vertexShader_),this.hitDetectionEnabled_&&(this.hitProgram_=this.helper.getProgram(this.hitFragmentShader_,this.hitVertexShader_),this.hitRenderTarget_=new Jd(this.helper))}handleSourceFeatureAdded_(t){const e=t.feature;this.featureCache_[X(e)]={feature:e,properties:e.getProperties(),geometry:e.getGeometry()},this.featureCount_++}handleSourceFeatureChanged_(t){const e=t.feature;this.featureCache_[X(e)]={feature:e,properties:e.getProperties(),geometry:e.getGeometry()}}handleSourceFeatureDelete_(t){const e=t.feature;delete this.featureCache_[X(e)],this.featureCount_--}handleSourceFeatureClear_(){this.featureCache_={},this.featureCount_=0}renderFrame(t){const e=this.helper.getGL();this.preRender(e,t);const i=t.viewState.projection,n=this.getLayer().getSource().getWrapX()&&i.canWrapX(),r=i.getExtent(),s=t.extent,o=n?De(r):null,a=n?Math.ceil((s[2]-r[2])/o)+1:1,l=n?Math.floor((s[0]-r[0])/o):0;let h=l;const c=this.indicesBuffer_.getSize();do{this.helper.makeProjectionTransform(t,this.currentTransform_),Wt(this.currentTransform_,h*o,0),kt(this.currentTransform_,this.invertRenderTransform_),this.helper.applyUniforms(t),this.helper.drawElements(0,c)}while(++h{const r=e.data;r.id===n&&(this.worker_.removeEventListener("message",o),t.verticesBufferTransform=r.renderInstructionsTransform,Yt(t.invertVerticesBufferTransform,t.verticesBufferTransform),t.verticesBuffer.fromArrayBuffer(r.vertexBuffer),this.helper_.flushBufferData(t.verticesBuffer),t.indicesBuffer.fromArrayBuffer(r.indexBuffer),this.helper_.flushBufferData(t.indicesBuffer),t.renderInstructions=new Float32Array(r.renderInstructions),i())};this.worker_.addEventListener("message",o)}};const xp={SEGMENT_START:"a_segmentStart",SEGMENT_END:"a_segmentEnd",PARAMETERS:"a_parameters"};var vp=class extends yp{constructor(t,e,i,n,r){super(t,e,i,n,r),this.attributes=[{name:xp.SEGMENT_START,size:2,type:Xd.FLOAT},{name:xp.SEGMENT_END,size:2,type:Xd.FLOAT},{name:xp.PARAMETERS,size:1,type:Xd.FLOAT}].concat(r.map((function(t){return{name:"a_"+t.name,size:1,type:Xd.FLOAT}})))}generateRenderInstructions(t){const e=2*t.verticesCount+(1+this.customAttributes.length)*t.geometriesCount;t.renderInstructions&&t.renderInstructions.length===e||(t.renderInstructions=new Float32Array(e));const i=[];let n=0;for(const e in t.entries){const r=t.entries[e];for(let e=0,s=r.flatCoordss.length;ethis.addGeometry_(t,e)));break;case"MultiPolygon":t.getPolygons().map((t=>this.addGeometry_(t,e)));break;case"MultiLineString":t.getLineStrings().map((t=>this.addGeometry_(t,e)));break;case"MultiPoint":t.getPoints().map((t=>this.addGeometry_(t,e)));break;case"Polygon":const s=t;r=this.addFeatureEntryInPolygonBatch_(e),i=s.getFlatCoordinates(),n=i.length/2;const o=s.getLinearRingCount(),a=s.getEnds().map(((t,e,i)=>e>0?(t-i[e-1])/2:t/2));this.polygonBatch.verticesCount+=n,this.polygonBatch.ringsCount+=o,this.polygonBatch.geometriesCount++,r.flatCoordss.push(i),r.ringsVerticesCounts.push(a),r.verticesCount+=n,r.ringsCount+=o,s.getLinearRings().map((t=>this.addGeometry_(t,e)));break;case"Point":const l=t;r=this.addFeatureEntryInPointBatch_(e),i=l.getFlatCoordinates(),this.pointBatch.geometriesCount++,r.flatCoordss.push(i);break;case"LineString":case"LinearRing":const h=t;r=this.addFeatureEntryInLineStringBatch_(e),i=h.getFlatCoordinates(),n=i.length/2,this.lineStringBatch.verticesCount+=n,this.lineStringBatch.geometriesCount++,r.flatCoordss.push(i),r.verticesCount+=n}}changeFeature(t){this.clearFeatureEntryInPointBatch_(t),this.clearFeatureEntryInPolygonBatch_(t),this.clearFeatureEntryInLineStringBatch_(t);const e=t.getGeometry();e&&this.addGeometry_(e,t)}removeFeature(t){this.clearFeatureEntryInPointBatch_(t),this.clearFeatureEntryInPolygonBatch_(t),this.clearFeatureEntryInLineStringBatch_(t)}clear(){this.polygonBatch.entries={},this.polygonBatch.geometriesCount=0,this.polygonBatch.verticesCount=0,this.polygonBatch.ringsCount=0,this.lineStringBatch.entries={},this.lineStringBatch.geometriesCount=0,this.lineStringBatch.verticesCount=0,this.pointBatch.entries={},this.pointBatch.geometriesCount=0}};const wp={POSITION:"a_position",INDEX:"a_index"};var Tp=class extends yp{constructor(t,e,i,n,r){super(t,e,i,n,r),this.attributes=[{name:wp.POSITION,size:2,type:Xd.FLOAT},{name:wp.INDEX,size:1,type:Xd.FLOAT}].concat(r.map((function(t){return{name:"a_"+t.name,size:1,type:Xd.FLOAT}})))}generateRenderInstructions(t){const e=(2+this.customAttributes.length)*t.geometriesCount;t.renderInstructions&&t.renderInstructions.length===e||(t.renderInstructions=new Float32Array(e));const i=[];let n=0;for(const e in t.entries){const r=t.entries[e];for(let e=0,s=r.flatCoordss.length;e 0.93) return normalPx - tangentPx;\n float halfAngle = joinAngle / 2.0;\n vec2 angleBisectorNormal = vec2(\n sin(halfAngle) * normalPx.x + cos(halfAngle) * normalPx.y,\n -cos(halfAngle) * normalPx.x + sin(halfAngle) * normalPx.y\n );\n float length = 1.0 / sin(halfAngle);\n return angleBisectorNormal * length;\n }\n\n void main(void) {\n float anglePrecision = 1500.0;\n float paramShift = 10000.0;\n v_angleStart = fract(a_parameters / paramShift) * paramShift / anglePrecision;\n v_angleEnd = fract(floor(a_parameters / paramShift + 0.5) / paramShift) * paramShift / anglePrecision;\n float vertexNumber = floor(a_parameters / paramShift / paramShift + 0.0001);\n vec2 tangentPx = worldToPx(a_segmentEnd) - worldToPx(a_segmentStart);\n tangentPx = normalize(tangentPx);\n vec2 normalPx = vec2(-tangentPx.y, tangentPx.x);\n float normalDir = vertexNumber < 0.5 || (vertexNumber > 1.5 && vertexNumber < 2.5) ? 1.0 : -1.0;\n float tangentDir = vertexNumber < 1.5 ? 1.0 : -1.0;\n float angle = vertexNumber < 1.5 ? v_angleStart : v_angleEnd;\n vec2 offsetPx = getOffsetDirection(normalPx * normalDir, tangentDir * tangentPx, angle) * a_width * 0.5;\n vec2 position = vertexNumber < 1.5 ? a_segmentStart : a_segmentEnd;\n gl_Position = u_projectionMatrix * vec4(position, 0.0, 1.0) + pxToScreen(offsetPx);\n v_segmentStart = worldToPx(a_segmentStart);\n v_segmentEnd = worldToPx(a_segmentEnd);\n v_color = ${bp}\n v_opacity = a_opacity;\n v_width = a_width;\n }`,Fp="\n precision mediump float;\n uniform float u_pixelRatio;\n varying vec2 v_segmentStart;\n varying vec2 v_segmentEnd;\n varying float v_angleStart;\n varying float v_angleEnd;\n varying vec3 v_color;\n varying float v_opacity;\n varying float v_width;\n\n float segmentDistanceField(vec2 point, vec2 start, vec2 end, float radius) {\n vec2 startToPoint = point - start;\n vec2 startToEnd = end - start;\n float ratio = clamp(dot(startToPoint, startToEnd) / dot(startToEnd, startToEnd), 0.0, 1.0);\n float dist = length(startToPoint - ratio * startToEnd);\n return 1.0 - smoothstep(radius - 1.0, radius, dist);\n }\n\n void main(void) {\n vec2 v_currentPoint = gl_FragCoord.xy / u_pixelRatio;\n gl_FragColor = vec4(v_color, 1.0) * v_opacity;\n gl_FragColor *= segmentDistanceField(v_currentPoint, v_segmentStart, v_segmentEnd, v_width);\n }",Mp=`\n precision mediump float;\n uniform mat4 u_projectionMatrix;\n uniform mat4 u_offsetScaleMatrix;\n attribute vec2 a_position;\n attribute float a_index;\n attribute float a_color;\n attribute float a_opacity;\n varying vec2 v_texCoord;\n varying vec3 v_color;\n varying float v_opacity;\n\n void main(void) {\n mat4 offsetMatrix = u_offsetScaleMatrix;\n float size = 6.0;\n float offsetX = a_index == 0.0 || a_index == 3.0 ? -size / 2.0 : size / 2.0;\n float offsetY = a_index == 0.0 || a_index == 1.0 ? -size / 2.0 : size / 2.0;\n vec4 offsets = offsetMatrix * vec4(offsetX, offsetY, 0.0, 0.0);\n gl_Position = u_projectionMatrix * vec4(a_position, 0.0, 1.0) + offsets;\n float u = a_index == 0.0 || a_index == 3.0 ? 0.0 : 1.0;\n float v = a_index == 0.0 || a_index == 1.0 ? 0.0 : 1.0;\n v_texCoord = vec2(u, v);\n v_color = ${bp}\n v_opacity = a_opacity;\n }`,Ap="\n precision mediump float;\n varying vec3 v_color;\n varying float v_opacity;\n\n void main(void) {\n gl_FragColor = vec4(v_color, 1.0) * v_opacity;\n }";function Op(t){return Object.keys(t).map((e=>({name:e,callback:t[e]})))}var Np=class extends rg{constructor(t,e){const i=e.uniforms||{},n=[1,0,0,1,0,0];i[Nd]=n,super(t,{uniforms:i,postProcesses:e.postProcesses}),this.sourceRevision_=-1,this.previousExtent_=[1/0,1/0,-1/0,-1/0],this.currentTransform_=n;const r={color:function(){return Rp("#ddd")},opacity:function(){return 1},...e.fill&&e.fill.attributes},s={color:function(){return Rp("#eee")},opacity:function(){return 1},width:function(){return 1.5},...e.stroke&&e.stroke.attributes},o={color:function(){return Rp("#eee")},opacity:function(){return 1},...e.point&&e.point.attributes};this.fillVertexShader_=e.fill&&e.fill.vertexShader||Pp,this.fillFragmentShader_=e.fill&&e.fill.fragmentShader||Ip,this.fillAttributes_=Op(r),this.strokeVertexShader_=e.stroke&&e.stroke.vertexShader||Lp,this.strokeFragmentShader_=e.stroke&&e.stroke.fragmentShader||Fp,this.strokeAttributes_=Op(s),this.pointVertexShader_=e.point&&e.point.vertexShader||Mp,this.pointFragmentShader_=e.point&&e.point.fragmentShader||Ap,this.pointAttributes_=Op(o),this.worker_=pp(),this.batch_=new Sp;const a=this.getLayer().getSource();this.batch_.addFeatures(a.getFeatures()),this.sourceListenKeys_=[N(a,nc,this.handleSourceFeatureAdded_,this),N(a,rc,this.handleSourceFeatureChanged_,this),N(a,oc,this.handleSourceFeatureDelete_,this),N(a,sc,this.handleSourceFeatureClear_,this)]}afterHelperCreated(){this.polygonRenderer_=new Cp(this.helper,this.worker_,this.fillVertexShader_,this.fillFragmentShader_,this.fillAttributes_),this.pointRenderer_=new Tp(this.helper,this.worker_,this.pointVertexShader_,this.pointFragmentShader_,this.pointAttributes_),this.lineStringRenderer_=new vp(this.helper,this.worker_,this.strokeVertexShader_,this.strokeFragmentShader_,this.strokeAttributes_)}handleSourceFeatureAdded_(t){const e=t.feature;this.batch_.addFeature(e)}handleSourceFeatureChanged_(t){const e=t.feature;this.batch_.changeFeature(e)}handleSourceFeatureDelete_(t){const e=t.feature;this.batch_.removeFeature(e)}handleSourceFeatureClear_(){this.batch_.clear()}renderFrame(t){const e=this.helper.getGL();this.preRender(e,t);const i=this.getLayer().getSource(),n=t.viewState.projection,r=i.getWrapX()&&n.canWrapX(),s=n.getExtent(),o=t.extent,a=r?De(s):null,l=r?Math.ceil((o[2]-s[2])/a)+1:1;let h=r?Math.floor((o[0]-s[0])/a):0;do{this.polygonRenderer_.render(this.batch_.polygonBatch,this.currentTransform_,t,h*a),this.lineStringRenderer_.render(this.batch_.lineStringBatch,this.currentTransform_,t,h*a),this.pointRenderer_.render(this.batch_.pointBatch,this.currentTransform_,t,h*a)}while(++h{l--,this.ready=l<=0,this.getLayer().changed()};this.polygonRenderer_.rebuild(this.batch_.polygonBatch,t,"Polygon",h),this.lineStringRenderer_.rebuild(this.batch_.lineStringBatch,t,"LineString",h),this.pointRenderer_.rebuild(this.batch_.pointBatch,t,"Point",h),this.previousExtent_=t.extent.slice()}return this.helper.makeProjectionTransform(t,this.currentTransform_),this.helper.prepareDraw(t),!0}forEachFeatureAtCoordinate(t,e,i,n,r){}disposeInternal(){this.worker_.terminate(),this.layer_=null,this.sourceListenKeys_.forEach((function(t){G(t)})),this.sourceListenKeys_=null,super.disposeInternal()}};const Dp=0,Gp=1,kp=2,jp=3,Bp=4,zp=5,Up=6,Xp=7,Vp=8,Wp=9,Zp=10,Yp=11,Kp=12,qp=[Vp],Hp=[Kp],$p=[Gp],Jp=[jp];var Qp=class extends Vl{constructor(t,e,i,n){super(),this.tolerance=t,this.maxExtent=e,this.pixelRatio=n,this.maxLineWidth=0,this.resolution=i,this.beginGeometryInstruction1_=null,this.beginGeometryInstruction2_=null,this.bufferedMaxExtent_=null,this.instructions=[],this.coordinates=[],this.tmpCoordinate_=[],this.hitDetectionInstructions=[],this.state={}}applyPixelRatio(t){const e=this.pixelRatio;return 1==e?t:t.map((function(t){return t*e}))}appendFlatPointCoordinates(t,e){const i=this.getBufferedMaxExtent(),n=this.tmpCoordinate_,r=this.coordinates;let s=r.length;for(let o=0,a=t.length;oo&&(this.instructions.push([Bp,o,l,t,i,nr]),this.hitDetectionInstructions.push([Bp,o,l,t,n||i,nr]));break;case"Point":a=t.getFlatCoordinates(),this.coordinates.push(a[0],a[1]),l=this.coordinates.length,this.instructions.push([Bp,o,l,t,i]),this.hitDetectionInstructions.push([Bp,o,l,t,n||i])}this.endGeometry(e)}beginGeometry(t,e){this.beginGeometryInstruction1_=[Dp,e,0,t],this.instructions.push(this.beginGeometryInstruction1_),this.beginGeometryInstruction2_=[Dp,e,0,t],this.hitDetectionInstructions.push(this.beginGeometryInstruction2_)}finish(){return{instructions:this.instructions,hitDetectionInstructions:this.hitDetectionInstructions,coordinates:this.coordinates}}reverseHitDetectionInstructions(){const t=this.hitDetectionInstructions;let e;t.reverse();const i=t.length;let n,r,s=-1;for(e=0;ethis.maxLineWidth&&(this.maxLineWidth=i.lineWidth,this.bufferedMaxExtent_=null)}else i.strokeStyle=void 0,i.lineCap=void 0,i.lineDash=null,i.lineDashOffset=void 0,i.lineJoin=void 0,i.lineWidth=void 0,i.miterLimit=void 0}createFill(t){const e=t.fillStyle,i=[Zp,e];return"string"!=typeof e&&i.push(!0),i}applyStroke(t){this.instructions.push(this.createStroke(t))}createStroke(t){return[Yp,t.strokeStyle,t.lineWidth*this.pixelRatio,t.lineCap,t.lineJoin,t.miterLimit,this.applyPixelRatio(t.lineDash),t.lineDashOffset*this.pixelRatio]}updateFillStyle(t,e){const i=t.fillStyle;"string"==typeof i&&t.currentFillStyle==i||(void 0!==i&&this.instructions.push(e.call(this,t)),t.currentFillStyle=i)}updateStrokeStyle(t,e){const i=t.strokeStyle,n=t.lineCap,r=t.lineDash,s=t.lineDashOffset,o=t.lineJoin,a=t.lineWidth,l=t.miterLimit;(t.currentStrokeStyle!=i||t.currentLineCap!=n||r!=t.currentLineDash&&!d(t.currentLineDash,r)||t.currentLineDashOffset!=s||t.currentLineJoin!=o||t.currentLineWidth!=a||t.currentMiterLimit!=l)&&(void 0!==i&&e.call(this,t),t.currentStrokeStyle=i,t.currentLineCap=n,t.currentLineDash=r,t.currentLineDashOffset=s,t.currentLineJoin=o,t.currentLineWidth=a,t.currentMiterLimit=l)}endGeometry(t){this.beginGeometryInstruction1_[2]=this.instructions.length,this.beginGeometryInstruction1_=null,this.beginGeometryInstruction2_[2]=this.hitDetectionInstructions.length,this.beginGeometryInstruction2_=null;const e=[Xp,t];this.instructions.push(e),this.hitDetectionInstructions.push(e)}getBufferedMaxExtent(){if(!this.bufferedMaxExtent_&&(this.bufferedMaxExtent_=se(this.maxExtent),this.maxLineWidth>0)){const t=this.resolution*(this.maxLineWidth+1)/2;re(this.bufferedMaxExtent_,t,this.bufferedMaxExtent_)}return this.bufferedMaxExtent_}};var tm=class extends Qp{constructor(t,e,i,n){super(t,e,i,n),this.hitDetectionImage_=null,this.image_=null,this.imagePixelRatio_=void 0,this.anchorX_=void 0,this.anchorY_=void 0,this.height_=void 0,this.opacity_=void 0,this.originX_=void 0,this.originY_=void 0,this.rotateWithView_=void 0,this.rotation_=void 0,this.scale_=void 0,this.width_=void 0,this.declutterMode_=void 0,this.declutterImageWithText_=void 0}drawPoint(t,e){if(!this.image_)return;this.beginGeometry(t,e);const i=t.getFlatCoordinates(),n=t.getStride(),r=this.coordinates.length,s=this.appendFlatPointCoordinates(i,n);this.instructions.push([Up,r,s,this.image_,this.anchorX_*this.imagePixelRatio_,this.anchorY_*this.imagePixelRatio_,Math.ceil(this.height_*this.imagePixelRatio_),this.opacity_,this.originX_*this.imagePixelRatio_,this.originY_*this.imagePixelRatio_,this.rotateWithView_,this.rotation_,[this.scale_[0]*this.pixelRatio/this.imagePixelRatio_,this.scale_[1]*this.pixelRatio/this.imagePixelRatio_],Math.ceil(this.width_*this.imagePixelRatio_),this.declutterMode_,this.declutterImageWithText_]),this.hitDetectionInstructions.push([Up,r,s,this.hitDetectionImage_,this.anchorX_,this.anchorY_,this.height_,this.opacity_,this.originX_,this.originY_,this.rotateWithView_,this.rotation_,this.scale_,this.width_,this.declutterMode_,this.declutterImageWithText_]),this.endGeometry(e)}drawMultiPoint(t,e){if(!this.image_)return;this.beginGeometry(t,e);const i=t.getFlatCoordinates(),n=t.getStride(),r=this.coordinates.length,s=this.appendFlatPointCoordinates(i,n);this.instructions.push([Up,r,s,this.image_,this.anchorX_*this.imagePixelRatio_,this.anchorY_*this.imagePixelRatio_,Math.ceil(this.height_*this.imagePixelRatio_),this.opacity_,this.originX_*this.imagePixelRatio_,this.originY_*this.imagePixelRatio_,this.rotateWithView_,this.rotation_,[this.scale_[0]*this.pixelRatio/this.imagePixelRatio_,this.scale_[1]*this.pixelRatio/this.imagePixelRatio_],Math.ceil(this.width_*this.imagePixelRatio_),this.declutterMode_,this.declutterImageWithText_]),this.hitDetectionInstructions.push([Up,r,s,this.hitDetectionImage_,this.anchorX_,this.anchorY_,this.height_,this.opacity_,this.originX_,this.originY_,this.rotateWithView_,this.rotation_,this.scale_,this.width_,this.declutterMode_,this.declutterImageWithText_]),this.endGeometry(e)}finish(){return this.reverseHitDetectionInstructions(),this.anchorX_=void 0,this.anchorY_=void 0,this.hitDetectionImage_=null,this.image_=null,this.imagePixelRatio_=void 0,this.height_=void 0,this.scale_=void 0,this.opacity_=void 0,this.originX_=void 0,this.originY_=void 0,this.rotateWithView_=void 0,this.rotation_=void 0,this.width_=void 0,super.finish()}setImageStyle(t,e){const i=t.getAnchor(),n=t.getSize(),r=t.getOrigin();this.imagePixelRatio_=t.getPixelRatio(this.pixelRatio),this.anchorX_=i[0],this.anchorY_=i[1],this.hitDetectionImage_=t.getHitDetectionImage(),this.image_=t.getImage(this.pixelRatio),this.height_=n[1],this.opacity_=t.getOpacity(),this.originX_=r[0],this.originY_=r[1],this.rotateWithView_=t.getRotateWithView(),this.rotation_=t.getRotation(),this.scale_=t.getScaleArray(),this.width_=n[0],this.declutterMode_=t.getDeclutterMode(),this.declutterImageWithText_=e}};var em=class extends Qp{constructor(t,e,i,n){super(t,e,i,n)}drawFlatCoordinates_(t,e,i,n){const r=this.coordinates.length,s=this.appendFlatLineCoordinates(t,e,i,n,!1,!1),o=[Wp,r,s];return this.instructions.push(o),this.hitDetectionInstructions.push(o),i}drawLineString(t,e){const i=this.state,n=i.strokeStyle,r=i.lineWidth;if(void 0===n||void 0===r)return;this.updateStrokeStyle(i,this.applyStroke),this.beginGeometry(t,e),this.hitDetectionInstructions.push([Yp,i.strokeStyle,i.lineWidth,i.lineCap,i.lineJoin,i.miterLimit,to,0],$p);const s=t.getFlatCoordinates(),o=t.getStride();this.drawFlatCoordinates_(s,0,s.length,o),this.hitDetectionInstructions.push(Hp),this.endGeometry(e)}drawMultiLineString(t,e){const i=this.state,n=i.strokeStyle,r=i.lineWidth;if(void 0===n||void 0===r)return;this.updateStrokeStyle(i,this.applyStroke),this.beginGeometry(t,e),this.hitDetectionInstructions.push([Yp,i.strokeStyle,i.lineWidth,i.lineCap,i.lineJoin,i.miterLimit,i.lineDash,i.lineDashOffset],$p);const s=t.getEnds(),o=t.getFlatCoordinates(),a=t.getStride();let l=0;for(let t=0,e=s.length;tt&&(y>_&&(_=y,p=x,m=o),y=0,x=o-r)),a=l,u=g,d=f),h=i,c=n}return y+=l,y>_?[x,o]:[p,m]}const rm={left:0,end:0,center:.5,right:1,start:1,top:0,middle:.5,hanging:.2,alphabetic:.8,ideographic:.8,bottom:1};var sm=class extends Qp{constructor(t,e,i,n){super(t,e,i,n),this.labels_=null,this.text_="",this.textOffsetX_=0,this.textOffsetY_=0,this.textRotateWithView_=void 0,this.textRotation_=0,this.textFillState_=null,this.fillStates={},this.textStrokeState_=null,this.strokeStates={},this.textState_={},this.textStates={},this.textKey_="",this.fillKey_="",this.strokeKey_="",this.declutterImageWithText_=void 0}finish(){const t=super.finish();return t.textStates=this.textStates,t.fillStates=this.fillStates,t.strokeStates=this.strokeStates,t}drawText(t,e){const i=this.textFillState_,n=this.textStrokeState_,r=this.textState_;if(""===this.text_||!r||!i&&!n)return;const s=this.coordinates;let o=s.length;const a=t.getType();let l=null,h=t.getStride();if("line"!==r.placement||"LineString"!=a&&"MultiLineString"!=a&&"Polygon"!=a&&"MultiPolygon"!=a){let i=r.overflow?null:[];switch(a){case"Point":case"MultiPoint":l=t.getFlatCoordinates();break;case"LineString":l=t.getFlatMidpoint();break;case"Circle":l=t.getCenter();break;case"MultiLineString":l=t.getFlatMidpoints(),h=2;break;case"Polygon":l=t.getFlatInteriorPoint(),r.overflow||i.push(l[2]/this.resolution),h=3;break;case"MultiPolygon":const e=t.getFlatInteriorPoints();l=[];for(let t=0,n=e.length;t{const n=s[2*(t+i)]===l[i*h]&&s[2*(t+i)+1]===l[i*h+1];return n||--t,n}))}this.saveTextStates_(),(r.backgroundFill||r.backgroundStroke)&&(this.setFillStrokeStyle(r.backgroundFill,r.backgroundStroke),r.backgroundFill&&(this.updateFillStyle(this.state,this.createFill),this.hitDetectionInstructions.push(this.createFill(this.state))),r.backgroundStroke&&(this.updateStrokeStyle(this.state,this.applyStroke),this.hitDetectionInstructions.push(this.createStroke(this.state)))),this.beginGeometry(t,e);let c=r.padding;if(c!=oo&&(r.scale[0]<0||r.scale[1]<0)){let t=r.padding[0],e=r.padding[1],i=r.padding[2],n=r.padding[3];r.scale[0]<0&&(e=-e,n=-n),r.scale[1]<0&&(t=-t,i=-i),c=[t,e,i,n]}const u=this.pixelRatio;this.instructions.push([Up,o,n,null,NaN,NaN,NaN,1,0,0,this.textRotateWithView_,this.textRotation_,[1,1],NaN,void 0,this.declutterImageWithText_,c==oo?oo:c.map((function(t){return t*u})),!!r.backgroundFill,!!r.backgroundStroke,this.text_,this.textKey_,this.strokeKey_,this.fillKey_,this.textOffsetX_,this.textOffsetY_,i]);const d=1/u;this.hitDetectionInstructions.push([Up,o,n,null,NaN,NaN,NaN,1,0,0,this.textRotateWithView_,this.textRotation_,[d,d],NaN,void 0,this.declutterImageWithText_,c,!!r.backgroundFill,!!r.backgroundStroke,this.text_,this.textKey_,this.strokeKey_,this.fillKey_,this.textOffsetX_,this.textOffsetY_,i]),this.endGeometry(e)}else{if(!Ge(this.getBufferedMaxExtent(),t.getExtent()))return;let i;if(l=t.getFlatCoordinates(),"LineString"==a)i=[l.length];else if("MultiLineString"==a)i=t.getEnds();else if("Polygon"==a)i=t.getEnds().slice(0,1);else if("MultiPolygon"==a){const e=t.getEndss();i=[];for(let t=0,n=e.length;tt[2]}else b=v>C;const P=Math.PI,I=[],L=w+n===e;let F;if(m=0,_=T,d=t[e=w],g=t[e+1],L){y(),F=Math.atan2(g-p,d-f),b&&(F+=F>0?-P:P);const t=(C+v)/2,e=(R+S)/2;return I[0]=[t,e,(E-s)/2,F,r],I}for(let t=0,u=(r=r.replace(/\n/g," ")).length;t0?-P:P),void 0!==F){let t=v-F;if(t+=t>P?-2*P:t<-P?2*P:0,Math.abs(t)>o)return null}F=v;const S=t;let w=0;for(;t0&&t.push("\n",""),t.push(e,""),t}var xm=class{constructor(t,e,i,n){this.overlaps=i,this.pixelRatio=e,this.resolution=t,this.alignFill_,this.instructions=n.instructions,this.coordinates=n.coordinates,this.coordinateCache_={},this.renderedTransform_=[1,0,0,1,0,0],this.hitDetectionInstructions=n.hitDetectionInstructions,this.pixelCoordinates_=null,this.viewRotation_=0,this.fillStates=n.fillStates||{},this.strokeStates=n.strokeStates||{},this.textStates=n.textStates||{},this.widths_={},this.labels_={}}createLabel(t,e,i,n){const r=t+e+i+n;if(this.labels_[r])return this.labels_[r];const s=n?this.strokeStates[n]:null,o=i?this.fillStates[i]:null,a=this.textStates[e],l=this.pixelRatio,h=[a.scale[0]*l,a.scale[1]*l],c=Array.isArray(t),u=a.justify?rm[a.justify]:_m(Array.isArray(t)?t[0]:t,a.textAlign||ro),d=n&&s.lineWidth?s.lineWidth:0,g=c?t:t.split("\n").reduce(ym,[]),{width:f,height:p,widths:m,heights:_,lineWidths:y}=_o(a,g),x=f+d,v=[],S=(x+2)*h[0],w=(p+d)*h[1],T={width:S<0?Math.floor(S):Math.ceil(S),height:w<0?Math.floor(w):Math.ceil(w),contextInstructions:v};1==h[0]&&1==h[1]||v.push("scale",h),n&&(v.push("strokeStyle",s.strokeStyle),v.push("lineWidth",d),v.push("lineCap",s.lineCap),v.push("lineJoin",s.lineJoin),v.push("miterLimit",s.miterLimit),v.push("setLineDash",[s.lineDash]),v.push("lineDashOffset",s.lineDashOffset)),i&&v.push("fillStyle",o.fillStyle),v.push("textBaseline","middle"),v.push("textAlign","center");const E=.5-u;let C=u*x+E*d;const R=[],b=[];let P,I=0,L=0,F=0,M=0;for(let t=0,e=g.length;tt?t-l:r,x=s+h>e?e-h:s,v=g[3]+y*u[0]+g[1],S=g[0]+x*u[1]+g[2],w=m-g[3],T=_-g[0];let E;return(f||0!==c)&&(um[0]=w,fm[0]=w,um[1]=T,dm[1]=T,dm[0]=w+v,gm[0]=dm[0],gm[1]=T+S,fm[1]=gm[1]),0!==c?(E=Zt([1,0,0,1,0,0],i,n,1,1,c,-i,-n),zt(E,um),zt(E,dm),zt(E,gm),zt(E,fm),de(Math.min(um[0],dm[0],gm[0],fm[0]),Math.min(um[1],dm[1],gm[1],fm[1]),Math.max(um[0],dm[0],gm[0],fm[0]),Math.max(um[1],dm[1],gm[1],fm[1]),cm)):de(Math.min(w,w+v),Math.min(T,T+S),Math.max(w,w+v),Math.max(T,T+S),cm),d&&(m=Math.round(m),_=Math.round(_)),{drawImageX:m,drawImageY:_,drawImageW:y,drawImageH:x,originX:l,originY:h,declutterBox:{minX:cm[0],minY:cm[1],maxX:cm[2],maxY:cm[3],value:p},canvasTransform:E,scale:u}}replayImageOrLabel_(t,e,i,n,r,s,o){const a=!(!s&&!o),l=n.declutterBox,h=t.canvas,c=o?o[2]*n.scale[0]/2:0;return l.minX-c<=h.width/e&&l.maxX+c>=0&&l.minY-c<=h.height/e&&l.maxY+c>=0&&(a&&this.replayTextBackground_(t,um,dm,gm,fm,s,o),yo(t,n.canvasTransform,r,i,n.originX,n.originY,n.drawImageW,n.drawImageH,n.drawImageX,n.drawImageY,n.scale)),!0}fill_(t){if(this.alignFill_){const e=zt(this.renderedTransform_,[0,0]),i=512*this.pixelRatio;t.save(),t.translate(e[0]%i,e[1]%i),t.rotate(this.viewRotation_)}t.fill(),this.alignFill_&&t.restore()}setStrokeStyle_(t,e){t.strokeStyle=e[1],t.lineWidth=e[2],t.lineCap=e[3],t.lineJoin=e[4],t.miterLimit=e[5],t.lineDashOffset=e[7],t.setLineDash(e[6])}drawLabelWithPointPlacement_(t,e,i,n){const r=this.textStates[e],s=this.createLabel(t,e,n,i),o=this.strokeStates[i],a=this.pixelRatio,l=_m(Array.isArray(t)?t[0]:t,r.textAlign||ro),h=rm[r.textBaseline||so],c=o&&o.lineWidth?o.lineWidth:0;return{label:s,anchorX:l*(s.width/a-2*r.scale[0])+2*(.5-l)*c,anchorY:h*s.height/a+2*(.5-h)*c}}execute_(t,e,i,n,r,s,o,a){let l;this.pixelCoordinates_&&d(i,this.renderedTransform_)?l=this.pixelCoordinates_:(this.pixelCoordinates_||(this.pixelCoordinates_=[]),l=Ln(this.coordinates,0,this.coordinates.length,2,i,this.pixelCoordinates_),Bt(this.renderedTransform_,i));let h=0;const c=n.length;let u,g,f,p,m,_,y,x,v,S,w,T,E=0,C=0,R=0,b=null,P=null;const I=this.coordinateCache_,L=this.viewRotation_,F=Math.round(1e12*Math.atan2(-i[1],i[0]))/1e12,M={context:t,pixelRatio:this.pixelRatio,resolution:this.resolution,rotation:L},A=this.instructions!=n||this.overlaps?0:200;let O,N,D,G;for(;hA&&(this.fill_(t),C=0),R>A&&(t.stroke(),R=0),C||R||(t.beginPath(),p=NaN,m=NaN),++h;break;case kp:E=i[1];const n=l[E],c=l[E+1],d=l[E+2]-n,k=l[E+3]-c,j=Math.sqrt(d*d+k*k);t.moveTo(n+j,c),t.arc(n,c,j,0,2*Math.PI,!0),++h;break;case jp:t.closePath(),++h;break;case Bp:E=i[1],u=i[2];const B=i[3],z=i[4],U=6==i.length?i[5]:void 0;M.geometry=B,M.feature=O,h in I||(I[h]=[]);const X=I[h];U?U(l,E,u,2,X):(X[0]=l[E],X[1]=l[E+1],X.length=2),z(X,M),++h;break;case Up:E=i[1],u=i[2],x=i[3],g=i[4],f=i[5];let V=i[6];const W=i[7],Z=i[8],Y=i[9],K=i[10];let q=i[11];const H=i[12];let $=i[13];const J=i[14],Q=i[15];if(!x&&i.length>=20){v=i[19],S=i[20],w=i[21],T=i[22];const t=this.drawLabelWithPointPlacement_(v,S,w,T);x=t.label,i[3]=x;const e=i[23];g=(t.anchorX-e)*this.pixelRatio,i[4]=g;const n=i[24];f=(t.anchorY-n)*this.pixelRatio,i[5]=f,V=x.height,i[6]=V,$=x.width,i[13]=$}let tt,et,it,nt;i.length>25&&(tt=i[25]),i.length>17?(et=i[16],it=i[17],nt=i[18]):(et=oo,it=!1,nt=!1),K&&F?q+=L:K||F||(q-=L);let rt=0;for(;Ei)break;let a=n[o];a||(a=[],n[o]=a),a.push(4*((t+r)*e+(t+s))+3),r>0&&a.push(4*((t-r)*e+(t+s))+3),s>0&&(a.push(4*((t+r)*e+(t-s))+3),r>0&&a.push(4*((t-r)*e+(t-s))+3))}const r=[];for(let t=0,e=n.length;t0){if(!s||"Image"!==g&&"Text"!==g||s.includes(t)){const i=(d[a]-3)/4,s=n-i%o,l=n-(i/o|0),h=r(t,e,s*s+l*l);if(h)return h}c.clearRect(0,0,o,o);break}}const p=Object.keys(this.executorsByZIndex_).map(Number);let m,_,y,x,v;for(p.sort(l),m=p.length-1;m>=0;--m){const t=p[m].toString();for(y=this.executorsByZIndex_[t],_=vm.length-1;_>=0;--_)if(g=vm[_],x=y[g],void 0!==x&&(v=x.executeHitDetection(c,a,i,f,u),v))return v}}getClipCoords(t){const e=this.maxExtent_;if(!e)return null;const i=e[0],n=e[1],r=e[2],s=e[3],o=[i,n,i,s,r,s,r,n];return Ln(o,0,8,2,t,o),o}isEmpty(){return v(this.executorsByZIndex_)}execute(t,e,i,n,r,s,o){const a=Object.keys(this.executorsByZIndex_).map(Number);let h,c,u,d,g,f;for(a.sort(l),this.maxExtent_&&(t.save(),this.clip(t,i)),s=s||vm,o&&a.reverse(),h=0,c=a.length;h{if(!this.hitDetectionImageData_&&!this.animatingOrInteracting_){const t=[this.context.canvas.width,this.context.canvas.height];zt(this.pixelTransform,t);const e=this.renderedCenter_,i=this.renderedResolution_,n=this.renderedRotation_,r=this.renderedProjection_,s=this.wrappedRenderedExtent_,o=this.getLayer(),a=[],l=t[0]*Em,h=t[1]*Em;a.push(this.getRenderTransform(e,i,n,Em,l,h,0).slice());const c=o.getSource(),u=r.getExtent();if(c.getWrapX()&&r.canWrapX()&&!le(u,s)){let t=s[0];const r=De(u);let o,c=0;for(;tu[2];)++c,o=r*c,a.push(this.getRenderTransform(e,i,n,Em,l,h,o).slice()),t-=r}this.hitDetectionImageData_=Cm(t,a,this.renderedFeatures_,o.getStyleFunction(),s,i,n)}e(Rm(t,this.renderedFeatures_,this.hitDetectionImageData_))}))}forEachFeatureAtCoordinate(t,e,i,n,r){if(!this.replayGroup_)return;const s=e.viewState.resolution,o=e.viewState.rotation,a=this.getLayer(),l={},h=function(t,e,i){const s=X(t),o=l[s];if(o){if(!0!==o&&ic=n.forEachFeatureAtCoordinate(t,s,o,i,h,n===this.declutterExecutorGroup&&e.declutterTree?e.declutterTree.all().map((t=>t.value)):null))),c}handleFontsChanged(){const t=this.getLayer();t.getVisible()&&this.replayGroup_&&t.changed()}handleStyleImageChange_(t){this.renderIfReadyAndVisible()}prepareFrame(t){const e=this.getLayer(),i=e.getSource();if(!i)return!1;const n=t.viewHints[Wo],r=t.viewHints[Zo],s=e.getUpdateWhileAnimating(),o=e.getUpdateWhileInteracting();if(this.ready&&!s&&n||!o&&r)return this.animatingOrInteracting_=!0,!0;this.animatingOrInteracting_=!1;const a=t.extent,l=t.viewState,h=l.projection,c=l.resolution,u=t.pixelRatio,g=e.getRevision(),f=e.getRenderBuffer();let p=e.getRenderOrder();void 0===p&&(p=Yl);const m=l.center.slice(),_=re(a,f*c),y=_.slice(),x=[_.slice()],v=h.getExtent();if(i.getWrapX()&&h.canWrapX()&&!le(v,t.extent)){const t=De(v),e=Math.max(De(_)/2,t);_[0]=v[0]-e,_[2]=v[2]+e,Xi(m,h);const i=Xe(x[0],h);i[0]v[0]&&i[2]>v[2]&&x.push([i[0]-t,i[1],i[2]-t,i[3]])}if(this.ready&&this.renderedResolution_==c&&this.renderedRevision_==g&&this.renderedRenderOrder_==p&&le(this.wrappedRenderedExtent_,_))return d(this.renderedExtent_,y)||(this.hitDetectionImageData_=null,this.renderedExtent_=y),this.renderedCenter_=m,this.replayGroupChanged=!1,!0;this.replayGroup_=null;const S=new am(ql(c,u),_,c,u);let w;this.getLayer().getDeclutter()&&(w=new am(ql(c,u),_,c,u));const T=Sn();let E;if(T){for(let t=0,e=x.length;t{let i;const n=t.getStyleFunction()||e.getStyleFunction();if(n&&(i=n(t,c)),i){const e=this.renderFeature(t,C,i,S,E,w);R=R&&!e}},P=En(_,h),I=i.getFeaturesInExtent(P);p&&I.sort(p);for(let t=0,e=I.length;t{if(g.getState()!==ts)return;this.image_=d?null:g;const t=g.getResolution(),n=g.getPixelRatio(),r=t*e/n;this.renderedResolution=r,this.coordinateToVectorPixelTransform_=Zt(this.coordinateToVectorPixelTransform_,a/2,l/2,1/r,-1/r,0,-i.center[0],-i.center[1])})),g.load()}return this.image_&&(this.renderedPixelToCoordinateTransform_=t.pixelToCoordinateTransform.slice()),!!this.image_}preRender(){}postRender(){}renderDeclutter(){}forEachFeatureAtCoordinate(t,e,i,n,r){return this.vectorRenderer_?this.vectorRenderer_.forEachFeatureAtCoordinate(t,e,i,n,r):super.forEachFeatureAtCoordinate(t,e,i,n,r)}};const Im={image:["Polygon","Circle","LineString","Image","Text"],hybrid:["Polygon","LineString"],vector:[]},Lm={hybrid:["Image","Text","Default"],vector:["Polygon","Circle","LineString","Image","Text","Default"]};var Fm=class extends pu{constructor(t){super(t),this.boundHandleStyleImageChange_=this.handleStyleImageChange_.bind(this),this.renderedLayerRevision_,this.renderedPixelToCoordinateTransform_=null,this.renderedRotation_,this.tmpTransform_=[1,0,0,1,0,0]}prepareTile(t,e,i){let n;const r=t.getState();return r!==Q&&r!==tt||(this.updateExecutorGroup_(t,e,i),this.tileImageNeedsRender_(t)&&(n=!0)),n}getTile(t,e,i,n){const r=n.pixelRatio,s=n.viewState,o=s.resolution,a=s.projection,l=this.getLayer(),h=l.getSource().getTile(t,e,i,r,a),c=n.viewHints,u=!(c[Wo]||c[Zo]);!u&&h.wantedResolution||(h.wantedResolution=o);return this.prepareTile(h,r,a)&&(u||Date.now()-n.time<8)&&"vector"!==l.getRenderMode()&&this.renderTileImage_(h,n),super.getTile(t,e,i,n)}isDrawableTile(t){const e=this.getLayer();return super.isDrawableTile(t)&&("vector"===e.getRenderMode()?X(e)in t.executorGroups:t.hasContext(e))}getTileImage(t){return t.getImage(this.getLayer())}prepareFrame(t){const e=this.getLayer().getRevision();return this.renderedLayerRevision_!==e&&(this.renderedLayerRevision_=e,this.renderedTiles.length=0),super.prepareFrame(t)}updateExecutorGroup_(t,e,i){const n=this.getLayer(),r=n.getRevision(),s=n.getRenderOrder()||null,o=t.wantedResolution,a=t.getReplayState(n);if(!a.dirty&&a.renderedResolution===o&&a.renderedRevision==r&&a.renderedRenderOrder==s)return;const l=n.getSource(),h=n.getDeclutter(),c=l.getTileGrid(),u=l.getTileGridForProjection(i).getTileCoordExtent(t.wrappedTileCoord),d=l.getSourceTiles(e,i,t),g=X(n);delete t.hitDetectionImageData[g],t.executorGroups[g]=[],h&&(t.declutterExecutorGroups[g]=[]),a.dirty=!1;for(let i=0,r=d.length;i{const r=n===p?e.declutterTree.all().map((t=>t.value)):null;for(let e=0,a=n.length;e{const n=this.getLayer(),r=X(n),s=n.getSource(),o=this.renderedProjection,a=o.getExtent(),l=this.renderedResolution,h=s.getTileGridForProjection(o),c=zt(this.renderedPixelToCoordinateTransform_,t.slice()),u=h.getTileCoordForCoordAndResolution(c,l);let d;for(let t=0,e=this.renderedTiles.length;t0)return void e([]);const g=Oe(h.getTileCoordExtent(d.wrappedTileCoord)),f=[(c[0]-g[0])/l,(g[1]-c[1])/l],p=d.getSourceTiles().reduce((function(t,e){return t.concat(e.getFeatures())}),[]);let m=d.hitDetectionImageData[r];if(!m){const t=ll(h.getTileSize(h.getZForResolution(l,s.zDirection))),e=this.renderedRotation_;m=Cm(t,[this.getRenderTransform(h.getTileCoordCenter(d.wrappedTileCoord),l,0,Em,t[0]*Em,t[1]*Em,0)],p,n.getStyleFunction(),h.getTileCoordExtent(d.wrappedTileCoord),d.getReplayState(n).renderedResolution,e),d.hitDetectionImageData[r]=m}e(Rm(f,p,m))}))}handleFontsChanged(){const t=this.getLayer();t.getVisible()&&void 0!==this.renderedLayerRevision_&&t.changed()}handleStyleImageChange_(t){this.renderIfReadyAndVisible()}renderDeclutter(t){const e=this.context,i=e.globalAlpha;e.globalAlpha=this.getLayer().getOpacity();const n=t.viewHints,r=!(n[Wo]||n[Zo]),s=this.renderedTiles;for(let e=0,i=s.length;e=0;--e)n[e].execute(this.context,1,this.getTileRenderTransform(i,t),t.viewState.rotation,r,void 0,t.declutterTree)}e.globalAlpha=i}getTileRenderTransform(t,e){const i=e.pixelRatio,n=e.viewState,r=n.center,s=n.resolution,o=n.rotation,a=e.size,l=Math.round(a[0]*i),h=Math.round(a[1]*i),c=this.getLayer().getSource().getTileGridForProjection(e.viewState.projection),u=t.tileCoord,d=c.getTileCoordExtent(t.wrappedTileCoord),g=c.getTileCoordExtent(u,this.tmpExtent)[0]-d[0];return kt(Xt(this.inversePixelTransform.slice(),1/i,1/i),this.getRenderTransform(r,s,o,i,l,h,g))}postRender(t,e){const i=e.viewHints,n=!(i[Wo]||i[Zo]);this.renderedPixelToCoordinateTransform_=e.pixelToCoordinateTransform.slice(),this.renderedRotation_=e.viewState.rotation;const r=this.getLayer(),s=r.getRenderMode(),o=t.globalAlpha;t.globalAlpha=r.getOpacity();const a=Lm[s],l=e.viewState,h=l.rotation,c=r.getSource(),u=c.getTileGridForProjection(l.projection).getZForResolution(l.resolution,c.zDirection),d=this.renderedTiles,g=[],f=[];let p=!0;for(let i=d.length-1;i>=0;--i){const s=d[i];p=p&&!s.getReplayState(r).dirty;const o=s.executorGroups[X(r)].filter((t=>t.hasExecutors(a)));if(0===o.length)continue;const l=this.getTileRenderTransform(s,e),c=s.tileCoord[0];let m=!1;const _=o[0].getClipCoords(l);if(_){for(let e=0,i=g.length;e=e[0]||(t[1]<=e[1]&&t[3]>=e[1]||Ee(t,this.intersectsCoordinate.bind(this)))}return!1}setCenter(t){const e=this.stride,i=this.flatCoordinates[e]-this.flatCoordinates[0],n=t.slice();n[e]=n[0]+i;for(let i=1;i1?o:2,s=s||new Array(o);for(let e=0;e>1;r1?new Km(i,"XY",r):new Ar(i,"XY",n);default:throw new Error("Invalid geometry type:"+e)}}Hm.prototype.getEndss=Hm.prototype.getEnds,Hm.prototype.getFlatCoordinates=Hm.prototype.getOrientedFlatCoordinates;var Jm=Hm;let Qm=null;function t_(t){Qm=t;const e=Object.keys(t.defs),i=e.length;let n,r;for(n=0;n0&&c.length>0;)f=c.pop(),r=l.pop(),o=h.pop(),_=f.toString(),_ in u||(n.push(o[0],o[1]),u[_]=!0),p=c.pop(),s=l.pop(),a=h.pop(),m=(f+p)/2,d=t(m),g=e(d),yi(g[0],g[1],o[0],o[1],a[0],a[1]){const e=t.get("graticule_label");return this.lonLabelStyleBase_.getText().setText(e),this.lonLabelStyleBase_},this.latLabelStyleBase_=new pf({text:void 0!==t.latLabelStyle?t.latLabelStyle.clone():new _f({font:"12px Calibri,sans-serif",textAlign:"right",fill:new Qg({color:"rgba(0,0,0,1)"}),stroke:new lf({color:"rgba(255,255,255,1)",width:3})})}),this.latLabelStyle_=t=>{const e=t.get("graticule_label");return this.latLabelStyleBase_.getText().setText(e),this.latLabelStyleBase_},this.meridiansLabels_=[],this.parallelsLabels_=[],this.addEventListener(As,this.drawLabels_.bind(this))),this.intervals_=void 0!==t.intervals?t.intervals:a_,this.setSource(new uc({loader:this.loaderFunction.bind(this),strategy:this.strategyFunction.bind(this),features:new H,overlaps:!1,useSpatialIndex:!1,wrapX:t.wrapX})),this.featurePool_=[],this.lineStyle_=new pf({stroke:this.strokeStyle_}),this.loadedExtent_=null,this.renderedExtent_=null,this.renderedResolution_=null,this.setRenderOrder(null)}strategyFunction(t,e){let i=t.slice();return this.projection_&&this.getSource().getWrapX()&&Xe(i,this.projection_),this.loadedExtent_&&(_e(this.loadedExtent_,i,e)?i=this.loadedExtent_.slice():this.getSource().removeLoadedExtent(this.loadedExtent_)),[i]}loaderFunction(t,e,i){this.loadedExtent_=t;const n=this.getSource(),r=Ae(this.getExtent()||[-1/0,-1/0,1/0,1/0],t);if(this.renderedExtent_&&me(this.renderedExtent_,r)&&this.renderedResolution_===e)return;if(this.renderedExtent_=r,this.renderedResolution_=e,ke(r))return;const s=Pe(r),o=e*e/4;(!this.projection_||!fn(this.projection_,i))&&this.updateProjectionInfo_(i),this.createGraticule_(r,s,e,o);let a,l=this.meridians_.length+this.parallels_.length;for(this.meridiansLabels_&&(l+=this.meridians_.length),this.parallelsLabels_&&(l+=this.parallels_.length);l>this.featurePool_.length;)a=new Ot,this.featurePool_.push(a);const h=n.getFeaturesCollection();h.clear();let c,u,d=0;for(c=0,u=this.meridians_.length;cMath.PI/2}const d=Jl(t);for(let t=a;t<=l;++t){let i,n,c,g,f=this.meridians_.length+this.parallels_.length;if(this.meridiansLabels_)for(n=0,c=this.meridiansLabels_.length;n=a?(t[0]=o[0],t[2]=o[2]):s=!0);const l=[_i(e[0],this.minX_,this.maxX_),_i(e[1],this.minY_,this.maxY_)],h=this.toLonLatTransform_(l);isNaN(h[1])&&(h[1]=Math.abs(this.maxLat_)>=Math.abs(this.minLat_)?this.maxLat_:this.minLat_);let c=_i(h[0],this.minLon_,this.maxLon_),u=_i(h[1],this.minLat_,this.maxLat_);const d=this.maxLines_;let g,f,p,m,_=t;s||(_=[_i(t[0],this.minX_,this.maxX_),_i(t[1],this.minY_,this.maxY_),_i(t[2],this.minX_,this.maxX_),_i(t[3],this.minY_,this.maxY_)]);const y=Ue(_,this.toLonLatTransform_,void 0,8);let x=y[3],v=y[2],S=y[1],w=y[0];if(s||(ae(_,this.bottomLeft_)&&(w=this.minLon_,S=this.minLat_),ae(_,this.bottomRight_)&&(v=this.maxLon_,S=this.minLat_),ae(_,this.topLeft_)&&(w=this.minLon_,x=this.maxLat_),ae(_,this.topRight_)&&(v=this.maxLon_,x=this.maxLat_),x=_i(x,u,this.maxLat_),v=_i(v,c,this.maxLon_),S=_i(S,this.minLat_,u),w=_i(w,this.minLon_,c)),c=Math.floor(c/r)*r,m=_i(c,this.minLon_,this.maxLon_),f=this.addMeridian_(m,S,x,n,t,0),g=0,s)for(;(m-=r)>=w&&g++n[s]&&(r=s,s=1);const o=Math.max(e[1],n[r]),a=Math.min(e[3],n[s]),l=_i(e[1]+Math.abs(e[1]-e[3])*this.lonLabelPosition_,o,a),h=[n[r-1]+(n[s-1]-n[r-1])*(l-n[r])/(n[s]-n[r]),l],c=this.meridiansLabels_[i].geom;return c.setCoordinates(h),c}getMeridians(){return this.meridians_}getParallel_(t,e,i,n,r){const s=s_(t,e,i,this.projection_,n);let o=this.parallels_[r];return o?(o.setFlatCoordinates("XY",s),o.changed()):o=new zm(s,"XY"),o}getParallelPoint_(t,e,i){const n=t.getFlatCoordinates();let r=0,s=n.length-2;n[r]>n[s]&&(r=s,s=0);const o=Math.max(e[0],n[r]),a=Math.min(e[2],n[s]),l=_i(e[0]+Math.abs(e[0]-e[2])*this.latLabelPosition_,o,a),h=[l,n[r+1]+(n[s+1]-n[r+1])*(l-n[r])/(n[s]-n[r])],c=this.parallelsLabels_[i].geom;return c.setCoordinates(h),c}getParallels(){return this.parallels_}updateProjectionInfo_(t){const e=an("EPSG:4326"),i=t.getWorldExtent();this.maxLat_=i[3],this.maxLon_=i[2],this.minLat_=i[1],this.minLon_=i[0];const n=mn(t,e);if(this.minLon_=Math.abs(this.minLat_)?this.maxLat_:this.minLat_),this.projection_=t}};const h_="blur",c_="gradient",u_="radius",d_=["#00f","#0ff","#0f0","#ff0","#f00"];var g_=class extends Af{constructor(t){t=t||{};const e=Object.assign({},t);delete e.gradient,delete e.radius,delete e.blur,delete e.weight,super(e),this.gradient_=null,this.addChangeListener(c_,this.handleGradientChanged_),this.setGradient(t.gradient?t.gradient:d_),this.setBlur(void 0!==t.blur?t.blur:15),this.setRadius(void 0!==t.radius?t.radius:8);const i=t.weight?t.weight:"weight";this.weightFunction_="string"==typeof i?function(t){return t.get(i)}:i,this.setRenderOrder(null)}getBlur(){return this.get(h_)}getGradient(){return this.get(c_)}getRadius(){return this.get(u_)}handleGradientChanged_(){this.gradient_=function(t){const e=1,i=256,n=_t(e,i),r=n.createLinearGradient(0,0,e,i),s=1/(t.length-1);for(let e=0,i=t.length;e{const e=this.weightFunction_(t);return void 0!==e?_i(e,0,1):1}}],vertexShader:"\n precision mediump float;\n uniform mat4 u_projectionMatrix;\n uniform mat4 u_offsetScaleMatrix;\n uniform float u_size;\n attribute vec2 a_position;\n attribute float a_index;\n attribute float a_weight;\n\n varying vec2 v_texCoord;\n varying float v_weight;\n\n void main(void) {\n mat4 offsetMatrix = u_offsetScaleMatrix;\n float offsetX = a_index == 0.0 || a_index == 3.0 ? -u_size / 2.0 : u_size / 2.0;\n float offsetY = a_index == 0.0 || a_index == 1.0 ? -u_size / 2.0 : u_size / 2.0;\n vec4 offsets = offsetMatrix * vec4(offsetX, offsetY, 0.0, 0.0);\n gl_Position = u_projectionMatrix * vec4(a_position, 0.0, 1.0) + offsets;\n float u = a_index == 0.0 || a_index == 3.0 ? 0.0 : 1.0;\n float v = a_index == 0.0 || a_index == 1.0 ? 0.0 : 1.0;\n v_texCoord = vec2(u, v);\n v_weight = a_weight;\n }",fragmentShader:"\n precision mediump float;\n uniform float u_blurSlope;\n\n varying vec2 v_texCoord;\n varying float v_weight;\n\n void main(void) {\n vec2 texCoord = v_texCoord * 2.0 - vec2(1.0, 1.0);\n float sqRadius = texCoord.x * texCoord.x + texCoord.y * texCoord.y;\n float value = (1.0 - sqrt(sqRadius)) * u_blurSlope;\n float alpha = smoothstep(0.0, 1.0, value) * v_weight;\n gl_FragColor = vec4(alpha, alpha, alpha, alpha);\n }",hitVertexShader:"\n precision mediump float;\n uniform mat4 u_projectionMatrix;\n uniform mat4 u_offsetScaleMatrix;\n uniform float u_size;\n attribute vec2 a_position;\n attribute float a_index;\n attribute float a_weight;\n attribute vec4 a_hitColor;\n\n varying vec2 v_texCoord;\n varying float v_weight;\n varying vec4 v_hitColor;\n\n void main(void) {\n mat4 offsetMatrix = u_offsetScaleMatrix;\n float offsetX = a_index == 0.0 || a_index == 3.0 ? -u_size / 2.0 : u_size / 2.0;\n float offsetY = a_index == 0.0 || a_index == 1.0 ? -u_size / 2.0 : u_size / 2.0;\n vec4 offsets = offsetMatrix * vec4(offsetX, offsetY, 0.0, 0.0);\n gl_Position = u_projectionMatrix * vec4(a_position, 0.0, 1.0) + offsets;\n float u = a_index == 0.0 || a_index == 3.0 ? 0.0 : 1.0;\n float v = a_index == 0.0 || a_index == 1.0 ? 0.0 : 1.0;\n v_texCoord = vec2(u, v);\n v_hitColor = a_hitColor;\n v_weight = a_weight;\n }",hitFragmentShader:"\n precision mediump float;\n uniform float u_blurSlope;\n\n varying vec2 v_texCoord;\n varying float v_weight;\n varying vec4 v_hitColor;\n\n void main(void) {\n vec2 texCoord = v_texCoord * 2.0 - vec2(1.0, 1.0);\n float sqRadius = texCoord.x * texCoord.x + texCoord.y * texCoord.y;\n float value = (1.0 - sqrt(sqRadius)) * u_blurSlope;\n float alpha = smoothstep(0.0, 1.0, value) * v_weight;\n if (alpha < 0.05) {\n discard;\n }\n\n gl_FragColor = v_hitColor;\n }",uniforms:{u_size:()=>2*(this.get(u_)+this.get(h_)),u_blurSlope:()=>this.get(u_)/Math.max(1,this.get(h_))},postProcesses:[{fragmentShader:"\n precision mediump float;\n\n uniform sampler2D u_image;\n uniform sampler2D u_gradientTexture;\n uniform float u_opacity;\n\n varying vec2 v_texCoord;\n\n void main() {\n vec4 color = texture2D(u_image, v_texCoord);\n gl_FragColor.a = color.a * u_opacity;\n gl_FragColor.rgb = texture2D(u_gradientTexture, vec2(0.5, color.a)).rgb;\n gl_FragColor.rgb *= gl_FragColor.a;\n }",uniforms:{u_gradientTexture:()=>this.gradient_,u_opacity:()=>this.getOpacity()}}]})}renderDeclutter(){}};var f_=class{constructor(){this.dataProjection=void 0,this.defaultFeatureProjection=void 0,this.supportedMediaTypes=null}getReadOptions(t,e){if(e){let i=e.dataProjection?an(e.dataProjection):this.readProjection(t);e.extent&&i&&"tile-pixels"===i.getUnits()&&(i=an(i),i.setWorldExtent(e.extent)),e={dataProjection:i,featureProjection:e.featureProjection}}return this.adaptOptions(e)}adaptOptions(t){return Object.assign({dataProjection:this.dataProjection,featureProjection:this.defaultFeatureProjection},t)}getType(){return z()}readFeature(t,e){return z()}readFeatures(t,e){return z()}readGeometry(t,e){return z()}readProjection(t){return z()}writeFeature(t,e){return z()}writeFeatures(t,e){return z()}writeGeometry(t,e){return z()}};function p_(t,e,i){const n=i?an(i.featureProjection):null,r=i?an(i.dataProjection):null;let s;if(s=n&&r&&!fn(n,r)?(e?t.clone():t).transform(e?n:r,e?r:n):t,e&&i&&void 0!==i.decimals){const e=Math.pow(10,i.decimals),n=function(t){for(let i=0,n=t.length;i */ +read:function(t,e,i,n,r){var s,o,a=8*r-n-1,l=(1<>1,c=-7,u=i?r-1:0,d=i?-1:1,g=t[e+u];for(u+=d,s=g&(1<<-c)-1,g>>=-c,c+=a;c>0;s=256*s+t[e+u],u+=d,c-=8);for(o=s&(1<<-c)-1,s>>=-c,c+=n;c>0;o=256*o+t[e+u],u+=d,c-=8);if(0===s)s=1-h;else{if(s===l)return o?NaN:1/0*(g?-1:1);o+=Math.pow(2,n),s-=h}return(g?-1:1)*o*Math.pow(2,s-n)},write:function(t,e,i,n,r,s){var o,a,l,h=8*s-r-1,c=(1<>1,d=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,g=n?0:s-1,f=n?1:-1,p=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,o=c):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+u>=1?d/l:d*Math.pow(2,1-u))*l>=2&&(o++,l/=2),o+u>=c?(a=0,o=c):o+u>=1?(a=(e*l-1)*Math.pow(2,r),o+=u):(a=e*Math.pow(2,u-1)*Math.pow(2,r),o=0));r>=8;t[i+g]=255&a,g+=f,a/=256,r-=8);for(o=o<0;t[i+g]=255&o,g+=f,o/=256,h-=8);t[i+g-f]|=128*p}},y_=v_,x_=__;function v_(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length}v_.Varint=0,v_.Fixed64=1,v_.Bytes=2,v_.Fixed32=5;var S_=4294967296,w_=1/S_,T_="undefined"==typeof TextDecoder?null:new TextDecoder("utf8");function E_(t){return t.type===v_.Bytes?t.readVarint()+t.pos:t.pos+1}function C_(t,e,i){return i?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function R_(t,e,i){var n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(7*Math.LN2));i.realloc(n);for(var r=i.pos-1;r>=t;r--)i.buf[r+n]=i.buf[r]}function b_(t,e){for(var i=0;i>>8,t[i+2]=e>>>16,t[i+3]=e>>>24}function k_(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}v_.prototype={destroy:function(){this.buf=null},readFields:function(t,e,i){for(i=i||this.length;this.pos>3,s=this.pos;this.type=7&n,t(r,e,this),this.pos===s&&this.skip(n)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=D_(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=k_(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=D_(this.buf,this.pos)+D_(this.buf,this.pos+4)*S_;return this.pos+=8,t},readSFixed64:function(){var t=D_(this.buf,this.pos)+k_(this.buf,this.pos+4)*S_;return this.pos+=8,t},readFloat:function(){var t=x_.read(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=x_.read(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,i,n=this.buf;return e=127&(i=n[this.pos++]),i<128?e:(e|=(127&(i=n[this.pos++]))<<7,i<128?e:(e|=(127&(i=n[this.pos++]))<<14,i<128?e:(e|=(127&(i=n[this.pos++]))<<21,i<128?e:function(t,e,i){var n,r,s=i.buf;if(r=s[i.pos++],n=(112&r)>>4,r<128)return C_(t,n,e);if(r=s[i.pos++],n|=(127&r)<<3,r<128)return C_(t,n,e);if(r=s[i.pos++],n|=(127&r)<<10,r<128)return C_(t,n,e);if(r=s[i.pos++],n|=(127&r)<<17,r<128)return C_(t,n,e);if(r=s[i.pos++],n|=(127&r)<<24,r<128)return C_(t,n,e);if(r=s[i.pos++],n|=(1&r)<<31,r<128)return C_(t,n,e);throw new Error("Expected varint not more than 10 bytes")}(e|=(15&(i=n[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=this.pos;return this.pos=t,t-e>=12&&T_?function(t,e,i){return T_.decode(t.subarray(e,i))}(this.buf,e,t):function(t,e,i){var n="",r=e;for(;r239?4:l>223?3:l>191?2:1;if(r+c>i)break;1===c?l<128&&(h=l):2===c?128==(192&(s=t[r+1]))&&(h=(31&l)<<6|63&s)<=127&&(h=null):3===c?(s=t[r+1],o=t[r+2],128==(192&s)&&128==(192&o)&&((h=(15&l)<<12|(63&s)<<6|63&o)<=2047||h>=55296&&h<=57343)&&(h=null)):4===c&&(s=t[r+1],o=t[r+2],a=t[r+3],128==(192&s)&&128==(192&o)&&128==(192&a)&&((h=(15&l)<<18|(63&s)<<12|(63&o)<<6|63&a)<=65535||h>=1114112)&&(h=null)),null===h?(h=65533,c=1):h>65535&&(h-=65536,n+=String.fromCharCode(h>>>10&1023|55296),h=56320|1023&h),n+=String.fromCharCode(h),r+=c}return n}(this.buf,e,t)},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){if(this.type!==v_.Bytes)return t.push(this.readVarint(e));var i=E_(this);for(t=t||[];this.pos127;);else if(e===v_.Bytes)this.pos=this.readVarint()+this.pos;else if(e===v_.Fixed32)this.pos+=4;else{if(e!==v_.Fixed64)throw new Error("Unimplemented type: "+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e268435455||t<0?function(t,e){var i,n;t>=0?(i=t%4294967296|0,n=t/4294967296|0):(n=~(-t/4294967296),4294967295^(i=~(-t%4294967296))?i=i+1|0:(i=0,n=n+1|0));if(t>=0x10000000000000000||t<-0x10000000000000000)throw new Error("Given varint doesn't fit into 10 bytes");e.realloc(10),function(t,e,i){i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos]=127&t}(i,0,e),function(t,e){var i=(7&t)<<4;if(e.buf[e.pos++]|=i|((t>>>=3)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;e.buf[e.pos++]=127&t}(n,e)}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127))))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,i){for(var n,r,s=0;s55295&&n<57344){if(!r){n>56319||s+1===e.length?(t[i++]=239,t[i++]=191,t[i++]=189):r=n;continue}if(n<56320){t[i++]=239,t[i++]=191,t[i++]=189,r=n;continue}n=r-55296<<10|n-56320|65536,r=null}else r&&(t[i++]=239,t[i++]=191,t[i++]=189,r=null);n<128?t[i++]=n:(n<2048?t[i++]=n>>6|192:(n<65536?t[i++]=n>>12|224:(t[i++]=n>>18|240,t[i++]=n>>12&63|128),t[i++]=n>>6&63|128),t[i++]=63&n|128)}return i}(this.buf,t,this.pos);var i=this.pos-e;i>=128&&R_(e,i,this),this.pos=e-1,this.writeVarint(i),this.pos+=i},writeFloat:function(t){this.realloc(4),x_.write(this.buf,t,this.pos,!0,23,4),this.pos+=4},writeDouble:function(t){this.realloc(8),x_.write(this.buf,t,this.pos,!0,52,8),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var i=0;i=128&&R_(i,n,this),this.pos=i-1,this.writeVarint(n),this.pos+=n},writeMessage:function(t,e,i){this.writeTag(t,v_.Bytes),this.writeRawMessage(e,i)},writePackedVarint:function(t,e){e.length&&this.writeMessage(t,b_,e)},writePackedSVarint:function(t,e){e.length&&this.writeMessage(t,P_,e)},writePackedBoolean:function(t,e){e.length&&this.writeMessage(t,F_,e)},writePackedFloat:function(t,e){e.length&&this.writeMessage(t,I_,e)},writePackedDouble:function(t,e){e.length&&this.writeMessage(t,L_,e)},writePackedFixed32:function(t,e){e.length&&this.writeMessage(t,M_,e)},writePackedSFixed32:function(t,e){e.length&&this.writeMessage(t,A_,e)},writePackedFixed64:function(t,e){e.length&&this.writeMessage(t,O_,e)},writePackedSFixed64:function(t,e){e.length&&this.writeMessage(t,N_,e)},writeBytesField:function(t,e){this.writeTag(t,v_.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,v_.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,v_.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,v_.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,v_.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,v_.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,v_.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,v_.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,v_.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,v_.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}};function j_(t,e,i){if(3===t){const t={keys:[],values:[],features:[]},n=i.readVarint()+i.pos;i.readFields(B_,t,n),t.length=t.features.length,t.length&&(e[t.name]=t)}}function B_(t,e,i){if(15===t)e.version=i.readVarint();else if(1===t)e.name=i.readString();else if(5===t)e.extent=i.readVarint();else if(2===t)e.features.push(i.pos);else if(3===t)e.keys.push(i.readString());else if(4===t){let n=null;const r=i.readVarint()+i.pos;for(;i.pos>3)?i.readString():2===t?i.readFloat():3===t?i.readDouble():4===t?i.readVarint64():5===t?i.readVarint():6===t?i.readSVarint():7===t?i.readBoolean():null;e.values.push(n)}}function z_(t,e,i){if(1==t)e.id=i.readVarint();else if(2==t){const t=i.readVarint()+i.pos;for(;i.pos>3}o--,1===s||2===s?(a+=t.readSVarint(),l+=t.readSVarint(),1===s&&h>c&&(n.push(h),c=h),i.push(a,l),h+=2):7===s?h>c&&(i.push(i[c],i[c+1]),h+=2):Ft(!1,59)}h>c&&(n.push(h),c=h)}createFeature_(t,e,i){const n=e.type;if(0===n)return null;let r;const s=e.properties;let o;this.idProperty_?(o=s[this.idProperty_],delete s[this.idProperty_]):o=e.id,s[this.layerName_]=e.layer.name;const a=[],l=[];this.readRawGeometry_(t,e,a,l);const h=function(t,e){let i;1===t?i=1===e?"Point":"MultiPoint":2===t?i=1===e?"LineString":"MultiLineString":3===t&&(i="Polygon");return i}(n,l.length);if(this.featureClass_===Jm)r=new this.featureClass_(h,a,l,s,o),r.transform(i.dataProjection);else{let t;if("Polygon"==h){const e=Fr(a,l);t=e.length>1?new Km(a,"XY",e):new Ar(a,"XY",l)}else t="Point"===h?new dr(a,"XY"):"LineString"===h?new zm(a,"XY"):"MultiPoint"===h?new Wm(a,"XY"):"MultiLineString"===h?new Xm(a,"XY",l):null;r=new(0,this.featureClass_),this.geometryName_&&r.setGeometryName(this.geometryName_);const e=p_(t,!1,i);r.setGeometry(e),void 0!==o&&r.setId(o),r.setProperties(s,!0)}return r}getType(){return"arraybuffer"}readFeatures(t,e){const i=this.layers_,n=an((e=this.adaptOptions(e)).dataProjection);n.setWorldExtent(e.extent),e.dataProjection=n;const r=new y_(t),s=r.readFields(j_,{}),o=[];for(const t in s){if(i&&!i.includes(t))continue;const a=s[t],l=a?[0,0,a.extent,a.extent]:null;n.setExtent(l);for(let t=0,i=a.length;t{i.setState("ready")})).catch((t=>{this.dispatchEvent(new W_(t));this.getSource().setState("error")})),void 0===this.getBackground()&&olms.applyBackground(this,t.styleUrl,{accessToken:this.accessToken})}};var Y_=class extends Af{constructor(t){t=t||{};const e=Object.assign({},t);delete e.imageRatio,super(e),this.imageRatio_=void 0!==t.imageRatio?t.imageRatio:1}getImageRatio(){return this.imageRatio_}createRenderer(){return new Pm(this)}};var K_=class extends ks{constructor(t){super(Object.assign({},t)),this.parseResult_=Wg(t.style),this.styleVariables_=t.style.variables||{},this.hitDetectionDisabled_=!!t.disableHitDetection}createRenderer(){return new mp(this,{vertexShader:this.parseResult_.builder.getSymbolVertexShader(),fragmentShader:this.parseResult_.builder.getSymbolFragmentShader(),hitVertexShader:!this.hitDetectionDisabled_&&this.parseResult_.builder.getSymbolVertexShader(!0),hitFragmentShader:!this.hitDetectionDisabled_&&this.parseResult_.builder.getSymbolFragmentShader(!0),uniforms:this.parseResult_.uniforms,attributes:this.parseResult_.attributes})}updateStyleVariables(t){Object.assign(this.styleVariables_,t),this.changed()}};function q_(t,e){const i=`\n attribute vec2 ${og.TEXTURE_COORD};\n uniform mat4 ${sg.TILE_TRANSFORM};\n uniform float ${sg.TEXTURE_PIXEL_WIDTH};\n uniform float ${sg.TEXTURE_PIXEL_HEIGHT};\n uniform float ${sg.TEXTURE_RESOLUTION};\n uniform float ${sg.TEXTURE_ORIGIN_X};\n uniform float ${sg.TEXTURE_ORIGIN_Y};\n uniform float ${sg.DEPTH};\n\n varying vec2 v_textureCoord;\n varying vec2 v_mapCoord;\n\n void main() {\n v_textureCoord = ${og.TEXTURE_COORD};\n v_mapCoord = vec2(\n ${sg.TEXTURE_ORIGIN_X} + ${sg.TEXTURE_RESOLUTION} * ${sg.TEXTURE_PIXEL_WIDTH} * v_textureCoord[0],\n ${sg.TEXTURE_ORIGIN_Y} - ${sg.TEXTURE_RESOLUTION} * ${sg.TEXTURE_PIXEL_HEIGHT} * v_textureCoord[1]\n );\n gl_Position = ${sg.TILE_TRANSFORM} * vec4(${og.TEXTURE_COORD}, ${sg.DEPTH}, 1.0);\n }\n `,n={inFragmentShader:!0,variables:[],attributes:[],stringLiteralsMap:{},functions:{},bandCount:e},r=[];if(void 0!==t.color){const e=Ig(n,t.color,mg);r.push(`color = ${e};`)}if(void 0!==t.contrast){const e=Ig(n,t.contrast,fg);r.push(`color.rgb = clamp((${e} + 1.0) * color.rgb - (${e} / 2.0), vec3(0.0, 0.0, 0.0), vec3(1.0, 1.0, 1.0));`)}if(void 0!==t.exposure){const e=Ig(n,t.exposure,fg);r.push(`color.rgb = clamp((${e} + 1.0) * color.rgb, vec3(0.0, 0.0, 0.0), vec3(1.0, 1.0, 1.0));`)}if(void 0!==t.saturation){const e=Ig(n,t.saturation,fg);r.push(`\n float saturation = ${e} + 1.0;\n float sr = (1.0 - saturation) * 0.2126;\n float sg = (1.0 - saturation) * 0.7152;\n float sb = (1.0 - saturation) * 0.0722;\n mat3 saturationMatrix = mat3(\n sr + saturation, sr, sr,\n sg, sg + saturation, sg,\n sb, sb, sb + saturation\n );\n color.rgb = clamp(saturationMatrix * color.rgb, vec3(0.0, 0.0, 0.0), vec3(1.0, 1.0, 1.0));\n `)}if(void 0!==t.gamma){const e=Ig(n,t.gamma,fg);r.push(`color.rgb = pow(color.rgb, vec3(1.0 / ${e}));`)}if(void 0!==t.brightness){const e=Ig(n,t.brightness,fg);r.push(`color.rgb = clamp(color.rgb + ${e}, vec3(0.0, 0.0, 0.0), vec3(1.0, 1.0, 1.0));`)}const s={},o=n.variables.length;if(o>1&&!t.variables)throw new Error(`Missing variables in style (expected ${n.variables})`);for(let e=0;e ${sg.RENDER_EXTENT}[2] ||\n v_mapCoord[1] > ${sg.RENDER_EXTENT}[3]\n ) {\n discard;\n }\n\n vec4 color = texture2D(${sg.TILE_TEXTURE_ARRAY}[0], v_textureCoord);\n\n ${r.join("\n")}\n\n if (color.a == 0.0) {\n discard;\n }\n\n gl_FragColor = color;\n gl_FragColor.rgb *= gl_FragColor.a;\n gl_FragColor *= ${sg.TRANSITION_ALPHA};\n }`,uniforms:s,paletteTextures:n.paletteTextures}}class H_ extends fu{constructor(t){const e=(t=t?Object.assign({},t):{}).style||{};delete t.style;const i=t.cacheSize;delete t.cacheSize,super(t),this.sources_=t.sources,this.renderedSource_=null,this.renderedResolution_=NaN,this.style_=e,this.cacheSize_=i,this.styleVariables_=this.style_.variables||{},this.addChangeListener(Is,this.handleSourceUpdate_)}getSources(t,e){const i=this.getSource();return this.sources_?"function"==typeof this.sources_?this.sources_(t,e):this.sources_:i?[i]:[]}getRenderSource(){return this.renderedSource_||this.getSource()}getSourceState(){const t=this.getRenderSource();return t?t.getState():"undefined"}handleSourceUpdate_(){this.hasRenderer()&&this.getRenderer().clearCache(),this.getSource()&&this.setStyle(this.style_)}getSourceBandCount_(){const t=Number.MAX_SAFE_INTEGER,e=this.getSources([-t,-t,t,t],t);return e&&e.length&&"bandCount"in e[0]?e[0].bandCount:4}createRenderer(){const t=q_(this.style_,this.getSourceBandCount_());return new gg(this,{vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,uniforms:t.uniforms,cacheSize:this.cacheSize_,paletteTextures:t.paletteTextures})}renderSources(t,e){const i=this.getRenderer();let n;for(let r=0,s=e.length;r{"ready"==e.getState()&&(e.removeEventListener("change",t),this.changed())};e.addEventListener("change",t)}r=r&&"ready"==i}const s=this.renderSources(t,n);if(this.getRenderer().renderComplete&&r)return this.renderedResolution_=i.resolution,s;if(this.renderedResolution_>.5*i.resolution){const e=this.getSources(t.extent,this.renderedResolution_).filter((t=>!n.includes(t)));if(e.length>0)return this.renderSources(t,e)}return s}setStyle(t){this.styleVariables_=t.variables||{},this.style_=t;const e=q_(this.style_,this.getSourceBandCount_());this.getRenderer().reset({vertexShader:e.vertexShader,fragmentShader:e.fragmentShader,uniforms:e.uniforms,paletteTextures:e.paletteTextures}),this.changed()}updateStyleVariables(t){Object.assign(this.styleVariables_,t),this.changed()}}H_.prototype.dispose;var $_=H_;const J_="addfeatures";class Q_ extends r{constructor(t,e,i,n){super(t),this.features=i,this.file=e,this.projection=n}}var ty=class extends Sa{constructor(t){t=t||{},super({handleEvent:f}),this.on,this.once,this.un,this.readAsBuffer_=!1,this.formats_=[];const e=t.formatConstructors?t.formatConstructors:[];for(let t=0,i=e.length;t0){this.source_&&(this.source_.clear(),this.source_.addFeatures(l)),this.dispatchEvent(new Q_(J_,t,l,s));break}}}registerListeners_(){const t=this.getMap();if(t){const e=this.target?this.target:t.getViewport();this.dropListenKeys_=[N(e,I,this.handleDrop,this),N(e,b,this.handleStop,this),N(e,P,this.handleStop,this),N(e,I,this.handleStop,this)]}}setActive(t){!this.getActive()&&t&&this.registerListeners_(),this.getActive()&&!t&&this.unregisterListeners_(),super.setActive(t)}setMap(t){this.unregisterListeners_(),super.setMap(t),this.getActive()&&this.registerListeners_()}tryReadFeatures_(t,e,i){try{return t.readFeatures(e,i)}catch(t){return null}}unregisterListeners_(){this.dropListenKeys_&&(this.dropListenKeys_.forEach(G),this.dropListenKeys_=null)}handleDrop(t){const e=t.dataTransfer.files;for(let t=0,i=e.length;t1?1:-1;return e.endInteraction(this.duration_,i),this.lastScaleDelta_=0,!1}handleDownEvent(t){return!!Ga(t)&&(!!this.condition_(t)&&(t.map.getView().beginInteraction(),this.lastAngle_=void 0,this.lastMagnitude_=void 0,!0))}};const iy="drawstart",ny="drawend",ry="drawabort";class sy extends r{constructor(t,e){super(t),this.feature=e}}function oy(t,e){return xi(t[0],t[1],e[0],e[1])}function ay(t,e){const i=t.length;return e<0?t[e+i]:e>=i?t[e-i]:t[e]}function ly(t,e,i){let n,r;eo){return oy(fy(t,n),fy(t,r))}let a=0;if(n=i?n-=i:n<0&&(n+=i);let s=n+1;s>=i&&(s-=i);const o=t[n],a=o[0],l=o[1],h=t[s];return[a+(h[0]-a)*r,l+(h[1]-l)*r]}function py(){const t=gf();return function(e,i){return t[e.getGeometry().getType()]}}var my=class extends Ea{constructor(t){const e=t;e.stopDown||(e.stopDown=p),super(e),this.on,this.once,this.un,this.shouldHandle_=!1,this.downPx_=null,this.downTimeout_,this.lastDragTime_,this.pointerType_,this.freehand_=!1,this.source_=t.source?t.source:null,this.features_=t.features?t.features:null,this.snapTolerance_=t.snapTolerance?t.snapTolerance:12,this.type_=t.type,this.mode_=function(t){switch(t){case"Point":case"MultiPoint":return"Point";case"LineString":case"MultiLineString":return"LineString";case"Polygon":case"MultiPolygon":return"Polygon";case"Circle":return"Circle";default:throw new Error("Invalid type: "+t)}}(this.type_),this.stopClick_=!!t.stopClick,this.minPoints_=t.minPoints?t.minPoints:"Polygon"===this.mode_?3:2,this.maxPoints_="Circle"===this.mode_?2:t.maxPoints?t.maxPoints:1/0,this.finishCondition_=t.finishCondition?t.finishCondition:f,this.geometryLayout_=t.geometryLayout?t.geometryLayout:"XY";let i=t.geometryFunction;if(!i){const t=this.mode_;if("Circle"===t)i=function(t,e,i){const n=e||new Am([NaN,NaN]),r=Tn(t[0],i),s=ji(r,Tn(t[t.length-1],i));n.setCenterAndRadius(r,Math.sqrt(s),this.geometryLayout_);const o=Sn();return o&&n.transform(i,o),n};else{let e;"Point"===t?e=dr:"LineString"===t?e=zm:"Polygon"===t&&(e=Ar),i=function(i,n,r){return n?"Polygon"===t?i[0].length?n.setCoordinates([i[0].concat([i[0][0]])],this.geometryLayout_):n.setCoordinates([],this.geometryLayout_):n.setCoordinates(i,this.geometryLayout_):n=new e(i,this.geometryLayout_),n}}}this.geometryFunction_=i,this.dragVertexDelay_=void 0!==t.dragVertexDelay?t.dragVertexDelay:500,this.finishCoordinate_=null,this.sketchFeature_=null,this.sketchPoint_=null,this.sketchCoords_=null,this.sketchLine_=null,this.sketchLineCoords_=null,this.squaredClickTolerance_=t.clickTolerance?t.clickTolerance*t.clickTolerance:36,this.overlay_=new i_({source:new uc({useSpatialIndex:!1,wrapX:!!t.wrapX&&t.wrapX}),style:t.style?t.style:py(),updateWhileInteracting:!0}),this.geometryName_=t.geometryName,this.condition_=t.condition?t.condition:Oa,this.freehandCondition_,t.freehand?this.freehandCondition_=La:this.freehandCondition_=t.freehandCondition?t.freehandCondition:Na,this.traceCondition_,this.setTrace(t.trace||!1),this.traceState_={active:!1},this.traceSource_=t.traceSource||t.source||null,this.addChangeListener(ya,this.updateState_)}setTrace(t){let e;e=t?!0===t?La:t:Ma,this.traceCondition_=e}setMap(t){super.setMap(t),this.updateState_()}getOverlay(){return this.overlay_}handleEvent(t){t.originalEvent.type===E&&t.originalEvent.preventDefault(),this.freehand_="Point"!==this.mode_&&this.freehandCondition_(t);let e=t.type===Ro.POINTERMOVE,i=!0;if(!this.freehand_&&this.lastDragTime_&&t.type===Ro.POINTERDRAG){Date.now()-this.lastDragTime_>=this.dragVertexDelay_?(this.downPx_=t.pixel,this.shouldHandle_=!this.freehand_,e=!0):this.lastDragTime_=void 0,this.shouldHandle_&&void 0!==this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0)}return this.freehand_&&t.type===Ro.POINTERDRAG&&null!==this.sketchFeature_?(this.addToDrawing_(t.coordinate),i=!1):this.freehand_&&t.type===Ro.POINTERDOWN?i=!1:e&&this.getPointerCount()<2?(i=t.type===Ro.POINTERMOVE,i&&this.freehand_?(this.handlePointerMove_(t),this.shouldHandle_&&t.originalEvent.preventDefault()):("mouse"===t.originalEvent.pointerType||t.type===Ro.POINTERDRAG&&void 0===this.downTimeout_)&&this.handlePointerMove_(t)):t.type===Ro.DBLCLICK&&(i=!1),super.handleEvent(t)&&i}handleDownEvent(t){return this.shouldHandle_=!this.freehand_,this.freehand_?(this.downPx_=t.pixel,this.finishCoordinate_||this.startDrawing_(t.coordinate),!0):this.condition_(t)?(this.lastDragTime_=Date.now(),this.downTimeout_=setTimeout((()=>{this.handlePointerMove_(new Co(Ro.POINTERMOVE,t.map,t.originalEvent,!1,t.frameState))}),this.dragVertexDelay_),this.downPx_=t.pixel,!0):(this.lastDragTime_=void 0,!1)}deactivateTrace_(){this.traceState_={active:!1}}toggleTraceState_(t){if(!this.traceSource_||!this.traceCondition_(t))return;if(this.traceState_.active)return void this.deactivateTrace_();const e=this.getMap(),i=ne([e.getCoordinateFromPixel([t.pixel[0]-this.snapTolerance_,t.pixel[1]+this.snapTolerance_]),e.getCoordinateFromPixel([t.pixel[0]+this.snapTolerance_,t.pixel[1]-this.snapTolerance_])]),n=this.traceSource_.getFeaturesInExtent(i);if(0===n.length)return;const r=function(t,e){const i=[];for(let n=0;nt.endIndex||!i&&et.endIndex)&&this.removeTracedCoordinates_(e,t.endIndex):(this.removeTracedCoordinates_(t.startIndex,t.endIndex),this.addTracedCoordinates_(t,t.startIndex,e))}removeTracedCoordinates_(t,e){if(t===e)return;let i=0;if(t0&&this.removeLastPoints_(i)}addTracedCoordinates_(t,e,i){if(e===i)return;const n=[];if(e=s;--e)n.push(ay(t.coordinates,e))}n.length&&this.appendCoordinates(n)}updateTrace_(t){const e=this.traceState_;if(!e.active)return;if(-1===e.targetIndex&&Bi(e.startPx,t.pixel)i.startIndex?hi.startIndex&&(h-=n.length)),l=h,a=t)}const h=e.targets[a];let c=h.ring;if(e.targetIndex===a&&c){const t=fy(h.coordinates,l);Bi(i.getPixelFromCoordinate(t),e.startPx)>n&&(c=!1)}if(c){const t=h.coordinates,e=t.length,i=h.startIndex,n=l;if(ithis.squaredClickTolerance_:s<=this.squaredClickTolerance_,!this.shouldHandle_)return}this.finishCoordinate_?(this.updateTrace_(t),this.modifyDrawing_(t.coordinate)):this.createOrUpdateSketchPoint_(t.coordinate.slice())}atFinish_(t,e){let i=!1;if(this.sketchFeature_){let n=!1,r=[this.finishCoordinate_];const s=this.mode_;if("Point"===s)i=!0;else if("Circle"===s)i=2===this.sketchCoords_.length;else if("LineString"===s)n=!e&&this.sketchCoords_.length>this.minPoints_;else if("Polygon"===s){const t=this.sketchCoords_;n=t[0].length>this.minPoints_,r=[t[0][0],t[0][t[0].length-2]],r=e?[t[0][0]]:[t[0][0],t[0][t[0].length-2]]}if(n){const e=this.getMap();for(let n=0,s=r.length;n=this.maxPoints_&&(this.freehand_?r.pop():n=!0),r.push(t.slice()),this.geometryFunction_(r,e,i)):"Polygon"===s&&(r=this.sketchCoords_[0],r.length>=this.maxPoints_&&(this.freehand_?r.pop():n=!0),r.push(t.slice()),n&&(this.finishCoordinate_=r[0]),this.geometryFunction_(this.sketchCoords_,e,i)),this.createOrUpdateSketchPoint_(t.slice()),this.updateSketchFeatures_(),n&&this.finishDrawing()}removeLastPoints_(t){if(!this.sketchFeature_)return;const e=this.sketchFeature_.getGeometry(),i=this.getMap().getView().getProjection(),n=this.mode_;for(let r=0;r=2){this.finishCoordinate_=t[t.length-2].slice();const e=this.finishCoordinate_.slice();t[t.length-1]=e,this.createOrUpdateSketchPoint_(e)}this.geometryFunction_(t,e,i),"Polygon"===e.getType()&&this.sketchLine_&&this.createOrUpdateCustomSketchLine_(e)}else if("Polygon"===n){t=this.sketchCoords_[0],t.splice(-2,1);const n=this.sketchLine_.getGeometry();if(t.length>=2){const e=t[t.length-2].slice();t[t.length-1]=e,this.createOrUpdateSketchPoint_(e)}n.setCoordinates(t),this.geometryFunction_(this.sketchCoords_,e,i)}if(1===t.length){this.abortDrawing();break}}this.updateSketchFeatures_()}removeLastPoint(){this.removeLastPoints_(1)}finishDrawing(){const t=this.abortDrawing_();if(!t)return;let e=this.sketchCoords_;const i=t.getGeometry(),n=this.getMap().getView().getProjection();"LineString"===this.mode_?(e.pop(),this.geometryFunction_(e,i,n)):"Polygon"===this.mode_&&(e[0].pop(),this.geometryFunction_(e,i,n),e=i.getCoordinates()),"MultiPoint"===this.type_?t.setGeometry(new Wm([e])):"MultiLineString"===this.type_?t.setGeometry(new Xm([e])):"MultiPolygon"===this.type_&&t.setGeometry(new Km([e])),this.dispatchEvent(new sy(ny,t)),this.features_&&this.features_.push(t),this.source_&&this.source_.addFeature(t)}abortDrawing_(){this.finishCoordinate_=null;const t=this.sketchFeature_;return this.sketchFeature_=null,this.sketchPoint_=null,this.sketchLine_=null,this.overlay_.getSource().clear(!0),this.deactivateTrace_(),t}abortDrawing(){const t=this.abortDrawing_();t&&this.dispatchEvent(new sy(ry,t))}appendCoordinates(t){const e=this.mode_,i=!this.sketchFeature_;let n;if(i&&this.startDrawing_(t[0]),"LineString"===e||"Circle"===e)n=this.sketchCoords_;else{if("Polygon"!==e)return;n=this.sketchCoords_&&this.sketchCoords_.length?this.sketchCoords_[0]:[]}i&&n.shift(),n.pop();for(let e=0;er?o[1]:o[0]),a}}return null}handlePointerMove_(t){const e=t.pixel,i=t.map;let n=this.snapToVertex_(e,i);n||(n=i.getCoordinateFromPixelInternal(e)),this.createOrUpdatePointerFeature_(n)}createOrUpdateExtentFeature_(t){let e=this.extentFeature_;return e?t?e.setGeometry(Nr(t)):e.setGeometry(void 0):(e=new Ot(t?Nr(t):{}),this.extentFeature_=e,this.extentOverlay_.getSource().addFeature(e)),e}createOrUpdatePointerFeature_(t){let e=this.vertexFeature_;if(e){e.getGeometry().setCoordinates(t)}else e=new Ot(new dr(t)),this.vertexFeature_=e,this.vertexOverlay_.getSource().addFeature(e);return e}handleEvent(t){return!t.originalEvent||!this.condition_(t)||(t.type!=Ro.POINTERMOVE||this.handlingDownUpSequence||this.handlePointerMove_(t),super.handleEvent(t),!1)}handleDownEvent(t){const e=t.pixel,i=t.map,n=this.getExtentInternal();let r=this.snapToVertex_(e,i);const s=function(t){let e=null,i=null;return t[0]==n[0]?e=n[2]:t[0]==n[2]&&(e=n[0]),t[1]==n[1]?i=n[3]:t[1]==n[3]&&(i=n[1]),null!==e&&null!==i?[e,i]:null};if(r&&n){const t=r[0]==n[0]||r[0]==n[2]?r[0]:null,e=r[1]==n[1]||r[1]==n[3]?r[1]:null;null!==t&&null!==e?this.pointerHandler_=Sy(s(r)):null!==t?this.pointerHandler_=wy(s([t,n[1]]),s([t,n[3]])):null!==e&&(this.pointerHandler_=wy(s([n[0],e]),s([n[2],e])))}else r=i.getCoordinateFromPixelInternal(e),this.setExtent([r[0],r[1],r[0],r[1]]),this.pointerHandler_=Sy(r);return!0}handleDragEvent(t){if(this.pointerHandler_){const e=t.coordinate;this.setExtent(this.pointerHandler_(e)),this.createOrUpdatePointerFeature_(e)}}handleUpEvent(t){this.pointerHandler_=null;const e=this.getExtentInternal();return e&&0!==Ce(e)||this.setExtent(null),!1}setMap(t){this.extentOverlay_.setMap(t),this.vertexOverlay_.setMap(t),super.setMap(t)}getExtent(){return En(this.getExtentInternal(),this.getMap().getView().getProjection())}getExtentInternal(){return this.extent_}setExtent(t){this.extent_=t||null,this.createOrUpdateExtentFeature_(t),this.dispatchEvent(new yy(this.extent_))}};function Ey(t){return parseFloat(t)}function Cy(t){return function(t){return Ci(t,5)}(t).toString()}function Ry(t,e){return!isNaN(t)&&t!==Ey(Cy(e))}var by=class extends Sa{constructor(t){let e;super(),e=!0===(t=Object.assign({animate:!0,params:["x","y","z","r","l"],replace:!1,prefix:""},t||{})).animate?{duration:250}:t.animate?t.animate:null,this.animationOptions_=e,this.params_=t.params.reduce(((t,e)=>(t[e]=!0,t)),{}),this.replace_=t.replace,this.prefix_=t.prefix,this.listenerKeys_=[],this.initial_=!0,this.updateState_=this.updateState_.bind(this)}getParamName_(t){return this.prefix_?this.prefix_+t:t}get_(t,e){return t.get(this.getParamName_(e))}set_(t,e,i){e in this.params_&&t.set(this.getParamName_(e),i)}delete_(t,e){e in this.params_&&t.delete(this.getParamName_(e))}setMap(t){const e=this.getMap();super.setMap(t),t!==e&&(e&&this.unregisterListeners_(e),t&&(this.initial_=!0,this.updateState_(),this.registerListeners_(t)))}registerListeners_(t){this.listenerKeys_.push(N(t,Oo,this.updateUrl_,this),N(t.getLayerGroup(),w,this.updateUrl_,this),N(t,"change:layergroup",this.handleChangeLayerGroup_,this)),this.replace_||addEventListener("popstate",this.updateState_)}unregisterListeners_(t){for(let t=0,e=this.listenerKeys_.length;t=0;--t){const n=i[t];for(let t=this.dragSegments_.length-1;t>=0;--t)this.dragSegments_[t][0]===n&&this.dragSegments_.splice(t,1);e.remove(n)}}setActive(t){this.vertexFeature_&&!t&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),super.setActive(t)}setMap(t){this.overlay_.setMap(t),super.setMap(t)}getOverlay(){return this.overlay_}handleSourceAdd_(t){t.feature&&this.features_.push(t.feature)}handleSourceRemove_(t){t.feature&&this.features_.remove(t.feature)}handleFeatureAdd_(t){this.addFeature_(t.element)}handleFeatureChange_(t){if(!this.changingFeature_){const e=t.target;this.removeFeature_(e),this.addFeature_(e)}}handleFeatureRemove_(t){this.removeFeature_(t.element)}writePointGeometry_(t,e){const i=e.getCoordinates(),n={feature:t,geometry:e,segment:[i,i]};this.rBush_.insert(e.getExtent(),n)}writeMultiPointGeometry_(t,e){const i=e.getCoordinates();for(let n=0,r=i.length;n=0;--t)this.insertVertex_(r[t],s)}return!!this.vertexFeature_}handleUpEvent(t){for(let e=this.dragSegments_.length-1;e>=0;--e){const i=this.dragSegments_[e][0],n=i.geometry;if("Circle"===n.getType()){const e=n.getCenter(),r=i.featureSegments[0],s=i.featureSegments[1];r.segment[0]=e,r.segment[1]=e,s.segment[0]=e,s.segment[1]=e,this.rBush_.update(fe(e),r);let o=n;const a=Sn();if(a){const e=t.map.getView().getProjection();o=o.clone().transform(a,e),o=Dr(o).transform(e,a)}this.rBush_.update(o.getExtent(),s)}else this.rBush_.update(ne(i.segment),i)}return this.featuresBeingModified_&&(this.dispatchEvent(new My(Fy,this.featuresBeingModified_,t)),this.featuresBeingModified_=null),!1}handlePointerMove_(t){this.lastPixel_=t.pixel,this.handlePointerAtPixel_(t.pixel,t.map,t.coordinate)}handlePointerAtPixel_(t,e,i){const n=i||e.getCoordinateFromPixel(t),r=e.getView().getProjection(),s=function(t,e){return Oy(n,t,r)-Oy(n,e,r)};let o,a;if(this.hitDetection_){const i="object"==typeof this.hitDetection_?t=>t===this.hitDetection_:void 0;e.forEachFeatureAtPixel(t,((t,e,i)=>{const n=i||t.getGeometry();if("Point"===n.getType()&&t instanceof Ot&&this.features_.getArray().includes(t)){a=n;const e=a.getFlatCoordinates().slice(0,2);o=[{feature:t,geometry:a,segment:[e,e]}]}return!0}),{layerFilter:i})}if(!o){const t=En(re(Cn(fe(n,Py),r),e.getView().getResolution()*this.pixelTolerance_,Py),r);o=this.rBush_.getInExtent(t)}if(o&&o.length>0){const i=o.sort(s)[0],l=i.segment;let h=Ny(n,i,r);const c=e.getPixelFromCoordinate(h);let u=Bi(t,c);if(a||u<=this.pixelTolerance_){const t={};if(t[X(l)]=!0,this.snapToPointer_||(this.delta_[0]=h[0]-n[0],this.delta_[1]=h[1]-n[1]),"Circle"===i.geometry.getType()&&1===i.index)this.snappedToVertex_=!0,this.createOrUpdateVertexFeature_(h,[i.feature],[i.geometry]);else{const n=e.getPixelFromCoordinate(l[0]),r=e.getPixelFromCoordinate(l[1]),s=ji(c,n),a=ji(c,r);u=Math.sqrt(Math.min(s,a)),this.snappedToVertex_=u<=this.pixelTolerance_,this.snappedToVertex_&&(h=s>a?l[1]:l[0]),this.createOrUpdateVertexFeature_(h,[i.feature],[i.geometry]);const d={};d[X(i.geometry)]=!0;for(let e=1,i=o.length;e=0;--o)r=t[o],u=r[0],d=X(u.feature),u.depth&&(d+="-"+u.depth.join("-")),d in e||(e[d]={}),0===r[1]?(e[d].right=u,e[d].index=u.index):1==r[1]&&(e[d].left=u,e[d].index=u.index+1);for(d in e){switch(c=e[d].right,l=e[d].left,a=e[d].index,h=a-1,u=void 0!==l?l:c,h<0&&(h=0),s=u.geometry,n=s.getCoordinates(),i=n,g=!1,s.getType()){case"MultiLineString":n[u.depth[0]].length>2&&(n[u.depth[0]].splice(a,1),g=!0);break;case"LineString":n.length>2&&(n.splice(a,1),g=!0);break;case"MultiPolygon":i=i[u.depth[1]];case"Polygon":i=i[u.depth[0]],i.length>4&&(a==i.length-1&&(a=0),i.splice(a,1),g=!0,0===a&&(i.pop(),i.push(i[0]),h=i.length-1))}if(g){this.setGeometryCoordinates_(s,n);const e=[];if(void 0!==l&&(this.rBush_.remove(l),e.push(l.segment[0])),void 0!==c&&(this.rBush_.remove(c),e.push(c.segment[1])),void 0!==l&&void 0!==c){const t={depth:u.depth,feature:u.feature,geometry:u.geometry,index:h,segment:e};this.rBush_.insert(ne(t.segment),t)}this.updateSegmentIndices_(s,a,u.depth,-1),this.vertexFeature_&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),t.length=0}}return g}setGeometryCoordinates_(t,e){this.changingFeature_=!0,t.setCoordinates(e),this.changingFeature_=!1}updateSegmentIndices_(t,e,i,n){this.rBush_.forEachInExtent(t.getExtent(),(function(r){r.geometry===t&&(void 0===i||void 0===r.depth||d(r.depth,i))&&r.index>e&&(r.index+=n)}))}};const ky="select";class jy extends r{constructor(t,e,i,n){super(t),this.selected=e,this.deselected=i,this.mapBrowserEvent=n}}const By={};class zy extends Sa{constructor(t){let e;if(super(),this.on,this.once,this.un,t=t||{},this.boundAddFeature_=this.addFeature_.bind(this),this.boundRemoveFeature_=this.removeFeature_.bind(this),this.condition_=t.condition?t.condition:Aa,this.addCondition_=t.addCondition?t.addCondition:Ma,this.removeCondition_=t.removeCondition?t.removeCondition:Ma,this.toggleCondition_=t.toggleCondition?t.toggleCondition:Na,this.multi_=!!t.multi&&t.multi,this.filter_=t.filter?t.filter:f,this.hitTolerance_=t.hitTolerance?t.hitTolerance:0,this.style_=void 0!==t.style?t.style:function(){const t=gf();return u(t.Polygon,t.LineString),u(t.GeometryCollection,t.LineString),function(e){return e.getGeometry()?t[e.getGeometry().getType()]:null}}(),this.features_=t.features||new H,t.layers)if("function"==typeof t.layers)e=t.layers;else{const i=t.layers;e=function(t){return i.includes(t)}}else e=f;this.layerFilter_=e,this.featureLayerAssociation_={}}addFeatureLayerAssociation_(t,e){this.featureLayerAssociation_[X(t)]=e}getFeatures(){return this.features_}getHitTolerance(){return this.hitTolerance_}getLayer(t){return this.featureLayerAssociation_[X(t)]}setHitTolerance(t){this.hitTolerance_=t}setMap(t){this.getMap()&&this.style_&&this.features_.forEach(this.restorePreviousStyle_.bind(this)),super.setMap(t),t?(this.features_.addEventListener(Z,this.boundAddFeature_),this.features_.addEventListener(Y,this.boundRemoveFeature_),this.style_&&this.features_.forEach(this.applySelectedStyle_.bind(this))):(this.features_.removeEventListener(Z,this.boundAddFeature_),this.features_.removeEventListener(Y,this.boundRemoveFeature_))}addFeature_(t){const e=t.element;if(this.style_&&this.applySelectedStyle_(e),!this.getLayer(e)){const t=this.getMap().getAllLayers().find((function(t){if(t instanceof i_&&t.getSource()&&t.getSource().hasFeature(e))return t}));t&&this.addFeatureLayerAssociation_(e,t)}}removeFeature_(t){this.style_&&this.restorePreviousStyle_(t.element)}getStyle(){return this.style_}applySelectedStyle_(t){const e=X(t);e in By||(By[e]=t.getStyle()),t.setStyle(this.style_)}restorePreviousStyle_(t){const e=this.getMap().getInteractions().getArray();for(let i=e.length-1;i>=0;--i){const n=e[i];if(n!==this&&n instanceof zy&&n.getStyle()&&-1!==n.getFeatures().getArray().lastIndexOf(t))return void t.setStyle(n.getStyle())}const i=X(t);t.setStyle(By[i]),delete By[i]}removeFeatureLayerAssociation_(t){delete this.featureLayerAssociation_[X(t)]}handleEvent(t){if(!this.condition_(t))return!0;const e=this.addCondition_(t),i=this.removeCondition_(t),n=this.toggleCondition_(t),r=!e&&!i&&!n,s=t.map,o=this.getFeatures(),a=[],l=[];if(r){x(this.featureLayerAssociation_),s.forEachFeatureAtPixel(t.pixel,((t,e)=>{if(t instanceof Ot&&this.filter_(t,e))return this.addFeatureLayerAssociation_(t,e),l.push(t),!this.multi_}),{layerFilter:this.layerFilter_,hitTolerance:this.hitTolerance_});for(let t=o.getLength()-1;t>=0;--t){const e=o.item(t),i=l.indexOf(e);i>-1?l.splice(i,1):(o.remove(e),a.push(e))}0!==l.length&&o.extend(l)}else{s.forEachFeatureAtPixel(t.pixel,((t,r)=>{if(t instanceof Ot&&this.filter_(t,r))return!e&&!n||o.getArray().includes(t)?(i||n)&&o.getArray().includes(t)&&(a.push(t),this.removeFeatureLayerAssociation_(t)):(this.addFeatureLayerAssociation_(t,r),l.push(t)),!this.multi_}),{layerFilter:this.layerFilter_,hitTolerance:this.hitTolerance_});for(let t=a.length-1;t>=0;--t)o.remove(a[t]);o.extend(l)}return(l.length>0||a.length>0)&&this.dispatchEvent(new jy(ky,l,a,t)),!0}}var Uy=zy;function Xy(t){return t.feature?t.feature:t.element?t.element:void 0}const Vy=[];var Wy=class extends Ea{constructor(t){const e=t=t||{};e.handleDownEvent||(e.handleDownEvent=f),e.stopDown||(e.stopDown=p),super(e),this.source_=t.source?t.source:null,this.vertex_=void 0===t.vertex||t.vertex,this.edge_=void 0===t.edge||t.edge,this.features_=t.features?t.features:null,this.featuresListenerKeys_=[],this.featureChangeListenerKeys_={},this.indexedFeaturesExtents_={},this.pendingFeatures_={},this.pixelTolerance_=void 0!==t.pixelTolerance?t.pixelTolerance:10,this.rBush_=new ic,this.GEOMETRY_SEGMENTERS_={Point:this.segmentPointGeometry_.bind(this),LineString:this.segmentLineStringGeometry_.bind(this),LinearRing:this.segmentLineStringGeometry_.bind(this),Polygon:this.segmentPolygonGeometry_.bind(this),MultiPoint:this.segmentMultiPointGeometry_.bind(this),MultiLineString:this.segmentMultiLineStringGeometry_.bind(this),MultiPolygon:this.segmentMultiPolygonGeometry_.bind(this),GeometryCollection:this.segmentGeometryCollectionGeometry_.bind(this),Circle:this.segmentCircleGeometry_.bind(this)}}addFeature(t,e){e=void 0===e||e;const i=X(t),n=t.getGeometry();if(n){const e=this.GEOMETRY_SEGMENTERS_[n.getType()];if(e){this.indexedFeaturesExtents_[i]=n.getExtent([1/0,1/0,-1/0,-1/0]);const r=[];if(e(r,n),1===r.length)this.rBush_.insert(ne(r[0]),{feature:t,segment:r[0]});else if(r.length>1){const e=r.map((t=>ne(t))),i=r.map((e=>({feature:t,segment:e})));this.rBush_.load(e,i)}}}e&&(this.featureChangeListenerKeys_[i]=N(t,w,this.handleFeatureChange_,this))}forEachFeatureAdd_(t){this.addFeature(t)}forEachFeatureRemove_(t){this.removeFeature(t)}getFeatures_(){let t;return this.features_?t=this.features_:this.source_&&(t=this.source_.getFeatures()),t}handleEvent(t){const e=this.snapTo(t.pixel,t.coordinate,t.map);return e&&(t.coordinate=e.vertex.slice(0,2),t.pixel=e.vertexPixel),super.handleEvent(t)}handleFeatureAdd_(t){const e=Xy(t);this.addFeature(e)}handleFeatureRemove_(t){const e=Xy(t);this.removeFeature(e)}handleFeatureChange_(t){const e=t.target;if(this.handlingDownUpSequence){const t=X(e);t in this.pendingFeatures_||(this.pendingFeatures_[t]=e)}else this.updateFeature_(e)}handleUpEvent(t){const e=Object.values(this.pendingFeatures_);return e.length&&(e.forEach(this.updateFeature_.bind(this)),this.pendingFeatures_={}),!1}removeFeature(t,e){const i=void 0===e||e,n=X(t),r=this.indexedFeaturesExtents_[n];if(r){const e=this.rBush_,i=[];e.forEachInExtent(r,(function(e){t===e.feature&&i.push(e)}));for(let t=i.length-1;t>=0;--t)e.remove(i[t])}i&&(G(this.featureChangeListenerKeys_[n]),delete this.featureChangeListenerKeys_[n])}setMap(t){const e=this.getMap(),i=this.featuresListenerKeys_,n=this.getFeatures_();e&&(i.forEach(G),i.length=0,n.forEach(this.forEachFeatureRemove_.bind(this))),super.setMap(t),t&&(this.features_?i.push(N(this.features_,Z,this.handleFeatureAdd_,this),N(this.features_,Y,this.handleFeatureRemove_,this)):this.source_&&i.push(N(this.source_,nc,this.handleFeatureAdd_,this),N(this.source_,oc,this.handleFeatureRemove_,this)),n.forEach(this.forEachFeatureAdd_.bind(this)))}snapTo(t,e,i){const n=i.getView().getProjection(),r=Tn(e,n),s=En(re(ne([r]),i.getView().getResolution()*this.pixelTolerance_),n),o=this.rBush_.getInExtent(s),a=o.length;if(0===a)return null;let l,h=1/0;const c=this.pixelTolerance_*this.pixelTolerance_,u=()=>{if(l){const e=i.getPixelFromCoordinate(l);if(ji(t,e)<=c)return{vertex:l,vertexPixel:[Math.round(e[0]),Math.round(e[1])]}}return null};if(this.vertex_){for(let t=0;t{const e=Tn(t,n),i=ji(r,e);i{t.push([e])}))}segmentMultiPolygonGeometry_(t,e){const i=e.getCoordinates();for(let e=0,n=i.length;e{if(t instanceof Ot&&this.filter_(t,e)&&(!this.features_||this.features_.getArray().includes(t)))return t}),{layerFilter:this.layerFilter_,hitTolerance:this.hitTolerance_})}getHitTolerance(){return this.hitTolerance_}setHitTolerance(t){this.hitTolerance_=t}setMap(t){const e=this.getMap();super.setMap(t),this.updateState_(e)}handleActiveChanged_(){this.updateState_(null)}updateState_(t){let e=this.getMap();const i=this.getActive();if((!e||!i)&&(e=e||t,e)){e.getViewport().classList.remove("ol-grab","ol-grabbing")}}};function $y(t,e,i,n,r,s){void 0!==r?s=void 0!==s?s:0:(r=[],s=0);let o=e;for(;o=0;e--)r.push(n[t][e]);return{hasZ:i.hasZ,hasM:i.hasM,rings:r}}};function ix(t,e){if(!t)return null;let i;if("number"==typeof t.x&&"number"==typeof t.y)i="Point";else if(t.points)i="MultiPoint";else if(t.paths){i=1===t.paths.length?"LineString":"MultiLineString"}else if(t.rings){const e=t,n=nx(e),r=function(t,e){const i=[],n=[],r=[];let s,o;for(s=0,o=t.length;s=0;s--){const i=n[s][0];if(le(new cr(i).getExtent(),new cr(t).getExtent())){n[s].push(t),e=!0;break}}e||n.push([t.reverse()])}return n}(e.rings,n);1===r.length?(i="Polygon",t=Object.assign({},t,{rings:r[0]})):(i="MultiPolygon",t=Object.assign({},t,{rings:r}))}return p_((0,tx[i])(t),!1,e)}function nx(t){let e="XY";return!0===t.hasZ&&!0===t.hasM?e="XYZM":!0===t.hasZ?e="XYZ":!0===t.hasM&&(e="XYM"),e}function rx(t){const e=t.getLayout();return{hasZ:"XYZ"===e||"XYZM"===e,hasM:"XYM"===e||"XYZM"===e}}function sx(t,e){return(0,ex[t.getType()])(p_(t,!0,e),e)}var ox=class extends Qy{constructor(t){t=t||{},super(),this.geometryName_=t.geometryName}readFeatureFromObject(t,e,i){const n=t,r=ix(n.geometry,e),s=new Ot;if(this.geometryName_&&s.setGeometryName(this.geometryName_),s.setGeometry(r),n.attributes){s.setProperties(n.attributes,!0);const t=n.attributes[i];void 0!==t&&s.setId(t)}return s}readFeaturesFromObject(t,e){if(e=e||{},t.features){const i=[],n=t.features;for(let r=0,s=n.length;r0?i[0]:null}readFeatureFromNode(t,e){return null}readFeatures(t,e){if(!t)return[];if("string"==typeof t){const i=ad(t);return this.readFeaturesFromDocument(i,e)}return sd(t)?this.readFeaturesFromDocument(t,e):this.readFeaturesFromNode(t,e)}readFeaturesFromDocument(t,e){const i=[];for(let n=t.firstChild;n;n=n.nextSibling)n.nodeType==Node.ELEMENT_NODE&&u(i,this.readFeaturesFromNode(n,e));return i}readFeaturesFromNode(t,e){return z()}readGeometry(t,e){if(!t)return null;if("string"==typeof t){const i=ad(t);return this.readGeometryFromDocument(i,e)}return sd(t)?this.readGeometryFromDocument(t,e):this.readGeometryFromNode(t,e)}readGeometryFromDocument(t,e){return null}readGeometryFromNode(t,e){return null}readProjection(t){if(!t)return null;if("string"==typeof t){const e=ad(t);return this.readProjectionFromDocument(e)}return sd(t)?this.readProjectionFromDocument(t):this.readProjectionFromNode(t)}readProjectionFromDocument(t){return this.dataProjection}readProjectionFromNode(t){return this.dataProjection}writeFeature(t,e){const i=this.writeFeatureNode(t,e);return this.xmlSerializer_.serializeToString(i)}writeFeatureNode(t,e){return null}writeFeatures(t,e){const i=this.writeFeaturesNode(t,e);return this.xmlSerializer_.serializeToString(i)}writeFeaturesNode(t,e){return null}writeGeometry(t,e){const i=this.writeGeometryNode(t,e);return this.xmlSerializer_.serializeToString(i)}writeGeometryNode(t,e){return null}};const lx="http://www.opengis.net/gml",hx=/^\s*$/;class cx extends ax{constructor(t){super(),t=t||{},this.featureType=t.featureType,this.featureNS=t.featureNS,this.srsName=t.srsName,this.schemaLocation="",this.FEATURE_COLLECTION_PARSERS={},this.FEATURE_COLLECTION_PARSERS[this.namespace]={featureMember:hd(this.readFeaturesInternal),featureMembers:cd(this.readFeaturesInternal)},this.supportedMediaTypes=["application/gml+xml"]}readFeaturesInternal(t,e){const i=t.localName;let n=null;if("FeatureCollection"==i)n=vd([],this.FEATURE_COLLECTION_PARSERS,t,e,this);else if("featureMembers"==i||"featureMember"==i||"member"==i){const r=e[0];let s=r.featureType,o=r.featureNS;const a="p",l="p0";if(!s&&t.childNodes){s=[],o={};for(let e=0,i=t.childNodes.length;e0){t={_content_:t};for(let e=0;e0){e[e.length-1].push(...i)}},outerBoundaryIs:function(t,e){const i=vd(void 0,kS,t,e);if(i){e[e.length-1][0]=i}}});function CS(t,e){const i=vd({},yS,t,e),n=vd([null],ES,t,e);if(n&&n[0]){const t=n[0],e=[t.length];for(let i=1,r=n.length;i0;let o;const a=r.href;let l,h,c;a?o=a:s&&(o=Bv);let u="bottom-left";const d=i.hotSpot;let g;d?(l=[d.x,d.y],h=d.xunits,c=d.yunits,u=d.origin):/^https?:\/\/maps\.(?:google|gstatic)\.com\//.test(o)&&(o.includes("pushpin")?(l=Dv,h=Gv,c=kv):o.includes("arrow-reverse")?(l=[54,42],h=Gv,c=kv):o.includes("paddle")&&(l=[32,1],h=Gv,c=kv));const f=r.x,p=r.y;let m;void 0!==f&&void 0!==p&&(g=[f,p]);const _=r.w,y=r.h;let x;void 0!==_&&void 0!==y&&(m=[_,y]);const v=i.heading;void 0!==v&&(x=wi(v));const S=i.scale,w=i.color;if(s){o==Bv&&(m=jv);const t=new of({anchor:l,anchorOrigin:u,anchorXUnits:h,anchorYUnits:c,crossOrigin:this.crossOrigin_,offset:g,offsetOrigin:"bottom-left",rotation:x,scale:S,size:m,src:this.iconUrlFunction_(o),color:w}),e=t.getScaleArray()[0],i=t.getSize();if(null===i){const i=t.getImageState();if(i===Jr||i===Qr){const n=function(){const i=t.getImageState();if(i!==Jr&&i!==Qr){const i=t.getSize();if(i&&2==i.length){const n=Hv(i);t.setScale(e*n)}t.unlistenImageChange(n)}};t.listenImageChange(n),i===Jr&&t.load()}}else if(2==i.length){const n=Hv(i);t.setScale(e*n)}n.imageStyle=t}else n.imageStyle=Uv},LabelStyle:function(t,e){const i=vd({},aS,t,e);if(!i)return;const n=e[e.length-1],r=new _f({fill:new Qg({color:"color"in i?i.color:Nv}),scale:i.scale});n.textStyle=r},LineStyle:function(t,e){const i=vd({},lS,t,e);if(!i)return;const n=e[e.length-1],r=new lf({color:"color"in i?i.color:Nv,width:"width"in i?i.width:1});n.strokeStyle=r},PolyStyle:function(t,e){const i=vd({},hS,t,e);if(!i)return;const n=e[e.length-1],r=new Qg({color:"color"in i?i.color:Nv});n.fillStyle=r;const s=i.fill;void 0!==s&&(n.fill=s);const o=i.outline;void 0!==o&&(n.outline=o)}});function bS(t,e){const i=vd({},RS,t,e,this);if(!i)return null;let n="fillStyle"in i?i.fillStyle:zv;const r=i.fill;let s;void 0===r||r||(n=null),"imageStyle"in i?i.imageStyle!=Uv&&(s=i.imageStyle):s=Xv;const o="textStyle"in i?i.textStyle:Zv,a="strokeStyle"in i?i.strokeStyle:Wv,l=i.outline;return void 0===l||l?[new pf({fill:n,image:s,stroke:a,text:o,zIndex:void 0})]:[new pf({geometry:function(t){const e=t.getGeometry(),i=e.getType();if("GeometryCollection"===i){return new Dm(e.getGeometriesArrayRecursive().filter((function(t){const e=t.getType();return"Polygon"!==e&&"MultiPolygon"!==e})))}if("Polygon"!==i&&"MultiPolygon"!==i)return e},fill:n,image:s,stroke:a,text:o,zIndex:void 0}),new pf({geometry:function(t){const e=t.getGeometry(),i=e.getType();if("GeometryCollection"===i){return new Dm(e.getGeometriesArrayRecursive().filter((function(t){const e=t.getType();return"Polygon"===e||"MultiPolygon"===e})))}if("Polygon"===i||"MultiPolygon"===i)return e},fill:n,stroke:null,zIndex:void 0})]}function PS(t,e){const i=e.length,n=new Array(e.length),r=new Array(e.length),s=new Array(e.length);let o,a,l;o=!1,a=!1,l=!1;for(let t=0;t0){const t=_d(r,o);wd(n,hw,uw,[{names:o,values:t}],i)}const u=i[0];let d=e.getGeometry();d&&(d=p_(d,!0,u)),wd(n,hw,tw,[d],i)}const gw=yd(bv,["extrude","tessellate","altitudeMode","coordinates"]),fw=yd(bv,{extrude:gd(vx),tessellate:gd(vx),altitudeMode:gd(Cx),coordinates:gd((function(t,e,i){const n=i[i.length-1],r=n.layout,s=n.stride;let o;"XY"==r||"XYM"==r?o=2:"XYZ"==r||"XYZM"==r?o=3:Ft(!1,34);const a=e.length;let l="";if(a>0){l+=e[0];for(let t=1;t0;else{const e=t.getType();a="Point"===e||"MultiPoint"===e}}a&&(l=s.get("name"),a=a&&!!l,a&&/&[^&]+;/.test(l)&&(Kv||(Kv=document.createElement("textarea")),Kv.innerHTML=l,l=Kv.value));let c=i;if(t?c=t:e&&(c=Jv(e,i,n)),a){const t=function(t,e){const i=[0,0];let n="start";const r=t.getImage();if(r){const t=r.getSize();if(t&&2==t.length){const e=r.getScaleArray(),s=r.getAnchor();i[0]=e[0]*(t[0]-s[0]),i[1]=e[1]*(t[1]/2-s[1]),n="left"}}let s=t.getText();s?(s=s.clone(),s.setFont(s.getFont()||Zv.getFont()),s.setScale(s.getScale()||Zv.getScale()),s.setFill(s.getFill()||Zv.getFill()),s.setStroke(s.getStroke()||Vv)):s=Zv.clone();s.setText(e),s.setOffsetX(i[0]),s.setOffsetY(i[1]),s.setTextAlign(n);return new pf({image:r,text:s})}(c[0],l);if(h.length>0){t.setGeometry(new Dm(h));return[t,new pf({geometry:c[0].getGeometry(),image:null,fill:c[0].getFill(),stroke:c[0].getStroke(),text:null})].concat(c.slice(1))}return t}return c}}(i.Style,i.styleUrl,this.defaultStyle_,this.sharedStyles_,this.showPointNames_);n.setStyle(t)}return delete i.Style,n.setProperties(i,!0),n}readSharedStyle_(t,e){const i=t.getAttribute("id");if(null!==i){const n=bS.call(this,t,e);if(n){let e,r=t.baseURI;if(r&&"about:blank"!=r||(r=window.location.href),r){e=new URL("#"+i,r).href}else e="#"+i;this.sharedStyles_[e]=n}}}readSharedStyleMap_(t,e){const i=t.getAttribute("id");if(null===i)return;const n=sS.call(this,t,e);if(!n)return;let r,s=t.baseURI;if(s&&"about:blank"!=s||(s=window.location.href),s){r=new URL("#"+i,s).href}else r="#"+i;this.sharedStyles_[r]=n}readFeatureFromNode(t,e){if(!bv.includes(t.namespaceURI))return null;const i=this.readPlacemark_(t,[this.getReadOptions(t,e)]);return i||null}readFeaturesFromNode(t,e){if(!bv.includes(t.namespaceURI))return[];let i;const n=t.localName;if("Document"==n||"Folder"==n)return i=this.readDocumentOrFolder_(t,[this.getReadOptions(t,e)]),i||[];if("Placemark"==n){const i=this.readPlacemark_(t,[this.getReadOptions(t,e)]);return i?[i]:[]}if("kml"==n){i=[];for(let n=t.firstElementChild;n;n=n.nextElementSibling){const t=this.readFeaturesFromNode(n,e);t&&u(i,t)}return i}return[]}readName(t){if(t){if("string"==typeof t){const e=ad(t);return this.readNameFromDocument(e)}return sd(t)?this.readNameFromDocument(t):this.readNameFromNode(t)}}readNameFromDocument(t){for(let e=t.firstChild;e;e=e.nextSibling)if(e.nodeType==Node.ELEMENT_NODE){const t=this.readNameFromNode(e);if(t)return t}}readNameFromNode(t){for(let e=t.firstElementChild;e;e=e.nextElementSibling)if(bv.includes(e.namespaceURI)&&"name"==e.localName)return xx(e);for(let e=t.firstElementChild;e;e=e.nextElementSibling){const t=e.localName;if(bv.includes(e.namespaceURI)&&("Document"==t||"Folder"==t||"Placemark"==t||"kml"==t)){const t=this.readNameFromNode(e);if(t)return t}}}readNetworkLinks(t){const e=[];if("string"==typeof t){const i=ad(t);u(e,this.readNetworkLinksFromDocument(i))}else sd(t)?u(e,this.readNetworkLinksFromDocument(t)):u(e,this.readNetworkLinksFromNode(t));return e}readNetworkLinksFromDocument(t){const e=[];for(let i=t.firstChild;i;i=i.nextSibling)i.nodeType==Node.ELEMENT_NODE&&u(e,this.readNetworkLinksFromNode(i));return e}readNetworkLinksFromNode(t){const e=[];for(let i=t.firstElementChild;i;i=i.nextElementSibling)if(bv.includes(i.namespaceURI)&&"NetworkLink"==i.localName){const t=vd({},Lv,i,[]);e.push(t)}for(let i=t.firstElementChild;i;i=i.nextElementSibling){const t=i.localName;!bv.includes(i.namespaceURI)||"Document"!=t&&"Folder"!=t&&"kml"!=t||u(e,this.readNetworkLinksFromNode(i))}return e}readRegion(t){const e=[];if("string"==typeof t){const i=ad(t);u(e,this.readRegionFromDocument(i))}else sd(t)?u(e,this.readRegionFromDocument(t)):u(e,this.readRegionFromNode(t));return e}readRegionFromDocument(t){const e=[];for(let i=t.firstChild;i;i=i.nextSibling)i.nodeType==Node.ELEMENT_NODE&&u(e,this.readRegionFromNode(i));return e}readRegionFromNode(t){const e=[];for(let i=t.firstElementChild;i;i=i.nextElementSibling)if(bv.includes(i.namespaceURI)&&"Region"==i.localName){const t=vd({},Mv,i,[]);e.push(t)}for(let i=t.firstElementChild;i;i=i.nextElementSibling){const t=i.localName;!bv.includes(i.namespaceURI)||"Document"!=t&&"Folder"!=t&&"kml"!=t||u(e,this.readRegionFromNode(i))}return e}writeFeaturesNode(t,e){e=this.adaptOptions(e);const i=id(bv[4],"kml"),n="http://www.w3.org/2000/xmlns/";i.setAttributeNS(n,"xmlns:gx",Rv[0]),i.setAttributeNS(n,"xmlns:xsi",ed),i.setAttributeNS(ed,"xsi:schemaLocation","http://www.opengis.net/kml/2.2 https://developers.google.com/kml/schema/kml22gx.xsd");const r={node:i},s={};t.length>1?s.Document=t:1==t.length&&(s.Placemark=t[0]);const o=Av[i.namespaceURI],a=_d(s,o);return wd(r,Ov,md,a,[e],o,this),i}};const Rw=[null],bw=yd(Rw,{nd:function(t,e){e[e.length-1].ndrefs.push(t.getAttribute("ref"))},tag:Lw}),Pw=yd(Rw,{node:function(t,e){const i=e[0],n=e[e.length-1],r=t.getAttribute("id"),s=[parseFloat(t.getAttribute("lon")),parseFloat(t.getAttribute("lat"))];n.nodes[r]=s;const o=vd({tags:{}},Iw,t,e);if(!v(o.tags)){const t=new dr(s);p_(t,!1,i);const e=new Ot(t);void 0!==r&&e.setId(r),e.setProperties(o.tags,!0),n.features.push(e)}},way:function(t,e){const i=vd({id:t.getAttribute("id"),ndrefs:[],tags:{}},bw,t,e);e[e.length-1].ways.push(i)}});const Iw=yd(Rw,{tag:Lw});function Lw(t,e){e[e.length-1].tags[t.getAttribute("k")]=t.getAttribute("v")}var Fw=class extends ax{constructor(){super(),this.dataProjection=an("EPSG:4326")}readFeaturesFromNode(t,e){if(e=this.getReadOptions(t,e),"osm"==t.localName){const i=vd({nodes:{},ways:[],features:[]},Pw,t,[e]);for(let t=0;t>1):i>>1}return e}function iT(t){let e="";for(let i=0,n=t.length;i=32;)e=63+(32|31&t),i+=String.fromCharCode(e),t>>=5;return e=t+63,i+=String.fromCharCode(e),i}var sT=class extends vv{constructor(t){super(),t=t||{},this.dataProjection=an("EPSG:4326"),this.factor_=t.factor?t.factor:1e5,this.geometryLayout_=t.geometryLayout?t.geometryLayout:"XY"}readFeatureFromText(t,e){const i=this.readGeometryFromText(t,e);return new Ot(i)}readFeaturesFromText(t,e){return[this.readFeatureFromText(t,e)]}readGeometryFromText(t,e){const i=Dn(this.geometryLayout_),n=$w(t,i,this.factor_);$y(n,0,n.length,i,n);const r=nr(n,0,n.length,i);return p_(new zm(r,this.geometryLayout_),!1,this.adaptOptions(e))}writeFeatureText(t,e){const i=t.getGeometry();return i?this.writeGeometryText(i,e):(Ft(!1,40),"")}writeFeaturesText(t,e){return this.writeFeatureText(t[0],e)}writeGeometryText(t,e){const i=(t=p_(t,!0,this.adaptOptions(e))).getFlatCoordinates(),n=t.getStride();return $y(i,0,i.length,n,i),Hw(i,n,this.factor_)}};const oT={Point:function(t,e,i){const n=t.coordinates;e&&i&&uT(n,e,i);return new dr(n)},LineString:function(t,e){const i=aT(t.arcs,e);return new zm(i)},Polygon:function(t,e){const i=[];for(let n=0,r=t.arcs.length;n0&&i.pop(),n>=0){const t=e[n];for(let e=0,n=t.length;e=0;--e)i.push(t[e].slice(0))}return i}function lT(t,e,i,n,r,s,o){const a=t.geometries,l=[];for(let t=0,h=a.length;t=2,57)}};var pT=class extends fT{constructor(t){super("And",Array.prototype.slice.call(arguments))}};var mT=class extends gT{constructor(t,e,i){if(super("BBOX"),this.geometryName=t,this.extent=e,4!==e.length)throw new Error("Expected an extent with four values ([minX, minY, maxX, maxY])");this.srsName=i}};var _T=class extends gT{constructor(t,e,i,n){super(t),this.geometryName=e||"the_geom",this.geometry=i,this.srsName=n}};var yT=class extends _T{constructor(t,e,i){super("Contains",t,e,i)}};var xT=class extends _T{constructor(t,e,i,n,r){super("DWithin",t,e,r),this.distance=i,this.unit=n}};var vT=class extends _T{constructor(t,e,i){super("Disjoint",t,e,i)}};var ST=class extends gT{constructor(t,e){super(t),this.propertyName=e}};var wT=class extends ST{constructor(t,e,i){super("During",t),this.begin=e,this.end=i}};var TT=class extends ST{constructor(t,e,i,n){super(t,e),this.expression=i,this.matchCase=n}};var ET=class extends TT{constructor(t,e,i){super("PropertyIsEqualTo",t,e,i)}};var CT=class extends TT{constructor(t,e){super("PropertyIsGreaterThan",t,e)}};var RT=class extends TT{constructor(t,e){super("PropertyIsGreaterThanOrEqualTo",t,e)}};var bT=class extends _T{constructor(t,e,i){super("Intersects",t,e,i)}};var PT=class extends ST{constructor(t,e,i){super("PropertyIsBetween",t),this.lowerBoundary=e,this.upperBoundary=i}};var IT=class extends ST{constructor(t,e,i,n,r,s){super("PropertyIsLike",t),this.pattern=e,this.wildCard=void 0!==i?i:"*",this.singleChar=void 0!==n?n:".",this.escapeChar=void 0!==r?r:"!",this.matchCase=s}};var LT=class extends ST{constructor(t){super("PropertyIsNull",t)}};var FT=class extends TT{constructor(t,e){super("PropertyIsLessThan",t,e)}};var MT=class extends TT{constructor(t,e){super("PropertyIsLessThanOrEqualTo",t,e)}};var AT=class extends gT{constructor(t){super("Not"),this.condition=t}};var OT=class extends TT{constructor(t,e,i){super("PropertyIsNotEqualTo",t,e,i)}};var NT=class extends fT{constructor(t){super("Or",Array.prototype.slice.call(arguments))}};var DT=class extends gT{constructor(t){super("ResourceId"),this.rid=t}};var GT=class extends _T{constructor(t,e,i){super("Within",t,e,i)}};function kT(t){const e=[null].concat(Array.prototype.slice.call(arguments));return new(Function.prototype.bind.apply(pT,e))}function jT(t,e,i){return new mT(t,e,i)}const BT={"http://www.opengis.net/gml":{boundedBy:dd(ux.prototype.readExtentElement,"bounds")},"http://www.opengis.net/wfs/2.0":{member:hd(ux.prototype.readFeaturesInternal)}},zT={"http://www.opengis.net/wfs":{totalInserted:dd(_x),totalUpdated:dd(_x),totalDeleted:dd(_x)},"http://www.opengis.net/wfs/2.0":{totalInserted:dd(_x),totalUpdated:dd(_x),totalDeleted:dd(_x)}},UT={"http://www.opengis.net/wfs":{TransactionSummary:dd(QT,"transactionSummary"),InsertResults:dd(nE,"insertIds")},"http://www.opengis.net/wfs/2.0":{TransactionSummary:dd(QT,"transactionSummary"),InsertResults:dd(nE,"insertIds")}},XT={"http://www.opengis.net/wfs":{PropertyName:gd(Cx)},"http://www.opengis.net/wfs/2.0":{PropertyName:gd(Cx)}},VT={"http://www.opengis.net/wfs":{Insert:gd(rE),Update:gd(lE),Delete:gd(aE),Property:gd(hE),Native:gd(cE)},"http://www.opengis.net/wfs/2.0":{Insert:gd(rE),Update:gd(lE),Delete:gd(aE),Property:gd(hE),Native:gd(cE)}},WT="feature",ZT="http://www.w3.org/2000/xmlns/",YT={"2.0.0":"http://www.opengis.net/ogc/1.1","1.1.0":"http://www.opengis.net/ogc","1.0.0":"http://www.opengis.net/ogc"},KT={"2.0.0":"http://www.opengis.net/wfs/2.0","1.1.0":"http://www.opengis.net/wfs","1.0.0":"http://www.opengis.net/wfs"},qT={"2.0.0":"http://www.opengis.net/fes/2.0","1.1.0":"http://www.opengis.net/fes","1.0.0":"http://www.opengis.net/fes"},HT={"2.0.0":"http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd","1.1.0":"http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd","1.0.0":"http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/wfs.xsd"},$T={"2.0.0":Nx,"1.1.0":Fx,"1.0.0":Px};function JT(t,e,i,n){wd(n,VT,pd(t),e,i)}function QT(t,e){return vd({},zT,t,e)}const tE={"http://www.opengis.net/ogc":{FeatureId:hd((function(t,e){return t.getAttribute("fid")}))},"http://www.opengis.net/ogc/1.1":{FeatureId:hd((function(t,e){return t.getAttribute("fid")}))}};function eE(t,e){xd(tE,t,e)}const iE={"http://www.opengis.net/wfs":{Feature:eE},"http://www.opengis.net/wfs/2.0":{Feature:eE}};function nE(t,e){return vd([],iE,t,e)}function rE(t,e,i){const n=i[i.length-1],r=n.featureType,s=n.featureNS,o=n.gmlVersion,a=id(s,r);t.appendChild(a),2===o?Px.prototype.writeFeatureElement(a,e,i):3===o?Fx.prototype.writeFeatureElement(a,e,i):Nx.prototype.writeFeatureElement(a,e,i)}function sE(t,e,i){const n=i[i.length-1].version,r=YT[n],s=id(r,"Filter"),o=id(r,"FeatureId");s.appendChild(o),o.setAttribute("fid",e),t.appendChild(s)}function oE(t,e){const i=(t=t||WT)+":";return e.startsWith(i)?e:i+e}function aE(t,e,i){const n=i[i.length-1];Ft(void 0!==e.getId(),26);const r=n.featureType,s=n.featurePrefix,o=n.featureNS,a=oE(s,r);t.setAttribute("typeName",a),t.setAttributeNS(ZT,"xmlns:"+s,o);const l=e.getId();void 0!==l&&sE(t,l,i)}function lE(t,e,i){const n=i[i.length-1];Ft(void 0!==e.getId(),27);const r=n.version,s=n.featureType,o=n.featurePrefix,a=n.featureNS,l=oE(o,s),h=e.getGeometryName();t.setAttribute("typeName",l),t.setAttributeNS(ZT,"xmlns:"+o,a);const c=e.getId();if(void 0!==c){const s=e.getKeys(),o=[];for(let t=0,i=s.length;t{const r=this.combineBboxAndFilter(n.geometryName,n.bbox,t.srsName,t.filter);Object.assign(i,{geometryName:n.geometryName,filter:r}),PE(e,[n.name],[i])}));return e}combineBboxAndFilter(t,e,i,n){const r=jT(t,e,i);return n?kT(n,r):r}writeTransaction(t,e,i,n){const r=[],s=n.version?n.version:this.version_,o=id(KT[s],"Transaction");let a;o.setAttribute("service","WFS"),o.setAttribute("version",s),n&&(a=n.gmlOptions?n.gmlOptions:{},n.handle&&o.setAttribute("handle",n.handle)),o.setAttributeNS(ed,"xsi:schemaLocation",HT[s]);const l=function(t,e,i,n){const r=n.featurePrefix?n.featurePrefix:WT;let s;"1.0.0"===i?s=2:"1.1.0"===i?s=3:"2.0.0"===i&&(s=3.2);return Object.assign({node:t},{version:i,featureNS:n.featureNS,featureType:n.featureType,featurePrefix:r,gmlVersion:s,hasZ:n.hasZ,srsName:n.srsName},e)}(o,a,s,n);return t&&JT("Insert",t,r,l),e&&JT("Update",e,r,l),i&&JT("Delete",i,r,l),n.nativeElements&&JT("Native",n.nativeElements,r,l),o}readProjectionFromDocument(t){for(let e=t.firstChild;e;e=e.nextSibling)if(e.nodeType==Node.ELEMENT_NODE)return this.readProjectionFromNode(e);return null}readProjectionFromNode(t){if(t.firstElementChild&&t.firstElementChild.firstElementChild)for(let e=(t=t.firstElementChild.firstElementChild).firstElementChild;e;e=e.nextElementSibling)if(0!==e.childNodes.length&&(1!==e.childNodes.length||3!==e.firstChild.nodeType)){const t=[{}];return this.gmlFormat_.readGeometryElement(e,t),an(t.pop().srsName)}return null}};const FE=1,ME=2,AE=3,OE=4,NE=5,DE=6,GE=7,kE=15,jE=16,BE=17;class zE{constructor(t){this.view_=t,this.pos_=0,this.initialized_=!1,this.isLittleEndian_=!1,this.hasZ_=!1,this.hasM_=!1,this.srid_=null,this.layout_="XY"}readUint8(){return this.view_.getUint8(this.pos_++)}readUint32(t){return this.view_.getUint32((this.pos_+=4)-4,void 0!==t?t:this.isLittleEndian_)}readDouble(t){return this.view_.getFloat64((this.pos_+=8)-8,void 0!==t?t:this.isLittleEndian_)}readPoint(){const t=[];return t.push(this.readDouble()),t.push(this.readDouble()),this.hasZ_&&t.push(this.readDouble()),this.hasM_&&t.push(this.readDouble()),t}readLineString(){const t=this.readUint32(),e=[];for(let i=0;i0,i=this.readUint32(e),n=Math.floor((268435455&i)/1e3),r=Boolean(2147483648&i)||1===n||3===n,s=Boolean(1073741824&i)||2===n||3===n,o=Boolean(536870912&i),a=(268435455&i)%1e3,l=["XY",r?"Z":"",s?"M":""].join(""),h=o?this.readUint32(e):null;if(void 0!==t&&t!==a)throw new Error("Unexpected WKB geometry type "+a);if(this.initialized_){if(this.isLittleEndian_!==e)throw new Error("Inconsistent endian");if(this.layout_!==l)throw new Error("Inconsistent geometry layout");if(h&&this.srid_!==h)throw new Error("Inconsistent coordinate system (SRID)")}else this.isLittleEndian_=e,this.hasZ_=r,this.hasM_=s,this.layout_=l,this.srid_=h,this.initialized_=!0;return a}readWkbPayload(t){switch(t){case FE:return this.readPoint();case ME:return this.readLineString();case AE:case BE:return this.readPolygon();case OE:return this.readMultiPoint();case NE:return this.readMultiLineString();case DE:case kE:case jE:return this.readMultiPolygon();case GE:return this.readGeometryCollection();default:throw new Error("Unsupported WKB geometry type "+t+" is found")}}readWkbBlock(t){return this.readWkbPayload(this.readWkbHeader(t))}readWkbCollection(t,e){const i=this.readUint32(),n=[];for(let r=0;r({[e]:t[i]}))));for(const t of this.layout_)this.writeDouble(t in i?i[t]:this.nodata_[t])}writeLineString(t,e){this.writeUint32(t.length);for(let i=0;it+e[0]),0),e=new ArrayBuffer(t),i=new DataView(e);let n=0;return this.writeQueue_.forEach((t=>{switch(t[0]){case 1:i.setUint8(n,t[1]);break;case 4:i.setUint32(n,t[1],this.isLittleEndian_);break;case 8:i.setFloat64(n,t[1],this.isLittleEndian_)}n+=t[0]})),e}}function XE(t){return"string"==typeof t?function(t){const e=new Uint8Array(t.length/2);for(let i=0;inew Ot({geometry:t})))}readGeometry(t,e){const i=XE(t);if(!i)return null;const n=new zE(i).readGeometry();return this.viewCache_=i,e=this.getReadOptions(t,e),this.viewCache_=null,p_(n,!1,e)}readProjection(t){const e=this.viewCache_||XE(t);if(!e)return;const i=new zE(e);return i.readWkbHeader(),i.getSrid()&&an("EPSG:"+i.getSrid())||void 0}writeFeature(t,e){return this.writeGeometry(t.getGeometry(),e)}writeFeatures(t,e){return this.writeGeometry(new Dm(t.map((t=>t.getGeometry()))),e)}writeGeometry(t,e){e=this.adaptOptions(e);const i=new UE({layout:this.layout_,littleEndian:this.littleEndian_,ewkb:this.ewkb_,nodata:{Z:this.nodataZ_,M:this.nodataM_}});let n=Number.isInteger(this.srid_)?Number(this.srid_):null;if(!1!==this.srid_&&!Number.isInteger(this.srid_)){const t=e.dataProjection&&an(e.dataProjection);if(t){const e=t.getCode();e.startsWith("EPSG:")&&(n=Number(e.substring(5)))}}i.writeGeometry(p_(t,!0,e),n);const r=i.getBuffer();return this.hex_?function(t){const e=new Uint8Array(t);return Array.from(e.values()).map((t=>(t<16?"0":"")+Number(t).toString(16).toUpperCase())).join("")}(r):r}};const WE={POINT:dr,LINESTRING:zm,POLYGON:Ar,MULTIPOINT:Wm,MULTILINESTRING:Xm,MULTIPOLYGON:Km},ZE="EMPTY",YE=0,KE=1,qE=2,HE=3,$E=4,JE=5,QE=6,tC={Point:"POINT",LineString:"LINESTRING",Polygon:"POLYGON",MultiPoint:"MULTIPOINT",MultiLineString:"MULTILINESTRING",MultiPolygon:"MULTIPOLYGON",GeometryCollection:"GEOMETRYCOLLECTION",Circle:"CIRCLE"};class eC{constructor(t){this.wkt=t,this.index_=-1}isAlpha_(t){return t>="a"&&t<="z"||t>="A"&&t<="Z"}isNumeric_(t,e){return e=void 0!==e&&e,t>="0"&&t<="9"||"."==t&&!e}isWhiteSpace_(t){return" "==t||"\t"==t||"\r"==t||"\n"==t}nextChar_(){return this.wkt.charAt(++this.index_)}nextToken(){const t=this.nextChar_(),e=this.index_;let i,n=t;if("("==t)i=qE;else if(","==t)i=JE;else if(")"==t)i=HE;else if(this.isNumeric_(t)||"-"==t)i=$E,n=this.readNumber_();else if(this.isAlpha_(t))i=KE,n=this.readText_();else{if(this.isWhiteSpace_(t))return this.nextToken();if(""!==t)throw new Error("Unexpected character: "+t);i=QE}return{position:e,value:n,type:i}}readNumber_(){let t;const e=this.index_;let i=!1,n=!1;do{"."==t?i=!0:"e"!=t&&"E"!=t||(n=!0),t=this.nextChar_()}while(this.isNumeric_(t,i)||!n&&("e"==t||"E"==t)||n&&("-"==t||"+"==t));return parseFloat(this.wkt.substring(e,this.index_--))}readText_(){let t;const e=this.index_;do{t=this.nextChar_()}while(this.isAlpha_(t));return this.wkt.substring(e,this.index_--).toUpperCase()}}class iC{constructor(t){this.lexer_=t,this.token_={position:0,type:YE},this.layout_="XY"}consume_(){this.token_=this.lexer_.nextToken()}isTokenType(t){return this.token_.type==t}match(t){const e=this.isTokenType(t);return e&&this.consume_(),e}parse(){return this.consume_(),this.parseGeometry_()}parseGeometryLayout_(){let t="XY";const e=this.token_;if(this.isTokenType(KE)){const i=e.value;"Z"===i?t="XYZ":"M"===i?t="XYM":"ZM"===i&&(t="XYZM"),"XY"!==t&&this.consume_()}return t}parseGeometryCollectionText_(){if(this.match(qE)){const t=[];do{t.push(this.parseGeometry_())}while(this.match(JE));if(this.match(HE))return t}throw new Error(this.formatErrorMessage_())}parsePointText_(){if(this.match(qE)){const t=this.parsePoint_();if(this.match(HE))return t}throw new Error(this.formatErrorMessage_())}parseLineStringText_(){if(this.match(qE)){const t=this.parsePointList_();if(this.match(HE))return t}throw new Error(this.formatErrorMessage_())}parsePolygonText_(){if(this.match(qE)){const t=this.parseLineStringTextList_();if(this.match(HE))return t}throw new Error(this.formatErrorMessage_())}parseMultiPointText_(){if(this.match(qE)){let t;if(t=this.token_.type==qE?this.parsePointTextList_():this.parsePointList_(),this.match(HE))return t}throw new Error(this.formatErrorMessage_())}parseMultiLineStringText_(){if(this.match(qE)){const t=this.parseLineStringTextList_();if(this.match(HE))return t}throw new Error(this.formatErrorMessage_())}parseMultiPolygonText_(){if(this.match(qE)){const t=this.parsePolygonTextList_();if(this.match(HE))return t}throw new Error(this.formatErrorMessage_())}parsePoint_(){const t=[],e=this.layout_.length;for(let i=0;i0&&(n+=" "+e)}return 0===i.length?n+" "+ZE:n+"("+i+")"}var lC=class extends vv{constructor(t){super(),t=t||{},this.splitCollection_=void 0!==t.splitCollection&&t.splitCollection}parse_(t){const e=new eC(t);return new iC(e).parse()}readFeatureFromText(t,e){const i=this.readGeometryFromText(t,e),n=new Ot;return n.setGeometry(i),n}readFeaturesFromText(t,e){let i=[];const n=this.readGeometryFromText(t,e);i=this.splitCollection_&&"GeometryCollection"==n.getType()?n.getGeometriesArray():[n];const r=[];for(let t=0,e=i.length;tc*oR||h>u*oR?this.resetExtent_():le(s,n)||this.recenter_()}resetExtent_(){const t=this.getMap(),e=this.ovmap_,i=t.getSize(),n=t.getView().calculateExtentInternal(i),r=e.getView(),s=Math.log(7.5)/Math.LN2;Be(n,1/(Math.pow(2,s/2)*aR)),r.fitInternal(Nr(n))}recenter_(){const t=this.getMap(),e=this.ovmap_,i=t.getView();e.getView().setCenterInternal(i.getCenterInternal())}updateBox_(){const t=this.getMap(),e=this.ovmap_;if(!t.isRendered()||!e.isRendered())return;const i=t.getSize(),n=t.getView(),r=e.getView(),s=this.rotateWithView_?0:-n.getRotation(),o=this.boxOverlay_,a=this.boxOverlay_.getElement(),l=n.getCenterInternal(),h=n.getResolution(),c=r.getResolution(),u=i[0]*h/c,d=i[1]*h/c;if(o.setPosition(l),a){a.style.width=u+"px",a.style.height=d+"px";const t="rotate("+s+"rad)";a.style.transform=t}}updateBoxAfterOvmapIsRendered_(){this.ovmapPostrenderKey_||(this.ovmapPostrenderKey_=D(this.ovmap_,Mo,(function(t){delete this.ovmapPostrenderKey_,this.updateBox_()}),this))}handleClick_(t){t.preventDefault(),this.handleToggle_()}handleToggle_(){this.element.classList.toggle(Ys),this.collapsed_?St(this.collapseLabel_,this.label_):St(this.label_,this.collapseLabel_),this.collapsed_=!this.collapsed_;const t=this.ovmap_;if(!this.collapsed_){if(t.isRendered())return this.viewExtent_=void 0,void t.render();t.updateSize(),this.resetExtent_(),this.updateBoxAfterOvmapIsRendered_()}}getCollapsible(){return this.collapsible_}setCollapsible(t){this.collapsible_!==t&&(this.collapsible_=t,this.element.classList.toggle("ol-uncollapsible"),!t&&this.collapsed_&&this.handleToggle_())}setCollapsed(t){this.collapsible_&&this.collapsed_!==t&&this.handleToggle_()}getCollapsed(){return this.collapsed_}getRotateWithView(){return this.rotateWithView_}setRotateWithView(t){this.rotateWithView_!==t&&(this.rotateWithView_=t,0!==this.getMap().getView().getRotation()&&(this.rotateWithView_?this.handleRotationChanged_():this.ovmap_.getView().setRotation(0),this.viewExtent_=void 0,this.validateExtent_(),this.updateBox_()))}getOverviewMap(){return this.ovmap_}render(t){this.validateExtent_(),this.updateBox_()}};const hR="units",cR=[1,2,5],uR=25.4/.28;var dR=class extends ga{constructor(t){t=t||{};const e=document.createElement("div");e.style.pointerEvents="none",super({element:e,render:t.render,target:t.target}),this.on,this.once,this.un;const i=void 0!==t.className?t.className:t.bar?"ol-scale-bar":"ol-scale-line";this.innerElement_=document.createElement("div"),this.innerElement_.className=i+"-inner",this.element.className=i+" "+Vs,this.element.appendChild(this.innerElement_),this.viewState_=null,this.minWidth_=void 0!==t.minWidth?t.minWidth:64,this.maxWidth_=t.maxWidth,this.renderedVisible_=!1,this.renderedWidth_=void 0,this.renderedHTML_="",this.addChangeListener(hR,this.handleUnitsChanged_),this.setUnits(t.units||"metric"),this.scaleBar_=t.bar||!1,this.scaleBarSteps_=t.steps||4,this.scaleBarText_=t.text||!1,this.dpi_=t.dpi||void 0}getUnits(){return this.get(hR)}handleUnitsChanged_(){this.updateElement_()}setUnits(t){this.set(hR,t)}setDpi(t){this.dpi_=t}updateElement_(){const t=this.viewState_;if(!t)return void(this.renderedVisible_&&(this.element.style.display="none",this.renderedVisible_=!1));const e=t.center,i=t.projection,n=this.getUnits(),r="degrees"==n?"degrees":"m";let s=ln(i,t.resolution,e,r);const o=this.minWidth_*(this.dpi_||uR)/uR,a=void 0!==this.maxWidth_?this.maxWidth_*(this.dpi_||uR)/uR:void 0;let l=o*s,h="";if("degrees"==n){const t=Ye.degrees;l*=t,l=a){c=g,u=f,d=p;break}if(u>=o)break;g=c,f=u,p=d,++m}const _=this.scaleBar_?this.createScaleBar(u,c,h):c.toFixed(d<0?-d:0)+" "+h;this.renderedHTML_!=_&&(this.innerElement_.innerHTML=_,this.renderedHTML_=_),this.renderedWidth_!=u&&(this.innerElement_.style.width=u+"px",this.renderedWidth_=u),this.renderedVisible_||(this.element.style.display="",this.renderedVisible_=!0)}createScaleBar(t,e,i){const n=this.getScaleForResolution(),r=n<1?Math.round(1/n).toLocaleString()+" : 1":"1 : "+Math.round(n).toLocaleString(),s=this.scaleBarSteps_,o=t/s,a=[this.createMarker("absolute")];for(let n=0;n
`+this.createMarker("relative")+(n%2==0||2===s?this.createStepText(n,t,!1,e,i):"")+"")}a.push(this.createStepText(s,t,!0,e,i));return(this.scaleBarText_?`
`+r+"
":"")+a.join("")}createMarker(t){return`
`}createStepText(t,e,i,n,r){const s=(0===t?0:Math.round(n/this.scaleBarSteps_*t*100)/100)+(0===t?"":" "+r);return`
`+s+"
"}getScaleForResolution(){return ln(this.viewState_.projection,this.viewState_.resolution,this.viewState_.center,"m")*(1e3/25.4)*(this.dpi_||uR)}render(t){const e=t.frameState;this.viewState_=e?e.viewState:null,this.updateElement_()}};const gR=0,fR=1;var pR=class extends ga{constructor(t){t=t||{},super({element:document.createElement("div"),render:t.render}),this.dragListenerKeys_=[],this.currentResolution_=void 0,this.direction_=gR,this.dragging_,this.heightLimit_=0,this.widthLimit_=0,this.startX_,this.startY_,this.thumbSize_=null,this.sliderInitialized_=!1,this.duration_=void 0!==t.duration?t.duration:200;const e=void 0!==t.className?t.className:"ol-zoomslider",i=document.createElement("button");i.setAttribute("type","button"),i.className=e+"-thumb "+Vs;const r=this.element;r.className=e+" "+"ol-unselectable "+Zs,r.appendChild(i),r.addEventListener(Po,this.handleDraggerStart_.bind(this),!1),r.addEventListener(bo,this.handleDraggerDrag_.bind(this),!1),r.addEventListener(Io,this.handleDraggerEnd_.bind(this),!1),r.addEventListener(C,this.handleContainerClick_.bind(this),!1),i.addEventListener(C,n,!1)}setMap(t){super.setMap(t),t&&t.render()}initSlider_(){const t=this.element;let e=t.offsetWidth,i=t.offsetHeight;if(0===e&&0===i)return this.sliderInitialized_=!1;const n=getComputedStyle(t);e-=parseFloat(n.paddingRight)+parseFloat(n.paddingLeft),i-=parseFloat(n.paddingTop)+parseFloat(n.paddingBottom);const r=t.firstElementChild,s=getComputedStyle(r),o=r.offsetWidth+parseFloat(s.marginRight)+parseFloat(s.marginLeft),a=r.offsetHeight+parseFloat(s.marginTop)+parseFloat(s.marginBottom);return this.thumbSize_=[o,a],e>i?(this.direction_=fR,this.widthLimit_=e-o):(this.direction_=gR,this.heightLimit_=i-a),this.sliderInitialized_=!0}handleContainerClick_(t){const e=this.getMap().getView(),i=this.getRelativePosition_(t.offsetX-this.thumbSize_[0]/2,t.offsetY-this.thumbSize_[1]/2),n=this.getResolutionForPosition_(i),r=e.getConstrainedZoom(e.getZoomForResolution(n));e.animateInternal({zoom:r,duration:this.duration_,easing:nt})}handleDraggerStart_(t){if(!this.dragging_&&t.target===this.element.firstElementChild){const e=this.element.firstElementChild;if(this.getMap().getView().beginInteraction(),this.startX_=t.clientX-parseFloat(e.style.left),this.startY_=t.clientY-parseFloat(e.style.top),this.dragging_=!0,0===this.dragListenerKeys_.length){const t=this.handleDraggerDrag_,e=this.handleDraggerEnd_,i=this.getMap().getOwnerDocument();this.dragListenerKeys_.push(N(i,bo,t,this),N(i,Io,e,this))}}}handleDraggerDrag_(t){if(this.dragging_){const e=t.clientX-this.startX_,i=t.clientY-this.startY_,n=this.getRelativePosition_(e,i);this.currentResolution_=this.getResolutionForPosition_(n),this.getMap().getView().setResolution(this.currentResolution_)}}handleDraggerEnd_(t){if(this.dragging_){this.getMap().getView().endInteraction(),this.dragging_=!1,this.startX_=void 0,this.startY_=void 0,this.dragListenerKeys_.forEach(G),this.dragListenerKeys_.length=0}}setThumbPosition_(t){const e=this.getPositionForResolution_(t),i=this.element.firstElementChild;this.direction_==fR?i.style.left=this.widthLimit_*e+"px":i.style.top=this.heightLimit_*e+"px"}getRelativePosition_(t,e){let i;return i=this.direction_===fR?t/this.widthLimit_:e/this.heightLimit_,_i(i,0,1)}getResolutionForPosition_(t){return this.getMap().getView().getResolutionForValueFunction()(1-t)}getPositionForResolution_(t){return _i(1-this.getMap().getView().getValueForResolutionFunction()(t),0,1)}render(t){if(!t.frameState)return;if(!this.sliderInitialized_&&!this.initSlider_())return;const e=t.frameState.viewState.resolution;this.currentResolution_=e,this.setThumbPosition_(e)}};var mR=class extends ga{constructor(t){t=t||{},super({element:document.createElement("div"),target:t.target}),this.extent=t.extent?t.extent:null;const e=void 0!==t.className?t.className:"ol-zoom-extent",i=void 0!==t.label?t.label:"E",n=void 0!==t.tipLabel?t.tipLabel:"Fit to extent",r=document.createElement("button");r.setAttribute("type","button"),r.title=n,r.appendChild("string"==typeof i?document.createTextNode(i):i),r.addEventListener(C,this.handleClick_.bind(this),!1);const s=e+" "+"ol-unselectable "+Zs,o=this.element;o.className=s,o.appendChild(r)}handleClick_(t){t.preventDefault(),this.handleZoomToExtent()}handleZoomToExtent(){const t=this.getMap().getView(),e=this.extent?this.extent:t.getProjection().getExtent();t.fitInternal(Nr(e))}},_R={};return _R.AssertionError=i,_R.Collection=H,_R.Collection.CollectionEvent=q,_R.DataTile=Lt,_R.DataTile.asArrayLike=Rt,_R.DataTile.asImageLike=Ct,_R.DataTile.toArray=Pt,_R.Disposable=o,_R.Feature=Ot,_R.Feature.createStyleFunction=At,_R.Geolocation=Hr,_R.Geolocation.GeolocationError=qr,_R.Image=rs,_R.Image.listenImage=ns,_R.ImageBase=$r,_R.ImageCanvas=ss,_R.ImageTile=os,_R.Kinetic=as,_R.Map=ul,_R.MapBrowserEvent=Co,_R.MapBrowserEventHandler=Fo,_R.MapEvent=Eo,_R.Object=W,_R.Object.ObjectEvent=V,_R.Observable=B,_R.Observable.unByKey=j,_R.Overlay=_l,_R.Tile=ot,_R.TileCache=Rl,_R.TileQueue=Xo,_R.TileQueue.getTilePriority=Vo,_R.TileRange=Il,_R.TileRange.createOrUpdate=Pl,_R.VectorRenderTile=Fl,_R.VectorTile=Ml,_R.View=da,_R.View.createCenterConstraint=aa,_R.View.createResolutionConstraint=la,_R.View.createRotationConstraint=ha,_R.View.isNoopAnimation=ca,_R.array={},_R.array.ascending=l,_R.array.binarySearch=a,_R.array.equals=d,_R.array.extend=u,_R.array.isSorted=g,_R.array.linearFindNearest=h,_R.array.remove=function(t,e){const i=t.indexOf(e),n=i>-1;return n&&t.splice(i,1),n},_R.array.reverseSubArray=c,_R.array.stableSort=function(t,e){const i=t.length,n=Array(t.length);let r;for(r=0;rHi.info||console.log(...t)},_R.console.setLevel=function(t){$i=Hi[t]},_R.console.warn=Ji,_R.control={},_R.control.Attribution=fa,_R.control.Control=ga,_R.control.FullScreen=iR,_R.control.MousePosition=sR,_R.control.OverviewMap=lR,_R.control.Rotate=pa,_R.control.ScaleLine=dR,_R.control.Zoom=ma,_R.control.ZoomSlider=pR,_R.control.ZoomToExtent=mR,_R.control.defaults={},_R.control.defaults.defaults=_a,_R.coordinate={},_R.coordinate.add=Fi,_R.coordinate.closestOnCircle=Mi,_R.coordinate.closestOnSegment=Ai,_R.coordinate.createStringXY=function(t){return function(e){return Ui(e,t)}},_R.coordinate.degreesToStringHDMS=Oi,_R.coordinate.distance=Bi,_R.coordinate.equals=Di,_R.coordinate.format=Ni,_R.coordinate.getWorldsAway=Vi,_R.coordinate.rotate=Gi,_R.coordinate.scale=ki,_R.coordinate.squaredDistance=ji,_R.coordinate.squaredDistanceToSegment=zi,_R.coordinate.toStringHDMS=function(t,e){return t?Oi("NS",t[1],e)+" "+Oi("EW",t[0],e):""},_R.coordinate.toStringXY=Ui,_R.coordinate.wrapX=Xi,_R.css={},_R.css.CLASS_COLLAPSED=Ys,_R.css.CLASS_CONTROL=Zs,_R.css.CLASS_HIDDEN=Us,_R.css.CLASS_SELECTABLE=Xs,_R.css.CLASS_UNSELECTABLE=Vs,_R.css.CLASS_UNSUPPORTED=Ws,_R.css.getFontParameters=Hs,_R.dom={},_R.dom.createCanvasContext2D=_t,_R.dom.outerHeight=vt,_R.dom.outerWidth=xt,_R.dom.releaseCanvas=yt,_R.dom.removeChildren=Tt,_R.dom.removeNode=wt,_R.dom.replaceChildren=Et,_R.dom.replaceNode=St,_R.easing={},_R.easing.easeIn=it,_R.easing.easeOut=nt,_R.easing.inAndOut=rt,_R.easing.linear=st,_R.easing.upAndDown=function(t){return t<.5?rt(2*t):1-rt(2*(t-.5))},_R.events={},_R.events.Event=r,_R.events.Event.preventDefault=function(t){t.preventDefault()},_R.events.Event.stopPropagation=n,_R.events.Target=S,_R.events.condition={},_R.events.condition.all=Ca,_R.events.condition.altKeyOnly=Ra,_R.events.condition.altShiftKeysOnly=ba,_R.events.condition.always=La,_R.events.condition.click=function(t){return t.type==Ro.CLICK},_R.events.condition.doubleClick=function(t){return t.type==Ro.DBLCLICK},_R.events.condition.focus=Pa,_R.events.condition.focusWithTabindex=Ia,_R.events.condition.mouseActionButton=Fa,_R.events.condition.mouseOnly=Ga,_R.events.condition.never=Ma,_R.events.condition.noModifierKeys=Oa,_R.events.condition.penOnly=function(t){const e=t.originalEvent;return Ft(void 0!==e,56),"pen"===e.pointerType},_R.events.condition.platformModifierKeyOnly=function(t){const e=t.originalEvent;return!e.altKey&&(dt?e.metaKey:e.ctrlKey)&&!e.shiftKey},_R.events.condition.pointerMove=function(t){return"pointermove"==t.type},_R.events.condition.primaryAction=ka,_R.events.condition.shiftKeyOnly=Na,_R.events.condition.singleClick=Aa,_R.events.condition.targetNotEditable=Da,_R.events.condition.touchOnly=function(t){const e=t.originalEvent;return Ft(void 0!==e,56),"touch"===e.pointerType},_R.events.listen=N,_R.events.listenOnce=D,_R.events.unlistenByKey=G,_R.extent={},_R.extent.applyTransform=Ue,_R.extent.approximatelyEquals=_e,_R.extent.boundingExtent=ne,_R.extent.buffer=re,_R.extent.clone=se,_R.extent.closestSquaredDistanceXY=oe,_R.extent.containsCoordinate=ae,_R.extent.containsExtent=le,_R.extent.containsXY=he,_R.extent.coordinateRelationship=ce,_R.extent.createEmpty=ue,_R.extent.createOrUpdate=de,_R.extent.createOrUpdateEmpty=ge,_R.extent.createOrUpdateFromCoordinate=fe,_R.extent.createOrUpdateFromCoordinates=function(t,e){return ve(ge(e),t)},_R.extent.createOrUpdateFromFlatCoordinates=pe,_R.extent.createOrUpdateFromRings=function(t,e){return we(ge(e),t)},_R.extent.equals=me,_R.extent.extend=ye,_R.extent.extendCoordinate=xe,_R.extent.extendCoordinates=ve,_R.extent.extendFlatCoordinates=Se,_R.extent.extendRings=we,_R.extent.extendXY=Te,_R.extent.forEachCorner=Ee,_R.extent.getArea=Ce,_R.extent.getBottomLeft=Re,_R.extent.getBottomRight=be,_R.extent.getCenter=Pe,_R.extent.getCorner=Ie,_R.extent.getEnlargedArea=function(t,e){const i=Math.min(t[0],e[0]),n=Math.min(t[1],e[1]);return(Math.max(t[2],e[2])-i)*(Math.max(t[3],e[3])-n)},_R.extent.getForViewAndSize=Le,_R.extent.getHeight=Me,_R.extent.getIntersection=Ae,_R.extent.getIntersectionArea=function(t,e){return Ce(Ae(t,e))},_R.extent.getMargin=function(t){return De(t)+Me(t)},_R.extent.getRotatedViewport=Fe,_R.extent.getSize=function(t){return[t[2]-t[0],t[3]-t[1]]},_R.extent.getTopLeft=Oe,_R.extent.getTopRight=Ne,_R.extent.getWidth=De,_R.extent.intersects=Ge,_R.extent.intersectsSegment=ze,_R.extent.isEmpty=ke,_R.extent.returnOrUpdate=je,_R.extent.scaleFromCenter=Be,_R.extent.wrapAndSliceX=Ve,_R.extent.wrapX=Xe,_R.featureloader={},_R.featureloader.loadFeaturesXhr=Dl,_R.featureloader.setWithCredentials=function(t){Nl=t},_R.featureloader.xhr=Gl,_R.format={},_R.format.EsriJSON=ox,_R.format.Feature=f_,_R.format.Feature.transformExtentWithOptions=m_,_R.format.Feature.transformGeometryWithOptions=p_,_R.format.GML=Ax,_R.format.GML2=Px,_R.format.GML3=Fx,_R.format.GML32=Nx,_R.format.GMLBase=ux,_R.format.GMLBase.GMLNS=lx,_R.format.GPX=pv,_R.format.GeoJSON=yv,_R.format.IGC=Cv,_R.format.IIIFInfo=jc,_R.format.JSONFeature=Qy,_R.format.KML=Cw,_R.format.KML.getDefaultFillStyle=function(){return zv},_R.format.KML.getDefaultImageStyle=function(){return Xv},_R.format.KML.getDefaultStrokeStyle=function(){return Wv},_R.format.KML.getDefaultStyle=function(){return Yv},_R.format.KML.getDefaultStyleArray=function(){return qv},_R.format.KML.getDefaultTextStyle=function(){return Zv},_R.format.KML.readFlatCoordinates=tS,_R.format.MVT=X_,_R.format.OSMXML=Fw,_R.format.OWS=qw,_R.format.Polyline=sT,_R.format.Polyline.decodeDeltas=$w,_R.format.Polyline.decodeFloats=Qw,_R.format.Polyline.decodeSignedIntegers=eT,_R.format.Polyline.decodeUnsignedIntegers=nT,_R.format.Polyline.encodeDeltas=Hw,_R.format.Polyline.encodeFloats=Jw,_R.format.Polyline.encodeSignedIntegers=tT,_R.format.Polyline.encodeUnsignedInteger=rT,_R.format.Polyline.encodeUnsignedIntegers=iT,_R.format.TextFeature=vv,_R.format.TopoJSON=dT,_R.format.WFS=LE,_R.format.WFS.writeFilter=function(t,e){const i=id(IE(e=e||"1.1.0"),"Filter"),n={node:i};return Object.assign(n,{version:e,filter:t}),gE(i,t,[n]),i},_R.format.WKB=VE,_R.format.WKT=lC,_R.format.WMSCapabilities=MC,_R.format.WMSGetFeatureInfo=AC,_R.format.WMTSCapabilities=qC,_R.format.XML=Mw,_R.format.XMLFeature=ax,_R.format.filter={},_R.format.filter.And=pT,_R.format.filter.Bbox=mT,_R.format.filter.Comparison=ST,_R.format.filter.ComparisonBinary=TT,_R.format.filter.Contains=yT,_R.format.filter.DWithin=xT,_R.format.filter.Disjoint=vT,_R.format.filter.During=wT,_R.format.filter.EqualTo=ET,_R.format.filter.Filter=gT,_R.format.filter.GreaterThan=CT,_R.format.filter.GreaterThanOrEqualTo=RT,_R.format.filter.Intersects=bT,_R.format.filter.IsBetween=PT,_R.format.filter.IsLike=IT,_R.format.filter.IsNull=LT,_R.format.filter.LessThan=FT,_R.format.filter.LessThanOrEqualTo=MT,_R.format.filter.LogicalNary=fT,_R.format.filter.Not=AT,_R.format.filter.NotEqualTo=OT,_R.format.filter.Or=NT,_R.format.filter.ResourceId=DT,_R.format.filter.Spatial=_T,_R.format.filter.Within=GT,_R.format.filter.and=kT,_R.format.filter.bbox=jT,_R.format.filter.between=function(t,e,i){return new PT(t,e,i)},_R.format.filter.contains=function(t,e,i){return new yT(t,e,i)},_R.format.filter.disjoint=function(t,e,i){return new vT(t,e,i)},_R.format.filter.during=function(t,e,i){return new wT(t,e,i)},_R.format.filter.dwithin=function(t,e,i,n,r){return new xT(t,e,i,n,r)},_R.format.filter.equalTo=function(t,e,i){return new ET(t,e,i)},_R.format.filter.greaterThan=function(t,e){return new CT(t,e)},_R.format.filter.greaterThanOrEqualTo=function(t,e){return new RT(t,e)},_R.format.filter.intersects=function(t,e,i){return new bT(t,e,i)},_R.format.filter.isNull=function(t){return new LT(t)},_R.format.filter.lessThan=function(t,e){return new FT(t,e)},_R.format.filter.lessThanOrEqualTo=function(t,e){return new MT(t,e)},_R.format.filter.like=function(t,e,i,n,r,s){return new IT(t,e,i,n,r,s)},_R.format.filter.not=function(t){return new AT(t)},_R.format.filter.notEqualTo=function(t,e,i){return new OT(t,e,i)},_R.format.filter.or=function(t){const e=[null].concat(Array.prototype.slice.call(arguments));return new(Function.prototype.bind.apply(NT,e))},_R.format.filter.resourceId=function(t){return new DT(t)},_R.format.filter.within=function(t,e,i){return new GT(t,e,i)},_R.format.xlink={},_R.format.xlink.readHref=Aw,_R.format.xsd={},_R.format.xsd.readBoolean=dx,_R.format.xsd.readBooleanString=gx,_R.format.xsd.readDateTime=fx,_R.format.xsd.readDecimal=px,_R.format.xsd.readDecimalString=mx,_R.format.xsd.readNonNegativeIntegerString=yx,_R.format.xsd.readPositiveInteger=_x,_R.format.xsd.readString=xx,_R.format.xsd.writeBooleanTextNode=vx,_R.format.xsd.writeCDATASection=Sx,_R.format.xsd.writeDateTimeTextNode=wx,_R.format.xsd.writeDecimalTextNode=Tx,_R.format.xsd.writeNonNegativeIntegerTextNode=Ex,_R.format.xsd.writeStringTextNode=Cx,_R.functions={},_R.functions.FALSE=p,_R.functions.TRUE=f,_R.functions.VOID=m,_R.functions.memoizeOne=_,_R.functions.toPromise=y,_R.geom={},_R.geom.Circle=Am,_R.geom.Geometry=Nn,_R.geom.GeometryCollection=Dm,_R.geom.LineString=zm,_R.geom.LinearRing=cr,_R.geom.MultiLineString=Xm,_R.geom.MultiPoint=Wm,_R.geom.MultiPolygon=Km,_R.geom.Point=dr,_R.geom.Polygon=Ar,_R.geom.Polygon.circular=Or,_R.geom.Polygon.fromCircle=Dr,_R.geom.Polygon.fromExtent=Nr,_R.geom.Polygon.makeRegular=Gr,_R.geom.SimpleGeometry=kn,_R.geom.SimpleGeometry.getStrideForLayout=Dn,_R.geom.SimpleGeometry.transformGeom2D=Gn,_R.geom.flat={},_R.geom.flat.area={},_R.geom.flat.area.linearRing=or,_R.geom.flat.area.linearRings=ar,_R.geom.flat.area.linearRingss=lr,_R.geom.flat.center={},_R.geom.flat.center.linearRingss=Zm,_R.geom.flat.closest={},_R.geom.flat.closest.arrayMaxSquaredDelta=zn,_R.geom.flat.closest.assignClosestArrayPoint=Vn,_R.geom.flat.closest.assignClosestMultiArrayPoint=Wn,_R.geom.flat.closest.assignClosestPoint=Xn,_R.geom.flat.closest.maxSquaredDelta=Bn,_R.geom.flat.closest.multiArrayMaxSquaredDelta=Un,_R.geom.flat.contains={},_R.geom.flat.contains.linearRingContainsExtent=gr,_R.geom.flat.contains.linearRingContainsXY=fr,_R.geom.flat.contains.linearRingsContainsXY=pr,_R.geom.flat.contains.linearRingssContainsXY=mr,_R.geom.flat.deflate={},_R.geom.flat.deflate.deflateCoordinate=Zn,_R.geom.flat.deflate.deflateCoordinates=Yn,_R.geom.flat.deflate.deflateCoordinatesArray=Kn,_R.geom.flat.deflate.deflateMultiCoordinatesArray=qn,_R.geom.flat.flip={},_R.geom.flat.flip.flipXY=$y,_R.geom.flat.geodesic={},_R.geom.flat.geodesic.greatCircleArc=function(t,e,i,n,r,s){const o=an("EPSG:4326"),a=Math.cos(wi(e)),l=Math.sin(wi(e)),h=Math.cos(wi(n)),c=Math.sin(wi(n)),u=Math.cos(wi(i-t)),d=Math.sin(wi(i-t)),g=l*c+a*h*u;return n_((function(e){if(1<=g)return[i,n];const r=e*Math.acos(g),s=Math.cos(r),o=Math.sin(r),f=d*h,p=a*c-l*h*u,m=Math.atan2(f,p),_=Math.asin(l*s+a*o*Math.cos(m));return[Si(wi(t)+Math.atan2(Math.sin(m)*o*a,s-l*Math.sin(_))),Si(_)]}),mn(o,r),s)},_R.geom.flat.geodesic.meridian=r_,_R.geom.flat.geodesic.parallel=s_,_R.geom.flat.inflate={},_R.geom.flat.inflate.inflateCoordinates=nr,_R.geom.flat.inflate.inflateCoordinatesArray=rr,_R.geom.flat.inflate.inflateMultiCoordinatesArray=sr,_R.geom.flat.interiorpoint={},_R.geom.flat.interiorpoint.getInteriorPointOfArray=_r,_R.geom.flat.interiorpoint.getInteriorPointsOfMultiArray=yr,_R.geom.flat.interpolate={},_R.geom.flat.interpolate.interpolatePoint=Gm,_R.geom.flat.interpolate.lineStringCoordinateAtM=km,_R.geom.flat.interpolate.lineStringsCoordinateAtM=jm,_R.geom.flat.intersectsextent={},_R.geom.flat.intersectsextent.intersectsLineString=vr,_R.geom.flat.intersectsextent.intersectsLineStringArray=Sr,_R.geom.flat.intersectsextent.intersectsLinearRing=wr,_R.geom.flat.intersectsextent.intersectsLinearRingArray=Tr,_R.geom.flat.intersectsextent.intersectsLinearRingMultiArray=Er,_R.geom.flat.length={},_R.geom.flat.length.lineStringLength=hm,_R.geom.flat.length.linearRingLength=function(t,e,i,n){let r=hm(t,e,i,n);const s=t[i-n]-t[e],o=t[i-n+1]-t[e+1];return r+=Math.sqrt(s*s+o*o),r},_R.geom.flat.orient={},_R.geom.flat.orient.inflateEnds=Fr,_R.geom.flat.orient.linearRingIsClockwise=Rr,_R.geom.flat.orient.linearRingsAreOriented=br,_R.geom.flat.orient.linearRingssAreOriented=Pr,_R.geom.flat.orient.orientLinearRings=Ir,_R.geom.flat.orient.orientLinearRingsArray=Lr,_R.geom.flat.reverse={},_R.geom.flat.reverse.coordinates=Cr,_R.geom.flat.segments={},_R.geom.flat.segments.forEach=xr,_R.geom.flat.simplify={},_R.geom.flat.simplify.douglasPeucker=Hn,_R.geom.flat.simplify.douglasPeuckerArray=$n,_R.geom.flat.simplify.douglasPeuckerMultiArray=function(t,e,i,n,r,s,o,a){for(let l=0,h=i.length;l3&&!!or(t,e,i,n)},_R.geom.flat.transform={},_R.geom.flat.transform.rotate=Fn,_R.geom.flat.transform.scale=Mn,_R.geom.flat.transform.transform2D=Ln,_R.geom.flat.transform.translate=An,_R.has={},_R.has.DEVICE_PIXEL_RATIO=gt,_R.has.FIREFOX=lt,_R.has.IMAGE_DECODE=pt,_R.has.MAC=dt,_R.has.PASSIVE_EVENT_LISTENERS=mt,_R.has.SAFARI=ht,_R.has.SAFARI_BUG_237906=ct,_R.has.WEBKIT=ut,_R.has.WORKER_OFFSCREEN_CANVAS=ft,_R.interaction={},_R.interaction.DoubleClickZoom=wa,_R.interaction.DragAndDrop=ty,_R.interaction.DragAndDrop.DragAndDropEvent=Q_,_R.interaction.DragBox=Ya,_R.interaction.DragBox.DragBoxEvent=Za,_R.interaction.DragPan=ja,_R.interaction.DragRotate=Ba,_R.interaction.DragRotateAndZoom=ey,_R.interaction.DragZoom=Ka,_R.interaction.Draw=my,_R.interaction.Draw.DrawEvent=sy,_R.interaction.Draw.createBox=function(){return function(t,e,i){const n=ne([t[0],t[t.length-1]].map((function(t){return Tn(t,i)}))),r=[[Re(n),be(n),Ne(n),Oe(n),Re(n)]];e?e.setCoordinates(r):e=new Ar(r);const s=Sn();return s&&e.transform(i,s),e}},_R.interaction.Draw.createRegularPolygon=function(t,e){return function(i,n,r){const s=Tn(i[0],r),o=Tn(i[i.length-1],r),a=Math.sqrt(ji(s,o));n=n||Dr(new Am(s),t);let l=e;if(!e&&0!==e){const t=o[0]-s[0],e=o[1]-s[1];l=Math.atan2(e,t)}Gr(n,s,a,l);const h=Sn();return h&&n.transform(r,h),n}},_R.interaction.Extent=Ty,_R.interaction.Extent.ExtentEvent=yy,_R.interaction.Interaction=Sa,_R.interaction.Interaction.pan=xa,_R.interaction.Interaction.zoomByDelta=va,_R.interaction.KeyboardPan=Qa,_R.interaction.KeyboardZoom=tl,_R.interaction.Link=by,_R.interaction.Modify=Gy,_R.interaction.Modify.ModifyEvent=My,_R.interaction.MouseWheelZoom=el,_R.interaction.PinchRotate=il,_R.interaction.PinchZoom=nl,_R.interaction.Pointer=Ea,_R.interaction.Pointer.centroid=Ta,_R.interaction.Select=Uy,_R.interaction.Select.SelectEvent=jy,_R.interaction.Snap=Wy,_R.interaction.Translate=Hy,_R.interaction.Translate.TranslateEvent=qy,_R.interaction.defaults={},_R.interaction.defaults.defaults=rl,_R.layer={},_R.layer.Base=Fs,_R.layer.BaseImage=su,_R.layer.BaseTile=fu,_R.layer.BaseVector=Af,_R.layer.Graticule=l_,_R.layer.Group=To,_R.layer.Group.GroupEvent=vo,_R.layer.Heatmap=g_,_R.layer.Image=uu,_R.layer.Layer=ks,_R.layer.Layer.inView=Gs,_R.layer.MapboxVector=Z_,_R.layer.Tile=mu,_R.layer.Vector=i_,_R.layer.VectorImage=Y_,_R.layer.VectorTile=V_,_R.layer.WebGLPoints=K_,_R.layer.WebGLTile=$_,_R.loadingstrategy={},_R.loadingstrategy.all=kl,_R.loadingstrategy.bbox=function(t,e){return[t]},_R.loadingstrategy.tile=function(t){return function(e,i,n){const r=t.getZForResolution(bn(i,n)),s=t.getTileRangeForExtentAndZ(Cn(e,n),r),o=[],a=[r,0,0];for(a[1]=s.minX;a[1]<=s.maxX;++a[1])for(a[2]=s.minY;a[2]<=s.maxY;++a[2])o.push(En(t.getTileCoordExtent(a),n));return o}},_R.math={},_R.math.ceil=Pi,_R.math.clamp=_i,_R.math.floor=bi,_R.math.lerp=Ei,_R.math.modulo=Ti,_R.math.round=Ri,_R.math.solveLinearSystem=vi,_R.math.squaredDistance=xi,_R.math.squaredSegmentDistance=yi,_R.math.toDegrees=Si,_R.math.toFixed=Ci,_R.math.toRadians=wi,_R.net={},_R.net.ClientError=zl,_R.net.ResponseError=Bl,_R.net.getJSON=Ul,_R.net.jsonp=jl,_R.net.overrideXHR=function(t){"undefined"!=typeof XMLHttpRequest&&(Ol=XMLHttpRequest),global.XMLHttpRequest=t},_R.net.resolveUrl=Xl,_R.net.restoreXHR=function(){global.XMLHttpRequest=Ol},_R.obj={},_R.obj.clear=x,_R.obj.isEmpty=v,_R.proj={},_R.proj.Projection=Ke,_R.proj.Units={},_R.proj.Units.METERS_PER_UNIT=Ye,_R.proj.Units.fromCode=Ze,_R.proj.addCommon=In,_R.proj.addCoordinateTransforms=gn,_R.proj.addEquivalentProjections=hn,_R.proj.addEquivalentTransforms=cn,_R.proj.addProjection=sn,_R.proj.addProjections=on,_R.proj.clearAllProjections=function(){ci(),fi()},_R.proj.clearUserProjection=function(){xn=null},_R.proj.cloneTransform=nn,_R.proj.createProjection=un,_R.proj.createSafeCoordinateTransform=Pn,_R.proj.createTransformFromCoordinateTransform=dn,_R.proj.disableCoordinateWarning=en,_R.proj.epsg3857={},_R.proj.epsg3857.EXTENT=$e,_R.proj.epsg3857.HALF_SIZE=He,_R.proj.epsg3857.MAX_SAFE_Y=Qe,_R.proj.epsg3857.PROJECTIONS=ei,_R.proj.epsg3857.RADIUS=qe,_R.proj.epsg3857.WORLD_EXTENT=Je,_R.proj.epsg3857.fromEPSG4326=ii,_R.proj.epsg3857.toEPSG4326=ni,_R.proj.epsg4326={},_R.proj.epsg4326.EXTENT=si,_R.proj.epsg4326.METERS_PER_UNIT=oi,_R.proj.epsg4326.PROJECTIONS=li,_R.proj.epsg4326.RADIUS=ri,_R.proj.equivalent=fn,_R.proj.fromLonLat=function(t,e){return en(),_n(t,"EPSG:4326",void 0!==e?e:"EPSG:3857")},_R.proj.fromUserCoordinate=Tn,_R.proj.fromUserExtent=Cn,_R.proj.fromUserResolution=bn,_R.proj.get=an,_R.proj.getPointResolution=ln,_R.proj.getTransform=mn,_R.proj.getTransformFromProjections=pn,_R.proj.getUserProjection=Sn,_R.proj.identityTransform=rn,_R.proj.proj4={},_R.proj.proj4.fromEPSGCode=async function(t){"string"==typeof t&&(t=parseInt(t.split(":").pop(),10));const e=Qm;if(!e)throw new Error("Proj4 must be registered first with register(proj4)");const i="EPSG:"+t;return e.defs(i)||(e.defs(i,await e_(t)),t_(e)),an(i)},_R.proj.proj4.getEPSGLookup=function(){return e_},_R.proj.proj4.isRegistered=function(){return!!Qm},_R.proj.proj4.register=t_,_R.proj.proj4.setEPSGLookup=function(t){e_=t},_R.proj.proj4.unregister=function(){Qm=null},_R.proj.projections={},_R.proj.projections.add=di,_R.proj.projections.clear=ci,_R.proj.projections.get=ui,_R.proj.setUserProjection=vn,_R.proj.toLonLat=function(t,e){const i=_n(t,void 0!==e?e:"EPSG:3857","EPSG:4326"),n=i[0];return(n<-180||n>180)&&(i[0]=Ti(n+180,360)-180),i},_R.proj.toUserCoordinate=wn,_R.proj.toUserExtent=En,_R.proj.toUserResolution=Rn,_R.proj.transform=_n,_R.proj.transformExtent=yn,_R.proj.transformWithProjections=function(t,e,i){return pn(e,i)(t)},_R.proj.transforms={},_R.proj.transforms.add=pi,_R.proj.transforms.clear=fi,_R.proj.transforms.get=mi,_R.proj.transforms.remove=function(t,e){const i=t.getCode(),n=e.getCode(),r=gi[i][n];return delete gi[i][n],v(gi[i])&&delete gi[i],r},_R.proj.useGeographic=function(){vn("EPSG:4326")},_R.render={},_R.render.Box=za,_R.render.Event=zs,_R.render.Feature=Jm,_R.render.Feature.toFeature=function(t,e){const i=t.getId(),n=$m(t),r=t.getProperties(),s=new Ot;return void 0!==e&&s.setGeometryName(e),s.setGeometry(n),void 0!==i&&s.setId(i),s.setProperties(r,!0),s},_R.render.Feature.toGeometry=$m,_R.render.VectorContext=Vl,_R.render.canvas={},_R.render.canvas.Builder=Qp,_R.render.canvas.BuilderGroup=am,_R.render.canvas.Executor=xm,_R.render.canvas.ExecutorGroup=Tm,_R.render.canvas.ExecutorGroup.getPixelIndexArray=wm,_R.render.canvas.ImageBuilder=tm,_R.render.canvas.Immediate=Wl,_R.render.canvas.Instruction={},_R.render.canvas.Instruction.beginPathInstruction=$p,_R.render.canvas.Instruction.closePathInstruction=Jp,_R.render.canvas.Instruction.fillInstruction=qp,_R.render.canvas.Instruction.strokeInstruction=Hp,_R.render.canvas.LineStringBuilder=em,_R.render.canvas.PolygonBuilder=im,_R.render.canvas.TextBuilder=sm,_R.render.canvas.checkedFonts=ao,_R.render.canvas.defaultFillStyle=Js,_R.render.canvas.defaultFont=$s,_R.render.canvas.defaultLineCap=Qs,_R.render.canvas.defaultLineDash=to,_R.render.canvas.defaultLineDashOffset=0,_R.render.canvas.defaultLineJoin=eo,_R.render.canvas.defaultLineWidth=1,_R.render.canvas.defaultMiterLimit=io,_R.render.canvas.defaultPadding=oo,_R.render.canvas.defaultStrokeStyle=no,_R.render.canvas.defaultTextAlign=ro,_R.render.canvas.defaultTextBaseline=so,_R.render.canvas.drawImageOrLabel=yo,_R.render.canvas.getTextDimensions=_o,_R.render.canvas.hitdetect={},_R.render.canvas.hitdetect.HIT_DETECT_RESOLUTION=Em,_R.render.canvas.hitdetect.createHitDetectionImageData=Cm,_R.render.canvas.hitdetect.hitDetect=Rm,_R.render.canvas.measureAndCacheTextWidth=mo,_R.render.canvas.measureTextHeight=go,_R.render.canvas.measureTextWidth=po,_R.render.canvas.registerFont=uo,_R.render.canvas.rotateAtOffset=function(t,e,i,n){0!==e&&(t.translate(i,n),t.rotate(e),t.translate(-i,-n))},_R.render.canvas.textHeights=co,_R.render.getRenderPixel=function(t,e){return zt(t.inversePixelTransform,e.slice(0))},_R.render.getVectorContext=Jl,_R.render.toContext=function(t,e){const i=t.canvas,n=(e=e||{}).pixelRatio||gt,r=e.size;r&&(i.width=r[0]*n,i.height=r[1]*n,i.style.width=r[0]+"px",i.style.height=r[1]+"px");const s=[0,0,i.width,i.height],o=Xt([1,0,0,1,0,0],n,n);return new Wl(t,n,s,o,0)},_R.render.webgl={},_R.render.webgl.BatchRenderer=yp,_R.render.webgl.LineStringBatchRenderer=vp,_R.render.webgl.MixedGeometryBatch=Sp,_R.render.webgl.PointBatchRenderer=Tp,_R.render.webgl.PolygonBatchRenderer=Cp,_R.render.webgl.utils={},_R.render.webgl.utils.colorDecodeId=fp,_R.render.webgl.utils.colorEncodeId=gp,_R.render.webgl.utils.getBlankImageData=function(){const t=document.createElement("canvas").getContext("2d").createImageData(1,1);return t.data[0]=255,t.data[1]=255,t.data[2]=255,t.data[3]=255,t},_R.render.webgl.utils.writeLineSegmentToBuffers=function(t,e,i,n,r,s,o,a,l,h){const c=5+a.length,u=s.length/c,d=[t[e+0],t[e+1]],g=[t[i],t[i+1]],f=zt(h,[...d]),p=zt(h,[...g]);function m(t,e,i){const n=1e4;return Math.round(1500*e)+Math.round(1500*i)*n+t*n*n}function _(t,e,i){const n=Math.sqrt((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])),r=[(e[0]-t[0])/n,(e[1]-t[1])/n],s=[-r[1],r[0]],o=Math.sqrt((i[0]-t[0])*(i[0]-t[0])+(i[1]-t[1])*(i[1]-t[1])),a=[(i[0]-t[0])/o,(i[1]-t[1])/o],l=0===n||0===o?0:Math.acos(_i(a[0]*r[0]+a[1]*r[1],-1,1));return a[0]*s[0]+a[1]*s[1]>0?l:2*Math.PI-l}const y=null!==r;let x=0,v=0;if(null!==n){x=_(f,p,zt(h,[...[t[n],t[n+1]]]))}if(y){v=_(p,f,zt(h,[...[t[r],t[r+1]]]))}s.push(d[0],d[1],g[0],g[1],m(0,x,v)),s.push(...a),s.push(d[0],d[1],g[0],g[1],m(1,x,v)),s.push(...a),s.push(d[0],d[1],g[0],g[1],m(2,x,v)),s.push(...a),s.push(d[0],d[1],g[0],g[1],m(3,x,v)),s.push(...a),o.push(u,u+1,u+2,u+1,u+3,u+2)},_R.render.webgl.utils.writePointFeatureToBuffers=function(t,e,i,n,r,s){const o=3+r,a=t[e+0],l=t[e+1],h=cp;h.length=r;for(let i=0;i1?"projection"in e?i.TileMatrixSetLink.findIndex((function(t){const i=n.find((function(e){return e.Identifier==t.TileMatrixSet})).SupportedCRS,r=an(i),s=an(e.projection);return r&&s?fn(r,s):i==e.projection})):i.TileMatrixSetLink.findIndex((function(t){return t.TileMatrixSet==e.matrixSet})):0,r<0&&(r=0);const s=i.TileMatrixSetLink[r].TileMatrixSet,o=i.TileMatrixSetLink[r].TileMatrixSetLimits;let a=i.Format[0];"format"in e&&(a=e.format),r=i.Style.findIndex((function(t){return"style"in e?t.Title==e.style:t.isDefault})),r<0&&(r=0);const l=i.Style[r].Identifier,h={};"Dimension"in i&&i.Dimension.forEach((function(t,e,i){const n=t.Identifier;let r=t.Default;void 0===r&&(r=t.Value[0]),h[n]=r}));const c=t.Contents.TileMatrixSet.find((function(t){return t.Identifier==s}));let u;const d=c.SupportedCRS;if(d&&(u=an(d)),"projection"in e){const t=an(e.projection);t&&(u&&!fn(t,u)||(u=t))}let g=!1;const f="ne"==u.getAxisOrientation().substr(0,2);let p=c.TileMatrix[0],m={MinTileCol:0,MinTileRow:0,MaxTileCol:p.MatrixWidth-1,MaxTileRow:p.MatrixHeight-1};if(o){m=o[o.length-1];const t=c.TileMatrix.find((t=>t.Identifier===m.TileMatrix||c.Identifier+":"+t.Identifier===m.TileMatrix));t&&(p=t)}const _=28e-5*p.ScaleDenominator/u.getMetersPerUnit(),y=f?[p.TopLeftCorner[1],p.TopLeftCorner[0]]:p.TopLeftCorner,x=p.TileWidth*_,v=p.TileHeight*_;let S=c.BoundingBox;S&&f&&(S=[S[1],S[0],S[3],S[2]]);let w=[y[0]+x*m.MinTileCol,y[1]-v*(1+m.MaxTileRow),y[0]+x*(1+m.MaxTileCol),y[1]-v*m.MinTileRow];if(void 0!==S&&!le(S,w)){const t=i.WGS84BoundingBox,e=an("EPSG:4326").getExtent();if(w=S,t)g=t[0]===e[0]&&t[2]===e[2];else{const t=yn(S,c.SupportedCRS,"EPSG:4326");g=t[0]-1e-10<=e[0]&&t[2]+1e-10>=e[2]}}const T=Wu(c,w,o),E=[];let C=e.requestEncoding;if(C=void 0!==C?C:"","OperationsMetadata"in t&&"GetTile"in t.OperationsMetadata){const e=t.OperationsMetadata.GetTile.DCP.HTTP.Get;for(let t=0,i=e.length;t{const n=t.toString();if(!i.containsKey(n)){const r=e(t);i.set(n,r)}a.push(i.get(n))})),a}},_R.source.wms={},_R.source.wms.DEFAULT_VERSION=tu,_R.sphere={},_R.sphere.DEFAULT_RADIUS=Wi,_R.sphere.getArea=function t(e,i){const n=(i=i||{}).radius||Wi,r=i.projection||"EPSG:3857",s=e.getType();"GeometryCollection"!==s&&(e=e.clone().transform(r,"EPSG:4326"));let o,a,l,h,c,u,d=0;switch(s){case"Point":case"MultiPoint":case"LineString":case"MultiLineString":case"LinearRing":break;case"Polygon":for(o=e.getCoordinates(),d=Math.abs(Ki(o[0],n)),l=1,h=o.length;lMath.PI&&(a-=2*Math.PI),t=Math.sin(h),h=Math.cos(h),{x:((i=i/Math.sqrt(1-s*(t*t)))+e)*h*Math.cos(a),y:(i+e)*h*Math.sin(a),z:(i*(1-s)+e)*t}}function f(t,s,i,a){var h,e,n,r,o,l,u,c,M,f,d,p=t.x,m=t.y,y=t.z||0,_=Math.sqrt(p*p+m*m),g=Math.sqrt(p*p+m*m+y*y);if(_/i<1e-12){if(f=0,g/i<1e-12)return d=-a,{x:t.x,y:t.y,z:t.z}}else f=Math.atan2(m,p);for(h=y/g,r=(e=_/g)*(1-s)*(n=1/Math.sqrt(1-s*(2-s)*e*e)),o=h*n,M=0;M++,c=s*(c=i/Math.sqrt(1-s*o*o))/(c+(d=_*r+y*o-c*(1-s*o*o))),c=(u=h*(n=1/Math.sqrt(1-c*(2-c)*e*e)))*r-(l=e*(1-c)*n)*o,r=l,o=u,1e-24=s.lim[0])return r;if(h<0||h>=s.lim[1])return r;var o=h*s.lim[0]+a,l=s.cvs[o][0],u=s.cvs[o][1],c=s.cvs[++o][0],M=s.cvs[o][1];o+=s.lim[0];var f=s.cvs[o][0],t=s.cvs[o][1],i=s.cvs[--o][0],h=s.cvs[o][1],a=e*n,s=e*(1-n),o=(1-e)*(1-n),n=(1-e)*n;return r.x=o*l+s*c+n*i+a*f,r.y=o*u+s*M+n*h+a*t,r}function i(t){if("function"==typeof Number.isFinite){if(Number.isFinite(t))return;throw new TypeError("coordinates must be finite numbers")}if("number"!=typeof t||t!=t||!isFinite(t))throw new TypeError("coordinates must be finite numbers")}function b(t,s,i,a){var h,e;if(Array.isArray(i)&&(i=Ct(i)),St(i),t.datum&&s.datum&&(e=s,((h=t).datum.datum_type===G||h.datum.datum_type===L)&&"WGS84"!==e.datumCode||(e.datum.datum_type===G||e.datum.datum_type===L)&&"WGS84"!==h.datumCode)&&(i=b(t,h=new y("WGS84"),i,a),t=h),a&&"enu"!==t.axis&&(i=Nt(t,!1,i)),"longlat"===t.projName)i={x:i.x*X,y:i.y*X,z:i.z||0};else if(t.to_meter&&(i={x:i.x*t.to_meter,y:i.y*t.to_meter,z:i.z||0}),!(i=t.inverse(i)))return;if(t.from_greenwich&&(i.x+=t.from_greenwich),i=wt(t.datum,s.datum,i))return s.from_greenwich&&(i={x:i.x-s.from_greenwich,y:i.y,z:i.z||0}),"longlat"===s.projName?i={x:i.x*H,y:i.y*H,z:i.z||0}:(i=s.forward(i),s.to_meter&&(i={x:i.x/s.to_meter,y:i.y/s.to_meter,z:i.z||0})),a&&"enu"!==s.axis?Nt(s,!0,i):i}function v(s,i,a,t){var h,e;return Array.isArray(a)?(h=b(s,i,a,t)||{x:NaN,y:NaN},2=this.text.length)return;t=this.text[this.place++]}switch(this.state){case 1:return this.neutral(t);case 2:return this.keyword(t);case 4:return this.quoted(t);case 5:return this.afterquote(t);case 3:return this.number(t);case-1:return}},a.prototype.afterquote=function(t){if('"'===t)return this.word+='"',void(this.state=4);if(ht.test(t))return this.word=this.word.trim(),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in afterquote yet, index '+this.place)},a.prototype.afterItem=function(t){return","===t?(null!==this.word&&this.currentObject.push(this.word),this.word=null,void(this.state=1)):"]"===t?(this.level--,null!==this.word&&(this.currentObject.push(this.word),this.word=null),this.state=1,this.currentObject=this.stack.pop(),void(this.currentObject||(this.state=-1))):void 0},a.prototype.number=function(t){if(!et.test(t)){if(ht.test(t))return this.word=parseFloat(this.word),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in number yet, index '+this.place)}this.word+=t},a.prototype.quoted=function(t){'"'!==t?this.word+=t:this.state=5},a.prototype.keyword=function(t){if(at.test(t))this.word+=t;else{if("["===t){var s=[];return s.push(this.word),this.level++,null===this.root?this.root=s:this.currentObject.push(s),this.stack.push(this.currentObject),this.currentObject=s,void(this.state=1)}if(!ht.test(t))throw new Error("havn't handled \""+t+'" in keyword yet, index '+this.place);this.afterItem(t)}},a.prototype.neutral=function(t){if(it.test(t))return this.word=t,void(this.state=2);if('"'===t)return this.word="",void(this.state=4);if(et.test(t))return this.word=t,void(this.state=3);if(!ht.test(t))throw new Error("havn't handled \""+t+'" in neutral yet, index '+this.place);this.afterItem(t)},a.prototype.output=function(){for(;this.placeW?Math.tan(i):0,u=Math.pow(s,2),c=Math.pow(u,2),M=1-this.es*Math.pow(h,2);n/=Math.sqrt(M);s=zt(i,h,e,this.en),M=this.a*(this.k0*n*(1+r/6*(1-u+o+r/20*(5-18*u+c+14*o-58*u*o+r/42*(61+179*c-c*u-479*u)))))+this.x0,c=this.a*(this.k0*(s-this.ml0+h*a*n/2*(1+r/12*(5-u+9*o+4*l+r/30*(61+c-58*u+270*o-330*u*o+r/56*(1385+543*c-c*u-3111*u))))))+this.y0}else{u=e*Math.sin(a);if(Math.abs(Math.abs(u)-1)W?Math.tan(s):0,a=this.ep2*Math.pow(i,2),l=Math.pow(a,2),h=Math.pow(o,2),e=Math.pow(h,2),n=1-this.es*Math.pow(r,2),r=c*Math.sqrt(n)/this.k0,l=s-(n*=o)*(o=Math.pow(r,2))/(1-this.es)*.5*(1-o/12*(5+3*h-9*a*h+a-4*l-o/30*(61+90*h-252*a*h+45*e+46*a-o/56*(1385+3633*h+4095*e+1574*e*h)))),dt(this.long0+r*(1-o/6*(1+2*h+a-o/20*(5+28*h+24*e+8*a*h+6*a-o/42*(61+662*h+1320*e+720*e*h))))/i)):(l=D*lt(M),0)):(c=.5*((u=Math.exp(c/this.k0))-1/u),u=this.lat0+M/this.k0,u=Math.cos(u),n=Math.sqrt((1-Math.pow(u,2))/(1+Math.pow(c,2))),l=Math.asin(n),M<0&&(l=-l),0==c&&0===u?0:dt(Math.atan2(c,u)+this.long0)),t.x=u,t.y=l,t},names:["Fast_Transverse_Mercator","Fast Transverse Mercator"]},es={init:function(){if(!this.approx&&(isNaN(this.es)||this.es<=0))throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION["Fast_Transverse_Mercator"] in the WKT.');this.approx&&(hs.init.apply(this),this.forward=hs.forward,this.inverse=hs.inverse),this.x0=void 0!==this.x0?this.x0:0,this.y0=void 0!==this.y0?this.y0:0,this.long0=void 0!==this.long0?this.long0:0,this.lat0=void 0!==this.lat0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var t=this.es/(1+Math.sqrt(1-this.es)),s=t/(2-t),t=s;this.cgb[0]=s*(2+s*(-2/3+s*(s*(116/45+s*(26/45+-2854/675*s))-2))),this.cbg[0]=s*(s*(2/3+s*(4/3+s*(-82/45+s*(32/45+4642/4725*s))))-2),this.cgb[1]=(t*=s)*(7/3+s*(s*(-227/45+s*(2704/315+2323/945*s))-1.6)),this.cbg[1]=t*(5/3+s*(-16/15+s*(-13/9+s*(904/315+-1522/945*s)))),this.cgb[2]=(t*=s)*(56/15+s*(-136/35+s*(-1262/105+73814/2835*s))),this.cbg[2]=t*(-26/15+s*(34/21+s*(1.6+-12686/2835*s))),this.cgb[3]=(t*=s)*(4279/630+s*(-332/35+-399572/14175*s)),this.cbg[3]=t*(1237/630+s*(-24832/14175*s-2.4)),this.cgb[4]=(t*=s)*(4174/315+-144838/6237*s),this.cbg[4]=t*(-734/315+109598/31185*s),this.cgb[5]=601676/22275*(t*=s),this.cbg[5]=444337/155925*t,t=Math.pow(s,2),this.Qn=this.k0/(1+s)*(1+t*(.25+t*(1/64+t/256))),this.utg[0]=s*(s*(2/3+s*(-37/96+s*(1/360+s*(81/512+-96199/604800*s))))-.5),this.gtu[0]=s*(.5+s*(-2/3+s*(5/16+s*(41/180+s*(-127/288+7891/37800*s))))),this.utg[1]=t*(-1/48+s*(-1/15+s*(437/1440+s*(-46/105+1118711/3870720*s)))),this.gtu[1]=t*(13/48+s*(s*(557/1440+s*(281/630+-1983433/1935360*s))-.6)),this.utg[2]=(t*=s)*(-17/480+s*(37/840+s*(209/4480+-5569/90720*s))),this.gtu[2]=t*(61/240+s*(-103/140+s*(15061/26880+167603/181440*s))),this.utg[3]=(t*=s)*(-4397/161280+s*(11/504+830251/7257600*s)),this.gtu[3]=t*(49561/161280+s*(-179/168+6601661/7257600*s)),this.utg[4]=(t*=s)*(-4583/161280+108847/3991680*s),this.gtu[4]=t*(34729/80640+-3418889/1995840*s),this.utg[5]=-.03233083094085698*(t*=s),this.gtu[5]=.6650675310896665*t;t=Ut(this.cbg,this.lat0);this.Zb=-this.Qn*(t+function(t,s){for(var i,a=2*Math.cos(s),h=t.length-1,e=t[h],n=0;0<=--h;)i=a*e-n+t[h],n=e,e=i;return Math.sin(s)*i}(this.gtu,2*t))},forward:function(t){var s=dt(t.x-this.long0),i=t.y,i=Ut(this.cbg,i),a=Math.sin(i),h=Math.cos(i),e=Math.sin(s),n=Math.cos(s);i=Math.atan2(a,n*h),s=Math.atan2(e*h,Dt(a,h*n));var r,s=Ft(Math.tan(s)),n=Qt(this.gtu,2*i,2*s);return i+=n[0],s+=n[1],i=Math.abs(s)<=2.623395162778?(r=this.a*(this.Qn*s)+this.x0,this.a*(this.Qn*i+this.Zb)+this.y0):r=1/0,t.x=r,t.y=i,t},inverse:function(t){var s,i,a,h,e=(t.x-this.x0)*(1/this.a),n=(t.y-this.y0)*(1/this.a);return n=(n-this.Zb)/this.Qn,e/=this.Qn,n=Math.abs(e)<=2.623395162778?(n+=(h=Qt(this.utg,2*n,2*e))[0],e+=h[1],e=Math.atan(Tt(e)),s=Math.sin(n),i=Math.cos(n),a=Math.sin(e),h=Math.cos(e),n=Math.atan2(s*h,Dt(a,h*i)),e=Math.atan2(a,h*i),i=dt(e+this.long0),Ut(this.cgb,n)):i=1/0,t.x=i,t.y=n,t},names:["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc","Transverse_Mercator","Transverse Mercator","tmerc"]},ns={init:function(){var t=function(t,s){if(void 0===t){if((t=Math.floor(30*(dt(s)+Math.PI)/Math.PI)+1)<0)return 0;if(60W?(h=Math.sin(this.lat0),i=Math.cos(this.lat0),t=1-this.es*h*h,this.B=i*i,this.B=Math.sqrt(1+this.es*this.B*this.B/d),this.A=this.B*this.k0*p/t,(i=(s=this.B*p/(i*Math.sqrt(t)))*s-1)<=0?i=0:(i=Math.sqrt(i),this.lat0<0&&(i=-i)),this.E=i+=s,this.E*=Math.pow(ut(this.e,this.lat0,h),this.B)):(this.B=1/p,this.A=this.k0,this.E=s=i=1),M||f?(M?(a=Math.asin(Math.sin(c)/s),f||(e=c)):(a=e,c=Math.asin(s*Math.sin(a))),this.lam0=n-Math.asin(.5*(i-1/i)*Math.tan(a))/this.B):(f=Math.pow(ut(this.e,l,Math.sin(l)),this.B),n=Math.pow(ut(this.e,u,Math.sin(u)),this.B),i=this.E/f,l=(n-f)/(n+f),u=((u=this.E*this.E)-n*f)/(u+n*f),(t=r-o)<-Math.pi?o-=K:t>Math.pi&&(o+=K),this.lam0=dt(.5*(r+o)-Math.atan(u*Math.tan(.5*this.B*(r-o))/l)/this.B),a=Math.atan(2*Math.sin(this.B*dt(r-this.lam0))/(i-1/i)),e=c=Math.asin(s*Math.sin(a))),this.singam=Math.sin(a),this.cosgam=Math.cos(a),this.sinrot=Math.sin(e),this.cosrot=Math.cos(e),this.rB=1/this.B,this.ArB=this.A*this.rB,this.BrA=1/this.ArB,this.no_off?this.u_0=0:(this.u_0=Math.abs(this.ArB*Math.atan(Math.sqrt(s*s-1)/Math.cos(c))),this.lat0<0&&(this.u_0=-this.u_0)),i=.5*a,this.v_pole_n=this.ArB*Math.log(Math.tan(J-i)),this.v_pole_s=this.ArB*Math.log(Math.tan(J+i))},forward:function(t){var s,i,a,h,e={};if(t.x=t.x-this.lam0,Math.abs(Math.abs(t.y)-D)>W){if(s=.5*((i=this.E/Math.pow(ut(this.e,t.y,Math.sin(t.y)),this.B))-(a=1/i)),h=.5*(i+a),i=Math.sin(this.B*t.x),h=(s*this.singam-i*this.cosgam)/h,Math.abs(Math.abs(h)-1)W?this.ns=Math.log(s/a)/Math.log(i/h):this.ns=t,isNaN(this.ns)&&(this.ns=t),this.f0=s/(this.ns*Math.pow(i,this.ns)),this.rh=this.a*this.f0*Math.pow(e,this.ns),this.title||(this.title="Lambert Conformal Conic"))},forward:function(t){var s=t.x,i=t.y;Math.abs(2*Math.abs(i)-Math.PI)<=W&&(i=lt(i)*(D-2*W));var a,h=Math.abs(Math.abs(i)-D);if(WW?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)},forward:function(t){var s=t.x,i=t.y;this.sin_phi=Math.sin(i),this.cos_phi=Math.cos(i);var a=ts(this.e3,this.sin_phi,this.cos_phi),i=this.a*Math.sqrt(this.c-this.ns0*a)/this.ns0,a=this.ns0*dt(s-this.long0),s=i*Math.sin(a)+this.x0,a=this.rh-i*Math.cos(a)+this.y0;return t.x=s,t.y=a,t},inverse:function(t){var s,i,a,h;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,i=0<=this.ns0?(s=Math.sqrt(t.x*t.x+t.y*t.y),1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),-1),(a=0)!==s&&(a=Math.atan2(i*t.x,i*t.y)),i=s*this.ns0/this.a,h=this.sphere?Math.asin((this.c-i*i)/(2*this.ns0)):(h=(this.c-i*i)/this.ns0,this.phi1z(this.e3,h)),a=dt(a/this.ns0+this.long0),t.x=a,t.y=h,t},names:["Albers_Conic_Equal_Area","Albers","aea"],phi1z:function(t,s){var i,a,h,e=ss(.5*s);if(tMath.PI&&(i=Math.PI),a=(2*s+Math.sin(2*s))/Math.PI,12*D*this.a?void 0:(r=s/this.a,o=Math.sin(r),n=Math.cos(r),i=this.long0,Math.abs(s)<=W?a=this.lat0:(a=ss(n*this.sin_p12+t.y*o*this.cos_p12/s),e=Math.abs(this.lat0)-D,i=dt(Math.abs(e)<=W?0<=this.lat0?this.long0+Math.atan2(t.x,-t.y):this.long0-Math.atan2(-t.x,t.y):this.long0+Math.atan2(t.x*o,s*this.cos_p12*n-t.y*this.sin_p12*o))),t.x=i,t.y=a,t):(r=Ht(this.es),e=Jt(this.es),n=Kt(this.es),o=Vt(this.es),Math.abs(this.sin_p12-1)<=W?(h=this.a*Xt(r,e,n,o,D),s=Math.sqrt(t.x*t.x+t.y*t.y),a=$t((h-s)/this.a,r,e,n,o),i=dt(this.long0+Math.atan2(t.x,-1*t.y))):Math.abs(this.sin_p12+1)<=W?(h=this.a*Xt(r,e,n,o,D),s=Math.sqrt(t.x*t.x+t.y*t.y),a=$t((s-h)/this.a,r,e,n,o),i=dt(this.long0+Math.atan2(t.x,t.y))):(s=Math.sqrt(t.x*t.x+t.y*t.y),h=Math.atan2(t.x,t.y),r=Zt(this.a,this.e,this.sin_p12),e=Math.cos(h),o=-(n=this.e*this.cos_p12*e)*n/(1-this.es),n=3*this.es*(1-o)*this.sin_p12*this.cos_p12*e/(1-this.es),r=1-o*(o=(r=s/r)-o*(1+o)*Math.pow(r,3)/6-n*(1+3*o)*Math.pow(r,4)/24)*o/2-r*o*o*o/6,e=Math.asin(this.sin_p12*Math.cos(o)+this.cos_p12*Math.sin(o)*e),i=dt(this.long0+Math.asin(Math.sin(h)*Math.sin(o)/Math.cos(e))),o=Math.sin(e),a=Math.atan2((o-this.es*r*this.sin_p12)*Math.tan(e),o*(1-this.es))),t.x=i,t.y=a,t)},names:["Azimuthal_Equidistant","aeqd"]},ks={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)},forward:function(t){var s,i,a=t.x,h=t.y,e=dt(a-this.long0),n=Math.sin(h),r=Math.cos(h),a=Math.cos(e);return(0<(h=this.sin_p14*n+this.cos_p14*r*a)||Math.abs(h)<=W)&&(s=+this.a*r*Math.sin(e),i=this.y0+ +this.a*(this.cos_p14*n-this.sin_p14*r*a)),t.x=s,t.y=i,t},inverse:function(t){var s,i,a,h,e,n;return t.x-=this.x0,t.y-=this.y0,s=Math.sqrt(t.x*t.x+t.y*t.y),h=ss(s/this.a),i=Math.sin(h),a=Math.cos(h),e=this.long0,Math.abs(s)<=W?n=this.lat0:(n=ss(a*this.sin_p14+t.y*i*this.cos_p14/s),h=Math.abs(this.lat0)-D,e=Math.abs(h)<=W?dt(0<=this.lat0?this.long0+Math.atan2(t.x,-t.y):this.long0-Math.atan2(-t.x,t.y)):dt(this.long0+Math.atan2(t.x*i,s*this.cos_p14*a-t.y*this.sin_p14*i))),t.x=e,t.y=n,t},names:["ortho"]},Is=1,qs=2,As=3,Os=4,js=5,Gs=6,Ls=1,Rs=2,zs=3,Bs=4,Ts={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=D-J/2?this.face=js:this.lat0<=-(D-J/2)?this.face=Gs:Math.abs(this.long0)<=J?this.face=Is:Math.abs(this.long0)<=D+J?this.face=0=Math.abs(t.y)?l.value=Ls:0<=t.y&&t.y>=Math.abs(t.x)?(l.value=Rs,s-=D):t.x<0&&-t.x>=Math.abs(t.y)?(l.value=zs,s=s<0?s+V:s-V):(l.value=Bs,s+=D),e=V/12*Math.tan(s),h=Math.sin(e)/(Math.cos(e)-1/Math.sqrt(2)),h=Math.atan(h),(i=1-(s=Math.cos(s))*s*(i=Math.tan(i))*i*(1-Math.cos(Math.atan(1/Math.cos(h)))))<-1?i=-1:1s.y)--i;else{if(!(Fs[i+1][0]<=s.y))break;++i}var a=Fs[i],h=function(t,s,i,a){for(var h=s;a;--a){var e=t(h);if(h-=e,Math.abs(e) +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs <>\n\"]]", "3786": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6371007,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Equirectangular\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",0],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3787": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",-5000000],UNIT[\"Meter\",1]]", "3788": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",166],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "3789": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",169],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "3790": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",179],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "3791": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-178],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "3793": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-176.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "3794": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",-5000000],UNIT[\"Meter\",1]]", "3795": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",23],PARAMETER[\"standard_parallel_2\",21.7],PARAMETER[\"latitude_of_origin\",22.35],PARAMETER[\"central_meridian\",-81],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",280296.016],UNIT[\"Meter\",1]]", "3796": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",21.3],PARAMETER[\"standard_parallel_2\",20.13333333333333],PARAMETER[\"latitude_of_origin\",20.71666666666667],PARAMETER[\"central_meridian\",-76.83333333333333],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",229126.939],UNIT[\"Meter\",1]]", "3797": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",50],PARAMETER[\"standard_parallel_2\",46],PARAMETER[\"latitude_of_origin\",44],PARAMETER[\"central_meridian\",-70],PARAMETER[\"false_easting\",800000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3798": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",50],PARAMETER[\"standard_parallel_2\",46],PARAMETER[\"latitude_of_origin\",44],PARAMETER[\"central_meridian\",-70],PARAMETER[\"false_easting\",800000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3799": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",50],PARAMETER[\"standard_parallel_2\",46],PARAMETER[\"latitude_of_origin\",44],PARAMETER[\"central_meridian\",-70],PARAMETER[\"false_easting\",800000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3800": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-120],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3801": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-120],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3802": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-120],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32042": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.71666666666667],PARAMETER[\"standard_parallel_2\",41.78333333333333],PARAMETER[\"latitude_of_origin\",40.33333333333334],PARAMETER[\"central_meridian\",-111.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "23845": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",139.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",1500000],UNIT[\"Meter\",1]]", "32315": "PROJCS[\"UTM Zone 15, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "3812": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",49.83333333333334],PARAMETER[\"standard_parallel_2\",51.16666666666666],PARAMETER[\"latitude_of_origin\",50.797815],PARAMETER[\"central_meridian\",4.359215833333333],PARAMETER[\"false_easting\",649328],PARAMETER[\"false_northing\",665262],UNIT[\"Meter\",1]]", "32038": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",32.13333333333333],PARAMETER[\"standard_parallel_2\",33.96666666666667],PARAMETER[\"latitude_of_origin\",31.66666666666667],PARAMETER[\"central_meridian\",-97.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "3814": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",32.5],PARAMETER[\"central_meridian\",-89.75],PARAMETER[\"scale_factor\",0.9998335],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",1300000],UNIT[\"Meter\",1]]", "3815": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",32.5],PARAMETER[\"central_meridian\",-89.75],PARAMETER[\"scale_factor\",0.9998335],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",1300000],UNIT[\"Meter\",1]]", "3816": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",32.5],PARAMETER[\"central_meridian\",-89.75],PARAMETER[\"scale_factor\",0.9998335],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",1300000],UNIT[\"Meter\",1]]", "3819": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "3821": "GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "3824": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "3825": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",119],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3826": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",121],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3827": "PROJCS[\"unnamed\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",119],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3828": "PROJCS[\"unnamed\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",121],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3829": "PROJCS[\"UTM Zone 51, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-637,-549,-203,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28406": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28407": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",7500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3832": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Mercator_1SP\"],PARAMETER[\"central_meridian\",150],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3833": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",2500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3834": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[26,-121,-78,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",2500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3835": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[26,-121,-78,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3836": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[26,-121,-78,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",4500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3837": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3838": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",12],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",4500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3839": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",9500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3840": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",30],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",10500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3841": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[26,-121,-78,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",18],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3842": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[26,-121,-78,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",18],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3843": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[26,-121,-78,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",18],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3844": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Oblique_Stereographic\"],PARAMETER[\"latitude_of_origin\",46],PARAMETER[\"central_meridian\",25],PARAMETER[\"scale_factor\",0.99975],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "3845": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",11.30625],PARAMETER[\"scale_factor\",1.000006],PARAMETER[\"false_easting\",1500025.141],PARAMETER[\"false_northing\",-667.282],UNIT[\"Meter\",1]]", "3846": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",13.55626666666667],PARAMETER[\"scale_factor\",1.0000058],PARAMETER[\"false_easting\",1500044.695],PARAMETER[\"false_northing\",-667.13],UNIT[\"Meter\",1]]", "3847": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15.80628452944445],PARAMETER[\"scale_factor\",1.00000561024],PARAMETER[\"false_easting\",1500064.274],PARAMETER[\"false_northing\",-667.711],UNIT[\"Meter\",1]]", "3848": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",18.0563],PARAMETER[\"scale_factor\",1.0000054],PARAMETER[\"false_easting\",1500083.521],PARAMETER[\"false_northing\",-668.844],UNIT[\"Meter\",1]]", "3849": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",20.30631666666667],PARAMETER[\"scale_factor\",1.0000052],PARAMETER[\"false_easting\",1500102.765],PARAMETER[\"false_northing\",-670.706],UNIT[\"Meter\",1]]", "3850": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",22.55633333333333],PARAMETER[\"scale_factor\",1.0000049],PARAMETER[\"false_easting\",1500121.846],PARAMETER[\"false_northing\",-672.557],UNIT[\"Meter\",1]]", "3851": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",-37.5],PARAMETER[\"standard_parallel_2\",-44.5],PARAMETER[\"latitude_of_origin\",-41],PARAMETER[\"central_meridian\",173],PARAMETER[\"false_easting\",3000000],PARAMETER[\"false_northing\",7000000],UNIT[\"Meter\",1]]", "3852": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",-76.66666666666667],PARAMETER[\"standard_parallel_2\",-79.33333333333333],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",157],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28429": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",171],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",29500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3854": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",18.05787],PARAMETER[\"scale_factor\",0.99999506],PARAMETER[\"false_easting\",100182.7406],PARAMETER[\"false_northing\",-6500620.1207],UNIT[\"Meter\",1]]", "28431": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-177],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",31500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28432": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-171],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",32500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3857": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378137,0],EXTENSION[\"PROJ4_GRIDS\",\"@null\"]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Mercator_2SP\"],PARAMETER[\"standard_parallel_1\",0],PARAMETER[\"central_meridian\",0],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1],EXTENSION[\"PROJ4\",\"<3857> +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs <>\n\"]]", "26861": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.25],PARAMETER[\"standard_parallel_2\",39],PARAMETER[\"latitude_of_origin\",38.5],PARAMETER[\"central_meridian\",-79.5],PARAMETER[\"false_easting\",1968500],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32044": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",37.21666666666667],PARAMETER[\"standard_parallel_2\",38.35],PARAMETER[\"latitude_of_origin\",36.66666666666666],PARAMETER[\"central_meridian\",-111.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "20248": "PROJCS[\"UTM Zone 48, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20249": "PROJCS[\"UTM Zone 49, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20250": "PROJCS[\"UTM Zone 50, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20251": "PROJCS[\"UTM Zone 51, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20252": "PROJCS[\"UTM Zone 52, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20253": "PROJCS[\"UTM Zone 53, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20254": "PROJCS[\"UTM Zone 54, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20255": "PROJCS[\"UTM Zone 55, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20256": "PROJCS[\"UTM Zone 56, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "3873": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",19],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",19500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3874": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",20],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",20500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3875": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",21500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3876": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",22],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",22500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3877": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",23],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",23500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3878": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",24],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",24500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3879": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",25],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",25500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3880": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",26],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",26500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3881": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",27500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3882": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",28],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",28500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3883": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",29],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",29500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3884": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",30],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",30500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3885": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",31],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",31500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28462": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28463": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28464": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3889": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "3890": "PROJCS[\"UTM Zone 37, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3891": "PROJCS[\"UTM Zone 38, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3892": "PROJCS[\"UTM Zone 39, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3893": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-87,-98,-121,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",29.02626833333333],PARAMETER[\"central_meridian\",46.5],PARAMETER[\"scale_factor\",0.9994],PARAMETER[\"false_easting\",800000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28470": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28471": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",63],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28472": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",69],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26923": "PROJCS[\"UTM Zone 23, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28474": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26591": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68]],PRIMEM[\"Rome\",12.4523333333529],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-3.45233333333333],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28476": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28477": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28478": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28479": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28480": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26592": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68]],PRIMEM[\"Rome\",12.4523333333529],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",2.54766666666666],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",2520000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3906": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "3907": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",5500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3908": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",18],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",6500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3909": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",7500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3910": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",24],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",8500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3911": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3912": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",-5000000],UNIT[\"Meter\",1]]", "28489": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",171],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28490": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",177],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28491": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-177],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28492": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-171],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26863": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",43.66666666666666],PARAMETER[\"central_meridian\",-68.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",984250],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "3920": "PROJCS[\"UTM Zone 20, Northern Hemisphere\",GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[11,72,-101,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32058": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",40.66666666666666],PARAMETER[\"central_meridian\",-110.0833333333333],PARAMETER[\"scale_factor\",0.999941177],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "3942": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.25],PARAMETER[\"standard_parallel_2\",42.75],PARAMETER[\"latitude_of_origin\",42],PARAMETER[\"central_meridian\",3],PARAMETER[\"false_easting\",1700000],PARAMETER[\"false_northing\",1200000],UNIT[\"Meter\",1]]", "3943": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",42.25],PARAMETER[\"standard_parallel_2\",43.75],PARAMETER[\"latitude_of_origin\",43],PARAMETER[\"central_meridian\",3],PARAMETER[\"false_easting\",1700000],PARAMETER[\"false_northing\",2200000],UNIT[\"Meter\",1]]", "3944": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",43.25],PARAMETER[\"standard_parallel_2\",44.75],PARAMETER[\"latitude_of_origin\",44],PARAMETER[\"central_meridian\",3],PARAMETER[\"false_easting\",1700000],PARAMETER[\"false_northing\",3200000],UNIT[\"Meter\",1]]", "3945": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",44.25],PARAMETER[\"standard_parallel_2\",45.75],PARAMETER[\"latitude_of_origin\",45],PARAMETER[\"central_meridian\",3],PARAMETER[\"false_easting\",1700000],PARAMETER[\"false_northing\",4200000],UNIT[\"Meter\",1]]", "3946": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.25],PARAMETER[\"standard_parallel_2\",46.75],PARAMETER[\"latitude_of_origin\",46],PARAMETER[\"central_meridian\",3],PARAMETER[\"false_easting\",1700000],PARAMETER[\"false_northing\",5200000],UNIT[\"Meter\",1]]", "3947": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",46.25],PARAMETER[\"standard_parallel_2\",47.75],PARAMETER[\"latitude_of_origin\",47],PARAMETER[\"central_meridian\",3],PARAMETER[\"false_easting\",1700000],PARAMETER[\"false_northing\",6200000],UNIT[\"Meter\",1]]", "3948": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.25],PARAMETER[\"standard_parallel_2\",48.75],PARAMETER[\"latitude_of_origin\",48],PARAMETER[\"central_meridian\",3],PARAMETER[\"false_easting\",1700000],PARAMETER[\"false_northing\",7200000],UNIT[\"Meter\",1]]", "3949": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",48.25],PARAMETER[\"standard_parallel_2\",49.75],PARAMETER[\"latitude_of_origin\",49],PARAMETER[\"central_meridian\",3],PARAMETER[\"false_easting\",1700000],PARAMETER[\"false_northing\",8200000],UNIT[\"Meter\",1]]", "3950": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",49.25],PARAMETER[\"standard_parallel_2\",50.75],PARAMETER[\"latitude_of_origin\",50],PARAMETER[\"central_meridian\",3],PARAMETER[\"false_easting\",1700000],PARAMETER[\"false_northing\",9200000],UNIT[\"Meter\",1]]", "32061": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",16.81666666666667],PARAMETER[\"central_meridian\",-90.33333333333333],PARAMETER[\"scale_factor\",0.99992226],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",292209.579],UNIT[\"Meter\",1]]", "32062": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",14.9],PARAMETER[\"central_meridian\",-90.33333333333333],PARAMETER[\"scale_factor\",0.99989906],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",325992.681],UNIT[\"Meter\",1]]", "20348": "PROJCS[\"UTM Zone 48, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-134,-48,149,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20349": "PROJCS[\"UTM Zone 49, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-134,-48,149,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20350": "PROJCS[\"UTM Zone 50, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-134,-48,149,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20351": "PROJCS[\"UTM Zone 51, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-134,-48,149,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "3968": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",37],PARAMETER[\"standard_parallel_2\",39.5],PARAMETER[\"latitude_of_origin\",36],PARAMETER[\"central_meridian\",-79.5],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3969": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",37],PARAMETER[\"standard_parallel_2\",39.5],PARAMETER[\"latitude_of_origin\",36],PARAMETER[\"central_meridian\",-79.5],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3970": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",37],PARAMETER[\"standard_parallel_2\",39.5],PARAMETER[\"latitude_of_origin\",36],PARAMETER[\"central_meridian\",-79.5],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20355": "PROJCS[\"UTM Zone 55, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-134,-48,149,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20356": "PROJCS[\"UTM Zone 56, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-134,-48,149,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "3973": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",90],PARAMETER[\"longitude_of_center\",0],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3974": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",-90],PARAMETER[\"longitude_of_center\",0],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3975": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Cylindrical_Equal_Area\"],PARAMETER[\"standard_parallel_1\",30],PARAMETER[\"central_meridian\",0],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3976": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Polar_Stereographic\"],PARAMETER[\"latitude_of_origin\",-70],PARAMETER[\"central_meridian\",0],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3978": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",49],PARAMETER[\"central_meridian\",-95],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3979": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",49],PARAMETER[\"central_meridian\",-95],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31287": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",49],PARAMETER[\"standard_parallel_2\",46],PARAMETER[\"latitude_of_origin\",47.5],PARAMETER[\"central_meridian\",13.33333333333333],PARAMETER[\"false_easting\",400000],PARAMETER[\"false_northing\",400000],UNIT[\"Meter\",1]]", "3985": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",-6.5],PARAMETER[\"standard_parallel_2\",-11.5],PARAMETER[\"latitude_of_origin\",9],PARAMETER[\"central_meridian\",26],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "3986": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-9],PARAMETER[\"central_meridian\",30],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "3987": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-9],PARAMETER[\"central_meridian\",28],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "3988": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-9],PARAMETER[\"central_meridian\",26],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "3989": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-9],PARAMETER[\"central_meridian\",24],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "3991": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[11,72,-101,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",18.43333333333333],PARAMETER[\"standard_parallel_2\",18.03333333333333],PARAMETER[\"latitude_of_origin\",17.83333333333333],PARAMETER[\"central_meridian\",-66.43333333333334],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "3992": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[11,72,-101,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",18.43333333333333],PARAMETER[\"standard_parallel_2\",18.03333333333333],PARAMETER[\"latitude_of_origin\",17.83333333333333],PARAMETER[\"central_meridian\",-66.43333333333334],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",100000],UNIT[\"Foot_US\",0.3048006096012192]]", "3994": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Mercator_2SP\"],PARAMETER[\"standard_parallel_1\",-41],PARAMETER[\"central_meridian\",100],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3995": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Polar_Stereographic\"],PARAMETER[\"latitude_of_origin\",71],PARAMETER[\"central_meridian\",0],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3996": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Polar_Stereographic\"],PARAMETER[\"latitude_of_origin\",75],PARAMETER[\"central_meridian\",0],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "3997": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",55.33333333333334],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4001": "GEOGCS[\"Airy 1830\",DATUM[\"unknown\",SPHEROID[\"airy\",6377563.396,299.3249753150316]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4002": "GEOGCS[\"Modified Airy\",DATUM[\"unknown\",SPHEROID[\"mod_airy\",6377340.189,299.3249373654873]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4003": "GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4004": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4005": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377492.018,299.1528128000008]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4006": "GEOGCS[\"Bessel 1841 (Namibia)\",DATUM[\"unknown\",SPHEROID[\"bess_nam\",6377483.865,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4007": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378293.645208759,294.2606763692569]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4008": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4009": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378450.047548896,294.9786971646739]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4010": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378300.789,293.4663155389802]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4011": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4012": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4013": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.145,293.4663076999908]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4014": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4659800000047]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4015": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377276.345,300.8017000000115]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4016": "GEOGCS[\"Everest (Sabah & Sarawak)\",DATUM[\"unknown\",SPHEROID[\"evrstSS\",6377298.556,300.8017]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4018": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377304.063,300.8017000000015]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4019": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4020": "GEOGCS[\"Helmert 1906\",DATUM[\"unknown\",SPHEROID[\"helmert\",6378200,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4021": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378160,298.2469999999969]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4022": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4023": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4024": "GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4025": "GEOGCS[\"WGS 66\",DATUM[\"unknown\",SPHEROID[\"WGS66\",6378145,298.25]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4026": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",28.4],PARAMETER[\"scale_factor\",0.99994],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",-5000000],UNIT[\"Meter\",1]]", "4027": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6376523,308.6399999999991]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4028": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378298.3,294.7299999999894]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4029": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378300,295.9999999999982]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4030": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4031": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4032": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378136.2,298.2572235630016]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4033": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378136.3,298.2572235629917]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4034": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.144808011,293.4663076556349]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4035": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6371000,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4036": "GEOGCS[\"GRS 67(IUGG 1967)\",DATUM[\"unknown\",SPHEROID[\"GRS67\",6378160,298.247167427]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4037": "PROJCS[\"UTM Zone 35, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4038": "PROJCS[\"UTM Zone 36, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4041": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378135,298.2569999999986]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4042": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.36559538,300.8017255433552]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4043": "GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4044": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377301.243,300.8017254999889]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4045": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.151,300.801725500009]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4046": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4047": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6371007,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4048": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",12],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "4049": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",14],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "4050": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",16],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "4051": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",18],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "4052": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6370997,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4053": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6371228,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4054": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378273,298.279411123061]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4055": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378137,0],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4056": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",20],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "4057": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",22],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "4058": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",24],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "4059": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",26],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "4060": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",28],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "4061": "PROJCS[\"UTM Zone 33, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "4062": "PROJCS[\"UTM Zone 34, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "4063": "PROJCS[\"UTM Zone 35, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26868": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",43],PARAMETER[\"standard_parallel_2\",40],PARAMETER[\"latitude_of_origin\",39.83333333333334],PARAMETER[\"central_meridian\",-100],PARAMETER[\"false_easting\",1640416.6667],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4071": "PROJCS[\"UTM Zone 23, Southern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-134,229,-29,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "4075": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "32082": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-56],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22525": "PROJCS[\"UTM Zone 25, Southern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-206,172,-6,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "4081": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4082": "PROJCS[\"UTM Zone 27, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-21],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4083": "PROJCS[\"UTM Zone 28, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4087": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Equirectangular\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",0],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4088": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6371007,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Equirectangular\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",0],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32084": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-61.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4093": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.99998],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",-5000000],UNIT[\"Meter\",1]]", "4094": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",10],PARAMETER[\"scale_factor\",0.99998],PARAMETER[\"false_easting\",400000],PARAMETER[\"false_northing\",-5000000],UNIT[\"Meter\",1]]", "4095": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",11.75],PARAMETER[\"scale_factor\",0.99998],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",-5000000],UNIT[\"Meter\",1]]", "4096": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",800000],PARAMETER[\"false_northing\",-5000000],UNIT[\"Meter\",1]]", "32086": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-67.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20499": "PROJCS[\"UTM Zone 39, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-143,-236,7,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4120": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4121": "GEOGCS[\"GGRS87\",DATUM[\"Greek_Geodetic_Reference_System_1987\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[-199.87,74.79,246.62,0,0,0,0],AUTHORITY[\"EPSG\",\"6121\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4121\"]]", "4122": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378135,298.2569999999986]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4123": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4124": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[414.1,41.3,603.1,-0.855,2.141,-7.023,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4125": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-404.78,685.68,45.47,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4126": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4127": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[-73.472,-51.66,-112.482,0.953,4.6,-2.368,0.586]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4128": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4129": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4130": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,-0,-0,-0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4131": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377276.345,300.8017000000115],TOWGS84[198,881,317,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4132": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-241.54,-163.64,396.06,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4133": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4134": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4135": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[61,-285,-181,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4136": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4137": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4138": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4139": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[11,72,-101,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4140": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4141": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[-48,55,52,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4142": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-125,53,467,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4143": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-124.76,53,466.79,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4144": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377276.345,300.8017000000115],TOWGS84[214,804,268,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4145": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377301.243,300.8017254999889],TOWGS84[283,682,231,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4146": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.151,300.801725500009],TOWGS84[295,736,257,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4147": "GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[-17.51,-108.32,-62.39,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4148": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4149": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[674.4,15.1,405.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4150": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[674.374,15.056,405.346,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4151": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4152": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4153": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-133.63,-157.5,-158.62,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4154": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-117,-132,-164,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4155": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-83,37,124,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4156": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[589,76,480,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4157": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378293.645208759,294.2606763692569]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4158": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-0.465,372.095,171.736,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4159": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4160": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4161": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[27.5,14,186.4,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4162": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4163": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4164": "GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[-76,-138,67,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4165": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-173,253,27,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4166": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4167": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4168": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378300,295.9999999999982],TOWGS84[-199,32,322,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4169": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[-115,118,426,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4170": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4171": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4172": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4173": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4174": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378300,295.9999999999982]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4175": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-88,4,101,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4176": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4178": "GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[26,-121,-78,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4179": "GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4180": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4181": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-189.681,18.3463,-42.7695,-0.33746,-3.09264,2.53861,0.4598]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4182": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-425,-169,81,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4183": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-104,167,-38,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4184": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-203,141,53,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4185": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4188": "GEOGCS[\"Airy 1830\",DATUM[\"unknown\",SPHEROID[\"airy\",6377563.396,299.3249753150316],TOWGS84[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4189": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4190": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4191": "GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4192": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-206.1,-174.7,-87.7,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4193": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-70.9,-151.8,-41.4,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4194": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[164,138,-189,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4195": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[105,326,-102.5,0,0,0.814,-0.6]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4196": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-45,417,-3.5,0,0,0.814,-0.6]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4197": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4198": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4199": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4200": "GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4201": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-166,-15,204,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4202": "GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4203": "GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-134,-48,149,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4204": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-143,-236,7,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4205": "GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[-43,-163,45,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4206": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4207": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-304.046,-60.576,103.64,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4208": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-151.99,287.04,-147.45,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4209": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.145,293.4663076999908],TOWGS84[-143,-90,-294,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4210": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-160,-6,-302,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4211": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-377,681,-50,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4212": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[31.95,300.99,419.19,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4213": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-106,-87,188,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4214": "GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4215": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4216": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[-73,213,296,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4217": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",171],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4218": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[307,304,-318,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4219": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-384,664,-48,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4220": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-50.9,-347.6,-231,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4221": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-148,136,90,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4222": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.145,293.4663076999908],TOWGS84[-136,-108,-292,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4223": "GEOGCS[\"Carthage\",DATUM[\"Carthage\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-263,6,431,0,0,0,0],AUTHORITY[\"EPSG\",\"6223\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4223\"]]", "4224": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-134,229,-29,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4225": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-206,172,-6,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4226": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4227": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-190.421,8.532,238.69,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4228": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4229": "GEOGCS[\"Helmert 1906\",DATUM[\"unknown\",SPHEROID[\"helmert\",6378200,298.3],TOWGS84[-130,110,-13,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4230": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-87,-98,-121,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4231": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-83.11,-97.38,-117.22,0.00569291,-0.0446976,0.0442851,0.1218]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4232": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-346,-1,224,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4233": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-133,-321,50,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4234": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4235": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4236": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-637,-549,-203,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4237": "GEOGCS[\"GRS 67(IUGG 1967)\",DATUM[\"unknown\",SPHEROID[\"GRS67\",6378160,298.247167427],TOWGS84[52.17,-71.82,-14.9,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4238": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378160,298.2469999999969],TOWGS84[-24,-15,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4239": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377276.345,300.8017000000115],TOWGS84[217,823,299,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4240": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377276.345,300.8017000000115],TOWGS84[210,814,289,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4241": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.144808011,293.4663076556349]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4242": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[70,207,389.5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4243": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.36559538,300.8017255433552]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4244": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377276.345,300.8017000000115],TOWGS84[-97,787,86,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4245": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377304.063,300.8017000000015],TOWGS84[-11,851,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4246": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-294.7,-200.1,525.5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4247": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-273.5,110.6,-357.9,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4248": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-288,175,-376,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4249": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4250": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-130,29,364,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4251": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-90,40,88,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4252": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4253": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[-133,-77,-51,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4254": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[16,196,93,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4255": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-333,-222,114,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4256": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[41,-220,-134,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4257": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-587.8,519.75,145.76,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4258": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4259": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-254.1,-5.36,-100.29,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4260": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-70.9,-151.8,-41.4,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4261": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[31,146,47,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4262": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[639,405,60,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4263": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-92,-93,122,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4264": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-252.95,-4.11,-96.38,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4265": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4266": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-74,-130,42,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4267": "GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]]", "4268": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378450.047548896,294.9786971646739]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4269": "GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]]", "4270": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-242.2,-144.9,370.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4271": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-10,375,165,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4272": "GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]]", "4273": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377492.018,299.1528128000008],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4274": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-223.237,110.193,36.649,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4275": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-168,-60,320,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4276": "GEOGCS[\"WGS 66\",DATUM[\"unknown\",SPHEROID[\"WGS66\",6378145,298.25]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4277": "GEOGCS[\"OSGB 1936\",DATUM[\"OSGB_1936\",SPHEROID[\"Airy 1830\",6377563.396,299.3249646,AUTHORITY[\"EPSG\",\"7001\"]],TOWGS84[446.448,-125.157,542.06,0.1502,0.247,0.8421,-20.4894],AUTHORITY[\"EPSG\",\"6277\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4277\"]]", "4278": "GEOGCS[\"Airy 1830\",DATUM[\"unknown\",SPHEROID[\"airy\",6377563.396,299.3249753150316]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4279": "GEOGCS[\"Airy 1830\",DATUM[\"unknown\",SPHEROID[\"airy\",6377563.396,299.3249753150316]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4280": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4281": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378300.789,293.4663155389802],TOWGS84[-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4282": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-148,51,-291,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4283": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4284": "GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4285": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-128.16,-282.42,21.93,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4286": "GEOGCS[\"Helmert 1906\",DATUM[\"unknown\",SPHEROID[\"helmert\",6378200,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4287": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[164,138,-189,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4288": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4289": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4291": "GEOGCS[\"GRS 67(IUGG 1967)\",DATUM[\"unknown\",SPHEROID[\"GRS67\",6378160,298.247167427],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4292": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-355,21,72,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4293": "GEOGCS[\"Bessel 1841 (Namibia)\",DATUM[\"unknown\",SPHEROID[\"bess_nam\",6377483.865,299.1528128],TOWGS84[616,97,-251,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4294": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-403,684,41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4295": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4296": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4297": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-189,-242,-91,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4298": "GEOGCS[\"Everest (Sabah & Sarawak)\",DATUM[\"unknown\",SPHEROID[\"evrstSS\",6377298.556,300.8017],TOWGS84[-679,669,-48,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4299": "GEOGCS[\"TM65\",DATUM[\"TM65\",SPHEROID[\"Airy Modified 1849\",6377340.189,299.3249646,AUTHORITY[\"EPSG\",\"7002\"]],TOWGS84[482.53,-130.596,564.557,-1.042,-0.214,-0.631,8.15],AUTHORITY[\"EPSG\",\"6299\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4299\"]]", "4300": "GEOGCS[\"Modified Airy\",DATUM[\"unknown\",SPHEROID[\"mod_airy\",6377340.189,299.3249373654873],TOWGS84[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4301": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-146.414,507.337,680.507,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4302": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378293.645208759,294.2606763692569],TOWGS84[-61.702,284.488,472.052,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4303": "GEOGCS[\"Helmert 1906\",DATUM[\"unknown\",SPHEROID[\"helmert\",6378200,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4304": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-73,-247,227,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4306": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4307": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4308": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4309": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-155,171,37,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4310": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4311": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-265,120,-358,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4312": "GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]]", "4313": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,-1.2747]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4314": "GEOGCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[606,23,413,0,0,0,0],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4314\"]]", "4315": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-23,259,-9,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4316": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[103.25,-100.4,-307.19,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4317": "GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[28,-121,-77,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4318": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[-3.2,-5.7,2.8,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4319": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[-20.8,11.3,2.4,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "32332": "PROJCS[\"UTM Zone 32, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "4322": "GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4324": "GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4326": "GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]]", "21149": "PROJCS[\"UTM Zone 49, Southern Hemisphere\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-377,681,-50,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32129": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.96666666666667],PARAMETER[\"standard_parallel_2\",39.93333333333333],PARAMETER[\"latitude_of_origin\",39.33333333333334],PARAMETER[\"central_meridian\",-77.75],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29333": "PROJCS[\"UTM Zone 33, Southern Hemisphere\",GEOGCS[\"Bessel 1841 (Namibia)\",DATUM[\"unknown\",SPHEROID[\"bess_nam\",6377483.865,299.1528128],TOWGS84[616,97,-251,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32041": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",26.16666666666667],PARAMETER[\"standard_parallel_2\",27.83333333333333],PARAMETER[\"latitude_of_origin\",25.66666666666667],PARAMETER[\"central_meridian\",-98.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "21150": "PROJCS[\"UTM Zone 50, Southern Hemisphere\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-377,681,-50,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "4399": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",171],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4400": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",177],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4401": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-177],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4402": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-171],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4403": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4404": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-159],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4405": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4406": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4407": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4408": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4409": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4410": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4411": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4412": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4413": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4414": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",13.5],PARAMETER[\"central_meridian\",144.75],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",200000],UNIT[\"Meter\",1]]", "4415": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",-6.5],PARAMETER[\"standard_parallel_2\",-11.5],PARAMETER[\"latitude_of_origin\",-9],PARAMETER[\"central_meridian\",26],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "28992": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Oblique_Stereographic\"],PARAMETER[\"latitude_of_origin\",52.15616055555555],PARAMETER[\"central_meridian\",5.38763888888889],PARAMETER[\"scale_factor\",0.9999079],PARAMETER[\"false_easting\",155000],PARAMETER[\"false_northing\",463000],UNIT[\"Meter\",1]]", "4417": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[26,-121,-78,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",7500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4418": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4419": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4420": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",177],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4421": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-177],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4422": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-171],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4423": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4424": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-159],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4425": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4426": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4427": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4428": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4429": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4430": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4431": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4432": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4433": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4434": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[26,-121,-78,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",24],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",8500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4437": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",18.43333333333333],PARAMETER[\"standard_parallel_2\",18.03333333333333],PARAMETER[\"latitude_of_origin\",17.83333333333333],PARAMETER[\"central_meridian\",-66.43333333333334],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",200000],UNIT[\"Meter\",1]]", "4438": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4439": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "20824": "PROJCS[\"UTM Zone 24, Southern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-151.99,287.04,-147.45,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20005": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4455": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.96666666666667],PARAMETER[\"standard_parallel_2\",39.93333333333333],PARAMETER[\"latitude_of_origin\",39.33333333333334],PARAMETER[\"central_meridian\",-77.75],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4456": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.03333333333333],PARAMETER[\"standard_parallel_2\",40.66666666666666],PARAMETER[\"latitude_of_origin\",40.5],PARAMETER[\"central_meridian\",-74],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",100000],UNIT[\"Foot_US\",0.3048006096012192]]", "4457": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.68333333333333],PARAMETER[\"standard_parallel_2\",44.41666666666666],PARAMETER[\"latitude_of_origin\",43.83333333333334],PARAMETER[\"central_meridian\",-100],PARAMETER[\"false_easting\",1968500],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4462": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",-18],PARAMETER[\"standard_parallel_2\",-36],PARAMETER[\"latitude_of_origin\",-27],PARAMETER[\"central_meridian\",132],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4463": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "32064": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4467": "PROJCS[\"UTM Zone 21, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4470": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4471": "PROJCS[\"UTM Zone 38, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "4474": "PROJCS[\"UTM Zone 38, Southern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-382,-59,-262,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "4475": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-381.788,-57.501,-256.673,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "27700": "PROJCS[\"unnamed\",GEOGCS[\"OSGB 1936\",DATUM[\"OSGB_1936\",SPHEROID[\"Airy 1830\",6377563.396,299.3249646,AUTHORITY[\"EPSG\",\"7001\"]],TOWGS84[446.448,-125.157,542.06,0.1502,0.247,0.8421,-20.4894],AUTHORITY[\"EPSG\",\"6277\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4277\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",49],PARAMETER[\"central_meridian\",-2],PARAMETER[\"scale_factor\",0.9996012717],PARAMETER[\"false_easting\",400000],PARAMETER[\"false_northing\",-100000],UNIT[\"Meter\",1]]", "4483": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4484": "PROJCS[\"UTM Zone 11, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4485": "PROJCS[\"UTM Zone 12, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4486": "PROJCS[\"UTM Zone 13, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4487": "PROJCS[\"UTM Zone 14, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4488": "PROJCS[\"UTM Zone 15, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4489": "PROJCS[\"UTM Zone 16, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4490": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4491": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",13500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4492": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",14500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4493": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",15500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4494": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",16500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4495": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",17500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4496": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",18500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4497": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",19500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4498": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",20500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4499": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",21500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4500": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",22500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4501": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",23500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4502": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4503": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4504": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4505": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4506": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4507": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4508": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4509": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4510": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4511": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4512": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4513": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",25500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4514": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",78],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",26500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4515": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",27500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4516": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",84],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",28500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4517": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",29500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4518": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",90],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",30500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4519": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",31500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4520": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",96],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",32500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4521": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",33500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4522": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",102],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",34500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4523": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",35500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4524": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",108],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",36500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4525": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",37500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4526": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",114],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",38500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4527": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",39500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4528": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",120],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",40500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4529": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",41500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4530": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",126],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",42500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4531": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",43500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4532": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",132],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",44500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4533": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",45500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4534": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4535": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",78],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4536": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4537": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",84],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4538": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4539": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",90],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4540": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4541": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",96],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4542": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4543": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",102],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4544": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4545": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",108],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4546": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4547": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",114],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4548": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4549": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",120],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4550": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4551": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",126],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4552": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4553": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",132],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4554": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4555": "GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4558": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4559": "PROJCS[\"UTM Zone 20, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26702": "PROJCS[\"UTM Zone 2, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-171],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32613": "PROJCS[\"UTM Zone 13, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4568": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",13500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4569": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",14500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4570": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",15500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4571": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",16500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4572": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",17500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4573": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",18500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4574": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",19500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4575": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",20500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4576": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",21500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4577": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",22500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4578": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",23500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4579": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4580": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4581": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4582": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4583": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4584": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4585": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4586": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4587": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4588": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4589": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29168": "PROJCS[\"UTM Zone 18, Northern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29169": "PROJCS[\"UTM Zone 19, Northern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29170": "PROJCS[\"UTM Zone 20, Northern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26707": "PROJCS[\"UTM Zone 7, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29172": "PROJCS[\"UTM Zone 22, Northern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4600": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4601": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-255,-15,71,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4602": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[725,685,536,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4603": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[72,213.7,93,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4604": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[174,359,365,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4605": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[9,183,236,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4606": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-149,128,296,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4607": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[195.671,332.517,274.607,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4608": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4609": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4610": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378140,298.2569999999986]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4611": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4612": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4613": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-403,684,41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4614": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4615": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-499,-249,314,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4616": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-289,-124,60,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4617": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4618": "GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4619": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4620": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-106,-129,165,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4621": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[137,248,-430,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4622": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-467,-16,-300,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4623": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-186,230,110,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4624": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4625": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[186,482,151,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4626": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[94,-948,-1262,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4627": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4628": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[162,117,154,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4629": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4630": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[84,274,65,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4631": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[145,-187,103,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4632": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-382,-59,-262,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4633": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[335.47,222.58,-230.94,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4634": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-13,-348,292,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4635": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4636": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[365,194,166,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4637": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[325,154,172,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4638": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[30,430,368,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4639": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[253,-132,-127,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4640": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4641": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[287.58,177.78,-135.41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4642": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-13,-348,292,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4643": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4644": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-10.18,-350.43,291.37,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4645": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4646": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-963,510,-359,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4647": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",32500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26716": "PROJCS[\"UTM Zone 16, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21035": "PROJCS[\"UTM Zone 35, Southern Hemisphere\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-160,-6,-302,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "4652": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",25500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4653": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",78],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",26500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4654": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",27500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4655": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",84],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",28500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4656": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",29500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4657": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377019.27,300.0000000000031],TOWGS84[-28,199,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4658": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-73,46,-86,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4659": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4660": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4661": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4662": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-11.64,-348.6,291.98,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4663": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-502.862,-247.438,312.724,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4664": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-204.619,140.176,55.226,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4665": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-106.226,166.366,-37.893,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4666": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[508.088,-191.042,565.223,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4667": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4668": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-86,-98,-119,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4669": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4670": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4671": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4672": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[175,-38,113,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4673": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[174.05,-25.49,112.57,-0,-0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4674": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4675": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[-100,-248,259,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4676": "GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4677": "GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4678": "GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[44.585,-131.212,-39.544,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4679": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-80.01,253.26,291.19,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4680": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[124.5,-63.5,-281,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4681": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4682": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377276.345,300.8017000000115],TOWGS84[283.7,735.9,261.1,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4683": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4684": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-133,-321,50,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4685": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4686": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4687": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4688": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4689": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4690": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[221.525,152.948,176.768,-2.3847,-1.3896,-0.877,11.4741]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4691": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4692": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[217.037,86.959,23.956,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4693": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,-0.15,0.68,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4694": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4695": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4696": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4697": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4698": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[145,-187,103,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4699": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-770.1,158.4,-498.2,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4700": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4701": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-79.9,-158,-168.9,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4702": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4703": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4704": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4705": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4706": "GEOGCS[\"Helmert 1906\",DATUM[\"unknown\",SPHEROID[\"helmert\",6378200,298.3],TOWGS84[-146.21,112.63,4.05,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4707": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[114,-116,-333,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4708": "GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-491,-22,435,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4709": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[145,75,-272,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4710": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-320,550,-494,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4711": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[124,-234,-25,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4712": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-205,107,53,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4713": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-79,-129,145,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4714": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-127,-769,472,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4715": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-104,-129,239,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4716": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[298,-304,-375,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4717": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[-2,151,181,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4718": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[230,-199,-752,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4719": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[211,147,111,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4720": "GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4721": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[265.025,384.929,-194.046,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4722": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-794,119,-298,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4723": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[67.8,106.1,138.8,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4724": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[208,-435,-229,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4725": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[189,-79,-202,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4726": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[42,124,147,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4727": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[403,-81,277,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4728": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-307,-92,127,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4729": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[185,165,42,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4730": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[170,42,84,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4731": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[51,391,-36,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4732": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378270,296.9999999999916],TOWGS84[102,52,-38,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4733": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[276,-57,149,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4734": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-632,438,-609,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4735": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[647,1777,-1124,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4736": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[260,12,-147,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4737": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4738": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378293.645208759,294.2606763692569]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4739": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-156,-271,-189,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4740": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378136,298.2578393029984],TOWGS84[0,0,1.5,-0,-0,0.076,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4741": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4742": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4743": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[70.995,-335.916,262.898,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4744": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4745": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4746": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4747": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4748": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378306.3696,293.4663076556349],TOWGS84[51,391,-36,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4749": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4750": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[-56.263,16.136,-22.856,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4751": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377295.664,300.8017000000015]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4752": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378306.3696,293.4663076556349],TOWGS84[51,391,-36,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4753": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4754": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4755": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4756": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4757": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4758": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4759": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4760": "GEOGCS[\"WGS 66\",DATUM[\"unknown\",SPHEROID[\"WGS66\",6378145,298.25]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4761": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4762": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4763": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4764": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4765": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4766": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",90],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",30500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4767": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",31500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4768": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",96],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",32500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4769": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",33500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4770": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",102],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",34500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4771": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",35500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4772": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",108],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",36500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4773": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",37500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4774": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",114],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",38500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4775": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",39500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4776": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",120],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",40500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4777": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",41500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4778": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",126],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",42500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4779": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",43500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4780": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",132],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",44500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4781": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",45500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4782": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4783": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",78],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4784": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4785": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",84],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4786": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4787": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",90],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4788": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4789": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",96],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4790": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4791": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",102],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4792": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4793": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",108],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4794": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4795": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",114],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4796": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4797": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",120],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4798": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4799": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",126],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4800": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4801": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[674.4,15.1,405.3,0,0,0,0]],PRIMEM[\"Bern\",7.4395833333842],UNIT[\"degree\",0.0174532925199433]]", "4802": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[307,304,-318,0,0,0,0]],PRIMEM[\"Bogota\",-74.08091666678081],UNIT[\"degree\",0.0174532925199433]]", "4803": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-304.046,-60.576,103.64,0,0,0,0]],PRIMEM[\"Lisbon\",-9.13190611123326],UNIT[\"degree\",0.0174532925199433]]", "4804": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-587.8,519.75,145.76,0,0,0,0]],PRIMEM[\"Jakarta\",106.8077194445078],UNIT[\"degree\",0.0174532925199433]]", "4805": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Ferro\",-17.666666666668],UNIT[\"degree\",0.0174532925199433]]", "4806": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68]],PRIMEM[\"Rome\",12.4523333333529],UNIT[\"degree\",0.0174532925199433]]", "4807": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-168,-60,320,0,0,0,0]],PRIMEM[\"Paris\",2.3372291666985],UNIT[\"degree\",0.0174532925199433]]", "4808": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Jakarta\",106.8077194445078],UNIT[\"degree\",0.0174532925199433]]", "4809": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Brussels\",4.3679750000112],UNIT[\"degree\",0.0174532925199433]]", "4810": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-189,-242,-91,0,0,0,0]],PRIMEM[\"Paris\",2.3372291666985],UNIT[\"degree\",0.0174532925199433]]", "4811": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-73,-247,227,0,0,0,0]],PRIMEM[\"Paris\",2.3372291666985],UNIT[\"degree\",0.0174532925199433]]", "4812": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",132],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4813": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-377,681,-50,0,0,0,0]],PRIMEM[\"Jakarta\",106.8077194445078],UNIT[\"degree\",0.0174532925199433]]", "4814": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Stockholm\",18.0582777778441],UNIT[\"degree\",0.0174532925199433]]", "4815": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Athens\",23.7163375001321],UNIT[\"degree\",0.0174532925199433]]", "4816": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-263,6,431,0,0,0,0]],PRIMEM[\"Paris\",2.3372291666985],UNIT[\"degree\",0.0174532925199433]]", "4817": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377492.018,299.1528128000008],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21]],PRIMEM[\"Oslo\",10.7229166667181],UNIT[\"degree\",0.0174532925199433]]", "4818": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[589,76,480,0,0,0,0]],PRIMEM[\"Ferro\",-17.666666666668],UNIT[\"degree\",0.0174532925199433]]", "4819": "GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547]],PRIMEM[\"Paris\",2.3372291666985],UNIT[\"degree\",0.0174532925199433]]", "4820": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-403,684,41,0,0,0,0]],PRIMEM[\"Jakarta\",106.8077194445078],UNIT[\"degree\",0.0174532925199433]]", "4821": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265]],PRIMEM[\"Paris\",2.3372291666985],UNIT[\"degree\",0.0174532925199433]]", "4822": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4823": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4824": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "4826": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",15],PARAMETER[\"standard_parallel_2\",16.66666666666667],PARAMETER[\"latitude_of_origin\",15.83333333333333],PARAMETER[\"central_meridian\",-24],PARAMETER[\"false_easting\",161587.83],PARAMETER[\"false_northing\",128511.202],UNIT[\"Meter\",1]]", "32207": "PROJCS[\"UTM Zone 7, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26746": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",33.88333333333333],PARAMETER[\"standard_parallel_2\",32.78333333333333],PARAMETER[\"latitude_of_origin\",32.16666666666666],PARAMETER[\"central_meridian\",-116.25],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32111": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38.83333333333334],PARAMETER[\"central_meridian\",-74.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",150000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26747": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",34.41666666666666],PARAMETER[\"standard_parallel_2\",33.86666666666667],PARAMETER[\"latitude_of_origin\",34.13333333333333],PARAMETER[\"central_meridian\",-118.3333333333333],PARAMETER[\"false_easting\",4186692.58],PARAMETER[\"false_northing\",416926.74],UNIT[\"Foot_US\",0.3048006096012192]]", "4839": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",48.66666666666666],PARAMETER[\"standard_parallel_2\",53.66666666666666],PARAMETER[\"latitude_of_origin\",51],PARAMETER[\"central_meridian\",10.5],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26748": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",31],PARAMETER[\"central_meridian\",-110.1666666666667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "26749": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",31],PARAMETER[\"central_meridian\",-111.9166666666667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "26750": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",31],PARAMETER[\"central_meridian\",-113.75],PARAMETER[\"scale_factor\",0.999933333],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "4855": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",5.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4856": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",6.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4857": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",7.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4858": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",8.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4859": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4860": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",10.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4861": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",11.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4862": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",12.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4863": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",13.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4864": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",14.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4865": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4866": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",16.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4867": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",17.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4868": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",18.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4869": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",19.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4870": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",20.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4871": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4872": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",22.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4873": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",23.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4874": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",24.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4875": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",25.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4876": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",26.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4877": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4878": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",28.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4879": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",29.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "4880": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",30.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "26755": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.43333333333333],PARAMETER[\"standard_parallel_2\",37.23333333333333],PARAMETER[\"latitude_of_origin\",36.66666666666666],PARAMETER[\"central_meridian\",-105.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "26756": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.86666666666667],PARAMETER[\"standard_parallel_2\",41.2],PARAMETER[\"latitude_of_origin\",40.83333333333334],PARAMETER[\"central_meridian\",-72.75],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32219": "PROJCS[\"UTM Zone 19, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "4901": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6376523,308.6399999999991]],PRIMEM[\"unnamed\",2.337208333333333],UNIT[\"degree\",0.0174532925199433]]", "4902": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6376523,308.6399999999991]],PRIMEM[\"Paris\",2.3372291666985],UNIT[\"degree\",0.0174532925199433]]", "4903": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378298.3,294.7299999999894]],PRIMEM[\"Madrid\",-3.6879388889271],UNIT[\"degree\",0.0174532925199433]]", "4904": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[508.088,-191.042,565.223,0,0,0,0]],PRIMEM[\"Lisbon\",-9.13190611123326],UNIT[\"degree\",0.0174532925199433]]", "21291": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[31.95,300.99,419.19,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-62],PARAMETER[\"scale_factor\",0.9995],PARAMETER[\"false_easting\",400000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21292": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[31.95,300.99,419.19,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",13.17638888888889],PARAMETER[\"central_meridian\",-59.55972222222222],PARAMETER[\"scale_factor\",0.9999986],PARAMETER[\"false_easting\",30000],PARAMETER[\"false_northing\",75000],UNIT[\"Meter\",1]]", "32225": "PROJCS[\"UTM Zone 25, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26766": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",30],PARAMETER[\"central_meridian\",-82.16666666666667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "26767": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",30],PARAMETER[\"central_meridian\",-84.16666666666667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "26768": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",41.66666666666666],PARAMETER[\"central_meridian\",-112.1666666666667],PARAMETER[\"scale_factor\",0.999947368],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "26769": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",41.66666666666666],PARAMETER[\"central_meridian\",-114],PARAMETER[\"scale_factor\",0.999947368],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32231": "PROJCS[\"UTM Zone 31, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26770": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",41.66666666666666],PARAMETER[\"central_meridian\",-115.75],PARAMETER[\"scale_factor\",0.999933333],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32081": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-53],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26820": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.05],PARAMETER[\"standard_parallel_2\",45.61666666666667],PARAMETER[\"latitude_of_origin\",45],PARAMETER[\"central_meridian\",-94.25],PARAMETER[\"false_easting\",800000.0000101601],PARAMETER[\"false_northing\",99999.99998984],UNIT[\"Meter\",1]]", "26771": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36.66666666666666],PARAMETER[\"central_meridian\",-88.33333333333333],PARAMETER[\"scale_factor\",0.999975],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "26772": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36.66666666666666],PARAMETER[\"central_meridian\",-90.16666666666667],PARAMETER[\"scale_factor\",0.999941177],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "26773": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",37.5],PARAMETER[\"central_meridian\",-85.66666666666667],PARAMETER[\"scale_factor\",0.999966667],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "26774": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",37.5],PARAMETER[\"central_meridian\",-87.08333333333333],PARAMETER[\"scale_factor\",0.999966667],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "26859": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.21666666666667],PARAMETER[\"standard_parallel_2\",43.78333333333333],PARAMETER[\"latitude_of_origin\",43],PARAMETER[\"central_meridian\",-94],PARAMETER[\"false_easting\",2624666.6667],PARAMETER[\"false_northing\",328083.3333],UNIT[\"Foot_US\",0.3048006096012192]]", "32003": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",46.4],PARAMETER[\"standard_parallel_2\",44.86666666666667],PARAMETER[\"latitude_of_origin\",44],PARAMETER[\"central_meridian\",-109.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "26775": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",43.26666666666667],PARAMETER[\"standard_parallel_2\",42.06666666666667],PARAMETER[\"latitude_of_origin\",41.5],PARAMETER[\"central_meridian\",-93.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32237": "PROJCS[\"UTM Zone 37, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26776": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.78333333333333],PARAMETER[\"standard_parallel_2\",40.61666666666667],PARAMETER[\"latitude_of_origin\",40],PARAMETER[\"central_meridian\",-93.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "5013": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "5014": "PROJCS[\"UTM Zone 25, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5015": "PROJCS[\"UTM Zone 26, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5016": "PROJCS[\"UTM Zone 28, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5018": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-304.046,-60.576,103.64,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",39.66666666666666],PARAMETER[\"central_meridian\",-8.131906111111112],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32239": "PROJCS[\"UTM Zone 39, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26778": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.56666666666667],PARAMETER[\"standard_parallel_2\",37.26666666666667],PARAMETER[\"latitude_of_origin\",36.66666666666666],PARAMETER[\"central_meridian\",-98.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32240": "PROJCS[\"UTM Zone 40, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26779": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",37.96666666666667],PARAMETER[\"standard_parallel_2\",38.96666666666667],PARAMETER[\"latitude_of_origin\",37.5],PARAMETER[\"central_meridian\",-84.25],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "21413": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",13500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21414": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",14500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21415": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",15500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21416": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",16500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21417": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",17500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21418": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",18500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21419": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",19500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21420": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",20500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21421": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",21500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21422": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",22500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21423": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",23500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5041": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Polar_Stereographic\"],PARAMETER[\"latitude_of_origin\",90],PARAMETER[\"central_meridian\",0],PARAMETER[\"scale_factor\",0.994],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",2000000],UNIT[\"Meter\",1]]", "5042": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Polar_Stereographic\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",0],PARAMETER[\"scale_factor\",0.994],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",2000000],UNIT[\"Meter\",1]]", "32243": "PROJCS[\"UTM Zone 43, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26782": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",29.3],PARAMETER[\"standard_parallel_2\",30.7],PARAMETER[\"latitude_of_origin\",28.66666666666667],PARAMETER[\"central_meridian\",-91.33333333333333],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "5048": "PROJCS[\"UTM Zone 35, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26783": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",43.83333333333334],PARAMETER[\"central_meridian\",-68.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "26784": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",42.83333333333334],PARAMETER[\"central_meridian\",-70.16666666666667],PARAMETER[\"scale_factor\",0.999966667],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "29635": "PROJCS[\"UTM Zone 35, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29636": "PROJCS[\"UTM Zone 36, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26785": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.3],PARAMETER[\"standard_parallel_2\",39.45],PARAMETER[\"latitude_of_origin\",37.83333333333334],PARAMETER[\"central_meridian\",-77],PARAMETER[\"false_easting\",800000.0000000002],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "5069": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Albers_Conic_Equal_Area\"],PARAMETER[\"standard_parallel_1\",29.5],PARAMETER[\"standard_parallel_2\",45.5],PARAMETER[\"latitude_of_center\",23],PARAMETER[\"longitude_of_center\",-96],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5070": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Albers_Conic_Equal_Area\"],PARAMETER[\"standard_parallel_1\",29.5],PARAMETER[\"standard_parallel_2\",45.5],PARAMETER[\"latitude_of_center\",23],PARAMETER[\"longitude_of_center\",-96],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5071": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Albers_Conic_Equal_Area\"],PARAMETER[\"standard_parallel_1\",29.5],PARAMETER[\"standard_parallel_2\",45.5],PARAMETER[\"latitude_of_center\",23],PARAMETER[\"longitude_of_center\",-96],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5072": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Albers_Conic_Equal_Area\"],PARAMETER[\"standard_parallel_1\",29.5],PARAMETER[\"standard_parallel_2\",45.5],PARAMETER[\"latitude_of_center\",23],PARAMETER[\"longitude_of_center\",-96],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21457": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21458": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21459": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21460": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21461": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21462": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21463": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21473": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21474": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21475": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21476": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21477": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21478": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21479": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21480": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21481": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21482": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21483": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5105": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",5.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5106": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",6.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5107": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",7.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5108": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",8.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5109": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",9.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5110": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",10.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5111": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",11.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5112": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",12.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5113": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",13.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5114": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",14.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5115": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",15.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5116": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",16.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5117": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",17.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5118": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",18.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5119": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",19.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5120": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",20.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5121": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",21.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5122": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",22.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5123": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",23.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5124": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",24.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5125": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",25.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5126": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",26.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5127": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",27.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5128": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",28.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5129": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",29.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5130": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",58],PARAMETER[\"central_meridian\",30.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5132": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "26798": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36.16666666666666],PARAMETER[\"central_meridian\",-94.5],PARAMETER[\"scale_factor\",0.999941177],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "26799": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",34.41666666666666],PARAMETER[\"standard_parallel_2\",33.86666666666667],PARAMETER[\"latitude_of_origin\",34.13333333333333],PARAMETER[\"central_meridian\",-118.3333333333333],PARAMETER[\"false_easting\",4186692.58],PARAMETER[\"false_northing\",4160926.74],UNIT[\"Foot_US\",0.3048006096012192]]", "26801": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378450.047548896,294.9786971646739]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",41.5],PARAMETER[\"central_meridian\",-83.66666666666667],PARAMETER[\"scale_factor\",0.999942857],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "29738": "PROJCS[\"UTM Zone 38, Southern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-189,-242,-91,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "29739": "PROJCS[\"UTM Zone 39, Southern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-189,-242,-91,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26802": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378450.047548896,294.9786971646739]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",41.5],PARAMETER[\"central_meridian\",-85.75],PARAMETER[\"scale_factor\",0.999909091],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "5167": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",131],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "5168": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",127],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",550000],UNIT[\"Meter\",1]]", "5169": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",125],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "5170": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",127],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "5171": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "5172": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",131],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "5173": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",125.0028902777778],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "5174": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",127.0028902777778],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "5175": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",127.0028902777778],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",550000],UNIT[\"Meter\",1]]", "5176": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",129.0028902777778],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "5177": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",131.0028902777778],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "5178": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",127.5],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",2000000],UNIT[\"Meter\",1]]", "5179": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",127.5],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",2000000],UNIT[\"Meter\",1]]", "5180": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",125],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "5181": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",127],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "5182": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",127],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",550000],UNIT[\"Meter\",1]]", "5183": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "5184": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",131],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "5185": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",125],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",600000],UNIT[\"Meter\",1]]", "5186": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",127],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",600000],UNIT[\"Meter\",1]]", "5187": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",600000],UNIT[\"Meter\",1]]", "5188": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",131],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",600000],UNIT[\"Meter\",1]]", "26906": "PROJCS[\"UTM Zone 6, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26811": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378450.047548896,294.9786971646739]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.48333333333333],PARAMETER[\"standard_parallel_2\",47.08333333333334],PARAMETER[\"latitude_of_origin\",44.78333333333333],PARAMETER[\"central_meridian\",-87],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "5221": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[589,76,480,0,0,0,0]],PRIMEM[\"Ferro\",-17.666666666668],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Krovak\"],PARAMETER[\"latitude_of_center\",49.5],PARAMETER[\"longitude_of_center\",42.5],PARAMETER[\"azimuth\",0],PARAMETER[\"pseudo_standard_parallel_1\",0],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5223": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",12],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "26812": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378450.047548896,294.9786971646739]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",44.18333333333333],PARAMETER[\"standard_parallel_2\",45.7],PARAMETER[\"latitude_of_origin\",43.31666666666667],PARAMETER[\"central_meridian\",-84.33333333333333],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "5228": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[572.213,85.334,461.94,4.9732,1.529,5.2484,3.5378]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "5229": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[572.213,85.334,461.94,4.9732,1.529,5.2484,3.5378]],PRIMEM[\"Ferro\",-17.666666666668],UNIT[\"degree\",0.0174532925199433]]", "26813": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378450.047548896,294.9786971646739]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",42.1],PARAMETER[\"standard_parallel_2\",43.66666666666666],PARAMETER[\"latitude_of_origin\",41.5],PARAMETER[\"central_meridian\",-84.33333333333333],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "5233": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377276.345,300.8017000000115],TOWGS84[-0.293,766.95,87.713,0.195704,1.69507,3.47302,-0.039338]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "5234": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377276.345,300.8017000000115],TOWGS84[-97,787,86,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",7.000480277777778],PARAMETER[\"central_meridian\",80.77171111111112],PARAMETER[\"scale_factor\",0.9999238418],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",200000],UNIT[\"Meter\",1]]", "5235": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377276.345,300.8017000000115],TOWGS84[-0.293,766.95,87.713,0.195704,1.69507,3.47302,-0.039338]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",7.000471527777778],PARAMETER[\"central_meridian\",80.77171308333334],PARAMETER[\"scale_factor\",0.9999238418],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "26814": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",43.66666666666666],PARAMETER[\"central_meridian\",-68.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5243": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",48.66666666666666],PARAMETER[\"standard_parallel_2\",53.66666666666666],PARAMETER[\"latitude_of_origin\",51],PARAMETER[\"central_meridian\",10.5],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5246": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "5247": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"latitude_of_center\",4],PARAMETER[\"longitude_of_center\",115],PARAMETER[\"azimuth\",53.31580995],PARAMETER[\"rectified_grid_angle\",0],PARAMETER[\"scale_factor\",0.99984],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5252": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "5253": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5254": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",30],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5255": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5256": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",36],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5257": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5258": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",42],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5259": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5264": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "5266": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",90],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26819": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",48.63333333333333],PARAMETER[\"standard_parallel_2\",47.03333333333333],PARAMETER[\"latitude_of_origin\",46.5],PARAMETER[\"central_meridian\",-93.1],PARAMETER[\"false_easting\",800000.0000101601],PARAMETER[\"false_northing\",99999.99998984],UNIT[\"Meter\",1]]", "5269": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",9500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5270": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",30],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",10500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5271": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",11500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5272": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",36],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",12500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5273": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",13500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5274": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",42],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",14500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5275": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",15500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26821": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.21666666666667],PARAMETER[\"standard_parallel_2\",43.78333333333333],PARAMETER[\"latitude_of_origin\",43],PARAMETER[\"central_meridian\",-94],PARAMETER[\"false_easting\",800000.0000101601],PARAMETER[\"false_northing\",99999.99998984],UNIT[\"Meter\",1]]", "26822": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",43],PARAMETER[\"standard_parallel_2\",40],PARAMETER[\"latitude_of_origin\",39.83333333333334],PARAMETER[\"central_meridian\",-100],PARAMETER[\"false_easting\",500000.0000101601],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21453": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26823": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.25],PARAMETER[\"standard_parallel_2\",39],PARAMETER[\"latitude_of_origin\",38.5],PARAMETER[\"central_meridian\",-79.5],PARAMETER[\"false_easting\",1968500],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5292": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",90.73333333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "5293": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",89.55],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "5294": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",89.85],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "5295": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",90.03333333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "5296": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",90.15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "5297": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",91.13333333333334],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "5298": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",91.23333333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "5299": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",89.35],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "5300": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",91.35],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "5301": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",89.85],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "5302": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",91.56666666666666],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "5303": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",89.06666666666666],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "5304": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",90.26666666666667],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "5305": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",89.55],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "5306": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",91.75],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "5307": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",90.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "5308": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",90.16666666666667],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "5309": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",90.11666666666666],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "5310": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",91.56666666666666],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "5311": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",90.86666666666666],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",-2500000],UNIT[\"Meter\",1]]", "28192": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378300.789,293.4663155389802],TOWGS84[-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",31.73409694444445],PARAMETER[\"central_meridian\",35.21208055555556],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",170251.555],PARAMETER[\"false_northing\",1126867.909],UNIT[\"Meter\",1]]", "5316": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-7],PARAMETER[\"scale_factor\",0.999997],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",-6000000],UNIT[\"Meter\",1]]", "28193": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378300.789,293.4663155389802],TOWGS84[-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Cassini_Soldner\"],PARAMETER[\"latitude_of_origin\",31.73409694444445],PARAMETER[\"central_meridian\",35.21208055555556],PARAMETER[\"false_easting\",170251.555],PARAMETER[\"false_northing\",1126867.909],UNIT[\"Meter\",1]]", "5320": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",44.5],PARAMETER[\"standard_parallel_2\",54.5],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-84],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5321": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",44.5],PARAMETER[\"standard_parallel_2\",54.5],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-84],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5324": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "5325": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",64.25],PARAMETER[\"standard_parallel_2\",65.75],PARAMETER[\"latitude_of_origin\",65],PARAMETER[\"central_meridian\",-19],PARAMETER[\"false_easting\",1700000],PARAMETER[\"false_northing\",300000],UNIT[\"Meter\",1]]", "29902": "PROJCS[\"unnamed\",GEOGCS[\"TM65\",DATUM[\"TM65\",SPHEROID[\"Airy Modified 1849\",6377340.189,299.3249646,AUTHORITY[\"EPSG\",\"7002\"]],TOWGS84[482.53,-130.596,564.557,-1.042,-0.214,-0.631,8.15],AUTHORITY[\"EPSG\",\"6299\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4299\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",53.5],PARAMETER[\"central_meridian\",-8],PARAMETER[\"scale_factor\",1.000035],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",250000],UNIT[\"Meter\",1]]", "29903": "PROJCS[\"unnamed\",GEOGCS[\"Modified Airy\",DATUM[\"unknown\",SPHEROID[\"mod_airy\",6377340.189,299.3249373654873],TOWGS84[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",53.5],PARAMETER[\"central_meridian\",-8],PARAMETER[\"scale_factor\",1.000035],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",250000],UNIT[\"Meter\",1]]", "5329": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-403,684,41,0,0,0,0]],PRIMEM[\"Jakarta\",106.8077194445078],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Mercator_1SP\"],PARAMETER[\"central_meridian\",3.192280555555556],PARAMETER[\"scale_factor\",0.997],PARAMETER[\"false_easting\",3900000],PARAMETER[\"false_northing\",900000],UNIT[\"Meter\",1]]", "5330": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-377,681,-50,0,0,0,0]],PRIMEM[\"Jakarta\",106.8077194445078],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Mercator_1SP\"],PARAMETER[\"central_meridian\",3.192280555555556],PARAMETER[\"scale_factor\",0.997],PARAMETER[\"false_easting\",3900000],PARAMETER[\"false_northing\",900000],UNIT[\"Meter\",1]]", "5331": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-587.8,519.75,145.76,0,0,0,0]],PRIMEM[\"Jakarta\",106.8077194445078],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Mercator_1SP\"],PARAMETER[\"central_meridian\",3.192280555555556],PARAMETER[\"scale_factor\",0.997],PARAMETER[\"false_easting\",3900000],PARAMETER[\"false_northing\",900000],UNIT[\"Meter\",1]]", "26830": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",48.63333333333333],PARAMETER[\"standard_parallel_2\",47.03333333333333],PARAMETER[\"latitude_of_origin\",46.5],PARAMETER[\"central_meridian\",-93.1],PARAMETER[\"false_easting\",800000.0000101601],PARAMETER[\"false_northing\",99999.99998984],UNIT[\"Meter\",1]]", "5337": "PROJCS[\"UTM Zone 25, Southern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-151.99,287.04,-147.45,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26831": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.05],PARAMETER[\"standard_parallel_2\",45.61666666666667],PARAMETER[\"latitude_of_origin\",45],PARAMETER[\"central_meridian\",-94.25],PARAMETER[\"false_easting\",800000.0000101601],PARAMETER[\"false_northing\",99999.99998984],UNIT[\"Meter\",1]]", "5340": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "5343": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-72],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",1500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5344": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",2500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5345": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-66],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5346": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",4500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5347": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-60],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5348": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5349": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-54],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",7500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26833": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",43],PARAMETER[\"standard_parallel_2\",40],PARAMETER[\"latitude_of_origin\",39.83333333333334],PARAMETER[\"central_meridian\",-100],PARAMETER[\"false_easting\",500000.0000101601],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5354": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "5355": "PROJCS[\"UTM Zone 20, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5356": "PROJCS[\"UTM Zone 19, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5357": "PROJCS[\"UTM Zone 21, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5360": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "5361": "PROJCS[\"UTM Zone 19, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5362": "PROJCS[\"UTM Zone 18, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26835": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.88333333333333],PARAMETER[\"standard_parallel_2\",37.48333333333333],PARAMETER[\"latitude_of_origin\",37],PARAMETER[\"central_meridian\",-81],PARAMETER[\"false_easting\",1968500],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5365": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "5367": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-84],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26836": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",43.66666666666666],PARAMETER[\"central_meridian\",-68.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5371": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "5373": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "26837": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",42.83333333333334],PARAMETER[\"central_meridian\",-70.16666666666667],PARAMETER[\"scale_factor\",0.999966667],PARAMETER[\"false_easting\",900000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20011": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",63],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",11500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5381": "GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "5382": "PROJCS[\"UTM Zone 21, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5383": "PROJCS[\"UTM Zone 22, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20012": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",69],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",12500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5387": "PROJCS[\"UTM Zone 18, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5388": "PROJCS[\"UTM Zone 17, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5389": "PROJCS[\"UTM Zone 19, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20013": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",13500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "30731": "PROJCS[\"UTM Zone 31, Northern Hemisphere\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5393": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "5396": "PROJCS[\"UTM Zone 26, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20014": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",14500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21782": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[674.4,15.1,405.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"latitude_of_center\",46.95240555555556],PARAMETER[\"longitude_of_center\",7.439583333333333],PARAMETER[\"azimuth\",90],PARAMETER[\"rectified_grid_angle\",90],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26841": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",48.63333333333333],PARAMETER[\"standard_parallel_2\",47.03333333333333],PARAMETER[\"latitude_of_origin\",46.5],PARAMETER[\"central_meridian\",-93.1],PARAMETER[\"false_easting\",800000.0000101601],PARAMETER[\"false_northing\",99999.99998984],UNIT[\"Meter\",1]]", "20015": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",15500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26842": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.05],PARAMETER[\"standard_parallel_2\",45.61666666666667],PARAMETER[\"latitude_of_origin\",45],PARAMETER[\"central_meridian\",-94.25],PARAMETER[\"false_easting\",800000.0000101601],PARAMETER[\"false_northing\",99999.99998984],UNIT[\"Meter\",1]]", "20016": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",16500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26843": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.21666666666667],PARAMETER[\"standard_parallel_2\",43.78333333333333],PARAMETER[\"latitude_of_origin\",43],PARAMETER[\"central_meridian\",-94],PARAMETER[\"false_easting\",800000.0000101601],PARAMETER[\"false_northing\",99999.99998984],UNIT[\"Meter\",1]]", "20017": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",17500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26844": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",43],PARAMETER[\"standard_parallel_2\",40],PARAMETER[\"latitude_of_origin\",39.83333333333334],PARAMETER[\"central_meridian\",-100],PARAMETER[\"false_easting\",500000.0000101601],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20018": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",18500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26845": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.25],PARAMETER[\"standard_parallel_2\",39],PARAMETER[\"latitude_of_origin\",38.5],PARAMETER[\"central_meridian\",-79.5],PARAMETER[\"false_easting\",1968500],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20019": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",19500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26846": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.88333333333333],PARAMETER[\"standard_parallel_2\",37.48333333333333],PARAMETER[\"latitude_of_origin\",37],PARAMETER[\"central_meridian\",-81],PARAMETER[\"false_easting\",1968500],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20020": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",20500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21818": "PROJCS[\"UTM Zone 18, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[307,304,-318,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26847": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",43.66666666666666],PARAMETER[\"central_meridian\",-68.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",984250],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "20021": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",21500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26848": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",42.83333333333334],PARAMETER[\"central_meridian\",-70.16666666666667],PARAMETER[\"scale_factor\",0.999966667],PARAMETER[\"false_easting\",2952750],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "20022": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",22500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26849": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",48.63333333333333],PARAMETER[\"standard_parallel_2\",47.03333333333333],PARAMETER[\"latitude_of_origin\",46.5],PARAMETER[\"central_meridian\",-93.1],PARAMETER[\"false_easting\",2624666.6667],PARAMETER[\"false_northing\",328083.3333],UNIT[\"Foot_US\",0.3048006096012192]]", "20822": "PROJCS[\"UTM Zone 22, Southern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-151.99,287.04,-147.45,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5451": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[213.11,9.37,-74.95,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "26850": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.05],PARAMETER[\"standard_parallel_2\",45.61666666666667],PARAMETER[\"latitude_of_origin\",45],PARAMETER[\"central_meridian\",-94.25],PARAMETER[\"false_easting\",2624666.6667],PARAMETER[\"false_northing\",328083.3333],UNIT[\"Foot_US\",0.3048006096012192]]", "5456": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[213.11,9.37,-74.95,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",10.46666666666667],PARAMETER[\"central_meridian\",-84.33333333333333],PARAMETER[\"scale_factor\",0.99995696],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",271820.522],UNIT[\"Meter\",1]]", "5457": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[213.11,9.37,-74.95,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",9],PARAMETER[\"central_meridian\",-83.66666666666667],PARAMETER[\"scale_factor\",0.99995696],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",327987.436],UNIT[\"Meter\",1]]", "5458": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",16.81666666666667],PARAMETER[\"central_meridian\",-90.33333333333333],PARAMETER[\"scale_factor\",0.99992226],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",292209.579],UNIT[\"Meter\",1]]", "5459": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[213.11,9.37,-74.95,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",14.9],PARAMETER[\"central_meridian\",-90.33333333333333],PARAMETER[\"scale_factor\",0.99989906],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",325992.681],UNIT[\"Meter\",1]]", "5460": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[213.11,9.37,-74.95,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",13.78333333333333],PARAMETER[\"central_meridian\",-89],PARAMETER[\"scale_factor\",0.99996704],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",295809.184],UNIT[\"Meter\",1]]", "5461": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[213.11,9.37,-74.95,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",13.86666666666667],PARAMETER[\"central_meridian\",-85.5],PARAMETER[\"scale_factor\",0.99990314],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",359891.816],UNIT[\"Meter\",1]]", "5462": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[213.11,9.37,-74.95,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",11.73333333333333],PARAMETER[\"central_meridian\",-85.5],PARAMETER[\"scale_factor\",0.99992228],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",288876.327],UNIT[\"Meter\",1]]", "5463": "PROJCS[\"UTM Zone 17, Northern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5464": "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378293.645208759,294.2606763692569]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "26852": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",43],PARAMETER[\"standard_parallel_2\",40],PARAMETER[\"latitude_of_origin\",39.83333333333334],PARAMETER[\"central_meridian\",-100],PARAMETER[\"false_easting\",1640416.6667],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "5466": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378293.645208759,294.2606763692569]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",17.06124194444444],PARAMETER[\"central_meridian\",-88.6318575],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",66220.02833082761],PARAMETER[\"false_northing\",135779.5099885299],UNIT[\"Meter\",1]]", "5467": "GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "5469": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",8.416666666666666],PARAMETER[\"central_meridian\",-80],PARAMETER[\"scale_factor\",0.99989909],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",294865.303],UNIT[\"Meter\",1]]", "26853": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.25],PARAMETER[\"standard_parallel_2\",39],PARAMETER[\"latitude_of_origin\",38.5],PARAMETER[\"central_meridian\",-79.5],PARAMETER[\"false_easting\",1968500],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "5472": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Polyconic\"],PARAMETER[\"latitude_of_origin\",8.25],PARAMETER[\"central_meridian\",-81],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",1092972.1],UNIT[\"unknown\",0.9143917962]]", "20027": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",159],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",27500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26854": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.88333333333333],PARAMETER[\"standard_parallel_2\",37.48333333333333],PARAMETER[\"latitude_of_origin\",37],PARAMETER[\"central_meridian\",-81],PARAMETER[\"false_easting\",1968500],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "5479": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",-76.66666666666667],PARAMETER[\"standard_parallel_2\",-79.33333333333333],PARAMETER[\"latitude_of_origin\",-78],PARAMETER[\"central_meridian\",163],PARAMETER[\"false_easting\",7000000],PARAMETER[\"false_northing\",5000000],UNIT[\"Meter\",1]]", "5480": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",-73.66666666666667],PARAMETER[\"standard_parallel_2\",-75.33333333333333],PARAMETER[\"latitude_of_origin\",-74.5],PARAMETER[\"central_meridian\",165],PARAMETER[\"false_easting\",5000000],PARAMETER[\"false_northing\",3000000],UNIT[\"Meter\",1]]", "5481": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",-70.66666666666667],PARAMETER[\"standard_parallel_2\",-72.33333333333333],PARAMETER[\"latitude_of_origin\",-71.5],PARAMETER[\"central_meridian\",166],PARAMETER[\"false_easting\",3000000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5482": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Polar_Stereographic\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",180],PARAMETER[\"scale_factor\",0.994],PARAMETER[\"false_easting\",5000000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "26855": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",43.66666666666666],PARAMETER[\"central_meridian\",-68.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",984250],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "21095": "PROJCS[\"UTM Zone 35, Northern Hemisphere\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-160,-6,-302,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20029": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",171],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",29500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5489": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "5490": "PROJCS[\"UTM Zone 20, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20030": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",177],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",30500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26857": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",48.63333333333333],PARAMETER[\"standard_parallel_2\",47.03333333333333],PARAMETER[\"latitude_of_origin\",46.5],PARAMETER[\"central_meridian\",-93.1],PARAMETER[\"false_easting\",2624666.6667],PARAMETER[\"false_northing\",328083.3333],UNIT[\"Foot_US\",0.3048006096012192]]", "20031": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-177],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",31500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26858": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.05],PARAMETER[\"standard_parallel_2\",45.61666666666667],PARAMETER[\"latitude_of_origin\",45],PARAMETER[\"central_meridian\",-94.25],PARAMETER[\"false_easting\",2624666.6667],PARAMETER[\"false_northing\",328083.3333],UNIT[\"Foot_US\",0.3048006096012192]]", "20004": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",4500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20032": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-171],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",32500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21891": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[307,304,-318,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",4.599047222222222],PARAMETER[\"central_meridian\",-77.08091666666667],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "21892": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[307,304,-318,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",4.599047222222222],PARAMETER[\"central_meridian\",-74.08091666666667],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "21893": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[307,304,-318,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",4.599047222222222],PARAMETER[\"central_meridian\",-71.08091666666667],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "21894": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[307,304,-318,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",4.599047222222222],PARAMETER[\"central_meridian\",-68.08091666666667],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "32321": "PROJCS[\"UTM Zone 21, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "21896": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[307,304,-318,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",4.599047222222222],PARAMETER[\"central_meridian\",-77.08091666666667],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5513": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[589,76,480,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Krovak\"],PARAMETER[\"latitude_of_center\",49.5],PARAMETER[\"longitude_of_center\",24.83333333333333],PARAMETER[\"azimuth\",0],PARAMETER[\"pseudo_standard_parallel_1\",0],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5514": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[589,76,480,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Krovak\"],PARAMETER[\"latitude_of_center\",49.5],PARAMETER[\"longitude_of_center\",24.83333333333333],PARAMETER[\"azimuth\",0],PARAMETER[\"pseudo_standard_parallel_1\",0],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21899": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[307,304,-318,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",4.599047222222222],PARAMETER[\"central_meridian\",-68.08091666666667],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "5518": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[175,-38,113,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-44],PARAMETER[\"central_meridian\",-176.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",350000],PARAMETER[\"false_northing\",650000],UNIT[\"Meter\",1]]", "5519": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[174.05,-25.49,112.57,-0,-0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-44],PARAMETER[\"central_meridian\",-176.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",350000],PARAMETER[\"false_northing\",650000],UNIT[\"Meter\",1]]", "5520": "PROJCS[\"unnamed\",GEOGCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[606,23,413,0,0,0,0],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4314\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",3],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",1500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5523": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",11.5],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1500000],PARAMETER[\"false_northing\",5500000],UNIT[\"Meter\",1]]", "5524": "GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "26862": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.88333333333333],PARAMETER[\"standard_parallel_2\",37.48333333333333],PARAMETER[\"latitude_of_origin\",37],PARAMETER[\"central_meridian\",-81],PARAMETER[\"false_easting\",1968500],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "5527": "GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "5530": "PROJCS[\"unnamed\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Polyconic\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-54],PARAMETER[\"false_easting\",5000000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5531": "PROJCS[\"UTM Zone 21, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5532": "PROJCS[\"UTM Zone 22, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5533": "PROJCS[\"UTM Zone 23, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5534": "PROJCS[\"UTM Zone 24, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5535": "PROJCS[\"UTM Zone 25, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5536": "PROJCS[\"UTM Zone 21, Southern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5537": "PROJCS[\"UTM Zone 22, Southern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5538": "PROJCS[\"UTM Zone 23, Southern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5539": "PROJCS[\"UTM Zone 24, Southern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26865": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",48.63333333333333],PARAMETER[\"standard_parallel_2\",47.03333333333333],PARAMETER[\"latitude_of_origin\",46.5],PARAMETER[\"central_meridian\",-93.1],PARAMETER[\"false_easting\",2624666.6667],PARAMETER[\"false_northing\",328083.3333],UNIT[\"Foot_US\",0.3048006096012192]]", "5546": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "26866": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.05],PARAMETER[\"standard_parallel_2\",45.61666666666667],PARAMETER[\"latitude_of_origin\",45],PARAMETER[\"central_meridian\",-94.25],PARAMETER[\"false_easting\",2624666.6667],PARAMETER[\"false_northing\",328083.3333],UNIT[\"Foot_US\",0.3048006096012192]]", "5550": "PROJCS[\"UTM Zone 54, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5551": "PROJCS[\"UTM Zone 55, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5552": "PROJCS[\"UTM Zone 56, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "28232": "PROJCS[\"UTM Zone 32, Southern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-148,51,-291,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26856": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",42.83333333333334],PARAMETER[\"central_meridian\",-70.16666666666667],PARAMETER[\"scale_factor\",0.999966667],PARAMETER[\"false_easting\",2952750],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "26867": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.21666666666667],PARAMETER[\"standard_parallel_2\",43.78333333333333],PARAMETER[\"latitude_of_origin\",43],PARAMETER[\"central_meridian\",-94],PARAMETER[\"false_easting\",2624666.6667],PARAMETER[\"false_northing\",328083.3333],UNIT[\"Foot_US\",0.3048006096012192]]", "5559": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[213.11,9.37,-74.95,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",16.81666666666667],PARAMETER[\"central_meridian\",-90.33333333333333],PARAMETER[\"scale_factor\",0.99992226],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",292209.579],UNIT[\"Meter\",1]]", "5561": "GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "5562": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",4500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5563": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5564": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5565": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",7500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5566": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5567": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5568": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5569": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5570": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",7500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5571": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",24],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",8500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5572": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",9500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5573": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",30],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",10500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5574": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",11500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5575": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",36],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",12500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5576": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",13500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5577": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5578": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",24],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5579": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5580": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",30],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5581": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5582": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",36],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5583": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[25,-141,-78.5,-0,0.35,0.736,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "30161": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-146.414,507.337,680.507,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",33],PARAMETER[\"central_meridian\",129.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "30162": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-146.414,507.337,680.507,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",33],PARAMETER[\"central_meridian\",131],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "30163": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-146.414,507.337,680.507,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36],PARAMETER[\"central_meridian\",132.1666666666667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5588": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Oblique_Stereographic\"],PARAMETER[\"latitude_of_origin\",46.5],PARAMETER[\"central_meridian\",-66.5],PARAMETER[\"scale_factor\",0.999912],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",1000000],UNIT[\"Foot (International)\",0.3048]]", "5589": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378293.645208759,294.2606763692569]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",17.06124194444444],PARAMETER[\"central_meridian\",-88.6318575],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",217259.26],PARAMETER[\"false_northing\",445474.83],UNIT[\"unknown\",0.3047972654]]", "30166": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-146.414,507.337,680.507,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36],PARAMETER[\"central_meridian\",136],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "30167": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-146.414,507.337,680.507,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36],PARAMETER[\"central_meridian\",137.1666666666667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "30168": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-146.414,507.337,680.507,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36],PARAMETER[\"central_meridian\",138.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5593": "GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "30170": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-146.414,507.337,680.507,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",40],PARAMETER[\"central_meridian\",140.8333333333333],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "30171": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-146.414,507.337,680.507,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",44],PARAMETER[\"central_meridian\",140.25],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5596": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",11.33333333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "30173": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-146.414,507.337,680.507,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",44],PARAMETER[\"central_meridian\",144.25],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "30174": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-146.414,507.337,680.507,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",26],PARAMETER[\"central_meridian\",142],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20823": "PROJCS[\"UTM Zone 23, Southern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-151.99,287.04,-147.45,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "30176": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-146.414,507.337,680.507,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",26],PARAMETER[\"central_meridian\",124],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "30177": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-146.414,507.337,680.507,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",26],PARAMETER[\"central_meridian\",131],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "30178": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-146.414,507.337,680.507,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",20],PARAMETER[\"central_meridian\",136],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "30179": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-146.414,507.337,680.507,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",26],PARAMETER[\"central_meridian\",154],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32337": "PROJCS[\"UTM Zone 37, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "22187": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-54],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",7500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5623": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",41.5],PARAMETER[\"central_meridian\",-83.66666666666667],PARAMETER[\"scale_factor\",0.999942857],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "5624": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",41.5],PARAMETER[\"central_meridian\",-85.75],PARAMETER[\"scale_factor\",0.999909091],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "5625": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",41.5],PARAMETER[\"central_meridian\",-88.75],PARAMETER[\"scale_factor\",0.999909091],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "5627": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-87,-98,-121,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",6],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5629": "PROJCS[\"UTM Zone 38, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,-0,-0,-0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5631": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",2500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5632": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",35],PARAMETER[\"standard_parallel_2\",65],PARAMETER[\"latitude_of_origin\",52],PARAMETER[\"central_meridian\",10],PARAMETER[\"false_easting\",4000000],PARAMETER[\"false_northing\",2800000],UNIT[\"Meter\",1]]", "5633": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"Meter\",1]]", "5634": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",35],PARAMETER[\"standard_parallel_2\",65],PARAMETER[\"latitude_of_origin\",52],PARAMETER[\"central_meridian\",10],PARAMETER[\"false_easting\",4000000],PARAMETER[\"false_northing\",2800000],UNIT[\"Meter\",1]]", "5635": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"Meter\",1]]", "5636": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"Meter\",1]]", "5637": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",35],PARAMETER[\"standard_parallel_2\",65],PARAMETER[\"latitude_of_origin\",52],PARAMETER[\"central_meridian\",10],PARAMETER[\"false_easting\",4000000],PARAMETER[\"false_northing\",2800000],UNIT[\"Meter\",1]]", "5638": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"Meter\",1]]", "5639": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",35],PARAMETER[\"standard_parallel_2\",65],PARAMETER[\"latitude_of_origin\",52],PARAMETER[\"central_meridian\",10],PARAMETER[\"false_easting\",4000000],PARAMETER[\"false_northing\",2800000],UNIT[\"Meter\",1]]", "5641": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Mercator_2SP\"],PARAMETER[\"standard_parallel_1\",-2],PARAMETER[\"central_meridian\",-43],PARAMETER[\"false_easting\",5000000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5643": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-87,-98,-121,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",52.66666666666666],PARAMETER[\"standard_parallel_2\",54.33333333333334],PARAMETER[\"latitude_of_origin\",48],PARAMETER[\"central_meridian\",10],PARAMETER[\"false_easting\",815000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5644": "PROJCS[\"UTM Zone 39, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5646": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",42.5],PARAMETER[\"central_meridian\",-72.5],PARAMETER[\"scale_factor\",0.999964286],PARAMETER[\"false_easting\",1640416.6667],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "22032": "PROJCS[\"UTM Zone 32, Southern Hemisphere\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-50.9,-347.6,-231,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "5649": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",31500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5650": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",33500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5651": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",31500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5652": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",32500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5653": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",33500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5654": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",42.5],PARAMETER[\"central_meridian\",-72.5],PARAMETER[\"scale_factor\",0.999964286],PARAMETER[\"false_easting\",1640416.6667],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "5655": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",42.5],PARAMETER[\"central_meridian\",-72.5],PARAMETER[\"scale_factor\",0.999964286],PARAMETER[\"false_easting\",1640416.6667],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "5659": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500053],PARAMETER[\"false_northing\",-3999820],UNIT[\"Meter\",1]]", "5663": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5664": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[26,-121,-78,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",2500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5665": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[26,-121,-78,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5666": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5667": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",12],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",4500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5668": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",12],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",4500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5669": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5670": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5671": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",12],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",4500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5672": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5673": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[26,-121,-78,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5674": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[26,-121,-78,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",12],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",4500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5675": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[26,-121,-78,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5676": "PROJCS[\"unnamed\",GEOGCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[606,23,413,0,0,0,0],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4314\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",6],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",2500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5677": "PROJCS[\"unnamed\",GEOGCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[606,23,413,0,0,0,0],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4314\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5678": "PROJCS[\"unnamed\",GEOGCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[606,23,413,0,0,0,0],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4314\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",12],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",4500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5679": "PROJCS[\"unnamed\",GEOGCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[606,23,413,0,0,0,0],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4314\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5680": "PROJCS[\"unnamed\",GEOGCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[606,23,413,0,0,0,0],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4314\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",3],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",1500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5681": "GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", "5682": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",6],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",2500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5683": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5684": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",12],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",4500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5685": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29377": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841 (Namibia)\",DATUM[\"unknown\",SPHEROID[\"bess_nam\",6377483.865,299.1528128],TOWGS84[616,97,-251,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-22],PARAMETER[\"central_meridian\",17],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"unknown\",1.0000135965]]", "20064": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26891": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-82.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5700": "PROJCS[\"UTM Zone 1, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-177],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20065": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26892": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22091": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-50.9,-347.6,-231,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",11.5],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "22092": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-50.9,-347.6,-231,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",12],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20066": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26893": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-84],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20067": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26894": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-87],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20068": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26895": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-90],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26825": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",43.66666666666666],PARAMETER[\"central_meridian\",-68.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20069": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26896": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-93],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20070": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26897": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-96],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20071": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",63],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26898": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-53],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20072": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",69],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26899": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-56],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26860": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",43],PARAMETER[\"standard_parallel_2\",40],PARAMETER[\"latitude_of_origin\",39.83333333333334],PARAMETER[\"central_meridian\",-100],PARAMETER[\"false_easting\",1640416.6667],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "29379": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841 (Namibia)\",DATUM[\"unknown\",SPHEROID[\"bess_nam\",6377483.865,299.1528128],TOWGS84[616,97,-251,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-22],PARAMETER[\"central_meridian\",19],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"unknown\",1.0000135965]]", "20073": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20074": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26901": "PROJCS[\"UTM Zone 1, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-177],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20075": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "30340": "PROJCS[\"UTM Zone 40, Northern Hemisphere\",GEOGCS[\"Helmert 1906\",DATUM[\"unknown\",SPHEROID[\"helmert\",6378200,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26902": "PROJCS[\"UTM Zone 2, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-171],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20076": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26903": "PROJCS[\"UTM Zone 3, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20077": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26904": "PROJCS[\"UTM Zone 4, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-159],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20078": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26905": "PROJCS[\"UTM Zone 5, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21097": "PROJCS[\"UTM Zone 37, Northern Hemisphere\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-160,-6,-302,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20079": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22172": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",2500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22173": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-66],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22174": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",4500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22175": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-60],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22176": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20080": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26907": "PROJCS[\"UTM Zone 7, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22181": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-72],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",1500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22182": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",2500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20081": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22184": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",4500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22185": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-60],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22186": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20006": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20082": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22191": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-148,136,90,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-72],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",1500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22192": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-148,136,90,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",2500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22193": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-148,136,90,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-66],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22194": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-148,136,90,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",4500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20083": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22196": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-148,136,90,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22197": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-148,136,90,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-54],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",7500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20084": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",141],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26911": "PROJCS[\"UTM Zone 11, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20085": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",147],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5825": "PROJCS[\"unnamed\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-35.31773627777778],PARAMETER[\"central_meridian\",149.0092948305555],PARAMETER[\"scale_factor\",1.000086],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",600000],UNIT[\"Meter\",1]]", "20086": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",153],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26913": "PROJCS[\"UTM Zone 13, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20087": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",159],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5836": "PROJCS[\"UTM Zone 37, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5837": "PROJCS[\"UTM Zone 40, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5839": "PROJCS[\"UTM Zone 17, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20088": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",165],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5842": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",12],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26915": "PROJCS[\"UTM Zone 15, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5844": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",30],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "21454": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20089": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",171],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26916": "PROJCS[\"UTM Zone 16, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22234": "PROJCS[\"UTM Zone 34, Southern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.145,293.4663076999908],TOWGS84[-136,-108,-292,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "21455": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22236": "PROJCS[\"UTM Zone 36, Southern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.145,293.4663076999908],TOWGS84[-136,-108,-292,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20090": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",177],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26917": "PROJCS[\"UTM Zone 17, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21456": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[15.8,-154.4,-82.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "5858": "PROJCS[\"UTM Zone 22, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20091": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-177],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26918": "PROJCS[\"UTM Zone 18, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20092": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-171],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26919": "PROJCS[\"UTM Zone 19, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26912": "PROJCS[\"UTM Zone 12, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29383": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841 (Namibia)\",DATUM[\"unknown\",SPHEROID[\"bess_nam\",6377483.865,299.1528128],TOWGS84[616,97,-251,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-22],PARAMETER[\"central_meridian\",23],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"unknown\",1.0000135965]]", "26920": "PROJCS[\"UTM Zone 20, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32043": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",39.01666666666667],PARAMETER[\"standard_parallel_2\",40.65],PARAMETER[\"latitude_of_origin\",38.33333333333334],PARAMETER[\"central_meridian\",-111.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "26826": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",42.83333333333334],PARAMETER[\"central_meridian\",-70.16666666666667],PARAMETER[\"scale_factor\",0.999966667],PARAMETER[\"false_easting\",900000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26921": "PROJCS[\"UTM Zone 21, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26922": "PROJCS[\"UTM Zone 22, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32423": "PROJCS[\"UTM Zone 23, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22275": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.145,293.4663076999908],TOWGS84[-136,-108,-292,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22277": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.145,293.4663076999908],TOWGS84[-136,-108,-292,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",17],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22279": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.145,293.4663076999908],TOWGS84[-136,-108,-292,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",19],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22281": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.145,293.4663076999908],TOWGS84[-136,-108,-292,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22283": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.145,293.4663076999908],TOWGS84[-136,-108,-292,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",23],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22285": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.145,293.4663076999908],TOWGS84[-136,-108,-292,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",25],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22287": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.145,293.4663076999908],TOWGS84[-136,-108,-292,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22289": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.145,293.4663076999908],TOWGS84[-136,-108,-292,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",29],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22291": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.145,293.4663076999908],TOWGS84[-136,-108,-292,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",31],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22293": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.145,293.4663076999908],TOWGS84[-136,-108,-292,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "30491": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-73,-247,227,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",36],PARAMETER[\"central_meridian\",2.7],PARAMETER[\"scale_factor\",0.999625544],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",300000],UNIT[\"Meter\",1]]", "30492": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-73,-247,227,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",33.3],PARAMETER[\"central_meridian\",2.7],PARAMETER[\"scale_factor\",0.999625769],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",300000],UNIT[\"Meter\",1]]", "30493": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",36],PARAMETER[\"central_meridian\",2.7],PARAMETER[\"scale_factor\",0.999625544],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",300000],UNIT[\"Meter\",1]]", "30494": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",33.3],PARAMETER[\"central_meridian\",2.7],PARAMETER[\"scale_factor\",0.999625769],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",300000],UNIT[\"Meter\",1]]", "26929": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",30.5],PARAMETER[\"central_meridian\",-85.83333333333333],PARAMETER[\"scale_factor\",0.99996],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29385": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841 (Namibia)\",DATUM[\"unknown\",SPHEROID[\"bess_nam\",6377483.865,299.1528128],TOWGS84[616,97,-251,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-22],PARAMETER[\"central_meridian\",25],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"unknown\",1.0000135965]]", "26930": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",30],PARAMETER[\"central_meridian\",-87.5],PARAMETER[\"scale_factor\",0.999933333],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26931": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"latitude_of_center\",57],PARAMETER[\"longitude_of_center\",-133.6666666666667],PARAMETER[\"azimuth\",323.1301023611111],PARAMETER[\"rectified_grid_angle\",0],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",5000000],PARAMETER[\"false_northing\",-5000000],UNIT[\"Meter\",1]]", "26932": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",54],PARAMETER[\"central_meridian\",-142],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22332": "PROJCS[\"UTM Zone 32, Northern Hemisphere\",GEOGCS[\"Carthage\",DATUM[\"Carthage\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-263,6,431,0,0,0,0],AUTHORITY[\"EPSG\",\"6223\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4223\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26933": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",54],PARAMETER[\"central_meridian\",-146],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20007": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",7500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26934": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",54],PARAMETER[\"central_meridian\",-150],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26935": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",54],PARAMETER[\"central_meridian\",-154],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29118": "PROJCS[\"UTM Zone 18, Northern Hemisphere\",GEOGCS[\"GRS 67(IUGG 1967)\",DATUM[\"unknown\",SPHEROID[\"GRS67\",6378160,298.247167427],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26936": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",54],PARAMETER[\"central_meridian\",-158],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26937": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",54],PARAMETER[\"central_meridian\",-162],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26938": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",54],PARAMETER[\"central_meridian\",-166],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26939": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",54],PARAMETER[\"central_meridian\",-170],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26940": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",53.83333333333334],PARAMETER[\"standard_parallel_2\",51.83333333333334],PARAMETER[\"latitude_of_origin\",51],PARAMETER[\"central_meridian\",-176],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26941": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.66666666666666],PARAMETER[\"standard_parallel_2\",40],PARAMETER[\"latitude_of_origin\",39.33333333333334],PARAMETER[\"central_meridian\",-122],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "26942": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",39.83333333333334],PARAMETER[\"standard_parallel_2\",38.33333333333334],PARAMETER[\"latitude_of_origin\",37.66666666666666],PARAMETER[\"central_meridian\",-122],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "22391": "PROJCS[\"unnamed\",GEOGCS[\"Carthage\",DATUM[\"Carthage\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-263,6,431,0,0,0,0],AUTHORITY[\"EPSG\",\"6223\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4223\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",36],PARAMETER[\"central_meridian\",9.9],PARAMETER[\"scale_factor\",0.999625544],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",300000],UNIT[\"Meter\",1]]", "22392": "PROJCS[\"unnamed\",GEOGCS[\"Carthage\",DATUM[\"Carthage\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-263,6,431,0,0,0,0],AUTHORITY[\"EPSG\",\"6223\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4223\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",33.3],PARAMETER[\"central_meridian\",9.9],PARAMETER[\"scale_factor\",0.999625769],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",300000],UNIT[\"Meter\",1]]", "26943": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.43333333333333],PARAMETER[\"standard_parallel_2\",37.06666666666667],PARAMETER[\"latitude_of_origin\",36.5],PARAMETER[\"central_meridian\",-120.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "26944": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",37.25],PARAMETER[\"standard_parallel_2\",36],PARAMETER[\"latitude_of_origin\",35.33333333333334],PARAMETER[\"central_meridian\",-119],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "26945": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",35.46666666666667],PARAMETER[\"standard_parallel_2\",34.03333333333333],PARAMETER[\"latitude_of_origin\",33.5],PARAMETER[\"central_meridian\",-118],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "26946": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",33.88333333333333],PARAMETER[\"standard_parallel_2\",32.78333333333333],PARAMETER[\"latitude_of_origin\",32.16666666666666],PARAMETER[\"central_meridian\",-116.25],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "28191": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378300.789,293.4663155389802],TOWGS84[-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Cassini_Soldner\"],PARAMETER[\"latitude_of_origin\",31.73409694444445],PARAMETER[\"central_meridian\",35.21208055555556],PARAMETER[\"false_easting\",170251.555],PARAMETER[\"false_northing\",126867.909],UNIT[\"Meter\",1]]", "32662": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Equirectangular\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",0],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26948": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",31],PARAMETER[\"central_meridian\",-110.1666666666667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",213360],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26949": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",31],PARAMETER[\"central_meridian\",-111.9166666666667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",213360],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26950": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",31],PARAMETER[\"central_meridian\",-113.75],PARAMETER[\"scale_factor\",0.999933333],PARAMETER[\"false_easting\",213360],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26951": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",36.23333333333333],PARAMETER[\"standard_parallel_2\",34.93333333333333],PARAMETER[\"latitude_of_origin\",34.33333333333334],PARAMETER[\"central_meridian\",-92],PARAMETER[\"false_easting\",400000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26952": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",34.76666666666667],PARAMETER[\"standard_parallel_2\",33.3],PARAMETER[\"latitude_of_origin\",32.66666666666666],PARAMETER[\"central_meridian\",-92],PARAMETER[\"false_easting\",400000],PARAMETER[\"false_northing\",400000],UNIT[\"Meter\",1]]", "26953": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.78333333333333],PARAMETER[\"standard_parallel_2\",39.71666666666667],PARAMETER[\"latitude_of_origin\",39.33333333333334],PARAMETER[\"central_meridian\",-105.5],PARAMETER[\"false_easting\",914401.8289],PARAMETER[\"false_northing\",304800.6096],UNIT[\"Meter\",1]]", "26954": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",39.75],PARAMETER[\"standard_parallel_2\",38.45],PARAMETER[\"latitude_of_origin\",37.83333333333334],PARAMETER[\"central_meridian\",-105.5],PARAMETER[\"false_easting\",914401.8289],PARAMETER[\"false_northing\",304800.6096],UNIT[\"Meter\",1]]", "26955": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.43333333333333],PARAMETER[\"standard_parallel_2\",37.23333333333333],PARAMETER[\"latitude_of_origin\",36.66666666666666],PARAMETER[\"central_meridian\",-105.5],PARAMETER[\"false_easting\",914401.8289],PARAMETER[\"false_northing\",304800.6096],UNIT[\"Meter\",1]]", "32417": "PROJCS[\"UTM Zone 17, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20934": "PROJCS[\"UTM Zone 34, Southern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.145,293.4663076999908],TOWGS84[-143,-90,-294,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26956": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.86666666666667],PARAMETER[\"standard_parallel_2\",41.2],PARAMETER[\"latitude_of_origin\",40.83333333333334],PARAMETER[\"central_meridian\",-72.75],PARAMETER[\"false_easting\",304800.6096],PARAMETER[\"false_northing\",152400.3048],UNIT[\"Meter\",1]]", "26957": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",-75.41666666666667],PARAMETER[\"scale_factor\",0.999995],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26958": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",24.33333333333333],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.999941177],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20008": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",8500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26959": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",24.33333333333333],PARAMETER[\"central_meridian\",-82],PARAMETER[\"scale_factor\",0.999941177],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26960": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",30.75],PARAMETER[\"standard_parallel_2\",29.58333333333333],PARAMETER[\"latitude_of_origin\",29],PARAMETER[\"central_meridian\",-84.5],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20935": "PROJCS[\"UTM Zone 35, Southern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.145,293.4663076999908],TOWGS84[-143,-90,-294,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26961": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",18.83333333333333],PARAMETER[\"central_meridian\",-155.5],PARAMETER[\"scale_factor\",0.999966667],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21500": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297]],PRIMEM[\"Brussels\",4.3679750000112],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",49.83333333333334],PARAMETER[\"standard_parallel_2\",51.16666666666666],PARAMETER[\"latitude_of_origin\",90],PARAMETER[\"central_meridian\",0],PARAMETER[\"false_easting\",150000],PARAMETER[\"false_northing\",5400000],UNIT[\"Meter\",1]]", "20135": "PROJCS[\"UTM Zone 35, Northern Hemisphere\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-166,-15,204,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26962": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",20.33333333333333],PARAMETER[\"central_meridian\",-156.6666666666667],PARAMETER[\"scale_factor\",0.999966667],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20136": "PROJCS[\"UTM Zone 36, Northern Hemisphere\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-166,-15,204,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26963": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",21.16666666666667],PARAMETER[\"central_meridian\",-158],PARAMETER[\"scale_factor\",0.99999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29381": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841 (Namibia)\",DATUM[\"unknown\",SPHEROID[\"bess_nam\",6377483.865,299.1528128],TOWGS84[616,97,-251,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-22],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"unknown\",1.0000135965]]", "29119": "PROJCS[\"UTM Zone 19, Northern Hemisphere\",GEOGCS[\"GRS 67(IUGG 1967)\",DATUM[\"unknown\",SPHEROID[\"GRS67\",6378160,298.247167427],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20137": "PROJCS[\"UTM Zone 37, Northern Hemisphere\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-166,-15,204,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22521": "PROJCS[\"UTM Zone 21, Southern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-206,172,-6,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "22522": "PROJCS[\"UTM Zone 22, Southern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-206,172,-6,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "22523": "PROJCS[\"UTM Zone 23, Southern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-206,172,-6,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "22524": "PROJCS[\"UTM Zone 24, Southern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-206,172,-6,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20138": "PROJCS[\"UTM Zone 38, Northern Hemisphere\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-166,-15,204,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26965": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",21.66666666666667],PARAMETER[\"central_meridian\",-160.1666666666667],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20936": "PROJCS[\"UTM Zone 36, Southern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.145,293.4663076999908],TOWGS84[-143,-90,-294,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26966": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",30],PARAMETER[\"central_meridian\",-82.16666666666667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "30729": "PROJCS[\"UTM Zone 29, Northern Hemisphere\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "30730": "PROJCS[\"UTM Zone 30, Northern Hemisphere\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26967": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",30],PARAMETER[\"central_meridian\",-84.16666666666667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",700000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "30732": "PROJCS[\"UTM Zone 32, Northern Hemisphere\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26968": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",41.66666666666666],PARAMETER[\"central_meridian\",-112.1666666666667],PARAMETER[\"scale_factor\",0.999947368],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29120": "PROJCS[\"UTM Zone 20, Northern Hemisphere\",GEOGCS[\"GRS 67(IUGG 1967)\",DATUM[\"unknown\",SPHEROID[\"GRS67\",6378160,298.247167427],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26969": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",41.66666666666666],PARAMETER[\"central_meridian\",-114],PARAMETER[\"scale_factor\",0.999947368],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29700": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-189,-242,-91,0,0,0,0]],PRIMEM[\"Paris\",2.3372291666985],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"latitude_of_center\",-18.9],PARAMETER[\"longitude_of_center\",44.1],PARAMETER[\"azimuth\",18.9],PARAMETER[\"rectified_grid_angle\",0],PARAMETER[\"scale_factor\",0.9995],PARAMETER[\"false_easting\",400000],PARAMETER[\"false_northing\",800000],UNIT[\"Meter\",1]]", "26970": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",41.66666666666666],PARAMETER[\"central_meridian\",-115.75],PARAMETER[\"scale_factor\",0.999933333],PARAMETER[\"false_easting\",800000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27211": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-40.24194713888889],PARAMETER[\"central_meridian\",175.4880996111111],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "26971": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36.66666666666666],PARAMETER[\"central_meridian\",-88.33333333333333],PARAMETER[\"scale_factor\",0.999975],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29702": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-189,-242,-91,0,0,0,0]],PRIMEM[\"Paris\",2.3372291666985],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"latitude_of_center\",-18.9],PARAMETER[\"longitude_of_center\",44.1],PARAMETER[\"azimuth\",18.9],PARAMETER[\"rectified_grid_angle\",0],PARAMETER[\"scale_factor\",0.9995],PARAMETER[\"false_easting\",400000],PARAMETER[\"false_northing\",800000],UNIT[\"Meter\",1]]", "26972": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36.66666666666666],PARAMETER[\"central_meridian\",-90.16666666666667],PARAMETER[\"scale_factor\",0.999941177],PARAMETER[\"false_easting\",700000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26973": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",37.5],PARAMETER[\"central_meridian\",-85.66666666666667],PARAMETER[\"scale_factor\",0.999966667],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",250000],UNIT[\"Meter\",1]]", "29121": "PROJCS[\"UTM Zone 21, Northern Hemisphere\",GEOGCS[\"GRS 67(IUGG 1967)\",DATUM[\"unknown\",SPHEROID[\"GRS67\",6378160,298.247167427],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26974": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",37.5],PARAMETER[\"central_meridian\",-87.08333333333333],PARAMETER[\"scale_factor\",0.999966667],PARAMETER[\"false_easting\",900000],PARAMETER[\"false_northing\",250000],UNIT[\"Meter\",1]]", "26975": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",43.26666666666667],PARAMETER[\"standard_parallel_2\",42.06666666666667],PARAMETER[\"latitude_of_origin\",41.5],PARAMETER[\"central_meridian\",-93.5],PARAMETER[\"false_easting\",1500000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "32122": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.7],PARAMETER[\"standard_parallel_2\",40.43333333333333],PARAMETER[\"latitude_of_origin\",39.66666666666666],PARAMETER[\"central_meridian\",-82.5],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26976": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.78333333333333],PARAMETER[\"standard_parallel_2\",40.61666666666667],PARAMETER[\"latitude_of_origin\",40],PARAMETER[\"central_meridian\",-93.5],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26977": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",39.78333333333333],PARAMETER[\"standard_parallel_2\",38.71666666666667],PARAMETER[\"latitude_of_origin\",38.33333333333334],PARAMETER[\"central_meridian\",-98],PARAMETER[\"false_easting\",400000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "30792": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",33.3],PARAMETER[\"central_meridian\",2.7],PARAMETER[\"scale_factor\",0.999625769],PARAMETER[\"false_easting\",500135],PARAMETER[\"false_northing\",300090],UNIT[\"Meter\",1]]", "26978": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.56666666666667],PARAMETER[\"standard_parallel_2\",37.26666666666667],PARAMETER[\"latitude_of_origin\",36.66666666666666],PARAMETER[\"central_meridian\",-98.5],PARAMETER[\"false_easting\",400000],PARAMETER[\"false_northing\",400000],UNIT[\"Meter\",1]]", "29122": "PROJCS[\"UTM Zone 22, Northern Hemisphere\",GEOGCS[\"GRS 67(IUGG 1967)\",DATUM[\"unknown\",SPHEROID[\"GRS67\",6378160,298.247167427],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26979": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",37.96666666666667],PARAMETER[\"standard_parallel_2\",37.96666666666667],PARAMETER[\"latitude_of_origin\",37.5],PARAMETER[\"central_meridian\",-84.25],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26980": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",37.93333333333333],PARAMETER[\"standard_parallel_2\",36.73333333333333],PARAMETER[\"latitude_of_origin\",36.33333333333334],PARAMETER[\"central_meridian\",-85.75],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "21100": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[-377,681,-50,0,0,0,0]],PRIMEM[\"Jakarta\",106.8077194445078],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Mercator_1SP\"],PARAMETER[\"central_meridian\",110],PARAMETER[\"scale_factor\",0.997],PARAMETER[\"false_easting\",3900000],PARAMETER[\"false_northing\",900000],UNIT[\"Meter\",1]]", "26981": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",32.66666666666666],PARAMETER[\"standard_parallel_2\",31.16666666666667],PARAMETER[\"latitude_of_origin\",30.5],PARAMETER[\"central_meridian\",-92.5],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26914": "PROJCS[\"UTM Zone 14, Northern Hemisphere\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26982": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",30.7],PARAMETER[\"standard_parallel_2\",29.3],PARAMETER[\"latitude_of_origin\",28.5],PARAMETER[\"central_meridian\",-91.33333333333333],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28348": "PROJCS[\"UTM Zone 48, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26983": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",43.66666666666666],PARAMETER[\"central_meridian\",-68.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20009": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",9500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28349": "PROJCS[\"UTM Zone 49, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26984": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",42.83333333333334],PARAMETER[\"central_meridian\",-70.16666666666667],PARAMETER[\"scale_factor\",0.999966667],PARAMETER[\"false_easting\",900000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28350": "PROJCS[\"UTM Zone 50, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26985": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",39.45],PARAMETER[\"standard_parallel_2\",38.3],PARAMETER[\"latitude_of_origin\",37.66666666666666],PARAMETER[\"central_meridian\",-77],PARAMETER[\"false_easting\",400000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28351": "PROJCS[\"UTM Zone 51, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26986": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",42.68333333333333],PARAMETER[\"standard_parallel_2\",41.71666666666667],PARAMETER[\"latitude_of_origin\",41],PARAMETER[\"central_meridian\",-71.5],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",750000],UNIT[\"Meter\",1]]", "28352": "PROJCS[\"UTM Zone 52, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26987": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.48333333333333],PARAMETER[\"standard_parallel_2\",41.28333333333333],PARAMETER[\"latitude_of_origin\",41],PARAMETER[\"central_meridian\",-70.5],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28353": "PROJCS[\"UTM Zone 53, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26988": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.08333333333334],PARAMETER[\"standard_parallel_2\",45.48333333333333],PARAMETER[\"latitude_of_origin\",44.78333333333333],PARAMETER[\"central_meridian\",-87],PARAMETER[\"false_easting\",8000000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28354": "PROJCS[\"UTM Zone 54, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26989": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.7],PARAMETER[\"standard_parallel_2\",44.18333333333333],PARAMETER[\"latitude_of_origin\",43.31666666666667],PARAMETER[\"central_meridian\",-84.36666666666666],PARAMETER[\"false_easting\",6000000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28355": "PROJCS[\"UTM Zone 55, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26990": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",43.66666666666666],PARAMETER[\"standard_parallel_2\",42.1],PARAMETER[\"latitude_of_origin\",41.5],PARAMETER[\"central_meridian\",-84.36666666666666],PARAMETER[\"false_easting\",4000000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28356": "PROJCS[\"UTM Zone 56, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26991": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",48.63333333333333],PARAMETER[\"standard_parallel_2\",47.03333333333333],PARAMETER[\"latitude_of_origin\",46.5],PARAMETER[\"central_meridian\",-93.1],PARAMETER[\"false_easting\",800000],PARAMETER[\"false_northing\",100000],UNIT[\"Meter\",1]]", "28357": "PROJCS[\"UTM Zone 57, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",159],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26992": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.05],PARAMETER[\"standard_parallel_2\",45.61666666666667],PARAMETER[\"latitude_of_origin\",45],PARAMETER[\"central_meridian\",-94.25],PARAMETER[\"false_easting\",800000],PARAMETER[\"false_northing\",100000],UNIT[\"Meter\",1]]", "28358": "PROJCS[\"UTM Zone 58, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26993": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.21666666666667],PARAMETER[\"standard_parallel_2\",43.78333333333333],PARAMETER[\"latitude_of_origin\",43],PARAMETER[\"central_meridian\",-94],PARAMETER[\"false_easting\",800000],PARAMETER[\"false_northing\",100000],UNIT[\"Meter\",1]]", "26708": "PROJCS[\"UTM Zone 8, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22700": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-190.421,8.532,238.69,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",34.65],PARAMETER[\"central_meridian\",37.35],PARAMETER[\"scale_factor\",0.9996256],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",300000],UNIT[\"Meter\",1]]", "26994": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",29.5],PARAMETER[\"central_meridian\",-88.83333333333333],PARAMETER[\"scale_factor\",0.99995],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32039": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",30.11666666666667],PARAMETER[\"standard_parallel_2\",31.88333333333333],PARAMETER[\"latitude_of_origin\",29.66666666666667],PARAMETER[\"central_meridian\",-100.3333333333333],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "26995": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",29.5],PARAMETER[\"central_meridian\",-90.33333333333333],PARAMETER[\"scale_factor\",0.99995],PARAMETER[\"false_easting\",700000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26996": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",35.83333333333334],PARAMETER[\"central_meridian\",-90.5],PARAMETER[\"scale_factor\",0.999933333],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26997": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",35.83333333333334],PARAMETER[\"central_meridian\",-92.5],PARAMETER[\"scale_factor\",0.999933333],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26998": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36.16666666666666],PARAMETER[\"central_meridian\",-94.5],PARAMETER[\"scale_factor\",0.999941177],PARAMETER[\"false_easting\",850000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22770": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-190.421,8.532,238.69,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",34.65],PARAMETER[\"central_meridian\",37.35],PARAMETER[\"scale_factor\",0.9996256],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",300000],UNIT[\"Meter\",1]]", "22780": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-190.421,8.532,238.69,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Oblique_Stereographic\"],PARAMETER[\"latitude_of_origin\",34.2],PARAMETER[\"central_meridian\",39.15],PARAMETER[\"scale_factor\",0.9995341],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20010": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[24.47,-130.89,-81.56,-0,-0,0.13,-0.22]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",10500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "22832": "PROJCS[\"UTM Zone 32, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31028": "PROJCS[\"UTM Zone 28, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32074": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32013": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",31],PARAMETER[\"central_meridian\",-106.25],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "30800": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15.80827777777778],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",1500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31121": "PROJCS[\"UTM Zone 21, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-265,120,-358,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28402": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",2500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27037": "PROJCS[\"UTM Zone 37, Northern Hemisphere\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-242.2,-144.9,370.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31154": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-265,120,-358,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-54],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28403": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27038": "PROJCS[\"UTM Zone 38, Northern Hemisphere\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-242.2,-144.9,370.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28404": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",4500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27039": "PROJCS[\"UTM Zone 39, Northern Hemisphere\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-242.2,-144.9,370.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28405": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27040": "PROJCS[\"UTM Zone 40, Northern Hemisphere\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-242.2,-144.9,370.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31170": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-265,120,-358,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-55.68333333333333],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31171": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-265,120,-358,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-55.68333333333333],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32503": "PROJCS[\"UTM Zone 3, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "22991": "PROJCS[\"unnamed\",GEOGCS[\"Helmert 1906\",DATUM[\"unknown\",SPHEROID[\"helmert\",6378200,298.3],TOWGS84[-130,110,-13,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",30],PARAMETER[\"central_meridian\",35],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",1100000],UNIT[\"Meter\",1]]", "22992": "PROJCS[\"unnamed\",GEOGCS[\"Helmert 1906\",DATUM[\"unknown\",SPHEROID[\"helmert\",6378200,298.3],TOWGS84[-130,110,-13,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",30],PARAMETER[\"central_meridian\",31],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",615000],PARAMETER[\"false_northing\",810000],UNIT[\"Meter\",1]]", "22993": "PROJCS[\"unnamed\",GEOGCS[\"Helmert 1906\",DATUM[\"unknown\",SPHEROID[\"helmert\",6378200,298.3],TOWGS84[-130,110,-13,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",30],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",700000],PARAMETER[\"false_northing\",200000],UNIT[\"Meter\",1]]", "22994": "PROJCS[\"unnamed\",GEOGCS[\"Helmert 1906\",DATUM[\"unknown\",SPHEROID[\"helmert\",6378200,298.3],TOWGS84[-130,110,-13,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",30],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",700000],PARAMETER[\"false_northing\",1200000],UNIT[\"Meter\",1]]", "24313": "PROJCS[\"UTM Zone 43, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377301.243,300.8017254999889],TOWGS84[283,682,231,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28410": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",10500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28411": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",63],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",11500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28412": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",69],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",12500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28413": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",13500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23028": "PROJCS[\"UTM Zone 28, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-87,-98,-121,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23029": "PROJCS[\"UTM Zone 29, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-87,-98,-121,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23030": "PROJCS[\"UTM Zone 30, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-87,-98,-121,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23031": "PROJCS[\"UTM Zone 31, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-87,-98,-121,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23032": "PROJCS[\"UTM Zone 32, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-87,-98,-121,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23033": "PROJCS[\"UTM Zone 33, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-87,-98,-121,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23034": "PROJCS[\"UTM Zone 34, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-87,-98,-121,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23035": "PROJCS[\"UTM Zone 35, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-87,-98,-121,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23036": "PROJCS[\"UTM Zone 36, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-87,-98,-121,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23037": "PROJCS[\"UTM Zone 37, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-87,-98,-121,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23038": "PROJCS[\"UTM Zone 38, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-87,-98,-121,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28416": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",16500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28417": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",17500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28418": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",18500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28419": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",19500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31252": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Ferro\",-17.666666666668],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",31],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",-5000000],UNIT[\"Meter\",1]]", "31253": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Ferro\",-17.666666666668],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",34],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",-5000000],UNIT[\"Meter\",1]]", "31254": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",10.33333333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",-5000000],UNIT[\"Meter\",1]]", "31255": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",13.33333333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",-5000000],UNIT[\"Meter\",1]]", "31256": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",16.33333333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",-5000000],UNIT[\"Meter\",1]]", "28420": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",20500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31258": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",13.33333333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",450000],PARAMETER[\"false_northing\",-5000000],UNIT[\"Meter\",1]]", "31259": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",16.33333333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",750000],PARAMETER[\"false_northing\",-5000000],UNIT[\"Meter\",1]]", "32138": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",33.96666666666667],PARAMETER[\"standard_parallel_2\",32.13333333333333],PARAMETER[\"latitude_of_origin\",31.66666666666667],PARAMETER[\"central_meridian\",-98.5],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",2000000],UNIT[\"Meter\",1]]", "28421": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",21500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31265": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31266": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",18],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31267": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",7500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31268": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",24],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",8500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28422": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",22500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28423": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",23500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31276": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",18],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",6500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31277": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",7500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31278": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",7500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31279": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",24],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",8500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28424": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",141],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",24500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23090": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-87,-98,-121,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",0],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31283": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Ferro\",-17.666666666668],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",34],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31284": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",10.33333333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",150000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31285": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",13.33333333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",450000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31286": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",16.33333333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",750000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23095": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-87,-98,-121,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",5],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31288": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Ferro\",-17.666666666668],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",28],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",150000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31289": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Ferro\",-17.666666666668],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",31],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",450000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31290": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Ferro\",-17.666666666668],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",34],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",750000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31291": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Ferro\",-17.666666666668],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",28],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31292": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Ferro\",-17.666666666668],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",31],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28426": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",153],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",26500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31294": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",10.33333333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",150000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31295": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",13.33333333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",450000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31296": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",16.33333333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",750000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31297": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",49],PARAMETER[\"standard_parallel_2\",46],PARAMETER[\"latitude_of_origin\",47.5],PARAMETER[\"central_meridian\",13.33333333333333],PARAMETER[\"false_easting\",400000],PARAMETER[\"false_northing\",400000],UNIT[\"Meter\",1]]", "28427": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",159],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",27500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31300": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,-1.2747]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",49.83333333333334],PARAMETER[\"standard_parallel_2\",51.16666666666666],PARAMETER[\"latitude_of_origin\",90],PARAMETER[\"central_meridian\",4.356939722222222],PARAMETER[\"false_easting\",150000.01256],PARAMETER[\"false_northing\",5400088.4378],UNIT[\"Meter\",1]]", "28428": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",165],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",28500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28430": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",177],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",30500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32140": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",30.28333333333333],PARAMETER[\"standard_parallel_2\",28.38333333333333],PARAMETER[\"latitude_of_origin\",27.83333333333333],PARAMETER[\"central_meridian\",-99],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",4000000],UNIT[\"Meter\",1]]", "22235": "PROJCS[\"UTM Zone 35, Southern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.145,293.4663076999908],TOWGS84[-136,-108,-292,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32529": "PROJCS[\"UTM Zone 29, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32530": "PROJCS[\"UTM Zone 30, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26832": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.21666666666667],PARAMETER[\"standard_parallel_2\",43.78333333333333],PARAMETER[\"latitude_of_origin\",43],PARAMETER[\"central_meridian\",-94],PARAMETER[\"false_easting\",800000.0000101601],PARAMETER[\"false_northing\",99999.99998984],UNIT[\"Meter\",1]]", "32534": "PROJCS[\"UTM Zone 34, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "31370": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,-1.2747]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",51.16666723333333],PARAMETER[\"standard_parallel_2\",49.8333339],PARAMETER[\"latitude_of_origin\",90],PARAMETER[\"central_meridian\",4.367486666666666],PARAMETER[\"false_easting\",150000.013],PARAMETER[\"false_northing\",5400088.438],UNIT[\"Meter\",1]]", "32535": "PROJCS[\"UTM Zone 35, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "29371": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841 (Namibia)\",DATUM[\"unknown\",SPHEROID[\"bess_nam\",6377483.865,299.1528128],TOWGS84[616,97,-251,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-22],PARAMETER[\"central_meridian\",11],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"unknown\",1.0000135965]]", "32536": "PROJCS[\"UTM Zone 36, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32537": "PROJCS[\"UTM Zone 37, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32538": "PROJCS[\"UTM Zone 38, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "22195": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-148,136,90,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",-60],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32539": "PROJCS[\"UTM Zone 39, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32541": "PROJCS[\"UTM Zone 41, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20257": "PROJCS[\"UTM Zone 57, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",159],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23240": "PROJCS[\"UTM Zone 40, Northern Hemisphere\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-346,-1,224,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20258": "PROJCS[\"UTM Zone 58, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "31461": "PROJCS[\"unnamed\",GEOGCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[606,23,413,0,0,0,0],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4314\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",3],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",1500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31462": "PROJCS[\"unnamed\",GEOGCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[606,23,413,0,0,0,0],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4314\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",6],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",2500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31463": "PROJCS[\"unnamed\",GEOGCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[606,23,413,0,0,0,0],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4314\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31464": "PROJCS[\"unnamed\",GEOGCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[606,23,413,0,0,0,0],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4314\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",12],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",4500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31465": "PROJCS[\"unnamed\",GEOGCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[606,23,413,0,0,0,0],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4314\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31466": "PROJCS[\"unnamed\",GEOGCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[606,23,413,0,0,0,0],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4314\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",6],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",2500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31467": "PROJCS[\"unnamed\",GEOGCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[606,23,413,0,0,0,0],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4314\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31468": "PROJCS[\"unnamed\",GEOGCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[606,23,413,0,0,0,0],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4314\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",12],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",4500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31469": "PROJCS[\"unnamed\",GEOGCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[606,23,413,0,0,0,0],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4314\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32725": "PROJCS[\"UTM Zone 25, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "29179": "PROJCS[\"UTM Zone 19, Southern Hemisphere\",GEOGCS[\"GRS 67(IUGG 1967)\",DATUM[\"unknown\",SPHEROID[\"GRS67\",6378160,298.247167427],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "28465": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26964": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",21.83333333333333],PARAMETER[\"central_meridian\",-159.5],PARAMETER[\"scale_factor\",0.99999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31529": "PROJCS[\"UTM Zone 29, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-23,259,-9,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28466": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21897": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[307,304,-318,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",4.599047222222222],PARAMETER[\"central_meridian\",-74.08091666666667],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "28467": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28468": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28469": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26692": "PROJCS[\"UTM Zone 32, Southern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265],TOWGS84[-74,-130,42,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "28473": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28475": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31600": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[103.25,-100.4,-307.19,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Oblique_Stereographic\"],PARAMETER[\"latitude_of_origin\",45.9],PARAMETER[\"central_meridian\",25.39246588888889],PARAMETER[\"scale_factor\",0.9996667],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "31282": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Ferro\",-17.666666666668],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",31],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28481": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32344": "PROJCS[\"UTM Zone 44, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23433": "PROJCS[\"UTM Zone 33, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.2,293.4660212936265]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28482": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28483": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26709": "PROJCS[\"UTM Zone 9, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29849": "PROJCS[\"UTM Zone 49, Northern Hemisphere\",GEOGCS[\"Everest (Sabah & Sarawak)\",DATUM[\"unknown\",SPHEROID[\"evrstSS\",6377298.556,300.8017],TOWGS84[-679,669,-48,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32726": "PROJCS[\"UTM Zone 26, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "28484": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",141],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29850": "PROJCS[\"UTM Zone 50, Northern Hemisphere\",GEOGCS[\"Everest (Sabah & Sarawak)\",DATUM[\"unknown\",SPHEROID[\"evrstSS\",6377298.556,300.8017],TOWGS84[-679,669,-48,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28485": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",147],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27120": "PROJCS[\"UTM Zone 20, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-10,375,165,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26834": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.25],PARAMETER[\"standard_parallel_2\",39],PARAMETER[\"latitude_of_origin\",38.5],PARAMETER[\"central_meridian\",-79.5],PARAMETER[\"false_easting\",1968500],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28486": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",153],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28487": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",159],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "28488": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",165],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32152": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",46.76666666666667],PARAMETER[\"standard_parallel_2\",45.56666666666667],PARAMETER[\"latitude_of_origin\",45.16666666666666],PARAMETER[\"central_meridian\",-90],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32001": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",48.71666666666667],PARAMETER[\"standard_parallel_2\",47.85],PARAMETER[\"latitude_of_origin\",47],PARAMETER[\"central_meridian\",-109.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "31700": "PROJCS[\"unnamed\",GEOGCS[\"Krassovsky, 1942\",DATUM[\"unknown\",SPHEROID[\"krass\",6378245,298.3],TOWGS84[28,-121,-77,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Oblique_Stereographic\"],PARAMETER[\"latitude_of_origin\",46],PARAMETER[\"central_meridian\",25],PARAMETER[\"scale_factor\",0.99975],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",500000],UNIT[\"Meter\",1]]", "32426": "PROJCS[\"UTM Zone 26, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32601": "PROJCS[\"UTM Zone 1, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-177],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "30791": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1880 mod.\",DATUM[\"unknown\",SPHEROID[\"clrk80\",6378249.145,293.4663],TOWGS84[-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",36],PARAMETER[\"central_meridian\",2.7],PARAMETER[\"scale_factor\",0.999625544],PARAMETER[\"false_easting\",500135],PARAMETER[\"false_northing\",300090],UNIT[\"Meter\",1]]", "29871": "PROJCS[\"unnamed\",GEOGCS[\"Everest (Sabah & Sarawak)\",DATUM[\"unknown\",SPHEROID[\"evrstSS\",6377298.556,300.8017],TOWGS84[-679,669,-48,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"latitude_of_center\",4],PARAMETER[\"longitude_of_center\",115],PARAMETER[\"azimuth\",53.31582047222222],PARAMETER[\"rectified_grid_angle\",0],PARAMETER[\"scale_factor\",0.99984],PARAMETER[\"false_easting\",29352.4763],PARAMETER[\"false_northing\",22014.3572],UNIT[\"unknown\",20.11676512155263]]", "29872": "PROJCS[\"unnamed\",GEOGCS[\"Everest (Sabah & Sarawak)\",DATUM[\"unknown\",SPHEROID[\"evrstSS\",6377298.556,300.8017],TOWGS84[-679,669,-48,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"latitude_of_center\",4],PARAMETER[\"longitude_of_center\",115],PARAMETER[\"azimuth\",53.31582047222222],PARAMETER[\"rectified_grid_angle\",0],PARAMETER[\"scale_factor\",0.99984],PARAMETER[\"false_easting\",1937263.44],PARAMETER[\"false_northing\",1452947.58],UNIT[\"unknown\",0.3047994715386762]]", "26815": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",42.83333333333334],PARAMETER[\"central_meridian\",-70.16666666666667],PARAMETER[\"scale_factor\",0.999966667],PARAMETER[\"false_easting\",900000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29873": "PROJCS[\"unnamed\",GEOGCS[\"Everest (Sabah & Sarawak)\",DATUM[\"unknown\",SPHEROID[\"evrstSS\",6377298.556,300.8017],TOWGS84[-679,669,-48,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"latitude_of_center\",4],PARAMETER[\"longitude_of_center\",115],PARAMETER[\"azimuth\",53.31582047222222],PARAMETER[\"rectified_grid_angle\",0],PARAMETER[\"scale_factor\",0.99984],PARAMETER[\"false_easting\",590476.87],PARAMETER[\"false_northing\",442857.65],UNIT[\"Meter\",1]]", "31281": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Ferro\",-17.666666666668],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",28],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29181": "PROJCS[\"UTM Zone 21, Southern Hemisphere\",GEOGCS[\"GRS 67(IUGG 1967)\",DATUM[\"unknown\",SPHEROID[\"GRS67\",6378160,298.247167427],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26701": "PROJCS[\"UTM Zone 1, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-177],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32612": "PROJCS[\"UTM Zone 12, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31838": "PROJCS[\"UTM Zone 38, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[-3.2,-5.7,2.8,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31839": "PROJCS[\"UTM Zone 39, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[-3.2,-5.7,2.8,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31251": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Ferro\",-17.666666666668],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",28],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",-5000000],UNIT[\"Meter\",1]]", "26703": "PROJCS[\"UTM Zone 3, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23700": "PROJCS[\"unnamed\",GEOGCS[\"GRS 67(IUGG 1967)\",DATUM[\"unknown\",SPHEROID[\"GRS67\",6378160,298.247167427],TOWGS84[52.17,-71.82,-14.9,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"latitude_of_center\",47.14439372222222],PARAMETER[\"longitude_of_center\",19.04857177777778],PARAMETER[\"azimuth\",90],PARAMETER[\"rectified_grid_angle\",90],PARAMETER[\"scale_factor\",0.99993],PARAMETER[\"false_easting\",650000],PARAMETER[\"false_northing\",200000],UNIT[\"Meter\",1]]", "31257": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",10.33333333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",150000],PARAMETER[\"false_northing\",-5000000],UNIT[\"Meter\",1]]", "31900": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[-20.8,11.3,2.4,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",48],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31901": "PROJCS[\"unnamed\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[-20.8,11.3,2.4,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",48],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26704": "PROJCS[\"UTM Zone 4, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-159],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32165": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "26705": "PROJCS[\"UTM Zone 5, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29900": "PROJCS[\"unnamed\",GEOGCS[\"TM65\",DATUM[\"TM65\",SPHEROID[\"Airy Modified 1849\",6377340.189,299.3249646,AUTHORITY[\"EPSG\",\"7002\"]],TOWGS84[482.53,-130.596,564.557,-1.042,-0.214,-0.631,8.15],AUTHORITY[\"EPSG\",\"6299\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4299\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",53.5],PARAMETER[\"central_meridian\",-8],PARAMETER[\"scale_factor\",1.000035],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",250000],UNIT[\"Meter\",1]]", "32631": "PROJCS[\"UTM Zone 31, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32045": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",42.5],PARAMETER[\"central_meridian\",-72.5],PARAMETER[\"scale_factor\",0.999964286],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "29901": "PROJCS[\"unnamed\",GEOGCS[\"Airy 1830\",DATUM[\"unknown\",SPHEROID[\"airy\",6377563.396,299.3249753150316],TOWGS84[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",53.5],PARAMETER[\"central_meridian\",-8],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",250000],UNIT[\"Meter\",1]]", "31965": "PROJCS[\"UTM Zone 11, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31966": "PROJCS[\"UTM Zone 12, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31967": "PROJCS[\"UTM Zone 13, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31968": "PROJCS[\"UTM Zone 14, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31969": "PROJCS[\"UTM Zone 15, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31970": "PROJCS[\"UTM Zone 16, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31971": "PROJCS[\"UTM Zone 17, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26706": "PROJCS[\"UTM Zone 6, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31973": "PROJCS[\"UTM Zone 19, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31974": "PROJCS[\"UTM Zone 20, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31975": "PROJCS[\"UTM Zone 21, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31976": "PROJCS[\"UTM Zone 22, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31977": "PROJCS[\"UTM Zone 17, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "31978": "PROJCS[\"UTM Zone 18, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "31979": "PROJCS[\"UTM Zone 19, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "31980": "PROJCS[\"UTM Zone 20, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "31981": "PROJCS[\"UTM Zone 21, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "31982": "PROJCS[\"UTM Zone 22, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "31983": "PROJCS[\"UTM Zone 23, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "31984": "PROJCS[\"UTM Zone 24, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "31985": "PROJCS[\"UTM Zone 25, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "31986": "PROJCS[\"UTM Zone 17, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31987": "PROJCS[\"UTM Zone 18, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31988": "PROJCS[\"UTM Zone 19, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31989": "PROJCS[\"UTM Zone 20, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31990": "PROJCS[\"UTM Zone 21, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31991": "PROJCS[\"UTM Zone 22, Northern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31992": "PROJCS[\"UTM Zone 17, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "31993": "PROJCS[\"UTM Zone 18, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "31994": "PROJCS[\"UTM Zone 19, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "31995": "PROJCS[\"UTM Zone 20, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "31996": "PROJCS[\"UTM Zone 21, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "31997": "PROJCS[\"UTM Zone 22, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "31998": "PROJCS[\"UTM Zone 23, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "31999": "PROJCS[\"UTM Zone 24, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32000": "PROJCS[\"UTM Zone 25, Southern Hemisphere\",GEOGCS[\"GRS 1980(IUGG, 1980)\",DATUM[\"unknown\",SPHEROID[\"GRS80\",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20352": "PROJCS[\"UTM Zone 52, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-134,-48,149,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32002": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.88333333333333],PARAMETER[\"standard_parallel_2\",46.45],PARAMETER[\"latitude_of_origin\",45.83333333333334],PARAMETER[\"central_meridian\",-109.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "31275": "PROJCS[\"unnamed\",GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[653,-212,449,0,0,0,0],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4312\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",5500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32005": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.85],PARAMETER[\"standard_parallel_2\",42.81666666666667],PARAMETER[\"latitude_of_origin\",41.33333333333334],PARAMETER[\"central_meridian\",-100],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32006": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.28333333333333],PARAMETER[\"standard_parallel_2\",41.71666666666667],PARAMETER[\"latitude_of_origin\",39.66666666666666],PARAMETER[\"central_meridian\",-99.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "20353": "PROJCS[\"UTM Zone 53, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-134,-48,149,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32008": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",34.75],PARAMETER[\"central_meridian\",-116.6666666666667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32009": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",34.75],PARAMETER[\"central_meridian\",-118.5833333333333],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32010": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",42.5],PARAMETER[\"central_meridian\",-71.66666666666667],PARAMETER[\"scale_factor\",0.999966667],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32011": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38.83333333333334],PARAMETER[\"central_meridian\",-74.66666666666667],PARAMETER[\"scale_factor\",0.999975],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32012": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",31],PARAMETER[\"central_meridian\",-104.3333333333333],PARAMETER[\"scale_factor\",0.999909091],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "20354": "PROJCS[\"UTM Zone 54, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-134,-48,149,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32014": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",31],PARAMETER[\"central_meridian\",-107.8333333333333],PARAMETER[\"scale_factor\",0.999916667],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32015": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",40],PARAMETER[\"central_meridian\",-74.33333333333333],PARAMETER[\"scale_factor\",0.999966667],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32016": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",40],PARAMETER[\"central_meridian\",-76.58333333333333],PARAMETER[\"scale_factor\",0.9999375],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32017": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",40],PARAMETER[\"central_meridian\",-78.58333333333333],PARAMETER[\"scale_factor\",0.9999375],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32018": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.03333333333333],PARAMETER[\"standard_parallel_2\",40.66666666666666],PARAMETER[\"latitude_of_origin\",40.5],PARAMETER[\"central_meridian\",-74],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32019": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",34.33333333333334],PARAMETER[\"standard_parallel_2\",36.16666666666666],PARAMETER[\"latitude_of_origin\",33.75],PARAMETER[\"central_meridian\",-79],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32020": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.43333333333333],PARAMETER[\"standard_parallel_2\",48.73333333333333],PARAMETER[\"latitude_of_origin\",47],PARAMETER[\"central_meridian\",-100.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32021": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",46.18333333333333],PARAMETER[\"standard_parallel_2\",47.48333333333333],PARAMETER[\"latitude_of_origin\",45.66666666666666],PARAMETER[\"central_meridian\",-100.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "23830": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",94.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",1500000],UNIT[\"Meter\",1]]", "23831": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",97.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",1500000],UNIT[\"Meter\",1]]", "23832": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",100.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",1500000],UNIT[\"Meter\",1]]", "23833": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",103.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",1500000],UNIT[\"Meter\",1]]", "23834": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",106.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",1500000],UNIT[\"Meter\",1]]", "23835": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",109.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",1500000],UNIT[\"Meter\",1]]", "23836": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",112.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",1500000],UNIT[\"Meter\",1]]", "23837": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",115.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",1500000],UNIT[\"Meter\",1]]", "23838": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",118.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",1500000],UNIT[\"Meter\",1]]", "20357": "PROJCS[\"UTM Zone 57, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-134,-48,149,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",159],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23840": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",124.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",1500000],UNIT[\"Meter\",1]]", "23841": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",127.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",1500000],UNIT[\"Meter\",1]]", "23842": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",130.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",1500000],UNIT[\"Meter\",1]]", "23843": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",133.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",1500000],UNIT[\"Meter\",1]]", "23844": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",136.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",1500000],UNIT[\"Meter\",1]]", "20358": "PROJCS[\"UTM Zone 58, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-134,-48,149,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23846": "PROJCS[\"UTM Zone 46, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378160,298.2469999999969],TOWGS84[-24,-15,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23847": "PROJCS[\"UTM Zone 47, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378160,298.2469999999969],TOWGS84[-24,-15,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23848": "PROJCS[\"UTM Zone 48, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378160,298.2469999999969],TOWGS84[-24,-15,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23849": "PROJCS[\"UTM Zone 49, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378160,298.2469999999969],TOWGS84[-24,-15,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23850": "PROJCS[\"UTM Zone 50, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378160,298.2469999999969],TOWGS84[-24,-15,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23851": "PROJCS[\"UTM Zone 51, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378160,298.2469999999969],TOWGS84[-24,-15,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23852": "PROJCS[\"UTM Zone 52, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378160,298.2469999999969],TOWGS84[-24,-15,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23853": "PROJCS[\"UTM Zone 53, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378160,298.2469999999969],TOWGS84[-24,-15,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32046": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.03333333333333],PARAMETER[\"standard_parallel_2\",39.2],PARAMETER[\"latitude_of_origin\",37.66666666666666],PARAMETER[\"central_meridian\",-78.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32047": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",36.76666666666667],PARAMETER[\"standard_parallel_2\",37.96666666666667],PARAMETER[\"latitude_of_origin\",36.33333333333334],PARAMETER[\"central_meridian\",-78.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32048": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.5],PARAMETER[\"standard_parallel_2\",48.73333333333333],PARAMETER[\"latitude_of_origin\",47],PARAMETER[\"central_meridian\",-120.8333333333333],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32049": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.83333333333334],PARAMETER[\"standard_parallel_2\",47.33333333333334],PARAMETER[\"latitude_of_origin\",45.33333333333334],PARAMETER[\"central_meridian\",-120.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32050": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",39],PARAMETER[\"standard_parallel_2\",40.25],PARAMETER[\"latitude_of_origin\",38.5],PARAMETER[\"central_meridian\",-79.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32051": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",37.48333333333333],PARAMETER[\"standard_parallel_2\",38.88333333333333],PARAMETER[\"latitude_of_origin\",37],PARAMETER[\"central_meridian\",-81],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32052": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.56666666666667],PARAMETER[\"standard_parallel_2\",46.76666666666667],PARAMETER[\"latitude_of_origin\",45.16666666666666],PARAMETER[\"central_meridian\",-90],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32053": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",44.25],PARAMETER[\"standard_parallel_2\",45.5],PARAMETER[\"latitude_of_origin\",43.83333333333334],PARAMETER[\"central_meridian\",-90],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32054": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",42.73333333333333],PARAMETER[\"standard_parallel_2\",44.06666666666667],PARAMETER[\"latitude_of_origin\",42],PARAMETER[\"central_meridian\",-90],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32055": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",40.66666666666666],PARAMETER[\"central_meridian\",-105.1666666666667],PARAMETER[\"scale_factor\",0.999941177],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32056": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",40.66666666666666],PARAMETER[\"central_meridian\",-107.3333333333333],PARAMETER[\"scale_factor\",0.999941177],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32057": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",40.66666666666666],PARAMETER[\"central_meridian\",-108.75],PARAMETER[\"scale_factor\",0.999941177],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "23866": "PROJCS[\"UTM Zone 46, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23867": "PROJCS[\"UTM Zone 47, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23868": "PROJCS[\"UTM Zone 48, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23869": "PROJCS[\"UTM Zone 49, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23870": "PROJCS[\"UTM Zone 50, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23871": "PROJCS[\"UTM Zone 51, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23872": "PROJCS[\"UTM Zone 52, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32065": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32066": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32067": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "23877": "PROJCS[\"UTM Zone 47, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23878": "PROJCS[\"UTM Zone 48, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23879": "PROJCS[\"UTM Zone 49, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23880": "PROJCS[\"UTM Zone 50, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23881": "PROJCS[\"UTM Zone 51, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23882": "PROJCS[\"UTM Zone 52, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23883": "PROJCS[\"UTM Zone 53, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23884": "PROJCS[\"UTM Zone 54, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32077": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "23886": "PROJCS[\"UTM Zone 46, Southern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378160,298.2469999999969],TOWGS84[-24,-15,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23887": "PROJCS[\"UTM Zone 47, Southern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378160,298.2469999999969],TOWGS84[-24,-15,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23888": "PROJCS[\"UTM Zone 48, Southern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378160,298.2469999999969],TOWGS84[-24,-15,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23889": "PROJCS[\"UTM Zone 49, Southern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378160,298.2469999999969],TOWGS84[-24,-15,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23890": "PROJCS[\"UTM Zone 50, Southern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378160,298.2469999999969],TOWGS84[-24,-15,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23891": "PROJCS[\"UTM Zone 51, Southern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378160,298.2469999999969],TOWGS84[-24,-15,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23892": "PROJCS[\"UTM Zone 52, Southern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378160,298.2469999999969],TOWGS84[-24,-15,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23893": "PROJCS[\"UTM Zone 53, Southern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378160,298.2469999999969],TOWGS84[-24,-15,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23894": "PROJCS[\"UTM Zone 54, Southern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378160,298.2469999999969],TOWGS84[-24,-15,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26710": "PROJCS[\"UTM Zone 10, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32098": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",60],PARAMETER[\"standard_parallel_2\",46],PARAMETER[\"latitude_of_origin\",44],PARAMETER[\"central_meridian\",-68.5],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32099": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",27.83333333333333],PARAMETER[\"standard_parallel_2\",26.16666666666667],PARAMETER[\"latitude_of_origin\",25.66666666666667],PARAMETER[\"central_meridian\",-91.33333333333333],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32100": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",49],PARAMETER[\"standard_parallel_2\",45],PARAMETER[\"latitude_of_origin\",44.25],PARAMETER[\"central_meridian\",-109.5],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32104": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",43],PARAMETER[\"standard_parallel_2\",40],PARAMETER[\"latitude_of_origin\",39.83333333333334],PARAMETER[\"central_meridian\",-100],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32107": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",34.75],PARAMETER[\"central_meridian\",-115.5833333333333],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",8000000],UNIT[\"Meter\",1]]", "32108": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",34.75],PARAMETER[\"central_meridian\",-116.6666666666667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",6000000],UNIT[\"Meter\",1]]", "32109": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",34.75],PARAMETER[\"central_meridian\",-118.5833333333333],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",800000],PARAMETER[\"false_northing\",4000000],UNIT[\"Meter\",1]]", "32110": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",42.5],PARAMETER[\"central_meridian\",-71.66666666666667],PARAMETER[\"scale_factor\",0.999966667],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "31293": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[682,-203,480,0,0,0,0]],PRIMEM[\"Ferro\",-17.666666666668],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",34],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32112": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",31],PARAMETER[\"central_meridian\",-104.3333333333333],PARAMETER[\"scale_factor\",0.999909091],PARAMETER[\"false_easting\",165000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32113": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",31],PARAMETER[\"central_meridian\",-106.25],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32114": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",31],PARAMETER[\"central_meridian\",-107.8333333333333],PARAMETER[\"scale_factor\",0.999916667],PARAMETER[\"false_easting\",830000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32115": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",38.83333333333334],PARAMETER[\"central_meridian\",-74.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",150000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32116": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",40],PARAMETER[\"central_meridian\",-76.58333333333333],PARAMETER[\"scale_factor\",0.9999375],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32117": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",40],PARAMETER[\"central_meridian\",-78.58333333333333],PARAMETER[\"scale_factor\",0.9999375],PARAMETER[\"false_easting\",350000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32118": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.03333333333333],PARAMETER[\"standard_parallel_2\",40.66666666666666],PARAMETER[\"latitude_of_origin\",40.16666666666666],PARAMETER[\"central_meridian\",-74],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32119": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",36.16666666666666],PARAMETER[\"standard_parallel_2\",34.33333333333334],PARAMETER[\"latitude_of_origin\",33.75],PARAMETER[\"central_meridian\",-79],PARAMETER[\"false_easting\",609601.22],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32120": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",48.73333333333333],PARAMETER[\"standard_parallel_2\",47.43333333333333],PARAMETER[\"latitude_of_origin\",47],PARAMETER[\"central_meridian\",-100.5],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32121": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.48333333333333],PARAMETER[\"standard_parallel_2\",46.18333333333333],PARAMETER[\"latitude_of_origin\",45.66666666666666],PARAMETER[\"central_meridian\",-100.5],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26711": "PROJCS[\"UTM Zone 11, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32123": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.03333333333333],PARAMETER[\"standard_parallel_2\",38.73333333333333],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",-82.5],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32124": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",36.76666666666667],PARAMETER[\"standard_parallel_2\",35.56666666666667],PARAMETER[\"latitude_of_origin\",35],PARAMETER[\"central_meridian\",-98],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32125": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",35.23333333333333],PARAMETER[\"standard_parallel_2\",33.93333333333333],PARAMETER[\"latitude_of_origin\",33.33333333333334],PARAMETER[\"central_meridian\",-98],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32126": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",46],PARAMETER[\"standard_parallel_2\",44.33333333333334],PARAMETER[\"latitude_of_origin\",43.66666666666666],PARAMETER[\"central_meridian\",-120.5],PARAMETER[\"false_easting\",2500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32127": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",44],PARAMETER[\"standard_parallel_2\",42.33333333333334],PARAMETER[\"latitude_of_origin\",41.66666666666666],PARAMETER[\"central_meridian\",-120.5],PARAMETER[\"false_easting\",1500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32128": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.95],PARAMETER[\"standard_parallel_2\",40.88333333333333],PARAMETER[\"latitude_of_origin\",40.16666666666666],PARAMETER[\"central_meridian\",-77.75],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27200": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"New_Zealand_Map_Grid\"],PARAMETER[\"latitude_of_origin\",-41],PARAMETER[\"central_meridian\",173],PARAMETER[\"false_easting\",2510000],PARAMETER[\"false_northing\",6023150],UNIT[\"Meter\",1]]", "32130": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",41.08333333333334],PARAMETER[\"central_meridian\",-71.5],PARAMETER[\"scale_factor\",0.99999375],PARAMETER[\"false_easting\",100000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32133": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",34.83333333333334],PARAMETER[\"standard_parallel_2\",32.5],PARAMETER[\"latitude_of_origin\",31.83333333333333],PARAMETER[\"central_meridian\",-81],PARAMETER[\"false_easting\",609600],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32134": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.68333333333333],PARAMETER[\"standard_parallel_2\",44.41666666666666],PARAMETER[\"latitude_of_origin\",43.83333333333334],PARAMETER[\"central_meridian\",-100],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32135": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",44.4],PARAMETER[\"standard_parallel_2\",42.83333333333334],PARAMETER[\"latitude_of_origin\",42.33333333333334],PARAMETER[\"central_meridian\",-100.3333333333333],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32136": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",36.41666666666666],PARAMETER[\"standard_parallel_2\",35.25],PARAMETER[\"latitude_of_origin\",34.33333333333334],PARAMETER[\"central_meridian\",-86],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32137": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",36.18333333333333],PARAMETER[\"standard_parallel_2\",34.65],PARAMETER[\"latitude_of_origin\",34],PARAMETER[\"central_meridian\",-101.5],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "23946": "PROJCS[\"UTM Zone 46, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377276.345,300.8017000000115],TOWGS84[217,823,299,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23947": "PROJCS[\"UTM Zone 47, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377276.345,300.8017000000115],TOWGS84[217,823,299,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "23948": "PROJCS[\"UTM Zone 48, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377276.345,300.8017000000115],TOWGS84[217,823,299,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32141": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",27.83333333333333],PARAMETER[\"standard_parallel_2\",26.16666666666667],PARAMETER[\"latitude_of_origin\",25.66666666666667],PARAMETER[\"central_meridian\",-98.5],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",5000000],UNIT[\"Meter\",1]]", "32142": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.78333333333333],PARAMETER[\"standard_parallel_2\",40.71666666666667],PARAMETER[\"latitude_of_origin\",40.33333333333334],PARAMETER[\"central_meridian\",-111.5],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "32143": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.65],PARAMETER[\"standard_parallel_2\",39.01666666666667],PARAMETER[\"latitude_of_origin\",38.33333333333334],PARAMETER[\"central_meridian\",-111.5],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",2000000],UNIT[\"Meter\",1]]", "32144": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.35],PARAMETER[\"standard_parallel_2\",37.21666666666667],PARAMETER[\"latitude_of_origin\",36.66666666666666],PARAMETER[\"central_meridian\",-111.5],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",3000000],UNIT[\"Meter\",1]]", "32145": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",42.5],PARAMETER[\"central_meridian\",-72.5],PARAMETER[\"scale_factor\",0.999964286],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32146": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",39.2],PARAMETER[\"standard_parallel_2\",38.03333333333333],PARAMETER[\"latitude_of_origin\",37.66666666666666],PARAMETER[\"central_meridian\",-78.5],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",2000000],UNIT[\"Meter\",1]]", "32147": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",37.96666666666667],PARAMETER[\"standard_parallel_2\",36.76666666666667],PARAMETER[\"latitude_of_origin\",36.33333333333334],PARAMETER[\"central_meridian\",-78.5],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false_northing\",1000000],UNIT[\"Meter\",1]]", "32148": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",48.73333333333333],PARAMETER[\"standard_parallel_2\",47.5],PARAMETER[\"latitude_of_origin\",47],PARAMETER[\"central_meridian\",-120.8333333333333],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32149": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.33333333333334],PARAMETER[\"standard_parallel_2\",45.83333333333334],PARAMETER[\"latitude_of_origin\",45.33333333333334],PARAMETER[\"central_meridian\",-120.5],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32150": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.25],PARAMETER[\"standard_parallel_2\",39],PARAMETER[\"latitude_of_origin\",38.5],PARAMETER[\"central_meridian\",-79.5],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32151": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.88333333333333],PARAMETER[\"standard_parallel_2\",37.48333333333333],PARAMETER[\"latitude_of_origin\",37],PARAMETER[\"central_meridian\",-81],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26712": "PROJCS[\"UTM Zone 12, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32153": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.5],PARAMETER[\"standard_parallel_2\",44.25],PARAMETER[\"latitude_of_origin\",43.83333333333334],PARAMETER[\"central_meridian\",-90],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32154": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",44.06666666666667],PARAMETER[\"standard_parallel_2\",42.73333333333333],PARAMETER[\"latitude_of_origin\",42],PARAMETER[\"central_meridian\",-90],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32155": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",40.5],PARAMETER[\"central_meridian\",-105.1666666666667],PARAMETER[\"scale_factor\",0.9999375],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32156": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",40.5],PARAMETER[\"central_meridian\",-107.3333333333333],PARAMETER[\"scale_factor\",0.9999375],PARAMETER[\"false_easting\",400000],PARAMETER[\"false_northing\",100000],UNIT[\"Meter\",1]]", "32157": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",40.5],PARAMETER[\"central_meridian\",-108.75],PARAMETER[\"scale_factor\",0.9999375],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32158": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",40.5],PARAMETER[\"central_meridian\",-110.0833333333333],PARAMETER[\"scale_factor\",0.9999375],PARAMETER[\"false_easting\",800000],PARAMETER[\"false_northing\",100000],UNIT[\"Meter\",1]]", "27205": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-36.87986527777778],PARAMETER[\"central_meridian\",174.7643393611111],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "32161": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",18.43333333333333],PARAMETER[\"standard_parallel_2\",18.03333333333333],PARAMETER[\"latitude_of_origin\",17.83333333333333],PARAMETER[\"central_meridian\",-66.43333333333334],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",200000],UNIT[\"Meter\",1]]", "32164": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "27206": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-37.76124980555556],PARAMETER[\"central_meridian\",176.46619725],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "32166": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32167": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "27207": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-38.62470277777778],PARAMETER[\"central_meridian\",177.8856362777778],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "27208": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-39.65092930555556],PARAMETER[\"central_meridian\",176.6736805277778],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "32180": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-55.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32181": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-53],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26713": "PROJCS[\"UTM Zone 13, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27209": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-39.13575830555556],PARAMETER[\"central_meridian\",174.22801175],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "32184": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-61.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32185": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-64.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32186": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-67.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32187": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-70.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32188": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-73.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27210": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-39.51247038888889],PARAMETER[\"central_meridian\",175.6400368055556],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "32190": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-79.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32191": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-82.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32192": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32193": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-84],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32075": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "26803": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378450.047548896,294.9786971646739]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",41.5],PARAMETER[\"central_meridian\",-88.75],PARAMETER[\"scale_factor\",0.999909091],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32196": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-93],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32197": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-96],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32198": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",60],PARAMETER[\"standard_parallel_2\",46],PARAMETER[\"latitude_of_origin\",44],PARAMETER[\"central_meridian\",-68.5],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32199": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",27.83333333333333],PARAMETER[\"standard_parallel_2\",26.16666666666667],PARAMETER[\"latitude_of_origin\",25.5],PARAMETER[\"central_meridian\",-91.33333333333333],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27212": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-40.92553263888889],PARAMETER[\"central_meridian\",175.6473496666667],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "32202": "PROJCS[\"UTM Zone 2, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-171],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32203": "PROJCS[\"UTM Zone 3, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32204": "PROJCS[\"UTM Zone 4, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-159],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32205": "PROJCS[\"UTM Zone 5, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32206": "PROJCS[\"UTM Zone 6, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27213": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-41.30131963888888],PARAMETER[\"central_meridian\",174.7766231111111],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "32208": "PROJCS[\"UTM Zone 8, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32209": "PROJCS[\"UTM Zone 9, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32210": "PROJCS[\"UTM Zone 10, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32211": "PROJCS[\"UTM Zone 11, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26714": "PROJCS[\"UTM Zone 14, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27214": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-40.71475905555556],PARAMETER[\"central_meridian\",172.6720465],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "32214": "PROJCS[\"UTM Zone 14, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32215": "PROJCS[\"UTM Zone 15, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32216": "PROJCS[\"UTM Zone 16, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32217": "PROJCS[\"UTM Zone 17, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32218": "PROJCS[\"UTM Zone 18, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27215": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-41.27454472222222],PARAMETER[\"central_meridian\",173.2993168055555],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "32220": "PROJCS[\"UTM Zone 20, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32221": "PROJCS[\"UTM Zone 21, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32222": "PROJCS[\"UTM Zone 22, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32223": "PROJCS[\"UTM Zone 23, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32224": "PROJCS[\"UTM Zone 24, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27216": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-41.28991152777778],PARAMETER[\"central_meridian\",172.1090281944444],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "32226": "PROJCS[\"UTM Zone 26, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32227": "PROJCS[\"UTM Zone 27, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-21],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32228": "PROJCS[\"UTM Zone 28, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32229": "PROJCS[\"UTM Zone 29, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32230": "PROJCS[\"UTM Zone 30, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27217": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-41.81080286111111],PARAMETER[\"central_meridian\",171.5812600555556],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "32232": "PROJCS[\"UTM Zone 32, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32233": "PROJCS[\"UTM Zone 33, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32234": "PROJCS[\"UTM Zone 34, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32235": "PROJCS[\"UTM Zone 35, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32236": "PROJCS[\"UTM Zone 36, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27218": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-42.33369427777778],PARAMETER[\"central_meridian\",171.5497713055556],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "32238": "PROJCS[\"UTM Zone 38, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "24047": "PROJCS[\"UTM Zone 47, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377276.345,300.8017000000115],TOWGS84[210,814,289,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "24048": "PROJCS[\"UTM Zone 48, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377276.345,300.8017000000115],TOWGS84[210,814,289,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32241": "PROJCS[\"UTM Zone 41, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26715": "PROJCS[\"UTM Zone 15, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27219": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-42.68911658333333],PARAMETER[\"central_meridian\",173.0101333888889],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "32244": "PROJCS[\"UTM Zone 44, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32245": "PROJCS[\"UTM Zone 45, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32246": "PROJCS[\"UTM Zone 46, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32247": "PROJCS[\"UTM Zone 47, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32248": "PROJCS[\"UTM Zone 48, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27220": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-41.54448666666666],PARAMETER[\"central_meridian\",173.8020741111111],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "32250": "PROJCS[\"UTM Zone 50, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32251": "PROJCS[\"UTM Zone 51, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32252": "PROJCS[\"UTM Zone 52, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32253": "PROJCS[\"UTM Zone 53, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32254": "PROJCS[\"UTM Zone 54, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27221": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-42.88632236111111],PARAMETER[\"central_meridian\",170.9799935],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "32256": "PROJCS[\"UTM Zone 56, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32257": "PROJCS[\"UTM Zone 57, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",159],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32258": "PROJCS[\"UTM Zone 58, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32259": "PROJCS[\"UTM Zone 59, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",171],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32260": "PROJCS[\"UTM Zone 60, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",177],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27222": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-43.11012813888889],PARAMETER[\"central_meridian\",170.2609258333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "27223": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-43.97780288888889],PARAMETER[\"central_meridian\",168.606267],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "29171": "PROJCS[\"UTM Zone 21, Northern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27224": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-43.59063758333333],PARAMETER[\"central_meridian\",172.7271935833333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "27225": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-43.74871155555556],PARAMETER[\"central_meridian\",171.3607484722222],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "27226": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-44.40222036111111],PARAMETER[\"central_meridian\",171.0572508333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "27227": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-44.73526797222222],PARAMETER[\"central_meridian\",169.4677550833333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "24100": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6378249.144808011,293.4663076556349]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",18],PARAMETER[\"central_meridian\",-77],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",550000],PARAMETER[\"false_northing\",400000],UNIT[\"unknown\",0.3047972654]]", "27228": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-45.13290258333333],PARAMETER[\"central_meridian\",168.3986411944444],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "32301": "PROJCS[\"UTM Zone 1, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-177],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26717": "PROJCS[\"UTM Zone 17, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27229": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-45.56372616666666],PARAMETER[\"central_meridian\",167.7388617777778],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "32304": "PROJCS[\"UTM Zone 4, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-159],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32305": "PROJCS[\"UTM Zone 5, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32306": "PROJCS[\"UTM Zone 6, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32307": "PROJCS[\"UTM Zone 7, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32308": "PROJCS[\"UTM Zone 8, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "27230": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-45.81619661111111],PARAMETER[\"central_meridian\",170.6285951666667],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "32310": "PROJCS[\"UTM Zone 10, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32311": "PROJCS[\"UTM Zone 11, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32312": "PROJCS[\"UTM Zone 12, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32313": "PROJCS[\"UTM Zone 13, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32314": "PROJCS[\"UTM Zone 14, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "27231": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-45.86151336111111],PARAMETER[\"central_meridian\",170.2825891111111],PARAMETER[\"scale_factor\",0.99996],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",700000],UNIT[\"Meter\",1]]", "32316": "PROJCS[\"UTM Zone 16, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32317": "PROJCS[\"UTM Zone 17, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32318": "PROJCS[\"UTM Zone 18, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32319": "PROJCS[\"UTM Zone 19, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32320": "PROJCS[\"UTM Zone 20, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "27232": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-46.60000961111111],PARAMETER[\"central_meridian\",168.342872],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300002.66],PARAMETER[\"false_northing\",699999.58],UNIT[\"Meter\",1]]", "32322": "PROJCS[\"UTM Zone 22, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32323": "PROJCS[\"UTM Zone 23, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32324": "PROJCS[\"UTM Zone 24, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32325": "PROJCS[\"UTM Zone 25, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32326": "PROJCS[\"UTM Zone 26, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32327": "PROJCS[\"UTM Zone 27, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-21],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32328": "PROJCS[\"UTM Zone 28, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32329": "PROJCS[\"UTM Zone 29, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32330": "PROJCS[\"UTM Zone 30, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32331": "PROJCS[\"UTM Zone 31, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26718": "PROJCS[\"UTM Zone 18, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32333": "PROJCS[\"UTM Zone 33, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32334": "PROJCS[\"UTM Zone 34, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32335": "PROJCS[\"UTM Zone 35, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32336": "PROJCS[\"UTM Zone 36, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "28600": "PROJCS[\"unnamed\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-128.16,-282.42,21.93,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",24.45],PARAMETER[\"central_meridian\",51.21666666666667],PARAMETER[\"scale_factor\",0.99999],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",300000],UNIT[\"Meter\",1]]", "32338": "PROJCS[\"UTM Zone 38, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32339": "PROJCS[\"UTM Zone 39, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32340": "PROJCS[\"UTM Zone 40, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32341": "PROJCS[\"UTM Zone 41, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32342": "PROJCS[\"UTM Zone 42, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32343": "PROJCS[\"UTM Zone 43, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32076": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32345": "PROJCS[\"UTM Zone 45, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32346": "PROJCS[\"UTM Zone 46, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32347": "PROJCS[\"UTM Zone 47, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32348": "PROJCS[\"UTM Zone 48, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32349": "PROJCS[\"UTM Zone 49, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32350": "PROJCS[\"UTM Zone 50, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32351": "PROJCS[\"UTM Zone 51, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32352": "PROJCS[\"UTM Zone 52, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32353": "PROJCS[\"UTM Zone 53, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32354": "PROJCS[\"UTM Zone 54, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32355": "PROJCS[\"UTM Zone 55, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32356": "PROJCS[\"UTM Zone 56, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32357": "PROJCS[\"UTM Zone 57, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",159],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32358": "PROJCS[\"UTM Zone 58, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32359": "PROJCS[\"UTM Zone 59, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",171],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32360": "PROJCS[\"UTM Zone 60, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",177],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26719": "PROJCS[\"UTM Zone 19, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21780": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[674.4,15.1,405.3,0,0,0,0]],PRIMEM[\"Bern\",7.4395833333842],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"latitude_of_center\",46.95240555555556],PARAMETER[\"longitude_of_center\",0],PARAMETER[\"azimuth\",90],PARAMETER[\"rectified_grid_angle\",90],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "21781": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841\",DATUM[\"unknown\",SPHEROID[\"bessel\",6377397.155,299.1528128],TOWGS84[674.4,15.1,405.3,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"latitude_of_center\",46.95240555555556],PARAMETER[\"longitude_of_center\",7.439583333333333],PARAMETER[\"azimuth\",90],PARAMETER[\"rectified_grid_angle\",90],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",200000],UNIT[\"Meter\",1]]", "24200": "PROJCS[\"unnamed\",GEOGCS[\"Clarke 1866\",DATUM[\"unknown\",SPHEROID[\"clrk66\",6378206.4,294.9786982139006],TOWGS84[70,207,389.5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",18],PARAMETER[\"central_meridian\",-77],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",250000],PARAMETER[\"false_northing\",150000],UNIT[\"Meter\",1]]", "26720": "PROJCS[\"UTM Zone 20, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32242": "PROJCS[\"UTM Zone 42, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,4.5,0,0,0.554,0.2263]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32401": "PROJCS[\"UTM Zone 1, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-177],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32402": "PROJCS[\"UTM Zone 2, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-171],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32403": "PROJCS[\"UTM Zone 3, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32404": "PROJCS[\"UTM Zone 4, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-159],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32405": "PROJCS[\"UTM Zone 5, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32406": "PROJCS[\"UTM Zone 6, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32407": "PROJCS[\"UTM Zone 7, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32408": "PROJCS[\"UTM Zone 8, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32409": "PROJCS[\"UTM Zone 9, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32410": "PROJCS[\"UTM Zone 10, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32411": "PROJCS[\"UTM Zone 11, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32412": "PROJCS[\"UTM Zone 12, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32413": "PROJCS[\"UTM Zone 13, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32414": "PROJCS[\"UTM Zone 14, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32415": "PROJCS[\"UTM Zone 15, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32416": "PROJCS[\"UTM Zone 16, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29185": "PROJCS[\"UTM Zone 25, Southern Hemisphere\",GEOGCS[\"GRS 67(IUGG 1967)\",DATUM[\"unknown\",SPHEROID[\"GRS67\",6378160,298.247167427],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32418": "PROJCS[\"UTM Zone 18, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32419": "PROJCS[\"UTM Zone 19, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32420": "PROJCS[\"UTM Zone 20, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32421": "PROJCS[\"UTM Zone 21, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32422": "PROJCS[\"UTM Zone 22, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26721": "PROJCS[\"UTM Zone 21, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32424": "PROJCS[\"UTM Zone 24, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32425": "PROJCS[\"UTM Zone 25, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32022": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.43333333333333],PARAMETER[\"standard_parallel_2\",41.7],PARAMETER[\"latitude_of_origin\",39.66666666666666],PARAMETER[\"central_meridian\",-82.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32427": "PROJCS[\"UTM Zone 27, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-21],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32428": "PROJCS[\"UTM Zone 28, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32429": "PROJCS[\"UTM Zone 29, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32430": "PROJCS[\"UTM Zone 30, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32431": "PROJCS[\"UTM Zone 31, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32432": "PROJCS[\"UTM Zone 32, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32433": "PROJCS[\"UTM Zone 33, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32434": "PROJCS[\"UTM Zone 34, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32435": "PROJCS[\"UTM Zone 35, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32436": "PROJCS[\"UTM Zone 36, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32437": "PROJCS[\"UTM Zone 37, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32438": "PROJCS[\"UTM Zone 38, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32439": "PROJCS[\"UTM Zone 39, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32440": "PROJCS[\"UTM Zone 40, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32441": "PROJCS[\"UTM Zone 41, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32442": "PROJCS[\"UTM Zone 42, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32443": "PROJCS[\"UTM Zone 43, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32444": "PROJCS[\"UTM Zone 44, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32445": "PROJCS[\"UTM Zone 45, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32446": "PROJCS[\"UTM Zone 46, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32447": "PROJCS[\"UTM Zone 47, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32448": "PROJCS[\"UTM Zone 48, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32449": "PROJCS[\"UTM Zone 49, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32450": "PROJCS[\"UTM Zone 50, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29177": "PROJCS[\"UTM Zone 17, Southern Hemisphere\",GEOGCS[\"GRS 67(IUGG 1967)\",DATUM[\"unknown\",SPHEROID[\"GRS67\",6378160,298.247167427],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32452": "PROJCS[\"UTM Zone 52, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "26722": "PROJCS[\"UTM Zone 22, Northern Hemisphere\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32454": "PROJCS[\"UTM Zone 54, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32455": "PROJCS[\"UTM Zone 55, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32456": "PROJCS[\"UTM Zone 56, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32457": "PROJCS[\"UTM Zone 57, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",159],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32458": "PROJCS[\"UTM Zone 58, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32459": "PROJCS[\"UTM Zone 59, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",171],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32460": "PROJCS[\"UTM Zone 60, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",177],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32451": "PROJCS[\"UTM Zone 51, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "27258": "PROJCS[\"UTM Zone 58, Southern Hemisphere\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "29178": "PROJCS[\"UTM Zone 18, Southern Hemisphere\",GEOGCS[\"GRS 67(IUGG 1967)\",DATUM[\"unknown\",SPHEROID[\"GRS67\",6378160,298.247167427],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "27259": "PROJCS[\"UTM Zone 59, Southern Hemisphere\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",171],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "23839": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"unknown\",SPHEROID[\"WGS84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",121.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",1500000],UNIT[\"Meter\",1]]", "27260": "PROJCS[\"UTM Zone 60, Southern Hemisphere\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",177],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "24305": "PROJCS[\"UTM Zone 45, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377276.345,300.8017000000115],TOWGS84[214,804,268,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "24306": "PROJCS[\"UTM Zone 46, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377276.345,300.8017000000115],TOWGS84[214,804,268,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32723": "PROJCS[\"UTM Zone 23, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32501": "PROJCS[\"UTM Zone 1, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-177],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32502": "PROJCS[\"UTM Zone 2, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-171],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "24311": "PROJCS[\"UTM Zone 41, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377301.243,300.8017254999889],TOWGS84[283,682,231,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "24312": "PROJCS[\"UTM Zone 42, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377301.243,300.8017254999889],TOWGS84[283,682,231,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "20436": "PROJCS[\"UTM Zone 36, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-143,-236,7,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32506": "PROJCS[\"UTM Zone 6, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32507": "PROJCS[\"UTM Zone 7, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32508": "PROJCS[\"UTM Zone 8, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32509": "PROJCS[\"UTM Zone 9, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32510": "PROJCS[\"UTM Zone 10, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20437": "PROJCS[\"UTM Zone 37, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-143,-236,7,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32512": "PROJCS[\"UTM Zone 12, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32513": "PROJCS[\"UTM Zone 13, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32514": "PROJCS[\"UTM Zone 14, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32515": "PROJCS[\"UTM Zone 15, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32516": "PROJCS[\"UTM Zone 16, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20438": "PROJCS[\"UTM Zone 38, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-143,-236,7,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32518": "PROJCS[\"UTM Zone 18, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32519": "PROJCS[\"UTM Zone 19, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32520": "PROJCS[\"UTM Zone 20, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32521": "PROJCS[\"UTM Zone 21, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32522": "PROJCS[\"UTM Zone 22, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20439": "PROJCS[\"UTM Zone 39, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-143,-236,7,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32524": "PROJCS[\"UTM Zone 24, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32525": "PROJCS[\"UTM Zone 25, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32526": "PROJCS[\"UTM Zone 26, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32527": "PROJCS[\"UTM Zone 27, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-21],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32528": "PROJCS[\"UTM Zone 28, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "20440": "PROJCS[\"UTM Zone 40, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[-143,-236,7,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32453": "PROJCS[\"UTM Zone 53, Northern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32531": "PROJCS[\"UTM Zone 31, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32532": "PROJCS[\"UTM Zone 32, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32533": "PROJCS[\"UTM Zone 33, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "24342": "PROJCS[\"UTM Zone 42, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.151,300.801725500009],TOWGS84[295,736,257,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "24343": "PROJCS[\"UTM Zone 43, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.151,300.801725500009],TOWGS84[295,736,257,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "24344": "PROJCS[\"UTM Zone 44, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.151,300.801725500009],TOWGS84[295,736,257,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "24345": "PROJCS[\"UTM Zone 45, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.151,300.801725500009],TOWGS84[295,736,257,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "24346": "PROJCS[\"UTM Zone 46, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.151,300.801725500009],TOWGS84[295,736,257,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "24347": "PROJCS[\"UTM Zone 47, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.151,300.801725500009],TOWGS84[295,736,257,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32540": "PROJCS[\"UTM Zone 40, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "29180": "PROJCS[\"UTM Zone 20, Southern Hemisphere\",GEOGCS[\"GRS 67(IUGG 1967)\",DATUM[\"unknown\",SPHEROID[\"GRS67\",6378160,298.247167427],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32542": "PROJCS[\"UTM Zone 42, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32543": "PROJCS[\"UTM Zone 43, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32544": "PROJCS[\"UTM Zone 44, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32545": "PROJCS[\"UTM Zone 45, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32546": "PROJCS[\"UTM Zone 46, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32547": "PROJCS[\"UTM Zone 47, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32548": "PROJCS[\"UTM Zone 48, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32549": "PROJCS[\"UTM Zone 49, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32550": "PROJCS[\"UTM Zone 50, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32551": "PROJCS[\"UTM Zone 51, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32552": "PROJCS[\"UTM Zone 52, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32553": "PROJCS[\"UTM Zone 53, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32554": "PROJCS[\"UTM Zone 54, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32555": "PROJCS[\"UTM Zone 55, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32556": "PROJCS[\"UTM Zone 56, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32557": "PROJCS[\"UTM Zone 57, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",159],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32558": "PROJCS[\"UTM Zone 58, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32559": "PROJCS[\"UTM Zone 59, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",171],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32560": "PROJCS[\"UTM Zone 60, Southern Hemisphere\",GEOGCS[\"WGS 72\",DATUM[\"unknown\",SPHEROID[\"WGS72\",6378135,298.26],TOWGS84[0,0,1.9,0,0,0.814,-0.38]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",177],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "24370": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.36559538,300.8017255433552]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",39.5],PARAMETER[\"central_meridian\",68],PARAMETER[\"scale_factor\",0.99846154],PARAMETER[\"false_easting\",2355500],PARAMETER[\"false_northing\",2590000],UNIT[\"unknown\",0.9143985307444408]]", "24371": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.36559538,300.8017255433552]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",32.5],PARAMETER[\"central_meridian\",68],PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"false_easting\",3000000],PARAMETER[\"false_northing\",1000000],UNIT[\"unknown\",0.9143985307444408]]", "24372": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.36559538,300.8017255433552]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",26],PARAMETER[\"central_meridian\",74],PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"false_easting\",3000000],PARAMETER[\"false_northing\",1000000],UNIT[\"unknown\",0.9143985307444408]]", "24373": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.36559538,300.8017255433552]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",19],PARAMETER[\"central_meridian\",80],PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"false_easting\",3000000],PARAMETER[\"false_northing\",1000000],UNIT[\"unknown\",0.9143985307444408]]", "24374": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.36559538,300.8017255433552]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",12],PARAMETER[\"central_meridian\",80],PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"false_easting\",3000000],PARAMETER[\"false_northing\",1000000],UNIT[\"unknown\",0.9143985307444408]]", "24375": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377276.345,300.8017000000115],TOWGS84[214,804,268,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",26],PARAMETER[\"central_meridian\",90],PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"false_easting\",2743185.69],PARAMETER[\"false_northing\",914395.23],UNIT[\"Meter\",1]]", "24376": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377301.243,300.8017254999889],TOWGS84[283,682,231,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",32.5],PARAMETER[\"central_meridian\",68],PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"false_easting\",2743196.4],PARAMETER[\"false_northing\",914398.8],UNIT[\"Meter\",1]]", "24377": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377301.243,300.8017254999889],TOWGS84[283,682,231,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",26],PARAMETER[\"central_meridian\",74],PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"false_easting\",2743196.4],PARAMETER[\"false_northing\",914398.8],UNIT[\"Meter\",1]]", "24378": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.151,300.801725500009],TOWGS84[295,736,257,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",32.5],PARAMETER[\"central_meridian\",68],PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"false_easting\",2743195.5],PARAMETER[\"false_northing\",914398.5],UNIT[\"Meter\",1]]", "24379": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.151,300.801725500009],TOWGS84[295,736,257,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",26],PARAMETER[\"central_meridian\",74],PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"false_easting\",2743195.5],PARAMETER[\"false_northing\",914398.5],UNIT[\"Meter\",1]]", "24380": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.151,300.801725500009],TOWGS84[295,736,257,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",26],PARAMETER[\"central_meridian\",90],PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"false_easting\",2743195.5],PARAMETER[\"false_northing\",914398.5],UNIT[\"Meter\",1]]", "24381": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.151,300.801725500009],TOWGS84[295,736,257,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",19],PARAMETER[\"central_meridian\",80],PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"false_easting\",2743195.5],PARAMETER[\"false_northing\",914398.5],UNIT[\"Meter\",1]]", "24382": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.36559538,300.8017255433552]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",26],PARAMETER[\"central_meridian\",90],PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"false_easting\",3000000],PARAMETER[\"false_northing\",1000000],UNIT[\"unknown\",0.9143985307444408]]", "24383": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377299.151,300.801725500009],TOWGS84[295,736,257,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",12],PARAMETER[\"central_meridian\",80],PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"false_easting\",2743195.5],PARAMETER[\"false_northing\",914398.5],UNIT[\"Meter\",1]]", "32023": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.73333333333333],PARAMETER[\"standard_parallel_2\",40.03333333333333],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"central_meridian\",-82.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32182": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-56],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32739": "PROJCS[\"UTM Zone 39, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "21817": "PROJCS[\"UTM Zone 17, Northern Hemisphere\",GEOGCS[\"International 1909 (Hayford)\",DATUM[\"unknown\",SPHEROID[\"intl\",6378388,297],TOWGS84[307,304,-318,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29182": "PROJCS[\"UTM Zone 22, Southern Hemisphere\",GEOGCS[\"GRS 67(IUGG 1967)\",DATUM[\"unknown\",SPHEROID[\"GRS67\",6378160,298.247167427],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32602": "PROJCS[\"UTM Zone 2, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-171],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32603": "PROJCS[\"UTM Zone 3, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32604": "PROJCS[\"UTM Zone 4, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-159],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32605": "PROJCS[\"UTM Zone 5, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32606": "PROJCS[\"UTM Zone 6, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32607": "PROJCS[\"UTM Zone 7, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32608": "PROJCS[\"UTM Zone 8, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32609": "PROJCS[\"UTM Zone 9, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32610": "PROJCS[\"UTM Zone 10, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32611": "PROJCS[\"UTM Zone 11, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29375": "PROJCS[\"unnamed\",GEOGCS[\"Bessel 1841 (Namibia)\",DATUM[\"unknown\",SPHEROID[\"bess_nam\",6377483.865,299.1528128],TOWGS84[616,97,-251,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-22],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"unknown\",1.0000135965]]", "32183": "PROJCS[\"unnamed\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-58.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304800],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32614": "PROJCS[\"UTM Zone 14, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32615": "PROJCS[\"UTM Zone 15, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32616": "PROJCS[\"UTM Zone 16, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32617": "PROJCS[\"UTM Zone 17, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32618": "PROJCS[\"UTM Zone 18, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32619": "PROJCS[\"UTM Zone 19, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32620": "PROJCS[\"UTM Zone 20, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32621": "PROJCS[\"UTM Zone 21, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32622": "PROJCS[\"UTM Zone 22, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32623": "PROJCS[\"UTM Zone 23, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32624": "PROJCS[\"UTM Zone 24, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32625": "PROJCS[\"UTM Zone 25, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32626": "PROJCS[\"UTM Zone 26, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32627": "PROJCS[\"UTM Zone 27, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-21],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32628": "PROJCS[\"UTM Zone 28, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32629": "PROJCS[\"UTM Zone 29, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32630": "PROJCS[\"UTM Zone 30, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "29183": "PROJCS[\"UTM Zone 23, Southern Hemisphere\",GEOGCS[\"GRS 67(IUGG 1967)\",DATUM[\"unknown\",SPHEROID[\"GRS67\",6378160,298.247167427],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32632": "PROJCS[\"UTM Zone 32, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32633": "PROJCS[\"UTM Zone 33, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32634": "PROJCS[\"UTM Zone 34, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32635": "PROJCS[\"UTM Zone 35, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32636": "PROJCS[\"UTM Zone 36, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32637": "PROJCS[\"UTM Zone 37, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32638": "PROJCS[\"UTM Zone 38, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32639": "PROJCS[\"UTM Zone 39, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32640": "PROJCS[\"UTM Zone 40, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32641": "PROJCS[\"UTM Zone 41, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32642": "PROJCS[\"UTM Zone 42, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32643": "PROJCS[\"UTM Zone 43, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32644": "PROJCS[\"UTM Zone 44, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32645": "PROJCS[\"UTM Zone 45, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32646": "PROJCS[\"UTM Zone 46, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32647": "PROJCS[\"UTM Zone 47, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32648": "PROJCS[\"UTM Zone 48, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32649": "PROJCS[\"UTM Zone 49, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32650": "PROJCS[\"UTM Zone 50, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32651": "PROJCS[\"UTM Zone 51, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32652": "PROJCS[\"UTM Zone 52, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32653": "PROJCS[\"UTM Zone 53, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32654": "PROJCS[\"UTM Zone 54, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32655": "PROJCS[\"UTM Zone 55, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32656": "PROJCS[\"UTM Zone 56, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32657": "PROJCS[\"UTM Zone 57, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",159],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32658": "PROJCS[\"UTM Zone 58, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32659": "PROJCS[\"UTM Zone 59, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",171],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32660": "PROJCS[\"UTM Zone 60, Northern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",177],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32661": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Polar_Stereographic\"],PARAMETER[\"latitude_of_origin\",90],PARAMETER[\"central_meridian\",0],PARAMETER[\"scale_factor\",0.994],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",2000000],UNIT[\"Meter\",1]]", "29184": "PROJCS[\"UTM Zone 24, Southern Hemisphere\",GEOGCS[\"GRS 67(IUGG 1967)\",DATUM[\"unknown\",SPHEROID[\"GRS67\",6378160,298.247167427],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26729": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",30.5],PARAMETER[\"central_meridian\",-85.83333333333333],PARAMETER[\"scale_factor\",0.99996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32664": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32665": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32666": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32667": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32752": "PROJCS[\"UTM Zone 52, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "27291": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-39],PARAMETER[\"central_meridian\",175.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"false_northing\",400000],UNIT[\"unknown\",0.9143984146160287]]", "32753": "PROJCS[\"UTM Zone 53, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "27292": "PROJCS[\"unnamed\",GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4272\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",-44],PARAMETER[\"central_meridian\",171.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",500000],UNIT[\"unknown\",0.9143984146160287]]", "24500": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377304.063,300.8017000000015],TOWGS84[-11,851,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Cassini_Soldner\"],PARAMETER[\"latitude_of_origin\",1.287646666666667],PARAMETER[\"central_meridian\",103.8530022222222],PARAMETER[\"false_easting\",30000],PARAMETER[\"false_northing\",30000],UNIT[\"Meter\",1]]", "26730": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",30],PARAMETER[\"central_meridian\",-87.5],PARAMETER[\"scale_factor\",0.999933333],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32701": "PROJCS[\"UTM Zone 1, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-177],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32702": "PROJCS[\"UTM Zone 2, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-171],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32703": "PROJCS[\"UTM Zone 3, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32704": "PROJCS[\"UTM Zone 4, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-159],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32705": "PROJCS[\"UTM Zone 5, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32706": "PROJCS[\"UTM Zone 6, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32707": "PROJCS[\"UTM Zone 7, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32708": "PROJCS[\"UTM Zone 8, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32709": "PROJCS[\"UTM Zone 9, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32710": "PROJCS[\"UTM Zone 10, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32711": "PROJCS[\"UTM Zone 11, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32712": "PROJCS[\"UTM Zone 12, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32713": "PROJCS[\"UTM Zone 13, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32714": "PROJCS[\"UTM Zone 14, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32715": "PROJCS[\"UTM Zone 15, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32716": "PROJCS[\"UTM Zone 16, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32717": "PROJCS[\"UTM Zone 17, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32718": "PROJCS[\"UTM Zone 18, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32719": "PROJCS[\"UTM Zone 19, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32720": "PROJCS[\"UTM Zone 20, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32721": "PROJCS[\"UTM Zone 21, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32722": "PROJCS[\"UTM Zone 22, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26731": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"latitude_of_center\",57],PARAMETER[\"longitude_of_center\",-133.6666666666667],PARAMETER[\"azimuth\",323.1301023611111],PARAMETER[\"rectified_grid_angle\",0],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",16404166.67],PARAMETER[\"false_northing\",-16404166.67],UNIT[\"Foot_US\",0.3048006096012192]]", "32724": "PROJCS[\"UTM Zone 24, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "29100": "PROJCS[\"unnamed\",GEOGCS[\"GRS 67(IUGG 1967)\",DATUM[\"unknown\",SPHEROID[\"GRS67\",6378160,298.247167427],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Polyconic\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-54],PARAMETER[\"false_easting\",5000000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32024": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",35.56666666666667],PARAMETER[\"standard_parallel_2\",36.76666666666667],PARAMETER[\"latitude_of_origin\",35],PARAMETER[\"central_meridian\",-98],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32727": "PROJCS[\"UTM Zone 27, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-21],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32728": "PROJCS[\"UTM Zone 28, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32729": "PROJCS[\"UTM Zone 29, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32730": "PROJCS[\"UTM Zone 30, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32731": "PROJCS[\"UTM Zone 31, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32732": "PROJCS[\"UTM Zone 32, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32733": "PROJCS[\"UTM Zone 33, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32734": "PROJCS[\"UTM Zone 34, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32735": "PROJCS[\"UTM Zone 35, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32736": "PROJCS[\"UTM Zone 36, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32737": "PROJCS[\"UTM Zone 37, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32738": "PROJCS[\"UTM Zone 38, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "24547": "PROJCS[\"UTM Zone 47, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377304.063,300.8017000000015],TOWGS84[-11,851,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "24548": "PROJCS[\"UTM Zone 48, Northern Hemisphere\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377304.063,300.8017000000015],TOWGS84[-11,851,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]", "32741": "PROJCS[\"UTM Zone 41, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32742": "PROJCS[\"UTM Zone 42, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32743": "PROJCS[\"UTM Zone 43, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32744": "PROJCS[\"UTM Zone 44, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32745": "PROJCS[\"UTM Zone 45, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32746": "PROJCS[\"UTM Zone 46, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32747": "PROJCS[\"UTM Zone 47, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32748": "PROJCS[\"UTM Zone 48, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32749": "PROJCS[\"UTM Zone 49, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32750": "PROJCS[\"UTM Zone 50, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32751": "PROJCS[\"UTM Zone 51, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "29187": "PROJCS[\"UTM Zone 17, Southern Hemisphere\",GEOGCS[\"Australian Natl & S. Amer. 1969\",DATUM[\"unknown\",SPHEROID[\"aust_SA\",6378160,298.25],TOWGS84[-57,1,-41,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "26732": "PROJCS[\"unnamed\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"],EXTENSION[\"PROJ4_GRIDS\",\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4267\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",54],PARAMETER[\"central_meridian\",-142],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"Foot_US\",0.3048006096012192]]", "32754": "PROJCS[\"UTM Zone 54, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32755": "PROJCS[\"UTM Zone 55, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32756": "PROJCS[\"UTM Zone 56, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32757": "PROJCS[\"UTM Zone 57, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",159],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32758": "PROJCS[\"UTM Zone 58, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32759": "PROJCS[\"UTM Zone 59, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",171],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32760": "PROJCS[\"UTM Zone 60, Southern Hemisphere\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",177],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]", "32761": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Polar_Stereographic\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER[\"central_meridian\",0],PARAMETER[\"scale_factor\",0.994],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_northing\",2000000],UNIT[\"Meter\",1]]", "24571": "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6377304.063,300.8017000000015],TOWGS84[-11,851,5,0,0,0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"latitude_of_center\",4],PARAMETER[\"longitude_of_center\",102.25],PARAMETER[\"azimuth\",323.0257905],PARAMETER[\"rectified_grid_angle\",0],PARAMETER[\"scale_factor\",0.99984],PARAMETER[\"false_easting\",40000],PARAMETER[\"false_northing\",0],UNIT[\"unknown\",20.11678249437587]]", "32766": "PROJCS[\"unnamed\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",36],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",10000000],UNIT[\"Meter\",1]]"} \ No newline at end of file diff --git a/mapproxy/service/templates/demo/static/site.css b/mapproxy/service/templates/demo/static/site.css index 6b4be7614..d25b9626f 100644 --- a/mapproxy/service/templates/demo/static/site.css +++ b/mapproxy/service/templates/demo/static/site.css @@ -130,3 +130,8 @@ td.value{ div.capabilities span{ padding-right:1.5em; } + +.mapBtn { + margin-right: 10px; + margin-top: 5px; +} diff --git a/mapproxy/service/templates/demo/tms_demo.html b/mapproxy/service/templates/demo/tms_demo.html index 3d334e8ac..630d84c9f 100644 --- a/mapproxy/service/templates/demo/tms_demo.html +++ b/mapproxy/service/templates/demo/tms_demo.html @@ -14,34 +14,60 @@ jscript_functions=None }} {{def jscript_openlayers}} - + + + {{enddef}} -

Openlayers Client - Layer {{layer.name}}

+

Layer Preview - {{layer.name}}

@@ -64,6 +90,8 @@

Openlayers Client - Layer {{layer.name}}

Coordinate SystemImage format
+ +

Bounding Box

{{', '.join(str(s) for s in layer.grid.bbox)}}

Level and Resolutions

@@ -73,9 +101,3 @@

Level and Resolutions

{{level}}{{res}} {{endfor}} -

JavaScript code

-
-{{for line in jscript_openlayers().split('\n')}}
-{{escape(wrapper.fill(line))}}
-{{endfor}}
-            
diff --git a/mapproxy/service/templates/demo/wms_demo.html b/mapproxy/service/templates/demo/wms_demo.html index 170a571ed..8ae340b19 100644 --- a/mapproxy/service/templates/demo/wms_demo.html +++ b/mapproxy/service/templates/demo/wms_demo.html @@ -11,38 +11,81 @@ jscript_functions=None }} {{def jscript_openlayers}} - + + + {{enddef}} -

Openlayers Client - Layer {{layer.name}}

+

Layer Preview - {{layer.name}}

@@ -77,7 +120,7 @@

Openlayers Client - Layer {{layer.name}}

{{for dim in layer.dimensions}} - {{endfor}} + + {{endfor}}
- {{for value in layer.dimensions[dim]}} {{if value == layer.dimensions[dim].default}} @@ -86,16 +129,12 @@

Openlayers Client - Layer {{layer.name}}

{{endif}} {{endfor}} -
-
+
-

JavaScript code

-
-{{for line in jscript_openlayers().split('\n')}}
-{{escape(wrapper.fill(line))}}
-{{endfor}}
-            
+ + diff --git a/mapproxy/service/templates/demo/wmts_demo.html b/mapproxy/service/templates/demo/wmts_demo.html index 7a9d719b3..00e14832f 100644 --- a/mapproxy/service/templates/demo/wmts_demo.html +++ b/mapproxy/service/templates/demo/wmts_demo.html @@ -14,37 +14,76 @@ jscript_functions=None }} {{def jscript_openlayers}} - + + + {{enddef}} -

Openlayers Client - Layer {{layer.name}}

+

Layer Preview - {{layer.name}}

Coordinate SystemImage format
@@ -65,11 +104,7 @@

Openlayers Client - Layer {{layer.name}}

{{layer.format}}
+ +

Bounding Box

{{', '.join(str(s) for s in layer.grid.bbox)}}

-

JavaScript code

-
-{{for line in jscript_openlayers().split('\n')}}
-{{escape(wrapper.fill(line))}}
-{{endfor}}
-            
diff --git a/mapproxy/test/system/test_demo.py b/mapproxy/test/system/test_demo.py index afb087311..3884398da 100644 --- a/mapproxy/test/system/test_demo.py +++ b/mapproxy/test/system/test_demo.py @@ -36,4 +36,4 @@ def test_basic(self, app): def test_previewmap(self, app): resp = app.get("/demo/?srs=EPSG%3A3857&format=image%2Fpng&wms_layer=wms_cache", status=200) assert resp.content_type == "text/html" - assert '

Openlayers Client - Layer wms_cache

' in resp + assert '

Layer Preview - wms_cache

' in resp From a160985896e3a7a2bc9ce50a48589ad6749d9163 Mon Sep 17 00:00:00 2001 From: "blitza@terrrestris.de" Date: Thu, 12 Jan 2023 15:38:03 +0100 Subject: [PATCH 030/209] Add just4b image --- doc/install_docker.rst | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/doc/install_docker.rst b/doc/install_docker.rst index 69e093af4..635cfc830 100644 --- a/doc/install_docker.rst +++ b/doc/install_docker.rst @@ -6,11 +6,17 @@ There are several inofficial Docker images available on `Docker Hub`_ that provi .. _`Docker Hub`: https://hub.docker.com/search?q=mapproxy +The community has very good experiences with the following ones: + +- https://hub.docker.com/repository/docker/justb4/mapproxy/general (`github just4b `_) +- https://hub.docker.com/r/kartoza/mapproxy (`github kartoza `_) + Quickstart ------------------ -As for an example the image of `kartoza/mapproxy`_ is used. +As for an example the image of `kartoza/mapproxy`_ is used (`just4b/docker-mapproxy `_ works the same way). + Create a directory (e.g. `mapproxy`) for your configuration files and mount it as a volume: :: @@ -20,8 +26,16 @@ Create a directory (e.g. `mapproxy`) for your configuration files and mount it a Afterwards, the `MapProxy` instance is running on `localhost:8080`. I a production environment you might want to put a `nginx`_ in front of the MapProxy container, that serves as a reverse proxy. -See the `GitHub Repository`_ for detailed documentation and example docker-compose files. +See the `Kartoza GitHub Repository`_ for detailed documentation and example docker-compose files. .. _`kartoza/mapproxy`: https://hub.docker.com/r/kartoza/mapproxy .. _`nginx`: https://nginx.org .. _`GitHub Repository`: https://github.com/kartoza/docker-mapproxy + +There are also images available that already include binaries for `MapServer` or `Mapnik`: + +- https://github.com/justb4/docker-mapproxy-mapserver +- https://github.com/justb4/docker-mapproxy-mapserver-mapnik + +.. note:: + Please feel free to make suggestions for an official MapProxy docker image. From 10302cdcb909eb561678fdddf831bbab06e08d6d Mon Sep 17 00:00:00 2001 From: Simon Seyock Date: Thu, 12 Jan 2023 17:34:53 +0100 Subject: [PATCH 031/209] fix: add exception handling for FileNotFoundError --- mapproxy/util/lib.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/mapproxy/util/lib.py b/mapproxy/util/lib.py index 6eeed6c73..6ab48a49f 100644 --- a/mapproxy/util/lib.py +++ b/mapproxy/util/lib.py @@ -90,9 +90,15 @@ def find_library(lib_name, paths=None, exts=None): If nothing is found None is returned. """ if not paths or not exts: - lib = _find_library(lib_name) + try: + lib = _find_library(lib_name) + except FileNotFoundError: + pass if lib is None and lib_name.startswith('lib'): - lib = _find_library(lib_name[3:]) + try: + lib = _find_library(lib_name[3:]) + except FileNotFoundError: + pass return lib for lib_name in [lib_name] + ([lib_name[3:]] if lib_name.startswith('lib') else []): From b33646ad15200379935b12b8afe4959f4cd8ccf2 Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Fri, 13 Jan 2023 09:53:49 +0100 Subject: [PATCH 032/209] Fix encoding issues with umlauts in xml featureinfo --- mapproxy/featureinfo.py | 5 ++++- mapproxy/test/unit/test_featureinfo.py | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/mapproxy/featureinfo.py b/mapproxy/featureinfo.py index 7d9b28803..37e010013 100644 --- a/mapproxy/featureinfo.py +++ b/mapproxy/featureinfo.py @@ -58,6 +58,7 @@ def combine(cls, docs): class XMLFeatureInfoDoc(FeatureInfoDoc): info_type = "xml" + defaultEncoding = "UTF-8" def __init__(self, content): if isinstance(content, (string_type, bytes)): @@ -81,7 +82,9 @@ def as_etree(self): return self._etree def _serialize_etree(self): - return etree.tostring(self._etree) + encoding = self._etree.docinfo.encoding if \ + self._etree.docinfo.encoding else self.defaultEncoding + return etree.tostring(self._etree, encoding=encoding, xml_declaration=False) def _parse_content(self): doc = as_io(self._str_content) diff --git a/mapproxy/test/unit/test_featureinfo.py b/mapproxy/test/unit/test_featureinfo.py index 53a1ac28b..b1e912de2 100644 --- a/mapproxy/test/unit/test_featureinfo.py +++ b/mapproxy/test/unit/test_featureinfo.py @@ -95,6 +95,14 @@ def test_as_etree(self): doc = XMLFeatureInfoDoc("hello") assert doc.as_etree().getroot().text == "hello" + def test_umlauts(self): + doc = XMLFeatureInfoDoc('öäüß') + assert doc.as_etree().getroot().text == 'öäüß' + + input_tree = etree.fromstring('öäüß'.encode('utf-8')) + doc = XMLFeatureInfoDoc(input_tree) + assert doc.as_string().decode("utf-8") == 'öäüß' + def test_combine(self): docs = [ XMLFeatureInfoDoc("foo"), From 587bcfac0310f02f660d6d6a74b43361c76db38e Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Fri, 13 Jan 2023 10:42:10 +0100 Subject: [PATCH 033/209] Updating to ubuntu-latest updating because of troubles when doing apt install with non reachable mirrors --- .github/workflows/ghpages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ghpages.yml b/.github/workflows/ghpages.yml index e08b2a32d..293e1dbe1 100644 --- a/.github/workflows/ghpages.yml +++ b/.github/workflows/ghpages.yml @@ -8,7 +8,7 @@ on: jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - name: Checkout sources From d1895a45c60caf0cc977bdd42ed03341857e5ea7 Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Fri, 13 Jan 2023 10:49:14 +0100 Subject: [PATCH 034/209] updating runner to use ubuntu-latest --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ebcf3df42..0c9c083ad 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,7 +11,7 @@ on: jobs: test: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest services: redis-server: image: redis From c3424a9d78122c474180db32f471176792d80fdf Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Fri, 13 Jan 2023 11:00:21 +0100 Subject: [PATCH 035/209] fix runner python install --- .github/workflows/test.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0c9c083ad..5e06b1839 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -44,7 +44,8 @@ jobs: - name: Install packages run: | sudo apt update - sudo apt install proj-bin libgeos-dev libgdal-dev libxslt1-dev libxml2-dev build-essential python-dev libjpeg-dev zlib1g-dev libfreetype6-dev protobuf-compiler libprotoc-dev -y + if [[ ${{ matrix.python-version }} = 2.7 ]]; then sudo apt install python2-dev; else sudo apt install python3-dev; fi + sudo apt install proj-bin libgeos-dev libgdal-dev libxslt1-dev libxml2-dev build-essential libjpeg-dev zlib1g-dev libfreetype6-dev protobuf-compiler libprotoc-dev -y - name: Checkout sources uses: actions/checkout@v2 From 20241f6fe4de302099d06a6ac9b8dd03445d0f73 Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Fri, 13 Jan 2023 13:36:10 +0100 Subject: [PATCH 036/209] remove python 3.6 from test matrix This removes python 3.6 from the test matrix as its not supplied by the latest ubuntu image (22.04) --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5e06b1839..057054dd2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -29,7 +29,7 @@ jobs: strategy: matrix: - python-version: [2.7, 3.6, 3.7, 3.8, 3.9, "3.10"] + python-version: [2.7, 3.7, 3.8, 3.9, "3.10"] env: MAPPROXY_TEST_COUCHDB: 'http://localhost:5984' From be36d80375929823d8403bd2ee28ff5fc32525bc Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Fri, 13 Jan 2023 13:26:10 +0100 Subject: [PATCH 037/209] Fix variable referenced before assignment error --- mapproxy/util/lib.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mapproxy/util/lib.py b/mapproxy/util/lib.py index 6ab48a49f..d98baec87 100644 --- a/mapproxy/util/lib.py +++ b/mapproxy/util/lib.py @@ -90,6 +90,7 @@ def find_library(lib_name, paths=None, exts=None): If nothing is found None is returned. """ if not paths or not exts: + lib = None try: lib = _find_library(lib_name) except FileNotFoundError: From 6f72bfff3033567b5d6f9e1539351d61a302099d Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Tue, 17 Jan 2023 09:32:56 +0100 Subject: [PATCH 038/209] Reverting ubuntu upgrade of action runners --- .github/workflows/ghpages.yml | 2 +- .github/workflows/test.yml | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ghpages.yml b/.github/workflows/ghpages.yml index 293e1dbe1..e08b2a32d 100644 --- a/.github/workflows/ghpages.yml +++ b/.github/workflows/ghpages.yml @@ -8,7 +8,7 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - name: Checkout sources diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 057054dd2..ebcf3df42 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,7 +11,7 @@ on: jobs: test: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 services: redis-server: image: redis @@ -29,7 +29,7 @@ jobs: strategy: matrix: - python-version: [2.7, 3.7, 3.8, 3.9, "3.10"] + python-version: [2.7, 3.6, 3.7, 3.8, 3.9, "3.10"] env: MAPPROXY_TEST_COUCHDB: 'http://localhost:5984' @@ -44,8 +44,7 @@ jobs: - name: Install packages run: | sudo apt update - if [[ ${{ matrix.python-version }} = 2.7 ]]; then sudo apt install python2-dev; else sudo apt install python3-dev; fi - sudo apt install proj-bin libgeos-dev libgdal-dev libxslt1-dev libxml2-dev build-essential libjpeg-dev zlib1g-dev libfreetype6-dev protobuf-compiler libprotoc-dev -y + sudo apt install proj-bin libgeos-dev libgdal-dev libxslt1-dev libxml2-dev build-essential python-dev libjpeg-dev zlib1g-dev libfreetype6-dev protobuf-compiler libprotoc-dev -y - name: Checkout sources uses: actions/checkout@v2 From ee693cebd26812c3d88ecbed294a5d9448d9d522 Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Tue, 17 Jan 2023 10:09:15 +0100 Subject: [PATCH 039/209] add encoding header --- mapproxy/test/unit/test_featureinfo.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mapproxy/test/unit/test_featureinfo.py b/mapproxy/test/unit/test_featureinfo.py index b1e912de2..157be62b4 100644 --- a/mapproxy/test/unit/test_featureinfo.py +++ b/mapproxy/test/unit/test_featureinfo.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # This file is part of the MapProxy project. # Copyright (C) 2011 Omniscale # From bd3996b2358decc3621aaf2612c7efe7c070cd41 Mon Sep 17 00:00:00 2001 From: hblitza <37144910+hblitza@users.noreply.github.com> Date: Tue, 17 Jan 2023 16:44:23 +0100 Subject: [PATCH 040/209] Update doc/install_docker.rst Co-authored-by: Johannes Weskamm --- doc/install_docker.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/install_docker.rst b/doc/install_docker.rst index 635cfc830..03e03fc74 100644 --- a/doc/install_docker.rst +++ b/doc/install_docker.rst @@ -25,7 +25,7 @@ Create a directory (e.g. `mapproxy`) for your configuration files and mount it a Afterwards, the `MapProxy` instance is running on `localhost:8080`. -I a production environment you might want to put a `nginx`_ in front of the MapProxy container, that serves as a reverse proxy. +In a production environment you might want to put a `nginx`_ in front of the MapProxy container, that serves as a reverse proxy. See the `Kartoza GitHub Repository`_ for detailed documentation and example docker-compose files. .. _`kartoza/mapproxy`: https://hub.docker.com/r/kartoza/mapproxy From 5764d39b0513abf01aace626253f762c02e0cd44 Mon Sep 17 00:00:00 2001 From: babenhauserheide Date: Tue, 26 Mar 2019 12:32:45 +0100 Subject: [PATCH 041/209] add per-thread-and-process caching for mapnik This sidesteps missing theadsafety in mapnik, because the threadpool can and does re-use per-thread-and-process mapnik Map objects. To keep the memory requirement bounded, this patch also adds a simple garbage collector. It kicks in when there are far more cached Map objects than active threads. --- mapproxy/config/loader.py | 8 ++++-- mapproxy/source/mapnik.py | 55 +++++++++++++++++++++++++++------------ 2 files changed, 44 insertions(+), 19 deletions(-) diff --git a/mapproxy/config/loader.py b/mapproxy/config/loader.py index 179408a4e..05743b2fd 100644 --- a/mapproxy/config/loader.py +++ b/mapproxy/config/loader.py @@ -952,9 +952,13 @@ def source(self, params=None): else: reuse_map_objects = False + concurrent_tile_creators = self.context.globals.get_value('concurrent_tile_creators', self.conf, + global_key='cache.concurrent_tile_creators') + return MapnikSource(mapfile, layers=layers, image_opts=image_opts, - coverage=coverage, res_range=res_range, lock=lock, - reuse_map_objects=reuse_map_objects, scale_factor=scale_factor) + coverage=coverage, res_range=res_range, lock=lock, + reuse_map_objects=reuse_map_objects, scale_factor=scale_factor, + concurrent_tile_creators=concurrent_tile_creators) class TileSourceConfiguration(SourceConfiguration): supports_meta_tiles = False diff --git a/mapproxy/source/mapnik.py b/mapproxy/source/mapnik.py index 8b87bfc33..25f74743e 100644 --- a/mapproxy/source/mapnik.py +++ b/mapproxy/source/mapnik.py @@ -18,6 +18,7 @@ import sys import time import threading +import multiprocessing from mapproxy.grid import tile_grid from mapproxy.image import ImageSource @@ -49,7 +50,8 @@ class MapnikSource(MapLayer): supports_meta_tiles = True def __init__(self, mapfile, layers=None, image_opts=None, coverage=None, - res_range=None, lock=None, reuse_map_objects=False, scale_factor=None): + res_range=None, lock=None, reuse_map_objects=False, scale_factor=None, + concurrent_tile_creators=None): MapLayer.__init__(self, image_opts=image_opts) self.mapfile = mapfile self.coverage = coverage @@ -57,8 +59,9 @@ def __init__(self, mapfile, layers=None, image_opts=None, coverage=None, self.layers = set(layers) if layers else None self.scale_factor = scale_factor self.lock = lock - self._map_objs = {} - self._map_objs_lock = threading.Lock() + # global objects to support multiprocessing + global _map_objs + _map_objs = {} self._cache_map_obj = reuse_map_objects if self.coverage: self.extent = MapExtent(self.coverage.bbox, self.coverage.srs) @@ -93,24 +96,42 @@ def render(self, query): else: return self.render_mapfile(mapfile, query) - def map_obj(self, mapfile): - if not self._cache_map_obj: - m = mapnik.Map(0, 0) - mapnik.load_map(m, str(mapfile)) - return m + def _create_map_obj(self, mapfile): + m = mapnik.Map(0, 0) + mapnik.load_map(m, str(mapfile)) + return m + def map_obj(self, mapfile): # cache loaded map objects - # only works when a single proc/thread accesses this object + # only works when a single proc/thread accesses the map # (forking the render process doesn't work because of open database # file handles that gets passed to the child) - if mapfile not in self._map_objs: - with self._map_objs_lock: - if mapfile not in self._map_objs: - m = mapnik.Map(0, 0) - mapnik.load_map(m, str(mapfile)) - self._map_objs[mapfile] = m - - return self._map_objs[mapfile] + # segment the cache by process and thread to avoid interference + if self._cache_map_obj: + cachekey = None # renderd guarantees that there are no concurrency issues + else: + thread_id = threading.current_thread().ident + process_id = multiprocessing.current_process()._identity + cachekey = (process_id, thread_id, mapfile) + if cachekey not in _map_objs: + _map_objs[cachekey] = self._create_map_obj(mapfile) + + # clean up no longer used cached maps + process_cache_keys = [k for k in _map_objs.keys() + if k[0] == process_id] + if len(process_cache_keys) > (5 + threading.active_count()): + active_thread_ids = set(i.ident for i in threading.enumerate()) + for k in process_cache_keys: + if not k[1] in active_thread_ids and k in _map_objs: + try: + m = _map_objs[k] + del _map_objs[k] + except KeyError: + continue + m.remove_all() # cleanup + mapnik.clear_cache() + + return _map_objs[cachekey] def render_mapfile(self, mapfile, query): return run_non_blocking(self._render_mapfile, (mapfile, query)) From 7c66f0cbe7e52955186bc14d1e5b7b0cb06c3814 Mon Sep 17 00:00:00 2001 From: babenhauserheide Date: Tue, 26 Mar 2019 12:49:57 +0100 Subject: [PATCH 042/209] prepare mapnik Map objects during idle time This avoids delays after periods of inactivity due to reaped threads by preparing Map objects for the least recently used mapfile. --- mapproxy/source/mapnik.py | 54 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/mapproxy/source/mapnik.py b/mapproxy/source/mapnik.py index 25f74743e..2c0bd7b04 100644 --- a/mapproxy/source/mapnik.py +++ b/mapproxy/source/mapnik.py @@ -17,6 +17,8 @@ import sys import time +import queue +import random import threading import multiprocessing @@ -62,11 +64,46 @@ def __init__(self, mapfile, layers=None, image_opts=None, coverage=None, # global objects to support multiprocessing global _map_objs _map_objs = {} + global _last_activity + _last_activity = time.time() self._cache_map_obj = reuse_map_objects if self.coverage: self.extent = MapExtent(self.coverage.bbox, self.coverage.srs) else: self.extent = DefaultMapExtent() + # pre-created mapfiles for higher reactivity + global _last_mapfile + _last_mapfile = None + # pre-create more maps than the typical number of threads to allow for fast start + global _map_objs_precreated + if self._cache_map_obj: + _precreate_count = 1 + else: + _precreate_count = (2 * concurrent_tile_creators if concurrent_tile_creators else 4) # 4 is the default for async_.ThreadPool + _map_objs_precreated = queue.Queue(_precreate_count) + self.map_obj_pre_creating_thread = threading.Thread(target=self._precreate_maps) + self.map_obj_pre_creating_thread.daemon = True + self.map_obj_pre_creating_thread.start() + + def _idle(self): + return time.time() > _last_activity + 30 + + def _restart_idle_timer(self): + global _last_activity + _last_activity = time.time() + + def _precreate_maps(self): + while True: + mapfile = _last_mapfile + if mapfile is None or _map_objs_precreated.full(): + time.sleep(60 * random.random()) # randomized wait to avoid multiprocessing issues + continue + if not self._idle(): + time.sleep(10 * random.random()) + continue + _map_objs_precreated.put((mapfile, self._create_map_obj(mapfile))) + # prefer creating currently needed maps to filling the cache + time.sleep(5 + (10 * random.random())) def get_map(self, query): if self.res_range and not self.res_range.contains(query.bbox, query.size, @@ -99,9 +136,23 @@ def render(self, query): def _create_map_obj(self, mapfile): m = mapnik.Map(0, 0) mapnik.load_map(m, str(mapfile)) + global _last_mapfile + _last_mapfile = mapfile return m + def _get_map_obj(self, mapfile): + while not _map_objs_precreated.empty(): + try: + mf, m = _map_objs_precreated.get() + except queue.Empty: + break + if mf == mapfile: + return m + return self._create_map_obj(mapfile) + def map_obj(self, mapfile): + # avoid concurrent cache filling + self._restart_idle_timer() # cache loaded map objects # only works when a single proc/thread accesses the map # (forking the render process doesn't work because of open database @@ -114,7 +165,7 @@ def map_obj(self, mapfile): process_id = multiprocessing.current_process()._identity cachekey = (process_id, thread_id, mapfile) if cachekey not in _map_objs: - _map_objs[cachekey] = self._create_map_obj(mapfile) + _map_objs[cachekey] = self._get_map_obj(mapfile) # clean up no longer used cached maps process_cache_keys = [k for k in _map_objs.keys() @@ -131,6 +182,7 @@ def map_obj(self, mapfile): m.remove_all() # cleanup mapnik.clear_cache() + self._restart_idle_timer() return _map_objs[cachekey] def render_mapfile(self, mapfile, query): From e4702a7de3861df2f1b107f00861f2f5d5466bb9 Mon Sep 17 00:00:00 2001 From: babenhauserheide Date: Fri, 5 Apr 2019 09:52:42 +0200 Subject: [PATCH 043/209] Revert "prepare mapnik Map objects during idle time" This reverts commit e58fdeb249c8336bbf086f6a8f243c9dabba8ad9. --- mapproxy/source/mapnik.py | 54 +-------------------------------------- 1 file changed, 1 insertion(+), 53 deletions(-) diff --git a/mapproxy/source/mapnik.py b/mapproxy/source/mapnik.py index 2c0bd7b04..25f74743e 100644 --- a/mapproxy/source/mapnik.py +++ b/mapproxy/source/mapnik.py @@ -17,8 +17,6 @@ import sys import time -import queue -import random import threading import multiprocessing @@ -64,46 +62,11 @@ def __init__(self, mapfile, layers=None, image_opts=None, coverage=None, # global objects to support multiprocessing global _map_objs _map_objs = {} - global _last_activity - _last_activity = time.time() self._cache_map_obj = reuse_map_objects if self.coverage: self.extent = MapExtent(self.coverage.bbox, self.coverage.srs) else: self.extent = DefaultMapExtent() - # pre-created mapfiles for higher reactivity - global _last_mapfile - _last_mapfile = None - # pre-create more maps than the typical number of threads to allow for fast start - global _map_objs_precreated - if self._cache_map_obj: - _precreate_count = 1 - else: - _precreate_count = (2 * concurrent_tile_creators if concurrent_tile_creators else 4) # 4 is the default for async_.ThreadPool - _map_objs_precreated = queue.Queue(_precreate_count) - self.map_obj_pre_creating_thread = threading.Thread(target=self._precreate_maps) - self.map_obj_pre_creating_thread.daemon = True - self.map_obj_pre_creating_thread.start() - - def _idle(self): - return time.time() > _last_activity + 30 - - def _restart_idle_timer(self): - global _last_activity - _last_activity = time.time() - - def _precreate_maps(self): - while True: - mapfile = _last_mapfile - if mapfile is None or _map_objs_precreated.full(): - time.sleep(60 * random.random()) # randomized wait to avoid multiprocessing issues - continue - if not self._idle(): - time.sleep(10 * random.random()) - continue - _map_objs_precreated.put((mapfile, self._create_map_obj(mapfile))) - # prefer creating currently needed maps to filling the cache - time.sleep(5 + (10 * random.random())) def get_map(self, query): if self.res_range and not self.res_range.contains(query.bbox, query.size, @@ -136,23 +99,9 @@ def render(self, query): def _create_map_obj(self, mapfile): m = mapnik.Map(0, 0) mapnik.load_map(m, str(mapfile)) - global _last_mapfile - _last_mapfile = mapfile return m - def _get_map_obj(self, mapfile): - while not _map_objs_precreated.empty(): - try: - mf, m = _map_objs_precreated.get() - except queue.Empty: - break - if mf == mapfile: - return m - return self._create_map_obj(mapfile) - def map_obj(self, mapfile): - # avoid concurrent cache filling - self._restart_idle_timer() # cache loaded map objects # only works when a single proc/thread accesses the map # (forking the render process doesn't work because of open database @@ -165,7 +114,7 @@ def map_obj(self, mapfile): process_id = multiprocessing.current_process()._identity cachekey = (process_id, thread_id, mapfile) if cachekey not in _map_objs: - _map_objs[cachekey] = self._get_map_obj(mapfile) + _map_objs[cachekey] = self._create_map_obj(mapfile) # clean up no longer used cached maps process_cache_keys = [k for k in _map_objs.keys() @@ -182,7 +131,6 @@ def map_obj(self, mapfile): m.remove_all() # cleanup mapnik.clear_cache() - self._restart_idle_timer() return _map_objs[cachekey] def render_mapfile(self, mapfile, query): From c336a81d852582d759a3997e895fcafe4c31744b Mon Sep 17 00:00:00 2001 From: Arne Babenhauserheide Date: Fri, 12 Apr 2019 15:38:30 +0200 Subject: [PATCH 044/209] clearer comments and using the lock again --- mapproxy/source/mapnik.py | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/mapproxy/source/mapnik.py b/mapproxy/source/mapnik.py index 25f74743e..a1c504de6 100644 --- a/mapproxy/source/mapnik.py +++ b/mapproxy/source/mapnik.py @@ -59,9 +59,11 @@ def __init__(self, mapfile, layers=None, image_opts=None, coverage=None, self.layers = set(layers) if layers else None self.scale_factor = scale_factor self.lock = lock - # global objects to support multiprocessing + # global objects allow caching over multiple instances within the same worker process global _map_objs _map_objs = {} + global _map_objs_lock + _map_objs_lock = threading.Lock() self._cache_map_obj = reuse_map_objects if self.coverage: self.extent = MapExtent(self.coverage.bbox, self.coverage.srs) @@ -108,30 +110,38 @@ def map_obj(self, mapfile): # file handles that gets passed to the child) # segment the cache by process and thread to avoid interference if self._cache_map_obj: - cachekey = None # renderd guarantees that there are no concurrency issues + # all MapnikSources with the same mapfile share the same Mapnik Map. + cachekey = (None, None, mapfile) else: thread_id = threading.current_thread().ident process_id = multiprocessing.current_process()._identity cachekey = (process_id, thread_id, mapfile) - if cachekey not in _map_objs: - _map_objs[cachekey] = self._create_map_obj(mapfile) + with _map_objs_lock: + if cachekey not in _map_objs: + _map_objs[cachekey] = self._create_map_obj(mapfile) + mapnik_map = _map_objs[cachekey] # clean up no longer used cached maps process_cache_keys = [k for k in _map_objs.keys() if k[0] == process_id] + # To avoid time-consuming cleanup whenever one thread in the + # threadpool finishes, allow ignoring up to 5 dead mapnik + # instances. (5 is empirical) if len(process_cache_keys) > (5 + threading.active_count()): active_thread_ids = set(i.ident for i in threading.enumerate()) for k in process_cache_keys: - if not k[1] in active_thread_ids and k in _map_objs: - try: - m = _map_objs[k] - del _map_objs[k] - except KeyError: - continue - m.remove_all() # cleanup - mapnik.clear_cache() - - return _map_objs[cachekey] + with _map_objs_lock: + if not k[1] in active_thread_ids and k in _map_objs: + try: + m = _map_objs[k] + del _map_objs[k] + except KeyError: + continue + # cleanup + m.remove_all() + mapnik.clear_cache() + + return mapnik_map def render_mapfile(self, mapfile, query): return run_non_blocking(self._render_mapfile, (mapfile, query)) From dfc76374e096c03f9c04a434a6c6afa41342d5c3 Mon Sep 17 00:00:00 2001 From: Arne Babenhauserheide Date: Fri, 12 Apr 2019 15:43:24 +0200 Subject: [PATCH 045/209] remove concurrent_tile_creators which was only used for pre-creating tiles --- mapproxy/config/loader.py | 6 +----- mapproxy/source/mapnik.py | 3 +-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/mapproxy/config/loader.py b/mapproxy/config/loader.py index 05743b2fd..bdb2522a9 100644 --- a/mapproxy/config/loader.py +++ b/mapproxy/config/loader.py @@ -952,13 +952,9 @@ def source(self, params=None): else: reuse_map_objects = False - concurrent_tile_creators = self.context.globals.get_value('concurrent_tile_creators', self.conf, - global_key='cache.concurrent_tile_creators') - return MapnikSource(mapfile, layers=layers, image_opts=image_opts, coverage=coverage, res_range=res_range, lock=lock, - reuse_map_objects=reuse_map_objects, scale_factor=scale_factor, - concurrent_tile_creators=concurrent_tile_creators) + reuse_map_objects=reuse_map_objects, scale_factor=scale_factor) class TileSourceConfiguration(SourceConfiguration): supports_meta_tiles = False diff --git a/mapproxy/source/mapnik.py b/mapproxy/source/mapnik.py index a1c504de6..5ddc943da 100644 --- a/mapproxy/source/mapnik.py +++ b/mapproxy/source/mapnik.py @@ -50,8 +50,7 @@ class MapnikSource(MapLayer): supports_meta_tiles = True def __init__(self, mapfile, layers=None, image_opts=None, coverage=None, - res_range=None, lock=None, reuse_map_objects=False, scale_factor=None, - concurrent_tile_creators=None): + res_range=None, lock=None, reuse_map_objects=False, scale_factor=None): MapLayer.__init__(self, image_opts=image_opts) self.mapfile = mapfile self.coverage = coverage From e02fee4f6d29e7f392889e47b23d427b1734067d Mon Sep 17 00:00:00 2001 From: babenhauserheide Date: Thu, 13 Jun 2019 18:36:47 +0200 Subject: [PATCH 046/209] keep a queue per mapfile of up to 10 maps --- mapproxy/source/mapnik.py | 41 ++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/mapproxy/source/mapnik.py b/mapproxy/source/mapnik.py index 5ddc943da..e6ba4213e 100644 --- a/mapproxy/source/mapnik.py +++ b/mapproxy/source/mapnik.py @@ -40,6 +40,16 @@ except ImportError: mapnik = None +try: + import queue.Queue as Queue + import queue.Empty as Empty + import queue.Full as Full +except ImportError: # in python2 it is called Queue + import Queue + import Queue.Empty as Empty + import Queue.Full as Full +MAX_UNUSED_MAPS=10 + # fake 2.0 API for older versions if mapnik and not hasattr(mapnik, 'Box2d'): mapnik.Box2d = mapnik.Envelope @@ -59,10 +69,12 @@ def __init__(self, mapfile, layers=None, image_opts=None, coverage=None, self.scale_factor = scale_factor self.lock = lock # global objects allow caching over multiple instances within the same worker process - global _map_objs + global _map_objs # mapnik map objects by cachekey _map_objs = {} global _map_objs_lock _map_objs_lock = threading.Lock() + global _map_objs_queues # queues of unused mapnik map objects by mapfile + _map_objs_queues = {} self._cache_map_obj = reuse_map_objects if self.coverage: self.extent = MapExtent(self.coverage.bbox, self.coverage.srs) @@ -102,6 +114,24 @@ def _create_map_obj(self, mapfile): mapnik.load_map(m, str(mapfile)) return m + def _get_map_obj(self, mapfile): + if mapfile in self._map_objs_queues: + try: + return self._map_objs_queues[mapfile].get_nowait() + except Empty: + pass + return _create_map_obj(self, mapfile) + + def _put_unused_map_obj(self, mapfile, m): + if not mapfile in self._map_objs_queues: + self._map_objs_queues[mapfile] = new Queue(MAX_UNUSED_MAPS) + try: + self._map_objs_queues[mapfile].put_nowait(m) + except Full: + # cleanup the data and drop the map, so it can be garbage collected + m.remove_all() + mapnik.clear_cache() + def map_obj(self, mapfile): # cache loaded map objects # only works when a single proc/thread accesses the map @@ -117,7 +147,7 @@ def map_obj(self, mapfile): cachekey = (process_id, thread_id, mapfile) with _map_objs_lock: if cachekey not in _map_objs: - _map_objs[cachekey] = self._create_map_obj(mapfile) + _map_objs[cachekey] = self._get_map_obj(mapfile) mapnik_map = _map_objs[cachekey] # clean up no longer used cached maps @@ -134,11 +164,12 @@ def map_obj(self, mapfile): try: m = _map_objs[k] del _map_objs[k] + # put the map into the queue of unused + # maps so it can be re-used from another + # thread. + self._put_unused_map_obj(mapfile, m) except KeyError: continue - # cleanup - m.remove_all() - mapnik.clear_cache() return mapnik_map From 09983607f9babcc876294bed4817b3dc1288303c Mon Sep 17 00:00:00 2001 From: babenhauserheide Date: Thu, 13 Jun 2019 18:42:59 +0200 Subject: [PATCH 047/209] mapnik: identify the queues by PID and mapfile --- mapproxy/source/mapnik.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/mapproxy/source/mapnik.py b/mapproxy/source/mapnik.py index e6ba4213e..377c7a266 100644 --- a/mapproxy/source/mapnik.py +++ b/mapproxy/source/mapnik.py @@ -73,7 +73,7 @@ def __init__(self, mapfile, layers=None, image_opts=None, coverage=None, _map_objs = {} global _map_objs_lock _map_objs_lock = threading.Lock() - global _map_objs_queues # queues of unused mapnik map objects by mapfile + global _map_objs_queues # queues of unused mapnik map objects by PID and mapfile _map_objs_queues = {} self._cache_map_obj = reuse_map_objects if self.coverage: @@ -115,18 +115,22 @@ def _create_map_obj(self, mapfile): return m def _get_map_obj(self, mapfile): - if mapfile in self._map_objs_queues: + process_id = multiprocessing.current_process()._identity + queue_cachekey = (process_id, mapfile) + if queue_cachekey in self._map_objs_queues: try: - return self._map_objs_queues[mapfile].get_nowait() + return self._map_objs_queues[queue_cachekey].get_nowait() except Empty: pass return _create_map_obj(self, mapfile) def _put_unused_map_obj(self, mapfile, m): - if not mapfile in self._map_objs_queues: - self._map_objs_queues[mapfile] = new Queue(MAX_UNUSED_MAPS) + process_id = multiprocessing.current_process()._identity + queue_cachekey = (process_id, mapfile) + if not queue_cachekey in self._map_objs_queues: + self._map_objs_queues[queue_cachekey] = new Queue(MAX_UNUSED_MAPS) try: - self._map_objs_queues[mapfile].put_nowait(m) + self._map_objs_queues[queue_cachekey].put_nowait(m) except Full: # cleanup the data and drop the map, so it can be garbage collected m.remove_all() From 4ec57e2ac4fdbbc6269c0ca8ae0cb4f2908e5b90 Mon Sep 17 00:00:00 2001 From: babenhauserheide Date: Thu, 13 Jun 2019 18:44:33 +0200 Subject: [PATCH 048/209] avoid java syntax --- mapproxy/source/mapnik.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapproxy/source/mapnik.py b/mapproxy/source/mapnik.py index 377c7a266..bdd895bf7 100644 --- a/mapproxy/source/mapnik.py +++ b/mapproxy/source/mapnik.py @@ -128,7 +128,7 @@ def _put_unused_map_obj(self, mapfile, m): process_id = multiprocessing.current_process()._identity queue_cachekey = (process_id, mapfile) if not queue_cachekey in self._map_objs_queues: - self._map_objs_queues[queue_cachekey] = new Queue(MAX_UNUSED_MAPS) + self._map_objs_queues[queue_cachekey] = Queue(MAX_UNUSED_MAPS) try: self._map_objs_queues[queue_cachekey].put_nowait(m) except Full: From 4003f1c52c4478ced6a6e7d8b8f2966f14b013ad Mon Sep 17 00:00:00 2001 From: babenhauserheide Date: Thu, 13 Jun 2019 18:46:03 +0200 Subject: [PATCH 049/209] fix imports --- mapproxy/source/mapnik.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mapproxy/source/mapnik.py b/mapproxy/source/mapnik.py index bdd895bf7..41f35da6a 100644 --- a/mapproxy/source/mapnik.py +++ b/mapproxy/source/mapnik.py @@ -41,9 +41,12 @@ mapnik = None try: - import queue.Queue as Queue - import queue.Empty as Empty - import queue.Full as Full + import queue + import queue + import queue + Queue = queue.Queue + Empty = queue.Empty + Full = queue.Full except ImportError: # in python2 it is called Queue import Queue import Queue.Empty as Empty From 7bcabcae2cdf9cfc3735571e7fb41a94e08296aa Mon Sep 17 00:00:00 2001 From: babenhauserheide Date: Thu, 13 Jun 2019 18:49:32 +0200 Subject: [PATCH 050/209] global is global --- mapproxy/source/mapnik.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mapproxy/source/mapnik.py b/mapproxy/source/mapnik.py index 41f35da6a..4f226a7ea 100644 --- a/mapproxy/source/mapnik.py +++ b/mapproxy/source/mapnik.py @@ -120,9 +120,9 @@ def _create_map_obj(self, mapfile): def _get_map_obj(self, mapfile): process_id = multiprocessing.current_process()._identity queue_cachekey = (process_id, mapfile) - if queue_cachekey in self._map_objs_queues: + if queue_cachekey in _map_objs_queues: try: - return self._map_objs_queues[queue_cachekey].get_nowait() + return _map_objs_queues[queue_cachekey].get_nowait() except Empty: pass return _create_map_obj(self, mapfile) @@ -130,10 +130,10 @@ def _get_map_obj(self, mapfile): def _put_unused_map_obj(self, mapfile, m): process_id = multiprocessing.current_process()._identity queue_cachekey = (process_id, mapfile) - if not queue_cachekey in self._map_objs_queues: - self._map_objs_queues[queue_cachekey] = Queue(MAX_UNUSED_MAPS) + if not queue_cachekey in _map_objs_queues: + _map_objs_queues[queue_cachekey] = Queue(MAX_UNUSED_MAPS) try: - self._map_objs_queues[queue_cachekey].put_nowait(m) + _map_objs_queues[queue_cachekey].put_nowait(m) except Full: # cleanup the data and drop the map, so it can be garbage collected m.remove_all() From 5dc8b9eccf5cab2eb9eb323f8a520229b07cf8a2 Mon Sep 17 00:00:00 2001 From: babenhauserheide Date: Thu, 13 Jun 2019 18:50:06 +0200 Subject: [PATCH 051/209] self --- mapproxy/source/mapnik.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapproxy/source/mapnik.py b/mapproxy/source/mapnik.py index 4f226a7ea..45ce376af 100644 --- a/mapproxy/source/mapnik.py +++ b/mapproxy/source/mapnik.py @@ -125,7 +125,7 @@ def _get_map_obj(self, mapfile): return _map_objs_queues[queue_cachekey].get_nowait() except Empty: pass - return _create_map_obj(self, mapfile) + return self._create_map_obj(self, mapfile) def _put_unused_map_obj(self, mapfile, m): process_id = multiprocessing.current_process()._identity From b3a84d0cd7007c9bf485aceed2bfc9bc7706a41e Mon Sep 17 00:00:00 2001 From: babenhauserheide Date: Thu, 13 Jun 2019 18:50:58 +0200 Subject: [PATCH 052/209] self --- mapproxy/source/mapnik.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapproxy/source/mapnik.py b/mapproxy/source/mapnik.py index 45ce376af..2f407842a 100644 --- a/mapproxy/source/mapnik.py +++ b/mapproxy/source/mapnik.py @@ -125,7 +125,7 @@ def _get_map_obj(self, mapfile): return _map_objs_queues[queue_cachekey].get_nowait() except Empty: pass - return self._create_map_obj(self, mapfile) + return self._create_map_obj(mapfile) def _put_unused_map_obj(self, mapfile, m): process_id = multiprocessing.current_process()._identity From 6d271199289f7de71ad02ae2a6c97b5a879e0fc4 Mon Sep 17 00:00:00 2001 From: babenhauserheide Date: Thu, 13 Jun 2019 18:56:58 +0200 Subject: [PATCH 053/209] fix py2 --- mapproxy/source/mapnik.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mapproxy/source/mapnik.py b/mapproxy/source/mapnik.py index 2f407842a..d6461ae19 100644 --- a/mapproxy/source/mapnik.py +++ b/mapproxy/source/mapnik.py @@ -49,8 +49,8 @@ Full = queue.Full except ImportError: # in python2 it is called Queue import Queue - import Queue.Empty as Empty - import Queue.Full as Full + Empty = Queue.Empty + Full = Queue.Full MAX_UNUSED_MAPS=10 # fake 2.0 API for older versions From cba92d31f3478718d0acc8db136aeafc001bbd9a Mon Sep 17 00:00:00 2001 From: babenhauserheide Date: Thu, 13 Jun 2019 23:30:02 +0200 Subject: [PATCH 054/209] import only once --- mapproxy/source/mapnik.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/mapproxy/source/mapnik.py b/mapproxy/source/mapnik.py index d6461ae19..6922dd795 100644 --- a/mapproxy/source/mapnik.py +++ b/mapproxy/source/mapnik.py @@ -41,8 +41,6 @@ mapnik = None try: - import queue - import queue import queue Queue = queue.Queue Empty = queue.Empty From 20bb15e9015bb6da2830e4909aa53383b2450150 Mon Sep 17 00:00:00 2001 From: babenhauserheide Date: Fri, 26 Jul 2019 07:06:37 +0200 Subject: [PATCH 055/209] added a safeguard to ensure that mapnik map_obj cannot move between processes --- mapproxy/source/mapnik.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/mapproxy/source/mapnik.py b/mapproxy/source/mapnik.py index 6922dd795..23117af82 100644 --- a/mapproxy/source/mapnik.py +++ b/mapproxy/source/mapnik.py @@ -110,9 +110,10 @@ def render(self, query): else: return self.render_mapfile(mapfile, query) - def _create_map_obj(self, mapfile): + def _create_map_obj(self, mapfile, process_id): m = mapnik.Map(0, 0) mapnik.load_map(m, str(mapfile)) + m.map_obj_pid = process_id return m def _get_map_obj(self, mapfile): @@ -120,10 +121,14 @@ def _get_map_obj(self, mapfile): queue_cachekey = (process_id, mapfile) if queue_cachekey in _map_objs_queues: try: - return _map_objs_queues[queue_cachekey].get_nowait() + m = _map_objs_queues[queue_cachekey].get_nowait() + # check explicitly for the process ID to ensure that + # map objects cannot move between processes + if m.map_object_pid == process_id: + return m except Empty: pass - return self._create_map_obj(mapfile) + return self._create_map_obj(mapfile, process_id) def _put_unused_map_obj(self, mapfile, m): process_id = multiprocessing.current_process()._identity From 0624c565a492242b419f0e5aa2245c10baf4ffe3 Mon Sep 17 00:00:00 2001 From: babenhauserheide Date: Tue, 17 Jan 2023 18:41:35 +0100 Subject: [PATCH 056/209] mapnik: Separate multithreading code behind the multithreaded option --- doc/sources.rst | 2 + mapproxy/config/loader.py | 4 +- mapproxy/config/spec.py | 1 + mapproxy/source/mapnik.py | 97 +++++++++++++------ .../test/system/fixture/mapnik_source.yaml | 11 +++ 5 files changed, 84 insertions(+), 31 deletions(-) diff --git a/doc/sources.rst b/doc/sources.rst index 775469a03..fbe3fac75 100644 --- a/doc/sources.rst +++ b/doc/sources.rst @@ -602,6 +602,8 @@ Other options The Mapnik source also supports the ``min_res``/``max_res``/``min_scale``/``max_scale``, ``concurrent_requests``, ``seed_only`` and ``coverage`` options. See :ref:`wms_label`. +Mapnik can be used in multithreading and multiprocessing operation by setting ``multithreaded: True``. This is only tested and safe *for seeding*. + Example configuration ^^^^^^^^^^^^^^^^^^^^^ diff --git a/mapproxy/config/loader.py b/mapproxy/config/loader.py index bdb2522a9..ab06fa4be 100644 --- a/mapproxy/config/loader.py +++ b/mapproxy/config/loader.py @@ -930,6 +930,7 @@ def source(self, params=None): res_range = resolution_range(self.conf) scale_factor = self.conf.get('scale_factor', None) + multithreaded = self.conf.get('multithreaded', False) layers = self.conf.get('layers', None) if isinstance(layers, string_type): @@ -954,7 +955,8 @@ def source(self, params=None): return MapnikSource(mapfile, layers=layers, image_opts=image_opts, coverage=coverage, res_range=res_range, lock=lock, - reuse_map_objects=reuse_map_objects, scale_factor=scale_factor) + reuse_map_objects=reuse_map_objects, scale_factor=scale_factor, + multithreaded=multithreaded) class TileSourceConfiguration(SourceConfiguration): supports_meta_tiles = False diff --git a/mapproxy/config/spec.py b/mapproxy/config/spec.py index 31d9ba11a..1d20d9440 100644 --- a/mapproxy/config/spec.py +++ b/mapproxy/config/spec.py @@ -552,6 +552,7 @@ def validate_options(conf_dict): 'layers': one_of(str(), [str()]), 'use_mapnik2': bool(), 'scale_factor': number(), + 'multithreaded': bool(), }), 'arcgis': combined(source_commons, { required('req'): { diff --git a/mapproxy/source/mapnik.py b/mapproxy/source/mapnik.py index 23117af82..be517dd99 100644 --- a/mapproxy/source/mapnik.py +++ b/mapproxy/source/mapnik.py @@ -61,7 +61,8 @@ class MapnikSource(MapLayer): supports_meta_tiles = True def __init__(self, mapfile, layers=None, image_opts=None, coverage=None, - res_range=None, lock=None, reuse_map_objects=False, scale_factor=None): + res_range=None, lock=None, reuse_map_objects=False, + scale_factor=None, multithreaded=False): MapLayer.__init__(self, image_opts=image_opts) self.mapfile = mapfile self.coverage = coverage @@ -69,18 +70,43 @@ def __init__(self, mapfile, layers=None, image_opts=None, coverage=None, self.layers = set(layers) if layers else None self.scale_factor = scale_factor self.lock = lock - # global objects allow caching over multiple instances within the same worker process - global _map_objs # mapnik map objects by cachekey - _map_objs = {} - global _map_objs_lock - _map_objs_lock = threading.Lock() - global _map_objs_queues # queues of unused mapnik map objects by PID and mapfile - _map_objs_queues = {} + self.multithreaded = multithreaded self._cache_map_obj = reuse_map_objects if self.coverage: self.extent = MapExtent(self.coverage.bbox, self.coverage.srs) else: self.extent = DefaultMapExtent() + if multithreaded: + # global objects allow caching over multiple instances within the same worker process + global _map_objs # mapnik map objects by cachekey + _map_objs = {} + global _map_objs_lock + _map_objs_lock = threading.Lock() + global _map_objs_queues # queues of unused mapnik map objects by PID and mapfile + _map_objs_queues = {} + else: + # instance variables guarantee separation of caches + self._map_objs = {} + self._map_objs_lock = threading.Lock() + + def _map_cache(self): + """Get the cache for map objects. + + Uses an instance variable for containment when multithreaded + operation is disabled. + """ + if self.multithreaded: + return _map_objs + return self._map_objs + def _map_cache_lock(self): + """Get the cache-locks for map objects. + + Uses an instance variable for containment when multithreaded + operation is disabled. + """ + if self.multithreaded: + return _map_objs_lock + return self._map_objs_lock def get_map(self, query): if self.res_range and not self.res_range.contains(query.bbox, query.size, @@ -117,6 +143,9 @@ def _create_map_obj(self, mapfile, process_id): return m def _get_map_obj(self, mapfile): + if not self.multithreaded: + return self._create_map_obj(mapfile, None) + process_id = multiprocessing.current_process()._identity queue_cachekey = (process_id, mapfile) if queue_cachekey in _map_objs_queues: @@ -142,26 +171,20 @@ def _put_unused_map_obj(self, mapfile, m): m.remove_all() mapnik.clear_cache() - def map_obj(self, mapfile): - # cache loaded map objects - # only works when a single proc/thread accesses the map - # (forking the render process doesn't work because of open database - # file handles that gets passed to the child) - # segment the cache by process and thread to avoid interference - if self._cache_map_obj: + def _get_cachekey(self, mapfile): + if not self.multithreaded or self._cache_map_obj: # all MapnikSources with the same mapfile share the same Mapnik Map. - cachekey = (None, None, mapfile) - else: - thread_id = threading.current_thread().ident - process_id = multiprocessing.current_process()._identity - cachekey = (process_id, thread_id, mapfile) - with _map_objs_lock: - if cachekey not in _map_objs: - _map_objs[cachekey] = self._get_map_obj(mapfile) - mapnik_map = _map_objs[cachekey] + return (None, None, mapfile) + thread_id = threading.current_thread().ident + process_id = multiprocessing.current_process()._identity + return (process_id, thread_id, mapfile) + def _cleanup_unused_cached_maps(self, mapfile): + if not self.multithreaded: + return # clean up no longer used cached maps - process_cache_keys = [k for k in _map_objs.keys() + process_id = multiprocessing.current_process()._identity + process_cache_keys = [k for k in self._map_cache().keys() if k[0] == process_id] # To avoid time-consuming cleanup whenever one thread in the # threadpool finishes, allow ignoring up to 5 dead mapnik @@ -169,11 +192,11 @@ def map_obj(self, mapfile): if len(process_cache_keys) > (5 + threading.active_count()): active_thread_ids = set(i.ident for i in threading.enumerate()) for k in process_cache_keys: - with _map_objs_lock: - if not k[1] in active_thread_ids and k in _map_objs: + with self._map_cache_lock(): + if not k[1] in active_thread_ids and k in self._map_cache(): try: - m = _map_objs[k] - del _map_objs[k] + m = self._map_cache()[k] + del self._map_cache()[k] # put the map into the queue of unused # maps so it can be re-used from another # thread. @@ -181,6 +204,20 @@ def map_obj(self, mapfile): except KeyError: continue + def map_obj(self, mapfile): + # cache loaded map objects + # only works when a single proc/thread accesses the map + # (forking the render process doesn't work because of open database + # file handles that gets passed to the child) + # segment the cache by process and thread to avoid interference + cachekey = self._get_cachekey(mapfile) + with self._map_cache_lock(): + if cachekey not in self._map_cache(): + self._map_cache()[cachekey] = self._get_map_obj(mapfile) + mapnik_map = self._map_cache()[cachekey] + + self._cleanup_unused_cached_maps(mapfile) + return mapnik_map def render_mapfile(self, mapfile, query): @@ -200,7 +237,7 @@ def _render_mapfile(self, mapfile, query): if self.layers: i = 0 for layer in m.layers[:]: - if layer.name != 'Unkown' and layer.name not in self.layers: + if layer.name != 'Unknown' and layer.name not in self.layers: del m.layers[i] else: i += 1 diff --git a/mapproxy/test/system/fixture/mapnik_source.yaml b/mapproxy/test/system/fixture/mapnik_source.yaml index a6f2c8938..c9972b27f 100644 --- a/mapproxy/test/system/fixture/mapnik_source.yaml +++ b/mapproxy/test/system/fixture/mapnik_source.yaml @@ -5,6 +5,9 @@ layers: - name: mapnik title: Mapnik Source sources: [mapnik] + - name: mapnik_seed + title: Mapnik Seed + sources: [mapnik_seed] - name: mapnik_hq title: Mapnik Source with scale-factor 2 sources: [mapnik_hq] @@ -27,6 +30,14 @@ sources: bbox: [-170, -80, 180, 90] bbox_srs: 'EPSG:4326' + mapnik_seed: + type: mapnik + mapfile: ./mapnik.xml + coverage: + bbox: [-170, -80, 180, 90] + bbox_srs: 'EPSG:4326' + multithreaded: True + mapnik_hq: type: mapnik mapfile: ./mapnik.xml From 21956310592d9d85808737d4ca9805e66f6b7fcf Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Thu, 19 Jan 2023 17:01:25 +0100 Subject: [PATCH 057/209] skip encoding test for python 2 --- mapproxy/test/unit/test_featureinfo.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mapproxy/test/unit/test_featureinfo.py b/mapproxy/test/unit/test_featureinfo.py index 157be62b4..a127be5e4 100644 --- a/mapproxy/test/unit/test_featureinfo.py +++ b/mapproxy/test/unit/test_featureinfo.py @@ -15,7 +15,9 @@ # limitations under the License. import os +import sys import tempfile +import pytest from lxml import etree, html @@ -96,6 +98,7 @@ def test_as_etree(self): doc = XMLFeatureInfoDoc("hello") assert doc.as_etree().getroot().text == "hello" + @pytest.mark.skipif(sys.version_info < (3, 0), reason="test skipped for python 2") def test_umlauts(self): doc = XMLFeatureInfoDoc('öäüß') assert doc.as_etree().getroot().text == 'öäüß' From 6605fd340298d5642b24e46da122edbf66b9c390 Mon Sep 17 00:00:00 2001 From: rkettelerij Date: Thu, 17 Nov 2022 16:07:28 +0100 Subject: [PATCH 058/209] Add support for Azure Blob storage as cache --- .github/workflows/test.yml | 7 +- doc/caches.rst | 72 ++++++++- mapproxy/cache/azureblob.py | 140 ++++++++++++++++++ mapproxy/config/loader.py | 35 ++++- mapproxy/config/spec.py | 11 ++ .../test/system/fixture/cache_azureblob.yaml | 59 ++++++++ mapproxy/test/system/test_cache_azureblob.py | 120 +++++++++++++++ mapproxy/test/unit/test_cache_azureblob.py | 95 ++++++++++++ requirements-tests.txt | 1 + 9 files changed, 535 insertions(+), 5 deletions(-) create mode 100644 mapproxy/cache/azureblob.py create mode 100644 mapproxy/test/system/fixture/cache_azureblob.yaml create mode 100644 mapproxy/test/system/test_cache_azureblob.py create mode 100644 mapproxy/test/unit/test_cache_azureblob.py diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ebcf3df42..df16592fa 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,7 +26,11 @@ jobs: ports: - 8087:8087 - 8098:8098 - + azure-blob: + image: mcr.microsoft.com/azure-storage/azurite + ports: + - 10000:10000 + strategy: matrix: python-version: [2.7, 3.6, 3.7, 3.8, 3.9, "3.10"] @@ -36,6 +40,7 @@ jobs: MAPPROXY_TEST_REDIS: '127.0.0.1:6379' MAPPROXY_TEST_RIAK_HTTP: 'http://localhost:8098' MAPPROXY_TEST_RIAK_PBC: 'pbc://localhost:8087' + MAPPROXY_TEST_AZURE_BLOB: 'http://localhost:10000' # do not load /etc/boto.cfg with Python 3 incompatible plugin # https://github.com/travis-ci/travis-ci/issues/5246#issuecomment-166460882 BOTO_CONFIG: '/doesnotexist' diff --git a/doc/caches.rst b/doc/caches.rst index da13084ad..cf7da2c44 100644 --- a/doc/caches.rst +++ b/doc/caches.rst @@ -35,6 +35,7 @@ The following backend types are available. - :ref:`cache_riak` - :ref:`cache_redis` - :ref:`cache_s3` +- :ref:`cache_azureblob` - :ref:`cache_compact` .. _cache_file: @@ -494,7 +495,7 @@ Example profile_name: default -Example usage with DigitalOcean Spaces +Example usage with DigitalOcean Spaces -------------------------------------- :: @@ -515,6 +516,75 @@ Example usage with DigitalOcean Spaces endpoint_url: https://nyc3.digitaloceanspaces.com access_control_list: public-read +.. _cache_azureblob: + +``azureblob`` +====== + +.. versionadded:: to be released + +Store tiles in `Azure Blob Storage `_, Microsoft's object storage solution for the cloud. + + +Requirements +------------ + +You will need the `azure-storage-blob `_ package. You can install it in the usual way, for example with ``pip install azure-storage-blob``. + +Configuration +------------- + +Available options: + +``container_name``: + The blob container used for this cache. You can set the default container with ``globals.cache.azureblob.container_name``. + +``connection_string``: + Credentials/url to connect and authenticate against Azure Blob storage. You can set the default connection_string with ``globals.cache.azureblob.connection_string`` or + using the ``AZURE_STORAGE_CONNECTION_STRING`` environment variable. There are several ways to + `authenticate against Azure Blob storage `_: + +- Using the storage account key. This connection string can also found in the Azure Portal under the "Access Keys" section. For example: + +:: + + "DefaultEndpointsProtocol=https;AccountName=my-storage-account;AccountKey=my-key" + +- Using a SAS token. For example: + +:: + + "BlobEndpoint=https://my-storage-account.blob.core.windows.net;SharedAccessSignature=sv=2015-04-05&sr=b&si=tutorial-policy-635959936145100803&sig=9aCzs76n0E7y5BpEi2GvsSv433BZa22leDOZXX%2BXXIU%3D" + +- Using a local Azurite emulator, this is for TESTING purposes only. For example, using the default Azurite account: + +:: + + "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://localhost:10000/devstoreaccount1" + +``directory``: + Base directory (path) where all tiles are stored. + +``directory_layout``: + Defines the directory layout for the tiles (``12/12345/67890.png``, ``L12/R00010932/C00003039.png``, etc.). See :ref:`cache_file` for available options. Defaults to ``tms`` (e.g. ``12/12345/67890.png``). This cache cache also supports ``reverse_tms`` where tiles are stored as ``y/x/z.format``. + +Example +------- + +:: + + cache: + my_layer_20110501_epsg_4326_cache_out: + sources: [my_layer_20110501_cache] + cache: + type: azureblob + directory: /1.0.0/my_layer/default/20110501/4326/ + container_name: my-azureblob-tiles-cache + + globals: + cache: + azureblob: + connection_string: "DefaultEndpointsProtocol=https;AccountName=xxxx;AccountKey=xxxx" .. _cache_compact: diff --git a/mapproxy/cache/azureblob.py b/mapproxy/cache/azureblob.py new file mode 100644 index 000000000..7859f3b80 --- /dev/null +++ b/mapproxy/cache/azureblob.py @@ -0,0 +1,140 @@ +# This file is part of the MapProxy project. +# Copyright (C) 2022 Omniscale +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import calendar +import hashlib +from io import BytesIO + +from mapproxy.cache import path +from mapproxy.cache.base import tile_buffer, TileCacheBase +from mapproxy.image import ImageSource +from mapproxy.util import async_ + +try: + from azure.storage.blob import BlobServiceClient, ContentSettings + from azure.core.exceptions import AzureError +except ImportError: + BlobServiceClient = None + ContentSettings = None + AzureError = None + +import logging +log = logging.getLogger('mapproxy.cache.azureblob') + + +def azure_container_client(connection_string, container_name): + client = BlobServiceClient.from_connection_string(connection_string) + return client.get_container_client(container_name) + + +class AzureBlobConnectionError(Exception): + pass + + +class AzureBlobCache(TileCacheBase): + + def __init__(self, base_path, file_ext, directory_layout='tms', container_name='mapproxy', + _concurrent_writer=4, _concurrent_reader=4, connection_string=None): + super(AzureBlobCache, self).__init__() + if BlobServiceClient is None: + raise ImportError("Azure Blob Cache requires 'azure-storage-blob' package") + + self.lock_cache_id = 'azureblob-' + hashlib.md5(base_path.encode('utf-8') + + container_name.encode('utf-8')).hexdigest() + + self.container_client = azure_container_client(connection_string, container_name) + if not self.container_client.exists(): + raise AzureBlobConnectionError('Blob container %s does not exist' % container_name) + + self.base_path = base_path + self.file_ext = file_ext + self._concurrent_writer = _concurrent_writer + self._concurrent_reader = _concurrent_reader + self._tile_location, _ = path.location_funcs(layout=directory_layout) + + def tile_key(self, tile): + return self._tile_location(tile, self.base_path, self.file_ext).lstrip('/') + + def load_tile_metadata(self, tile, dimensions=None): + if tile.timestamp: + return + self.is_cached(tile, dimensions=dimensions) + + @staticmethod + def _set_metadata(properties, tile): + tile.timestamp = calendar.timegm(properties.last_modified.timetuple()) + tile.size = properties.size + + def is_cached(self, tile, dimensions=None): + if tile.is_missing(): + key = self.tile_key(tile) + blob = self.container_client.get_blob_client(key) + if not blob.exists(): + return False + else: + self._set_metadata(blob.get_blob_properties(), tile) + + return True + + def load_tiles(self, tiles, with_metadata=True, dimensions=None): + p = async_.Pool(min(self._concurrent_reader, len(tiles))) + return all(p.map(self.load_tile, tiles)) + + def load_tile(self, tile, with_metadata=True, dimensions=None): + if not tile.cacheable: + return False + + if not tile.is_missing(): + return True + + key = self.tile_key(tile) + log.debug('AzureBlob:load_tile, loading key: %s' % key) + + try: + r = self.container_client.download_blob(key) + self._set_metadata(r.properties, tile) + tile.source = ImageSource(BytesIO(r.readall())) + except AzureError as e: + log.debug("AzureBlob:load_tile unable to load key: %s" % key, e) + tile.source = None + return False + + log.debug("AzureBlob:load_tile loaded key: %s" % key) + return True + + def remove_tile(self, tile, dimensions=None): + key = self.tile_key(tile) + log.debug('remove_tile, key: %s' % key) + self.container_client.delete_blob(key) + + def store_tiles(self, tiles, dimensions=None): + p = async_.Pool(min(self._concurrent_writer, len(tiles))) + p.map(self.store_tile, tiles) + + def store_tile(self, tile, dimensions=None): + if tile.stored: + return + + key = self.tile_key(tile) + log.debug('AzureBlob: store_tile, key: %s' % key) + + with tile_buffer(tile) as buf: + content_settings = ContentSettings(content_type='image/' + self.file_ext) + self.container_client.upload_blob( + name=key, + data=buf, + overwrite=True, + content_settings=content_settings) diff --git a/mapproxy/config/loader.py b/mapproxy/config/loader.py index 179408a4e..5ed7e1abb 100644 --- a/mapproxy/config/loader.py +++ b/mapproxy/config/loader.py @@ -1163,6 +1163,35 @@ def _geopackage_cache(self, grid_conf, file_ext): gpkg_file_path, grid_conf.tile_grid(), table_name ) + def _azureblob_cache(self, grid_conf, file_ext): + from mapproxy.cache.azureblob import AzureBlobCache + + container_name = self.context.globals.get_value('cache.container_name', self.conf, + global_key='cache.azureblob.container_name') + + if not container_name: + raise ConfigurationError("no container_name configured for Azure Blob cache %s" % self.conf['name']) + + connection_string = os.getenv("AZURE_STORAGE_CONNECTION_STRING", self.context.globals.get_value( + 'cache.connection_string', self.conf, global_key='cache.azureblob.connection_string')) + + if not connection_string: + raise ConfigurationError("no connection_string configured for Azure Blob cache %s" % self.conf['name']) + + directory_layout = self.conf['cache'].get('directory_layout', 'tms') + + base_path = self.conf['cache'].get('directory', None) + if base_path is None: + base_path = os.path.join(self.conf['name'], grid_conf.tile_grid().name) + + return AzureBlobCache( + base_path=base_path, + file_ext=file_ext, + directory_layout=directory_layout, + container_name=container_name, + connection_string=connection_string + ) + def _s3_cache(self, grid_conf, file_ext): from mapproxy.cache.s3 import S3Cache @@ -1773,7 +1802,7 @@ def dimensions(self): values = raw_values[0].strip().split('/') else: values = [str(val) for val in conf.get('values', ['default'])] - + default = conf.get('default', values[-1]) dimensions[dimension.lower()] = Dimension(dimension, values, default=default) return dimensions @@ -1822,7 +1851,7 @@ def tile_layers(self, grid_name_as_path=False): fi_source = self.context.sources[fi_source_name].fi_source() if fi_source: fi_sources.append(fi_source) - + for grid, extent, cache_source in self.context.caches[cache_name].caches(): disable_storage = self.context.configuration['caches'][cache_name].get('disable_storage', False) if disable_storage: @@ -2203,7 +2232,7 @@ def load_configuration_file(files, working_dir): imported_dict = load_configuration_file(base_files, current_working_dir) current_dict = merge_dict(current_dict, imported_dict) conf_dict = merge_dict(conf_dict, current_dict) - + return conf_dict def merge_dict(conf, base): diff --git a/mapproxy/config/spec.py b/mapproxy/config/spec.py index 31d9ba11a..224623879 100644 --- a/mapproxy/config/spec.py +++ b/mapproxy/config/spec.py @@ -183,6 +183,13 @@ def validate_options(conf_dict): required('version'): number(), 'tile_lock_dir': str(), }, + 'azureblob': { + 'connection_string': str(), + 'container_name': str(), + 'directory_layout': str(), + 'directory': str(), + 'tile_lock_dir': str(), + }, } on_error = { @@ -388,6 +395,10 @@ def validate_options(conf_dict): 'region_name': str(), 'endpoint_url': str(), }, + 'azureblob': { + 'connection_string': str(), + 'container_name': str(), + }, }, 'grid': { 'tile_size': [int()], diff --git a/mapproxy/test/system/fixture/cache_azureblob.yaml b/mapproxy/test/system/fixture/cache_azureblob.yaml new file mode 100644 index 000000000..61c22ff68 --- /dev/null +++ b/mapproxy/test/system/fixture/cache_azureblob.yaml @@ -0,0 +1,59 @@ +globals: + cache: + azureblob: + connection_string: "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://localhost:10000/devstoreaccount1" + container_name: default-container + +services: + tms: + wms: + md: + title: MapProxy Azure Blob + +layers: + - name: default + title: Default + sources: [default_cache] + - name: quadkey + title: Quadkey + sources: [quadkey_cache] + - name: reverse + title: Reverse + sources: [reverse_cache] + +caches: + default_cache: + grids: [webmercator] + cache: + type: azureblob + sources: [tms] + + quadkey_cache: + grids: [webmercator] + cache: + type: azureblob + container_name: tiles + directory_layout: quadkey + directory: quadkeytiles + sources: [tms] + + reverse_cache: + grids: [webmercator] + cache: + type: azureblob + container_name: tiles + directory_layout: reverse_tms + directory: reversetiles + sources: [tms] + +grids: + webmercator: + name: WebMerc + base: GLOBAL_WEBMERCATOR + + +sources: + tms: + type: tile + url: http://localhost:42423/tiles/%(tc_path)s.png + diff --git a/mapproxy/test/system/test_cache_azureblob.py b/mapproxy/test/system/test_cache_azureblob.py new file mode 100644 index 000000000..6c17021b5 --- /dev/null +++ b/mapproxy/test/system/test_cache_azureblob.py @@ -0,0 +1,120 @@ +# This file is part of the MapProxy project. +# Copyright (C) 2022 Omniscale +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import division + +import os +from io import BytesIO + +import pytest + +from mapproxy.request.wms import WMS111MapRequest +from mapproxy.test.image import is_png, create_tmp_image +from mapproxy.test.system import SysTest + +try: + from mapproxy.cache.azureblob import AzureBlobCache, azure_container_client +except ImportError: + AzureBlobCache = None + azure_container_client = None + + +def azureblob_connection(): + # Use default storage account of Azurite emulator + host = os.environ['MAPPROXY_TEST_AZURE_BLOB'] + return 'DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=' \ + 'Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr' \ + '/KBHBeksoGMGw==;BlobEndpoint=' + host + '/devstoreaccount1;' + + +@pytest.fixture(scope="module") +def config_file(): + return "cache_azureblob.yaml" + + +@pytest.fixture(scope="module") +def azureblob_containers(): + container = azure_container_client(azureblob_connection(), 'default-container') + if not container.exists(): + container.create_container() + container = azure_container_client(azureblob_connection(), 'tiles') + if not container.exists(): + container.create_container() + + yield + + +@pytest.mark.skipif(not AzureBlobCache or not os.environ.get('MAPPROXY_TEST_AZURE_BLOB'), + reason="azure-storage-blob package and MAPPROXY_TEST_AZURE_BLOB env required") +@pytest.mark.usefixtures("azureblob_containers") +class TestAzureBlobCache(SysTest): + + def setup(self): + self.common_map_req = WMS111MapRequest( + url="/service?", + param=dict( + service="WMS", + version="1.1.1", + bbox="-150,-40,-140,-30", + width="100", + height="100", + layers="default", + srs="EPSG:4326", + format="image/png", + styles="", + request="GetMap", + ), + ) + + def test_get_map_cached(self, app): + tile = create_tmp_image((256, 256)) + container = azure_container_client(azureblob_connection(), 'default-container') + container.upload_blob( + name="default_cache/WebMerc/4/1/9.png", + data=BytesIO(tile), + overwrite=True + ) + resp = app.get(self.common_map_req) + assert resp.content_type == "image/png" + data = BytesIO(resp.body) + assert is_png(data) + + def test_get_map_cached_quadkey(self, app): + tile = create_tmp_image((256, 256)) + container = azure_container_client(azureblob_connection(), 'tiles') + container.upload_blob( + name="quadkeytiles/2003.png", + data=BytesIO(tile), + overwrite=True + ) + self.common_map_req.params.layers = "quadkey" + resp = app.get(self.common_map_req) + assert resp.content_type == "image/png" + data = BytesIO(resp.body) + assert is_png(data) + + def test_get_map_cached_reverse_tms(self, app): + tile = create_tmp_image((256, 256)) + container = azure_container_client(azureblob_connection(), 'tiles') + container.upload_blob( + name="reversetiles/9/1/4.png", + data=BytesIO(tile), + overwrite=True + ) + self.common_map_req.params.layers = "reverse" + resp = app.get(self.common_map_req) + assert resp.content_type == "image/png" + data = BytesIO(resp.body) + assert is_png(data) diff --git a/mapproxy/test/unit/test_cache_azureblob.py b/mapproxy/test/unit/test_cache_azureblob.py new file mode 100644 index 000000000..9168fe653 --- /dev/null +++ b/mapproxy/test/unit/test_cache_azureblob.py @@ -0,0 +1,95 @@ +# This file is part of the MapProxy project. +# Copyright (C) 2022 Omniscale +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os + +import pytest + +try: + from mapproxy.cache.azureblob import AzureBlobCache, azure_container_client +except ImportError: + AzureBlobCache = None + azure_container_client = None + +from mapproxy.test.unit.test_cache_tile import TileCacheTestBase + + +@pytest.mark.skipif(not AzureBlobCache or not os.environ.get('MAPPROXY_TEST_AZURE_BLOB'), + reason="azure-storage-blob package and MAPPROXY_TEST_AZURE_BLOB env required") +class TestAzureBlobCache(TileCacheTestBase): + always_loads_metadata = True + uses_utc = True + + def setup(self): + TileCacheTestBase.setup(self) + + self.container = 'mapproxy-azure-unit-test' + self.base_path = '/mycache/webmercator' + self.file_ext = 'png' + + # Use default storage account of Azurite emulator + self.host = os.environ['MAPPROXY_TEST_AZURE_BLOB'] + self.connection_string = 'DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=' \ + 'Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr' \ + '/KBHBeksoGMGw==;BlobEndpoint=' + self.host + '/devstoreaccount1;' + + self.container_client = azure_container_client(self.connection_string, self.container) + self.container_client.create_container() + + self.cache = AzureBlobCache( + base_path=self.base_path, + file_ext=self.file_ext, + container_name=self.container, + connection_string=self.connection_string, + ) + + def teardown(self): + TileCacheTestBase.teardown(self) + self.container_client.delete_container() + + @pytest.mark.parametrize('layout,tile_coord,key', [ + ['mp', (12345, 67890, 2), 'mycache/webmercator/02/0001/2345/0006/7890.png'], + ['mp', (12345, 67890, 12), 'mycache/webmercator/12/0001/2345/0006/7890.png'], + + ['tc', (12345, 67890, 2), 'mycache/webmercator/02/000/012/345/000/067/890.png'], + ['tc', (12345, 67890, 12), 'mycache/webmercator/12/000/012/345/000/067/890.png'], + + ['tms', (12345, 67890, 2), 'mycache/webmercator/2/12345/67890.png'], + ['tms', (12345, 67890, 12), 'mycache/webmercator/12/12345/67890.png'], + + ['reverse_tms', (12345, 67890, 2), 'mycache/webmercator/67890/12345/2.png'], + ['reverse_tms', (12345, 67890, 12), 'mycache/webmercator/67890/12345/12.png'], + + ['quadkey', (0, 0, 0), 'mycache/webmercator/.png'], + ['quadkey', (0, 0, 1), 'mycache/webmercator/0.png'], + ['quadkey', (1, 1, 1), 'mycache/webmercator/3.png'], + ['quadkey', (12345, 67890, 12), 'mycache/webmercator/200200331021.png'], + + ['arcgis', (1, 2, 3), 'mycache/webmercator/L03/R00000002/C00000001.png'], + ['arcgis', (9, 2, 3), 'mycache/webmercator/L03/R00000002/C00000009.png'], + ['arcgis', (10, 2, 3), 'mycache/webmercator/L03/R00000002/C0000000a.png'], + ['arcgis', (12345, 67890, 12), 'mycache/webmercator/L12/R00010932/C00003039.png'], + ]) + def test_tile_key(self, layout, tile_coord, key): + cache = AzureBlobCache( + base_path=self.base_path, + file_ext=self.file_ext, + container_name=self.container, + connection_string=self.connection_string, + directory_layout=layout + ) + cache.store_tile(self.create_tile(tile_coord)) + + assert self.container_client.get_blob_client(key).exists() diff --git a/requirements-tests.txt b/requirements-tests.txt index 0ffe4beed..de029058f 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -1,3 +1,4 @@ +azure-storage-blob>=12.9.0 Jinja2==2.11.3 MarkupSafe==1.1.1 Pillow==6.2.2;python_version<"3.0" From 22bb9cf5493097f8b80409a6a67cba9426410800 Mon Sep 17 00:00:00 2001 From: stijnblommerde Date: Fri, 20 Jan 2023 16:05:37 +0100 Subject: [PATCH 059/209] create json legend for multiple layers --- mapproxy/image/merge.py | 16 ++++++++++- mapproxy/service/wms.py | 5 ++-- mapproxy/source/wms.py | 8 ++++-- mapproxy/test/system/test_legendgraphic.py | 33 +++++++++++++++++----- requirements-tests.txt | 5 ++-- 5 files changed, 52 insertions(+), 15 deletions(-) diff --git a/mapproxy/image/merge.py b/mapproxy/image/merge.py index bea132e6e..37f57dd9e 100644 --- a/mapproxy/image/merge.py +++ b/mapproxy/image/merge.py @@ -16,7 +16,7 @@ """ Image and tile manipulation (transforming, merging, etc). """ - +import json from collections import namedtuple from mapproxy.compat.image import Image, ImageColor, ImageChops, ImageMath from mapproxy.compat.image import has_alpha_composite_support @@ -300,3 +300,17 @@ def concat_legends(legends, format='png', size=None, bgcolor='#ffffff', transpar else: img.paste(legend_img, (0, legend_position_y[i])) return ImageSource(img, image_opts=ImageOptions(format=format)) + +def concat_json_legends(legends): + """ + Merge multiple json legends into one + :param legends: list of HttpResponse objects + :rtype json formatted string + """ + legends_dict = {'Legend': []} + legends = legends[:] + for legend in legends: + legend_str = legend.read().decode('utf-8') + legend_dict = json.loads(legend_str) + legends_dict['Legend'].append(legend_dict['Legend'][0]) + return json.dumps(legends_dict) diff --git a/mapproxy/service/wms.py b/mapproxy/service/wms.py index 31868f11f..1e9a86abd 100644 --- a/mapproxy/service/wms.py +++ b/mapproxy/service/wms.py @@ -306,14 +306,15 @@ def legendgraphic(self, request): legend = self.layers[layer].legend(request) [legends.append(i) for i in legend if i is not None] - result = concat_legends(legends) if 'format' in request.params: mimetype = request.params.format_mime_type else: mimetype = 'image/png' if mimetype == 'application/json': - return Response(legends[0].read(), mimetype='application/json') + return Response(legends[0].encode(), mimetype='application/json') + + result = concat_legends(legends) img_opts = self.image_formats[request.params.format_mime_type] return Response(result.as_buffer(img_opts), mimetype=mimetype) diff --git a/mapproxy/source/wms.py b/mapproxy/source/wms.py index 149a64b1d..91757eaa6 100644 --- a/mapproxy/source/wms.py +++ b/mapproxy/source/wms.py @@ -19,7 +19,7 @@ from mapproxy.request.base import split_mime_type from mapproxy.cache.legend import Legend, legend_identifier from mapproxy.image import make_transparent, ImageSource, SubImageSource, bbox_position_in_image -from mapproxy.image.merge import concat_legends +from mapproxy.image.merge import concat_legends, concat_json_legends from mapproxy.image.transform import ImageTransformer from mapproxy.layer import MapExtent, DefaultMapExtent, BlankImage, LegendQuery, MapQuery, MapLayer from mapproxy.source import InfoSource, SourceError, LegendSource @@ -248,8 +248,6 @@ def get_legend(self, query): error_occured = False for client in self.clients: try: - if query.format == 'json': - return client.get_legend(query) legends.append(client.get_legend(query)) except HTTPClientError as e: error_occured = True @@ -259,6 +257,10 @@ def get_legend(self, query): # TODO errors? log.error(e.args[0]) format = split_mime_type(query.format)[1] + + if format == 'json': + return concat_json_legends(legends) + legend = Legend(source=concat_legends(legends, format=format), id=self.identifier, scale=query.scale) if not error_occured: diff --git a/mapproxy/test/system/test_legendgraphic.py b/mapproxy/test/system/test_legendgraphic.py index 358bbcba0..4ffd3ff06 100644 --- a/mapproxy/test/system/test_legendgraphic.py +++ b/mapproxy/test/system/test_legendgraphic.py @@ -270,20 +270,39 @@ def test_get_legendgraphic_invalid_sld_version_130(self, app): ) assert validate_with_xsd(xml, xsd_name="wms/1.3.0/exceptions_1_3_0.xsd") - def test_get_legendgraphic_json(self, app): + def test_get_legendgraphic_json_single_source_multiple_sub_layers(self, app): + """ + this.common_lg_req_130 request fetches layer 'wms_legend' + layer 'wms_legend' contains: + - single source 'legend_cache' + - multiple sub layers: 'foo' and 'bar' + - see also 'test/system/fixture/legendgraphic.yaml' + """ self.common_lg_req_130.params["format"] = "application/json" - json_data = "{\"Legend\": [{\"title\": \"Give me a json legend!\"}]}" + json_data_foo = "{\"Legend\": [{\"layerName\": \"foo\"}]}" + json_data_bar = "{\"Legend\": [{\"layerName\": \"bar\"}]}" expected_req1 = ( { "path": r"/service?LAYER=foo&SERVICE=WMS&FORMAT=application%2Fjson" - "&REQUEST=GetLegendGraphic&" - "&VERSION=1.1.1&SLD_VERSION=1.1.0" + "&REQUEST=GetLegendGraphic&" + "&VERSION=1.1.1&SLD_VERSION=1.1.0" + }, + {"body": json_data_foo.encode(), "headers": {"content-type": "application/json"}}, + ) + expected_req2 = ( + { + "path": r"/service?LAYER=bar&SERVICE=WMS&FORMAT=application%2Fjson" + "&REQUEST=GetLegendGraphic&" + "&VERSION=1.1.1&SLD_VERSION=1.1.0" }, - {"body": json_data.encode(), "headers": {"content-type": "application/json"}}, + {"body": json_data_bar.encode(), "headers": {"content-type": "application/json"}}, ) - with mock_httpd(("localhost", 42423), [expected_req1]): + with mock_httpd( + ("localhost", 42423), [expected_req1, expected_req2] + ): resp = app.get(self.common_lg_req_130) assert resp.content_type == "application/json" json_str = resp.body.decode("utf-8") json_data = json.loads(json_str) - assert json_data['Legend'][0]['title'] == 'Give me a json legend!' \ No newline at end of file + assert json_data['Legend'][0]['layerName'] == 'foo' + assert json_data['Legend'][1]['layerName'] == 'bar' diff --git a/requirements-tests.txt b/requirements-tests.txt index de029058f..946c81457 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -5,7 +5,7 @@ Pillow==6.2.2;python_version<"3.0" Pillow==8.2.0;python_version in "3.6 3.7 3.8 3.9" Pillow==8.4.0;python_version>="3.10" PyYAML==5.4 -Shapely==1.7.0 +Shapely==1.8.0 WebOb==1.8.6 WebTest==2.0.35 attrs==19.3.0;python_version<"3.10" @@ -23,7 +23,7 @@ cffi==1.14.2;python_version<"3.10" cffi==1.15.0;python_version>="3.10" cfn-lint==0.35.0 chardet==3.0.4 -cryptography==3.3.2 +cryptography decorator==4.4.2 docker==4.3.0 docutils==0.15.2 @@ -86,3 +86,4 @@ wrapt==1.12.1 xmltodict==0.12.0 zipp==1.2.0;python_version<"3.6" zipp==3.1.0;python_version>="3.6" +gdal==3.5.1 From 601f8b1cb406dbdfd5b974280208a7fee3492fb8 Mon Sep 17 00:00:00 2001 From: stijnblommerde Date: Fri, 20 Jan 2023 16:10:57 +0100 Subject: [PATCH 060/209] revert requirements-tests.txt --- requirements-tests.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 946c81457..de029058f 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -5,7 +5,7 @@ Pillow==6.2.2;python_version<"3.0" Pillow==8.2.0;python_version in "3.6 3.7 3.8 3.9" Pillow==8.4.0;python_version>="3.10" PyYAML==5.4 -Shapely==1.8.0 +Shapely==1.7.0 WebOb==1.8.6 WebTest==2.0.35 attrs==19.3.0;python_version<"3.10" @@ -23,7 +23,7 @@ cffi==1.14.2;python_version<"3.10" cffi==1.15.0;python_version>="3.10" cfn-lint==0.35.0 chardet==3.0.4 -cryptography +cryptography==3.3.2 decorator==4.4.2 docker==4.3.0 docutils==0.15.2 @@ -86,4 +86,3 @@ wrapt==1.12.1 xmltodict==0.12.0 zipp==1.2.0;python_version<"3.6" zipp==3.1.0;python_version>="3.6" -gdal==3.5.1 From 82d9b76b9e714765b651e8d83be1594e2a76e976 Mon Sep 17 00:00:00 2001 From: Roel Arents Date: Tue, 21 Feb 2023 15:13:15 +0100 Subject: [PATCH 061/209] use one azure client per seed worker thread (to fix unsafe thread operations) Co-authored-by: Roel van den Berg --- mapproxy/cache/azureblob.py | 23 ++++++++++++-------- mapproxy/test/system/test_cache_azureblob.py | 11 ++++++++-- mapproxy/test/unit/test_cache_azureblob.py | 9 ++++---- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/mapproxy/cache/azureblob.py b/mapproxy/cache/azureblob.py index 7859f3b80..f021797d9 100644 --- a/mapproxy/cache/azureblob.py +++ b/mapproxy/cache/azureblob.py @@ -16,6 +16,7 @@ import calendar import hashlib +import threading from io import BytesIO from mapproxy.cache import path @@ -35,11 +36,6 @@ log = logging.getLogger('mapproxy.cache.azureblob') -def azure_container_client(connection_string, container_name): - client = BlobServiceClient.from_connection_string(connection_string) - return client.get_container_client(container_name) - - class AzureBlobConnectionError(Exception): pass @@ -55,9 +51,9 @@ def __init__(self, base_path, file_ext, directory_layout='tms', container_name=' self.lock_cache_id = 'azureblob-' + hashlib.md5(base_path.encode('utf-8') + container_name.encode('utf-8')).hexdigest() - self.container_client = azure_container_client(connection_string, container_name) - if not self.container_client.exists(): - raise AzureBlobConnectionError('Blob container %s does not exist' % container_name) + self.connection_string = connection_string + self.container_name = container_name + self._container_client_cache = threading.local() self.base_path = base_path self.file_ext = file_ext @@ -65,6 +61,14 @@ def __init__(self, base_path, file_ext, directory_layout='tms', container_name=' self._concurrent_reader = _concurrent_reader self._tile_location, _ = path.location_funcs(layout=directory_layout) + @property + def container_client(self): + if not getattr(self._container_client_cache, 'client', None): + container_client = BlobServiceClient.from_connection_string(self.connection_string) \ + .get_container_client(self.container_name) + self._container_client_cache.client = container_client + return self._container_client_cache.client + def tile_key(self, tile): return self._tile_location(tile, self.base_path, self.file_ext).lstrip('/') @@ -131,9 +135,10 @@ def store_tile(self, tile, dimensions=None): key = self.tile_key(tile) log.debug('AzureBlob: store_tile, key: %s' % key) + container_client = self.container_client with tile_buffer(tile) as buf: content_settings = ContentSettings(content_type='image/' + self.file_ext) - self.container_client.upload_blob( + container_client.upload_blob( name=key, data=buf, overwrite=True, diff --git a/mapproxy/test/system/test_cache_azureblob.py b/mapproxy/test/system/test_cache_azureblob.py index 6c17021b5..9bc991067 100644 --- a/mapproxy/test/system/test_cache_azureblob.py +++ b/mapproxy/test/system/test_cache_azureblob.py @@ -25,10 +25,9 @@ from mapproxy.test.system import SysTest try: - from mapproxy.cache.azureblob import AzureBlobCache, azure_container_client + from mapproxy.cache.azureblob import AzureBlobCache except ImportError: AzureBlobCache = None - azure_container_client = None def azureblob_connection(): @@ -39,6 +38,14 @@ def azureblob_connection(): '/KBHBeksoGMGw==;BlobEndpoint=' + host + '/devstoreaccount1;' +def azure_container_client(connection_string, container_name): + return AzureBlobCache( + base_path="", + file_ext="", + connection_string=connection_string, + container_name=container_name).container_client + + @pytest.fixture(scope="module") def config_file(): return "cache_azureblob.yaml" diff --git a/mapproxy/test/unit/test_cache_azureblob.py b/mapproxy/test/unit/test_cache_azureblob.py index 9168fe653..32a577af3 100644 --- a/mapproxy/test/unit/test_cache_azureblob.py +++ b/mapproxy/test/unit/test_cache_azureblob.py @@ -18,10 +18,9 @@ import pytest try: - from mapproxy.cache.azureblob import AzureBlobCache, azure_container_client + from mapproxy.cache.azureblob import AzureBlobCache except ImportError: AzureBlobCache = None - azure_container_client = None from mapproxy.test.unit.test_cache_tile import TileCacheTestBase @@ -45,9 +44,6 @@ def setup(self): 'Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr' \ '/KBHBeksoGMGw==;BlobEndpoint=' + self.host + '/devstoreaccount1;' - self.container_client = azure_container_client(self.connection_string, self.container) - self.container_client.create_container() - self.cache = AzureBlobCache( base_path=self.base_path, file_ext=self.file_ext, @@ -55,6 +51,9 @@ def setup(self): connection_string=self.connection_string, ) + self.container_client = self.cache.container_client + self.container_client.create_container() + def teardown(self): TileCacheTestBase.teardown(self) self.container_client.delete_container() From 6028f3b8e5187ac0e531fc369c284ca2a25fd2f4 Mon Sep 17 00:00:00 2001 From: Jakob Miksch Date: Fri, 7 Apr 2023 12:29:29 +0200 Subject: [PATCH 062/209] Typos and formatting --- DEVELOPMENT.md | 39 ++++++++++++++++++--------------------- doc/deployment.rst | 6 +++--- doc/labeling.rst | 30 +++++++++++++++--------------- doc/tutorial.rst | 6 +++--- release.py | 2 +- setup.py | 2 +- 6 files changed, 41 insertions(+), 44 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 0a33c83a1..70fa08249 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -2,40 +2,39 @@ Dev Setup ========= * Create parent directory for source, applications and the virtual env -* Clone source into directory mapproxy: `git clone ` -* Install dependencies: https://mapproxy.org/docs/latest/install.html#install-dependencies +* Clone source into directory mapproxy: `git clone` +* Install dependencies: * Create virtualenv: `python3.6 -m venv ./venv` * Activate virtualenv: `source venv/bin/activate` * Install mapproxy: `pip install -e mapproxy/` * Install dev dependencies: `pip install -r mapproxy/requirements-tests.txt` * Run tests: - * `cd mapproxy` - * `pytest mapproxy` - * Run single test: `pytest mapproxy/test/unit/test_grid.py -v` + * `cd mapproxy` + * `pytest mapproxy` + * Run single test: `pytest mapproxy/test/unit/test_grid.py -v` * Create an application: `mapproxy-util create -t base-config apps/base` * Start a dev server in debug mode: `mapproxy-util serve-develop apps/base/mapproxy.yaml --debug` - Coding Style ------------ -PEP8: https://www.python.org/dev/peps/pep-0008/ - +PEP8: Debugging --------- - - With PyCharm: - * Attach to dev server with https://www.jetbrains.com/help/pycharm/attaching-to-local-process.html +* With PyCharm: + * Attach to dev server with - - With ipython: - * `pip install ipython ipdb` +* With ipython: + * `pip install ipython ipdb` - - With Visual Studio Code: - * After creating a virtual env and mapproxy configuration: - * Create a `launch.json` file in the project-root/.vscode directory with the following content: - ``` +* With Visual Studio Code: + * After creating a virtual env and mapproxy configuration: + * Create a `launch.json` file in the project-root/.vscode directory with the following content: + + ```json { "version": "0.2.0", "configurations": [ @@ -54,14 +53,12 @@ Debugging } ``` - * Then start debugging by hitting `F5`. - + * Then start debugging by hitting `F5`. Some more details in the documentation -------------------------------------- -See https://mapproxy.org/docs/latest/development.html - +See Some incomplete notes about the structure of the software --------------------------------------------------------- @@ -80,4 +77,4 @@ The sources live in `source/` which in turn use low-level functions from `client The file `layer.py` merges/clips/transforms tiles. -The whole of MapProxy is stateless apart from the chache which uses locks on file system level. +The whole of MapProxy is stateless apart from the cache which uses locks on file system level. diff --git a/doc/deployment.rst b/doc/deployment.rst index 403b22202..332e4e9be 100644 --- a/doc/deployment.rst +++ b/doc/deployment.rst @@ -161,7 +161,7 @@ You can either use a dedicated HTTP proxy like Varnish_ or a general HTTP web se You need to set some HTTP headers so that MapProxy can generate capability documents with the URL of the proxy, instead of the local URL of the MapProxy application. -* ``Host`` – is the hostname that clients use to acces MapProxy (i.e. the proxy) +* ``Host`` – is the hostname that clients use to access MapProxy (i.e. the proxy) * ``X-Script-Name`` – path of MapProxy when the URL is not ``/`` (e.g. ``/mapproxy``) * ``X-Forwarded-Host`` – alternative to ``HOST`` * ``X-Forwarded-Proto`` – should be ``https`` when the client connects with HTTPS @@ -209,7 +209,7 @@ Because of the way Python handles threads in computing heavy applications (like The examples above are all minimal and you should read the documentation of your components to get the best performance with your setup. -Load Balancing and High Availablity +Load Balancing and High Availability ----------------------------------- You can easily run multiple MapProxy instances in parallel and use a load balancer to distribute requests across all instances, but there are a few things to consider when the instances share the same tile cache with NFS or other network filesystems. @@ -253,7 +253,7 @@ Here are the most important loggers: Logs errors and warnings for service ``XXX``. ``mapproxy.source.request`` - Logs all requests to sources with URL, size in kB and duration in milliseconds. The duration is the time it took to receive the header of the response. The actual request duration might be longer, especially for larger images or when the network bandwith is limited. + Logs all requests to sources with URL, size in kB and duration in milliseconds. The duration is the time it took to receive the header of the response. The actual request duration might be longer, especially for larger images or when the network bandwidth is limited. Enabling logging diff --git a/doc/labeling.rst b/doc/labeling.rst index 2647256a4..95608322e 100644 --- a/doc/labeling.rst +++ b/doc/labeling.rst @@ -30,9 +30,9 @@ WMS servers can adjust the position of labels so that more labels can fit on a m Repeated labels ~~~~~~~~~~~~~~~ -WMS servers render labels for polygon areas in each request. Labels for large areas will apear multiple times, once in each tile. +WMS servers render labels for polygon areas in each request. Labels for large areas will appear multiple times, once in each tile. -.. image:: imgs/labeling-repeated.png +.. image:: imgs/labeling-repeated.png MapProxy Options @@ -64,7 +64,7 @@ You can configure the meta tile size in the ``globals.cache`` section and for ea globals: cache: meta_size: [6, 6] - + caches: mycache: sources: [...] @@ -97,7 +97,7 @@ You can configure the size of the meta buffer in the ``globals.cache`` section a globals: cache: meta_buffer: 100 - + caches: mycache: sources: [...] @@ -109,7 +109,7 @@ You can configure the size of the meta buffer in the ``globals.cache`` section a WMS Server Options ------------------ -You can reduce some of the labeling issues with meta tiling, and solve the first issue with the meta buffer. The issues with dynamic and repeated labeling requires some changes to your WMS server. +You can reduce some of the labeling issues with meta tiling, and solve the first issue with the meta buffer. The issues with dynamic and repeated labeling requires some changes to your WMS server. In general, you need to disable the dynamic position of labels and you need to allow the rendering of partial labels. @@ -122,10 +122,10 @@ MapServer has lots of settings that affect the rendering. The two most important ``PROCESSING "LABEL_NO_CLIP=ON"`` from the ``LAYER`` configuration. With this option the labels are fixed to the whole feature and not only the part of the feature that is visible in the current map request. Default is off. -and +and ``PARTIALS`` from the ``LABEL`` configuration. - If this option is true, then labels are rendered beyond the boundaries of the map request. Default is true. + If this option is true, then labels are rendered beyond the boundaries of the map request. Default is true. ``PARTIAL FALSE`` @@ -161,17 +161,17 @@ As described above, you can use a meta buffer to prevent missing labels. You nee meta_buffer: 150 [...] -.. +.. .. ``PARTIALS TRUE``: .. .. image:: imgs/mapserver_points_partials_true.png -.. +.. .. ``PARTIALS FALSE``: .. .. image:: imgs/mapserver_points_partials_false.png Polygons ~~~~~~~~ -Meta tiling reduces the number of repeated labels, but they can still apear at the border of meta tiles. +Meta tiling reduces the number of repeated labels, but they can still appear at the border of meta tiles. You can use the ``PROCESSING "LABEL_NO_CLIP=ON"`` option to fix this problem. With this option, MapServer places the label always at a fixed position, even if that position is outside the current map request. @@ -181,7 +181,7 @@ With this option, MapServer places the label always at a fixed position, even if If the ``LABEL_NO_CLIP`` option is used, ``PARTIALS`` should be ``TRUE``. Otherwise label would not be rendered if they overlap the map boundary. This options also requires a meta buffer. ``example.map``:: - + LAYER TYPE POLYGON PROCESSING "LABEL_NO_CLIP=ON" @@ -202,7 +202,7 @@ If the ``LABEL_NO_CLIP`` option is used, ``PARTIALS`` should be ``TRUE``. Otherw .. ``PROCESSING "LABEL_NO_CLIP=ON"`` and ``PARTIALS TRUE``: .. .. image:: imgs/mapserver_area_with_labelclipping.png -.. +.. .. ``PARTIALS FALSE``: .. .. image:: imgs/mapserver_area_without_labelclipping.png @@ -236,7 +236,7 @@ You can disable repeated labels with ``PROCESSING LABEL_NO_CLIP="ON"``, if don't ``example.map``:: - + LAYER TYPE LINE PROCESSING "LABEL_NO_CLIP=ON" @@ -284,10 +284,10 @@ You need to compensate the meta buffer when you use ``PARTIALS FALSE`` in combin [...] .. It has to be evaluated which solution is the best for each application: some cropped or missing labels. -.. +.. .. ``PROCESSING "LABEL_NO_CLIP=ON"`` and ``PARTIALS TRUE``: .. .. image:: imgs/mapserver_road_with_labelclipping.png -.. +.. .. ``PROCESSING "LABEL_NO_CLIP=OFF"`` and ``PARTIALS FALSE``: .. .. image:: imgs/mapserver_road_without_labelclipping.png diff --git a/doc/tutorial.rst b/doc/tutorial.rst index 9ec6978b0..e5478b640 100644 --- a/doc/tutorial.rst +++ b/doc/tutorial.rst @@ -77,7 +77,7 @@ There are two formats. The condensed form uses braces:: {foo: 3, bar: baz} -The block form requires every key value pair on a seperate line:: +The block form requires every key value pair on a separate line:: foo: 3 bar: baz @@ -262,7 +262,7 @@ Defining Resolutions By default MapProxy caches traditional power-of-two image pyramids with a default number of cached resolutions of 20. The resolutions between each pyramid level doubles. If you want to change this, you can do so by -:ref:`defining your own grid `. Fortunately MapProxy grids provied the +:ref:`defining your own grid `. Fortunately MapProxy grids provide the ability to inherit from an other grid. We let our grid inherit from the previously used `GLOBAL_GEODETIC` grid and add five fixed resolutions to it. @@ -345,7 +345,7 @@ Sometimes you don't want to provide the full data of a WMS in a layer. With MapProxy you can define areas where data is available or where data you are interested in is. MapProxy provides three ways to restrict the area of available data: Bounding boxes, polygons and OGR datasource. To keep it simple, we only -discuss bounding boxes. For more informations about the other methods take +discuss bounding boxes. For more information about the other methods take a look at :ref:`the coverages documentation `. To restrict the area with a bounding box, we have to define it in the coverage option of the data source. The listing below restricts the requestable area to diff --git a/release.py b/release.py index dc1115ffd..1bfa0188a 100644 --- a/release.py +++ b/release.py @@ -76,7 +76,7 @@ def upload_test_sdist_command(): def check_uncommited(): if sh('git diff-index --quiet HEAD --') != 0: - print('ABORT: uncommited changes. please commit (and tag) release version number') + print('ABORT: uncommitted changes. please commit (and tag) release version number') sys.exit(1) def upload_final_sdist_command(): diff --git a/setup.py b/setup.py index cdda0314d..73ad0a5fb 100644 --- a/setup.py +++ b/setup.py @@ -17,7 +17,7 @@ def package_installed(pkg): else: return True -# depend in Pillow if it is installed, otherwise +# depend on Pillow if it is installed, otherwise # depend on PIL if it is installed, otherwise # require Pillow if package_installed('Pillow'): From aa88c478164993f54c5984aa633d1b546a353a02 Mon Sep 17 00:00:00 2001 From: Pal Szabo Date: Wed, 12 Apr 2023 08:29:36 +0200 Subject: [PATCH 063/209] Fix installation command --- doc/install.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/install.rst b/doc/install.rst index ba622b1f2..b5c14ba28 100644 --- a/doc/install.rst +++ b/doc/install.rst @@ -7,7 +7,7 @@ This tutorial was created and tested with Debian and Ubuntu, if you're installin MapProxy is `registered at the Python Package Index `_ (PyPI). If you have Python 2.7.9 or higher, you can install MapProxy with:: - sudo python -m pip MapProxy + sudo python -m pip install MapProxy This is really, easy `but` we recommend to install MapProxy into a `virtual Python environment`_. A ``virtualenv`` is a self-contained Python installation where you can install arbitrary Python packages without affecting the system installation. You also don't need root permissions for the installation. From b693da9693d66bea38690b91af9c1ebda9781bc0 Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Wed, 12 Apr 2023 14:40:14 +0200 Subject: [PATCH 064/209] Remove support for python 2.7 and 3.6, add 3.11 --- .github/workflows/test.yml | 2 +- doc/install.rst | 6 +++--- doc/install_windows.rst | 2 +- requirements-tests.txt | 44 +++++++++++++++----------------------- setup.py | 3 +-- 5 files changed, 23 insertions(+), 34 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index df16592fa..dfa838cbc 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,7 +33,7 @@ jobs: strategy: matrix: - python-version: [2.7, 3.6, 3.7, 3.8, 3.9, "3.10"] + python-version: [3.7, 3.8, 3.9, "3.10", "3.11"] env: MAPPROXY_TEST_COUCHDB: 'http://localhost:5984' diff --git a/doc/install.rst b/doc/install.rst index b5c14ba28..a4bd88721 100644 --- a/doc/install.rst +++ b/doc/install.rst @@ -39,7 +39,7 @@ This will change the ``PATH`` for your `current` session. Install Dependencies -------------------- -MapProxy is written in Python, thus you will need a working Python installation. MapProxy works with Python 2.7 and 3.4 or higher, which should already be installed with most Linux distributions. +MapProxy is written in Python, thus you will need a working Python installation. MapProxy works with Python 3.7 or higher, which should already be installed with most Linux distributions. MapProxy requires a few third-party libraries that are required to run. There are different ways to install each dependency. Read :ref:`dependency_details` for a list of all required and optional dependencies. @@ -48,11 +48,11 @@ Installation On a Debian or Ubuntu system, you need to install the following packages:: - sudo apt-get install python-pil python-yaml python-proj + sudo apt-get install python3-pil python3-yaml python3-pyproj To get all optional packages:: - sudo apt-get install libgeos-dev python-lxml libgdal-dev python-shapely + sudo apt-get install libgeos-dev python3-lxml libgdal-dev python3-shapely .. _dependency_details: diff --git a/doc/install_windows.rst b/doc/install_windows.rst index c194b4794..3498e1b63 100644 --- a/doc/install_windows.rst +++ b/doc/install_windows.rst @@ -1,7 +1,7 @@ Installation on Windows ======================= -At frist you need a working Python installation. You can download Python from: https://www.python.org/download/. MapProxy requires Python 2.7, 3.4 or higher. +At first you need a working Python installation. You can download Python from: https://www.python.org/download/. MapProxy requires Python 3.7 or higher. Virtualenv ---------- diff --git a/requirements-tests.txt b/requirements-tests.txt index de029058f..7367640b2 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -1,8 +1,7 @@ azure-storage-blob>=12.9.0 Jinja2==2.11.3 MarkupSafe==1.1.1 -Pillow==6.2.2;python_version<"3.0" -Pillow==8.2.0;python_version in "3.6 3.7 3.8 3.9" +Pillow==8.2.0;python_version in "3.7 3.8 3.9" Pillow==8.4.0;python_version>="3.10" PyYAML==5.4 Shapely==1.7.0 @@ -19,8 +18,7 @@ boto==2.49.0 botocore==1.17.46;python_version<"3.10" botocore==1.27.7;python_version>="3.10" certifi==2020.6.20 -cffi==1.14.2;python_version<"3.10" -cffi==1.15.0;python_version>="3.10" +cffi==1.15.1; cfn-lint==0.35.0 chardet==3.0.4 cryptography==3.3.2 @@ -39,29 +37,24 @@ jsonpickle==1.4.1 jsonpointer==2.0 jsonschema==3.2.0 junit-xml==1.9 -lxml==4.6.5 -mock==3.0.5;python_version<"3.6" -mock==4.0.2;python_version>="3.6" -more-itertools==5.0.0;python_version<"3.0" -more-itertools==8.4.0;python_version>="3.0" +lxml==4.9.2 +mock==4.0.2 +more-itertools==8.4.0 moto==1.3.14;python_version<"3.10" moto==3.1.13;python_version>="3.10" -networkx==2.2;python_version<"3.0" -networkx==2.4;python_version>="3.0" +networkx==2.4 packaging==20.4 pluggy==0.13.1 -py==1.10.0 +py==1.11.0 pyasn1==0.4.8 pycparser==2.20 -pyparsing==2.2.2;python_version<"3.0" -pyparsing==2.4.7;python_version>="3.0" -pyproj==2.2.2;python_version<"3.0" -pyproj==2.6.1.post1;python_version in "3.6 3.7 3.8 3.9" -pyproj==3.3.1;python_version>="3.10" +pyparsing==2.4.7 +pyproj==2.6.1.post1;python_version in "3.7 3.8 3.9" +pyproj==3.3.1;python_version=="3.10" +pyproj==3.5.0;python_version>"3.10" pyrsistent==0.16.0 -pytest==4.6.11;python_version<"3.0" -pytest==6.0.1;python_version in "3.6 3.7 3.8 3.9" -pytest==6.2.5;python_version>="3.10" +pytest==6.0.1;python_version in "3.7 3.8 3.9" +pytest==7.3.0;python_version>="3.10" python-dateutil==2.8.1 python-jose==3.2.0 pytz==2020.1 @@ -69,13 +62,11 @@ redis==3.5.3 requests==2.24.0 responses==0.10.16 riak==2.7.0 -rsa==4.5;python_version<"3.0" -rsa==4.7;python_version>="3.0" -s3transfer==0.3.3;python_version<"3.0" +rsa==4.7 +s3transfer==0.3.3;python_version<"3.10" s3transfer==0.6.0;python_version>="3.10" six==1.15.0 -soupsieve==1.9.6;python_version<"3.0" -soupsieve==2.0.1;python_version>="3.0" +soupsieve==2.0.1 sshpubkeys==3.1.0 toml==0.10.1 urllib3==1.25.10 @@ -84,5 +75,4 @@ websocket-client==0.57.0 werkzeug==1.0.1 wrapt==1.12.1 xmltodict==0.12.0 -zipp==1.2.0;python_version<"3.6" -zipp==3.1.0;python_version>="3.6" +zipp==3.1.0 diff --git a/setup.py b/setup.py index cdda0314d..4fcdd16e6 100644 --- a/setup.py +++ b/setup.py @@ -75,12 +75,11 @@ def long_description(changelog_releases=10): "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", - "Programming Language :: Python :: 2.7", - "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", "Topic :: Internet :: Proxy Servers", "Topic :: Internet :: WWW/HTTP :: WSGI", "Topic :: Scientific/Engineering :: GIS", From 0a2f8d911d2c9bafd54be185046f154a2a3055cf Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Wed, 29 Mar 2023 15:24:36 +0200 Subject: [PATCH 065/209] Introduce docker Co-authored-by: Jan Suleiman Co-authored-by: Jakob Miksch --- .github/workflows/dockerbuild.yml | 68 ++++++++++++++++++ doc/install_docker.rst | 111 +++++++++++++++++++++++++----- docker/Dockerfile | 66 ++++++++++++++++++ docker/app.py | 10 +++ docker/nginx-default.conf | 15 ++++ docker/start.sh | 31 +++++++++ docker/uwsgi.conf | 10 +++ 7 files changed, 294 insertions(+), 17 deletions(-) create mode 100644 .github/workflows/dockerbuild.yml create mode 100644 docker/Dockerfile create mode 100644 docker/app.py create mode 100644 docker/nginx-default.conf create mode 100755 docker/start.sh create mode 100644 docker/uwsgi.conf diff --git a/.github/workflows/dockerbuild.yml b/.github/workflows/dockerbuild.yml new file mode 100644 index 000000000..d6c9a1d2c --- /dev/null +++ b/.github/workflows/dockerbuild.yml @@ -0,0 +1,68 @@ +name: Docker Build and Publish + +on: + workflow_dispatch: + push: + tags: + - "*.*.*" +jobs: + build-and-publish: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v4 + with: + images: | + ghcr.io/mapproxy/mapproxy/mapproxy + tags: | + type=semver,pattern={{version}} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to ghcr.io + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push base image + uses: docker/build-push-action@v4 + with: + context: docker/ + file: ./docker/Dockerfile + push: true + build-args: | + MAPPROXY_VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} + target: base + tags: | + ${{ steps.meta.outputs.tags }} + + - name: Build and push development image + uses: docker/build-push-action@v4 + with: + context: docker/ + file: ./docker/Dockerfile + push: true + build-args: | + MAPPROXY_VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} + target: development + tags: | + ${{ steps.meta.outputs.tags }}-dev + + - name: Build and push nginx image + uses: docker/build-push-action@v4 + with: + context: docker/ + file: ./docker/Dockerfile + push: true + build-args: | + MAPPROXY_VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} + target: nginx + tags: | + ${{ steps.meta.outputs.tags }}-nginx diff --git a/doc/install_docker.rst b/doc/install_docker.rst index 03e03fc74..a171e7ce8 100644 --- a/doc/install_docker.rst +++ b/doc/install_docker.rst @@ -1,8 +1,26 @@ Installation via Docker -======================= +======================== +MapProxy does have its own official docker images. +These are currently hosted on the GitHub container registry and can be found here: -There are several inofficial Docker images available on `Docker Hub`_ that provide ready-to-use containers for MapProxy. + - https://github.com/orgs/mapproxy/packages/container/package/mapproxy + +Currently we have 3 different images for every release, named e.g. + + - ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1 + - ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1-dev + - ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1-nginx + +The first one comes with everything installed, but no HTTP WebServer running. You can use it to implement your custom setup. + +The second image, ending with `-dev`, starts the integrated webserver mapproxy provides through `mapproxy-util serve-develop`. + +The third image, ending with `-nginx`, comes bundled with a preconfigured `nginx`_ HTTP Server, that lets you use MapProxy instantly in a production environment. + +See the quickstart section below for a configuration / example on how to use those images. + +There are also several inofficial Docker images available on `Docker Hub`_ that provide ready-to-use containers for MapProxy. .. _`Docker Hub`: https://hub.docker.com/search?q=mapproxy @@ -11,31 +29,90 @@ The community has very good experiences with the following ones: - https://hub.docker.com/repository/docker/justb4/mapproxy/general (`github just4b `_) - https://hub.docker.com/r/kartoza/mapproxy (`github kartoza `_) +There are also images available that already include binaries for `MapServer` or `Mapnik`: + +- https://github.com/justb4/docker-mapproxy-mapserver +- https://github.com/justb4/docker-mapproxy-mapserver-mapnik + Quickstart ------------------- +---------- + +Depending on your needs, pull the desired image (see description above): + + docker pull ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1 + +or: + + docker pull ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1-dev + +or: + + docker pull ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1-nginx + +Create a directory (e.g. `mapproxyconfig`) for your configuration files. Put your configs into that folder. +If you do not supply config files (seed.yaml and mapproxy.yaml) the image will create them for you. + +To start the docker container with a mount on your config folder, use the command matching your image. + +Running the `plain` image without starting a webserver +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -As for an example the image of `kartoza/mapproxy`_ is used (`just4b/docker-mapproxy `_ works the same way). +.. code-block:: sh -Create a directory (e.g. `mapproxy`) for your configuration files and mount it as a volume: + docker run --rm --name "mapproxy" -d -t -v `pwd`/mapproxyconfig:/mapproxy/config ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1 -:: +Afterwards, the `MapProxy` instance is idling and you can connect with the container via e.g. - docker run --name "mapproxy" -p 8080:8080 -d -t -v `pwd`/mapproxy:/mapproxy kartoza/mapproxy + docker exec -it mapproxy bash -Afterwards, the `MapProxy` instance is running on `localhost:8080`. +Running the `dev` image +~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: sh + + docker run --rm --name "mapproxy" -p 8080:8080 -d -t -v `pwd`/mapproxyconfig:/mapproxy/config ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1-dev + +Afterwards, the `MapProxy` instance is running on http://localhost:8080/demo/ + + +Running the `nginx` image +~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: sh + + docker run --rm --name "mapproxy" -p 80:80 -d -t -v `pwd`/mapproxyconfig:/mapproxy/config ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1-nginx + +Afterwards, the `MapProxy` instance is running on http://localhost/mapproxy/demo/ -In a production environment you might want to put a `nginx`_ in front of the MapProxy container, that serves as a reverse proxy. -See the `Kartoza GitHub Repository`_ for detailed documentation and example docker-compose files. -.. _`kartoza/mapproxy`: https://hub.docker.com/r/kartoza/mapproxy .. _`nginx`: https://nginx.org -.. _`GitHub Repository`: https://github.com/kartoza/docker-mapproxy -There are also images available that already include binaries for `MapServer` or `Mapnik`: +Build your own image +-------------------- +There is currently one build argument you can use. -- https://github.com/justb4/docker-mapproxy-mapserver -- https://github.com/justb4/docker-mapproxy-mapserver-mapnik + - `MAPPROXY_VERSION`: Set the version you want to build. + +Switch to the `docker` folder in the mapproxy repository checkout and then execute + +For the `plain` image without starting a webserver +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: sh + + docker build --build-arg MAPPROXY_VERSION=1.15.1 --target base -t ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1 . + +For the `dev` image +~~~~~~~~~~~~~~~~~~~ + +.. code-block:: sh + + docker build --build-arg MAPPROXY_VERSION=1.15.1 --target development -t ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1-dev . + +For the `nginx` image +~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: sh -.. note:: - Please feel free to make suggestions for an official MapProxy docker image. + docker build --build-arg MAPPROXY_VERSION=1.15.1 --target nginx -t ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1-nginx . diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 000000000..6893a7be6 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,66 @@ +FROM python:3.10-slim-bullseye AS base + +# The MAPPROXY_VERSION argument can be used like this to overwrite the default: +# docker build --build-arg MAPPROXY_VERSION=1.15.1 [--target base|development|nginx] -t mapproxy:1.15.1 . +ARG MAPPROXY_VERSION=1.15.1 + +RUN apt update && apt -y install --no-install-recommends \ + python3-pil \ + python3-yaml \ + python3-pyproj \ + libgeos-dev \ + python3-lxml \ + libgdal-dev \ + python3-shapely \ + libxml2-dev libxslt-dev && \ + apt-get -y --purge autoremove && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +RUN mkdir /mapproxy + +WORKDIR /mapproxy + +# fix potential issue finding correct shared library libproj (fixed in newer releases) +RUN ln -s /usr/lib/x86_64-linux-gnu/libproj.so /usr/lib/x86_64-linux-gnu/liblibproj.so + +RUN pip install MapProxy==$MAPPROXY_VERSION && \ + # temporary fix for v1.15.1 + if [ "$MAPPROXY_VERSION" = '1.15.1' ]; then pip install six; fi && \ + pip cache purge + +COPY app.py . + +COPY start.sh . + +ENTRYPOINT ["bash", "-c", "./start.sh base"] + +###### development image ###### + +FROM base AS development + +EXPOSE 8080 + +ENTRYPOINT ["bash", "-c", "./start.sh development"] + +##### nginx image ###### + +FROM base AS nginx + +RUN apt update && apt -y install --no-install-recommends nginx gcc + +# cleanup +RUN apt-get -y --purge autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +RUN pip install uwsgi && \ + pip cache purge + +COPY uwsgi.conf . + +COPY nginx-default.conf /etc/nginx/sites-enabled/default + +EXPOSE 80 + +ENTRYPOINT ["bash", "-c", "./start.sh nginx"] diff --git a/docker/app.py b/docker/app.py new file mode 100644 index 000000000..df17dcb3b --- /dev/null +++ b/docker/app.py @@ -0,0 +1,10 @@ +# WSGI module for use with Apache mod_wsgi or gunicorn + +# # uncomment the following lines for logging +# # create a log.ini with `mapproxy-util create -t log-ini` +# from logging.config import fileConfig +# import os.path +# fileConfig(r'/mapproxy/config/log.ini', {'here': os.path.dirname(__file__)}) + +from mapproxy.wsgiapp import make_wsgi_app +application = make_wsgi_app(r'/mapproxy/config/mapproxy.yaml', reloader=True) diff --git a/docker/nginx-default.conf b/docker/nginx-default.conf new file mode 100644 index 000000000..f637619fc --- /dev/null +++ b/docker/nginx-default.conf @@ -0,0 +1,15 @@ +upstream mapproxy { + server 0.0.0.0:8080; +} +server { + listen 80; + + root /var/www/html/; + + location /mapproxy/ { + rewrite /mapproxy/(.+) /$1 break; + uwsgi_param SCRIPT_NAME /mapproxy; + uwsgi_pass mapproxy; + include uwsgi_params; + } +} diff --git a/docker/start.sh b/docker/start.sh new file mode 100755 index 000000000..633dc5e41 --- /dev/null +++ b/docker/start.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +TARGET=$1 +done=0 +trap 'done=1' TERM INT +cd /mapproxy + +groupadd mapproxy && \ +useradd --home-dir /mapproxy -s /bin/bash -g mapproxy mapproxy && \ +chown -R mapproxy:mapproxy /mapproxy/config/cache_data + +# create config files if they do not exist yet +if [ ! -f /mapproxy/config/mapproxy.yaml ]; then + echo "No mapproxy configuration found. Creating one from template." + mapproxy-util create -t base-config config +fi + +if [ "$TARGET" = "nginx" ]; then + service nginx restart && + su mapproxy -c "/usr/local/bin/uwsgi --ini /mapproxy/uwsgi.conf &" +elif [ "$TARGET" = 'development' ]; then + su mapproxy -c "mapproxy-util serve-develop -b 0.0.0.0 /mapproxy/config/mapproxy.yaml &" +else + echo "No-op container started. Overwrite ENTRYPOINT with needed mapproxy command." + su mapproxy -c "sleep infinity &" +fi + +while [ $done = 0 ]; do + sleep 1 & + wait +done diff --git a/docker/uwsgi.conf b/docker/uwsgi.conf new file mode 100644 index 000000000..a7e26168b --- /dev/null +++ b/docker/uwsgi.conf @@ -0,0 +1,10 @@ +[uwsgi] +master = true +chdir = /mapproxy +pyargv = /mapproxy/config/mapproxy.yaml +wsgi-file = /mapproxy/app.py +pidfile=/tmp/mapproxy.pid +socket = 0.0.0.0:8080 +processes = 2 +threads = 10 +chmod-socket = 777 From ea8e6b96b4a07249d870a91b850176ad9f461c70 Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Wed, 12 Apr 2023 17:18:33 +0200 Subject: [PATCH 066/209] Update pillow to latest version --- requirements-tests.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 7367640b2..74b24f73e 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -1,8 +1,7 @@ azure-storage-blob>=12.9.0 Jinja2==2.11.3 MarkupSafe==1.1.1 -Pillow==8.2.0;python_version in "3.7 3.8 3.9" -Pillow==8.4.0;python_version>="3.10" +Pillow==9.5.0 PyYAML==5.4 Shapely==1.7.0 WebOb==1.8.6 From f322afd00f6745a80e22d0eae2e230cb86c5e0f6 Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Wed, 12 Apr 2023 17:24:30 +0200 Subject: [PATCH 067/209] Create dependabot.yml --- .github/dependabot.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..b38df29f4 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "daily" From da0b21f59b35a7889266a7505484cc96dac15196 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Apr 2023 15:25:55 +0000 Subject: [PATCH 068/209] build(deps): bump certifi from 2020.6.20 to 2022.12.7 Bumps [certifi](https://github.com/certifi/python-certifi) from 2020.6.20 to 2022.12.7. - [Release notes](https://github.com/certifi/python-certifi/releases) - [Commits](https://github.com/certifi/python-certifi/compare/2020.06.20...2022.12.07) --- updated-dependencies: - dependency-name: certifi dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 74b24f73e..5a3092ff4 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -16,7 +16,7 @@ boto3==1.24.7;python_version>="3.10" boto==2.49.0 botocore==1.17.46;python_version<"3.10" botocore==1.27.7;python_version>="3.10" -certifi==2020.6.20 +certifi==2022.12.7 cffi==1.15.1; cfn-lint==0.35.0 chardet==3.0.4 From f62fa1c01828a4f11e8ed56e8c8d31692bf7020a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Apr 2023 15:31:16 +0000 Subject: [PATCH 069/209] build(deps): bump future from 0.18.2 to 0.18.3 Bumps [future](https://github.com/PythonCharmers/python-future) from 0.18.2 to 0.18.3. - [Release notes](https://github.com/PythonCharmers/python-future/releases) - [Changelog](https://github.com/PythonCharmers/python-future/blob/master/docs/changelog.rst) - [Commits](https://github.com/PythonCharmers/python-future/compare/v0.18.2...v0.18.3) --- updated-dependencies: - dependency-name: future dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 74b24f73e..19d76eb54 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -25,7 +25,7 @@ decorator==4.4.2 docker==4.3.0 docutils==0.15.2 ecdsa==0.14.1 -future==0.18.2 +future==0.18.3 idna==2.8 importlib-metadata==1.7.0 iniconfig==1.0.1 From 0415ff2481bd1b51007e66c3eded52c99c55a0f2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Apr 2023 15:35:41 +0000 Subject: [PATCH 070/209] Bump redis from 3.5.3 to 4.5.4 Bumps [redis](https://github.com/redis/redis-py) from 3.5.3 to 4.5.4. - [Release notes](https://github.com/redis/redis-py/releases) - [Changelog](https://github.com/redis/redis-py/blob/master/CHANGES) - [Commits](https://github.com/redis/redis-py/compare/3.5.3...v4.5.4) --- updated-dependencies: - dependency-name: redis dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 74b24f73e..9acf05a2e 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -57,7 +57,7 @@ pytest==7.3.0;python_version>="3.10" python-dateutil==2.8.1 python-jose==3.2.0 pytz==2020.1 -redis==3.5.3 +redis==4.5.4 requests==2.24.0 responses==0.10.16 riak==2.7.0 From 274799d959376a70af1cd802e5546fb5e8e040a2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Apr 2023 20:56:40 +0000 Subject: [PATCH 071/209] Bump toml from 0.10.1 to 0.10.2 Bumps [toml](https://github.com/uiri/toml) from 0.10.1 to 0.10.2. - [Release notes](https://github.com/uiri/toml/releases) - [Changelog](https://github.com/uiri/toml/blob/master/RELEASE.rst) - [Commits](https://github.com/uiri/toml/compare/0.10.1...0.10.2) --- updated-dependencies: - dependency-name: toml dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index a3066b679..5cec4645a 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -67,7 +67,7 @@ s3transfer==0.6.0;python_version>="3.10" six==1.15.0 soupsieve==2.0.1 sshpubkeys==3.1.0 -toml==0.10.1 +toml==0.10.2 urllib3==1.25.10 waitress==1.4.4 websocket-client==0.57.0 From 6c53487d83947671f8f65acdd80d28850461f95e Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Thu, 13 Apr 2023 09:46:10 +0200 Subject: [PATCH 072/209] Manually updating some dependent libs --- requirements-tests.txt | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 5cec4645a..1600c7c60 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -11,11 +11,9 @@ attrs==21.4.0;python_version>="3.10" aws-sam-translator==1.26.0 aws-xray-sdk==2.6.0 beautifulsoup4==4.9.1 -boto3==1.14.46;python_version<"3.10" -boto3==1.24.7;python_version>="3.10" +boto3==1.26.112 boto==2.49.0 -botocore==1.17.46;python_version<"3.10" -botocore==1.27.7;python_version>="3.10" +botocore==1.29.112 certifi==2022.12.7 cffi==1.15.1; cfn-lint==0.35.0 @@ -62,8 +60,7 @@ requests==2.24.0 responses==0.10.16 riak==2.7.0 rsa==4.7 -s3transfer==0.3.3;python_version<"3.10" -s3transfer==0.6.0;python_version>="3.10" +s3transfer==0.6.0 six==1.15.0 soupsieve==2.0.1 sshpubkeys==3.1.0 From 22bd411749cc81ad0f6b313dd9209759bb9dd22a Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Thu, 13 Apr 2023 10:12:11 +0200 Subject: [PATCH 073/209] updating requests package --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 1600c7c60..20f5d2462 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -56,7 +56,7 @@ python-dateutil==2.8.1 python-jose==3.2.0 pytz==2020.1 redis==4.5.4 -requests==2.24.0 +requests==2.28.2 responses==0.10.16 riak==2.7.0 rsa==4.7 From 88143fc9a55080722fa32a0ddad31d1c1f9a43af Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Thu, 13 Apr 2023 10:13:33 +0200 Subject: [PATCH 074/209] updating urllib package --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 20f5d2462..0b16cd91f 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -65,7 +65,7 @@ six==1.15.0 soupsieve==2.0.1 sshpubkeys==3.1.0 toml==0.10.2 -urllib3==1.25.10 +urllib3==1.26.15 waitress==1.4.4 websocket-client==0.57.0 werkzeug==1.0.1 From d404b253241acfcafa73f22f0cd85453f5a3c6b1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Apr 2023 08:34:35 +0000 Subject: [PATCH 075/209] build(deps): bump waitress from 1.4.4 to 2.1.2 Bumps [waitress](https://github.com/Pylons/waitress) from 1.4.4 to 2.1.2. - [Release notes](https://github.com/Pylons/waitress/releases) - [Changelog](https://github.com/Pylons/waitress/blob/v2.1.2/CHANGES.txt) - [Commits](https://github.com/Pylons/waitress/compare/v1.4.4...v2.1.2) --- updated-dependencies: - dependency-name: waitress dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 0b16cd91f..3d1c90418 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -66,7 +66,7 @@ soupsieve==2.0.1 sshpubkeys==3.1.0 toml==0.10.2 urllib3==1.26.15 -waitress==1.4.4 +waitress==2.1.2 websocket-client==0.57.0 werkzeug==1.0.1 wrapt==1.12.1 From 965fd459d75b82433d2a46f8585970ed6ec4a46b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Apr 2023 08:34:38 +0000 Subject: [PATCH 076/209] Bump rsa from 4.7 to 4.9 Bumps [rsa](https://github.com/sybrenstuvel/python-rsa) from 4.7 to 4.9. - [Release notes](https://github.com/sybrenstuvel/python-rsa/releases) - [Changelog](https://github.com/sybrenstuvel/python-rsa/blob/main/CHANGELOG.md) - [Commits](https://github.com/sybrenstuvel/python-rsa/compare/version-4.7...version-4.9) --- updated-dependencies: - dependency-name: rsa dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 0b16cd91f..5150be765 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -59,7 +59,7 @@ redis==4.5.4 requests==2.28.2 responses==0.10.16 riak==2.7.0 -rsa==4.7 +rsa==4.9 s3transfer==0.6.0 six==1.15.0 soupsieve==2.0.1 From 088a74e191bd0f570b3c3faa38888c8780c3d5b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Apr 2023 09:24:52 +0000 Subject: [PATCH 077/209] Bump docutils from 0.15.2 to 0.19 Bumps [docutils](https://docutils.sourceforge.io/) from 0.15.2 to 0.19. --- updated-dependencies: - dependency-name: docutils dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 8eaa1af2c..b8d49194f 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -21,7 +21,7 @@ chardet==3.0.4 cryptography==3.3.2 decorator==4.4.2 docker==4.3.0 -docutils==0.15.2 +docutils==0.19 ecdsa==0.14.1 future==0.18.3 idna==2.8 From b525d7a9e6b7b5992e0a78568abe3ced4c99cf6a Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Thu, 13 Apr 2023 13:11:55 +0200 Subject: [PATCH 078/209] Bump cryptography to 40.0.1 --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index b8d49194f..1fe3ed28d 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -18,7 +18,7 @@ certifi==2022.12.7 cffi==1.15.1; cfn-lint==0.35.0 chardet==3.0.4 -cryptography==3.3.2 +cryptography==40.0.1 decorator==4.4.2 docker==4.3.0 docutils==0.19 From 191ec2c826b0ba95f1406949dfcaf5f6b044b32a Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Thu, 13 Apr 2023 13:42:45 +0200 Subject: [PATCH 079/209] dev: prepare 1.16.0 release --- CHANGES.txt | 26 ++++++++++++++++++++++++++ doc/conf.py | 4 ++-- setup.py | 2 +- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 278685bc3..818e558f4 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,31 @@ Nightly ~~~~~~~~~~~~~~~~~ + +1.16.0 2023-04-13 +~~~~~~~~~~~~~~~~~ +Breaking: + +- Removal of old unsupported python versions 2.7 and 3.6 +- Tested python version range is now 3.7 to 3.11 +- Lots of dependency updates + +Improvements: + +- New cache: Azure Blob storage +- Lots of dependency updates +- Support for JSON legends +- Updated layer preview to use latest openlayers +- Official docker images released, documentation updated + +Fixes: + +- Fixed issues with sqlite cache (#629 and #625) +- Dependency correction +- library detection difficulties on some operating systems +- encoding issues with umlauts in featureinfo +- Several minor bugfixes +- mapproxy-util export - derive image format from cache config + 1.15.1 2022-06-14 ~~~~~~~~~~~~~~~~~ diff --git a/doc/conf.py b/doc/conf.py index c29941d4e..95c44dfdb 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -49,9 +49,9 @@ # built documents. # # The short X.Y version. -version = '1.15' +version = '1.16' # The full version, including alpha/beta/rc tags. -release = '1.15.1' +release = '1.16.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/setup.py b/setup.py index 0297779ed..7688e3697 100644 --- a/setup.py +++ b/setup.py @@ -54,7 +54,7 @@ def long_description(changelog_releases=10): setup( name='MapProxy', - version="1.15.1", + version="1.16.0", description='An accelerating proxy for tile and web map services', long_description=long_description(7), author='Oliver Tonnhofer', From f2ee73ae25779c9bfe233853b17ab6196d31c8f3 Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Thu, 13 Apr 2023 13:53:35 +0200 Subject: [PATCH 080/209] doc build fixup --- .github/workflows/ghpages.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ghpages.yml b/.github/workflows/ghpages.yml index e08b2a32d..51f38cf16 100644 --- a/.github/workflows/ghpages.yml +++ b/.github/workflows/ghpages.yml @@ -22,7 +22,9 @@ jobs: git config --global user.name 'ghpages' git config --global user.email 'ghpages@users.noreply.github.com' git fetch --all + git reset --hard HEAD git checkout gh-pages + git reset --hard HEAD git pull origin gh-pages git rebase origin/master sphinx-build doc/ docs From 3747e7823f7e8b69c9be4685226bdfc1608c0740 Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Thu, 13 Apr 2023 15:05:33 +0200 Subject: [PATCH 081/209] Fix docker version --- .github/workflows/dockerbuild.yml | 52 +++++++++++++++++++++++++++++-- .github/workflows/ghpages.yml | 4 +-- 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/.github/workflows/dockerbuild.yml b/.github/workflows/dockerbuild.yml index d6c9a1d2c..ec1fe5a0d 100644 --- a/.github/workflows/dockerbuild.yml +++ b/.github/workflows/dockerbuild.yml @@ -2,6 +2,11 @@ name: Docker Build and Publish on: workflow_dispatch: + inputs: + tags: + description: 'Manual supplied image tag like 1.16.0' + required: true + type: string push: tags: - "*.*.*" @@ -33,6 +38,20 @@ jobs: - name: Build and push base image uses: docker/build-push-action@v4 + if: ${{ inputs.tags }} + with: + context: docker/ + file: ./docker/Dockerfile + push: true + build-args: | + MAPPROXY_VERSION=${{ inputs.tags }} + target: base + tags: | + ghcr.io/mapproxy/mapproxy/mapproxy:${{ inputs.tags }} + + - name: Build and push base image + uses: docker/build-push-action@v4 + if: ${{ !inputs.tags }} with: context: docker/ file: ./docker/Dockerfile @@ -41,10 +60,24 @@ jobs: MAPPROXY_VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} target: base tags: | - ${{ steps.meta.outputs.tags }} + ghcr.io/mapproxy/mapproxy/mapproxy:${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} - name: Build and push development image uses: docker/build-push-action@v4 + if: ${{ inputs.tags }} + with: + context: docker/ + file: ./docker/Dockerfile + push: true + build-args: | + MAPPROXY_VERSION=${{ inputs.tags }} + target: development + tags: | + ghcr.io/mapproxy/mapproxy/mapproxy:${{ inputs.tags }}-dev + + - name: Build and push development image + uses: docker/build-push-action@v4 + if: ${{ !inputs.tags }} with: context: docker/ file: ./docker/Dockerfile @@ -53,10 +86,23 @@ jobs: MAPPROXY_VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} target: development tags: | - ${{ steps.meta.outputs.tags }}-dev + ghcr.io/mapproxy/mapproxy/mapproxy:${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}-dev - name: Build and push nginx image uses: docker/build-push-action@v4 + if: ${{ inputs.tags }} + with: + context: docker/ + file: ./docker/Dockerfile + push: true + build-args: | + MAPPROXY_VERSION=${{ inputs.tags }} + target: nginx + tags: | + ghcr.io/mapproxy/mapproxy/mapproxy:${{ inputs.tags }}-nginx + - name: Build and push nginx image + uses: docker/build-push-action@v4 + if: ${{ !inputs.tags }} with: context: docker/ file: ./docker/Dockerfile @@ -65,4 +111,4 @@ jobs: MAPPROXY_VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} target: nginx tags: | - ${{ steps.meta.outputs.tags }}-nginx + ghcr.io/mapproxy/mapproxy/mapproxy:${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}-nginx diff --git a/.github/workflows/ghpages.yml b/.github/workflows/ghpages.yml index 51f38cf16..80ff17bea 100644 --- a/.github/workflows/ghpages.yml +++ b/.github/workflows/ghpages.yml @@ -12,7 +12,7 @@ jobs: steps: - name: Checkout sources - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Install dependencies ⏬ run: pip install sphinx sphinx-bootstrap-theme @@ -24,8 +24,6 @@ jobs: git fetch --all git reset --hard HEAD git checkout gh-pages - git reset --hard HEAD - git pull origin gh-pages git rebase origin/master sphinx-build doc/ docs git add docs From 919d9ab45b4c6610168b5213807cf17e6af757c8 Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Thu, 13 Apr 2023 16:46:52 +0200 Subject: [PATCH 082/209] Updating documentation links --- doc/install_docker.rst | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/doc/install_docker.rst b/doc/install_docker.rst index a171e7ce8..191e8339b 100644 --- a/doc/install_docker.rst +++ b/doc/install_docker.rst @@ -4,13 +4,13 @@ MapProxy does have its own official docker images. These are currently hosted on the GitHub container registry and can be found here: - - https://github.com/orgs/mapproxy/packages/container/package/mapproxy + - https://github.com/mapproxy/mapproxy/pkgs/container/mapproxy%2Fmapproxy Currently we have 3 different images for every release, named e.g. - - ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1 - - ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1-dev - - ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1-nginx + - ghcr.io/mapproxy/mapproxy/mapproxy:1.16.0 + - ghcr.io/mapproxy/mapproxy/mapproxy:1.16.0-dev + - ghcr.io/mapproxy/mapproxy/mapproxy:1.16.0-nginx The first one comes with everything installed, but no HTTP WebServer running. You can use it to implement your custom setup. @@ -40,15 +40,15 @@ Quickstart Depending on your needs, pull the desired image (see description above): - docker pull ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1 + docker pull ghcr.io/mapproxy/mapproxy/mapproxy:1.16.0 or: - docker pull ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1-dev + docker pull ghcr.io/mapproxy/mapproxy/mapproxy:1.16.0-dev or: - docker pull ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1-nginx + docker pull ghcr.io/mapproxy/mapproxy/mapproxy:1.16.0-nginx Create a directory (e.g. `mapproxyconfig`) for your configuration files. Put your configs into that folder. If you do not supply config files (seed.yaml and mapproxy.yaml) the image will create them for you. @@ -60,7 +60,7 @@ Running the `plain` image without starting a webserver .. code-block:: sh - docker run --rm --name "mapproxy" -d -t -v `pwd`/mapproxyconfig:/mapproxy/config ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1 + docker run --rm --name "mapproxy" -d -t -v `pwd`/mapproxyconfig:/mapproxy/config ghcr.io/mapproxy/mapproxy/mapproxy:1.16.0 Afterwards, the `MapProxy` instance is idling and you can connect with the container via e.g. @@ -71,7 +71,7 @@ Running the `dev` image .. code-block:: sh - docker run --rm --name "mapproxy" -p 8080:8080 -d -t -v `pwd`/mapproxyconfig:/mapproxy/config ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1-dev + docker run --rm --name "mapproxy" -p 8080:8080 -d -t -v `pwd`/mapproxyconfig:/mapproxy/config ghcr.io/mapproxy/mapproxy/mapproxy:1.16.0-dev Afterwards, the `MapProxy` instance is running on http://localhost:8080/demo/ @@ -81,7 +81,7 @@ Running the `nginx` image .. code-block:: sh - docker run --rm --name "mapproxy" -p 80:80 -d -t -v `pwd`/mapproxyconfig:/mapproxy/config ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1-nginx + docker run --rm --name "mapproxy" -p 80:80 -d -t -v `pwd`/mapproxyconfig:/mapproxy/config ghcr.io/mapproxy/mapproxy/mapproxy:1.16.0-nginx Afterwards, the `MapProxy` instance is running on http://localhost/mapproxy/demo/ @@ -101,18 +101,18 @@ For the `plain` image without starting a webserver .. code-block:: sh - docker build --build-arg MAPPROXY_VERSION=1.15.1 --target base -t ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1 . + docker build --build-arg MAPPROXY_VERSION=1.16.0 --target base -t ghcr.io/mapproxy/mapproxy/mapproxy:1.16.0 . For the `dev` image ~~~~~~~~~~~~~~~~~~~ .. code-block:: sh - docker build --build-arg MAPPROXY_VERSION=1.15.1 --target development -t ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1-dev . + docker build --build-arg MAPPROXY_VERSION=1.16.0 --target development -t ghcr.io/mapproxy/mapproxy/mapproxy:1.16.0-dev . For the `nginx` image ~~~~~~~~~~~~~~~~~~~~~ .. code-block:: sh - docker build --build-arg MAPPROXY_VERSION=1.15.1 --target nginx -t ghcr.io/mapproxy/mapproxy/mapproxy:1.15.1-nginx . + docker build --build-arg MAPPROXY_VERSION=1.16.0 --target nginx -t ghcr.io/mapproxy/mapproxy/mapproxy:1.16.0-nginx . From e7ff524235d80a27ae08384a6620db7c0bb00a87 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Apr 2023 20:56:37 +0000 Subject: [PATCH 083/209] Bump requests from 2.20.0 to 2.28.2 Bumps [requests](https://github.com/psf/requests) from 2.20.0 to 2.28.2. - [Release notes](https://github.com/psf/requests/releases) - [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md) - [Commits](https://github.com/psf/requests/compare/v2.20.0...v2.28.2) --- updated-dependencies: - dependency-name: requests dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-appveyor.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-appveyor.txt b/requirements-appveyor.txt index 67d372953..01fd065a8 100644 --- a/requirements-appveyor.txt +++ b/requirements-appveyor.txt @@ -1,4 +1,4 @@ WebTest==2.0.25 pytest==3.6.0 WebOb==1.7.1 -requests==2.20.0 +requests==2.28.2 From d035228faa3b9c5206eea34db33bd04f4ae76589 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Apr 2023 20:59:15 +0000 Subject: [PATCH 084/209] Bump botocore from 1.29.112 to 1.29.116 Bumps [botocore](https://github.com/boto/botocore) from 1.29.112 to 1.29.116. - [Release notes](https://github.com/boto/botocore/releases) - [Changelog](https://github.com/boto/botocore/blob/develop/CHANGELOG.rst) - [Commits](https://github.com/boto/botocore/compare/1.29.112...1.29.116) --- updated-dependencies: - dependency-name: botocore dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 1fe3ed28d..3c11768fb 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -13,7 +13,7 @@ aws-xray-sdk==2.6.0 beautifulsoup4==4.9.1 boto3==1.26.112 boto==2.49.0 -botocore==1.29.112 +botocore==1.29.116 certifi==2022.12.7 cffi==1.15.1; cfn-lint==0.35.0 From 5528ba0299bd958e6f2d24420e3405047c22e11d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Apr 2023 20:56:27 +0000 Subject: [PATCH 085/209] Bump zipp from 3.1.0 to 3.15.0 Bumps [zipp](https://github.com/jaraco/zipp) from 3.1.0 to 3.15.0. - [Release notes](https://github.com/jaraco/zipp/releases) - [Changelog](https://github.com/jaraco/zipp/blob/main/CHANGES.rst) - [Commits](https://github.com/jaraco/zipp/compare/v3.1.0...v3.15.0) --- updated-dependencies: - dependency-name: zipp dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 3c11768fb..5ffa1d322 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -71,4 +71,4 @@ websocket-client==0.57.0 werkzeug==1.0.1 wrapt==1.12.1 xmltodict==0.12.0 -zipp==3.1.0 +zipp==3.15.0 From cb516962ed1cbbbc6a5d543911e373a18266cd81 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Apr 2023 20:56:30 +0000 Subject: [PATCH 086/209] Bump pyrsistent from 0.16.0 to 0.19.3 Bumps [pyrsistent](https://github.com/tobgu/pyrsistent) from 0.16.0 to 0.19.3. - [Release notes](https://github.com/tobgu/pyrsistent/releases) - [Changelog](https://github.com/tobgu/pyrsistent/blob/master/CHANGES.txt) - [Commits](https://github.com/tobgu/pyrsistent/compare/v0.16.0...v0.19.3) --- updated-dependencies: - dependency-name: pyrsistent dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 3c11768fb..81435559a 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -49,7 +49,7 @@ pyparsing==2.4.7 pyproj==2.6.1.post1;python_version in "3.7 3.8 3.9" pyproj==3.3.1;python_version=="3.10" pyproj==3.5.0;python_version>"3.10" -pyrsistent==0.16.0 +pyrsistent==0.19.3 pytest==6.0.1;python_version in "3.7 3.8 3.9" pytest==7.3.0;python_version>="3.10" python-dateutil==2.8.1 From 0bb257b8220d30166a69a80a8d5f1efc158a8613 Mon Sep 17 00:00:00 2001 From: Christian Mahnke Date: Tue, 25 Apr 2023 21:48:35 +0200 Subject: [PATCH 087/209] Also build ARM64 --- .github/workflows/dockerbuild.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/dockerbuild.yml b/.github/workflows/dockerbuild.yml index ec1fe5a0d..c3993d15c 100644 --- a/.github/workflows/dockerbuild.yml +++ b/.github/workflows/dockerbuild.yml @@ -26,6 +26,9 @@ jobs: tags: | type=semver,pattern={{version}} + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 @@ -48,6 +51,7 @@ jobs: target: base tags: | ghcr.io/mapproxy/mapproxy/mapproxy:${{ inputs.tags }} + platforms: linux/amd64,linux/arm64 - name: Build and push base image uses: docker/build-push-action@v4 @@ -61,6 +65,7 @@ jobs: target: base tags: | ghcr.io/mapproxy/mapproxy/mapproxy:${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} + platforms: linux/amd64,linux/arm64 - name: Build and push development image uses: docker/build-push-action@v4 @@ -74,6 +79,7 @@ jobs: target: development tags: | ghcr.io/mapproxy/mapproxy/mapproxy:${{ inputs.tags }}-dev + platforms: linux/amd64,linux/arm64 - name: Build and push development image uses: docker/build-push-action@v4 @@ -87,6 +93,7 @@ jobs: target: development tags: | ghcr.io/mapproxy/mapproxy/mapproxy:${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}-dev + platforms: linux/amd64,linux/arm64 - name: Build and push nginx image uses: docker/build-push-action@v4 @@ -100,6 +107,8 @@ jobs: target: nginx tags: | ghcr.io/mapproxy/mapproxy/mapproxy:${{ inputs.tags }}-nginx + platforms: linux/amd64,linux/arm64 + - name: Build and push nginx image uses: docker/build-push-action@v4 if: ${{ !inputs.tags }} @@ -112,3 +121,4 @@ jobs: target: nginx tags: | ghcr.io/mapproxy/mapproxy/mapproxy:${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}-nginx + platforms: linux/amd64,linux/arm64 \ No newline at end of file From e2d9d6aadd779eb830f5a5a258eed6246000326d Mon Sep 17 00:00:00 2001 From: Christian Mahnke Date: Tue, 25 Apr 2023 22:00:13 +0200 Subject: [PATCH 088/209] More Changes for portable Docker build --- .github/workflows/dockerbuild.yml | 14 +++++++------- docker/Dockerfile | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/dockerbuild.yml b/.github/workflows/dockerbuild.yml index c3993d15c..054c1fc6f 100644 --- a/.github/workflows/dockerbuild.yml +++ b/.github/workflows/dockerbuild.yml @@ -22,7 +22,7 @@ jobs: uses: docker/metadata-action@v4 with: images: | - ghcr.io/mapproxy/mapproxy/mapproxy + ghcr.io/${{ github.repository }}/mapproxy tags: | type=semver,pattern={{version}} @@ -50,7 +50,7 @@ jobs: MAPPROXY_VERSION=${{ inputs.tags }} target: base tags: | - ghcr.io/mapproxy/mapproxy/mapproxy:${{ inputs.tags }} + ghcr.io/${{ github.repository }}/mapproxy:${{ inputs.tags }} platforms: linux/amd64,linux/arm64 - name: Build and push base image @@ -64,7 +64,7 @@ jobs: MAPPROXY_VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} target: base tags: | - ghcr.io/mapproxy/mapproxy/mapproxy:${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} + ghcr.io/${{ github.repository }}/mapproxy:${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} platforms: linux/amd64,linux/arm64 - name: Build and push development image @@ -78,7 +78,7 @@ jobs: MAPPROXY_VERSION=${{ inputs.tags }} target: development tags: | - ghcr.io/mapproxy/mapproxy/mapproxy:${{ inputs.tags }}-dev + ghcr.io/${{ github.repository }}/mapproxy:${{ inputs.tags }}-dev platforms: linux/amd64,linux/arm64 - name: Build and push development image @@ -92,7 +92,7 @@ jobs: MAPPROXY_VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} target: development tags: | - ghcr.io/mapproxy/mapproxy/mapproxy:${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}-dev + ghcr.io/${{ github.repository }}/mapproxy:${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}-dev platforms: linux/amd64,linux/arm64 - name: Build and push nginx image @@ -106,7 +106,7 @@ jobs: MAPPROXY_VERSION=${{ inputs.tags }} target: nginx tags: | - ghcr.io/mapproxy/mapproxy/mapproxy:${{ inputs.tags }}-nginx + ghcr.io/${{ github.repository }}/mapproxy:${{ inputs.tags }}-nginx platforms: linux/amd64,linux/arm64 - name: Build and push nginx image @@ -120,5 +120,5 @@ jobs: MAPPROXY_VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} target: nginx tags: | - ghcr.io/mapproxy/mapproxy/mapproxy:${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}-nginx + ghcr.io/${{ github.repository }}/mapproxy:${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}-nginx platforms: linux/amd64,linux/arm64 \ No newline at end of file diff --git a/docker/Dockerfile b/docker/Dockerfile index 6893a7be6..d5b00fb01 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -22,7 +22,7 @@ RUN mkdir /mapproxy WORKDIR /mapproxy # fix potential issue finding correct shared library libproj (fixed in newer releases) -RUN ln -s /usr/lib/x86_64-linux-gnu/libproj.so /usr/lib/x86_64-linux-gnu/liblibproj.so +RUN ln -s /usr/lib/`uname -m`-linux-gnu/libproj.so /usr/lib/`uname -m`-linux-gnu/liblibproj.so RUN pip install MapProxy==$MAPPROXY_VERSION && \ # temporary fix for v1.15.1 From 505319261c8ece3d400c9c677e76160ac8aa56d2 Mon Sep 17 00:00:00 2001 From: Christian Mahnke Date: Tue, 25 Apr 2023 22:12:24 +0200 Subject: [PATCH 089/209] Check dependencies, enable package creation --- .github/dependabot.yml | 8 ++++++++ .github/workflows/dockerbuild.yml | 3 +++ 2 files changed, 11 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index b38df29f4..5fda799d9 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -4,3 +4,11 @@ updates: directory: "/" schedule: interval: "daily" + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + - package-ecosystem: "docker" + directory: "/" + schedule: + interval: "weekly" \ No newline at end of file diff --git a/.github/workflows/dockerbuild.yml b/.github/workflows/dockerbuild.yml index 054c1fc6f..82cf16546 100644 --- a/.github/workflows/dockerbuild.yml +++ b/.github/workflows/dockerbuild.yml @@ -1,5 +1,8 @@ name: Docker Build and Publish +permissions: + packages: write + on: workflow_dispatch: inputs: From 494964652d94ce063d8f8d8ef166cfa43c4b7ab5 Mon Sep 17 00:00:00 2001 From: Christian Mahnke Date: Wed, 26 Apr 2023 09:35:58 +0200 Subject: [PATCH 090/209] Add newlines to end of file --- .github/dependabot.yml | 2 +- .github/workflows/dockerbuild.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 5fda799d9..ff621e589 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,4 +11,4 @@ updates: - package-ecosystem: "docker" directory: "/" schedule: - interval: "weekly" \ No newline at end of file + interval: "weekly" diff --git a/.github/workflows/dockerbuild.yml b/.github/workflows/dockerbuild.yml index 82cf16546..fbe9af3be 100644 --- a/.github/workflows/dockerbuild.yml +++ b/.github/workflows/dockerbuild.yml @@ -124,4 +124,4 @@ jobs: target: nginx tags: | ghcr.io/${{ github.repository }}/mapproxy:${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}-nginx - platforms: linux/amd64,linux/arm64 \ No newline at end of file + platforms: linux/amd64,linux/arm64 From 8b428a65df0f8dde607a6d87291b634cc9e110a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Apr 2023 07:43:44 +0000 Subject: [PATCH 091/209] Bump actions/checkout from 2 to 3 Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index dfa838cbc..fe9aa6e32 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -52,7 +52,7 @@ jobs: sudo apt install proj-bin libgeos-dev libgdal-dev libxslt1-dev libxml2-dev build-essential python-dev libjpeg-dev zlib1g-dev libfreetype6-dev protobuf-compiler libprotoc-dev -y - name: Checkout sources - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Use python ${{ matrix.python-version }} uses: actions/setup-python@v2 From cfc03f225e261ce67c24dbb68cf13de191d72721 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Apr 2023 07:43:53 +0000 Subject: [PATCH 092/209] Bump actions/cache from 2 to 3 Bumps [actions/cache](https://github.com/actions/cache) from 2 to 3. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index dfa838cbc..ac4386184 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -60,7 +60,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Cache python deps 💾 - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ~/.cache/pip key: ${{ runner.OS }}-python-${{ hashFiles('**/requirements-tests.txt') }} From 1933329711fef7522d0146d4db5e840c619426a5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Apr 2023 13:50:53 +0000 Subject: [PATCH 093/209] Bump actions/setup-python from 2 to 4 Bumps [actions/setup-python](https://github.com/actions/setup-python) from 2 to 4. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v2...v4) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fe9aa6e32..9d23c772a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -55,7 +55,7 @@ jobs: uses: actions/checkout@v3 - name: Use python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} From e4cb979775a3a4bd4d9fcb1369d83fbc8d619a8d Mon Sep 17 00:00:00 2001 From: tobwen <1864057+tobwen@users.noreply.github.com> Date: Mon, 15 May 2023 07:17:17 +0200 Subject: [PATCH 094/209] typo in attribute of map object This fixes a typo in the attribute name carrying the map object's PID, which leads to an uncaught crash. --- mapproxy/source/mapnik.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapproxy/source/mapnik.py b/mapproxy/source/mapnik.py index be517dd99..c2d0ba6cc 100644 --- a/mapproxy/source/mapnik.py +++ b/mapproxy/source/mapnik.py @@ -153,7 +153,7 @@ def _get_map_obj(self, mapfile): m = _map_objs_queues[queue_cachekey].get_nowait() # check explicitly for the process ID to ensure that # map objects cannot move between processes - if m.map_object_pid == process_id: + if m.map_obj_pid == process_id: return m except Empty: pass From 3bdc4fcfa3b1f39efcefcf4ab297f542cf9a00d3 Mon Sep 17 00:00:00 2001 From: Peter Smythe Date: Wed, 7 Jun 2023 16:33:17 +0200 Subject: [PATCH 095/209] Update virtualenv link --- doc/install.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/install.rst b/doc/install.rst index a4bd88721..a821d622e 100644 --- a/doc/install.rst +++ b/doc/install.rst @@ -19,7 +19,7 @@ This is really, easy `but` we recommend to install MapProxy into a `virtual Pyth Create a new virtual environment -------------------------------- -``virtualenv`` is available as ``python-virtualenv`` on most Linux systems. You can also `install Virtualenv from source `_. +``virtualenv`` is available as ``python-virtualenv`` on most Linux systems. You can also `install Virtualenv from source `_. To create a new environment with the name ``mapproxy`` call:: From 1e0481e7770483538aaecb259c6f5251fb5dce1c Mon Sep 17 00:00:00 2001 From: Peter Smythe Date: Fri, 9 Jun 2023 11:35:38 +0200 Subject: [PATCH 096/209] Add debugging in IDE to Tips on development documentation page --- doc/development.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/development.rst b/doc/development.rst index 692128845..46136af4b 100644 --- a/doc/development.rst +++ b/doc/development.rst @@ -88,6 +88,8 @@ You are using `virtualenv` as described in :doc:`install`, right? Before you start hacking on MapProxy you should install it in development-mode. In the root directory of MapProxy call ``pip install -e ./``. Instead of installing and thus copying MapProxy into your `virtualenv`, this will just link to your source directory. If you now start MapProxy, the source from your MapProxy directory will be used. Any change you do in the code will be available if you restart MapProxy. If you use the ``mapproxy-util serve-develop`` command, any change in the source will issue a reload of the MapProxy server. +In order to debug MapProxy in an IDE of your choice, set your working directory to one containing your ``mapproxy.yaml`` configuration file and debug the ``mapproxy\script\util.py`` file with the command line parameters ``serve-develop mapproxy.yaml``. Around line 107 of util.py, you may need to temporarily change ``use_reloader`` from True to False. Then browse to http://localhost:8080/ to trigger a request to debug. + Coding Style Guide ------------------ From c65e48b23bf105f4a920603f35a3b48a63e20657 Mon Sep 17 00:00:00 2001 From: Peter Smythe Date: Fri, 9 Jun 2023 15:13:04 +0200 Subject: [PATCH 097/209] Update tutorial.rst spelling mistake --- doc/tutorial.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/tutorial.rst b/doc/tutorial.rst index e5478b640..35ae4bb06 100644 --- a/doc/tutorial.rst +++ b/doc/tutorial.rst @@ -286,7 +286,7 @@ preferred factor after it. A magical value of `res_factor` is **sqrt2**, the square root of two. It doubles the number of cached resolutions, so you have 40 instead of 20 available resolutions. Every second resolution is identical to the power-of-two resolutions, so you can -use this layer not only in classic WMS clients with free zomming, but also in tile-based clients +use this layer not only in classic WMS clients with free zooming, but also in tile-based clients like OpenLayers which only request in these resolutions. Look at the :ref:`configuration examples for vector data for more information `. From 47e7cf9eeb182437626a884ce67fb3b2b1994f63 Mon Sep 17 00:00:00 2001 From: Peter Smythe Date: Fri, 9 Jun 2023 15:59:38 +0200 Subject: [PATCH 098/209] Update configuration_examples.rst with static tile example --- doc/configuration_examples.rst | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/doc/configuration_examples.rst b/doc/configuration_examples.rst index 948b02852..91c764a63 100644 --- a/doc/configuration_examples.rst +++ b/doc/configuration_examples.rst @@ -800,6 +800,21 @@ Example part of ``mapproxy.yaml`` to generate a quadkey cache:: directory_layout: quadkey +.. _static_tile_source: + +Generate a static image for every tile +====================================== + +In order to display a static message on every tile, you can configure a tile source URL that is a local file. + +Example part of ``mapproxy.yaml`` to generate a static tile source:: + + sources: + tile_source: + type: tile + url: file:///path/service-suspended.png + + .. _hq_tiles: HQ/Retina tiles From 43eaa9b5831176c0089f906a3aa9d003a6fdff44 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 5 Jul 2023 12:00:10 +0300 Subject: [PATCH 099/209] Add Redis connection/general error handler --- mapproxy/cache/redis.py | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/mapproxy/cache/redis.py b/mapproxy/cache/redis.py index 2c9e40787..3cb805ea5 100644 --- a/mapproxy/cache/redis.py +++ b/mapproxy/cache/redis.py @@ -52,7 +52,15 @@ def is_cached(self, tile, dimensions=None): if tile.coord is None or tile.source: return True - return self.r.exists(self._key(tile)) + try: + log.debug('exists_key, key: %s' % key) + return self.r.exists(self._key(tile)) + except redis.exceptions.ConnectionError as e: + log.error('Error during connection %s' % e) + return False + except Exception as e: + log.error('REDIS:exists_key error %s' % e) + return False def store_tile(self, tile, dimensions=None): if tile.stored: @@ -63,7 +71,17 @@ def store_tile(self, tile, dimensions=None): with tile_buffer(tile) as buf: data = buf.read() - r = self.r.set(key, data) + try: + log.debug('store_key, key: %s' % key) + r = self.r.set(key, data) + except redis.exceptions.ConnectionError as e: + log.error('Error during connection %s' % e) + return False + except Exception as e: + log.error('REDIS:store_key error %s' % e) + return False + + if self.ttl: # use ms expire times for unit-tests self.r.pexpire(key, int(self.ttl * 1000)) @@ -73,11 +91,20 @@ def load_tile(self, tile, with_metadata=False, dimensions=None): if tile.source or tile.coord is None: return True key = self._key(tile) - tile_data = self.r.get(key) - if tile_data: - tile.source = ImageSource(BytesIO(tile_data)) - return True - return False + + try: + log.debug('get_key, key: %s' % key) + tile_data = self.r.get(key) + if tile_data: + tile.source = ImageSource(BytesIO(tile_data)) + return True + return False + except redis.exceptions.ConnectionError as e: + log.error('Error during connection %s' % e) + return False + except Exception as e: + log.error('REDIS:get_key error %s' % e) + return False def remove_tile(self, tile, dimensions=None): if tile.coord is None: From 4ae77416fb28f88fb5c408704fd177b709503f43 Mon Sep 17 00:00:00 2001 From: Peter Smythe Date: Mon, 31 Jul 2023 14:09:14 +0200 Subject: [PATCH 100/209] Update configuration_examples.rst --- doc/configuration_examples.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/configuration_examples.rst b/doc/configuration_examples.rst index 91c764a63..459a47749 100644 --- a/doc/configuration_examples.rst +++ b/doc/configuration_examples.rst @@ -807,7 +807,7 @@ Generate a static image for every tile In order to display a static message on every tile, you can configure a tile source URL that is a local file. -Example part of ``mapproxy.yaml`` to generate a static tile source:: +Example part of ``mapproxy.yaml`` to generate a static tile source:: sources: tile_source: From 17cd2f8cd4ed2f57f2ff3c1c87aad49e713b183f Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Wed, 2 Aug 2023 10:39:22 +0200 Subject: [PATCH 101/209] Fixup dependencies versions for test workflow --- requirements-tests.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 436b7a1a8..dcb81d2df 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -2,7 +2,7 @@ azure-storage-blob>=12.9.0 Jinja2==2.11.3 MarkupSafe==1.1.1 Pillow==9.5.0 -PyYAML==5.4 +PyYAML==6.0.1 Shapely==1.7.0 WebOb==1.8.6 WebTest==2.0.35 @@ -46,8 +46,8 @@ py==1.11.0 pyasn1==0.4.8 pycparser==2.20 pyparsing==2.4.7 -pyproj==2.6.1.post1;python_version in "3.7 3.8 3.9" -pyproj==3.3.1;python_version=="3.10" +pyproj==2.6.1.post1;python_version in "3.7 3.8" +pyproj==3.3.1;python_version in "3.9 3.10" pyproj==3.5.0;python_version>"3.10" pyrsistent==0.19.3 pytest==6.0.1;python_version in "3.7 3.8 3.9" From bb3521dd54b4fefccc5507164925fb2a322a9ae5 Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Wed, 2 Aug 2023 10:57:25 +0200 Subject: [PATCH 102/209] avoid major update of pillow --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 7688e3697..102c797dd 100644 --- a/setup.py +++ b/setup.py @@ -21,11 +21,11 @@ def package_installed(pkg): # depend on PIL if it is installed, otherwise # require Pillow if package_installed('Pillow'): - install_requires.append('Pillow !=2.4.0,!=8.3.0,!=8.3.1') + install_requires.append('Pillow !=2.4.0,!=8.3.0,!=8.3.1,<10.0.0') elif package_installed('PIL'): install_requires.append('PIL>=1.1.6,<1.2.99') else: - install_requires.append('Pillow !=2.4.0,!=8.3.0,!=8.3.1') + install_requires.append('Pillow !=2.4.0,!=8.3.0,!=8.3.1,<10.0.0') if platform.python_version_tuple() < ('2', '6'): # for mapproxy-seed From 130a049c982ca792b81c461e403f92049d36f4c3 Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Wed, 2 Aug 2023 11:14:20 +0200 Subject: [PATCH 103/209] avoid major update of pillow --- .github/workflows/test.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 45b23c200..994f3e5c5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -71,7 +71,6 @@ jobs: - name: Install dependencies ⏬ run: | pip install -r requirements-tests.txt - if [[ ${{ matrix.python-version }} = 2.7 || ${{ matrix.python-version }} = 3.8 ]]; then pip install -U "Pillow!=8.3.0,!=8.3.1"; fi pip freeze - name: Run tests 🏗️ From 7e26e66a5d4549d221c9e29155b10619d33afad4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Aug 2023 09:25:54 +0000 Subject: [PATCH 104/209] Bump cryptography from 40.0.1 to 41.0.3 Bumps [cryptography](https://github.com/pyca/cryptography) from 40.0.1 to 41.0.3. - [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pyca/cryptography/compare/40.0.1...41.0.3) --- updated-dependencies: - dependency-name: cryptography dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index dcb81d2df..757f712d9 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -18,7 +18,7 @@ certifi==2022.12.7 cffi==1.15.1; cfn-lint==0.35.0 chardet==3.0.4 -cryptography==40.0.1 +cryptography==41.0.3 decorator==4.4.2 docker==4.3.0 docutils==0.19 From 25f167e2b354f567f6de6a1fdc148ba7a89e89fa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Aug 2023 09:34:21 +0000 Subject: [PATCH 105/209] Bump iniconfig from 1.0.1 to 2.0.0 Bumps [iniconfig](https://github.com/pytest-dev/iniconfig) from 1.0.1 to 2.0.0. - [Release notes](https://github.com/pytest-dev/iniconfig/releases) - [Changelog](https://github.com/pytest-dev/iniconfig/blob/main/CHANGELOG) - [Commits](https://github.com/pytest-dev/iniconfig/compare/v1.0.1...v2.0.0) --- updated-dependencies: - dependency-name: iniconfig dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 757f712d9..31dbdf248 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -26,7 +26,7 @@ ecdsa==0.14.1 future==0.18.3 idna==2.8 importlib-metadata==1.7.0 -iniconfig==1.0.1 +iniconfig==2.0.0 jmespath==0.10.0 jsondiff==1.1.2 jsonpatch==1.26 From 1a00453a1376776af12bf75b9d5455502359e3db Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Wed, 2 Aug 2023 11:52:30 +0200 Subject: [PATCH 106/209] Updating requests and responses packages --- requirements-tests.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 757f712d9..2a3970a8b 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -56,8 +56,8 @@ python-dateutil==2.8.1 python-jose==3.2.0 pytz==2020.1 redis==4.5.4 -requests==2.28.2 -responses==0.10.16 +requests==2.31.0 +responses==0.23.3 riak==2.7.0 rsa==4.9 s3transfer==0.6.0 From bd0e503d14dfb705ae2aabc1d885f78b767bf323 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Aug 2023 10:00:30 +0000 Subject: [PATCH 107/209] Bump moto from 3.1.13 to 4.1.14 Bumps [moto](https://github.com/getmoto/moto) from 3.1.13 to 4.1.14. - [Changelog](https://github.com/getmoto/moto/blob/master/CHANGELOG.md) - [Commits](https://github.com/getmoto/moto/compare/3.1.13...4.1.14) --- updated-dependencies: - dependency-name: moto dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 45e6ec380..e0387bcd9 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -38,7 +38,7 @@ lxml==4.9.2 mock==4.0.2 more-itertools==8.4.0 moto==1.3.14;python_version<"3.10" -moto==3.1.13;python_version>="3.10" +moto==4.1.14;python_version>="3.10" networkx==2.4 packaging==20.4 pluggy==0.13.1 From e556d894beb69589134122265cbd40a3b8348045 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Aug 2023 10:24:20 +0000 Subject: [PATCH 108/209] Bump certifi from 2022.12.7 to 2023.7.22 Bumps [certifi](https://github.com/certifi/python-certifi) from 2022.12.7 to 2023.7.22. - [Commits](https://github.com/certifi/python-certifi/compare/2022.12.07...2023.07.22) --- updated-dependencies: - dependency-name: certifi dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 45e6ec380..7caef0315 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -14,7 +14,7 @@ beautifulsoup4==4.9.1 boto3==1.26.112 boto==2.49.0 botocore==1.29.116 -certifi==2022.12.7 +certifi==2023.7.22 cffi==1.15.1; cfn-lint==0.35.0 chardet==3.0.4 From 2aab9a9442e757b8e58f99a54e2c3cfe3d92fbec Mon Sep 17 00:00:00 2001 From: taca Date: Sat, 18 May 2019 23:14:56 +0200 Subject: [PATCH 109/209] Add option to link_single_color_images spec * explicit 'symlink' or 'hardlink' strings aswell as the previous boolean option --- mapproxy/config/spec.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mapproxy/config/spec.py b/mapproxy/config/spec.py index 4c899b3b0..76031fd01 100644 --- a/mapproxy/config/spec.py +++ b/mapproxy/config/spec.py @@ -388,7 +388,7 @@ def validate_options(conf_dict): 'max_tile_limit': number(), 'minimize_meta_requests': bool(), 'concurrent_tile_creators': int(), - 'link_single_color_images': bool(), + 'link_single_color_images': one_of(bool(), 'symlink', 'hardlink'), 's3': { 'bucket_name': str(), 'profile_name': str(), @@ -437,7 +437,7 @@ def validate_options(conf_dict): 'request_format': str(), 'use_direct_from_level': number(), 'use_direct_from_res': number(), - 'link_single_color_images': bool(), + 'link_single_color_images': one_of(bool(), 'symlink', 'hardlink'), 'cache_rescaled_tiles': bool(), 'upscale_tiles': int(), 'downscale_tiles': int(), From bb68fbe53ae2c67993051e49274f78c1173c932a Mon Sep 17 00:00:00 2001 From: taca Date: Sat, 18 May 2019 23:16:57 +0200 Subject: [PATCH 110/209] Add test for hardlinking single color images * if 'hardlink' is specified for the `link_single_color_images` option, hardlinks are used * if 'symlink' is set, symbolic links will be used * if a boolean is set, prior behaviour is unchanged * so 'symlink' is equivalent to True --- mapproxy/cache/file.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/mapproxy/cache/file.py b/mapproxy/cache/file.py index fe7053b16..449fcfe4b 100644 --- a/mapproxy/cache/file.py +++ b/mapproxy/cache/file.py @@ -168,15 +168,23 @@ def _store_single_color_tile(self, tile, tile_loc, color): if os.path.exists(tile_loc) or os.path.islink(tile_loc): os.unlink(tile_loc) - # Use relative path for the symlink - real_tile_loc = os.path.relpath(real_tile_loc, os.path.dirname(tile_loc)) - - try: - os.symlink(real_tile_loc, tile_loc) - except OSError as e: - # ignore error if link was created by other process - if e.errno != errno.EEXIST: - raise e + if self.link_single_color_images == 'hardlink': + try: + os.link(real_tile_loc, tile_loc) + except OSError as e: + # ignore error if link was created by other process + if e.errno != errno.EEXIST: + raise e + else: + # Use relative path for the symlink + real_tile_loc = os.path.relpath(real_tile_loc, os.path.dirname(tile_loc)) + + try: + os.symlink(real_tile_loc, tile_loc) + except OSError as e: + # ignore error if link was created by other process + if e.errno != errno.EEXIST: + raise e return From b7af101b3bace421e2baaa271a7f812bc3f238f6 Mon Sep 17 00:00:00 2001 From: taca Date: Sat, 18 May 2019 23:20:26 +0200 Subject: [PATCH 111/209] Add unit tests for expanded `link_single_color_images` option * 'symlink' and 'hardlink' values tested --- mapproxy/test/unit/test_cache_tile.py | 36 +++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/mapproxy/test/unit/test_cache_tile.py b/mapproxy/test/unit/test_cache_tile.py index ee3e8ef0e..3acefeb4d 100644 --- a/mapproxy/test/unit/test_cache_tile.py +++ b/mapproxy/test/unit/test_cache_tile.py @@ -241,6 +241,30 @@ def test_single_color_tile_store(self): assert loc != loc2 assert os.path.samefile(loc, loc2) + tile3 = Tile((0,0,2), ImageSource(img)) + self.cache.link_single_color_images = 'hardlink' + self.cache.store_tile(tile3) + assert self.cache.is_cached(tile3) + loc3 = self.cache.tile_location(tile3) + assert is_png(open(loc3, 'rb')) + + assert loc != loc3 + assert os.path.samefile(loc, loc3) + loc3stat = os.stat(loc3) + assert loc3stat.st_nlink == 2 + + tile4 = Tile((0, 0, 1), ImageSource(img)) + self.cache.link_single_color_images = 'symlink' + self.cache.store_tile(tile4) + assert self.cache.is_cached(tile4) + loc4 = self.cache.tile_location(tile4) + assert os.path.islink(loc4) + assert os.path.realpath(loc4).endswith('ff0105.png') + assert is_png(open(loc4, 'rb')) + + assert loc != loc4 + assert os.path.samefile(loc, loc4) + @pytest.mark.skipif(sys.platform == 'win32', reason='link_single_color_tiles not supported on windows') def test_single_color_tile_store_w_alpha(self): @@ -254,6 +278,18 @@ def test_single_color_tile_store_w_alpha(self): assert os.path.realpath(loc).endswith('ff0105ff.png') assert is_png(open(loc, 'rb')) + tile2 = Tile((0,0,2), ImageSource(img)) + self.cache.link_single_color_images = 'hardlink' + self.cache.store_tile(tile2) + assert self.cache.is_cached(tile2) + loc2 = self.cache.tile_location(tile2) + assert is_png(open(loc2, 'rb')) + + assert loc != loc2 + assert os.path.samefile(loc, loc2) + loc2stat = os.stat(loc2) + assert loc2stat.st_nlink == 2 + def test_load_metadata_missing_tile(self): tile = Tile((0, 0, 0)) self.cache.load_tile_metadata(tile) From aafe19ac4966bef678fba30f469fb295e89d0e8e Mon Sep 17 00:00:00 2001 From: taca Date: Sat, 18 May 2019 23:26:15 +0200 Subject: [PATCH 112/209] Document hardlink option for single color images --- doc/configuration.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/configuration.rst b/doc/configuration.rst index 55bebb5bc..17863945c 100644 --- a/doc/configuration.rst +++ b/doc/configuration.rst @@ -408,11 +408,13 @@ MapProxy will try to use this format to request new tiles, if it is not set ``fo ``link_single_color_images`` """""""""""""""""""""""""""" -If set to ``true``, MapProxy will not store tiles that only contain a single color as a +If set to ``true`` or ``symlink``, MapProxy will not store tiles that only contain a single color as a separate file. MapProxy stores these tiles only once and uses symbolic links to this file for every occurrence. This can reduce the size of your tile cache if you have larger areas with no data (e.g. water areas, areas with no roads, etc.). +If set to ``hardlink``, MapProxy will store the duplicate tiles as hard links. + .. note:: This feature is only available on Unix, since Windows has no support for symbolic links. ``minimize_meta_requests`` @@ -910,7 +912,7 @@ The following options define how tiles are created and stored. Most options can ``link_single_color_images`` - Enables the ``link_single_color_images`` option for all caches if set to ``true``. See :ref:`link_single_color_images`. + Enables the ``link_single_color_images`` option for all caches if set to ``true``, ``symlink`` or ``hardlink``. See :ref:`link_single_color_images`. .. _max_tile_limit: From 5bb7e5c20e6bbed2931267f8ca16d60bc7bfe0b7 Mon Sep 17 00:00:00 2001 From: taca Date: Wed, 12 Feb 2020 20:50:38 +0100 Subject: [PATCH 113/209] Extend doco on hardlinks for single color images * add expected benefits and limitations * left the platform compatibility note as-is although it seems that NTFS, at least, has support for hardlinks and symbolic links --- doc/configuration.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/configuration.rst b/doc/configuration.rst index 17863945c..ea3974350 100644 --- a/doc/configuration.rst +++ b/doc/configuration.rst @@ -415,6 +415,12 @@ with no data (e.g. water areas, areas with no roads, etc.). If set to ``hardlink``, MapProxy will store the duplicate tiles as hard links. +This avoids using up inodes for symlinks, which is especially useful if single color images outnumber others (as might be the case in world maps or low-detail maps for example). Directory entries for the hardlinks will still be created of course. + +The usual limitation applies: files can only be linked on the same filesystem, assuming it has support for hardlinks in the first place. Furthermore, all the linked files will have the same metadata, in particular the modification time (``mtime``), which is used in seeding or cleanups with the ``refresh_before`` or ``remove_before`` directives. + +In practice this means that all the linked images will have the first such tile's modification date and therefore will appear older to the seeding or cleanup process than when they were actually linked. This means that they are *more likely* to be included in the ``refresh_before`` or ``remove_before`` filters, which may or may not be an issue depending on your seeding or cleanup use-cases. + .. note:: This feature is only available on Unix, since Windows has no support for symbolic links. ``minimize_meta_requests`` From f0299450832a724b4edd4b0ce76c8d5cf47d1beb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alfonso=20Mart=C3=ADnez=20Cuadrado?= Date: Mon, 12 Jun 2023 14:14:06 +0200 Subject: [PATCH 114/209] Order wmts, wms and tms layers by name in demo service --- mapproxy/config/loader.py | 2 ++ mapproxy/service/demo.py | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/mapproxy/config/loader.py b/mapproxy/config/loader.py index c0afcbf07..a209575c1 100644 --- a/mapproxy/config/loader.py +++ b/mapproxy/config/loader.py @@ -2164,6 +2164,8 @@ def demo_service(self, conf): # demo service only supports 1.1.1, use wms_111 as an indicator services.append('wms_111') + layers = odict(sorted(layers.items(), key=lambda x: x[1].name)) + return DemoServer(layers, md, tile_layers=tile_layers, image_formats=image_formats, srs=srs, services=services, restful_template=restful_template) diff --git a/mapproxy/service/demo.py b/mapproxy/service/demo.py index 1767d7572..a9fa5e8b6 100644 --- a/mapproxy/service/demo.py +++ b/mapproxy/service/demo.py @@ -24,6 +24,7 @@ from collections import defaultdict from mapproxy.config.config import base_config +from mapproxy.util.ext.odict import odict from mapproxy.compat import PY2 from mapproxy.exception import RequestError from mapproxy.service.base import Server @@ -229,6 +230,9 @@ def _render_template(self, req, template): for add_substitution in extra_substitution_handlers: add_substitution(self, req, substitutions) + wmts_layers = odict(sorted(wmts_layers.items(), key=lambda x: x[0])) + tms_tile_layers = odict(sorted(tms_tile_layers.items(), key=lambda x: x[0])) + return template.substitute(substitutions) def _render_wms_template(self, template, req): From 1f5838bec7c3e5996d0f59c5e00b078f90a5b52d Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Tue, 27 Jun 2023 21:56:16 +0300 Subject: [PATCH 115/209] Add coverage as common cache configuration --- mapproxy/config/spec.py | 46 +++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/mapproxy/config/spec.py b/mapproxy/config/spec.py index 4c899b3b0..6a47c3ab8 100644 --- a/mapproxy/config/spec.py +++ b/mapproxy/config/spec.py @@ -115,33 +115,39 @@ def validate_options(conf_dict): 'http_port': number(), } +cache_commons = combined( + { + 'coverage': coverage, + } +) + cache_types = { - 'file': { + 'file': combined(cache_commons, { 'directory_layout': str(), 'use_grid_names': bool(), 'directory': str(), 'tile_lock_dir': str(), - }, - 'sqlite': { + }), + 'sqlite': combined(cache_commons, { 'directory': str(), 'sqlite_timeout': number(), 'sqlite_wal': bool(), 'tile_lock_dir': str(), - }, - 'mbtiles': { + }), + 'mbtiles': combined(cache_commons, { 'filename': str(), 'sqlite_timeout': number(), 'sqlite_wal': bool(), 'tile_lock_dir': str(), - }, - 'geopackage': { + }), + 'geopackage': combined(cache_commons, { 'filename': str(), 'directory': str(), 'tile_lock_dir': str(), 'table_name': str(), 'levels': bool(), - }, - 'couchdb': { + }), + 'couchdb': combined(cache_commons, { 'url': str(), 'db_name': str(), 'tile_metadata': { @@ -149,8 +155,8 @@ def validate_options(conf_dict): }, 'tile_id': str(), 'tile_lock_dir': str(), - }, - 's3': { + }), + 's3': combined(cache_commons, { 'bucket_name': str(), 'directory_layout': str(), 'directory': str(), @@ -159,8 +165,8 @@ def validate_options(conf_dict): 'endpoint_url': str(), 'access_control_list': str(), 'tile_lock_dir': str(), - }, - 'riak': { + }), + 'riak': combined(cache_commons, { 'nodes': [riak_node], 'protocol': one_of('pbc', 'http', 'https'), 'bucket': str(), @@ -170,26 +176,26 @@ def validate_options(conf_dict): }, 'secondary_index': bool(), 'tile_lock_dir': str(), - }, - 'redis': { + }), + 'redis': combined(cache_commons, { 'host': str(), 'port': int(), 'db': int(), 'prefix': str(), 'default_ttl': int(), - }, - 'compact': { + }), + 'compact': combined(cache_commons, { 'directory': str(), required('version'): number(), 'tile_lock_dir': str(), - }, - 'azureblob': { + }), + 'azureblob': combined(cache_commons, { 'connection_string': str(), 'container_name': str(), 'directory_layout': str(), 'directory': str(), 'tile_lock_dir': str(), - }, + }), } on_error = { From 2fe90cbc2d25c8aca23f4c48f41af8f52e8db200 Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Tue, 27 Jun 2023 21:59:08 +0300 Subject: [PATCH 116/209] Add coverage to all caches --- mapproxy/cache/azureblob.py | 4 ++-- mapproxy/cache/base.py | 3 +++ mapproxy/cache/compact.py | 3 ++- mapproxy/cache/couchdb.py | 3 ++- mapproxy/cache/file.py | 4 ++-- mapproxy/cache/geopackage.py | 23 +++++++++++++-------- mapproxy/cache/mbtiles.py | 7 +++++-- mapproxy/cache/redis.py | 4 +++- mapproxy/cache/riak.py | 4 +++- mapproxy/cache/s3.py | 4 ++-- mapproxy/config/loader.py | 40 ++++++++++++++++++++++++++++-------- 11 files changed, 71 insertions(+), 28 deletions(-) diff --git a/mapproxy/cache/azureblob.py b/mapproxy/cache/azureblob.py index f021797d9..197fc7dd6 100644 --- a/mapproxy/cache/azureblob.py +++ b/mapproxy/cache/azureblob.py @@ -43,8 +43,8 @@ class AzureBlobConnectionError(Exception): class AzureBlobCache(TileCacheBase): def __init__(self, base_path, file_ext, directory_layout='tms', container_name='mapproxy', - _concurrent_writer=4, _concurrent_reader=4, connection_string=None): - super(AzureBlobCache, self).__init__() + _concurrent_writer=4, _concurrent_reader=4, connection_string=None, coverage=None): + super(AzureBlobCache, self).__init__(coverage) if BlobServiceClient is None: raise ImportError("Azure Blob Cache requires 'azure-storage-blob' package") diff --git a/mapproxy/cache/base.py b/mapproxy/cache/base.py index 4110421a4..3cdfcb8ae 100644 --- a/mapproxy/cache/base.py +++ b/mapproxy/cache/base.py @@ -42,6 +42,9 @@ class TileCacheBase(object): supports_timestamp = True + def __init__(self, coverage=None) -> None: + self.coverage = coverage + def load_tile(self, tile, with_metadata=False, dimensions=None): raise NotImplementedError() diff --git a/mapproxy/cache/compact.py b/mapproxy/cache/compact.py index 9c75ea5db..184fd0be6 100644 --- a/mapproxy/cache/compact.py +++ b/mapproxy/cache/compact.py @@ -34,7 +34,8 @@ class CompactCacheBase(TileCacheBase): supports_timestamp = False bundle_class = None - def __init__(self, cache_dir): + def __init__(self, cache_dir, coverage=None): + super(CompactCacheBase, self).__init__(coverage) self.lock_cache_id = 'compactcache-' + hashlib.md5(cache_dir.encode('utf-8')).hexdigest() self.cache_dir = cache_dir diff --git a/mapproxy/cache/couchdb.py b/mapproxy/cache/couchdb.py index 60c3ace8d..5dc7ad13e 100644 --- a/mapproxy/cache/couchdb.py +++ b/mapproxy/cache/couchdb.py @@ -47,7 +47,8 @@ class UnexpectedResponse(CacheBackendError): class CouchDBCache(TileCacheBase): def __init__(self, url, db_name, file_ext, tile_grid, md_template=None, - tile_id_template=None): + tile_id_template=None, coverage=None): + super(CouchDBCache, self).__init__(coverage) if requests is None: raise ImportError("CouchDB backend requires 'requests' package.") diff --git a/mapproxy/cache/file.py b/mapproxy/cache/file.py index fe7053b16..b621bca30 100644 --- a/mapproxy/cache/file.py +++ b/mapproxy/cache/file.py @@ -30,13 +30,13 @@ class FileCache(TileCacheBase): This class is responsible to store and load the actual tile data. """ def __init__(self, cache_dir, file_ext, directory_layout='tc', - link_single_color_images=False): + link_single_color_images=False, coverage=None): """ :param cache_dir: the path where the tile will be stored :param file_ext: the file extension that will be appended to each tile (e.g. 'png') """ - super(FileCache, self).__init__() + super(FileCache, self).__init__(coverage) self.lock_cache_id = hashlib.md5(cache_dir.encode('utf-8')).hexdigest() self.cache_dir = cache_dir self.file_ext = file_ext diff --git a/mapproxy/cache/geopackage.py b/mapproxy/cache/geopackage.py index c57b2445f..72bfa1828 100644 --- a/mapproxy/cache/geopackage.py +++ b/mapproxy/cache/geopackage.py @@ -34,11 +34,17 @@ class GeopackageCache(TileCacheBase): supports_timestamp = False - def __init__(self, geopackage_file, tile_grid, table_name, with_timestamps=False, timeout=30, wal=False): + def __init__(self, geopackage_file, tile_grid, table_name, with_timestamps=False, timeout=30, wal=False, coverage=None): + super(GeopackageCache, self).__init__(coverage) self.tile_grid = tile_grid self.table_name = self._check_table_name(table_name) self.lock_cache_id = 'gpkg' + hashlib.md5(geopackage_file.encode('utf-8')).hexdigest() self.geopackage_file = geopackage_file + + if coverage: + self.bbox = coverage.bbox + else: + self.bbox = self.tile_grid.bbox # XXX timestamps not implemented self.supports_timestamp = with_timestamps self.timeout = timeout @@ -323,10 +329,10 @@ def _initialize_gpkg(self): "tiles", self.table_name, "Created with Mapproxy.", - self.tile_grid.bbox[0], - self.tile_grid.bbox[2], - self.tile_grid.bbox[1], - self.tile_grid.bbox[3], + self.bbox[0], + self.bbox[2], + self.bbox[1], + self.bbox[3], proj)) except sqlite3.IntegrityError: pass @@ -338,8 +344,7 @@ def _initialize_gpkg(self): INSERT INTO gpkg_tile_matrix_set (table_name, srs_id, min_x, max_x, min_y, max_y) VALUES (?, ?, ?, ?, ?, ?); """, ( - self.table_name, proj, self.tile_grid.bbox[0], self.tile_grid.bbox[2], self.tile_grid.bbox[1], - self.tile_grid.bbox[3])) + self.table_name, proj, self.bbox[0], self.bbox[2], self.bbox[1], self.bbox[3])) except sqlite3.IntegrityError: pass db.commit() @@ -491,7 +496,8 @@ def load_tile_metadata(self, tile, dimensions=None): class GeopackageLevelCache(TileCacheBase): - def __init__(self, geopackage_dir, tile_grid, table_name, timeout=30, wal=False): + def __init__(self, geopackage_dir, tile_grid, table_name, timeout=30, wal=False, coverage=None): + super(GeopackageLevelCache, self).__init__(coverage) self.lock_cache_id = 'gpkg-' + hashlib.md5(geopackage_dir.encode('utf-8')).hexdigest() self.cache_dir = geopackage_dir self.tile_grid = tile_grid @@ -515,6 +521,7 @@ def _get_level(self, level): with_timestamps=False, timeout=self.timeout, wal=self.wal, + coverage=self.coverage ) return self._geopackage[level] diff --git a/mapproxy/cache/mbtiles.py b/mapproxy/cache/mbtiles.py index a5f657ad8..e3af449ac 100644 --- a/mapproxy/cache/mbtiles.py +++ b/mapproxy/cache/mbtiles.py @@ -42,7 +42,8 @@ def sqlite_datetime_to_timestamp(datetime): class MBTilesCache(TileCacheBase): supports_timestamp = False - def __init__(self, mbtile_file, with_timestamps=False, timeout=30, wal=False): + def __init__(self, mbtile_file, with_timestamps=False, timeout=30, wal=False, coverage=None): + super(MBTilesCache, self).__init__(coverage) self.lock_cache_id = 'mbtiles-' + hashlib.md5(mbtile_file.encode('utf-8')).hexdigest() self.mbtile_file = mbtile_file self.supports_timestamp = with_timestamps @@ -298,7 +299,8 @@ def load_tile_metadata(self, tile, dimensions=None): class MBTilesLevelCache(TileCacheBase): supports_timestamp = True - def __init__(self, mbtiles_dir, timeout=30, wal=False): + def __init__(self, mbtiles_dir, timeout=30, wal=False, coverage=None): + super(MBTilesLevelCache, self).__init__(coverage) self.lock_cache_id = 'sqlite-' + hashlib.md5(mbtiles_dir.encode('utf-8')).hexdigest() self.cache_dir = mbtiles_dir self._mbtiles = {} @@ -318,6 +320,7 @@ def _get_level(self, level): with_timestamps=True, timeout=self.timeout, wal=self.wal, + coverage=self.coverage ) return self._mbtiles[level] diff --git a/mapproxy/cache/redis.py b/mapproxy/cache/redis.py index 2c9e40787..6fae7b6ef 100644 --- a/mapproxy/cache/redis.py +++ b/mapproxy/cache/redis.py @@ -35,7 +35,9 @@ class RedisCache(TileCacheBase): - def __init__(self, host, port, prefix, ttl=0, db=0): + def __init__(self, host, port, prefix, ttl=0, db=0, coverage=None): + super(RedisCache, self).__init__(coverage) + if redis is None: raise ImportError("Redis backend requires 'redis' package.") diff --git a/mapproxy/cache/riak.py b/mapproxy/cache/riak.py index f4d11b0b4..e5799e733 100644 --- a/mapproxy/cache/riak.py +++ b/mapproxy/cache/riak.py @@ -40,7 +40,9 @@ class UnexpectedResponse(CacheBackendError): pass class RiakCache(TileCacheBase): - def __init__(self, nodes, protocol, bucket, tile_grid, use_secondary_index=False, timeout=60): + def __init__(self, nodes, protocol, bucket, tile_grid, use_secondary_index=False, timeout=60, coverage=None): + super(RiakCache, self).__init__(coverage) + if riak is None: raise ImportError("Riak backend requires 'riak' package.") diff --git a/mapproxy/cache/s3.py b/mapproxy/cache/s3.py index 5a6b29a79..2a308a828 100644 --- a/mapproxy/cache/s3.py +++ b/mapproxy/cache/s3.py @@ -51,8 +51,8 @@ class S3Cache(TileCacheBase): def __init__(self, base_path, file_ext, directory_layout='tms', bucket_name='mapproxy', profile_name=None, region_name=None, endpoint_url=None, - _concurrent_writer=4, access_control_list=None): - super(S3Cache, self).__init__() + _concurrent_writer=4, access_control_list=None, coverage=None): + super(S3Cache, self).__init__(coverage) self.lock_cache_id = hashlib.md5(base_path.encode('utf-8') + bucket_name.encode('utf-8')).hexdigest() self.bucket_name = bucket_name self.profile_name = profile_name diff --git a/mapproxy/config/loader.py b/mapproxy/config/loader.py index c0afcbf07..d7d325082 100644 --- a/mapproxy/config/loader.py +++ b/mapproxy/config/loader.py @@ -1052,6 +1052,12 @@ def register_source_configuration(config_name, config_class, class CacheConfiguration(ConfigurationBase): defaults = {'format': 'image/png'} + @memoize + def coverage(self): + if not 'cache' in self.conf or not 'coverage' in self.conf['cache']: return None + from mapproxy.config.coverage import load_coverage + return load_coverage(self.conf['cache']['coverage']) + @memoize def cache_dir(self): cache_dir = self.conf.get('cache', {}).get('directory') @@ -1079,6 +1085,8 @@ def _file_cache(self, grid_conf, file_ext): cache_dir = self.cache_dir() directory_layout = self.conf.get('cache', {}).get('directory_layout', 'tc') + coverage = self.coverage() + if self.conf.get('cache', {}).get('directory'): if self.has_multiple_grids(): raise ConfigurationError( @@ -1104,6 +1112,7 @@ def _file_cache(self, grid_conf, file_ext): file_ext=file_ext, directory_layout=directory_layout, link_single_color_images=link_single_color_images, + coverage=coverage ) def _mbtiles_cache(self, grid_conf, file_ext): @@ -1120,11 +1129,13 @@ def _mbtiles_cache(self, grid_conf, file_ext): sqlite_timeout = self.context.globals.get_value('cache.sqlite_timeout', self.conf) wal = self.context.globals.get_value('cache.sqlite_wal', self.conf) + coverage = self.coverage() return MBTilesCache( mbfile_path, timeout=sqlite_timeout, wal=wal, + coverage=coverage ) def _geopackage_cache(self, grid_conf, file_ext): @@ -1134,6 +1145,7 @@ def _geopackage_cache(self, grid_conf, file_ext): table_name = self.conf['cache'].get('table_name') or \ "{}_{}".format(self.conf['name'], grid_conf.tile_grid().name) levels = self.conf['cache'].get('levels') + coverage = self.coverage() if not filename: filename = self.conf['name'] + '.gpkg' @@ -1158,11 +1170,11 @@ def _geopackage_cache(self, grid_conf, file_ext): if levels: return GeopackageLevelCache( - cache_dir, grid_conf.tile_grid(), table_name + cache_dir, grid_conf.tile_grid(), table_name, coverage=coverage ) else: return GeopackageCache( - gpkg_file_path, grid_conf.tile_grid(), table_name + gpkg_file_path, grid_conf.tile_grid(), table_name, coverage=coverage ) def _azureblob_cache(self, grid_conf, file_ext): @@ -1170,6 +1182,7 @@ def _azureblob_cache(self, grid_conf, file_ext): container_name = self.context.globals.get_value('cache.container_name', self.conf, global_key='cache.azureblob.container_name') + coverage = self.coverage() if not container_name: raise ConfigurationError("no container_name configured for Azure Blob cache %s" % self.conf['name']) @@ -1191,7 +1204,8 @@ def _azureblob_cache(self, grid_conf, file_ext): file_ext=file_ext, directory_layout=directory_layout, container_name=container_name, - connection_string=connection_string + connection_string=connection_string, + coverage=coverage ) def _s3_cache(self, grid_conf, file_ext): @@ -1199,6 +1213,7 @@ def _s3_cache(self, grid_conf, file_ext): bucket_name = self.context.globals.get_value('cache.bucket_name', self.conf, global_key='cache.s3.bucket_name') + coverage = self.coverage() if not bucket_name: raise ConfigurationError("no bucket_name configured for s3 cache %s" % self.conf['name']) @@ -1229,7 +1244,8 @@ def _s3_cache(self, grid_conf, file_ext): profile_name=profile_name, region_name=region_name, endpoint_url=endpoint_url, - access_control_list=access_control_list + access_control_list=access_control_list, + coverage=coverage ) def _sqlite_cache(self, grid_conf, file_ext): @@ -1251,11 +1267,13 @@ def _sqlite_cache(self, grid_conf, file_ext): sqlite_timeout = self.context.globals.get_value('cache.sqlite_timeout', self.conf) wal = self.context.globals.get_value('cache.sqlite_wal', self.conf) + coverage = self.coverage() return MBTilesLevelCache( cache_dir, timeout=sqlite_timeout, wal=wal, + coverage=coverage ) def _couchdb_cache(self, grid_conf, file_ext): @@ -1272,10 +1290,11 @@ def _couchdb_cache(self, grid_conf, file_ext): md_template = CouchDBMDTemplate(self.conf['cache'].get('tile_metadata', {})) tile_id = self.conf['cache'].get('tile_id') + coverage = self.coverage() return CouchDBCache(url=url, db_name=db_name, file_ext=file_ext, tile_grid=grid_conf.tile_grid(), - md_template=md_template, tile_id_template=tile_id) + md_template=md_template, tile_id_template=tile_id, coverage=coverage) def _riak_cache(self, grid_conf, file_ext): from mapproxy.cache.riak import RiakCache @@ -1283,6 +1302,7 @@ def _riak_cache(self, grid_conf, file_ext): default_ports = self.conf['cache'].get('default_ports', {}) default_pb_port = default_ports.get('pb', 8087) default_http_port = default_ports.get('http', 8098) + coverage = self.coverage() nodes = self.conf['cache'].get('nodes') if not nodes: @@ -1306,7 +1326,8 @@ def _riak_cache(self, grid_conf, file_ext): return RiakCache(nodes=nodes, protocol=protocol, bucket=bucket, tile_grid=grid_conf.tile_grid(), use_secondary_index=use_secondary_index, - timeout=timeout + timeout=timeout, + coverage=coverage ) def _redis_cache(self, grid_conf, file_ext): @@ -1316,6 +1337,7 @@ def _redis_cache(self, grid_conf, file_ext): port = self.conf['cache'].get('port', 6379) db = self.conf['cache'].get('db', 0) ttl = self.conf['cache'].get('default_ttl', 3600) + coverage = self.coverage() prefix = self.conf['cache'].get('prefix') if not prefix: @@ -1327,11 +1349,13 @@ def _redis_cache(self, grid_conf, file_ext): db=db, prefix=prefix, ttl=ttl, + coverage=coverage ) def _compact_cache(self, grid_conf, file_ext): from mapproxy.cache.compact import CompactCacheV1, CompactCacheV2 + coverage = self.coverage() cache_dir = self.cache_dir() if self.conf.get('cache', {}).get('directory'): if self.has_multiple_grids(): @@ -1345,9 +1369,9 @@ def _compact_cache(self, grid_conf, file_ext): version = self.conf['cache']['version'] if version == 1: - return CompactCacheV1(cache_dir=cache_dir) + return CompactCacheV1(cache_dir=cache_dir, coverage=coverage) elif version == 2: - return CompactCacheV2(cache_dir=cache_dir) + return CompactCacheV2(cache_dir=cache_dir, coverage=coverage) raise ConfigurationError("compact cache only supports version 1 or 2") From 1834e8f245684fbcf843448e8473a5fe0dc49705 Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Tue, 27 Jun 2023 22:00:15 +0300 Subject: [PATCH 117/209] Get extent from coverage if defined --- mapproxy/config/loader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapproxy/config/loader.py b/mapproxy/config/loader.py index d7d325082..2bc98aea8 100644 --- a/mapproxy/config/loader.py +++ b/mapproxy/config/loader.py @@ -1665,7 +1665,7 @@ def caches(self): mgr._refresh_before = self.context.caches[self.conf['name']].conf.get('refresh_before', {}) extent = merge_layer_extents(sources) if extent.is_default: - extent = map_extent_from_grid(tile_grid) + extent = cache.coverage.extent if cache.coverage else map_extent_from_grid(tile_grid) caches.append((tile_grid, extent, mgr)) return caches From aaba43a2875eca7b56f940aae8f24551ef584aa9 Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Tue, 27 Jun 2023 22:00:46 +0300 Subject: [PATCH 118/209] Load TileLayer extent from it's metadata --- mapproxy/service/tile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapproxy/service/tile.py b/mapproxy/service/tile.py index b71044d9f..43f378295 100644 --- a/mapproxy/service/tile.py +++ b/mapproxy/service/tile.py @@ -215,7 +215,7 @@ def __init__(self, name, title, md, tile_manager, info_sources=[], dimensions=No self.info_sources = info_sources self.dimensions = dimensions self.grid = TileServiceGrid(tile_manager.grid) - self.extent = map_extent_from_grid(self.grid) + self.extent = self.md.get('extent') self._empty_tile = None self._mixed_format = True if self.md.get('format', False) == 'mixed' else False self.empty_response_as_png = True From fcf39940f15c1dc026b4673f1211936d4a203a19 Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Tue, 27 Jun 2023 22:01:12 +0300 Subject: [PATCH 119/209] Focus on layer extent in demo --- mapproxy/service/templates/demo/tms_demo.html | 2 +- mapproxy/service/templates/demo/wmts_demo.html | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/mapproxy/service/templates/demo/tms_demo.html b/mapproxy/service/templates/demo/tms_demo.html index 630d84c9f..9ccc3e199 100644 --- a/mapproxy/service/templates/demo/tms_demo.html +++ b/mapproxy/service/templates/demo/tms_demo.html @@ -22,7 +22,7 @@ const transparent = "{{if format == 'png'}}true{{endif}}"; const srs = "{{srs}}"; - const extent = [{{', '.join(str(r) for r in layer.grid.bbox)}}]; + const extent = [{{', '.join(str(r) for r in layer.extent.bbox)}}]; if (!ol.proj.get(srs)) { const allDefs = await import('./static/proj4defs.js'); diff --git a/mapproxy/service/templates/demo/wmts_demo.html b/mapproxy/service/templates/demo/wmts_demo.html index 00e14832f..3a84ae0b8 100644 --- a/mapproxy/service/templates/demo/wmts_demo.html +++ b/mapproxy/service/templates/demo/wmts_demo.html @@ -22,7 +22,8 @@ const transparent = "{{if format == 'image/png'}}true{{endif}}"; const srs = "{{srs}}"; - const extent = [{{', '.join(str(r) for r in layer.grid.bbox)}}]; + const grid_extent = [{{', '.join(str(r) for r in layer.grid.bbox)}}]; + const extent = [{{', '.join(str(r) for r in layer.extent.bbox)}}]; const resolutions = [{{', '.join(str(r) for r in resolutions)}}]; const matrixIds = []; for (let z = 0; z < resolutions.length; ++z) { @@ -51,7 +52,7 @@ transparent: transparent === "true" ? true: false, style: '', tileGrid: new ol.tilegrid.WMTS({ - origin: ol.extent.getTopLeft(extent), + origin: ol.extent.getTopLeft(grid_extent), resolutions: resolutions, matrixIds }) @@ -107,4 +108,4 @@

Layer Preview - {{layer.name}}

Bounding Box

-

{{', '.join(str(s) for s in layer.grid.bbox)}}

+

{{', '.join(str(s) for s in layer.extent.bbox)}}

From d0fd382749dc80b215cac093a224fec54856b8f2 Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Tue, 27 Jun 2023 22:42:31 +0300 Subject: [PATCH 120/209] Add cache coverage to documentation --- doc/caches.rst | 16 ++++++++++++++++ doc/coverages.rst | 22 +++++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/doc/caches.rst b/doc/caches.rst index cf7da2c44..c62c3873e 100644 --- a/doc/caches.rst +++ b/doc/caches.rst @@ -23,6 +23,22 @@ Each backend has a ``type`` and one or more options. backendoption1: value backendoption2: value +You may add a coverage definition to any cache with the ``coverage`` option under ``cache``. + +:: + + caches: + mycache: + sources: [...] + grids: [...] + cache: + type: backendtype + backendoption1: value + backendoption2: value + coverage: + bbox: [5, 50, 10, 55] + srs: 'EPSG:4326' + The following backend types are available. diff --git a/doc/coverages.rst b/doc/coverages.rst index 617cea969..543c70cbc 100644 --- a/doc/coverages.rst +++ b/doc/coverages.rst @@ -4,7 +4,7 @@ Coverages ========= With coverages you can define areas where data is available or where data you are interested in is. -MapProxy supports coverages for :doc:`sources ` and in the :doc:`mapproxy-seed tool `. Refer to the corresponding section in the documentation. +MapProxy supports coverages for :doc:`sources `, :doc:`caches ` and in the :doc:`mapproxy-seed tool `. Refer to the corresponding section in the documentation. There are five different ways to describe a coverage: @@ -183,6 +183,26 @@ Example of an intersection coverage with clipping:: srs: 'EPSG:4326' +caches +""""""" + +Use the ``coverage`` option to define a coverage for any cache. + +:: + + caches: + mycache: + grids: [GLOBAL_GEODETIC] + sources: [] + cache: + type: geopackage + filename: file.gpkg + table_name: mygeopackage + coverage: + bbox: [5, 50, 10, 55] + srs: 'EPSG:4326' + + mapproxy-seed """"""""""""" From 7e232ff0768a21c837686bea72111269e0aec2d9 Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Tue, 27 Jun 2023 23:08:55 +0300 Subject: [PATCH 121/209] Use extent bbox as layer bbox --- mapproxy/service/tile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapproxy/service/tile.py b/mapproxy/service/tile.py index 43f378295..45980cdf0 100644 --- a/mapproxy/service/tile.py +++ b/mapproxy/service/tile.py @@ -222,7 +222,7 @@ def __init__(self, name, title, md, tile_manager, info_sources=[], dimensions=No @property def bbox(self): - return self.grid.bbox + return self.extent.bbox @property def srs(self): From a4516b70e10f0b94e9d47bce2872813c60a7112c Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Tue, 27 Jun 2023 23:09:19 +0300 Subject: [PATCH 122/209] Use layer bbox as extent in demo --- mapproxy/service/templates/demo/tms_demo.html | 2 +- mapproxy/service/templates/demo/wmts_demo.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mapproxy/service/templates/demo/tms_demo.html b/mapproxy/service/templates/demo/tms_demo.html index 9ccc3e199..28dc1b36b 100644 --- a/mapproxy/service/templates/demo/tms_demo.html +++ b/mapproxy/service/templates/demo/tms_demo.html @@ -22,7 +22,7 @@ const transparent = "{{if format == 'png'}}true{{endif}}"; const srs = "{{srs}}"; - const extent = [{{', '.join(str(r) for r in layer.extent.bbox)}}]; + const extent = [{{', '.join(str(r) for r in layer.bbox)}}]; if (!ol.proj.get(srs)) { const allDefs = await import('./static/proj4defs.js'); diff --git a/mapproxy/service/templates/demo/wmts_demo.html b/mapproxy/service/templates/demo/wmts_demo.html index 3a84ae0b8..9d63a457a 100644 --- a/mapproxy/service/templates/demo/wmts_demo.html +++ b/mapproxy/service/templates/demo/wmts_demo.html @@ -23,7 +23,7 @@ const transparent = "{{if format == 'image/png'}}true{{endif}}"; const srs = "{{srs}}"; const grid_extent = [{{', '.join(str(r) for r in layer.grid.bbox)}}]; - const extent = [{{', '.join(str(r) for r in layer.extent.bbox)}}]; + const extent = [{{', '.join(str(r) for r in layer.bbox)}}]; const resolutions = [{{', '.join(str(r) for r in resolutions)}}]; const matrixIds = []; for (let z = 0; z < resolutions.length; ++z) { From 05b1209837850b88ca835046a411201bae74c06d Mon Sep 17 00:00:00 2001 From: Just van den Broecke Date: Thu, 27 Jul 2023 18:11:18 +0200 Subject: [PATCH 123/209] Fix for #379 add missing delegation method See my comments in #379. With this extra delegation method `load_tile_metadata()` leveled (one file per zoomlevel) GeoPackage caches can be cleaned. --- mapproxy/cache/geopackage.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mapproxy/cache/geopackage.py b/mapproxy/cache/geopackage.py index c57b2445f..b76bfe6ab 100644 --- a/mapproxy/cache/geopackage.py +++ b/mapproxy/cache/geopackage.py @@ -583,6 +583,9 @@ def remove_level_tiles_before(self, level, timestamp): else: return level_cache.remove_level_tiles_before(level, timestamp) + def load_tile_metadata(self, tile, dimensions=None): + return self._get_level(tile.coord[2]).load_tile_metadata(tile, dimensions=dimensions) + def is_close(a, b, rel_tol=1e-09, abs_tol=0.0): """ From 4fb4cf2243b510c58b68af631c4282fd78ccf13d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Aug 2023 20:27:11 +0000 Subject: [PATCH 124/209] Bump webtest from 2.0.25 to 3.0.0 Bumps [webtest](https://github.com/Pylons/webtest) from 2.0.25 to 3.0.0. - [Commits](https://github.com/Pylons/webtest/compare/2.0.25...3.0.0) --- updated-dependencies: - dependency-name: webtest dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-appveyor.txt | 2 +- requirements-tests.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements-appveyor.txt b/requirements-appveyor.txt index 01fd065a8..8e85b166b 100644 --- a/requirements-appveyor.txt +++ b/requirements-appveyor.txt @@ -1,4 +1,4 @@ -WebTest==2.0.25 +WebTest==3.0.0 pytest==3.6.0 WebOb==1.7.1 requests==2.28.2 diff --git a/requirements-tests.txt b/requirements-tests.txt index 03468e49a..fc07e01cf 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -5,7 +5,7 @@ Pillow==9.5.0 PyYAML==6.0.1 Shapely==1.7.0 WebOb==1.8.6 -WebTest==2.0.35 +WebTest==3.0.0 attrs==19.3.0;python_version<"3.10" attrs==21.4.0;python_version>="3.10" aws-sam-translator==1.26.0 From 421043fb2f802117913076cf2c430019d7c03a33 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Aug 2023 20:27:15 +0000 Subject: [PATCH 125/209] Bump jsonpatch from 1.26 to 1.33 Bumps [jsonpatch](https://github.com/stefankoegl/python-json-patch) from 1.26 to 1.33. - [Commits](https://github.com/stefankoegl/python-json-patch/compare/v1.26...v1.33) --- updated-dependencies: - dependency-name: jsonpatch dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 03468e49a..c287e9fde 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -29,7 +29,7 @@ importlib-metadata==1.7.0 iniconfig==2.0.0 jmespath==0.10.0 jsondiff==1.1.2 -jsonpatch==1.26 +jsonpatch==1.33 jsonpickle==1.4.1 jsonpointer==2.0 jsonschema==3.2.0 From c283068cc47524459dc211a2030083cf7af21d20 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Aug 2023 20:27:19 +0000 Subject: [PATCH 126/209] Bump python-jose from 3.2.0 to 3.3.0 Bumps [python-jose](https://github.com/mpdavis/python-jose) from 3.2.0 to 3.3.0. - [Release notes](https://github.com/mpdavis/python-jose/releases) - [Changelog](https://github.com/mpdavis/python-jose/blob/master/CHANGELOG.md) - [Commits](https://github.com/mpdavis/python-jose/compare/3.2.0...3.3.0) --- updated-dependencies: - dependency-name: python-jose dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 03468e49a..816a416f0 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -53,7 +53,7 @@ pyrsistent==0.19.3 pytest==6.0.1;python_version in "3.7 3.8 3.9" pytest==7.3.0;python_version>="3.10" python-dateutil==2.8.1 -python-jose==3.2.0 +python-jose==3.3.0 pytz==2020.1 redis==4.5.4 requests==2.31.0 From 39dac5ce7554b11d21ddd7051b8a62479b7e5feb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Aug 2023 20:27:25 +0000 Subject: [PATCH 127/209] Bump websocket-client from 0.57.0 to 1.6.1 Bumps [websocket-client](https://github.com/websocket-client/websocket-client) from 0.57.0 to 1.6.1. - [Release notes](https://github.com/websocket-client/websocket-client/releases) - [Changelog](https://github.com/websocket-client/websocket-client/blob/master/ChangeLog) - [Commits](https://github.com/websocket-client/websocket-client/compare/v0.57.0...v1.6.1) --- updated-dependencies: - dependency-name: websocket-client dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 03468e49a..c6698670c 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -67,7 +67,7 @@ sshpubkeys==3.1.0 toml==0.10.2 urllib3==1.26.15 waitress==2.1.2 -websocket-client==0.57.0 +websocket-client==1.6.1 werkzeug==1.0.1 wrapt==1.12.1 xmltodict==0.12.0 From 040f585a3685f34cbf81fa6a15d9b2d2f811b308 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Aug 2023 20:27:36 +0000 Subject: [PATCH 128/209] Bump lxml from 4.9.2 to 4.9.3 Bumps [lxml](https://github.com/lxml/lxml) from 4.9.2 to 4.9.3. - [Release notes](https://github.com/lxml/lxml/releases) - [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt) - [Commits](https://github.com/lxml/lxml/compare/lxml-4.9.2...lxml-4.9.3) --- updated-dependencies: - dependency-name: lxml dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 03468e49a..0d858816d 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -34,7 +34,7 @@ jsonpickle==1.4.1 jsonpointer==2.0 jsonschema==3.2.0 junit-xml==1.9 -lxml==4.9.2 +lxml==4.9.3 mock==4.0.2 more-itertools==8.4.0 moto==1.3.14;python_version<"3.10" From 69a10e7b89cd60e6b36b53c4b488f54fbc2ce314 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Aug 2023 20:24:53 +0000 Subject: [PATCH 129/209] Bump xmltodict from 0.12.0 to 0.13.0 Bumps [xmltodict](https://github.com/martinblech/xmltodict) from 0.12.0 to 0.13.0. - [Changelog](https://github.com/martinblech/xmltodict/blob/master/CHANGELOG.md) - [Commits](https://github.com/martinblech/xmltodict/compare/v0.12.0...v0.13.0) --- updated-dependencies: - dependency-name: xmltodict dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 65189bccb..af38d8fdf 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -70,5 +70,5 @@ waitress==2.1.2 websocket-client==1.6.1 werkzeug==1.0.1 wrapt==1.12.1 -xmltodict==0.12.0 +xmltodict==0.13.0 zipp==3.15.0 From 36a8b4181638c2e08750bcefb61156ca640aeb4c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Aug 2023 20:24:57 +0000 Subject: [PATCH 130/209] Bump pyasn1 from 0.4.8 to 0.5.0 Bumps [pyasn1](https://github.com/pyasn1/pyasn1) from 0.4.8 to 0.5.0. - [Release notes](https://github.com/pyasn1/pyasn1/releases) - [Changelog](https://github.com/pyasn1/pyasn1/blob/main/CHANGES.rst) - [Commits](https://github.com/pyasn1/pyasn1/compare/v0.4.8...v0.5.0) --- updated-dependencies: - dependency-name: pyasn1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 65189bccb..386df0327 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -43,7 +43,7 @@ networkx==2.4 packaging==20.4 pluggy==0.13.1 py==1.11.0 -pyasn1==0.4.8 +pyasn1==0.5.0 pycparser==2.20 pyparsing==2.4.7 pyproj==2.6.1.post1;python_version in "3.7 3.8" From 48d5273bac40105b78062a7c4d452b7f394915c0 Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Thu, 13 Apr 2023 09:31:14 +0200 Subject: [PATCH 131/209] Fixing the erratically failing test --- mapproxy/test/system/test_wms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapproxy/test/system/test_wms.py b/mapproxy/test/system/test_wms.py index a8df380b9..013f17eef 100644 --- a/mapproxy/test/system/test_wms.py +++ b/mapproxy/test/system/test_wms.py @@ -998,7 +998,7 @@ def test_get_map(self, app, cache_dir): {"body": img.read(), "headers": {"content-type": "image/jpeg"}}, ) with mock_httpd( - ("localhost", 42423), [expected_req], bbox_aware_query_comparator=True + ("localhost", 42423), [expected_req], bbox_aware_query_comparator=False ): self.common_map_req.params["bbox"] = "0,0,180,90" resp = app.get(self.common_map_req) From f70c70be68d2cb23f1e95b465c9571e9e0085153 Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Fri, 4 Aug 2023 09:45:54 +0200 Subject: [PATCH 132/209] Rerun flaky tests --- mapproxy/test/system/test_wms.py | 7 ++++++- requirements-tests.txt | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/mapproxy/test/system/test_wms.py b/mapproxy/test/system/test_wms.py index 013f17eef..7ab1fc99b 100644 --- a/mapproxy/test/system/test_wms.py +++ b/mapproxy/test/system/test_wms.py @@ -444,6 +444,7 @@ def test_get_map_non_image_response(self, app, cache_dir): "wms_cache_EPSG900913/01/000/000/001/000/000/001.jpeg" ).check() + @pytest.mark.flaky(reruns=5, reruns_delay=2) def test_get_map(self, app, base_dir, cache_dir): # check global tile lock directory tiles_lock_dir = base_dir.join("wmscachetilelockdir") @@ -986,6 +987,7 @@ def test_get_map_xml_exception(self, app): assert "No response from URL" in xml.xpath("//ServiceException/text()")[0] assert validate_with_dtd(xml, "wms/1.1.0/exception_1_1_0.dtd") + @pytest.mark.flaky(reruns=5, reruns_delay=2) def test_get_map(self, app, cache_dir): with tmp_image((256, 256), format="jpeg") as img: expected_req = ( @@ -998,7 +1000,7 @@ def test_get_map(self, app, cache_dir): {"body": img.read(), "headers": {"content-type": "image/jpeg"}}, ) with mock_httpd( - ("localhost", 42423), [expected_req], bbox_aware_query_comparator=False + ("localhost", 42423), [expected_req], bbox_aware_query_comparator=True ): self.common_map_req.params["bbox"] = "0,0,180,90" resp = app.get(self.common_map_req) @@ -1236,6 +1238,7 @@ def test_get_map_xml_exception(self, app): xml = resp.lxml assert "No response from URL" in xml.xpath("//WMTException/text()")[0] + @pytest.mark.flaky(reruns=5, reruns_delay=2) def test_get_map(self, app, cache_dir): with tmp_image((256, 256), format="jpeg") as img: expected_req = ( @@ -1470,6 +1473,7 @@ def test_get_map_xml_exception(self, app): ) assert validate_with_xsd(xml, xsd_name="wms/1.3.0/exceptions_1_3_0.xsd") + @pytest.mark.flaky(reruns=5, reruns_delay=2) def test_get_map(self, app, cache_dir): with tmp_image((256, 256), format="jpeg") as img: expected_req = ( @@ -1546,6 +1550,7 @@ def setup(self): ), ) + @pytest.mark.flaky(reruns=5, reruns_delay=2) def test_get_map(self, app, cache_dir): link_name = "wms_cache_link_single_EPSG900913/01/000/000/001/000/000/001.png" real_name = "wms_cache_link_single_EPSG900913/single_color_tiles/fe00a0.png" diff --git a/requirements-tests.txt b/requirements-tests.txt index 8edf8162d..b61efada5 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -52,6 +52,7 @@ pyproj==3.5.0;python_version>"3.10" pyrsistent==0.19.3 pytest==6.0.1;python_version in "3.7 3.8 3.9" pytest==7.3.0;python_version>="3.10" +pytest-rerunfailures==12.0 python-dateutil==2.8.1 python-jose==3.3.0 pytz==2020.1 From 734952415be1a96ea4f3992c08637c0792409ab3 Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Fri, 4 Aug 2023 09:56:04 +0200 Subject: [PATCH 133/209] update pytest --- requirements-tests.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index b61efada5..10c3e867e 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -50,8 +50,7 @@ pyproj==2.6.1.post1;python_version in "3.7 3.8" pyproj==3.3.1;python_version in "3.9 3.10" pyproj==3.5.0;python_version>"3.10" pyrsistent==0.19.3 -pytest==6.0.1;python_version in "3.7 3.8 3.9" -pytest==7.3.0;python_version>="3.10" +pytest==7.3.0 pytest-rerunfailures==12.0 python-dateutil==2.8.1 python-jose==3.3.0 From 4ed4064fdd3f2223a624e72dff159224e39b98b7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Aug 2023 20:50:12 +0000 Subject: [PATCH 134/209] Bump sshpubkeys from 3.1.0 to 3.3.1 Bumps [sshpubkeys](https://github.com/ojarva/python-sshpubkeys) from 3.1.0 to 3.3.1. - [Release notes](https://github.com/ojarva/python-sshpubkeys/releases) - [Commits](https://github.com/ojarva/python-sshpubkeys/compare/v3.1.0...3.3.1) --- updated-dependencies: - dependency-name: sshpubkeys dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 10c3e867e..4632fdff6 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -63,7 +63,7 @@ rsa==4.9 s3transfer==0.6.0 six==1.15.0 soupsieve==2.0.1 -sshpubkeys==3.1.0 +sshpubkeys==3.3.1 toml==0.10.2 urllib3==1.26.15 waitress==2.1.2 From 2a686061417b24cbf7ffd120f812eba8db881993 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Aug 2023 20:50:18 +0000 Subject: [PATCH 135/209] Bump jsonpointer from 2.0 to 2.4 Bumps [jsonpointer](https://github.com/stefankoegl/python-json-pointer) from 2.0 to 2.4. - [Commits](https://github.com/stefankoegl/python-json-pointer/compare/v2.0...v2.4) --- updated-dependencies: - dependency-name: jsonpointer dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 10c3e867e..570df96c4 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -31,7 +31,7 @@ jmespath==0.10.0 jsondiff==1.1.2 jsonpatch==1.33 jsonpickle==1.4.1 -jsonpointer==2.0 +jsonpointer==2.4 jsonschema==3.2.0 junit-xml==1.9 lxml==4.9.3 From 1f96245bc13744434564fa96bc517b75c4721cd9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Aug 2023 20:50:24 +0000 Subject: [PATCH 136/209] Bump s3transfer from 0.6.0 to 0.6.1 Bumps [s3transfer](https://github.com/boto/s3transfer) from 0.6.0 to 0.6.1. - [Changelog](https://github.com/boto/s3transfer/blob/develop/CHANGELOG.rst) - [Commits](https://github.com/boto/s3transfer/compare/0.6.0...0.6.1) --- updated-dependencies: - dependency-name: s3transfer dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 10c3e867e..0e02ee4b5 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -60,7 +60,7 @@ requests==2.31.0 responses==0.23.3 riak==2.7.0 rsa==4.9 -s3transfer==0.6.0 +s3transfer==0.6.1 six==1.15.0 soupsieve==2.0.1 sshpubkeys==3.1.0 From 6a3725d9ecdce848c5b94cd8583e0a4a13e1ced5 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 8 Aug 2023 18:22:51 +0300 Subject: [PATCH 137/209] Fixed is_cached key --- mapproxy/cache/redis.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mapproxy/cache/redis.py b/mapproxy/cache/redis.py index 3cb805ea5..324edf0de 100644 --- a/mapproxy/cache/redis.py +++ b/mapproxy/cache/redis.py @@ -51,10 +51,11 @@ def _key(self, tile): def is_cached(self, tile, dimensions=None): if tile.coord is None or tile.source: return True + key = self._key(tile) try: log.debug('exists_key, key: %s' % key) - return self.r.exists(self._key(tile)) + return self.r.exists(key) except redis.exceptions.ConnectionError as e: log.error('Error during connection %s' % e) return False @@ -65,7 +66,6 @@ def is_cached(self, tile, dimensions=None): def store_tile(self, tile, dimensions=None): if tile.stored: return True - key = self._key(tile) with tile_buffer(tile) as buf: From 60a752446dc653cdb24319863c7ccfbcfb623e19 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Aug 2023 20:14:49 +0000 Subject: [PATCH 138/209] Bump chardet from 3.0.4 to 5.2.0 Bumps [chardet](https://github.com/chardet/chardet) from 3.0.4 to 5.2.0. - [Release notes](https://github.com/chardet/chardet/releases) - [Commits](https://github.com/chardet/chardet/compare/3.0.4...5.2.0) --- updated-dependencies: - dependency-name: chardet dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 113105bbd..8ff690350 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -17,7 +17,7 @@ botocore==1.29.116 certifi==2023.7.22 cffi==1.15.1; cfn-lint==0.35.0 -chardet==3.0.4 +chardet==5.2.0 cryptography==41.0.3 decorator==4.4.2 docker==4.3.0 From 2815958631e8456ec8d623bcfd5a9c59df83efe4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Aug 2023 20:14:54 +0000 Subject: [PATCH 139/209] Bump docker from 4.3.0 to 6.1.3 Bumps [docker](https://github.com/docker/docker-py) from 4.3.0 to 6.1.3. - [Release notes](https://github.com/docker/docker-py/releases) - [Commits](https://github.com/docker/docker-py/compare/4.3.0...6.1.3) --- updated-dependencies: - dependency-name: docker dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 113105bbd..fae0e1153 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -20,7 +20,7 @@ cfn-lint==0.35.0 chardet==3.0.4 cryptography==41.0.3 decorator==4.4.2 -docker==4.3.0 +docker==6.1.3 docutils==0.19 ecdsa==0.14.1 future==0.18.3 From aaf3d3eb17f7a522b2622a9a0cf5d2fd5755f3a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Aug 2023 20:15:02 +0000 Subject: [PATCH 140/209] Bump beautifulsoup4 from 4.9.1 to 4.12.2 Bumps [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/) from 4.9.1 to 4.12.2. --- updated-dependencies: - dependency-name: beautifulsoup4 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 113105bbd..58a2d2a40 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -10,7 +10,7 @@ attrs==19.3.0;python_version<"3.10" attrs==21.4.0;python_version>="3.10" aws-sam-translator==1.26.0 aws-xray-sdk==2.6.0 -beautifulsoup4==4.9.1 +beautifulsoup4==4.12.2 boto3==1.26.112 boto==2.49.0 botocore==1.29.116 From 46c1b53b87955f42618ca59c16d8b9f529bcdd14 Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Wed, 9 Aug 2023 00:59:34 +0300 Subject: [PATCH 141/209] Add configuration loading cache coverage tests --- mapproxy/test/unit/test_conf_loader.py | 59 ++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/mapproxy/test/unit/test_conf_loader.py b/mapproxy/test/unit/test_conf_loader.py index 305c631cd..a0a9993fa 100644 --- a/mapproxy/test/unit/test_conf_loader.py +++ b/mapproxy/test/unit/test_conf_loader.py @@ -31,10 +31,12 @@ ) from mapproxy.cache.tile import TileManager from mapproxy.config.spec import validate_options +from mapproxy.layer import MapExtent from mapproxy.seed.spec import validate_seed_conf from mapproxy.srs import SRS from mapproxy.test.helper import TempFile from mapproxy.test.unit.test_grid import assert_almost_equal_bbox +from mapproxy.util.coverage import coverage from mapproxy.util.geom import EmptyGeometryError @@ -788,6 +790,63 @@ def test_with_warnings(object): with pytest.raises(ConfigurationError): load_configuration(f, ignore_warnings=False) + + def test_load_default_cache_coverage(object): + with TempFile() as f: + open(f, 'wb').write(b""" + services: + my_extra_service: + foo: bar + + layers: + - name: temp + title: temp + sources: [temp] + + caches: + temp: + grids: [grid] + sources: [] + cache: + type: geopackage + + grids: + grid: + srs: 'EPSG:4326' + bbox: [-180, -90, 180, 90] + """) + config = load_configuration(f) # defaults to ignore_warnings=True + cache = config.caches['temp'] + assert cache.coverage() is None + assert cache.caches()[0][1] == MapExtent((-180, -90, 180, 90), SRS(4326)) + + def test_load_cache_coverage(object): + with TempFile() as f: + open(f, 'wb').write(b""" + services: + my_extra_service: + foo: bar + + layers: + - name: temp + title: temp + sources: [temp] + + parts: + coverages: + test_coverage: &test_coverage + bbox: [-50, -50, 50, 50] + srs: EPSG:4326 + + caches: + temp: + sources: [] + cache: + type: geopackage + coverage: *test_coverage + """) + config = load_configuration(f) # defaults to ignore_warnings=True + assert config.caches['temp'].coverage() == coverage([-50, -50, 50, 50], SRS(4326)) class TestImageOptions(object): From fcb153bb3c48b58c2d252c11840d825fbf0afaf7 Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Wed, 9 Aug 2023 01:00:45 +0300 Subject: [PATCH 142/209] Add geopackage coverage tests --- mapproxy/test/unit/test_cache_geopackage.py | 29 +++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/mapproxy/test/unit/test_cache_geopackage.py b/mapproxy/test/unit/test_cache_geopackage.py index dd1816654..a71972828 100644 --- a/mapproxy/test/unit/test_cache_geopackage.py +++ b/mapproxy/test/unit/test_cache_geopackage.py @@ -26,8 +26,14 @@ from mapproxy.cache.tile import Tile from mapproxy.grid import tile_grid, TileGrid from mapproxy.image import ImageSource +from mapproxy.layer import MapExtent +from mapproxy.srs import SRS from mapproxy.test.helper import assert_files_in_dir from mapproxy.test.unit.test_cache_tile import TileCacheTestBase +from mapproxy.util.coverage import coverage + + +GLOBAL_WEBMERCATOR_EXTENT = MapExtent((-20037508.342789244, -20037508.342789244, 20037508.342789244, 20037508.342789244), SRS(3857)) class TestGeopackageCache(TileCacheTestBase): @@ -76,6 +82,9 @@ def test_new_geopackage(self): (self.table_name,)) content = cur.fetchone() assert content[0] == self.table_name + + assert self.cache.coverage is None + assert self.cache.bbox == GLOBAL_WEBMERCATOR_EXTENT.bbox def test_load_empty_tileset(self): assert self.cache.load_tiles([Tile(None)]) == True @@ -115,6 +124,22 @@ def block(): assert self.cache.store_tile(self.create_tile((0, 0, 1))) == True +class TestGeopackageCacheCoverage(TileCacheTestBase): + def setup(self): + TileCacheTestBase.setup(self) + self.gpkg_file = os.path.join(self.cache_dir, 'tmp.gpkg') + self.table_name = 'test_tiles' + self.cache = GeopackageCache( + self.gpkg_file, + tile_grid=tile_grid(3857, name='global-webmarcator'), + table_name=self.table_name, + coverage=coverage([20, 20, 30, 30], SRS(4326)) + ) + + def test_correct_coverage(self): + assert self.cache.bbox == [20, 20, 30, 30] + + class TestGeopackageLevelCache(TileCacheTestBase): always_loads_metadata = True @@ -131,6 +156,10 @@ def teardown(self): if self.cache: self.cache.cleanup() TileCacheTestBase.teardown(self) + + def test_default_coverage(self): + assert self.cache.coverage is None + assert self.cache.bbox == GLOBAL_WEBMERCATOR_EXTENT.bbox def test_level_files(self): if os.path.exists(self.cache_dir): From 5a5eebdc149d671509362928bbb35d2139d8aad7 Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Wed, 9 Aug 2023 01:10:50 +0300 Subject: [PATCH 143/209] Add tests for s3 cache coverage --- mapproxy/test/unit/test_cache_s3.py | 39 +++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/mapproxy/test/unit/test_cache_s3.py b/mapproxy/test/unit/test_cache_s3.py index d122ae134..b05812b3d 100644 --- a/mapproxy/test/unit/test_cache_s3.py +++ b/mapproxy/test/unit/test_cache_s3.py @@ -15,6 +15,10 @@ import pytest +from mapproxy.layer import MapExtent +from mapproxy.srs import SRS +from mapproxy.util.coverage import coverage + try: import boto3 from moto import mock_s3 @@ -26,6 +30,9 @@ from mapproxy.test.unit.test_cache_tile import TileCacheTestBase +GLOBAL_WEBMERCATOR_EXTENT = MapExtent((-20037508.342789244, -20037508.342789244, 20037508.342789244, 20037508.342789244), SRS(3857)) + + @pytest.mark.skipif(not mock_s3 or not boto3, reason="boto3 and moto required for S3 tests") class TestS3Cache(TileCacheTestBase): @@ -50,6 +57,9 @@ def setup(self): profile_name=None, _concurrent_writer=1, # moto is not thread safe ) + + def test_default_coverage(self): + assert self.cache.coverage is None def teardown(self): self.mock.stop() @@ -82,3 +92,32 @@ def test_tile_key(self, layout, tile_coord, key): # raises, if key is missing boto3.client("s3").head_object(Bucket=self.bucket_name, Key=key) + +@pytest.mark.skipif(not mock_s3 or not boto3, + reason="boto3 and moto required for S3 tests") +class TestS3CacheCoverage(TileCacheTestBase): + always_loads_metadata = True + uses_utc = True + + def setup(self): + TileCacheTestBase.setup(self) + + self.mock = mock_s3() + self.mock.start() + + self.bucket_name = "test" + dir_name = 'mapproxy' + + boto3.client("s3").create_bucket(Bucket=self.bucket_name) + + self.cache = S3Cache(dir_name, + file_ext='png', + directory_layout='tms', + bucket_name=self.bucket_name, + profile_name=None, + _concurrent_writer=1, # moto is not thread safe + coverage=coverage([20, 20, 30, 30], SRS(4326)) + ) + + def test_correct_coverage(self): + assert self.cache.coverage.bbox == [20, 20, 30, 30] From b3af899b5c33d6ce2417bc893fd94a043cae6ace Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Wed, 9 Aug 2023 01:12:02 +0300 Subject: [PATCH 144/209] WIP: add cache coverage system tests --- .../test/system/fixture/cache_coverage.yaml | 48 ++++++++++ mapproxy/test/system/test_cache_coverage.py | 91 +++++++++++++++++++ 2 files changed, 139 insertions(+) create mode 100644 mapproxy/test/system/fixture/cache_coverage.yaml create mode 100644 mapproxy/test/system/test_cache_coverage.py diff --git a/mapproxy/test/system/fixture/cache_coverage.yaml b/mapproxy/test/system/fixture/cache_coverage.yaml new file mode 100644 index 000000000..03a6e566a --- /dev/null +++ b/mapproxy/test/system/fixture/cache_coverage.yaml @@ -0,0 +1,48 @@ +globals: + +services: + demo: + tms: + kml: + wmts: + restful_template: '/myrest/{{Layer}}/{{TileMatrixSet}}/{{TileMatrix}}/{{TileCol}}/{{TileRow}}.{{Format}}' + wms: + md: + title: MapProxy test fixture + abstract: This is MapProxy. + +layers: + - name: coverage_cache + title: coverage_cache + sources: [coverage_cache] + +parts: + coverages: + 4326coverage: &4326coverage + bbox: [-50, -50, 50, 50] + srs: EPSG:4326 + +caches: + coverage_cache: + grids: [crs84quad] + sources: [wms_source] + cache: + type: geopackage + filename: test.gpkg + table_name: test + coverage: *4326coverage + +sources: + wms_source: + type: wms + req: + url: http://localhost:42423/service + layers: foo,bar + +grids: + crs84quad: + name: InspireCrs84Quad + srs: 'EPSG:4326' + bbox: [-180, -90, 180, 90] + origin: 'ul' + min_res: 0.703125 diff --git a/mapproxy/test/system/test_cache_coverage.py b/mapproxy/test/system/test_cache_coverage.py new file mode 100644 index 000000000..80c5f21b2 --- /dev/null +++ b/mapproxy/test/system/test_cache_coverage.py @@ -0,0 +1,91 @@ +# -:- encoding: utf8 -:- +# This file is part of the MapProxy project. +# Copyright (C) 2015 Omniscale +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import division + +import pytest + +from mapproxy.request.wmts import WMTS100CapabilitiesRequest +from mapproxy.request.wms import WMS111CapabilitiesRequest +from mapproxy.test.image import create_tmp_image +from mapproxy.test.helper import validate_with_xsd +from mapproxy.test.system import SysTest + + +@pytest.fixture(scope="module") +def config_file(): + return "cache_coverage.yaml" + + +ns_wmts = { + "wmts": "http://www.opengis.net/wmts/1.0", + "ows": "http://www.opengis.net/ows/1.1", + "xlink": "http://www.w3.org/1999/xlink", +} + + +TEST_TILE = create_tmp_image((256, 256)) + + +class TestCacheCoverage(SysTest): + + def setup(self): + self.common_cap_req = WMTS100CapabilitiesRequest( + url="/service?", + param=dict(service="WMTS", version="1.0.0", request="GetCapabilities"), + ) + + def test_tms_capabilities_coverage(self, app): + resp = app.get("/tms/1.0.0/") + assert "http://localhost/tms/1.0.0/coverage_cache/EPSG4326" in resp + xml = resp.lxml + assert xml.xpath("count(//TileMap)") == 1 + # assert xml.xpath("//TileMap/BoundingBox/@minx") == "minx=-50" + + def test_wmts_capabilities_coverage(self, app): + req = str(self.common_cap_req) + resp = app.get(req) + assert resp.content_type == "application/xml" + xml = resp.lxml + + assert validate_with_xsd( + xml, xsd_name="wmts/1.0/wmtsGetCapabilities_response.xsd" + ) + + assert set( + xml.xpath( + "//wmts:Contents/wmts:Layer/ows:WGS84BoundingBox/ows:LowerCorner/text()", + namespaces=ns_wmts, + ) + ) == set(["-50 -50"]) + + assert set( + xml.xpath( + "//wmts:Contents/wmts:Layer/ows:WGS84BoundingBox/ows:UpperCorner/text()", + namespaces=ns_wmts, + ) + ) == set(["50 50"]) + + def test_wms_capabilities_coverage(self, app): + req = WMS111CapabilitiesRequest(url="/service?") + resp = app.get(req) + assert resp.content_type == "application/vnd.ogc.wms_xml" + xml = resp.lxml + + layer_names = set() + assert xml.xpath("//Layer/BoundingBox") == "-50" + expected_names = set(["coverage_cache", "cache"]) + assert layer_names == expected_names From 846376d972a557ada847f5548270d06239e4a36c Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Wed, 9 Aug 2023 01:23:17 +0300 Subject: [PATCH 145/209] WIP: add cache coverage system tests --- mapproxy/test/system/test_cache_coverage.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/mapproxy/test/system/test_cache_coverage.py b/mapproxy/test/system/test_cache_coverage.py index 80c5f21b2..b9f963e59 100644 --- a/mapproxy/test/system/test_cache_coverage.py +++ b/mapproxy/test/system/test_cache_coverage.py @@ -85,7 +85,4 @@ def test_wms_capabilities_coverage(self, app): assert resp.content_type == "application/vnd.ogc.wms_xml" xml = resp.lxml - layer_names = set() - assert xml.xpath("//Layer/BoundingBox") == "-50" - expected_names = set(["coverage_cache", "cache"]) - assert layer_names == expected_names + # assert xml.xpath("//Layer/BoundingBox") == "-50" From f60c8773b473fe6ec550980dc9de197776bdc1f3 Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Wed, 9 Aug 2023 11:47:00 +0300 Subject: [PATCH 146/209] Add cache coverage system tests --- mapproxy/test/system/test_cache_coverage.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/mapproxy/test/system/test_cache_coverage.py b/mapproxy/test/system/test_cache_coverage.py index b9f963e59..b756f0bbc 100644 --- a/mapproxy/test/system/test_cache_coverage.py +++ b/mapproxy/test/system/test_cache_coverage.py @@ -37,9 +37,6 @@ def config_file(): } -TEST_TILE = create_tmp_image((256, 256)) - - class TestCacheCoverage(SysTest): def setup(self): @@ -53,7 +50,14 @@ def test_tms_capabilities_coverage(self, app): assert "http://localhost/tms/1.0.0/coverage_cache/EPSG4326" in resp xml = resp.lxml assert xml.xpath("count(//TileMap)") == 1 - # assert xml.xpath("//TileMap/BoundingBox/@minx") == "minx=-50" + + resp = app.get("/tms/1.0.0/coverage_cache/EPSG4326") + xml = resp.lxml + + assert xml.xpath("//TileMap/BoundingBox/@minx") == ["-50"] + assert xml.xpath("//TileMap/BoundingBox/@miny") == ["-50"] + assert xml.xpath("//TileMap/BoundingBox/@maxx") == ["50"] + assert xml.xpath("//TileMap/BoundingBox/@maxy") == ["50"] def test_wmts_capabilities_coverage(self, app): req = str(self.common_cap_req) @@ -85,4 +89,7 @@ def test_wms_capabilities_coverage(self, app): assert resp.content_type == "application/vnd.ogc.wms_xml" xml = resp.lxml - # assert xml.xpath("//Layer/BoundingBox") == "-50" + assert xml.xpath("//Layer/LatLonBoundingBox/@minx") == ["-50"] + assert xml.xpath("//Layer/LatLonBoundingBox/@miny") == ["-50"] + assert xml.xpath("//Layer/LatLonBoundingBox/@maxx") == ["50"] + assert xml.xpath("//Layer/LatLonBoundingBox/@maxy") == ["50"] From a9a4117248e0c52178348e25cb91a7c52c493adc Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Wed, 9 Aug 2023 12:31:38 +0300 Subject: [PATCH 147/209] Add cache tests for default coverage --- mapproxy/test/system/test_cache_coverage.py | 1 - mapproxy/test/unit/test_cache_azureblob.py | 3 ++ mapproxy/test/unit/test_cache_compact.py | 6 ++++ mapproxy/test/unit/test_cache_couchdb.py | 3 ++ mapproxy/test/unit/test_cache_redis.py | 3 ++ mapproxy/test/unit/test_cache_riak.py | 3 ++ mapproxy/test/unit/test_cache_s3.py | 38 +++------------------ mapproxy/test/unit/test_cache_tile.py | 15 ++++++++ 8 files changed, 37 insertions(+), 35 deletions(-) diff --git a/mapproxy/test/system/test_cache_coverage.py b/mapproxy/test/system/test_cache_coverage.py index b756f0bbc..42ec31587 100644 --- a/mapproxy/test/system/test_cache_coverage.py +++ b/mapproxy/test/system/test_cache_coverage.py @@ -20,7 +20,6 @@ from mapproxy.request.wmts import WMTS100CapabilitiesRequest from mapproxy.request.wms import WMS111CapabilitiesRequest -from mapproxy.test.image import create_tmp_image from mapproxy.test.helper import validate_with_xsd from mapproxy.test.system import SysTest diff --git a/mapproxy/test/unit/test_cache_azureblob.py b/mapproxy/test/unit/test_cache_azureblob.py index 32a577af3..1b1d90862 100644 --- a/mapproxy/test/unit/test_cache_azureblob.py +++ b/mapproxy/test/unit/test_cache_azureblob.py @@ -57,6 +57,9 @@ def setup(self): def teardown(self): TileCacheTestBase.teardown(self) self.container_client.delete_container() + + def test_default_coverage(self): + assert self.cache.coverage is None @pytest.mark.parametrize('layout,tile_coord,key', [ ['mp', (12345, 67890, 2), 'mycache/webmercator/02/0001/2345/0006/7890.png'], diff --git a/mapproxy/test/unit/test_cache_compact.py b/mapproxy/test/unit/test_cache_compact.py index 76d08800d..bcc7243be 100644 --- a/mapproxy/test/unit/test_cache_compact.py +++ b/mapproxy/test/unit/test_cache_compact.py @@ -40,6 +40,9 @@ def setup(self): self.cache = CompactCacheV1( cache_dir=self.cache_dir, ) + + def test_default_coverage(self): + assert self.cache.coverage is None def test_bundle_files(self): assert not os.path.exists(os.path.join(self.cache_dir, 'L00', 'R0000C0000.bundle')) @@ -138,6 +141,9 @@ def setup(self): self.cache = CompactCacheV2( cache_dir=self.cache_dir, ) + + def test_default_coverage(self): + assert self.cache.coverage is None def test_bundle_files(self): assert not os.path.exists(os.path.join(self.cache_dir, 'L00', 'R0000C0000.bundle')) diff --git a/mapproxy/test/unit/test_cache_couchdb.py b/mapproxy/test/unit/test_cache_couchdb.py index fb30470da..d7135d2fd 100644 --- a/mapproxy/test/unit/test_cache_couchdb.py +++ b/mapproxy/test/unit/test_cache_couchdb.py @@ -52,6 +52,9 @@ def teardown(self): import requests requests.delete(self.cache.couch_url) TileCacheTestBase.teardown(self) + + def test_default_coverage(self): + assert self.cache.coverage is None def test_store_bulk_with_overwrite(self): tile = self.create_tile((0, 0, 4)) diff --git a/mapproxy/test/unit/test_cache_redis.py b/mapproxy/test/unit/test_cache_redis.py index 52be683d1..dd78d23f7 100644 --- a/mapproxy/test/unit/test_cache_redis.py +++ b/mapproxy/test/unit/test_cache_redis.py @@ -44,6 +44,9 @@ def setup(self): def teardown(self): for k in self.cache.r.keys('mapproxy-test-*'): self.cache.r.delete(k) + + def test_default_coverage(self): + assert self.cache.coverage is None def test_expire(self): cache = RedisCache(self.host, int(self.port), prefix='mapproxy-test', db=1, ttl=0) diff --git a/mapproxy/test/unit/test_cache_riak.py b/mapproxy/test/unit/test_cache_riak.py index 77a4b5a2c..dca08cef0 100644 --- a/mapproxy/test/unit/test_cache_riak.py +++ b/mapproxy/test/unit/test_cache_riak.py @@ -56,6 +56,9 @@ def teardown(self): for k in bucket.get_keys(): riak.RiakObject(self.cache.connection, bucket, k).delete() TileCacheTestBase.teardown(self) + + def test_default_coverage(self): + assert self.cache.coverage is None def test_double_remove(self): tile = self.create_tile() diff --git a/mapproxy/test/unit/test_cache_s3.py b/mapproxy/test/unit/test_cache_s3.py index b05812b3d..38c3a5c5f 100644 --- a/mapproxy/test/unit/test_cache_s3.py +++ b/mapproxy/test/unit/test_cache_s3.py @@ -57,13 +57,13 @@ def setup(self): profile_name=None, _concurrent_writer=1, # moto is not thread safe ) - - def test_default_coverage(self): - assert self.cache.coverage is None - + def teardown(self): self.mock.stop() TileCacheTestBase.teardown(self) + + def test_default_coverage(self): + assert self.cache.coverage is None @pytest.mark.parametrize('layout,tile_coord,key', [ ['mp', (12345, 67890, 2), 'mycache/webmercator/02/0001/2345/0006/7890.png'], @@ -91,33 +91,3 @@ def test_tile_key(self, layout, tile_coord, key): # raises, if key is missing boto3.client("s3").head_object(Bucket=self.bucket_name, Key=key) - - -@pytest.mark.skipif(not mock_s3 or not boto3, - reason="boto3 and moto required for S3 tests") -class TestS3CacheCoverage(TileCacheTestBase): - always_loads_metadata = True - uses_utc = True - - def setup(self): - TileCacheTestBase.setup(self) - - self.mock = mock_s3() - self.mock.start() - - self.bucket_name = "test" - dir_name = 'mapproxy' - - boto3.client("s3").create_bucket(Bucket=self.bucket_name) - - self.cache = S3Cache(dir_name, - file_ext='png', - directory_layout='tms', - bucket_name=self.bucket_name, - profile_name=None, - _concurrent_writer=1, # moto is not thread safe - coverage=coverage([20, 20, 30, 30], SRS(4326)) - ) - - def test_correct_coverage(self): - assert self.cache.coverage.bbox == [20, 20, 30, 30] diff --git a/mapproxy/test/unit/test_cache_tile.py b/mapproxy/test/unit/test_cache_tile.py index ee3e8ef0e..807df629a 100644 --- a/mapproxy/test/unit/test_cache_tile.py +++ b/mapproxy/test/unit/test_cache_tile.py @@ -56,6 +56,9 @@ def teardown(self): self.cache.cleanup() if hasattr(self, 'cache_dir') and os.path.exists(self.cache_dir): shutil.rmtree(self.cache_dir) + + def test_default_coverage(self): + assert self.cache.coverage is None def create_tile(self, coord=(3009, 589, 12)): return Tile(coord, @@ -209,6 +212,9 @@ class TestFileTileCache(TileCacheTestBase): def setup(self): TileCacheTestBase.setup(self) self.cache = FileCache(self.cache_dir, 'png') + + def test_default_coverage(self): + assert self.cache.coverage is None def test_store_tile(self): tile = self.create_tile((5, 12, 4)) @@ -322,6 +328,9 @@ def teardown(self): if self.cache: self.cache.cleanup() TileCacheTestBase.teardown(self) + + def test_default_coverage(self): + assert self.cache.coverage is None def test_load_empty_tileset(self): assert self.cache.load_tiles([Tile(None)]) == True @@ -364,6 +373,9 @@ class TestQuadkeyFileTileCache(TileCacheTestBase): def setup(self): TileCacheTestBase.setup(self) self.cache = FileCache(self.cache_dir, 'png', directory_layout='quadkey') + + def test_default_coverage(self): + assert self.cache.coverage is None def test_store_tile(self): tile = self.create_tile((3, 4, 2)) @@ -378,6 +390,9 @@ class TestMBTileLevelCache(TileCacheTestBase): def setup(self): TileCacheTestBase.setup(self) self.cache = MBTilesLevelCache(self.cache_dir) + + def test_default_coverage(self): + assert self.cache.coverage is None def test_level_files(self): assert_files_in_dir(self.cache_dir, []) From 9433edd41145dac09f5aa665740e3917802adb9a Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Wed, 9 Aug 2023 12:56:20 +0300 Subject: [PATCH 148/209] Remove default coverage test from TileCacheTestBase --- mapproxy/test/unit/test_cache_tile.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/mapproxy/test/unit/test_cache_tile.py b/mapproxy/test/unit/test_cache_tile.py index 807df629a..d098adae4 100644 --- a/mapproxy/test/unit/test_cache_tile.py +++ b/mapproxy/test/unit/test_cache_tile.py @@ -56,9 +56,6 @@ def teardown(self): self.cache.cleanup() if hasattr(self, 'cache_dir') and os.path.exists(self.cache_dir): shutil.rmtree(self.cache_dir) - - def test_default_coverage(self): - assert self.cache.coverage is None def create_tile(self, coord=(3009, 589, 12)): return Tile(coord, From e3aa2b629ece374f296eba3e78db67f161e947a8 Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Wed, 9 Aug 2023 12:56:39 +0300 Subject: [PATCH 149/209] Fix GeopackageLevelCache default coverage test --- mapproxy/test/unit/test_cache_geopackage.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mapproxy/test/unit/test_cache_geopackage.py b/mapproxy/test/unit/test_cache_geopackage.py index a71972828..c2e9666cc 100644 --- a/mapproxy/test/unit/test_cache_geopackage.py +++ b/mapproxy/test/unit/test_cache_geopackage.py @@ -131,11 +131,16 @@ def setup(self): self.table_name = 'test_tiles' self.cache = GeopackageCache( self.gpkg_file, - tile_grid=tile_grid(3857, name='global-webmarcator'), + tile_grid=tile_grid(4326, name='inspire-crs-84-quad'), table_name=self.table_name, coverage=coverage([20, 20, 30, 30], SRS(4326)) ) + def teardown(self): + if self.cache: + self.cache.cleanup() + TileCacheTestBase.teardown(self) + def test_correct_coverage(self): assert self.cache.bbox == [20, 20, 30, 30] @@ -159,7 +164,6 @@ def teardown(self): def test_default_coverage(self): assert self.cache.coverage is None - assert self.cache.bbox == GLOBAL_WEBMERCATOR_EXTENT.bbox def test_level_files(self): if os.path.exists(self.cache_dir): From 1bea03fb8c1760e1db578d3d4d79809c84d3ae72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alfonso=20Mart=C3=ADnez=20Cuadrado?= Date: Fri, 11 Aug 2023 08:08:49 +0200 Subject: [PATCH 150/209] Add test for layers sorted by name --- mapproxy/test/system/test_demo.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/mapproxy/test/system/test_demo.py b/mapproxy/test/system/test_demo.py index 3884398da..6c249357e 100644 --- a/mapproxy/test/system/test_demo.py +++ b/mapproxy/test/system/test_demo.py @@ -13,6 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import re import pytest from mapproxy.test.system import SysTest @@ -37,3 +38,19 @@ def test_previewmap(self, app): resp = app.get("/demo/?srs=EPSG%3A3857&format=image%2Fpng&wms_layer=wms_cache", status=200) assert resp.content_type == "text/html" assert '

Layer Preview - wms_cache

' in resp + + def test_layers_sorted_by_name(self, app): + resp = app.get("/demo/", status=200) + + patternTable = re.compile(r'.*?
', re.DOTALL) + patternWMS = r'([\w\d-]+)' + patternWMTS_TBS = r'([\w\d-]+)' + tables = patternTable.findall(resp.text) + + layersWMS = re.findall(patternWMS, resp.text, re.IGNORECASE) + layersWMTS = re.findall(patternWMTS_TBS, tables[1], re.IGNORECASE) + layersTBS = re.findall(patternWMTS_TBS, tables[2], re.IGNORECASE) + + assert layersWMS == sorted(layersWMS) + assert layersWMTS == sorted(layersWMTS) + assert layersTBS == sorted(layersTBS) From a1b51232fc79176c07e711dff1d12928db588f46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alfonso=20Mart=C3=ADnez=20Cuadrado?= Date: Fri, 11 Aug 2023 08:57:59 +0200 Subject: [PATCH 151/209] Fix order of wmts and tms layers by name in demo service --- mapproxy/service/demo.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mapproxy/service/demo.py b/mapproxy/service/demo.py index a9fa5e8b6..e4d74ad8d 100644 --- a/mapproxy/service/demo.py +++ b/mapproxy/service/demo.py @@ -215,6 +215,9 @@ def _render_template(self, req, template): tms_tile_layers[name].append(self.tile_layers[layer]) wmts_layers = tms_tile_layers.copy() + wmts_layers = odict(sorted(wmts_layers.items(), key=lambda x: x[0])) + tms_tile_layers = odict(sorted(tms_tile_layers.items(), key=lambda x: x[0])) + substitutions = dict( extra_services_html_beginning='', extra_services_html_end='', @@ -230,9 +233,6 @@ def _render_template(self, req, template): for add_substitution in extra_substitution_handlers: add_substitution(self, req, substitutions) - wmts_layers = odict(sorted(wmts_layers.items(), key=lambda x: x[0])) - tms_tile_layers = odict(sorted(tms_tile_layers.items(), key=lambda x: x[0])) - return template.substitute(substitutions) def _render_wms_template(self, template, req): From cf35b354f63aae69165e82b2cf8eb9ca611c58e4 Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Tue, 15 Aug 2023 22:38:07 +0300 Subject: [PATCH 152/209] Add intersection and geojson datasource to cache coverage test --- .../test/system/fixture/cache_coverage.yaml | 48 ++++++++-- mapproxy/test/system/test_cache_coverage.py | 94 +++++++++++++++++-- 2 files changed, 127 insertions(+), 15 deletions(-) diff --git a/mapproxy/test/system/fixture/cache_coverage.yaml b/mapproxy/test/system/fixture/cache_coverage.yaml index 03a6e566a..7448e96d7 100644 --- a/mapproxy/test/system/fixture/cache_coverage.yaml +++ b/mapproxy/test/system/fixture/cache_coverage.yaml @@ -12,25 +12,61 @@ services: abstract: This is MapProxy. layers: - - name: coverage_cache - title: coverage_cache - sources: [coverage_cache] + - name: bbox_coverage_cache + title: bbox_coverage_cache + sources: [bbox_coverage_cache] + - name: intersection_coverage_cache + title: intersection_coverage_cache + sources: [intersection_coverage_cache] + - name: datasource_coverage_cache + title: datasource_coverage_cache + sources: [datasource_coverage_cache] parts: coverages: - 4326coverage: &4326coverage + bbox_coverage: &bbox_coverage bbox: [-50, -50, 50, 50] srs: EPSG:4326 + intersection_coverage: &intersection_coverage + intersection: + - bbox: [-50, -57, 53, 59] + srs: 'EPSG:4326' + - bbox: [-48, -56, 51, 58] + srs: 'EPSG:4326' + datasource_coverage: &datasource_coverage + intersection: + - datasource: 'boundary.geojson' + srs: 'EPSG:4326' + - datasource: 'bbox.geojson' + srs: 'EPSG:4326' caches: - coverage_cache: + bbox_coverage_cache: grids: [crs84quad] sources: [wms_source] cache: type: geopackage filename: test.gpkg table_name: test - coverage: *4326coverage + coverage: *bbox_coverage + + intersection_coverage_cache: + grids: [crs84quad] + sources: [wms_source] + cache: + type: geopackage + filename: test.gpkg + table_name: test + coverage: *intersection_coverage + + datasource_coverage_cache: + grids: [crs84quad] + sources: [wms_source] + cache: + type: geopackage + filename: test.gpkg + table_name: test + coverage: *datasource_coverage sources: wms_source: diff --git a/mapproxy/test/system/test_cache_coverage.py b/mapproxy/test/system/test_cache_coverage.py index 42ec31587..96d76a9cd 100644 --- a/mapproxy/test/system/test_cache_coverage.py +++ b/mapproxy/test/system/test_cache_coverage.py @@ -24,6 +24,55 @@ from mapproxy.test.system import SysTest +# From: https://www.kaggle.com/datasets/chapagain/country-state-geo-location +boundary_geojson = ( + b""" +{"type":"FeatureCollection","features":[ +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-155.54211,19.08348],[-155.68817,18.91619],[-155.93665,19.05939],[-155.90806,19.33888],[-156.07347,19.70294],[-156.02368,19.81422],[-155.85008,19.97729],[-155.91907,20.17395],[-155.86108,20.26721],[-155.78505,20.2487],[-155.40214,20.07975],[-155.22452,19.99302],[-155.06226,19.8591],[-154.80741,19.50871],[-154.83147,19.45328],[-155.22217,19.23972],[-155.54211,19.08348]]],[[[-156.07926,20.64397],[-156.41445,20.57241],[-156.58673,20.783],[-156.70167,20.8643],[-156.71055,20.92676],[-156.61258,21.01249],[-156.25711,20.91745],[-155.99566,20.76404],[-156.07926,20.64397]]],[[[-156.75824,21.17684],[-156.78933,21.06873],[-157.32521,21.09777],[-157.25027,21.21958],[-156.75824,21.17684]]],[[[-157.65283,21.32217],[-157.70703,21.26442],[-157.7786,21.27729],[-158.12667,21.31244],[-158.2538,21.53919],[-158.29265,21.57912],[-158.0252,21.71696],[-157.94161,21.65272],[-157.65283,21.32217]]],[[[-159.34512,21.982],[-159.46372,21.88299],[-159.80051,22.06533],[-159.74877,22.1382],[-159.5962,22.23618],[-159.36569,22.21494],[-159.34512,21.982]]],[[[-94.81758,49.38905],[-94.64,48.84],[-94.32914,48.67074],[-93.63087,48.60926],[-92.61,48.45],[-91.64,48.14],[-90.83,48.27],[-89.6,48.01],[-89.272917,48.019808],[-88.378114,48.302918],[-87.439793,47.94],[-86.461991,47.553338],[-85.652363,47.220219],[-84.87608,46.900083],[-84.779238,46.637102],[-84.543749,46.538684],[-84.6049,46.4396],[-84.3367,46.40877],[-84.14212,46.512226],[-84.091851,46.275419],[-83.890765,46.116927],[-83.616131,46.116927],[-83.469551,45.994686],[-83.592851,45.816894],[-82.550925,45.347517],[-82.337763,44.44],[-82.137642,43.571088],[-82.43,42.98],[-82.9,42.43],[-83.12,42.08],[-83.142,41.975681],[-83.02981,41.832796],[-82.690089,41.675105],[-82.439278,41.675105],[-81.277747,42.209026],[-80.247448,42.3662],[-78.939362,42.863611],[-78.92,42.965],[-79.01,43.27],[-79.171674,43.466339],[-78.72028,43.625089],[-77.737885,43.629056],[-76.820034,43.628784],[-76.5,44.018459],[-76.375,44.09631],[-75.31821,44.81645],[-74.867,45.00048],[-73.34783,45.00738],[-71.50506,45.0082],[-71.405,45.255],[-71.08482,45.30524],[-70.66,45.46],[-70.305,45.915],[-69.99997,46.69307],[-69.237216,47.447781],[-68.905,47.185],[-68.23444,47.35486],[-67.79046,47.06636],[-67.79134,45.70281],[-67.13741,45.13753],[-66.96466,44.8097],[-68.03252,44.3252],[-69.06,43.98],[-70.11617,43.68405],[-70.645476,43.090238],[-70.81489,42.8653],[-70.825,42.335],[-70.495,41.805],[-70.08,41.78],[-70.185,42.145],[-69.88497,41.92283],[-69.96503,41.63717],[-70.64,41.475],[-71.12039,41.49445],[-71.86,41.32],[-72.295,41.27],[-72.87643,41.22065],[-73.71,40.931102],[-72.24126,41.11948],[-71.945,40.93],[-73.345,40.63],[-73.982,40.628],[-73.952325,40.75075],[-74.25671,40.47351],[-73.96244,40.42763],[-74.17838,39.70926],[-74.90604,38.93954],[-74.98041,39.1964],[-75.20002,39.24845],[-75.52805,39.4985],[-75.32,38.96],[-75.071835,38.782032],[-75.05673,38.40412],[-75.37747,38.01551],[-75.94023,37.21689],[-76.03127,37.2566],[-75.72205,37.93705],[-76.23287,38.319215],[-76.35,39.15],[-76.542725,38.717615],[-76.32933,38.08326],[-76.989998,38.239992],[-76.30162,37.917945],[-76.25874,36.9664],[-75.9718,36.89726],[-75.86804,36.55125],[-75.72749,35.55074],[-76.36318,34.80854],[-77.397635,34.51201],[-78.05496,33.92547],[-78.55435,33.86133],[-79.06067,33.49395],[-79.20357,33.15839],[-80.301325,32.509355],[-80.86498,32.0333],[-81.33629,31.44049],[-81.49042,30.72999],[-81.31371,30.03552],[-80.98,29.18],[-80.535585,28.47213],[-80.53,28.04],[-80.056539,26.88],[-80.088015,26.205765],[-80.13156,25.816775],[-80.38103,25.20616],[-80.68,25.08],[-81.17213,25.20126],[-81.33,25.64],[-81.71,25.87],[-82.24,26.73],[-82.70515,27.49504],[-82.85526,27.88624],[-82.65,28.55],[-82.93,29.1],[-83.70959,29.93656],[-84.1,30.09],[-85.10882,29.63615],[-85.28784,29.68612],[-85.7731,30.15261],[-86.4,30.4],[-87.53036,30.27433],[-88.41782,30.3849],[-89.18049,30.31598],[-89.593831,30.159994],[-89.413735,29.89419],[-89.43,29.48864],[-89.21767,29.29108],[-89.40823,29.15961],[-89.77928,29.30714],[-90.15463,29.11743],[-90.880225,29.148535],[-91.626785,29.677],[-92.49906,29.5523],[-93.22637,29.78375],[-93.84842,29.71363],[-94.69,29.48],[-95.60026,28.73863],[-96.59404,28.30748],[-97.14,27.83],[-97.37,27.38],[-97.38,26.69],[-97.33,26.21],[-97.14,25.87],[-97.53,25.84],[-98.24,26.06],[-99.02,26.37],[-99.3,26.84],[-99.52,27.54],[-100.11,28.11],[-100.45584,28.69612],[-100.9576,29.38071],[-101.6624,29.7793],[-102.48,29.76],[-103.11,28.97],[-103.94,29.27],[-104.45697,29.57196],[-104.70575,30.12173],[-105.03737,30.64402],[-105.63159,31.08383],[-106.1429,31.39995],[-106.50759,31.75452],[-108.24,31.754854],[-108.24194,31.34222],[-109.035,31.34194],[-111.02361,31.33472],[-113.30498,32.03914],[-114.815,32.52528],[-114.72139,32.72083],[-115.99135,32.61239],[-117.12776,32.53534],[-117.295938,33.046225],[-117.944,33.621236],[-118.410602,33.740909],[-118.519895,34.027782],[-119.081,34.078],[-119.438841,34.348477],[-120.36778,34.44711],[-120.62286,34.60855],[-120.74433,35.15686],[-121.71457,36.16153],[-122.54747,37.55176],[-122.51201,37.78339],[-122.95319,38.11371],[-123.7272,38.95166],[-123.86517,39.76699],[-124.39807,40.3132],[-124.17886,41.14202],[-124.2137,41.99964],[-124.53284,42.76599],[-124.14214,43.70838],[-124.020535,44.615895],[-123.89893,45.52341],[-124.079635,46.86475],[-124.39567,47.72017],[-124.68721,48.184433],[-124.566101,48.379715],[-123.12,48.04],[-122.58736,47.096],[-122.34,47.36],[-122.5,48.18],[-122.84,49],[-120,49],[-117.03121,49],[-116.04818,49],[-113,49],[-110.05,49],[-107.05,49],[-104.04826,48.99986],[-100.65,49],[-97.22872,49.0007],[-95.15907,49],[-95.15609,49.38425],[-94.81758,49.38905]]],[[[-153.006314,57.115842],[-154.00509,56.734677],[-154.516403,56.992749],[-154.670993,57.461196],[-153.76278,57.816575],[-153.228729,57.968968],[-152.564791,57.901427],[-152.141147,57.591059],[-153.006314,57.115842]]],[[[-165.579164,59.909987],[-166.19277,59.754441],[-166.848337,59.941406],[-167.455277,60.213069],[-166.467792,60.38417],[-165.67443,60.293607],[-165.579164,59.909987]]],[[[-171.731657,63.782515],[-171.114434,63.592191],[-170.491112,63.694975],[-169.682505,63.431116],[-168.689439,63.297506],[-168.771941,63.188598],[-169.52944,62.976931],[-170.290556,63.194438],[-170.671386,63.375822],[-171.553063,63.317789],[-171.791111,63.405846],[-171.731657,63.782515]]],[[[-155.06779,71.147776],[-154.344165,70.696409],[-153.900006,70.889989],[-152.210006,70.829992],[-152.270002,70.600006],[-150.739992,70.430017],[-149.720003,70.53001],[-147.613362,70.214035],[-145.68999,70.12001],[-144.920011,69.989992],[-143.589446,70.152514],[-142.07251,69.851938],[-140.985988,69.711998],[-140.992499,66.000029],[-140.99777,60.306397],[-140.012998,60.276838],[-139.039,60.000007],[-138.34089,59.56211],[-137.4525,58.905],[-136.47972,59.46389],[-135.47583,59.78778],[-134.945,59.27056],[-134.27111,58.86111],[-133.355549,58.410285],[-132.73042,57.69289],[-131.70781,56.55212],[-130.00778,55.91583],[-129.979994,55.284998],[-130.53611,54.802753],[-131.085818,55.178906],[-131.967211,55.497776],[-132.250011,56.369996],[-133.539181,57.178887],[-134.078063,58.123068],[-135.038211,58.187715],[-136.628062,58.212209],[-137.800006,58.499995],[-139.867787,59.537762],[-140.825274,59.727517],[-142.574444,60.084447],[-143.958881,59.99918],[-145.925557,60.45861],[-147.114374,60.884656],[-148.224306,60.672989],[-148.018066,59.978329],[-148.570823,59.914173],[-149.727858,59.705658],[-150.608243,59.368211],[-151.716393,59.155821],[-151.859433,59.744984],[-151.409719,60.725803],[-150.346941,61.033588],[-150.621111,61.284425],[-151.895839,60.727198],[-152.57833,60.061657],[-154.019172,59.350279],[-153.287511,58.864728],[-154.232492,58.146374],[-155.307491,57.727795],[-156.308335,57.422774],[-156.556097,56.979985],[-158.117217,56.463608],[-158.433321,55.994154],[-159.603327,55.566686],[-160.28972,55.643581],[-161.223048,55.364735],[-162.237766,55.024187],[-163.069447,54.689737],[-164.785569,54.404173],[-164.942226,54.572225],[-163.84834,55.039431],[-162.870001,55.348043],[-161.804175,55.894986],[-160.563605,56.008055],[-160.07056,56.418055],[-158.684443,57.016675],[-158.461097,57.216921],[-157.72277,57.570001],[-157.550274,58.328326],[-157.041675,58.918885],[-158.194731,58.615802],[-158.517218,58.787781],[-159.058606,58.424186],[-159.711667,58.93139],[-159.981289,58.572549],[-160.355271,59.071123],[-161.355003,58.670838],[-161.968894,58.671665],[-162.054987,59.266925],[-161.874171,59.633621],[-162.518059,59.989724],[-163.818341,59.798056],[-164.662218,60.267484],[-165.346388,60.507496],[-165.350832,61.073895],[-166.121379,61.500019],[-165.734452,62.074997],[-164.919179,62.633076],[-164.562508,63.146378],[-163.753332,63.219449],[-163.067224,63.059459],[-162.260555,63.541936],[-161.53445,63.455817],[-160.772507,63.766108],[-160.958335,64.222799],[-161.518068,64.402788],[-160.777778,64.788604],[-161.391926,64.777235],[-162.45305,64.559445],[-162.757786,64.338605],[-163.546394,64.55916],[-164.96083,64.446945],[-166.425288,64.686672],[-166.845004,65.088896],[-168.11056,65.669997],[-166.705271,66.088318],[-164.47471,66.57666],[-163.652512,66.57666],[-163.788602,66.077207],[-161.677774,66.11612],[-162.489715,66.735565],[-163.719717,67.116395],[-164.430991,67.616338],[-165.390287,68.042772],[-166.764441,68.358877],[-166.204707,68.883031],[-164.430811,68.915535],[-163.168614,69.371115],[-162.930566,69.858062],[-161.908897,70.33333],[-160.934797,70.44769],[-159.039176,70.891642],[-158.119723,70.824721],[-156.580825,71.357764],[-155.06779,71.147776]]]]}} +]} +""".strip() +) + + +bbox_geojson = ( + b""" +{"type":"FeatureCollection","features":[ +{ + "type": "Feature", + "properties": {}, + "geometry": { + "coordinates": [ + [ + [ + -63.56007379633115, + 29.28415663402984 + ], + [ + -85.19852788496041, + 36.17088587412222 + ], + [ + -85.91055751613112, + 24.072232084660257 + ], + [ + -66.13007334822726, + 20.3965768925829 + ], + [ + -63.56007379633115, + 29.28415663402984 + ] + ] + ], + "type": "Polygon" + } + } +]} +""".strip() +) + + @pytest.fixture(scope="module") def config_file(): return "cache_coverage.yaml" @@ -37,6 +86,10 @@ def config_file(): class TestCacheCoverage(SysTest): + @pytest.fixture(scope="class") + def additional_files(self, base_dir): + base_dir.join("boundary.geojson").write_binary(boundary_geojson) + base_dir.join("bbox.geojson").write_binary(bbox_geojson) def setup(self): self.common_cap_req = WMTS100CapabilitiesRequest( @@ -46,17 +99,40 @@ def setup(self): def test_tms_capabilities_coverage(self, app): resp = app.get("/tms/1.0.0/") - assert "http://localhost/tms/1.0.0/coverage_cache/EPSG4326" in resp + assert "http://localhost/tms/1.0.0/bbox_coverage_cache/EPSG4326" in resp + assert "http://localhost/tms/1.0.0/intersection_coverage_cache/EPSG4326" in resp + assert "http://localhost/tms/1.0.0/datasource_coverage_cache/EPSG4326" in resp xml = resp.lxml - assert xml.xpath("count(//TileMap)") == 1 + assert xml.xpath("count(//TileMap)") == 3 - resp = app.get("/tms/1.0.0/coverage_cache/EPSG4326") + # bbox coverage + resp = app.get("/tms/1.0.0/bbox_coverage_cache/EPSG4326") xml = resp.lxml assert xml.xpath("//TileMap/BoundingBox/@minx") == ["-50"] assert xml.xpath("//TileMap/BoundingBox/@miny") == ["-50"] assert xml.xpath("//TileMap/BoundingBox/@maxx") == ["50"] assert xml.xpath("//TileMap/BoundingBox/@maxy") == ["50"] + + # intersection coverage + resp = app.get("/tms/1.0.0/intersection_coverage_cache/EPSG4326") + xml = resp.lxml + + assert xml.xpath("//TileMap/BoundingBox/@minx") == ["-48.0"] + assert xml.xpath("//TileMap/BoundingBox/@miny") == ["-56.0"] + assert xml.xpath("//TileMap/BoundingBox/@maxx") == ["51.0"] + assert xml.xpath("//TileMap/BoundingBox/@maxy") == ["58.0"] + + # datasource coverage + resp = app.get("/tms/1.0.0/datasource_coverage_cache/EPSG4326") + xml = resp.lxml + + assert xml.xpath("//TileMap/BoundingBox/@minx") == ["-85.56451604106776"] + assert xml.xpath("//TileMap/BoundingBox/@miny") == ["25.08"] + assert xml.xpath("//TileMap/BoundingBox/@maxx") == ["-78.11791218081675"] + assert xml.xpath("//TileMap/BoundingBox/@maxy") == ["36.17088587412222"] + + def test_wmts_capabilities_coverage(self, app): req = str(self.common_cap_req) @@ -73,14 +149,14 @@ def test_wmts_capabilities_coverage(self, app): "//wmts:Contents/wmts:Layer/ows:WGS84BoundingBox/ows:LowerCorner/text()", namespaces=ns_wmts, ) - ) == set(["-50 -50"]) + ) == set(["-48.0 -56.0", "-85.56451604106776 25.08", "-50 -50"]) assert set( xml.xpath( "//wmts:Contents/wmts:Layer/ows:WGS84BoundingBox/ows:UpperCorner/text()", namespaces=ns_wmts, ) - ) == set(["50 50"]) + ) == set(["51.0 58.0", "-78.11791218081675 36.17088587412222", "50 50"]) def test_wms_capabilities_coverage(self, app): req = WMS111CapabilitiesRequest(url="/service?") @@ -88,7 +164,7 @@ def test_wms_capabilities_coverage(self, app): assert resp.content_type == "application/vnd.ogc.wms_xml" xml = resp.lxml - assert xml.xpath("//Layer/LatLonBoundingBox/@minx") == ["-50"] - assert xml.xpath("//Layer/LatLonBoundingBox/@miny") == ["-50"] - assert xml.xpath("//Layer/LatLonBoundingBox/@maxx") == ["50"] - assert xml.xpath("//Layer/LatLonBoundingBox/@maxy") == ["50"] + assert xml.xpath("//Layer/Layer/LatLonBoundingBox/@minx") == ["-50", "-48.0", "-85.56451604106776"] + assert xml.xpath("//Layer/Layer/LatLonBoundingBox/@miny") == ["-50", "-56.0", "25.08"] + assert xml.xpath("//Layer/Layer/LatLonBoundingBox/@maxx") == ["50", "51.0", "-78.11791218081675"] + assert xml.xpath("//Layer/Layer/LatLonBoundingBox/@maxy") == ["50", "58.0", "36.17088587412222"] From e5fc5d7d8265534b128173f47610d1cca7cf5e4c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Aug 2023 20:27:56 +0000 Subject: [PATCH 153/209] Bump ecdsa from 0.14.1 to 0.18.0 Bumps [ecdsa](https://github.com/tlsfuzzer/python-ecdsa) from 0.14.1 to 0.18.0. - [Release notes](https://github.com/tlsfuzzer/python-ecdsa/releases) - [Changelog](https://github.com/tlsfuzzer/python-ecdsa/blob/master/NEWS) - [Commits](https://github.com/tlsfuzzer/python-ecdsa/compare/python-ecdsa-0.14.1...python-ecdsa-0.18.0) --- updated-dependencies: - dependency-name: ecdsa dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index e1b9cae2f..a4cca60b8 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -22,7 +22,7 @@ cryptography==41.0.3 decorator==4.4.2 docker==6.1.3 docutils==0.19 -ecdsa==0.14.1 +ecdsa==0.18.0 future==0.18.3 idna==2.8 importlib-metadata==1.7.0 From 36ced34d976107cb3299f1a804e4ec3f117e576e Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Thu, 17 Aug 2023 03:25:58 +0300 Subject: [PATCH 154/209] Remove tile that are not in cache coverage --- mapproxy/cache/tile.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mapproxy/cache/tile.py b/mapproxy/cache/tile.py index ed2268916..5c006e58d 100644 --- a/mapproxy/cache/tile.py +++ b/mapproxy/cache/tile.py @@ -150,6 +150,11 @@ def load_tile_coords(self, tile_coords, dimensions=None, with_metadata=False): # Remove our internal marker source, for missing tiles. if t.source is RESCALE_TILE_MISSING: t.source = None + + # Remove tiles that are not in the cache coverage + tile_bbox = self.grid.tile_bbox(t.coord) + if self.cache.coverage and not self.cache.coverage.intersects(tile_bbox, self.grid.srs): + t.source = None return tiles From c3a81baa0074c519c6a63489d4873b5decfb937f Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Mon, 28 Aug 2023 00:41:24 +0300 Subject: [PATCH 155/209] Move check for tiles in coverage before attempting to load tiles --- mapproxy/cache/tile.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mapproxy/cache/tile.py b/mapproxy/cache/tile.py index 5c006e58d..56db0050f 100644 --- a/mapproxy/cache/tile.py +++ b/mapproxy/cache/tile.py @@ -140,6 +140,12 @@ def load_tile_coords(self, tile_coords, dimensions=None, with_metadata=False): rescale_till_zoom = 0 if rescale_till_zoom > self.grid.levels: rescale_till_zoom = self.grid.levels + + # Remove tiles that are not in the cache coverage + for t in tiles.tiles: + tile_bbox = self.grid.tile_bbox(t.coord) + if self.cache.coverage and not self.cache.coverage.intersects(tile_bbox, self.grid.srs): + t.coord = None tiles = self._load_tile_coords( tiles, dimensions=dimensions, with_metadata=with_metadata, @@ -150,12 +156,6 @@ def load_tile_coords(self, tile_coords, dimensions=None, with_metadata=False): # Remove our internal marker source, for missing tiles. if t.source is RESCALE_TILE_MISSING: t.source = None - - # Remove tiles that are not in the cache coverage - tile_bbox = self.grid.tile_bbox(t.coord) - if self.cache.coverage and not self.cache.coverage.intersects(tile_bbox, self.grid.srs): - t.source = None - return tiles def _load_tile_coords(self, tiles, dimensions=None, with_metadata=False, From 804857ceeff4c66b4ec70ead0c0b2415fe8f9fdf Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Mon, 28 Aug 2023 00:43:45 +0300 Subject: [PATCH 156/209] Add tests for loading tiles in coverage and empty tiles outside of coverage --- mapproxy/service/tile.py | 1 - mapproxy/test/unit/test_cache.py | 114 ++++++++++++++++++++++++++++++- 2 files changed, 113 insertions(+), 2 deletions(-) diff --git a/mapproxy/service/tile.py b/mapproxy/service/tile.py index 45980cdf0..6aaccec8d 100644 --- a/mapproxy/service/tile.py +++ b/mapproxy/service/tile.py @@ -25,7 +25,6 @@ from mapproxy.service.base import Server from mapproxy.request.tile import tile_request from mapproxy.request.base import split_mime_type -from mapproxy.layer import map_extent_from_grid from mapproxy.source import SourceError from mapproxy.srs import SRS from mapproxy.grid import default_bboxs diff --git a/mapproxy/test/unit/test_cache.py b/mapproxy/test/unit/test_cache.py index 06c45e74e..6ddd2848e 100644 --- a/mapproxy/test/unit/test_cache.py +++ b/mapproxy/test/unit/test_cache.py @@ -33,6 +33,7 @@ from mapproxy.client.http import HTTPClient from mapproxy.client.wms import WMSClient from mapproxy.compat.image import Image +from mapproxy.config.coverage import load_coverage from mapproxy.grid import TileGrid, resolution_range from mapproxy.image import ImageSource, BlankImageSource from mapproxy.image.opts import ImageOptions @@ -53,9 +54,10 @@ from mapproxy.source.wms import WMSSource from mapproxy.source.error import HTTPSourceErrorHandler from mapproxy.srs import SRS, SupportedSRS, PreferredSrcSRS +from mapproxy.test.helper import TempFile from mapproxy.test.http import assert_query_eq, wms_query_eq, query_eq, mock_httpd from mapproxy.test.image import create_debug_img, is_png, tmp_image, create_tmp_image_buf -from mapproxy.util.coverage import BBOXCoverage +from mapproxy.util.coverage import BBOXCoverage, coverage TEST_SERVER_ADDRESS = ('127.0.0.1', 56413) @@ -1190,4 +1192,114 @@ def test_scaled_tiles(self, name, file_cache, tile_locker, rescale_tiles, tiles, assert file_cache.stored_tiles == set(store) assert file_cache.loaded_tiles == counting_set(expected_load) +class TileCacheTestBase(object): + cache = None # set by subclasses + def setup(self): + self.cache_dir = tempfile.mkdtemp() + + def teardown(self): + if hasattr(self.cache, 'cleanup'): + self.cache.cleanup() + if hasattr(self, 'cache_dir') and os.path.exists(self.cache_dir): + shutil.rmtree(self.cache_dir) + +class TestTileManagerCacheBboxCoverage(TileCacheTestBase): + def setup(self): + TileCacheTestBase.setup(self) + self.cache = RecordFileCache(self.cache_dir, 'png', coverage=coverage([-50, -50, 50, 50], SRS(4326))) + + def test_load_tiles_in_coverage(self, tile_locker): + grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90], origin='ul') + image_opts = ImageOptions(format='image/png') + tm = TileManager( + grid, self.cache, [], 'png', + locker=tile_locker, + image_opts=image_opts, + ) + + coords = [(2, 1, 2), (36, 7, 6), (18082, 6028, 15)] + collection = tm.load_tile_coords(coords) + + # Check that tiles inside of coverage loaded + assert all(coord in collection for coord in coords) + assert all(t.coord is not None for t in collection) + + all(t.coord in self.cache.stored_tiles for t in collection) + assert self.cache.loaded_tiles == counting_set(coords) + + def test_empty_tiles_outside_coverage(self, tile_locker): + grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90], origin='ul') + image_opts = ImageOptions(format='image/png') + tm = TileManager( + grid, self.cache, [], 'png', + locker=tile_locker, + image_opts=image_opts, + ) + + coords = [(0, 1, 1), (33, 5, 5), (19449, 3638, 15)] + collection = tm.load_tile_coords(coords) + + # Check that tiles did not load + assert collection.blank + assert all(t.coord is None for t in collection) + + assert self.cache.stored_tiles == set([]) + assert self.cache.loaded_tiles == counting_set([None for _ in coords]) + +# From: https://www.kaggle.com/datasets/chapagain/country-state-geo-location +boundary_geojson = ( + b""" +{"type":"FeatureCollection","features":[ +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-155.54211,19.08348],[-155.68817,18.91619],[-155.93665,19.05939],[-155.90806,19.33888],[-156.07347,19.70294],[-156.02368,19.81422],[-155.85008,19.97729],[-155.91907,20.17395],[-155.86108,20.26721],[-155.78505,20.2487],[-155.40214,20.07975],[-155.22452,19.99302],[-155.06226,19.8591],[-154.80741,19.50871],[-154.83147,19.45328],[-155.22217,19.23972],[-155.54211,19.08348]]],[[[-156.07926,20.64397],[-156.41445,20.57241],[-156.58673,20.783],[-156.70167,20.8643],[-156.71055,20.92676],[-156.61258,21.01249],[-156.25711,20.91745],[-155.99566,20.76404],[-156.07926,20.64397]]],[[[-156.75824,21.17684],[-156.78933,21.06873],[-157.32521,21.09777],[-157.25027,21.21958],[-156.75824,21.17684]]],[[[-157.65283,21.32217],[-157.70703,21.26442],[-157.7786,21.27729],[-158.12667,21.31244],[-158.2538,21.53919],[-158.29265,21.57912],[-158.0252,21.71696],[-157.94161,21.65272],[-157.65283,21.32217]]],[[[-159.34512,21.982],[-159.46372,21.88299],[-159.80051,22.06533],[-159.74877,22.1382],[-159.5962,22.23618],[-159.36569,22.21494],[-159.34512,21.982]]],[[[-94.81758,49.38905],[-94.64,48.84],[-94.32914,48.67074],[-93.63087,48.60926],[-92.61,48.45],[-91.64,48.14],[-90.83,48.27],[-89.6,48.01],[-89.272917,48.019808],[-88.378114,48.302918],[-87.439793,47.94],[-86.461991,47.553338],[-85.652363,47.220219],[-84.87608,46.900083],[-84.779238,46.637102],[-84.543749,46.538684],[-84.6049,46.4396],[-84.3367,46.40877],[-84.14212,46.512226],[-84.091851,46.275419],[-83.890765,46.116927],[-83.616131,46.116927],[-83.469551,45.994686],[-83.592851,45.816894],[-82.550925,45.347517],[-82.337763,44.44],[-82.137642,43.571088],[-82.43,42.98],[-82.9,42.43],[-83.12,42.08],[-83.142,41.975681],[-83.02981,41.832796],[-82.690089,41.675105],[-82.439278,41.675105],[-81.277747,42.209026],[-80.247448,42.3662],[-78.939362,42.863611],[-78.92,42.965],[-79.01,43.27],[-79.171674,43.466339],[-78.72028,43.625089],[-77.737885,43.629056],[-76.820034,43.628784],[-76.5,44.018459],[-76.375,44.09631],[-75.31821,44.81645],[-74.867,45.00048],[-73.34783,45.00738],[-71.50506,45.0082],[-71.405,45.255],[-71.08482,45.30524],[-70.66,45.46],[-70.305,45.915],[-69.99997,46.69307],[-69.237216,47.447781],[-68.905,47.185],[-68.23444,47.35486],[-67.79046,47.06636],[-67.79134,45.70281],[-67.13741,45.13753],[-66.96466,44.8097],[-68.03252,44.3252],[-69.06,43.98],[-70.11617,43.68405],[-70.645476,43.090238],[-70.81489,42.8653],[-70.825,42.335],[-70.495,41.805],[-70.08,41.78],[-70.185,42.145],[-69.88497,41.92283],[-69.96503,41.63717],[-70.64,41.475],[-71.12039,41.49445],[-71.86,41.32],[-72.295,41.27],[-72.87643,41.22065],[-73.71,40.931102],[-72.24126,41.11948],[-71.945,40.93],[-73.345,40.63],[-73.982,40.628],[-73.952325,40.75075],[-74.25671,40.47351],[-73.96244,40.42763],[-74.17838,39.70926],[-74.90604,38.93954],[-74.98041,39.1964],[-75.20002,39.24845],[-75.52805,39.4985],[-75.32,38.96],[-75.071835,38.782032],[-75.05673,38.40412],[-75.37747,38.01551],[-75.94023,37.21689],[-76.03127,37.2566],[-75.72205,37.93705],[-76.23287,38.319215],[-76.35,39.15],[-76.542725,38.717615],[-76.32933,38.08326],[-76.989998,38.239992],[-76.30162,37.917945],[-76.25874,36.9664],[-75.9718,36.89726],[-75.86804,36.55125],[-75.72749,35.55074],[-76.36318,34.80854],[-77.397635,34.51201],[-78.05496,33.92547],[-78.55435,33.86133],[-79.06067,33.49395],[-79.20357,33.15839],[-80.301325,32.509355],[-80.86498,32.0333],[-81.33629,31.44049],[-81.49042,30.72999],[-81.31371,30.03552],[-80.98,29.18],[-80.535585,28.47213],[-80.53,28.04],[-80.056539,26.88],[-80.088015,26.205765],[-80.13156,25.816775],[-80.38103,25.20616],[-80.68,25.08],[-81.17213,25.20126],[-81.33,25.64],[-81.71,25.87],[-82.24,26.73],[-82.70515,27.49504],[-82.85526,27.88624],[-82.65,28.55],[-82.93,29.1],[-83.70959,29.93656],[-84.1,30.09],[-85.10882,29.63615],[-85.28784,29.68612],[-85.7731,30.15261],[-86.4,30.4],[-87.53036,30.27433],[-88.41782,30.3849],[-89.18049,30.31598],[-89.593831,30.159994],[-89.413735,29.89419],[-89.43,29.48864],[-89.21767,29.29108],[-89.40823,29.15961],[-89.77928,29.30714],[-90.15463,29.11743],[-90.880225,29.148535],[-91.626785,29.677],[-92.49906,29.5523],[-93.22637,29.78375],[-93.84842,29.71363],[-94.69,29.48],[-95.60026,28.73863],[-96.59404,28.30748],[-97.14,27.83],[-97.37,27.38],[-97.38,26.69],[-97.33,26.21],[-97.14,25.87],[-97.53,25.84],[-98.24,26.06],[-99.02,26.37],[-99.3,26.84],[-99.52,27.54],[-100.11,28.11],[-100.45584,28.69612],[-100.9576,29.38071],[-101.6624,29.7793],[-102.48,29.76],[-103.11,28.97],[-103.94,29.27],[-104.45697,29.57196],[-104.70575,30.12173],[-105.03737,30.64402],[-105.63159,31.08383],[-106.1429,31.39995],[-106.50759,31.75452],[-108.24,31.754854],[-108.24194,31.34222],[-109.035,31.34194],[-111.02361,31.33472],[-113.30498,32.03914],[-114.815,32.52528],[-114.72139,32.72083],[-115.99135,32.61239],[-117.12776,32.53534],[-117.295938,33.046225],[-117.944,33.621236],[-118.410602,33.740909],[-118.519895,34.027782],[-119.081,34.078],[-119.438841,34.348477],[-120.36778,34.44711],[-120.62286,34.60855],[-120.74433,35.15686],[-121.71457,36.16153],[-122.54747,37.55176],[-122.51201,37.78339],[-122.95319,38.11371],[-123.7272,38.95166],[-123.86517,39.76699],[-124.39807,40.3132],[-124.17886,41.14202],[-124.2137,41.99964],[-124.53284,42.76599],[-124.14214,43.70838],[-124.020535,44.615895],[-123.89893,45.52341],[-124.079635,46.86475],[-124.39567,47.72017],[-124.68721,48.184433],[-124.566101,48.379715],[-123.12,48.04],[-122.58736,47.096],[-122.34,47.36],[-122.5,48.18],[-122.84,49],[-120,49],[-117.03121,49],[-116.04818,49],[-113,49],[-110.05,49],[-107.05,49],[-104.04826,48.99986],[-100.65,49],[-97.22872,49.0007],[-95.15907,49],[-95.15609,49.38425],[-94.81758,49.38905]]],[[[-153.006314,57.115842],[-154.00509,56.734677],[-154.516403,56.992749],[-154.670993,57.461196],[-153.76278,57.816575],[-153.228729,57.968968],[-152.564791,57.901427],[-152.141147,57.591059],[-153.006314,57.115842]]],[[[-165.579164,59.909987],[-166.19277,59.754441],[-166.848337,59.941406],[-167.455277,60.213069],[-166.467792,60.38417],[-165.67443,60.293607],[-165.579164,59.909987]]],[[[-171.731657,63.782515],[-171.114434,63.592191],[-170.491112,63.694975],[-169.682505,63.431116],[-168.689439,63.297506],[-168.771941,63.188598],[-169.52944,62.976931],[-170.290556,63.194438],[-170.671386,63.375822],[-171.553063,63.317789],[-171.791111,63.405846],[-171.731657,63.782515]]],[[[-155.06779,71.147776],[-154.344165,70.696409],[-153.900006,70.889989],[-152.210006,70.829992],[-152.270002,70.600006],[-150.739992,70.430017],[-149.720003,70.53001],[-147.613362,70.214035],[-145.68999,70.12001],[-144.920011,69.989992],[-143.589446,70.152514],[-142.07251,69.851938],[-140.985988,69.711998],[-140.992499,66.000029],[-140.99777,60.306397],[-140.012998,60.276838],[-139.039,60.000007],[-138.34089,59.56211],[-137.4525,58.905],[-136.47972,59.46389],[-135.47583,59.78778],[-134.945,59.27056],[-134.27111,58.86111],[-133.355549,58.410285],[-132.73042,57.69289],[-131.70781,56.55212],[-130.00778,55.91583],[-129.979994,55.284998],[-130.53611,54.802753],[-131.085818,55.178906],[-131.967211,55.497776],[-132.250011,56.369996],[-133.539181,57.178887],[-134.078063,58.123068],[-135.038211,58.187715],[-136.628062,58.212209],[-137.800006,58.499995],[-139.867787,59.537762],[-140.825274,59.727517],[-142.574444,60.084447],[-143.958881,59.99918],[-145.925557,60.45861],[-147.114374,60.884656],[-148.224306,60.672989],[-148.018066,59.978329],[-148.570823,59.914173],[-149.727858,59.705658],[-150.608243,59.368211],[-151.716393,59.155821],[-151.859433,59.744984],[-151.409719,60.725803],[-150.346941,61.033588],[-150.621111,61.284425],[-151.895839,60.727198],[-152.57833,60.061657],[-154.019172,59.350279],[-153.287511,58.864728],[-154.232492,58.146374],[-155.307491,57.727795],[-156.308335,57.422774],[-156.556097,56.979985],[-158.117217,56.463608],[-158.433321,55.994154],[-159.603327,55.566686],[-160.28972,55.643581],[-161.223048,55.364735],[-162.237766,55.024187],[-163.069447,54.689737],[-164.785569,54.404173],[-164.942226,54.572225],[-163.84834,55.039431],[-162.870001,55.348043],[-161.804175,55.894986],[-160.563605,56.008055],[-160.07056,56.418055],[-158.684443,57.016675],[-158.461097,57.216921],[-157.72277,57.570001],[-157.550274,58.328326],[-157.041675,58.918885],[-158.194731,58.615802],[-158.517218,58.787781],[-159.058606,58.424186],[-159.711667,58.93139],[-159.981289,58.572549],[-160.355271,59.071123],[-161.355003,58.670838],[-161.968894,58.671665],[-162.054987,59.266925],[-161.874171,59.633621],[-162.518059,59.989724],[-163.818341,59.798056],[-164.662218,60.267484],[-165.346388,60.507496],[-165.350832,61.073895],[-166.121379,61.500019],[-165.734452,62.074997],[-164.919179,62.633076],[-164.562508,63.146378],[-163.753332,63.219449],[-163.067224,63.059459],[-162.260555,63.541936],[-161.53445,63.455817],[-160.772507,63.766108],[-160.958335,64.222799],[-161.518068,64.402788],[-160.777778,64.788604],[-161.391926,64.777235],[-162.45305,64.559445],[-162.757786,64.338605],[-163.546394,64.55916],[-164.96083,64.446945],[-166.425288,64.686672],[-166.845004,65.088896],[-168.11056,65.669997],[-166.705271,66.088318],[-164.47471,66.57666],[-163.652512,66.57666],[-163.788602,66.077207],[-161.677774,66.11612],[-162.489715,66.735565],[-163.719717,67.116395],[-164.430991,67.616338],[-165.390287,68.042772],[-166.764441,68.358877],[-166.204707,68.883031],[-164.430811,68.915535],[-163.168614,69.371115],[-162.930566,69.858062],[-161.908897,70.33333],[-160.934797,70.44769],[-159.039176,70.891642],[-158.119723,70.824721],[-156.580825,71.357764],[-155.06779,71.147776]]]]}} +]} +""".strip() +) + +class TestTileManagerCacheGeojsonCoverage(TileCacheTestBase): + def setup(self): + TileCacheTestBase.setup(self) + + with TempFile() as tf: + with open(tf, 'wb') as f: + f.write(boundary_geojson) + conf = {'datasource': tf, 'srs': 'EPSG:4326'} + self.cache = RecordFileCache(self.cache_dir, 'png', coverage=load_coverage(conf)) + + def test_load_tiles_in_coverage(self, tile_locker): + grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90], origin='ul') + image_opts = ImageOptions(format='image/png') + tm = TileManager( + grid, self.cache, [], 'png', + locker=tile_locker, + image_opts=image_opts, + ) + + coords = [(3, 2, 4), (11, 9, 6), (17, 11, 7), (359, 325, 11), (2996, 2513, 14), (22923, 20919, 17)] + collection = tm.load_tile_coords(coords) + + # Check that tiles inside of coverage loaded + assert all(coord in collection for coord in coords) + assert all(t.coord is not None for t in collection) + + all(t.coord in self.cache.stored_tiles for t in collection) + assert self.cache.loaded_tiles == counting_set(coords) + + def test_empty_tiles_outside_coverage(self, tile_locker): + grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90], origin='ul') + image_opts = ImageOptions(format='image/png') + tm = TileManager( + grid, self.cache, [], 'png', + locker=tile_locker, + image_opts=image_opts, + ) + + coords = [(3, 3, 4), (5, 3, 4), (8, 11, 6), (19, 11, 7), (38, 25, 8), (359, 328, 11), (22922, 20922, 17)] + collection = tm.load_tile_coords(coords) + + # Check that tiles did not load + assert collection.blank + assert all(t.coord is None for t in collection) + + assert self.cache.stored_tiles == set([]) + assert self.cache.loaded_tiles == counting_set([None for _ in coords]) From df7f5e23dd03735078b51b14d8c6fb08212cc163 Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Mon, 28 Aug 2023 02:00:23 +0300 Subject: [PATCH 157/209] Fix tile layer extent to be in layer SRS --- mapproxy/service/tile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapproxy/service/tile.py b/mapproxy/service/tile.py index 6aaccec8d..e7f7ec7fb 100644 --- a/mapproxy/service/tile.py +++ b/mapproxy/service/tile.py @@ -214,7 +214,7 @@ def __init__(self, name, title, md, tile_manager, info_sources=[], dimensions=No self.info_sources = info_sources self.dimensions = dimensions self.grid = TileServiceGrid(tile_manager.grid) - self.extent = self.md.get('extent') + self.extent = self.md.get('extent').transform(tile_manager.grid.srs) self._empty_tile = None self._mixed_format = True if self.md.get('format', False) == 'mixed' else False self.empty_response_as_png = True From b6a1d7c8bb0e8cfd14628fae0d846104f41df4b1 Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Mon, 28 Aug 2023 02:19:26 +0300 Subject: [PATCH 158/209] Fix geopackage BBOX to be in it's defined SRS and not coverage SRS --- mapproxy/cache/geopackage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapproxy/cache/geopackage.py b/mapproxy/cache/geopackage.py index 72bfa1828..4efec46a4 100644 --- a/mapproxy/cache/geopackage.py +++ b/mapproxy/cache/geopackage.py @@ -42,7 +42,7 @@ def __init__(self, geopackage_file, tile_grid, table_name, with_timestamps=False self.geopackage_file = geopackage_file if coverage: - self.bbox = coverage.bbox + self.bbox = coverage.transform_to(self.tile_grid.srs).bbox else: self.bbox = self.tile_grid.bbox # XXX timestamps not implemented From 09bb58739b9f4567c964bf915d8e794504b50f50 Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Tue, 29 Aug 2023 01:17:52 +0300 Subject: [PATCH 159/209] Add note about using coverages for source and cache together --- doc/coverages.rst | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/doc/coverages.rst b/doc/coverages.rst index 543c70cbc..d85808dca 100644 --- a/doc/coverages.rst +++ b/doc/coverages.rst @@ -202,6 +202,35 @@ Use the ``coverage`` option to define a coverage for any cache. bbox: [5, 50, 10, 55] srs: 'EPSG:4326' +.. note:: + + You may define a ``coverage`` for both a ``source`` and the ``cache`` defined on that source, in this case the ``intersection`` of both ``coverages`` will be used. + The ``coverage`` of a ``cache`` is meant to be contained in the ``coverage`` of it's ``source``, in other cases where it either intersects or has no intersection, there may be unexpected bahaviour. + + :: + + Example for defining coverages for source and corresponding cache:: + caches: + mycache: + grids: [GLOBAL_GEODETIC] + sources: [mywms] + cache: + type: geopackage + filename: file.gpkg + table_name: mygeopackage + coverage: + bbox: [-10, -10, 10, 10] + srs: 'EPSG:4326' + + sources: + mywms: + type: wms + req: + url: http://example.com/service? + layers: base + coverage: + bbox: [-50, -50, 50, 50] + srs: 'EPSG:4326' mapproxy-seed """"""""""""" From 76a69ae641f9d7f3cb4290aaf0a52948b8e1f990 Mon Sep 17 00:00:00 2001 From: shimoncohen Date: Tue, 29 Aug 2023 22:53:22 +0300 Subject: [PATCH 160/209] Prefer cache coverage extent over source extent --- mapproxy/config/loader.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mapproxy/config/loader.py b/mapproxy/config/loader.py index 2bc98aea8..8d0b37146 100644 --- a/mapproxy/config/loader.py +++ b/mapproxy/config/loader.py @@ -1664,8 +1664,11 @@ def caches(self): if self.conf['name'] in self.context.caches: mgr._refresh_before = self.context.caches[self.conf['name']].conf.get('refresh_before', {}) extent = merge_layer_extents(sources) - if extent.is_default: - extent = cache.coverage.extent if cache.coverage else map_extent_from_grid(tile_grid) + # If the cache has a defined coverage prefer it's extent over source extent + if cache.coverage: + extent = cache.coverage.extent + elif extent.is_default: + extent = map_extent_from_grid(tile_grid) caches.append((tile_grid, extent, mgr)) return caches From 16e55af3f3f22fae33f95eafe648fd0d23d09272 Mon Sep 17 00:00:00 2001 From: Grant Date: Sat, 2 Sep 2023 17:32:11 +0100 Subject: [PATCH 161/209] Update configuration_examples.rst use correct tile.osm.org URL See: https://github.com/openstreetmap/operations/issues/737 --- doc/configuration_examples.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/configuration_examples.rst b/doc/configuration_examples.rst index 459a47749..312a4f5ad 100644 --- a/doc/configuration_examples.rst +++ b/doc/configuration_examples.rst @@ -131,7 +131,7 @@ Example configuration for an OpenStreetMap tile service:: my_tile_source: type: tile grid: GLOBAL_WEBMERCATOR - url: http://a.tile.openstreetmap.org/%(z)s/%(x)s/%(y)s.png + url: https://tile.openstreetmap.org/%(z)s/%(x)s/%(y)s.png grids: webmercator: @@ -277,7 +277,7 @@ Here is an example that makes OSM tiles available as tiles in UTM. Note that rep osm_source: type: tile grid: GLOBAL_WEBMERCATOR - url: http://a.tile.openstreetmap.org/%(z)s/%(x)s/%(y)s.png + url: https://tile.openstreetmap.org/%(z)s/%(x)s/%(y)s.png grids: utm32n: From fcf729483bdbbcc53812a2907f251d47cce2d47f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 20:34:52 +0000 Subject: [PATCH 162/209] Bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/dockerbuild.yml | 2 +- .github/workflows/ghpages.yml | 2 +- .github/workflows/test.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/dockerbuild.yml b/.github/workflows/dockerbuild.yml index fbe9af3be..ffab96a73 100644 --- a/.github/workflows/dockerbuild.yml +++ b/.github/workflows/dockerbuild.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Docker meta id: meta diff --git a/.github/workflows/ghpages.yml b/.github/workflows/ghpages.yml index 80ff17bea..a7fb02aa7 100644 --- a/.github/workflows/ghpages.yml +++ b/.github/workflows/ghpages.yml @@ -12,7 +12,7 @@ jobs: steps: - name: Checkout sources - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install dependencies ⏬ run: pip install sphinx sphinx-bootstrap-theme diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 994f3e5c5..bd7bc60b3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -52,7 +52,7 @@ jobs: sudo apt install proj-bin libgeos-dev libgdal-dev libxslt1-dev libxml2-dev build-essential python-dev libjpeg-dev zlib1g-dev libfreetype6-dev protobuf-compiler libprotoc-dev -y - name: Checkout sources - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Use python ${{ matrix.python-version }} uses: actions/setup-python@v4 From 5f822e16567fdeb9ff8a72b4a17bf2ce8e7b44e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Sep 2023 20:31:12 +0000 Subject: [PATCH 163/209] Bump docker/setup-qemu-action from 2 to 3 Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 2 to 3. - [Release notes](https://github.com/docker/setup-qemu-action/releases) - [Commits](https://github.com/docker/setup-qemu-action/compare/v2...v3) --- updated-dependencies: - dependency-name: docker/setup-qemu-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/dockerbuild.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dockerbuild.yml b/.github/workflows/dockerbuild.yml index fbe9af3be..4b0d0b7c7 100644 --- a/.github/workflows/dockerbuild.yml +++ b/.github/workflows/dockerbuild.yml @@ -30,7 +30,7 @@ jobs: type=semver,pattern={{version}} - name: Set up QEMU - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 From 7058f8c3e3e955868675d931b598da7316d4fd4f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Sep 2023 20:31:17 +0000 Subject: [PATCH 164/209] Bump docker/build-push-action from 4 to 5 Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 4 to 5. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v4...v5) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/dockerbuild.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/dockerbuild.yml b/.github/workflows/dockerbuild.yml index fbe9af3be..269917b2d 100644 --- a/.github/workflows/dockerbuild.yml +++ b/.github/workflows/dockerbuild.yml @@ -43,7 +43,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push base image - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 if: ${{ inputs.tags }} with: context: docker/ @@ -57,7 +57,7 @@ jobs: platforms: linux/amd64,linux/arm64 - name: Build and push base image - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 if: ${{ !inputs.tags }} with: context: docker/ @@ -71,7 +71,7 @@ jobs: platforms: linux/amd64,linux/arm64 - name: Build and push development image - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 if: ${{ inputs.tags }} with: context: docker/ @@ -85,7 +85,7 @@ jobs: platforms: linux/amd64,linux/arm64 - name: Build and push development image - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 if: ${{ !inputs.tags }} with: context: docker/ @@ -99,7 +99,7 @@ jobs: platforms: linux/amd64,linux/arm64 - name: Build and push nginx image - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 if: ${{ inputs.tags }} with: context: docker/ @@ -113,7 +113,7 @@ jobs: platforms: linux/amd64,linux/arm64 - name: Build and push nginx image - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 if: ${{ !inputs.tags }} with: context: docker/ From 3bc0b91eda540275a865cceb0155a14020bc44c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Sep 2023 20:31:20 +0000 Subject: [PATCH 165/209] Bump docker/metadata-action from 4 to 5 Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 4 to 5. - [Release notes](https://github.com/docker/metadata-action/releases) - [Upgrade guide](https://github.com/docker/metadata-action/blob/master/UPGRADE.md) - [Commits](https://github.com/docker/metadata-action/compare/v4...v5) --- updated-dependencies: - dependency-name: docker/metadata-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/dockerbuild.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dockerbuild.yml b/.github/workflows/dockerbuild.yml index fbe9af3be..306e2655b 100644 --- a/.github/workflows/dockerbuild.yml +++ b/.github/workflows/dockerbuild.yml @@ -22,7 +22,7 @@ jobs: - name: Docker meta id: meta - uses: docker/metadata-action@v4 + uses: docker/metadata-action@v5 with: images: | ghcr.io/${{ github.repository }}/mapproxy From 061d3b3d8af74f092ea0f44a2a1cabbebb9b9d78 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Sep 2023 20:31:24 +0000 Subject: [PATCH 166/209] Bump docker/setup-buildx-action from 2 to 3 Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2 to 3. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/v2...v3) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/dockerbuild.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dockerbuild.yml b/.github/workflows/dockerbuild.yml index fbe9af3be..a9590f55f 100644 --- a/.github/workflows/dockerbuild.yml +++ b/.github/workflows/dockerbuild.yml @@ -33,7 +33,7 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Login to ghcr.io uses: docker/login-action@v2 From e74c8aa15691aaed83393f067d276980487b45e4 Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Tue, 19 Sep 2023 15:53:09 +0200 Subject: [PATCH 167/209] fix openstreetmap URL in template --- mapproxy/config_template/base_config/full_example.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapproxy/config_template/base_config/full_example.yaml b/mapproxy/config_template/base_config/full_example.yaml index d5992c3f0..f69edd0a1 100644 --- a/mapproxy/config_template/base_config/full_example.yaml +++ b/mapproxy/config_template/base_config/full_example.yaml @@ -384,7 +384,7 @@ sources: osm_source: type: tile grid: osm_grid - url: http://a.tile.openstreetmap.org/%(z)s/%(x)s/%(y)s.png + url: https://tile.openstreetmap.org/%(z)s/%(x)s/%(y)s.png # limit the source to the given min and max resolution or scale. # MapProxy will return a blank image for requests outside of these boundaries From 36d98424530cf0619582d7c4b6e8f2d6f861ec75 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Sep 2023 20:20:25 +0000 Subject: [PATCH 168/209] Bump cryptography from 41.0.3 to 41.0.4 Bumps [cryptography](https://github.com/pyca/cryptography) from 41.0.3 to 41.0.4. - [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pyca/cryptography/compare/41.0.3...41.0.4) --- updated-dependencies: - dependency-name: cryptography dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index a4cca60b8..c6909d783 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -18,7 +18,7 @@ certifi==2023.7.22 cffi==1.15.1; cfn-lint==0.35.0 chardet==5.2.0 -cryptography==41.0.3 +cryptography==41.0.4 decorator==4.4.2 docker==6.1.3 docutils==0.19 From 5f237ed7acf47eab62e45c71729ed1d18c881e4d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Sep 2023 20:20:26 +0000 Subject: [PATCH 169/209] Bump docutils from 0.19 to 0.20.1 Bumps [docutils](https://docutils.sourceforge.io/) from 0.19 to 0.20.1. --- updated-dependencies: - dependency-name: docutils dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index a4cca60b8..ad985e595 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -21,7 +21,7 @@ chardet==5.2.0 cryptography==41.0.3 decorator==4.4.2 docker==6.1.3 -docutils==0.19 +docutils==0.20.1 ecdsa==0.18.0 future==0.18.3 idna==2.8 From 63ed18344aa5d09899a872fe3802b7dcf73aca3b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Sep 2023 20:20:29 +0000 Subject: [PATCH 170/209] Bump six from 1.15.0 to 1.16.0 Bumps [six](https://github.com/benjaminp/six) from 1.15.0 to 1.16.0. - [Changelog](https://github.com/benjaminp/six/blob/master/CHANGES) - [Commits](https://github.com/benjaminp/six/compare/1.15.0...1.16.0) --- updated-dependencies: - dependency-name: six dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index a4cca60b8..5f0092636 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -61,7 +61,7 @@ responses==0.23.3 riak==2.7.0 rsa==4.9 s3transfer==0.6.1 -six==1.15.0 +six==1.16.0 soupsieve==2.0.1 sshpubkeys==3.3.1 toml==0.10.2 From 94ddbb5e7e2a8339cd04240df9d595c6540a63f9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Sep 2023 20:20:35 +0000 Subject: [PATCH 171/209] Bump aws-sam-translator from 1.26.0 to 1.74.0 Bumps [aws-sam-translator](https://github.com/awslabs/serverless-application-model) from 1.26.0 to 1.74.0. - [Release notes](https://github.com/awslabs/serverless-application-model/releases) - [Commits](https://github.com/awslabs/serverless-application-model/compare/v1.26.0...v1.74.0) --- updated-dependencies: - dependency-name: aws-sam-translator dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index a4cca60b8..4307c3d96 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -8,7 +8,7 @@ WebOb==1.8.6 WebTest==3.0.0 attrs==19.3.0;python_version<"3.10" attrs==21.4.0;python_version>="3.10" -aws-sam-translator==1.26.0 +aws-sam-translator==1.74.0 aws-xray-sdk==2.6.0 beautifulsoup4==4.12.2 boto3==1.26.112 From c2e7db727daa56237752f5b516e528f33184467c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Sep 2023 20:20:39 +0000 Subject: [PATCH 172/209] Bump urllib3 from 1.26.15 to 1.26.16 Bumps [urllib3](https://github.com/urllib3/urllib3) from 1.26.15 to 1.26.16. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/1.26.15...1.26.16) --- updated-dependencies: - dependency-name: urllib3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index a4cca60b8..f519a057d 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -65,7 +65,7 @@ six==1.15.0 soupsieve==2.0.1 sshpubkeys==3.3.1 toml==0.10.2 -urllib3==1.26.15 +urllib3==1.26.16 waitress==2.1.2 websocket-client==1.6.1 werkzeug==1.0.1 From 319cdb819e7a196d250b689603a2ceef5147d576 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Sep 2023 20:24:31 +0000 Subject: [PATCH 173/209] Bump aws-sam-translator from 1.74.0 to 1.75.0 Bumps [aws-sam-translator](https://github.com/awslabs/serverless-application-model) from 1.74.0 to 1.75.0. - [Release notes](https://github.com/awslabs/serverless-application-model/releases) - [Commits](https://github.com/awslabs/serverless-application-model/compare/v1.74.0...v1.75.0) --- updated-dependencies: - dependency-name: aws-sam-translator dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index ba35b1213..0fa1af243 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -8,7 +8,7 @@ WebOb==1.8.6 WebTest==3.0.0 attrs==19.3.0;python_version<"3.10" attrs==21.4.0;python_version>="3.10" -aws-sam-translator==1.74.0 +aws-sam-translator==1.75.0 aws-xray-sdk==2.6.0 beautifulsoup4==4.12.2 boto3==1.26.112 From 9985596da80b80c40e7e05f643dda48dcd2431f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Sep 2023 20:25:00 +0000 Subject: [PATCH 174/209] Bump pytest from 3.6.0 to 7.4.2 Bumps [pytest](https://github.com/pytest-dev/pytest) from 3.6.0 to 7.4.2. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/3.6.0...7.4.2) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-appveyor.txt | 2 +- requirements-tests.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements-appveyor.txt b/requirements-appveyor.txt index 8e85b166b..c218d7cfb 100644 --- a/requirements-appveyor.txt +++ b/requirements-appveyor.txt @@ -1,4 +1,4 @@ WebTest==3.0.0 -pytest==3.6.0 +pytest==7.4.2 WebOb==1.7.1 requests==2.28.2 diff --git a/requirements-tests.txt b/requirements-tests.txt index ba35b1213..187862a9c 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -50,7 +50,7 @@ pyproj==2.6.1.post1;python_version in "3.7 3.8" pyproj==3.3.1;python_version in "3.9 3.10" pyproj==3.5.0;python_version>"3.10" pyrsistent==0.19.3 -pytest==7.3.0 +pytest==7.4.2 pytest-rerunfailures==12.0 python-dateutil==2.8.1 python-jose==3.3.0 From b3c78343170a76f24be5162e5b11f0e33fbb0346 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Sep 2023 06:24:53 +0000 Subject: [PATCH 175/209] Bump python-dateutil from 2.8.1 to 2.8.2 Bumps [python-dateutil](https://github.com/dateutil/dateutil) from 2.8.1 to 2.8.2. - [Release notes](https://github.com/dateutil/dateutil/releases) - [Changelog](https://github.com/dateutil/dateutil/blob/master/NEWS) - [Commits](https://github.com/dateutil/dateutil/compare/2.8.1...2.8.2) --- updated-dependencies: - dependency-name: python-dateutil dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 187862a9c..d78e355d4 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -52,7 +52,7 @@ pyproj==3.5.0;python_version>"3.10" pyrsistent==0.19.3 pytest==7.4.2 pytest-rerunfailures==12.0 -python-dateutil==2.8.1 +python-dateutil==2.8.2 python-jose==3.3.0 pytz==2020.1 redis==4.5.4 From a3397fc37197929ef8ccaaaae9abee57ef8d035b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Sep 2023 07:10:04 +0000 Subject: [PATCH 176/209] Bump webob from 1.7.1 to 1.8.7 Bumps [webob](https://github.com/Pylons/webob) from 1.7.1 to 1.8.7. - [Changelog](https://github.com/Pylons/webob/blob/1.8.7/CHANGES.txt) - [Commits](https://github.com/Pylons/webob/compare/1.7.1...1.8.7) --- updated-dependencies: - dependency-name: webob dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-appveyor.txt | 2 +- requirements-tests.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements-appveyor.txt b/requirements-appveyor.txt index c218d7cfb..2ce46299d 100644 --- a/requirements-appveyor.txt +++ b/requirements-appveyor.txt @@ -1,4 +1,4 @@ WebTest==3.0.0 pytest==7.4.2 -WebOb==1.7.1 +WebOb==1.8.7 requests==2.28.2 diff --git a/requirements-tests.txt b/requirements-tests.txt index 4d355568e..3a4dca22e 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -4,7 +4,7 @@ MarkupSafe==1.1.1 Pillow==9.5.0 PyYAML==6.0.1 Shapely==1.7.0 -WebOb==1.8.6 +WebOb==1.8.7 WebTest==3.0.0 attrs==19.3.0;python_version<"3.10" attrs==21.4.0;python_version>="3.10" From 9f6fe1f062393379756a3aa370bfdc14652c7926 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Sep 2023 20:15:38 +0000 Subject: [PATCH 177/209] Bump attrs from 21.4.0 to 23.1.0 Bumps [attrs](https://github.com/python-attrs/attrs) from 21.4.0 to 23.1.0. - [Release notes](https://github.com/python-attrs/attrs/releases) - [Changelog](https://github.com/python-attrs/attrs/blob/main/CHANGELOG.md) - [Commits](https://github.com/python-attrs/attrs/compare/21.4.0...23.1.0) --- updated-dependencies: - dependency-name: attrs dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 4d355568e..4cfe7c056 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -7,7 +7,7 @@ Shapely==1.7.0 WebOb==1.8.6 WebTest==3.0.0 attrs==19.3.0;python_version<"3.10" -attrs==21.4.0;python_version>="3.10" +attrs==23.1.0;python_version>="3.10" aws-sam-translator==1.75.0 aws-xray-sdk==2.6.0 beautifulsoup4==4.12.2 From 988e20d3e2076a74d1799e7bbb5401e6e1de2e89 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Sep 2023 20:15:42 +0000 Subject: [PATCH 178/209] Bump jsonpickle from 1.4.1 to 3.0.2 Bumps [jsonpickle](https://github.com/jsonpickle/jsonpickle) from 1.4.1 to 3.0.2. - [Changelog](https://github.com/jsonpickle/jsonpickle/blob/main/CHANGES.rst) - [Commits](https://github.com/jsonpickle/jsonpickle/compare/v1.4.1...v3.0.2) --- updated-dependencies: - dependency-name: jsonpickle dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 4d355568e..b5cc44fd6 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -30,7 +30,7 @@ iniconfig==2.0.0 jmespath==0.10.0 jsondiff==1.1.2 jsonpatch==1.33 -jsonpickle==1.4.1 +jsonpickle==3.0.2 jsonpointer==2.4 jsonschema==3.2.0 junit-xml==1.9 From ed8a46e0edea546c98405793eb62f044c2321ff3 Mon Sep 17 00:00:00 2001 From: Ben Greiner Date: Sat, 23 Sep 2023 13:37:43 +0200 Subject: [PATCH 179/209] Bump to testing Shapely 2.0.1 --- doc/install.rst | 2 +- mapproxy/test/unit/test_geom.py | 6 +----- mapproxy/util/geom.py | 8 ++------ requirements-tests.txt | 2 +- 4 files changed, 5 insertions(+), 13 deletions(-) diff --git a/doc/install.rst b/doc/install.rst index a821d622e..68cd4a156 100644 --- a/doc/install.rst +++ b/doc/install.rst @@ -90,7 +90,7 @@ MapProxy uses YAML for the configuration parsing. It is available as ``python-ya Shapely and GEOS *(optional)* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -You will need Shapely to use the :doc:`coverage feature ` of MapProxy. Shapely offers Python bindings for the GEOS library. You need Shapely (``python-shapely``) and GEOS (``libgeos-dev``). You can install Shapely as a Python package with ``pip install Shapely`` if you system does not provide a recent (>= 1.2.0) version of Shapely. +You will need Shapely to use the :doc:`coverage feature ` of MapProxy. Shapely offers Python bindings for the GEOS library. You need Shapely (``python-shapely``) and GEOS (``libgeos-dev``). You can install Shapely as a Python package with ``pip install Shapely`` if you system does not provide a recent (>= 1.8) version of Shapely. GDAL *(optional)* ~~~~~~~~~~~~~~~~~ diff --git a/mapproxy/test/unit/test_geom.py b/mapproxy/test/unit/test_geom.py index ff6449fd9..05422024a 100644 --- a/mapproxy/test/unit/test_geom.py +++ b/mapproxy/test/unit/test_geom.py @@ -22,11 +22,7 @@ import pytest import shapely import shapely.prepared -try: - # shapely >=1.6 - from shapely.errors import ReadingError -except ImportError: - from shapely.geos import ReadingError +from shapely.errors import ReadingError from mapproxy.srs import SRS, bbox_equals from mapproxy.util.geom import ( diff --git a/mapproxy/util/geom.py b/mapproxy/util/geom.py index 4573a3557..ccfc9d00d 100644 --- a/mapproxy/util/geom.py +++ b/mapproxy/util/geom.py @@ -32,11 +32,7 @@ import shapely.geometry import shapely.ops import shapely.prepared - try: - # shapely >=1.6 - from shapely.errors import ReadingError - except ImportError: - from shapely.geos import ReadingError + from shapely.errors import ReadingError geom_support = True except ImportError: geom_support = False @@ -234,7 +230,7 @@ def transform_polygon(transf, polygon): def transform_multipolygon(transf, multipolygon): transformed_polygons = [] - for polygon in multipolygon: + for polygon in multipolygon.geoms: transformed_polygons.append(transform_polygon(transf, polygon)) return shapely.geometry.MultiPolygon(transformed_polygons) diff --git a/requirements-tests.txt b/requirements-tests.txt index 4d355568e..ff7c0f120 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -3,7 +3,7 @@ Jinja2==2.11.3 MarkupSafe==1.1.1 Pillow==9.5.0 PyYAML==6.0.1 -Shapely==1.7.0 +Shapely==2.0.1 WebOb==1.8.6 WebTest==3.0.0 attrs==19.3.0;python_version<"3.10" From 1802e35ddb99e82f969652a23526dc583d089cd2 Mon Sep 17 00:00:00 2001 From: Ben Greiner Date: Sat, 23 Sep 2023 13:58:59 +0200 Subject: [PATCH 180/209] Bump networkx, moto, numpy testing --- requirements-tests.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index ff7c0f120..bc7ddd3a6 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -37,9 +37,11 @@ junit-xml==1.9 lxml==4.9.3 mock==4.0.2 more-itertools==8.4.0 -moto==1.3.14;python_version<"3.10" -moto==4.1.14;python_version>="3.10" -networkx==2.4 +moto==4.2.4 +networkx==3.1 +numpy==1.26.0;python_version>="3.9" +numpy==1.24.0;python_version=="3.8" +numpy==1.21.0;python_version<"3.8" packaging==20.4 pluggy==0.13.1 py==1.11.0 From 8c62869616a6fcd048a831bab7e0d2abb352b0a7 Mon Sep 17 00:00:00 2001 From: Ben Greiner Date: Sat, 23 Sep 2023 14:17:26 +0200 Subject: [PATCH 181/209] bump cfn-lint --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index bc7ddd3a6..459552441 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -16,7 +16,7 @@ boto==2.49.0 botocore==1.29.116 certifi==2023.7.22 cffi==1.15.1; -cfn-lint==0.35.0 +cfn-lint==0.80.3 chardet==5.2.0 cryptography==41.0.4 decorator==4.4.2 From b0d34a797dae93b12e11eeaffcf7fae0d7dec4fa Mon Sep 17 00:00:00 2001 From: Ben Greiner Date: Sat, 23 Sep 2023 14:23:07 +0200 Subject: [PATCH 182/209] networkx for older pythons --- requirements-tests.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 459552441..3cb731074 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -38,7 +38,9 @@ lxml==4.9.3 mock==4.0.2 more-itertools==8.4.0 moto==4.2.4 -networkx==3.1 +networkx==3.1;python_version>="3.9" +networkx==2.8.7;python_version=="3.8" +networkx==2.6;python_version<"3.8" numpy==1.26.0;python_version>="3.9" numpy==1.24.0;python_version=="3.8" numpy==1.21.0;python_version<"3.8" From 44761abd1c3d46471f18138f7037b83d4b8419ab Mon Sep 17 00:00:00 2001 From: Ben Greiner Date: Sat, 23 Sep 2023 14:55:19 +0200 Subject: [PATCH 183/209] Bump Pillow to 10.0.1 for py38+ --- requirements-tests.txt | 3 ++- setup.py | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 4d355568e..2fd8c1e9b 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -1,7 +1,8 @@ azure-storage-blob>=12.9.0 Jinja2==2.11.3 MarkupSafe==1.1.1 -Pillow==9.5.0 +Pillow==9.5.0;python_version<"3.8" +Pillow==10.0.1;python_version>="3.8" PyYAML==6.0.1 Shapely==1.7.0 WebOb==1.8.6 diff --git a/setup.py b/setup.py index 102c797dd..7688e3697 100644 --- a/setup.py +++ b/setup.py @@ -21,11 +21,11 @@ def package_installed(pkg): # depend on PIL if it is installed, otherwise # require Pillow if package_installed('Pillow'): - install_requires.append('Pillow !=2.4.0,!=8.3.0,!=8.3.1,<10.0.0') + install_requires.append('Pillow !=2.4.0,!=8.3.0,!=8.3.1') elif package_installed('PIL'): install_requires.append('PIL>=1.1.6,<1.2.99') else: - install_requires.append('Pillow !=2.4.0,!=8.3.0,!=8.3.1,<10.0.0') + install_requires.append('Pillow !=2.4.0,!=8.3.0,!=8.3.1') if platform.python_version_tuple() < ('2', '6'): # for mapproxy-seed From bd712c333c0c9842e15860eb5e184b5345622748 Mon Sep 17 00:00:00 2001 From: Ben Greiner Date: Sat, 23 Sep 2023 15:11:42 +0200 Subject: [PATCH 184/209] replace ImageDraw.textsize with ImageDraw.textbbox --- mapproxy/image/message.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mapproxy/image/message.py b/mapproxy/image/message.py index 4353e5909..ccd0d9a72 100644 --- a/mapproxy/image/message.py +++ b/mapproxy/image/message.py @@ -281,8 +281,7 @@ def _relative_text_boxes(self, draw): boxes = [] y_offset = 0 for i, line in enumerate(self.text): - text_size = draw.textsize(line, font=self.font) - text_box = (0, y_offset, text_size[0], text_size[1]+y_offset) + text_box = draw.textbbox((0, y_offset), line, font=self.font) boxes.append(text_box) total_bbox = (min(total_bbox[0], text_box[0]), min(total_bbox[1], text_box[1]), @@ -290,7 +289,7 @@ def _relative_text_boxes(self, draw): max(total_bbox[3], text_box[3]), ) - y_offset += text_size[1] + self.linespacing + y_offset = text_box[3] + self.linespacing return total_bbox, boxes def _move_bboxes(self, boxes, offsets): From e4d2f10610e1701704ef191e422d4883aa03db22 Mon Sep 17 00:00:00 2001 From: Ben Greiner Date: Sat, 23 Sep 2023 15:19:13 +0200 Subject: [PATCH 185/209] don't compare versions as strings --- mapproxy/compat/image.py | 1 + mapproxy/test/unit/test_image.py | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/mapproxy/compat/image.py b/mapproxy/compat/image.py index e88bbc419..3732b8907 100644 --- a/mapproxy/compat/image.py +++ b/mapproxy/compat/image.py @@ -26,6 +26,7 @@ Image, ImageColor, ImageDraw, ImageFont, ImagePalette, ImageChops, ImageMath ImageFileDirectory_v2, TiffTags PIL_VERSION = getattr(PIL, '__version__') or getattr(PIL, 'PILLOW_VERSION') + PIL_VERSION_TUPLE = tuple(int(i) for i in PIL_VERSION.split(".")) except ImportError: # allow MapProxy to start without PIL (for tilecache only). # issue warning and raise ImportError on first use of diff --git a/mapproxy/test/unit/test_image.py b/mapproxy/test/unit/test_image.py index f2ea15ec1..d4b62468d 100644 --- a/mapproxy/test/unit/test_image.py +++ b/mapproxy/test/unit/test_image.py @@ -21,7 +21,7 @@ import pytest -from mapproxy.compat.image import Image, ImageDraw, PIL_VERSION +from mapproxy.compat.image import Image, ImageDraw, PIL_VERSION_TUPLE from mapproxy.image import ( BlankImageSource, GeoReference, @@ -112,7 +112,7 @@ def test_converted_output(self): assert is_tiff(ir.as_buffer(TIFF_FORMAT)) assert is_tiff(ir.as_buffer()) - @pytest.mark.skipif(PIL_VERSION < '6.1.0', reason="Pillow 6.1.0 required GeoTIFF") + @pytest.mark.skipif(PIL_VERSION_TUPLE < (6, 1, 0), reason="Pillow 6.1.0 required GeoTIFF") def test_tiff_compression(self): def encoded_size(encoding_options): ir = ImageSource(create_debug_img((100, 100)), PNG_FORMAT) @@ -134,7 +134,7 @@ def encoded_size(encoding_options): assert q50 > lzw @pytest.mark.xfail( - PIL_VERSION >= '9.0.0', + PIL_VERSION_TUPLE >= (9, 0, 0), reason="The palette colors order has been changed in Pillow 9.0.0" ) def test_output_formats_greyscale_png(self): @@ -156,7 +156,7 @@ def test_output_formats_greyscale_alpha_png(self): assert img.getpixel((0, 0)) == (0, 0) @pytest.mark.xfail( - PIL_VERSION >= '9.0.0', + PIL_VERSION_TUPLE >= (9, 0, 0), reason="The palette colors order has been changed in Pillow 9.0.0" ) def test_output_formats_png8(self): @@ -593,7 +593,7 @@ def assert_geotiff_tags(img, expected_origin, expected_pixel_res, srs, projected assert tags[TIFF_GEOKEYDIRECTORYTAG][3*4+3] == srs -@pytest.mark.skipif(PIL_VERSION < '6.1.0', reason="Pillow 6.1.0 required GeoTIFF") +@pytest.mark.skipif(PIL_VERSION_TUPLE < (6, 1, 0), reason="Pillow 6.1.0 required GeoTIFF") @pytest.mark.parametrize("compression", ['jpeg', 'raw', 'tiff_lzw']) class TestGeoTIFF(object): From 3790240f33afe5b360cd4279909ac9fadd767667 Mon Sep 17 00:00:00 2001 From: Ben Greiner Date: Sat, 23 Sep 2023 15:51:09 +0200 Subject: [PATCH 186/209] Retain compatibility with Pillow < 8 --- mapproxy/image/message.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/mapproxy/image/message.py b/mapproxy/image/message.py index ccd0d9a72..e40e53dfe 100644 --- a/mapproxy/image/message.py +++ b/mapproxy/image/message.py @@ -281,7 +281,14 @@ def _relative_text_boxes(self, draw): boxes = [] y_offset = 0 for i, line in enumerate(self.text): - text_box = draw.textbbox((0, y_offset), line, font=self.font) + try: + text_box = draw.textbbox((0, y_offset), line, font=self.font) + y_offset = text_box[3] + self.linespacing + except AttributeError: + # Pillow < 8 + text_size = draw.textsize(line, font=self.font) + text_box = (0, y_offset, text_size[0], text_size[1]+y_offset) + y_offset += text_size[1] + self.linespacing boxes.append(text_box) total_bbox = (min(total_bbox[0], text_box[0]), min(total_bbox[1], text_box[1]), @@ -289,7 +296,7 @@ def _relative_text_boxes(self, draw): max(total_bbox[3], text_box[3]), ) - y_offset = text_box[3] + self.linespacing + return total_bbox, boxes def _move_bboxes(self, boxes, offsets): From b34182f4aa4ff6a61c1074e5344daa35c735f5e6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Sep 2023 20:39:06 +0000 Subject: [PATCH 187/209] Bump docker/login-action from 2 to 3 Bumps [docker/login-action](https://github.com/docker/login-action) from 2 to 3. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v2...v3) --- updated-dependencies: - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/dockerbuild.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dockerbuild.yml b/.github/workflows/dockerbuild.yml index f79ffade7..bb12571d7 100644 --- a/.github/workflows/dockerbuild.yml +++ b/.github/workflows/dockerbuild.yml @@ -36,7 +36,7 @@ jobs: uses: docker/setup-buildx-action@v3 - name: Login to ghcr.io - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} From 1e41f4d525ec58ea627065b320d40b124150a63c Mon Sep 17 00:00:00 2001 From: Boris Manojlovic Date: Thu, 28 Sep 2023 09:38:20 +0200 Subject: [PATCH 188/209] default to none username and password --- mapproxy/cache/redis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapproxy/cache/redis.py b/mapproxy/cache/redis.py index 08cdac4e0..882511669 100644 --- a/mapproxy/cache/redis.py +++ b/mapproxy/cache/redis.py @@ -35,7 +35,7 @@ class RedisCache(TileCacheBase): - def __init__(self, host, port, username, password, prefix, ttl=0, db=0, coverage=None): + def __init__(self, host, port, prefix, ttl=0, db=0, username=None, password=None, coverage=None): super(RedisCache, self).__init__(coverage) if redis is None: From 1e560fa597fc0233f6553593003c78cd58c229cc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Oct 2023 20:54:25 +0000 Subject: [PATCH 189/209] Bump urllib3 from 1.26.16 to 1.26.18 Bumps [urllib3](https://github.com/urllib3/urllib3) from 1.26.16 to 1.26.18. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/1.26.16...1.26.18) --- updated-dependencies: - dependency-name: urllib3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 4d355568e..ccff6fa26 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -65,7 +65,7 @@ six==1.16.0 soupsieve==2.0.1 sshpubkeys==3.3.1 toml==0.10.2 -urllib3==1.26.16 +urllib3==1.26.18 waitress==2.1.2 websocket-client==1.6.1 werkzeug==1.0.1 From c5aa1b34ad4d7b7b85d2fa6da62cfb8f94fb703b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alfonso=20Mart=C3=ADnez=20Cuadrado?= Date: Wed, 18 Oct 2023 09:22:34 +0200 Subject: [PATCH 190/209] Quick fix for cleanup of mbtiles --- mapproxy/cache/mbtiles.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapproxy/cache/mbtiles.py b/mapproxy/cache/mbtiles.py index e3af449ac..d2cacc2d6 100644 --- a/mapproxy/cache/mbtiles.py +++ b/mapproxy/cache/mbtiles.py @@ -374,7 +374,7 @@ def load_tiles(self, tiles, with_metadata=False, dimensions=None): return self._get_level(level).load_tiles(tiles, with_metadata=with_metadata, dimensions=dimensions) - def remove_tile(self, tile): + def remove_tile(self, tile, dimensions=None): if tile.coord is None: return True From c4a06ae479f5039f0052ee48831b5acf65e57692 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 07:32:48 +0000 Subject: [PATCH 191/209] Bump pillow from 9.5.0 to 10.1.0 Bumps [pillow](https://github.com/python-pillow/Pillow) from 9.5.0 to 10.1.0. - [Release notes](https://github.com/python-pillow/Pillow/releases) - [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst) - [Commits](https://github.com/python-pillow/Pillow/compare/9.5.0...10.1.0) --- updated-dependencies: - dependency-name: pillow dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 3a552f42b..328c5da5e 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -2,7 +2,7 @@ azure-storage-blob>=12.9.0 Jinja2==2.11.3 MarkupSafe==1.1.1 Pillow==9.5.0;python_version<"3.8" -Pillow==10.0.1;python_version>="3.8" +Pillow==10.1.0;python_version>="3.8" PyYAML==6.0.1 WebOb==1.8.7 Shapely==2.0.1 From a1f8ae16eb72dd0270442e9032fe43dc35eb3b26 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 20:29:17 +0000 Subject: [PATCH 192/209] Bump packaging from 20.4 to 23.2 Bumps [packaging](https://github.com/pypa/packaging) from 20.4 to 23.2. - [Release notes](https://github.com/pypa/packaging/releases) - [Changelog](https://github.com/pypa/packaging/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pypa/packaging/compare/20.4...23.2) --- updated-dependencies: - dependency-name: packaging dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 3a552f42b..1cefebf73 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -45,7 +45,7 @@ networkx==2.6;python_version<"3.8" numpy==1.26.0;python_version>="3.9" numpy==1.24.0;python_version=="3.8" numpy==1.21.0;python_version<"3.8" -packaging==20.4 +packaging==23.2 pluggy==0.13.1 py==1.11.0 pyasn1==0.5.0 From c1e862c48663eaef0a5a12b4310ee39cbb61242a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 20:29:26 +0000 Subject: [PATCH 193/209] Bump jsondiff from 1.1.2 to 1.3.1 Bumps [jsondiff](https://github.com/ZoomerAnalytics/jsondiff) from 1.1.2 to 1.3.1. - [Release notes](https://github.com/ZoomerAnalytics/jsondiff/releases) - [Changelog](https://github.com/xlwings/jsondiff/blob/master/CHANGELOG.md) - [Commits](https://github.com/ZoomerAnalytics/jsondiff/compare/1.1.2...1.3.1) --- updated-dependencies: - dependency-name: jsondiff dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 3a552f42b..b9ddb1f72 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -29,7 +29,7 @@ idna==2.8 importlib-metadata==1.7.0 iniconfig==2.0.0 jmespath==0.10.0 -jsondiff==1.1.2 +jsondiff==1.3.1 jsonpatch==1.33 jsonpickle==3.0.2 jsonpointer==2.4 From 624fde399aedbaccb4c5fab16fbf400e3a94d075 Mon Sep 17 00:00:00 2001 From: Ben Greiner Date: Thu, 26 Oct 2023 11:18:39 +0200 Subject: [PATCH 194/209] rename nose methods setup and teardown --- mapproxy/test/helper.py | 4 +-- mapproxy/test/system/test_arcgis.py | 2 +- mapproxy/test/system/test_cache_azureblob.py | 2 +- mapproxy/test/system/test_cache_band_merge.py | 2 +- mapproxy/test/system/test_cache_coverage.py | 2 +- mapproxy/test/system/test_cache_geopackage.py | 2 +- mapproxy/test/system/test_cache_mbtiles.py | 2 +- mapproxy/test/system/test_cache_s3.py | 2 +- mapproxy/test/system/test_combined_sources.py | 2 +- mapproxy/test/system/test_coverage.py | 2 +- mapproxy/test/system/test_decorate_img.py | 2 +- mapproxy/test/system/test_dimensions.py | 8 +++--- mapproxy/test/system/test_formats.py | 4 +-- mapproxy/test/system/test_legendgraphic.py | 2 +- mapproxy/test/system/test_mapserver.py | 2 +- .../test/system/test_mixed_mode_format.py | 6 ++-- .../test/system/test_multi_cache_layers.py | 2 +- mapproxy/test/system/test_renderd_client.py | 2 +- mapproxy/test/system/test_scalehints.py | 2 +- mapproxy/test/system/test_seed.py | 4 +-- mapproxy/test/system/test_seed_only.py | 2 +- mapproxy/test/system/test_sld.py | 2 +- mapproxy/test/system/test_source_errors.py | 6 ++-- mapproxy/test/system/test_util_conf.py | 4 +-- mapproxy/test/system/test_util_export.py | 4 +-- mapproxy/test/system/test_util_grids.py | 2 +- .../test/system/test_util_wms_capabilities.py | 2 +- mapproxy/test/system/test_watermark.py | 2 +- mapproxy/test/system/test_wms.py | 14 +++++----- mapproxy/test/system/test_wms_srs_extent.py | 2 +- mapproxy/test/system/test_wmsc.py | 2 +- mapproxy/test/system/test_wmts.py | 2 +- mapproxy/test/system/test_xslt_featureinfo.py | 4 +-- mapproxy/test/unit/test_async.py | 2 +- mapproxy/test/unit/test_auth.py | 8 +++--- mapproxy/test/unit/test_cache.py | 14 +++++----- mapproxy/test/unit/test_cache_azureblob.py | 8 +++--- mapproxy/test/unit/test_cache_compact.py | 12 ++++---- mapproxy/test/unit/test_cache_couchdb.py | 8 +++--- mapproxy/test/unit/test_cache_geopackage.py | 24 ++++++++-------- mapproxy/test/unit/test_cache_redis.py | 6 ++-- mapproxy/test/unit/test_cache_riak.py | 8 +++--- mapproxy/test/unit/test_cache_s3.py | 8 +++--- mapproxy/test/unit/test_cache_tile.py | 24 ++++++++-------- mapproxy/test/unit/test_client.py | 10 +++---- mapproxy/test/unit/test_client_cgi.py | 4 +-- mapproxy/test/unit/test_config.py | 2 +- mapproxy/test/unit/test_decorate_img.py | 2 +- mapproxy/test/unit/test_exceptions.py | 4 +-- mapproxy/test/unit/test_featureinfo.py | 12 ++++---- mapproxy/test/unit/test_geom.py | 14 +++++----- mapproxy/test/unit/test_grid.py | 28 +++++++++---------- mapproxy/test/unit/test_image.py | 18 ++++++------ mapproxy/test/unit/test_image_mask.py | 2 +- mapproxy/test/unit/test_image_messages.py | 2 +- mapproxy/test/unit/test_request.py | 22 +++++++-------- mapproxy/test/unit/test_seed.py | 2 +- mapproxy/test/unit/test_tiled_source.py | 2 +- mapproxy/test/unit/test_utils.py | 20 ++++++------- mapproxy/test/unit/test_yaml.py | 4 +-- 60 files changed, 187 insertions(+), 187 deletions(-) diff --git a/mapproxy/test/helper.py b/mapproxy/test/helper.py index 99f6a1d2b..c334a2f39 100644 --- a/mapproxy/test/helper.py +++ b/mapproxy/test/helper.py @@ -35,7 +35,7 @@ class Mocker(object): `setup` will initialize a `mocker.Mocker`. The `teardown` method will run ``mocker.verify()``. """ - def setup(self): + def setup_method(self): self.mocker = mocker.Mocker() def expect_and_return(self, mock_call, return_val): """ @@ -59,7 +59,7 @@ def mock(self, base_cls=None): if base_cls: return self.mocker.mock(base_cls) return self.mocker.mock() - def teardown(self): + def teardown_method(self): self.mocker.verify() class TempFiles(object): diff --git a/mapproxy/test/system/test_arcgis.py b/mapproxy/test/system/test_arcgis.py index 7cb3ce05a..543f5bc8d 100644 --- a/mapproxy/test/system/test_arcgis.py +++ b/mapproxy/test/system/test_arcgis.py @@ -35,7 +35,7 @@ def config_file(): class TestArcgisSource(SysTest): - def setup(self): + def setup_method(self): self.common_fi_req = WMS111FeatureInfoRequest( url="/service?", param=dict( diff --git a/mapproxy/test/system/test_cache_azureblob.py b/mapproxy/test/system/test_cache_azureblob.py index 9bc991067..8f05806c8 100644 --- a/mapproxy/test/system/test_cache_azureblob.py +++ b/mapproxy/test/system/test_cache_azureblob.py @@ -68,7 +68,7 @@ def azureblob_containers(): @pytest.mark.usefixtures("azureblob_containers") class TestAzureBlobCache(SysTest): - def setup(self): + def setup_method(self): self.common_map_req = WMS111MapRequest( url="/service?", param=dict( diff --git a/mapproxy/test/system/test_cache_band_merge.py b/mapproxy/test/system/test_cache_band_merge.py index 12c3d91b4..ff984bdf2 100644 --- a/mapproxy/test/system/test_cache_band_merge.py +++ b/mapproxy/test/system/test_cache_band_merge.py @@ -32,7 +32,7 @@ class TestCacheSource(SysTest): # test various band merge configurations with # cached base tile 0/0/0.png (R: 50 G: 100 B: 200) - def setup(self): + def setup_method(self): self.common_cap_req = WMTS100CapabilitiesRequest( url="/service?", param=dict(service="WMTS", version="1.0.0", request="GetCapabilities"), diff --git a/mapproxy/test/system/test_cache_coverage.py b/mapproxy/test/system/test_cache_coverage.py index 96d76a9cd..15dc5d938 100644 --- a/mapproxy/test/system/test_cache_coverage.py +++ b/mapproxy/test/system/test_cache_coverage.py @@ -91,7 +91,7 @@ def additional_files(self, base_dir): base_dir.join("boundary.geojson").write_binary(boundary_geojson) base_dir.join("bbox.geojson").write_binary(bbox_geojson) - def setup(self): + def setup_method(self): self.common_cap_req = WMTS100CapabilitiesRequest( url="/service?", param=dict(service="WMTS", version="1.0.0", request="GetCapabilities"), diff --git a/mapproxy/test/system/test_cache_geopackage.py b/mapproxy/test/system/test_cache_geopackage.py index 746fda8b7..be6bcd971 100644 --- a/mapproxy/test/system/test_cache_geopackage.py +++ b/mapproxy/test/system/test_cache_geopackage.py @@ -47,7 +47,7 @@ def fixture_gpkg(base_dir): @pytest.mark.usefixtures("fixture_gpkg") class TestGeopackageCache(SysTest): - def setup(self): + def setup_method(self): self.common_map_req = WMS111MapRequest( url="/service?", param=dict( diff --git a/mapproxy/test/system/test_cache_mbtiles.py b/mapproxy/test/system/test_cache_mbtiles.py index 16ec55c22..0806de631 100644 --- a/mapproxy/test/system/test_cache_mbtiles.py +++ b/mapproxy/test/system/test_cache_mbtiles.py @@ -44,7 +44,7 @@ def fixture_gpkg(base_dir): @pytest.mark.usefixtures("fixture_gpkg") class TestMBTilesCache(SysTest): - def setup(self): + def setup_method(self): self.common_map_req = WMS111MapRequest( url="/service?", param=dict( diff --git a/mapproxy/test/system/test_cache_s3.py b/mapproxy/test/system/test_cache_s3.py index 33e140e35..b603088ff 100644 --- a/mapproxy/test/system/test_cache_s3.py +++ b/mapproxy/test/system/test_cache_s3.py @@ -57,7 +57,7 @@ def s3_buckets(): @pytest.mark.usefixtures("s3_buckets") class TestS3Cache(SysTest): - def setup(self): + def setup_method(self): self.common_map_req = WMS111MapRequest( url="/service?", param=dict( diff --git a/mapproxy/test/system/test_combined_sources.py b/mapproxy/test/system/test_combined_sources.py index 9016a9cf2..06e86fa68 100644 --- a/mapproxy/test/system/test_combined_sources.py +++ b/mapproxy/test/system/test_combined_sources.py @@ -33,7 +33,7 @@ def config_file(): class TestCoverageWMS(SysTest): - def setup(self): + def setup_method(self): self.common_map_req = WMS111MapRequest( url="/service?", param=dict( diff --git a/mapproxy/test/system/test_coverage.py b/mapproxy/test/system/test_coverage.py index e2bf56fda..d7f26bf03 100644 --- a/mapproxy/test/system/test_coverage.py +++ b/mapproxy/test/system/test_coverage.py @@ -33,7 +33,7 @@ def config_file(): class TestCoverageWMS(SysTest): - def setup(self): + def setup_method(self): self.common_map_req = WMS111MapRequest( url="/service?", param=dict( diff --git a/mapproxy/test/system/test_decorate_img.py b/mapproxy/test/system/test_decorate_img.py index ba4cfaf24..848ce1e9e 100644 --- a/mapproxy/test/system/test_decorate_img.py +++ b/mapproxy/test/system/test_decorate_img.py @@ -42,7 +42,7 @@ def to_greyscale(image, service, layers, **kw): @pytest.mark.usefixtures("fixture_cache_data") class TestDecorateImg(SysTest): - def setup(self): + def setup_method(self): self.common_tile_req = WMTS100TileRequest( url="/service?", param=dict( diff --git a/mapproxy/test/system/test_dimensions.py b/mapproxy/test/system/test_dimensions.py index 307fa0f14..6f7e684ef 100644 --- a/mapproxy/test/system/test_dimensions.py +++ b/mapproxy/test/system/test_dimensions.py @@ -44,7 +44,7 @@ def config_file(): class TestDimensionsWMS130(SysTest): - def setup(self): + def setup_method(self): self.common_req = WMS130MapRequest( url="/service?", param=dict(service="WMS", version="1.3.0") ) @@ -114,7 +114,7 @@ def test_get_map_dimensions(self, app, cache_dir): class TestDimensionsWMS111(SysTest): - def setup(self): + def setup_method(self): self.common_req = WMS111MapRequest( url="/service?", param=dict(service="WMS", version="1.1.1") ) @@ -180,7 +180,7 @@ def test_get_map_dimensions(self, app, cache_dir): class TestDimensionsWMS110(SysTest): - def setup(self): + def setup_method(self): self.common_req = WMS110MapRequest( url="/service?", param=dict(service="WMS", version="1.1.0") ) @@ -249,7 +249,7 @@ def test_get_map_dimensions(self, app, cache_dir): class TestDimensionsWMS100(SysTest): - def setup(self): + def setup_method(self): self.common_req = WMS100MapRequest( url="/service?", param=dict(service="WMS", wmtver="1.0.0") ) diff --git a/mapproxy/test/system/test_formats.py b/mapproxy/test/system/test_formats.py index 3c2fa408b..5f513f8b6 100644 --- a/mapproxy/test/system/test_formats.py +++ b/mapproxy/test/system/test_formats.py @@ -37,7 +37,7 @@ def assert_file_format(filename, format): class TestWMS111(SysTest): - def setup(self): + def setup_method(self): self.common_req = WMS111MapRequest( url="/service?", param=dict(service="WMS", version="1.1.1") ) @@ -176,7 +176,7 @@ def test_get_direct(self, app, layer, source, wms_format, req_format): class TestTMS(SysTest): - def setup(self): + def setup_method(self): self.expected_base_path = "/service?SERVICE=WMS&REQUEST=GetMap&HEIGHT=256" "&SRS=EPSG%3A900913&styles=&VERSION=1.1.1&WIDTH=256" "&BBOX=0.0,0.0,20037508.3428,20037508.3428" self.expected_direct_base_path = "/service?SERVICE=WMS&REQUEST=GetMap&HEIGHT=200" "&SRS=EPSG%3A4326&styles=&VERSION=1.1.1&WIDTH=200" "&BBOX=0.0,0.0,10.0,10.0" diff --git a/mapproxy/test/system/test_legendgraphic.py b/mapproxy/test/system/test_legendgraphic.py index 4ffd3ff06..c923c241d 100644 --- a/mapproxy/test/system/test_legendgraphic.py +++ b/mapproxy/test/system/test_legendgraphic.py @@ -52,7 +52,7 @@ class TestWMSLegendgraphic(SysTest): def cache_dir(self, base_dir): return base_dir.join("cache_data") - def setup(self): + def setup_method(self): self.common_req = WMS111MapRequest( url="/service?", param=dict(service="WMS", version="1.1.1") ) diff --git a/mapproxy/test/system/test_mapserver.py b/mapproxy/test/system/test_mapserver.py index 042eea076..3acc9f4e0 100644 --- a/mapproxy/test/system/test_mapserver.py +++ b/mapproxy/test/system/test_mapserver.py @@ -54,7 +54,7 @@ def additional_files(self, base_dir): base_dir.join("tmp").mkdir() - def setup(self): + def setup_method(self): self.common_map_req = WMS111MapRequest( url="/service?", param=dict( diff --git a/mapproxy/test/system/test_mixed_mode_format.py b/mapproxy/test/system/test_mixed_mode_format.py index c1686ac6c..c2b60ca84 100644 --- a/mapproxy/test/system/test_mixed_mode_format.py +++ b/mapproxy/test/system/test_mixed_mode_format.py @@ -35,7 +35,7 @@ def config_file(): class TestWMS(SysTest): - def setup(self): + def setup_method(self): self.common_map_req = WMS111MapRequest( url="/service?", param=dict( @@ -94,7 +94,7 @@ def test_mixed_mode(self, app, cache_dir): class TestTMS(SysTest): - def setup(self): + def setup_method(self): self.expected_base_path = "/service?SERVICE=WMS&REQUEST=GetMap&HEIGHT=256" "&SRS=EPSG%3A900913&styles=&VERSION=1.1.1&WIDTH=512" "&BBOX=-20037508.3428,-20037508.3428,20037508.3428,0.0" def test_mixed_mode(self, app, cache_dir): @@ -128,7 +128,7 @@ def test_mixed_mode(self, app, cache_dir): class TestWMTS(SysTest): - def setup(self): + def setup_method(self): self.common_tile_req = WMTS100TileRequest( url="/service?", param=dict( diff --git a/mapproxy/test/system/test_multi_cache_layers.py b/mapproxy/test/system/test_multi_cache_layers.py index 1ae47df18..93d033bd7 100644 --- a/mapproxy/test/system/test_multi_cache_layers.py +++ b/mapproxy/test/system/test_multi_cache_layers.py @@ -47,7 +47,7 @@ def config_file(): class TestMultiCacheLayer(SysTest): - def setup(self): + def setup_method(self): self.common_cap_req = WMTS100CapabilitiesRequest( url="/service?", param=dict(service="WMTS", version="1.0.0", request="GetCapabilities"), diff --git a/mapproxy/test/system/test_renderd_client.py b/mapproxy/test/system/test_renderd_client.py index e1b75632e..f1263a686 100644 --- a/mapproxy/test/system/test_renderd_client.py +++ b/mapproxy/test/system/test_renderd_client.py @@ -47,7 +47,7 @@ def config_file(): class TestWMS111(SysTest): - def setup(self): + def setup_method(self): self.common_req = WMS111MapRequest( url="/service?", param=dict(service="WMS", version="1.1.1") ) diff --git a/mapproxy/test/system/test_scalehints.py b/mapproxy/test/system/test_scalehints.py index de26c52e3..1870d4144 100644 --- a/mapproxy/test/system/test_scalehints.py +++ b/mapproxy/test/system/test_scalehints.py @@ -45,7 +45,7 @@ def diagonal_res_to_pixel_res(res): class TestWMS(SysTest): - def setup(self): + def setup_method(self): self.common_req = WMS111MapRequest( url="/service?", param=dict(service="WMS", version="1.1.1") ) diff --git a/mapproxy/test/system/test_seed.py b/mapproxy/test/system/test_seed.py index 411918e96..f533d1a6e 100644 --- a/mapproxy/test/system/test_seed.py +++ b/mapproxy/test/system/test_seed.py @@ -36,7 +36,7 @@ FIXTURE_DIR = os.path.join(os.path.dirname(__file__), 'fixture') class SeedTestEnvironment(object): - def setup(self): + def setup_method(self): self.dir = tempfile.mkdtemp() shutil.copy(os.path.join(FIXTURE_DIR, self.seed_conf_name), self.dir) shutil.copy(os.path.join(FIXTURE_DIR, self.mapproxy_conf_name), self.dir) @@ -45,7 +45,7 @@ def setup(self): self.mapproxy_conf_file = os.path.join(self.dir, self.mapproxy_conf_name) self.mapproxy_conf = load_configuration(self.mapproxy_conf_file, seed=True) - def teardown(self): + def teardown_method(self): shutil.rmtree(self.dir) def make_tile(self, coord=(0, 0, 0), timestamp=None): diff --git a/mapproxy/test/system/test_seed_only.py b/mapproxy/test/system/test_seed_only.py index 831603f79..ab2c53a1c 100644 --- a/mapproxy/test/system/test_seed_only.py +++ b/mapproxy/test/system/test_seed_only.py @@ -32,7 +32,7 @@ def config_file(): class TestSeedOnlyWMS(SysTest): - def setup(self): + def setup_method(self): self.common_map_req = WMS111MapRequest( url="/service?", param=dict( diff --git a/mapproxy/test/system/test_sld.py b/mapproxy/test/system/test_sld.py index 2857121fb..77f8a707d 100644 --- a/mapproxy/test/system/test_sld.py +++ b/mapproxy/test/system/test_sld.py @@ -42,7 +42,7 @@ class TestWMS(SysTest): def additional_files(self, base_dir): base_dir.join("mysld.xml").write("") - def setup(self): + def setup_method(self): self.common_map_req = WMS111MapRequest( url="/service?", param=dict( diff --git a/mapproxy/test/system/test_source_errors.py b/mapproxy/test/system/test_source_errors.py index aa76c5844..bedb34d68 100644 --- a/mapproxy/test/system/test_source_errors.py +++ b/mapproxy/test/system/test_source_errors.py @@ -42,7 +42,7 @@ class TestWMS(SysTest): def config_file(self): return "source_errors.yaml" - def setup(self): + def setup_method(self): self.common_map_req = WMS111MapRequest( url="/service?", param=dict( @@ -140,7 +140,7 @@ class TestWMSRaise(SysTest): def config_file(self): return "source_errors_raise.yaml" - def setup(self): + def setup_method(self): self.common_map_req = WMS111MapRequest( url="/service?", param=dict( @@ -191,7 +191,7 @@ class TestTileErrors(SysTest): def config_file(self): return "source_errors.yaml" - def setup(self): + def setup_method(self): self.common_map_req = WMS111MapRequest( url="/service?", param=dict( diff --git a/mapproxy/test/system/test_util_conf.py b/mapproxy/test/system/test_util_conf.py index 640573ca5..220341322 100644 --- a/mapproxy/test/system/test_util_conf.py +++ b/mapproxy/test/system/test_util_conf.py @@ -31,10 +31,10 @@ def filename(name): class TestMapProxyConfCmd(object): - def setup(self): + def setup_method(self): self.dir = tempfile.mkdtemp() - def teardown(self): + def teardown_method(self): if os.path.exists(self.dir): shutil.rmtree(self.dir) diff --git a/mapproxy/test/system/test_util_export.py b/mapproxy/test/system/test_util_export.py index 796007a3f..cd9106318 100644 --- a/mapproxy/test/system/test_util_export.py +++ b/mapproxy/test/system/test_util_export.py @@ -47,7 +47,7 @@ def tile_server(tile_coords): class TestUtilExport(object): - def setup(self): + def setup_method(self): self.dir = tempfile.mkdtemp() self.dest = os.path.join(self.dir, "dest") self.mapproxy_conf_name = "mapproxy_export.yaml" @@ -55,7 +55,7 @@ def setup(self): self.mapproxy_conf_file = os.path.join(self.dir, self.mapproxy_conf_name) self.args = ["command_dummy", "-f", self.mapproxy_conf_file] - def teardown(self): + def teardown_method(self): shutil.rmtree(self.dir) def test_config_not_found(self): diff --git a/mapproxy/test/system/test_util_grids.py b/mapproxy/test/system/test_util_grids.py index ee050e8f3..7956cc717 100644 --- a/mapproxy/test/system/test_util_grids.py +++ b/mapproxy/test/system/test_util_grids.py @@ -28,7 +28,7 @@ class TestUtilGrids(object): - def setup(self): + def setup_method(self): self.mapproxy_config_file = os.path.join(FIXTURE_DIR, "util_grids.yaml") self.args = ["command_dummy", "-f", self.mapproxy_config_file] diff --git a/mapproxy/test/system/test_util_wms_capabilities.py b/mapproxy/test/system/test_util_wms_capabilities.py index 7e6332246..03ca275cf 100644 --- a/mapproxy/test/system/test_util_wms_capabilities.py +++ b/mapproxy/test/system/test_util_wms_capabilities.py @@ -38,7 +38,7 @@ class TestUtilWMSCapabilities(object): - def setup(self): + def setup_method(self): self.client = HTTPClient() self.args = ["command_dummy", "--host", TESTSERVER_URL + "/service"] diff --git a/mapproxy/test/system/test_watermark.py b/mapproxy/test/system/test_watermark.py index 39a95c4a8..15ff0ccbb 100644 --- a/mapproxy/test/system/test_watermark.py +++ b/mapproxy/test/system/test_watermark.py @@ -33,7 +33,7 @@ def config_file(): class TestWatermark(SysTest): - def setup(self): + def setup_method(self): self.common_map_req = WMS111MapRequest( url="/service?", param=dict( diff --git a/mapproxy/test/system/test_wms.py b/mapproxy/test/system/test_wms.py index 7ab1fc99b..c649986ff 100644 --- a/mapproxy/test/system/test_wms.py +++ b/mapproxy/test/system/test_wms.py @@ -103,8 +103,8 @@ def bbox_srs_from_boundingbox(bbox_elem): class TestWMS111(SysTest): config_file = "layer.yaml" - def setup(self): - # WMSTest.setup(self) + def setup_method(self): + # WMSTest.setup_method(self) self.common_req = WMS111MapRequest( url="/service?", param=dict(service="WMS", version="1.1.1") ) @@ -830,8 +830,8 @@ def test_get_featureinfo_not_queryable(self, app): class TestWMS110(SysTest): config_file = "layer.yaml" - def setup(self): - # WMSTest.setup(self) + def setup_method(self): + # WMSTest.setup_method(self) self.common_req = WMS110MapRequest( url="/service?", param=dict(service="WMS", version="1.1.0") ) @@ -1099,7 +1099,7 @@ def assert_cookie(req_handler): class TestWMS100(SysTest): config_file = "layer.yaml" - def setup(self): + def setup_method(self): self.common_req = WMS100MapRequest(url="/service?", param=dict(wmtver="1.0.0")) self.common_map_req = WMS100MapRequest( url="/service?", @@ -1302,7 +1302,7 @@ def assert_xpath(xml, xpath, expected, namespaces=None): class TestWMS130(SysTest): config_file = "layer.yaml" - def setup(self): + def setup_method(self): self.common_req = WMS130MapRequest( url="/service?", param=dict(service="WMS", version="1.3.0") ) @@ -1533,7 +1533,7 @@ def test_get_featureinfo_111(self, app): class TestWMSLinkSingleColorImages(SysTest): config_file = "layer.yaml" - def setup(self): + def setup_method(self): self.common_map_req = WMS111MapRequest( url="/service?", param=dict( diff --git a/mapproxy/test/system/test_wms_srs_extent.py b/mapproxy/test/system/test_wms_srs_extent.py index 691de62ab..d988ea34e 100644 --- a/mapproxy/test/system/test_wms_srs_extent.py +++ b/mapproxy/test/system/test_wms_srs_extent.py @@ -33,7 +33,7 @@ def config_file(): class TestWMSSRSExtentTest(SysTest): - def setup(self): + def setup_method(self): self.common_req = WMS111MapRequest( url="/service?", param=dict(service="WMS", version="1.1.1") ) diff --git a/mapproxy/test/system/test_wmsc.py b/mapproxy/test/system/test_wmsc.py index 728dcb06c..0685413f5 100644 --- a/mapproxy/test/system/test_wmsc.py +++ b/mapproxy/test/system/test_wmsc.py @@ -38,7 +38,7 @@ def config_file(): class TestWMSC(SysTest): - def setup(self): + def setup_method(self): self.common_cap_req = WMS111CapabilitiesRequest( url="/service?", param=dict(service="WMS", version="1.1.1") ) diff --git a/mapproxy/test/system/test_wmts.py b/mapproxy/test/system/test_wmts.py index f0eb4aeac..05393eb4d 100644 --- a/mapproxy/test/system/test_wmts.py +++ b/mapproxy/test/system/test_wmts.py @@ -99,7 +99,7 @@ def fi_req_with_featurecount(): class TestWMTS(SysTest): - def setup(self): + def setup_method(self): self.common_cap_req = WMTS100CapabilitiesRequest( url="/service?", param=dict(service="WMTS", version="1.0.0", request="GetCapabilities"), diff --git a/mapproxy/test/system/test_xslt_featureinfo.py b/mapproxy/test/system/test_xslt_featureinfo.py index 554ed7452..8c99e3346 100644 --- a/mapproxy/test/system/test_xslt_featureinfo.py +++ b/mapproxy/test/system/test_xslt_featureinfo.py @@ -104,7 +104,7 @@ class TestWMSXSLTFeatureInfo(SysTest): def config_file(self): return "xslt_featureinfo.yaml" - def setup(self): + def setup_method(self): self.common_fi_req = WMS111FeatureInfoRequest( url="/service?", param=dict( @@ -282,7 +282,7 @@ class TestWMSXSLTFeatureInfoInput(SysTest): def config_file(self): return "xslt_featureinfo_input.yaml" - def setup(self): + def setup_method(self): self.common_fi_req = WMS111FeatureInfoRequest( url="/service?", param=dict( diff --git a/mapproxy/test/unit/test_async.py b/mapproxy/test/unit/test_async.py index 54354c724..816511c9a 100644 --- a/mapproxy/test/unit/test_async.py +++ b/mapproxy/test/unit/test_async.py @@ -222,7 +222,7 @@ class DummyException(Exception): pass class TestThreadedExecutorException(object): - def setup(self): + def setup_method(self): self.lock = threading.Lock() self.exec_count = 0 self.te = ThreadPool(size=2) diff --git a/mapproxy/test/unit/test_auth.py b/mapproxy/test/unit/test_auth.py index b3504502c..d69b4a7e5 100644 --- a/mapproxy/test/unit/test_auth.py +++ b/mapproxy/test/unit/test_auth.py @@ -53,7 +53,7 @@ def info_layers_for_query(self, query): class TestWMSAuth(object): - def setup(self): + def setup_method(self): layers = {} wms_layers = {} @@ -337,7 +337,7 @@ def render(self, tile_request, use_profiles=None, coverage=None, decorate_img=No class TestTMSAuth(object): service = 'tms' - def setup(self): + def setup_method(self): self.layers = {} self.layers['layer1'] = DummyTileLayer('layer1') @@ -408,8 +408,8 @@ def tile_request(self, tile, auth): class TestKMLAuth(TestTMSAuth): service = 'kml' - def setup(self): - TestTMSAuth.setup(self) + def setup_method(self): + TestTMSAuth.setup_method(self) self.server = KMLServer(self.layers, {}) def tile_request(self, tile, auth): diff --git a/mapproxy/test/unit/test_cache.py b/mapproxy/test/unit/test_cache.py index 6ddd2848e..d2f6b930c 100644 --- a/mapproxy/test/unit/test_cache.py +++ b/mapproxy/test/unit/test_cache.py @@ -94,7 +94,7 @@ def get_tile(self, tile_coord, format=None): return ImageSource(create_debug_img((256, 256))) class TestTiledSourceGlobalGeodetic(object): - def setup(self): + def setup_method(self): self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.client = MockTileClient() self.source = TiledSource(self.grid, self.client) @@ -1195,18 +1195,18 @@ def test_scaled_tiles(self, name, file_cache, tile_locker, rescale_tiles, tiles, class TileCacheTestBase(object): cache = None # set by subclasses - def setup(self): + def setup_method(self): self.cache_dir = tempfile.mkdtemp() - def teardown(self): + def teardown_method(self): if hasattr(self.cache, 'cleanup'): self.cache.cleanup() if hasattr(self, 'cache_dir') and os.path.exists(self.cache_dir): shutil.rmtree(self.cache_dir) class TestTileManagerCacheBboxCoverage(TileCacheTestBase): - def setup(self): - TileCacheTestBase.setup(self) + def setup_method(self): + TileCacheTestBase.setup_method(self) self.cache = RecordFileCache(self.cache_dir, 'png', coverage=coverage([-50, -50, 50, 50], SRS(4326))) def test_load_tiles_in_coverage(self, tile_locker): @@ -1257,8 +1257,8 @@ def test_empty_tiles_outside_coverage(self, tile_locker): ) class TestTileManagerCacheGeojsonCoverage(TileCacheTestBase): - def setup(self): - TileCacheTestBase.setup(self) + def setup_method(self): + TileCacheTestBase.setup_method(self) with TempFile() as tf: with open(tf, 'wb') as f: diff --git a/mapproxy/test/unit/test_cache_azureblob.py b/mapproxy/test/unit/test_cache_azureblob.py index 1b1d90862..0da45a807 100644 --- a/mapproxy/test/unit/test_cache_azureblob.py +++ b/mapproxy/test/unit/test_cache_azureblob.py @@ -31,8 +31,8 @@ class TestAzureBlobCache(TileCacheTestBase): always_loads_metadata = True uses_utc = True - def setup(self): - TileCacheTestBase.setup(self) + def setup_method(self): + TileCacheTestBase.setup_method(self) self.container = 'mapproxy-azure-unit-test' self.base_path = '/mycache/webmercator' @@ -54,8 +54,8 @@ def setup(self): self.container_client = self.cache.container_client self.container_client.create_container() - def teardown(self): - TileCacheTestBase.teardown(self) + def teardown_method(self): + TileCacheTestBase.teardown_method(self) self.container_client.delete_container() def test_default_coverage(self): diff --git a/mapproxy/test/unit/test_cache_compact.py b/mapproxy/test/unit/test_cache_compact.py index bcc7243be..616f1036a 100644 --- a/mapproxy/test/unit/test_cache_compact.py +++ b/mapproxy/test/unit/test_cache_compact.py @@ -35,8 +35,8 @@ class TestCompactCacheV1(TileCacheTestBase): always_loads_metadata = True - def setup(self): - TileCacheTestBase.setup(self) + def setup_method(self): + TileCacheTestBase.setup_method(self) self.cache = CompactCacheV1( cache_dir=self.cache_dir, ) @@ -136,8 +136,8 @@ class TestCompactCacheV2(TileCacheTestBase): always_loads_metadata = True - def setup(self): - TileCacheTestBase.setup(self) + def setup_method(self): + TileCacheTestBase.setup_method(self) self.cache = CompactCacheV2( cache_dir=self.cache_dir, ) @@ -233,10 +233,10 @@ def log(self, fname, fragmentation, fragmentation_bytes, num, total, defrag): self.logs.sort(key=lambda x: (x['fname'], 'num')) class DefragmentationTestBase(object): - def setup(self): + def setup_method(self): self.cache_dir = tempfile.mkdtemp() - def teardown(self): + def teardown_method(self): if os.path.exists(self.cache_dir): shutil.rmtree(self.cache_dir) diff --git a/mapproxy/test/unit/test_cache_couchdb.py b/mapproxy/test/unit/test_cache_couchdb.py index d7135d2fd..1975a369d 100644 --- a/mapproxy/test/unit/test_cache_couchdb.py +++ b/mapproxy/test/unit/test_cache_couchdb.py @@ -36,11 +36,11 @@ class TestCouchDBCache(TileCacheTestBase): always_loads_metadata = True - def setup(self): + def setup_method(self): couch_address = os.environ['MAPPROXY_TEST_COUCHDB'] db_name = 'mapproxy_test_%d' % random.randint(0, 100000) - TileCacheTestBase.setup(self) + TileCacheTestBase.setup_method(self) md_template = CouchDBMDTemplate({'row': '{{y}}', 'tile_column': '{{x}}', 'zoom': '{{level}}', 'time': '{{timestamp}}', 'coord': '{{wgs_tile_centroid}}'}) @@ -48,10 +48,10 @@ def setup(self): file_ext='png', tile_grid=tile_grid(3857, name='global-webmarcator'), md_template=md_template) - def teardown(self): + def teardown_method(self): import requests requests.delete(self.cache.couch_url) - TileCacheTestBase.teardown(self) + TileCacheTestBase.teardown_method(self) def test_default_coverage(self): assert self.cache.coverage is None diff --git a/mapproxy/test/unit/test_cache_geopackage.py b/mapproxy/test/unit/test_cache_geopackage.py index c2e9666cc..8325b512b 100644 --- a/mapproxy/test/unit/test_cache_geopackage.py +++ b/mapproxy/test/unit/test_cache_geopackage.py @@ -40,8 +40,8 @@ class TestGeopackageCache(TileCacheTestBase): always_loads_metadata = True - def setup(self): - TileCacheTestBase.setup(self) + def setup_method(self): + TileCacheTestBase.setup_method(self) self.gpkg_file = os.path.join(self.cache_dir, 'tmp.gpkg') self.table_name = 'test_tiles' self.cache = GeopackageCache( @@ -50,10 +50,10 @@ def setup(self): table_name=self.table_name, ) - def teardown(self): + def teardown_method(self): if self.cache: self.cache.cleanup() - TileCacheTestBase.teardown(self) + TileCacheTestBase.teardown_method(self) def test_new_geopackage(self): assert os.path.exists(self.gpkg_file) @@ -125,8 +125,8 @@ def block(): class TestGeopackageCacheCoverage(TileCacheTestBase): - def setup(self): - TileCacheTestBase.setup(self) + def setup_method(self): + TileCacheTestBase.setup_method(self) self.gpkg_file = os.path.join(self.cache_dir, 'tmp.gpkg') self.table_name = 'test_tiles' self.cache = GeopackageCache( @@ -136,10 +136,10 @@ def setup(self): coverage=coverage([20, 20, 30, 30], SRS(4326)) ) - def teardown(self): + def teardown_method(self): if self.cache: self.cache.cleanup() - TileCacheTestBase.teardown(self) + TileCacheTestBase.teardown_method(self) def test_correct_coverage(self): assert self.cache.bbox == [20, 20, 30, 30] @@ -149,18 +149,18 @@ class TestGeopackageLevelCache(TileCacheTestBase): always_loads_metadata = True - def setup(self): - TileCacheTestBase.setup(self) + def setup_method(self): + TileCacheTestBase.setup_method(self) self.cache = GeopackageLevelCache( self.cache_dir, tile_grid=tile_grid(3857, name='global-webmarcator'), table_name='test_tiles', ) - def teardown(self): + def teardown_method(self): if self.cache: self.cache.cleanup() - TileCacheTestBase.teardown(self) + TileCacheTestBase.teardown_method(self) def test_default_coverage(self): assert self.cache.coverage is None diff --git a/mapproxy/test/unit/test_cache_redis.py b/mapproxy/test/unit/test_cache_redis.py index dd78d23f7..a023ab7df 100644 --- a/mapproxy/test/unit/test_cache_redis.py +++ b/mapproxy/test/unit/test_cache_redis.py @@ -33,15 +33,15 @@ class TestRedisCache(TileCacheTestBase): always_loads_metadata = False - def setup(self): + def setup_method(self): redis_host = os.environ['MAPPROXY_TEST_REDIS'] self.host, self.port = redis_host.split(':') - TileCacheTestBase.setup(self) + TileCacheTestBase.setup_method(self) self.cache = RedisCache(self.host, int(self.port), prefix='mapproxy-test', db=1) - def teardown(self): + def teardown_method(self): for k in self.cache.r.keys('mapproxy-test-*'): self.cache.r.delete(k) diff --git a/mapproxy/test/unit/test_cache_riak.py b/mapproxy/test/unit/test_cache_riak.py index dca08cef0..aecbc619a 100644 --- a/mapproxy/test/unit/test_cache_riak.py +++ b/mapproxy/test/unit/test_cache_riak.py @@ -33,7 +33,7 @@ @pytest.mark.skipif(sys.version_info > (3, 7), reason="riak is not compatible with this Python version") class RiakCacheTestBase(TileCacheTestBase): always_loads_metadata = True - def setup(self): + def setup_method(self): url = os.environ[self.riak_url_env] urlparts = urlparse.urlparse(url) protocol = urlparts.scheme.lower() @@ -46,16 +46,16 @@ def setup(self): db_name = 'mapproxy_test_%d' % random.randint(0, 100000) - TileCacheTestBase.setup(self) + TileCacheTestBase.setup_method(self) self.cache = RiakCache([node], protocol, db_name, tile_grid=tile_grid(3857, name='global-webmarcator')) - def teardown(self): + def teardown_method(self): import riak bucket = self.cache.bucket for k in bucket.get_keys(): riak.RiakObject(self.cache.connection, bucket, k).delete() - TileCacheTestBase.teardown(self) + TileCacheTestBase.teardown_method(self) def test_default_coverage(self): assert self.cache.coverage is None diff --git a/mapproxy/test/unit/test_cache_s3.py b/mapproxy/test/unit/test_cache_s3.py index 38c3a5c5f..ad32a3205 100644 --- a/mapproxy/test/unit/test_cache_s3.py +++ b/mapproxy/test/unit/test_cache_s3.py @@ -39,8 +39,8 @@ class TestS3Cache(TileCacheTestBase): always_loads_metadata = True uses_utc = True - def setup(self): - TileCacheTestBase.setup(self) + def setup_method(self): + TileCacheTestBase.setup_method(self) self.mock = mock_s3() self.mock.start() @@ -58,9 +58,9 @@ def setup(self): _concurrent_writer=1, # moto is not thread safe ) - def teardown(self): + def teardown_method(self): self.mock.stop() - TileCacheTestBase.teardown(self) + TileCacheTestBase.teardown_method(self) def test_default_coverage(self): assert self.cache.coverage is None diff --git a/mapproxy/test/unit/test_cache_tile.py b/mapproxy/test/unit/test_cache_tile.py index 7f7a5cacb..2a7ed9bf7 100644 --- a/mapproxy/test/unit/test_cache_tile.py +++ b/mapproxy/test/unit/test_cache_tile.py @@ -48,10 +48,10 @@ class TileCacheTestBase(object): cache = None # set by subclasses - def setup(self): + def setup_method(self): self.cache_dir = tempfile.mkdtemp() - def teardown(self): + def teardown_method(self): if hasattr(self.cache, 'cleanup'): self.cache.cleanup() if hasattr(self, 'cache_dir') and os.path.exists(self.cache_dir): @@ -206,8 +206,8 @@ def create_cached_tile(self, tile): self.cache.store_tile(tile) class TestFileTileCache(TileCacheTestBase): - def setup(self): - TileCacheTestBase.setup(self) + def setup_method(self): + TileCacheTestBase.setup_method(self) self.cache = FileCache(self.cache_dir, 'png') def test_default_coverage(self): @@ -353,14 +353,14 @@ def test_level_location_quadkey(self): cache.level_location(0) class TestMBTileCache(TileCacheTestBase): - def setup(self): - TileCacheTestBase.setup(self) + def setup_method(self): + TileCacheTestBase.setup_method(self) self.cache = MBTilesCache(os.path.join(self.cache_dir, 'tmp.mbtiles')) - def teardown(self): + def teardown_method(self): if self.cache: self.cache.cleanup() - TileCacheTestBase.teardown(self) + TileCacheTestBase.teardown_method(self) def test_default_coverage(self): assert self.cache.coverage is None @@ -403,8 +403,8 @@ def block(): class TestQuadkeyFileTileCache(TileCacheTestBase): - def setup(self): - TileCacheTestBase.setup(self) + def setup_method(self): + TileCacheTestBase.setup_method(self) self.cache = FileCache(self.cache_dir, 'png', directory_layout='quadkey') def test_default_coverage(self): @@ -420,8 +420,8 @@ def test_store_tile(self): class TestMBTileLevelCache(TileCacheTestBase): always_loads_metadata = True - def setup(self): - TileCacheTestBase.setup(self) + def setup_method(self): + TileCacheTestBase.setup_method(self) self.cache = MBTilesLevelCache(self.cache_dir) def test_default_coverage(self): diff --git a/mapproxy/test/unit/test_client.py b/mapproxy/test/unit/test_client.py index 6139a5732..18fd72733 100644 --- a/mapproxy/test/unit/test_client.py +++ b/mapproxy/test/unit/test_client.py @@ -43,7 +43,7 @@ class TestHTTPClient(object): - def setup(self): + def setup_method(self): self.client = HTTPClient() def test_post(self): @@ -380,7 +380,7 @@ def test_no_image(self, caplog): class TestCombinedWMSClient(object): - def setup(self): + def setup_method(self): self.http = MockHTTPClient() def test_combine(self): req1 = WMS111MapRequest(url=TESTSERVER_URL + '/service?map=foo', @@ -443,7 +443,7 @@ def test_transform_fi_request(self): '&BBOX=428333.552496,5538630.70275,500000.0,5650300.78652'), http.requested[0] class TestWMSMapRequest100(object): - def setup(self): + def setup_method(self): self.r = WMS100MapRequest(param=dict(layers='foo', version='1.1.1', request='GetMap')) self.r.params = self.r.adapt_params_to_version() def test_version(self): @@ -457,7 +457,7 @@ def test_str(self): assert_query_eq(str(self.r.params), 'layers=foo&styles=&request=map&wmtver=1.0.0') class TestWMSMapRequest130(object): - def setup(self): + def setup_method(self): self.r = WMS130MapRequest(param=dict(layers='foo', WMTVER='1.0.0')) self.r.params = self.r.adapt_params_to_version() def test_version(self): @@ -471,7 +471,7 @@ def test_str(self): query_eq(str(self.r.params), 'layers=foo&styles=&service=WMS&request=GetMap&version=1.3.0') class TestWMSMapRequest111(object): - def setup(self): + def setup_method(self): self.r = WMS111MapRequest(param=dict(layers='foo', WMTVER='1.0.0')) self.r.params = self.r.adapt_params_to_version() def test_version(self): diff --git a/mapproxy/test/unit/test_client_cgi.py b/mapproxy/test/unit/test_client_cgi.py index 2369a0c1f..a88f52ab5 100644 --- a/mapproxy/test/unit/test_client_cgi.py +++ b/mapproxy/test/unit/test_client_cgi.py @@ -64,10 +64,10 @@ def test_no_header(self): @pytest.mark.skipif(sys.platform == 'win32', reason="tests not ported to windows") @pytest.mark.skipif(sys.version_info < (3, 0), reason="tests skipped for python 2") class TestCGIClient(object): - def setup(self): + def setup_method(self): self.script_dir = tempfile.mkdtemp() - def teardown(self): + def teardown_method(self): shutil.rmtree(self.script_dir) def create_script(self, script=TEST_CGI_SCRIPT, executable=True): diff --git a/mapproxy/test/unit/test_config.py b/mapproxy/test/unit/test_config.py index 282176948..b4b6b3374 100644 --- a/mapproxy/test/unit/test_config.py +++ b/mapproxy/test/unit/test_config.py @@ -92,7 +92,7 @@ def test_defaults_overwrite(self): class TestSRSConfig(object): - def setup(self): + def setup_method(self): import mapproxy.config.config mapproxy.config.config._config.pop() diff --git a/mapproxy/test/unit/test_decorate_img.py b/mapproxy/test/unit/test_decorate_img.py index a0ea31003..a45db704a 100644 --- a/mapproxy/test/unit/test_decorate_img.py +++ b/mapproxy/test/unit/test_decorate_img.py @@ -71,7 +71,7 @@ def render(self, tile_request, use_profiles=None, coverage=None, decorate_img=No class TestDecorateImg(object): - def setup(self): + def setup_method(self): # Base server self.server = Server() # WMS Server diff --git a/mapproxy/test/unit/test_exceptions.py b/mapproxy/test/unit/test_exceptions.py index e47d9b199..9a5d24b3d 100644 --- a/mapproxy/test/unit/test_exceptions.py +++ b/mapproxy/test/unit/test_exceptions.py @@ -30,8 +30,8 @@ class ExceptionHandlerTest(Mocker): - def setup(self): - Mocker.setup(self) + def setup_method(self): + Mocker.setup_method(self) req = url_decode("""LAYERS=foo&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1& REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_xml&SRS=EPSG%3A900913& BBOX=8,4,9,5&WIDTH=150&HEIGHT=100""".replace('\n', '')) diff --git a/mapproxy/test/unit/test_featureinfo.py b/mapproxy/test/unit/test_featureinfo.py index a127be5e4..c4eb60921 100644 --- a/mapproxy/test/unit/test_featureinfo.py +++ b/mapproxy/test/unit/test_featureinfo.py @@ -34,7 +34,7 @@ class TestXSLTransformer(object): - def setup(self): + def setup_method(self): fd, self.xsl_script = tempfile.mkstemp(".xsl") os.close(fd) xsl = ( @@ -54,7 +54,7 @@ def setup(self): with open(self.xsl_script, "wb") as f: f.write(xsl) - def teardown(self): + def teardown_method(self): os.remove(self.xsl_script) def test_transformer(self): @@ -123,13 +123,13 @@ def test_combine(self): class TestXMLFeatureInfoDocsNoLXML(object): - def setup(self): + def setup_method(self): from mapproxy import featureinfo self.old_etree = featureinfo.etree featureinfo.etree = None - def teardown(self): + def teardown_method(self): from mapproxy import featureinfo featureinfo.etree = self.old_etree @@ -191,13 +191,13 @@ def test_combine_parts(self): class TestHTMLFeatureInfoDocsNoLXML(object): - def setup(self): + def setup_method(self): from mapproxy import featureinfo self.old_etree = featureinfo.etree featureinfo.etree = None - def teardown(self): + def teardown_method(self): from mapproxy import featureinfo featureinfo.etree = self.old_etree diff --git a/mapproxy/test/unit/test_geom.py b/mapproxy/test/unit/test_geom.py index 05422024a..803289159 100644 --- a/mapproxy/test/unit/test_geom.py +++ b/mapproxy/test/unit/test_geom.py @@ -205,7 +205,7 @@ def test_bbox_polygon(self): class TestGeomCoverage(object): - def setup(self): + def setup_method(self): # box from 10 10 to 80 80 with small spike/corner to -10 60 (upper left) self.geom = shapely.wkt.loads( "POLYGON((10 10, 10 50, -10 60, 10 80, 80 80, 80 10, 10 10))") @@ -249,7 +249,7 @@ def test_eq(self): assert coverage(g1, SRS(4326)) != coverage(g4, SRS(4326)) class TestBBOXCoverage(object): - def setup(self): + def setup_method(self): self.coverage = coverage([-10, 10, 80, 80], SRS(4326)) def test_bbox(self): @@ -300,7 +300,7 @@ def test_eq(self): class TestUnionCoverage(object): - def setup(self): + def setup_method(self): self.coverage = union_coverage([ coverage([0, 0, 10, 10], SRS(4326)), coverage(shapely.wkt.loads("POLYGON((10 0, 20 0, 20 10, 10 10, 10 0))"), SRS(4326)), @@ -323,7 +323,7 @@ def test_intersects(self): class TestDiffCoverage(object): - def setup(self): + def setup_method(self): g1 = coverage(shapely.wkt.loads("POLYGON((-10 0, 20 0, 20 10, -10 10, -10 0))"), SRS(4326)) g2 = coverage([0, 2, 8, 8], SRS(4326)) g3 = coverage(shapely.wkt.loads("POLYGON((-1000000 500000, 0 500000, 0 1000000, -1000000 1000000, -1000000 500000))"), SRS(3857)) @@ -346,7 +346,7 @@ def test_intersects(self): class TestIntersectionCoverage(object): - def setup(self): + def setup_method(self): g1 = coverage(shapely.wkt.loads("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"), SRS(4326)) g2 = coverage([5, 5, 15, 15], SRS(4326)) self.coverage = intersection_coverage([g1, g2]) @@ -365,7 +365,7 @@ def test_intersects(self): class TestMultiCoverage(object): - def setup(self): + def setup_method(self): # box from 10 10 to 80 80 with small spike/corner to -10 60 (upper left) self.geom = shapely.wkt.loads( "POLYGON((10 10, 10 50, -10 60, 10 80, 80 80, 80 10, 10 10))") @@ -405,7 +405,7 @@ def test_eq(self): class TestMapExtent(object): - def setup(self): + def setup_method(self): self.extent = MapExtent([-10, 10, 80, 80], SRS(4326)) def test_bbox(self): diff --git a/mapproxy/test/unit/test_grid.py b/mapproxy/test/unit/test_grid.py index b319a3e13..cdab161ee 100644 --- a/mapproxy/test/unit/test_grid.py +++ b/mapproxy/test/unit/test_grid.py @@ -137,7 +137,7 @@ def test_metagrid_tiles_w_meta_size(): ((2, 2, 2), (512, 256)), ((3, 2, 2), (768, 256))] class TestMetaGridGeodetic(object): - def setup(self): + def setup_method(self): self.mgrid = MetaGrid(grid=tile_grid('EPSG:4326'), meta_size=(2, 2), meta_buffer=10) def test_meta_bbox_level_0(self): @@ -219,7 +219,7 @@ def test_tiles_level_3(self): ]) class TestMetaGridGeodeticUL(object): - def setup(self): + def setup_method(self): self.tile_grid = tile_grid('EPSG:4326', origin='ul') self.mgrid = MetaGrid(grid=self.tile_grid, meta_size=(2, 2), meta_buffer=10) @@ -294,7 +294,7 @@ def test_tiles_level_3(self): class TestMetaTile(object): - def setup(self): + def setup_method(self): self.mgrid = MetaGrid(grid=tile_grid('EPSG:4326'), meta_size=(2, 2), meta_buffer=10) def test_meta_tile(self): meta_tile = self.mgrid.meta_tile((2, 0, 2)) @@ -317,7 +317,7 @@ def test_metatile_non_default_meta_size(self): assert meta_tile.grid_size == (4, 2) class TestMetaTileSQRT2(object): - def setup(self): + def setup_method(self): self.grid = tile_grid('EPSG:4326', res_factor='sqrt2') self.mgrid = MetaGrid(grid=self.grid, meta_size=(4, 4), meta_buffer=10) def test_meta_tile(self): @@ -357,7 +357,7 @@ def test_metatile_non_default_meta_size(self): class TestMinimalMetaTile(object): - def setup(self): + def setup_method(self): self.mgrid = MetaGrid(grid=tile_grid('EPSG:4326'), meta_size=(2, 2), meta_buffer=10) def test_minimal_tiles(self): @@ -411,7 +411,7 @@ def test_minimal_tiles_fragmented_ul(self): class TestMetaGridLevelMetaTiles(object): - def setup(self): + def setup_method(self): self.meta_grid = MetaGrid(TileGrid(), meta_size=(2, 2)) def test_full_grid_0(self): @@ -439,7 +439,7 @@ def test_full_grid_2(self): assert meta_tiles[3] == (2, 0, 2) class TestMetaGridLevelMetaTilesGeodetic(object): - def setup(self): + def setup_method(self): self.meta_grid = MetaGrid(TileGrid(is_geodetic=True), meta_size=(2, 2)) def test_full_grid_2(self): @@ -502,7 +502,7 @@ def test_sqrt_grid(self): class TestWGS84TileGrid(object): - def setup(self): + def setup_method(self): self.grid = TileGrid(is_geodetic=True) def test_resolution(self): @@ -534,7 +534,7 @@ def test_affected_level_tiles(self): assert list(tiles) == [(2, 1, 2), (3, 1, 2)] class TestWGS83TileGridUL(object): - def setup(self): + def setup_method(self): self.grid = TileGrid(4326, bbox=(-180, -90, 180, 90), origin='ul') def test_resolution(self): @@ -585,7 +585,7 @@ def test_affected_level_tiles(self): assert bbox == (0.0, -90.0, 180.0, 90.0) class TestGKTileGrid(TileGridTest): - def setup(self): + def setup_method(self): self.grid = TileGrid(SRS(31467), bbox=(3250000, 5230000, 3930000, 6110000)) def test_bbox(self): @@ -638,7 +638,7 @@ class TestGKTileGridUL(TileGridTest): """ Custom grid with ul origin. """ - def setup(self): + def setup_method(self): self.grid = TileGrid(SRS(31467), bbox=(3300000, 5300000, 3900000, 6000000), origin='ul', res=[1500, 1000, 500, 300, 150, 100]) @@ -688,7 +688,7 @@ def test_adjacent_tile_bbox(self): class TestClosestLevelTinyResFactor(object): - def setup(self): + def setup_method(self): self.grid = TileGrid(SRS(31467), bbox=[420000,30000,900000,350000], origin='ul', res=[4000,3750,3500,3250,3000,2750,2500,2250,2000,1750,1500,1250,1000,750,650,500,250,100,50,20,10,5,2.5,2,1.5,1,0.5], @@ -780,7 +780,7 @@ def test_custom_res_without_match(self): assert grid.supports_access_with_origin('ul') class TestFixedResolutionsTileGrid(TileGridTest): - def setup(self): + def setup_method(self): self.res = [1000.0, 500.0, 200.0, 100.0, 50.0, 20.0, 5.0] bbox = (3250000, 5230000, 3930000, 6110000) self.grid = TileGrid(SRS(31467), bbox=bbox, res=self.res) @@ -838,7 +838,7 @@ def test_tile_bbox(self): assert tile_bbox == (3250000.0, 5230000.0, 3301200.0, 5281200.0) class TestGeodeticTileGrid(TileGridTest): - def setup(self): + def setup_method(self): self.grid = TileGrid(is_geodetic=True, ) def test_auto_resolution(self): grid = TileGrid(is_geodetic=True, bbox=(-10, 30, 10, 40), tile_size=(20, 20)) diff --git a/mapproxy/test/unit/test_image.py b/mapproxy/test/unit/test_image.py index d4b62468d..a40462be0 100644 --- a/mapproxy/test/unit/test_image.py +++ b/mapproxy/test/unit/test_image.py @@ -61,10 +61,10 @@ class TestImageSource(object): - def setup(self): + def setup_method(self): self.tmp_filename = create_tmp_image_file((100, 100)) - def teardown(self): + def teardown_method(self): os.remove(self.tmp_filename) def test_from_filename(self): @@ -254,7 +254,7 @@ def __iter__(self): class TestReadBufWrapper(object): - def setup(self): + def setup_method(self): rbuf = ROnly() self.rbuf_wrapper = ReadBufWrapper(rbuf) @@ -291,7 +291,7 @@ def test_hasattr(self): class TestMergeAll(object): - def setup(self): + def setup_method(self): self.cleanup_tiles = [] def test_full_merge(self): @@ -347,7 +347,7 @@ def test_none_merge(self): assert img.size == (100, 100) assert img.getcolors() == [(100 * 100, (200, 100, 30, 40))] - def teardown(self): + def teardown_method(self): for tile_fname in self.cleanup_tiles: if tile_fname and os.path.isfile(tile_fname): os.remove(tile_fname) @@ -355,13 +355,13 @@ def teardown(self): class TestGetCrop(object): - def setup(self): + def setup_method(self): self.tmp_file = create_tmp_image_file((100, 100), two_colored=True) self.img = ImageSource( self.tmp_file, image_opts=ImageOptions(format="image/png"), size=(100, 100) ) - def teardown(self): + def teardown_method(self): if os.path.exists(self.tmp_file): os.remove(self.tmp_file) @@ -540,7 +540,7 @@ def test_composite_merge_opacity(self): class TestTransform(object): - def setup(self): + def setup_method(self): self.src_img = ImageSource(create_debug_img((200, 200), transparent=False)) self.src_srs = SRS(31467) self.dst_size = (100, 150) @@ -861,7 +861,7 @@ def test_peek_format(self, format, expected_format): class TestBandMerge(object): - def setup(self): + def setup_method(self): self.img0 = ImageSource(Image.new("RGB", (10, 10), (0, 10, 20))) self.img1 = ImageSource(Image.new("RGB", (10, 10), (100, 110, 120))) self.img2 = ImageSource(Image.new("RGB", (10, 10), (200, 210, 220))) diff --git a/mapproxy/test/unit/test_image_mask.py b/mapproxy/test/unit/test_image_mask.py index 4abad9a97..14f55d2e8 100644 --- a/mapproxy/test/unit/test_image_mask.py +++ b/mapproxy/test/unit/test_image_mask.py @@ -133,7 +133,7 @@ def test_shapely_mask_with_transform_partial_image_transparent(self): class TestLayerCoverageMerge(object): - def setup(self): + def setup_method(self): self.coverage1 = coverage( Polygon([(0, 0), (0, 10), (10, 10), (10, 0)]), 3857 ) diff --git a/mapproxy/test/unit/test_image_messages.py b/mapproxy/test/unit/test_image_messages.py index b7ddbab42..6d00c126c 100644 --- a/mapproxy/test/unit/test_image_messages.py +++ b/mapproxy/test/unit/test_image_messages.py @@ -156,7 +156,7 @@ def test_transparent(self): class TestWatermarkTileFilter(object): - def setup(self): + def setup_method(self): self.tile = Tile((0, 0, 0)) self.filter = watermark_filter("Test") diff --git a/mapproxy/test/unit/test_request.py b/mapproxy/test/unit/test_request.py index 2476a35bd..8df2b288c 100644 --- a/mapproxy/test/unit/test_request.py +++ b/mapproxy/test/unit/test_request.py @@ -149,7 +149,7 @@ def __init__(self, args, url=""): class TestWMSMapRequest(object): - def setup(self): + def setup_method(self): self.base_req = url_decode( """SERVICE=WMS&format=image%2Fpng&layers=foo&styles=& REQUEST=GetMap&height=300&srs=EPSG%3A4326&VERSION=1.1.1& @@ -161,8 +161,8 @@ def setup(self): class TestWMS100MapRequest(TestWMSMapRequest): - def setup(self): - TestWMSMapRequest.setup(self) + def setup_method(self): + TestWMSMapRequest.setup_method(self) del self.base_req["service"] del self.base_req["version"] self.base_req["wmtver"] = "1.0.0" @@ -184,8 +184,8 @@ def test_basic_request(self): class TestWMS130MapRequest(TestWMSMapRequest): - def setup(self): - TestWMSMapRequest.setup(self) + def setup_method(self): + TestWMSMapRequest.setup_method(self) self.base_req["version"] = "1.3.0" self.base_req["crs"] = self.base_req["srs"] del self.base_req["srs"] @@ -221,8 +221,8 @@ def test_copy_with_request_params(self): class TestWMS111FeatureInfoRequest(TestWMSMapRequest): - def setup(self): - TestWMSMapRequest.setup(self) + def setup_method(self): + TestWMSMapRequest.setup_method(self) self.base_req["request"] = "GetFeatureInfo" self.base_req["x"] = "100" self.base_req["y"] = "150" @@ -368,7 +368,7 @@ def test_endpoint_urls(self, url, expected): class TestRequest(object): - def setup(self): + def setup_method(self): self.env = { "HTTP_HOST": "localhost:5050", "PATH_INFO": "/service", @@ -461,7 +461,7 @@ def test_maprequest_from_request(): class TestWMSMapRequestParams(object): - def setup(self): + def setup_method(self): self.m = WMSMapRequestParams( url_decode( "layers=bar&bBOx=-90,-80,70.0, 80&format=image/png" @@ -620,7 +620,7 @@ class TestWMSRequest(object): ) ) - def setup(self): + def setup_method(self): self.req = Request(self.env) def test_valid_request(self): @@ -654,7 +654,7 @@ def test_blank_exception_handler(self): class TestSRSAxisOrder(object): - def setup(self): + def setup_method(self): params111 = url_decode( """LAYERS=foo&FORMAT=image%2Fjpeg&SERVICE=WMS& VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_xml& diff --git a/mapproxy/test/unit/test_seed.py b/mapproxy/test/unit/test_seed.py index bdd917507..1c454a833 100644 --- a/mapproxy/test/unit/test_seed.py +++ b/mapproxy/test/unit/test_seed.py @@ -71,7 +71,7 @@ def is_cached(self, tile,dimensions=None): class TestSeeder(object): - def setup(self): + def setup_method(self): self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.source = TiledSource(self.grid, None) self.tile_mgr = TileManager( diff --git a/mapproxy/test/unit/test_tiled_source.py b/mapproxy/test/unit/test_tiled_source.py index 1f461cd96..2b25daad6 100644 --- a/mapproxy/test/unit/test_tiled_source.py +++ b/mapproxy/test/unit/test_tiled_source.py @@ -29,7 +29,7 @@ class TestTileClientOnError(object): - def setup(self): + def setup_method(self): self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.client = TileClient(TileURLTemplate(TESTSERVER_URL)) diff --git a/mapproxy/test/unit/test_utils.py b/mapproxy/test/unit/test_utils.py index d0437d159..c10ce0327 100644 --- a/mapproxy/test/unit/test_utils.py +++ b/mapproxy/test/unit/test_utils.py @@ -40,14 +40,14 @@ class TestFileLock(Mocker): - def setup(self): - Mocker.setup(self) + def setup_method(self): + Mocker.setup_method(self) self.lock_dir = tempfile.mkdtemp() self.lock_file = os.path.join(self.lock_dir, "lock.lck") - def teardown(self): + def teardown_method(self): shutil.rmtree(self.lock_dir) - Mocker.teardown(self) + Mocker.teardown_method(self) def test_file_lock_timeout(self): lock = self._create_lock() @@ -174,11 +174,11 @@ def assert_locked(lock_file, timeout=0.02, step=0.001): class TestSemLock(object): - def setup(self): + def setup_method(self): self.lock_dir = tempfile.mkdtemp() self.lock_file = os.path.join(self.lock_dir, "lock.lck") - def teardown(self): + def teardown_method(self): shutil.rmtree(self.lock_dir) def count_lockfiles(self): @@ -252,10 +252,10 @@ def test_load(self): class DirTest(object): - def setup(self): + def setup_method(self): self.tmpdir = tempfile.mkdtemp() - def teardown(self): + def teardown_method(self): if os.path.exists(self.tmpdir): shutil.rmtree(self.tmpdir) @@ -417,10 +417,10 @@ def _write_atomic_data(i_filename): class TestWriteAtomic(object): - def setup(self): + def setup_method(self): self.dirname = tempfile.mkdtemp() - def teardown(self): + def teardown_method(self): if self.dirname: shutil.rmtree(self.dirname) diff --git a/mapproxy/test/unit/test_yaml.py b/mapproxy/test/unit/test_yaml.py index 11f5b0505..547a5a865 100644 --- a/mapproxy/test/unit/test_yaml.py +++ b/mapproxy/test/unit/test_yaml.py @@ -22,10 +22,10 @@ class TestLoadYAMLFile(object): - def setup(self): + def setup_method(self): self.tmp_files = [] - def teardown(self): + def teardown_method(self): for f in self.tmp_files: os.unlink(f) From cbd8cbdb10edc5d3eb478a92b9cfe3505c405317 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Oct 2023 20:24:20 +0000 Subject: [PATCH 195/209] Bump pytz from 2020.1 to 2023.3.post1 Bumps [pytz](https://github.com/stub42/pytz) from 2020.1 to 2023.3.post1. - [Commits](https://github.com/stub42/pytz/compare/release_2020.1...release_2023.3.post1) --- updated-dependencies: - dependency-name: pytz dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 8886dfd82..2a0452cd6 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -59,7 +59,7 @@ pytest==7.4.2 pytest-rerunfailures==12.0 python-dateutil==2.8.2 python-jose==3.3.0 -pytz==2020.1 +pytz==2023.3.post1 redis==4.5.4 requests==2.31.0 responses==0.23.3 From 390a7b56b49182b6f190452e2a52fe6cd3b102ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Oct 2023 20:24:25 +0000 Subject: [PATCH 196/209] Bump pytest from 7.4.2 to 7.4.3 Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.2 to 7.4.3. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/7.4.2...7.4.3) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-appveyor.txt | 2 +- requirements-tests.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements-appveyor.txt b/requirements-appveyor.txt index 2ce46299d..de7987f4a 100644 --- a/requirements-appveyor.txt +++ b/requirements-appveyor.txt @@ -1,4 +1,4 @@ WebTest==3.0.0 -pytest==7.4.2 +pytest==7.4.3 WebOb==1.8.7 requests==2.28.2 diff --git a/requirements-tests.txt b/requirements-tests.txt index 8886dfd82..55b40f600 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -55,7 +55,7 @@ pyproj==2.6.1.post1;python_version in "3.7 3.8" pyproj==3.3.1;python_version in "3.9 3.10" pyproj==3.5.0;python_version>"3.10" pyrsistent==0.19.3 -pytest==7.4.2 +pytest==7.4.3 pytest-rerunfailures==12.0 python-dateutil==2.8.2 python-jose==3.3.0 From 96d6bb82b83e64cbe049bd2d5fb2ce7d3eda2cd9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Oct 2023 20:13:07 +0000 Subject: [PATCH 197/209] Bump wrapt from 1.12.1 to 1.15.0 Bumps [wrapt](https://github.com/GrahamDumpleton/wrapt) from 1.12.1 to 1.15.0. - [Changelog](https://github.com/GrahamDumpleton/wrapt/blob/develop/docs/changes.rst) - [Commits](https://github.com/GrahamDumpleton/wrapt/compare/1.12.1...1.15.0) --- updated-dependencies: - dependency-name: wrapt dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index f3f04453d..93b5a8177 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -74,6 +74,6 @@ urllib3==1.26.18 waitress==2.1.2 websocket-client==1.6.1 werkzeug==1.0.1 -wrapt==1.12.1 +wrapt==1.15.0 xmltodict==0.13.0 zipp==3.15.0 From c7b62679dfb2b777c93d0cdbc497b85efd1231dc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Oct 2023 20:13:15 +0000 Subject: [PATCH 198/209] Bump cryptography from 41.0.4 to 41.0.5 Bumps [cryptography](https://github.com/pyca/cryptography) from 41.0.4 to 41.0.5. - [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pyca/cryptography/compare/41.0.4...41.0.5) --- updated-dependencies: - dependency-name: cryptography dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index f3f04453d..12da043d7 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -19,7 +19,7 @@ certifi==2023.7.22 cffi==1.15.1; cfn-lint==0.80.3 chardet==5.2.0 -cryptography==41.0.4 +cryptography==41.0.5 decorator==4.4.2 docker==6.1.3 docutils==0.20.1 From 7986fc46efe8db298e6e6e471753978cc9f87e79 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Oct 2023 20:31:10 +0000 Subject: [PATCH 199/209] Bump mock from 4.0.2 to 5.1.0 Bumps [mock](https://github.com/testing-cabal/mock) from 4.0.2 to 5.1.0. - [Changelog](https://github.com/testing-cabal/mock/blob/master/CHANGELOG.rst) - [Commits](https://github.com/testing-cabal/mock/compare/4.0.2...5.1.0) --- updated-dependencies: - dependency-name: mock dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 4e5fceca3..9e20be39b 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -36,7 +36,7 @@ jsonpointer==2.4 jsonschema==3.2.0 junit-xml==1.9 lxml==4.9.3 -mock==4.0.2 +mock==5.1.0 more-itertools==8.4.0 moto==4.2.4 networkx==3.1;python_version>="3.9" From 7ab6032405fce9dae58d14c7419bab17a98f2544 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Oct 2023 20:31:15 +0000 Subject: [PATCH 200/209] Bump aws-xray-sdk from 2.6.0 to 2.12.1 Bumps [aws-xray-sdk](https://github.com/aws/aws-xray-sdk-python) from 2.6.0 to 2.12.1. - [Release notes](https://github.com/aws/aws-xray-sdk-python/releases) - [Changelog](https://github.com/aws/aws-xray-sdk-python/blob/master/CHANGELOG.rst) - [Commits](https://github.com/aws/aws-xray-sdk-python/compare/2.6.0...2.12.1) --- updated-dependencies: - dependency-name: aws-xray-sdk dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 4e5fceca3..ff8c12742 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -10,7 +10,7 @@ WebTest==3.0.0 attrs==19.3.0;python_version<"3.10" attrs==23.1.0;python_version>="3.10" aws-sam-translator==1.75.0 -aws-xray-sdk==2.6.0 +aws-xray-sdk==2.12.1 beautifulsoup4==4.12.2 boto3==1.26.112 boto==2.49.0 From 581115749699630781c05c9309fd3d743b6211df Mon Sep 17 00:00:00 2001 From: SHLOMIKO Date: Wed, 15 Nov 2023 18:02:12 +0200 Subject: [PATCH 201/209] added implementation for redis cache load_tile_metadata --- mapproxy/cache/redis.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/mapproxy/cache/redis.py b/mapproxy/cache/redis.py index 882511669..cede90438 100644 --- a/mapproxy/cache/redis.py +++ b/mapproxy/cache/redis.py @@ -16,6 +16,8 @@ from __future__ import absolute_import import hashlib +import datetime +import time from mapproxy.image import ImageSource from mapproxy.cache.base import ( @@ -90,6 +92,16 @@ def store_tile(self, tile, dimensions=None): self.r.pexpire(key, int(self.ttl * 1000)) return r + def load_tile_metadata(self, tile, dimensions=None): + if tile.timestamp: + return + pipe = self.r.pipeline() + pipe.ttl(self._key(tile)) + pipe.memory_usage(self._key(tile)) + pipe_res = pipe.execute() + tile.timestamp = time.mktime(datetime.datetime.now().timetuple()) - self.ttl - int(pipe_res[0]) + tile.size = pipe_res[1] + def load_tile(self, tile, with_metadata=False, dimensions=None): if tile.source or tile.coord is None: return True From 38340501dd186e37c92244e1e80f7e3dc7d4c41b Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Thu, 23 Nov 2023 16:42:40 +0100 Subject: [PATCH 202/209] Fixup tests for latest pillow --- mapproxy/test/unit/test_exceptions.py | 3 +- mapproxy/test/unit/test_image_messages.py | 34 ++++++++++++----------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/mapproxy/test/unit/test_exceptions.py b/mapproxy/test/unit/test_exceptions.py index e47d9b199..979453c7f 100644 --- a/mapproxy/test/unit/test_exceptions.py +++ b/mapproxy/test/unit/test_exceptions.py @@ -206,9 +206,10 @@ def test_exception_w_transparent(self): assert is_png(data) img = Image.open(data) assert img.size == (150, 100) - assert sorted([x for x in img.histogram() if x > 25]) == [377, 14623] img = img.convert('RGBA') assert img.getpixel((0, 0))[3] == 0 + extrema = img.getextrema() + assert extrema != ((255, 255), (255, 255), (255, 255), (0, 0)) class TestWMSBlankExceptionHandler(ExceptionHandlerTest): diff --git a/mapproxy/test/unit/test_image_messages.py b/mapproxy/test/unit/test_image_messages.py index b7ddbab42..6f2cd40b2 100644 --- a/mapproxy/test/unit/test_image_messages.py +++ b/mapproxy/test/unit/test_image_messages.py @@ -44,8 +44,8 @@ def test_multiline_ul(self): img = Image.new("RGB", (100, 100)) draw = ImageDraw.Draw(img) total_box, boxes = td.text_boxes(draw, (100, 100)) - assert total_box == (5, 5, 35, 30) - assert boxes == [(5, 5, 35, 16), (5, 19, 35, 30)] + assert total_box == (5, 7, 33, 28) + assert boxes == [(5, 7, 30, 15), (5, 20, 33, 28)] def test_multiline_lr(self): font = ImageFont.load_default() @@ -53,8 +53,8 @@ def test_multiline_lr(self): img = Image.new("RGB", (100, 100)) draw = ImageDraw.Draw(img) total_box, boxes = td.text_boxes(draw, (100, 100)) - assert total_box == (65, 70, 95, 95) - assert boxes == [(65, 70, 95, 81), (65, 84, 95, 95)] + assert total_box == (67, 76, 95, 97) + assert boxes == [(67, 76, 92, 84), (67, 89, 95, 97)] def test_multiline_center(self): font = ImageFont.load_default() @@ -62,8 +62,8 @@ def test_multiline_center(self): img = Image.new("RGB", (100, 100)) draw = ImageDraw.Draw(img) total_box, boxes = td.text_boxes(draw, (100, 100)) - assert total_box == (35, 38, 65, 63) - assert boxes == [(35, 38, 65, 49), (35, 52, 65, 63)] + assert total_box == (36, 42, 64, 63) + assert boxes == [(36, 42, 61, 50), (36, 55, 64, 63)] def test_unicode(self): font = ImageFont.load_default() @@ -71,8 +71,8 @@ def test_unicode(self): img = Image.new("RGB", (100, 100)) draw = ImageDraw.Draw(img) total_box, boxes = td.text_boxes(draw, (100, 100)) - assert total_box == (35, 38, 65, 63) - assert boxes == [(35, 38, 65, 49), (35, 52, 65, 63)] + assert total_box == (36, 42, 64, 63) + assert boxes == [(36, 42, 60, 50), (36, 55, 64, 63)] def _test_all(self): for x in "c": @@ -99,9 +99,12 @@ def test_transparent(self): img = Image.new("RGBA", (100, 100), (0, 0, 0, 0)) draw = ImageDraw.Draw(img) td.draw(draw, img.size) + # override the alpha value as pillow >= 10.1.0 uses a new default font with transparency + img.putalpha(255) + assert len(img.getcolors()) == 2 # top color (bg) is transparent - assert sorted(img.getcolors())[1][1] == (0, 0, 0, 0) + assert sorted(img.getcolors())[1][1] == (0, 0, 0, 255) class TestMessageImage(object): @@ -125,16 +128,15 @@ def test_message(self): image_opts = PNG_FORMAT.copy() image_opts.bgcolor = "#113399" img = message_image("test", size=(100, 150), image_opts=image_opts) + text_pixels = 75 + image_pixels = 100 * 150 assert isinstance(img, ImageSource) assert img.size == (100, 150) - # 6 values in histogram (3xRGB for background, 3xRGB for text message) + # expect the large histogram count values to be the amount of background pixels assert [x for x in img.as_image().histogram() if x > 10] == [ - 14923, - 77, - 14923, - 77, - 14923, - 77, + image_pixels - text_pixels, + image_pixels - text_pixels, + image_pixels - text_pixels, ] def test_transparent(self): From 3e9833424695ca6306365d58ab877e0b8ef729ee Mon Sep 17 00:00:00 2001 From: Johannes Weskamm Date: Thu, 23 Nov 2023 17:06:42 +0100 Subject: [PATCH 203/209] Remove python 3.7 support as its EOL --- .github/workflows/test.yml | 2 +- doc/install.rst | 2 +- doc/install_windows.rst | 2 +- requirements-tests.txt | 7 ++----- setup.py | 1 - 5 files changed, 5 insertions(+), 9 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bd7bc60b3..20f16038c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,7 +33,7 @@ jobs: strategy: matrix: - python-version: [3.7, 3.8, 3.9, "3.10", "3.11"] + python-version: [3.8, 3.9, "3.10", "3.11"] env: MAPPROXY_TEST_COUCHDB: 'http://localhost:5984' diff --git a/doc/install.rst b/doc/install.rst index 68cd4a156..df5a87210 100644 --- a/doc/install.rst +++ b/doc/install.rst @@ -39,7 +39,7 @@ This will change the ``PATH`` for your `current` session. Install Dependencies -------------------- -MapProxy is written in Python, thus you will need a working Python installation. MapProxy works with Python 3.7 or higher, which should already be installed with most Linux distributions. +MapProxy is written in Python, thus you will need a working Python installation. MapProxy works with Python 3.8 or higher, which should already be installed with most Linux distributions. MapProxy requires a few third-party libraries that are required to run. There are different ways to install each dependency. Read :ref:`dependency_details` for a list of all required and optional dependencies. diff --git a/doc/install_windows.rst b/doc/install_windows.rst index 3498e1b63..0e58a84c3 100644 --- a/doc/install_windows.rst +++ b/doc/install_windows.rst @@ -1,7 +1,7 @@ Installation on Windows ======================= -At first you need a working Python installation. You can download Python from: https://www.python.org/download/. MapProxy requires Python 3.7 or higher. +At first you need a working Python installation. You can download Python from: https://www.python.org/download/. MapProxy requires Python 3.8 or higher. Virtualenv ---------- diff --git a/requirements-tests.txt b/requirements-tests.txt index e449d432c..be3d7df19 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -1,8 +1,7 @@ azure-storage-blob>=12.9.0 Jinja2==2.11.3 MarkupSafe==1.1.1 -Pillow==9.5.0;python_version<"3.8" -Pillow==10.0.1;python_version>="3.8" +Pillow==10.0.1 PyYAML==6.0.1 WebOb==1.8.7 Shapely==2.0.1 @@ -41,17 +40,15 @@ more-itertools==8.4.0 moto==4.2.4 networkx==3.1;python_version>="3.9" networkx==2.8.7;python_version=="3.8" -networkx==2.6;python_version<"3.8" numpy==1.26.0;python_version>="3.9" numpy==1.24.0;python_version=="3.8" -numpy==1.21.0;python_version<"3.8" packaging==23.2 pluggy==0.13.1 py==1.11.0 pyasn1==0.5.0 pycparser==2.20 pyparsing==2.4.7 -pyproj==2.6.1.post1;python_version in "3.7 3.8" +pyproj==2.6.1.post1;python_version=="3.8" pyproj==3.3.1;python_version in "3.9 3.10" pyproj==3.5.0;python_version>"3.10" pyrsistent==0.19.3 diff --git a/setup.py b/setup.py index 7688e3697..ce80b7ba5 100644 --- a/setup.py +++ b/setup.py @@ -75,7 +75,6 @@ def long_description(changelog_releases=10): "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", From f6f48c42e11afb1a471dee1a5a200073b76e45fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Nov 2023 16:17:28 +0000 Subject: [PATCH 204/209] Bump zipp from 3.15.0 to 3.17.0 Bumps [zipp](https://github.com/jaraco/zipp) from 3.15.0 to 3.17.0. - [Release notes](https://github.com/jaraco/zipp/releases) - [Changelog](https://github.com/jaraco/zipp/blob/main/NEWS.rst) - [Commits](https://github.com/jaraco/zipp/compare/v3.15.0...v3.17.0) --- updated-dependencies: - dependency-name: zipp dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 8ddf011ad..4386647d5 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -73,4 +73,4 @@ websocket-client==1.6.1 werkzeug==1.0.1 wrapt==1.15.0 xmltodict==0.13.0 -zipp==3.15.0 +zipp==3.17.0 From 9074594be69d47704cb7f959d5547662091e7be6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Nov 2023 16:18:21 +0000 Subject: [PATCH 205/209] Bump more-itertools from 8.4.0 to 10.1.0 Bumps [more-itertools](https://github.com/more-itertools/more-itertools) from 8.4.0 to 10.1.0. - [Release notes](https://github.com/more-itertools/more-itertools/releases) - [Commits](https://github.com/more-itertools/more-itertools/compare/v8.4.0...v10.1.0) --- updated-dependencies: - dependency-name: more-itertools dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index 8ddf011ad..81aa9d74e 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -36,7 +36,7 @@ jsonschema==3.2.0 junit-xml==1.9 lxml==4.9.3 mock==5.1.0 -more-itertools==8.4.0 +more-itertools==10.1.0 moto==4.2.4 networkx==3.1;python_version>="3.9" networkx==2.8.7;python_version=="3.8" From a2501884e7f338dea44828be93fb0f501c0e4c83 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Nov 2023 20:44:50 +0000 Subject: [PATCH 206/209] Bump pyparsing from 2.4.7 to 3.1.1 Bumps [pyparsing](https://github.com/pyparsing/pyparsing) from 2.4.7 to 3.1.1. - [Release notes](https://github.com/pyparsing/pyparsing/releases) - [Changelog](https://github.com/pyparsing/pyparsing/blob/master/CHANGES) - [Commits](https://github.com/pyparsing/pyparsing/compare/pyparsing_2.4.7...3.1.1) --- updated-dependencies: - dependency-name: pyparsing dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index f3fd04467..01a8abaa8 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -47,7 +47,7 @@ pluggy==0.13.1 py==1.11.0 pyasn1==0.5.0 pycparser==2.20 -pyparsing==2.4.7 +pyparsing==3.1.1 pyproj==2.6.1.post1;python_version=="3.8" pyproj==3.3.1;python_version in "3.9 3.10" pyproj==3.5.0;python_version>"3.10" From 4a393b0242177489ca9e9d636f434d5a725fe7be Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Nov 2023 20:44:58 +0000 Subject: [PATCH 207/209] Bump redis from 4.5.4 to 5.0.1 Bumps [redis](https://github.com/redis/redis-py) from 4.5.4 to 5.0.1. - [Release notes](https://github.com/redis/redis-py/releases) - [Changelog](https://github.com/redis/redis-py/blob/master/CHANGES) - [Commits](https://github.com/redis/redis-py/compare/v4.5.4...v5.0.1) --- updated-dependencies: - dependency-name: redis dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index f3fd04467..1656fad10 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -57,7 +57,7 @@ pytest-rerunfailures==12.0 python-dateutil==2.8.2 python-jose==3.3.0 pytz==2023.3.post1 -redis==4.5.4 +redis==5.0.1 requests==2.31.0 responses==0.23.3 riak==2.7.0 From 6b09cf32b9b67f08742ec19af288bf00053a75ac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Nov 2023 20:45:04 +0000 Subject: [PATCH 208/209] Bump pytest-rerunfailures from 12.0 to 13.0 Bumps [pytest-rerunfailures](https://github.com/pytest-dev/pytest-rerunfailures) from 12.0 to 13.0. - [Changelog](https://github.com/pytest-dev/pytest-rerunfailures/blob/master/CHANGES.rst) - [Commits](https://github.com/pytest-dev/pytest-rerunfailures/compare/12.0...13.0) --- updated-dependencies: - dependency-name: pytest-rerunfailures dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index f3fd04467..61416fb15 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -53,7 +53,7 @@ pyproj==3.3.1;python_version in "3.9 3.10" pyproj==3.5.0;python_version>"3.10" pyrsistent==0.19.3 pytest==7.4.3 -pytest-rerunfailures==12.0 +pytest-rerunfailures==13.0 python-dateutil==2.8.2 python-jose==3.3.0 pytz==2023.3.post1 From 949a02d34dbefe552d624f855271964fa8bd61a4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Nov 2023 20:45:24 +0000 Subject: [PATCH 209/209] Bump importlib-metadata from 1.7.0 to 5.2.0 Bumps [importlib-metadata](https://github.com/python/importlib_metadata) from 1.7.0 to 5.2.0. - [Release notes](https://github.com/python/importlib_metadata/releases) - [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst) - [Commits](https://github.com/python/importlib_metadata/compare/v1.7.0...v5.2.0) --- updated-dependencies: - dependency-name: importlib-metadata dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-tests.txt b/requirements-tests.txt index f3fd04467..b47be187b 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -25,7 +25,7 @@ docutils==0.20.1 ecdsa==0.18.0 future==0.18.3 idna==2.8 -importlib-metadata==1.7.0 +importlib-metadata==5.2.0 iniconfig==2.0.0 jmespath==0.10.0 jsondiff==1.3.1