From b44e2ab52b810700a9b51b9c0bde06a47ea45cb2 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 8 May 2024 13:26:41 +0200 Subject: [PATCH 001/301] AVCBin: avoid integer overflow (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=68814) --- ogr/ogrsf_frmts/avc/ogravcbinlayer.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ogr/ogrsf_frmts/avc/ogravcbinlayer.cpp b/ogr/ogrsf_frmts/avc/ogravcbinlayer.cpp index 1705714a1243..f2e9bf93b96b 100644 --- a/ogr/ogrsf_frmts/avc/ogravcbinlayer.cpp +++ b/ogr/ogrsf_frmts/avc/ogravcbinlayer.cpp @@ -31,6 +31,7 @@ #include "cpl_conv.h" #include "cpl_string.h" +#include #include /************************************************************************/ @@ -277,8 +278,11 @@ bool OGRAVCBinLayer::FormPolygonGeometry(OGRFeature *poFeature, AVCPal *psPAL) for (int iArc = 0; iArc < psPAL->numArcs; iArc++) { - if (psPAL->pasArcs[iArc].nArcId == 0) + if (psPAL->pasArcs[iArc].nArcId == 0 || + psPAL->pasArcs[iArc].nArcId == INT_MIN) + { continue; + } // If the other side of the line is the same polygon then this // arc is a "bridge" arc and can be discarded. If we don't discard From a82046dfbcc30e4a256c3f2869b0e0d4ff24e2d8 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 8 May 2024 18:14:30 +0200 Subject: [PATCH 002/301] PDF: fix build with PoDoFo >= 0.10 with C++20 compilation (fixes #9875) --- frmts/pdf/pdfsdk_headers.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/frmts/pdf/pdfsdk_headers.h b/frmts/pdf/pdfsdk_headers.h index 9c58b7e569cc..77d7a438de6e 100644 --- a/frmts/pdf/pdfsdk_headers.h +++ b/frmts/pdf/pdfsdk_headers.h @@ -104,6 +104,13 @@ #endif #ifdef USE_HACK_BECAUSE_PdfInputStream_constructor_is_not_exported_in_podofo_0_11 +// If we is included after our below #define private public errors out +// with an error like: +// /usr/include/c++/13.2.1/sstream:457:7: error: 'struct std::__cxx11::basic_stringbuf<_CharT, _Traits, _Alloc>::__xfer_bufptrs' redeclared with different access +// 457 | struct __xfer_bufptrs +// so include it before, as otherwise it would get indirectly included by +// PdfDate.h, which includes , which includes +#include // Ugly! PfdObjectStream::GetParent() is private but we need it... #define private public #endif From 25cfe3b8459b81c130c25435b4d7e4b3a4809976 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 8 May 2024 18:17:26 +0200 Subject: [PATCH 003/301] cpl_recode.cpp / swq_op_general.cpp: fix compiler errors in C++20 mode --- ogr/swq_op_general.cpp | 13 ++++++++----- port/cpl_recode.cpp | 7 +++++-- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/ogr/swq_op_general.cpp b/ogr/swq_op_general.cpp index 89e3bb4209fa..544c715dda66 100644 --- a/ogr/swq_op_general.cpp +++ b/ogr/swq_op_general.cpp @@ -130,18 +130,21 @@ int swq_test_like(const char *input, const char *pattern, char chEscape, return true; }; - const auto pattern_codepoint_size = - utf8codepointcalcsize(pattern); + const auto pattern_codepoint_size = utf8codepointcalcsize( + reinterpret_cast(pattern)); if (!IsStringLongEnough(pattern, pattern_codepoint_size)) return 0; utf8_int32_t pattern_codepoint = 0; - utf8codepoint(pattern, &pattern_codepoint); + utf8codepoint(reinterpret_cast(pattern), + &pattern_codepoint); - const auto input_codepoint_size = utf8codepointcalcsize(input); + const auto input_codepoint_size = utf8codepointcalcsize( + reinterpret_cast(input)); if (!IsStringLongEnough(input, input_codepoint_size)) return 0; utf8_int32_t input_codepoint = 0; - utf8codepoint(input, &input_codepoint); + utf8codepoint(reinterpret_cast(input), + &input_codepoint); if (!(input_codepoint == pattern_codepoint || utf8uprcodepoint(input_codepoint) == diff --git a/port/cpl_recode.cpp b/port/cpl_recode.cpp index 9d881070e804..e22f5d6e095e 100644 --- a/port/cpl_recode.cpp +++ b/port/cpl_recode.cpp @@ -1070,9 +1070,12 @@ char *CPLUTF8ForceToASCII(const char *pszStr, char chReplacementChar) if (*reinterpret_cast(pszPtr) > 127) { utf8_int32_t codepoint; - if (pszPtr + utf8codepointcalcsize(pszPtr) > pszEnd) + if (pszPtr + utf8codepointcalcsize( + reinterpret_cast(pszPtr)) > + pszEnd) break; - auto pszNext = utf8codepoint(pszPtr, &codepoint); + auto pszNext = reinterpret_cast(utf8codepoint( + reinterpret_cast(pszPtr), &codepoint)); char ch = chReplacementChar; for (const auto &latin1char : aLatinCharacters) { From 21d5378656ebe7c36f459ddc97397eec6e207000 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 8 May 2024 19:04:25 +0200 Subject: [PATCH 004/301] netCDF: fix build error with gcc 13.2 -std=c++23 --- frmts/netcdf/netcdfvirtual.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frmts/netcdf/netcdfvirtual.h b/frmts/netcdf/netcdfvirtual.h index c3adf58c2c7b..bad04850d344 100644 --- a/frmts/netcdf/netcdfvirtual.h +++ b/frmts/netcdf/netcdfvirtual.h @@ -137,8 +137,7 @@ class netCDFVGeneralAttribute : public netCDFVAttribute VClass value; public: - netCDFVGeneralAttribute(const char *a_name, - const VClass *a_value) + netCDFVGeneralAttribute(const char *a_name, const VClass *a_value) : name(a_name), value(*a_value) { } From 178491b633915a07a1bab6772739610615098d81 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 8 May 2024 18:49:44 +0200 Subject: [PATCH 005/301] VRT: avoid 'Deprecate implicit capture of this via [=]' warnings in C++20 --- frmts/vrt/gdaltileindexdataset.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/frmts/vrt/gdaltileindexdataset.cpp b/frmts/vrt/gdaltileindexdataset.cpp index 62960a17ccf5..8b22de4b8546 100644 --- a/frmts/vrt/gdaltileindexdataset.cpp +++ b/frmts/vrt/gdaltileindexdataset.cpp @@ -3367,7 +3367,11 @@ CPLErr GDALTileIndexDataset::IRasterIO(GDALRWFlag eRWFlag, int nXOff, int nYOff, const bool bNeedInitBuffer = NeedInitBuffer(nBandCount, panBandMap); - const auto RenderSource = [=](SourceDesc &oSourceDesc) + const auto RenderSource = [this, bNeedInitBuffer, nBandNrMax, nXOff, nYOff, + nXSize, nYSize, dfXOff, dfYOff, dfXSize, dfYSize, + nBufXSize, nBufYSize, pData, eBufType, + nBandCount, panBandMap, nPixelSpace, nLineSpace, + nBandSpace, psExtraArg](SourceDesc &oSourceDesc) { auto &poTileDS = oSourceDesc.poDS; auto &poSource = oSourceDesc.poSource; From 54cf2a2d3e2aa1d3c7c25a0db14679926ae29fe9 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 8 May 2024 18:50:06 +0200 Subject: [PATCH 006/301] Workaround various false-positive -Wnull-dereference warnings in C++23 -O2 with gcc 13.1 --- apps/sozip.cpp | 7 +++++++ frmts/grib/gribdataset.cpp | 7 +++++++ frmts/wcs/wcsdataset110.cpp | 7 +++++++ frmts/zarr/zarr_array.cpp | 14 ++++++++++++++ ogr/ogrsf_frmts/elastic/ogrelasticlayer.cpp | 8 +++++++- ogr/ogrsf_frmts/libkml/ogrlibkmlfield.cpp | 7 +++++++ third_party/LercLib/BitStuffer2.cpp | 14 ++++++++++++++ 7 files changed, 63 insertions(+), 1 deletion(-) diff --git a/apps/sozip.cpp b/apps/sozip.cpp index f5d6f10a149f..1381e158ba1d 100644 --- a/apps/sozip.cpp +++ b/apps/sozip.cpp @@ -623,7 +623,14 @@ MAIN_START(nArgc, papszArgv) if (!bVerbose && !bQuiet) { +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnull-dereference" +#endif anFileSizes.resize(aosFiles.size()); +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif for (size_t i = 0; i < aosFiles.size(); ++i) { if (VSIStatL(aosFiles[i].c_str(), &sBuf) == 0) diff --git a/frmts/grib/gribdataset.cpp b/frmts/grib/gribdataset.cpp index 5b1a7db85a5b..b4d7867c794e 100644 --- a/frmts/grib/gribdataset.cpp +++ b/frmts/grib/gribdataset.cpp @@ -2021,7 +2021,14 @@ void GRIBArray::Finalize(GRIBGroup *poGroup, inventoryType *psInv) attr->Write("validity_time"); } +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnull-dereference" +#endif m_dims.insert(m_dims.begin(), poDimTime); +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif if (m_poSRS) { auto mapping = m_poSRS->GetDataAxisToSRSAxisMapping(); diff --git a/frmts/wcs/wcsdataset110.cpp b/frmts/wcs/wcsdataset110.cpp index 2a6b48215888..d722a2ff9270 100644 --- a/frmts/wcs/wcsdataset110.cpp +++ b/frmts/wcs/wcsdataset110.cpp @@ -390,7 +390,14 @@ bool WCSDataset110::ExtractGridInfo() { CPLString s = offset_1.back(); offset_1.erase(offset_1.end() - 1); +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnull-dereference" +#endif offset_2.insert(offset_2.begin(), s); +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif } std::vector> offsets; if (swap) diff --git a/frmts/zarr/zarr_array.cpp b/frmts/zarr/zarr_array.cpp index 0d585ba9c4de..a8df5696947a 100644 --- a/frmts/zarr/zarr_array.cpp +++ b/frmts/zarr/zarr_array.cpp @@ -1063,9 +1063,16 @@ bool ZarrArray::IRead(const GUInt64 *arrayStartIdx, const size_t *count, // Make sure that arrayStep[i] are positive for sake of simplicity if (negativeStep) { +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnull-dereference" +#endif arrayStartIdxMod.resize(nDims); arrayStepMod.resize(nDims); bufferStrideMod.resize(nDims); +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif for (size_t i = 0; i < nDims; ++i) { if (arrayStep[i] < 0) @@ -1558,9 +1565,16 @@ bool ZarrArray::IWrite(const GUInt64 *arrayStartIdx, const size_t *count, // Make sure that arrayStep[i] are positive for sake of simplicity if (negativeStep) { +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnull-dereference" +#endif arrayStartIdxMod.resize(nDims); arrayStepMod.resize(nDims); bufferStrideMod.resize(nDims); +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif for (size_t i = 0; i < nDims; ++i) { if (arrayStep[i] < 0) diff --git a/ogr/ogrsf_frmts/elastic/ogrelasticlayer.cpp b/ogr/ogrsf_frmts/elastic/ogrelasticlayer.cpp index ebfbdeea7799..f47da0d58cf1 100644 --- a/ogr/ogrsf_frmts/elastic/ogrelasticlayer.cpp +++ b/ogr/ogrsf_frmts/elastic/ogrelasticlayer.cpp @@ -205,9 +205,15 @@ OGRElasticLayer::OGRElasticLayer(const char *pszLayerName, { OGRFieldDefn oFieldDefn("_index", OFTString); poFeatureDefn->AddFieldDefn(&oFieldDefn); +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnull-dereference" +#endif m_aaosFieldPaths.insert(m_aaosFieldPaths.begin(), std::vector()); - +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif for (auto &kv : m_aosMapToFieldIndex) { kv.second++; diff --git a/ogr/ogrsf_frmts/libkml/ogrlibkmlfield.cpp b/ogr/ogrsf_frmts/libkml/ogrlibkmlfield.cpp index 128374446585..2fa024ac50ec 100644 --- a/ogr/ogrsf_frmts/libkml/ogrlibkmlfield.cpp +++ b/ogr/ogrsf_frmts/libkml/ogrlibkmlfield.cpp @@ -822,7 +822,14 @@ void field2kml(OGRFeature *poOgrFeat, OGRLIBKMLLayer *poOgrLayer, { if (!poKmlExtendedData) poKmlExtendedData = poKmlFactory->CreateExtendedData(); +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnull-dereference" +#endif poKmlExtendedData->add_data(poKmlData); +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif } } diff --git a/third_party/LercLib/BitStuffer2.cpp b/third_party/LercLib/BitStuffer2.cpp index 426abd75f3c1..ee9e61a0ee2a 100644 --- a/third_party/LercLib/BitStuffer2.cpp +++ b/third_party/LercLib/BitStuffer2.cpp @@ -232,7 +232,14 @@ bool BitStuffer2::Decode(const Byte** ppByte, size_t& nBytesRemaining, vector= m_tmpLutVec.size()) From 727c930ee1097ed320decf7ee30fb85075f21bc0 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 8 May 2024 19:00:48 +0200 Subject: [PATCH 007/301] GMLAS: fix gcc 13.2 warning Avoids ``` In file included from /usr/include/c++/13.2.1/ios:42, from /usr/include/c++/13.2.1/ostream:40, from /usr/include/c++/13.2.1/bits/unique_ptr.h:42, from /usr/include/c++/13.2.1/memory:78, from /home/even/gdal/gdal/port/cpl_error.h:255, from /home/even/gdal/gdal/port/cpl_string.h:35, from /home/even/gdal/gdal/ogr/ogr_xerces.h:36, from /home/even/gdal/gdal/ogr/ogrsf_frmts/gmlas/ogr_gmlas.h:35, from /home/even/gdal/gdal/ogr/ogrsf_frmts/gmlas/ogrgmlasutils.cpp:31: In static member function 'static constexpr std::char_traits::char_type* std::char_traits::copy(char_type*, const char_type*, std::size_t)', inlined from 'static constexpr void std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::_S_copy(_CharT*, const _CharT*, size_type) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator]' at /usr/include/c++/13.2.1/bits/basic_string.h:430:21, inlined from 'constexpr void std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::_M_mutate(size_type, size_type, const _CharT*, size_type) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator]' at /usr/include/c++/13.2.1/bits/basic_string.tcc:335:15, inlined from 'constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator>& std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::_M_replace_aux(size_type, size_type, size_type, _CharT) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator]' at /usr/include/c++/13.2.1/bits/basic_string.tcc:468:17, inlined from 'constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>& std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::append(size_type, _CharT) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator]' at /usr/include/c++/13.2.1/bits/basic_string.h:1488:30, inlined from 'constexpr void std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::resize(size_type, _CharT) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator]' at /usr/include/c++/13.2.1/bits/basic_string.tcc:405:14, inlined from 'constexpr void std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::resize(size_type) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator]' at /usr/include/c++/13.2.1/bits/basic_string.h:1114:21, inlined from 'CPLString OGRGMLASAddSerialNumber(const CPLString&, int, size_t, int)' at /home/even/gdal/gdal/ogr/ogrsf_frmts/gmlas/ogrgmlasutils.cpp:205:26: /usr/include/c++/13.2.1/bits/char_traits.h:435:56: error: 'void* __builtin_memcpy(void*, const void*, long unsigned int)' accessing 9223372036854775808 or more bytes at offsets 0 and 0 may overlap up to 9223372036854775809 bytes at offset -1 [-Werror=restrict] 435 | return static_cast(__builtin_memcpy(__s1, __s2, __n)); | ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ cc1plus: all warnings being treated as errors ``` --- ogr/ogrsf_frmts/gmlas/ogrgmlasutils.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ogr/ogrsf_frmts/gmlas/ogrgmlasutils.cpp b/ogr/ogrsf_frmts/gmlas/ogrgmlasutils.cpp index 910b98501417..67a106a624a2 100644 --- a/ogr/ogrsf_frmts/gmlas/ogrgmlasutils.cpp +++ b/ogr/ogrsf_frmts/gmlas/ogrgmlasutils.cpp @@ -201,7 +201,10 @@ CPLString OGRGMLASAddSerialNumber(const CPLString &osNameIn, int iOccurrence, } else { - osName.resize(osName.size() - nDigitsSize); + const int nTruncatedSize = + static_cast(osName.size()) - nDigitsSize; + if (nTruncatedSize >= 0) + osName.resize(nTruncatedSize); osName += szDigits; } } From 66c11d5a7a6307702a30241e37ff315292750ad3 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 8 May 2024 18:17:40 +0200 Subject: [PATCH 008/301] .github/workflows/alpine/build.sh: use CMAKE_CXX_STANDARD=23 --- .github/workflows/alpine/build.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/alpine/build.sh b/.github/workflows/alpine/build.sh index 9cbdfc622841..a8585c270765 100755 --- a/.github/workflows/alpine/build.sh +++ b/.github/workflows/alpine/build.sh @@ -21,7 +21,8 @@ cmake ${GDAL_SOURCE_DIR:=..} \ -DIconv_INCLUDE_DIR=/usr/include/gnu-libiconv \ -DIconv_LIBRARY=/usr/lib/libiconv.so \ -DADD_EXTERNAL_DEFERRED_PLUGIN_FOO=/tmp/foo.cpp \ - -DCMAKE_C_FLAGS=-Werror -DCMAKE_CXX_FLAGS="-std=c++23 -Werror" -DWERROR_DEV_FLAG="-Werror=dev" + -DCMAKE_CXX_STANDARD=23 \ + -DCMAKE_C_FLAGS=-Werror -DCMAKE_CXX_FLAGS="-Werror" -DWERROR_DEV_FLAG="-Werror=dev" make -j$(nproc) make -j$(nproc) install DESTDIR=/tmp/install-gdal From 645bfcee816ac001d92d04523b217ad2c00ad043 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 9 May 2024 18:15:05 +0200 Subject: [PATCH 009/301] [Backport release/3.9] /vsis3/: include AWS_CONTAINER_CREDENTIALS_TOKEN in container credentials flow (#9881) This PR extends the [container credentials](https://docs.aws.amazon.com/sdkref/latest/guide/feature-container-credentials.html) functionality of `vsis3` to cover more cases, particularly [EKS Pod Identities](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html). Two additional environment variables are now considered in the container credentials flow: `AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE` and `AWS_CONTAINER_AUTHORIZATION_TOKEN`, with the former taking precedence over the latter (as described in AWS SDK documentation). In addition to the included tests, I have tested the `AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE`-based credential flow in practice on EKS. --- autotest/gcore/vsis3.py | 150 ++++++++++++++++++++++++++++++++++++++++ port/cpl_aws.cpp | 55 ++++++++++++--- 2 files changed, 194 insertions(+), 11 deletions(-) diff --git a/autotest/gcore/vsis3.py b/autotest/gcore/vsis3.py index 1be6a17ffef4..5594a5141a95 100755 --- a/autotest/gcore/vsis3.py +++ b/autotest/gcore/vsis3.py @@ -5273,6 +5273,156 @@ def test_vsis3_read_credentials_AWS_CONTAINER_CREDENTIALS_FULL_URI( assert data == "foo" +############################################################################### +# Read credentials from simulated instance with AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE + + +@pytest.mark.skipif(sys.platform not in ("linux", "win32"), reason="Incorrect platform") +def test_vsis3_read_credentials_AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE( + tmp_vsimem, aws_test_config, webserver_port +): + options = { + "CPL_AWS_CREDENTIALS_FILE": "", + "AWS_CONFIG_FILE": "", + "AWS_SECRET_ACCESS_KEY": "", + "AWS_ACCESS_KEY_ID": "", + # Disable hypervisor related check to test if we are really on EC2 + "CPL_AWS_AUTODETECT_EC2": "NO", + "CPL_AWS_WEB_IDENTITY_ENABLE": "NO", + "AWS_CONTAINER_CREDENTIALS_FULL_URI": f"http://localhost:{webserver_port}/AWS_CONTAINER_CREDENTIALS_FULL_URI", + "AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE": f"{tmp_vsimem}/container_authorization_token_file", + "AWS_CONTAINER_AUTHORIZATION_TOKEN": "invalid", + } + + gdal.VSICurlClearCache() + + gdal.FileFromMemBuffer(tmp_vsimem / "container_authorization_token_file", "valid\n") + + handler = webserver.SequentialHandler() + + def method(request): + request.protocol_version = "HTTP/1.1" + + if "Authorization" not in request.headers: + sys.stderr.write("Bad headers: %s\n" % str(request.headers)) + request.send_response(403) + return + expected_authorization = "valid" + actual_authorization = request.headers["Authorization"] + if actual_authorization != expected_authorization: + sys.stderr.write("Bad Authorization: '%s'\n" % str(actual_authorization)) + request.send_response(403) + return + + auth_response = """{ + "AccessKeyId": "AWS_ACCESS_KEY_ID", + "SecretAccessKey": "AWS_SECRET_ACCESS_KEY", + "Expiration": "3000-01-01T00:00:00Z" + }""".encode( + "ascii" + ) + + request.send_response(200) + request.send_header("Content-type", "application/json") + request.send_header("Content-Length", len(auth_response)) + request.end_headers() + + request.wfile.write(auth_response) + + handler.add( + "GET", + "/AWS_CONTAINER_CREDENTIALS_FULL_URI", + custom_method=method, + ) + handler.add( + "GET", + "/s3_fake_bucket/resource", + custom_method=get_s3_fake_bucket_resource_method, + ) + with webserver.install_http_handler(handler): + with gdaltest.config_options(options, thread_local=False): + f = open_for_read("/vsis3/s3_fake_bucket/resource") + assert f is not None + data = gdal.VSIFReadL(1, 4, f).decode("ascii") + gdal.VSIFCloseL(f) + + assert data == "foo" + + +############################################################################### +# Read credentials from simulated instance with AWS_CONTAINER_AUTHORIZATION_TOKEN + + +@pytest.mark.skipif(sys.platform not in ("linux", "win32"), reason="Incorrect platform") +def test_vsis3_read_credentials_AWS_CONTAINER_AUTHORIZATION_TOKEN( + aws_test_config, webserver_port +): + options = { + "CPL_AWS_CREDENTIALS_FILE": "", + "AWS_CONFIG_FILE": "", + "AWS_SECRET_ACCESS_KEY": "", + "AWS_ACCESS_KEY_ID": "", + # Disable hypervisor related check to test if we are really on EC2 + "CPL_AWS_AUTODETECT_EC2": "NO", + "CPL_AWS_WEB_IDENTITY_ENABLE": "NO", + "AWS_CONTAINER_CREDENTIALS_FULL_URI": f"http://localhost:{webserver_port}/AWS_CONTAINER_CREDENTIALS_FULL_URI", + "AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE": "", + "AWS_CONTAINER_AUTHORIZATION_TOKEN": "valid", + } + + gdal.VSICurlClearCache() + + handler = webserver.SequentialHandler() + + def method(request): + request.protocol_version = "HTTP/1.1" + + if "Authorization" not in request.headers: + sys.stderr.write("Bad headers: %s\n" % str(request.headers)) + request.send_response(403) + return + expected_authorization = "valid" + actual_authorization = request.headers["Authorization"] + if actual_authorization != expected_authorization: + sys.stderr.write("Bad Authorization: '%s'\n" % str(actual_authorization)) + request.send_response(403) + return + + auth_response = """{ + "AccessKeyId": "AWS_ACCESS_KEY_ID", + "SecretAccessKey": "AWS_SECRET_ACCESS_KEY", + "Expiration": "3000-01-01T00:00:00Z" + }""".encode( + "ascii" + ) + + request.send_response(200) + request.send_header("Content-type", "application/json") + request.send_header("Content-Length", len(auth_response)) + request.end_headers() + + request.wfile.write(auth_response) + + handler.add( + "GET", + "/AWS_CONTAINER_CREDENTIALS_FULL_URI", + custom_method=method, + ) + handler.add( + "GET", + "/s3_fake_bucket/resource", + custom_method=get_s3_fake_bucket_resource_method, + ) + with webserver.install_http_handler(handler): + with gdaltest.config_options(options, thread_local=False): + f = open_for_read("/vsis3/s3_fake_bucket/resource") + assert f is not None + data = gdal.VSIFReadL(1, 4, f).decode("ascii") + gdal.VSIFCloseL(f) + + assert data == "foo" + + ############################################################################### # Read credentials from an assumed role diff --git a/port/cpl_aws.cpp b/port/cpl_aws.cpp index 550a2b8df1c7..de5c7478ed10 100644 --- a/port/cpl_aws.cpp +++ b/port/cpl_aws.cpp @@ -664,24 +664,22 @@ static EC2InstanceCertainty IsMachinePotentiallyEC2Instance() } /************************************************************************/ -/* ReadAWSWebIdentityTokenFile() */ +/* ReadAWSTokenFile() */ /************************************************************************/ -static bool -ReadAWSWebIdentityTokenFile(const std::string &osWebIdentityTokenFile, - std::string &webIdentityToken) +static bool ReadAWSTokenFile(const std::string &osAWSTokenFile, + std::string &awsToken) { GByte *pabyOut = nullptr; - if (!VSIIngestFile(nullptr, osWebIdentityTokenFile.c_str(), &pabyOut, - nullptr, -1)) + if (!VSIIngestFile(nullptr, osAWSTokenFile.c_str(), &pabyOut, nullptr, -1)) return false; - webIdentityToken = reinterpret_cast(pabyOut); + awsToken = reinterpret_cast(pabyOut); VSIFree(pabyOut); // Remove trailing end-of-line character - if (!webIdentityToken.empty() && webIdentityToken.back() == '\n') - webIdentityToken.resize(webIdentityToken.size() - 1); - return !webIdentityToken.empty(); + if (!awsToken.empty() && awsToken.back() == '\n') + awsToken.resize(awsToken.size() - 1); + return !awsToken.empty(); } /************************************************************************/ @@ -753,7 +751,7 @@ bool VSIS3HandleHelper::GetConfigurationFromAssumeRoleWithWebIdentity( // Get token from web identity token file std::string webIdentityToken; - if (!ReadAWSWebIdentityTokenFile(webIdentityTokenFile, webIdentityToken)) + if (!ReadAWSTokenFile(webIdentityTokenFile, webIdentityToken)) { CPLDebug("AWS", "%s is empty", webIdentityTokenFile.c_str()); return false; @@ -859,6 +857,36 @@ bool VSIS3HandleHelper::GetConfigurationFromEC2( osPathForOption.c_str(), "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI", "") : std::string()); + // coverity[tainted_data] + const std::string osECSTokenFile( + (osECSFullURI.empty() && osECSRelativeURI.empty()) + ? std::string() + : VSIGetPathSpecificOption(osPathForOption.c_str(), + "AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE", + "")); + + // coverity[tainted_data] + const std::string osECSTokenValue( + (osECSFullURI.empty() && osECSRelativeURI.empty() && + !osECSTokenFile.empty()) + ? std::string() + : VSIGetPathSpecificOption(osPathForOption.c_str(), + "AWS_CONTAINER_AUTHORIZATION_TOKEN", + "")); + + std::string osECSToken; + if (!osECSTokenFile.empty()) + { + if (!ReadAWSTokenFile(osECSTokenFile, osECSToken)) + { + CPLDebug("AWS", "%s is empty", osECSTokenFile.c_str()); + } + } + else if (!osECSTokenValue.empty()) + { + osECSToken = osECSTokenValue; + } + std::string osToken; if (!osECSFullURI.empty()) { @@ -997,6 +1025,11 @@ bool VSIS3HandleHelper::GetConfigurationFromEC2( aosOptions.SetNameValue( "HEADERS", ("X-aws-ec2-metadata-token: " + osToken).c_str()); } + else if (!osECSToken.empty()) + { + aosOptions.SetNameValue("HEADERS", + ("Authorization: " + osECSToken).c_str()); + } CPLHTTPResult *psResult = CPLHTTPFetch(osURLRefreshCredentials.c_str(), aosOptions.List()); if (psResult) From cb760705a8cbefaf8e03fc42f18e889f712bd433 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 9 May 2024 18:15:24 +0200 Subject: [PATCH 010/301] [Backport release/3.9] MiraMonVector: adding which polygon cycles the linestring in the linestring metadata information (#9885) --- .../miramon/mm_gdal_driver_structs.h | 2 +- ogr/ogrsf_frmts/miramon/mm_wrlayr.c | 22 +++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/ogr/ogrsf_frmts/miramon/mm_gdal_driver_structs.h b/ogr/ogrsf_frmts/miramon/mm_gdal_driver_structs.h index bed01816f032..663cf23b335b 100644 --- a/ogr/ogrsf_frmts/miramon/mm_gdal_driver_structs.h +++ b/ogr/ogrsf_frmts/miramon/mm_gdal_driver_structs.h @@ -280,7 +280,7 @@ struct MiraMonVectorMetaData { char *szLayerTitle; char *aLayerName; - char *aArcFile; // Polygon's arc name + char *aArcFile; // Polygon's arc name or arc's polygon name. int ePlainLT; // Plain layer type (no 3D specified): MM_LayerType_Point, // MM_LayerType_Arc, MM_LayerType_Node, MM_LayerType_Pol char *pSRS; // EPSG code of the spatial reference system. diff --git a/ogr/ogrsf_frmts/miramon/mm_wrlayr.c b/ogr/ogrsf_frmts/miramon/mm_wrlayr.c index 57a5a053ece8..b49d1cc67d1d 100644 --- a/ogr/ogrsf_frmts/miramon/mm_wrlayr.c +++ b/ogr/ogrsf_frmts/miramon/mm_wrlayr.c @@ -5584,15 +5584,23 @@ static int MMWriteMetadataFile(struct MiraMonVectorMetaData *hMMMD) } } - // Writing OVERVIEW:ASPECTES_TECNICS in polygon metadata file. - // ArcSource=fitx_pol.arc - if (hMMMD->ePlainLT == MM_LayerType_Pol) + if (hMMMD->ePlainLT == MM_LayerType_Pol && hMMMD->aArcFile) { + // Writing OVERVIEW:ASPECTES_TECNICS in polygon metadata file. + // ArcSource=fitx_pol.arc fprintf_function(pF, LineReturn "[%s]" LineReturn, SECTION_OVVW_ASPECTES_TECNICS); fprintf_function(pF, "%s=\"%s\"" LineReturn, KEY_ArcSource, hMMMD->aArcFile); } + else if (hMMMD->ePlainLT == MM_LayerType_Arc && hMMMD->aArcFile) + { + // Writing OVERVIEW:ASPECTES_TECNICS in arc metadata file. + // Ciclat1=fitx_arc.pol + fprintf_function(pF, LineReturn "[%s]" LineReturn, + SECTION_OVVW_ASPECTES_TECNICS); + fprintf_function(pF, "Ciclat1=\"%s\"" LineReturn, hMMMD->aArcFile); + } // Writing EXTENT section fprintf_function(pF, LineReturn "[%s]" LineReturn, SECTION_EXTENT); @@ -5846,6 +5854,8 @@ static int MMWriteVectorMetadataFile(struct MiraMonVectLayerInfo *hMiraMonLayer, } else if (layerPlainType == MM_LayerType_Arc) { + int nResult; + // Arcs and not polygons if (layerMainPlainType == MM_LayerType_Arc) { @@ -5868,7 +5878,11 @@ static int MMWriteVectorMetadataFile(struct MiraMonVectLayerInfo *hMiraMonLayer, sizeof(hMMMD.hBB)); hMMMD.pLayerDB = nullptr; } - return MMWriteMetadataFile(&hMMMD); + hMMMD.aArcFile = strdup_function( + get_filename_function(hMiraMonLayer->MMPolygon.pszLayerName)); + nResult = MMWriteMetadataFile(&hMMMD); + free_function(hMMMD.aArcFile); + return nResult; } else if (layerPlainType == MM_LayerType_Pol) { From 1bd7fe597965a6872a6af2b7377d46e8358cfe75 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 7 May 2024 18:47:58 +0200 Subject: [PATCH 011/301] PDF: C++'ify m_papoLayers member --- frmts/pdf/gdal_pdf.h | 5 +- frmts/pdf/pdfdataset.cpp | 4 +- frmts/pdf/pdfreadvectors.cpp | 90 ++++++++++++++++-------------------- 3 files changed, 43 insertions(+), 56 deletions(-) diff --git a/frmts/pdf/gdal_pdf.h b/frmts/pdf/gdal_pdf.h index 80f7ab18f0f6..bd535b890d19 100644 --- a/frmts/pdf/gdal_pdf.h +++ b/frmts/pdf/gdal_pdf.h @@ -360,8 +360,7 @@ class PDFDataset final : public GDALPamDataset const char *pszDefaultVal); bool m_bHasLoadedLayers = false; - int m_nLayers = 0; - OGRLayer **m_papoLayers = nullptr; + std::vector> m_apoLayers{}; double m_dfPageWidth = 0; double m_dfPageHeight = 0; @@ -399,7 +398,7 @@ class PDFDataset final : public GDALPamDataset OGRGeometry *BuildGeometry(std::vector &oCoords, int bHasFoundFill, int bHasMultiPart); - int OpenVectorLayers(GDALPDFDictionary *poPageDict); + bool OpenVectorLayers(GDALPDFDictionary *poPageDict); void InitOverviews(); diff --git a/frmts/pdf/pdfdataset.cpp b/frmts/pdf/pdfdataset.cpp index 497ec3e2ad1b..bdc809b3363c 100644 --- a/frmts/pdf/pdfdataset.cpp +++ b/frmts/pdf/pdfdataset.cpp @@ -2656,9 +2656,7 @@ PDFDataset::~PDFDataset() CleanupIntermediateResources(); - for (int i = 0; i < m_nLayers; i++) - delete m_papoLayers[i]; - CPLFree(m_papoLayers); + m_apoLayers.clear(); // Do that only after having destroyed Poppler objects m_fp.reset(); diff --git a/frmts/pdf/pdfreadvectors.cpp b/frmts/pdf/pdfreadvectors.cpp index fbd36f84b671..32b00e5b78b5 100644 --- a/frmts/pdf/pdfreadvectors.cpp +++ b/frmts/pdf/pdfreadvectors.cpp @@ -44,36 +44,36 @@ constexpr int BEZIER_STEPS = 10; /* OpenVectorLayers() */ /************************************************************************/ -int PDFDataset::OpenVectorLayers(GDALPDFDictionary *poPageDict) +bool PDFDataset::OpenVectorLayers(GDALPDFDictionary *poPageDict) { if (m_bHasLoadedLayers) - return TRUE; + return true; m_bHasLoadedLayers = true; if (poPageDict == nullptr) { poPageDict = m_poPageObj->GetDictionary(); if (poPageDict == nullptr) - return FALSE; + return false; } GetCatalog(); if (m_poCatalogObject == nullptr || m_poCatalogObject->GetType() != PDFObjectType_Dictionary) - return FALSE; + return false; GDALPDFObject *poContents = poPageDict->Get("Contents"); if (poContents == nullptr) - return FALSE; + return false; if (poContents->GetType() != PDFObjectType_Dictionary && poContents->GetType() != PDFObjectType_Array) - return FALSE; + return false; GDALPDFObject *poResources = poPageDict->Get("Resources"); if (poResources == nullptr || poResources->GetType() != PDFObjectType_Dictionary) - return FALSE; + return false; GDALPDFObject *poStructTreeRoot = m_poCatalogObject->GetDictionary()->Get("StructTreeRoot"); @@ -109,12 +109,12 @@ int PDFDataset::OpenVectorLayers(GDALPDFDictionary *poPageDict) CleanupIntermediateResources(); - int bEmptyDS = TRUE; - for (int i = 0; i < m_nLayers; i++) + bool bEmptyDS = true; + for (auto &poLayer : m_apoLayers) { - if (m_papoLayers[i]->GetFeatureCount() != 0) + if (poLayer->GetFeatureCount(false) != 0) { - bEmptyDS = FALSE; + bEmptyDS = false; break; } } @@ -241,10 +241,10 @@ OGRLayer *PDFDataset::GetLayer(int iLayer) { OpenVectorLayers(nullptr); - if (iLayer < 0 || iLayer >= m_nLayers) + if (iLayer < 0 || iLayer >= static_cast(m_apoLayers.size())) return nullptr; - return m_papoLayers[iLayer]; + return m_apoLayers[iLayer].get(); } /************************************************************************/ @@ -254,7 +254,7 @@ OGRLayer *PDFDataset::GetLayer(int iLayer) int PDFDataset::GetLayerCount() { OpenVectorLayers(nullptr); - return m_nLayers; + return static_cast(m_apoLayers.size()); } /************************************************************************/ @@ -338,22 +338,20 @@ bool PDFDataset::ExploreTree(GDALPDFObject *poObj, if (!osS.empty()) osLayerName = std::move(osS); else - osLayerName = CPLSPrintf("Layer%d", m_nLayers + 1); + osLayerName = CPLSPrintf( + "Layer%d", static_cast(m_apoLayers.size()) + 1); } auto poSRSOri = GetSpatialRef(); OGRSpatialReference *poSRS = poSRSOri ? poSRSOri->Clone() : nullptr; - OGRPDFLayer *poLayer = - new OGRPDFLayer(this, osLayerName.c_str(), poSRS, wkbUnknown); + auto poLayer = std::make_unique( + this, osLayerName.c_str(), poSRS, wkbUnknown); if (poSRS) poSRS->Release(); poLayer->Fill(poArray); - m_papoLayers = (OGRLayer **)CPLRealloc( - m_papoLayers, (m_nLayers + 1) * sizeof(OGRLayer *)); - m_papoLayers[m_nLayers] = poLayer; - m_nLayers++; + m_apoLayers.emplace_back(std::move(poLayer)); bRet = true; } else @@ -2164,26 +2162,25 @@ void PDFDataset::ExploreContentsNonStructured(GDALPDFObject *poContents, CPLString osSanitizedName( PDFSanitizeLayerName(oLayerWithref.osName)); - OGRPDFLayer *poLayer = - (OGRPDFLayer *)GetLayerByName(osSanitizedName.c_str()); - if (poLayer == nullptr) + OGRPDFLayer *poPDFLayer = dynamic_cast( + GetLayerByName(osSanitizedName.c_str())); + if (!poPDFLayer) { auto poSRSOri = GetSpatialRef(); OGRSpatialReference *poSRS = poSRSOri ? poSRSOri->Clone() : nullptr; - poLayer = new OGRPDFLayer(this, osSanitizedName.c_str(), - poSRS, wkbUnknown); + auto poPDFLayerUniquePtr = std::make_unique( + this, osSanitizedName.c_str(), poSRS, wkbUnknown); if (poSRS) poSRS->Release(); - m_papoLayers = (OGRLayer **)CPLRealloc( - m_papoLayers, (m_nLayers + 1) * sizeof(OGRLayer *)); - m_papoLayers[m_nLayers] = poLayer; - m_nLayers++; + m_apoLayers.emplace_back(std::move(poPDFLayerUniquePtr)); + poPDFLayer = m_apoLayers.back().get(); } oMapNumGenToLayer[std::pair(oLayerWithref.nOCGNum.toInt(), - oLayerWithref.nOCGGen)] = poLayer; + oLayerWithref.nOCGGen)] = + poPDFLayer; } for (const auto &[osKey, poObj] : @@ -2212,18 +2209,15 @@ void PDFDataset::ExploreContentsNonStructured(GDALPDFObject *poContents, } OGRPDFLayer *poSingleLayer = nullptr; - if (m_nLayers == 0) + if (m_apoLayers.empty()) { if (CPLTestBool( CPLGetConfigOption("OGR_PDF_READ_NON_STRUCTURED", "NO"))) { - OGRPDFLayer *poLayer = - new OGRPDFLayer(this, "content", nullptr, wkbUnknown); - m_papoLayers = (OGRLayer **)CPLRealloc( - m_papoLayers, (m_nLayers + 1) * sizeof(OGRLayer *)); - m_papoLayers[m_nLayers] = poLayer; - m_nLayers++; - poSingleLayer = poLayer; + auto poLayer = std::make_unique(this, "content", + nullptr, wkbUnknown); + m_apoLayers.emplace_back(std::move(poLayer)); + poSingleLayer = m_apoLayers.back().get(); } else { @@ -2235,21 +2229,17 @@ void PDFDataset::ExploreContentsNonStructured(GDALPDFObject *poContents, oMapPropertyToLayer, poSingleLayer); /* Remove empty layers */ - int i = 0; - while (i < m_nLayers) + for (auto oIter = m_apoLayers.begin(); oIter != m_apoLayers.end(); + /* do nothing */) { - if (m_papoLayers[i]->GetFeatureCount() == 0) + if ((*oIter)->GetFeatureCount(false) == 0) { - delete m_papoLayers[i]; - if (i < m_nLayers - 1) - { - memmove(m_papoLayers + i, m_papoLayers + i + 1, - (m_nLayers - 1 - i) * sizeof(OGRPDFLayer *)); - } - m_nLayers--; + oIter = m_apoLayers.erase(oIter); } else - i++; + { + ++oIter; + } } } From 53895c7b0a90d8c3d6b116b722b84fd27896edef Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 7 May 2024 22:59:25 +0200 Subject: [PATCH 012/301] PDF vector reading: fix wrong order of matrix multiplication for 'cm' operator... (fixes #9870) --- frmts/pdf/pdfreadvectors.cpp | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/frmts/pdf/pdfreadvectors.cpp b/frmts/pdf/pdfreadvectors.cpp index 32b00e5b78b5..efd9c5f3e333 100644 --- a/frmts/pdf/pdfreadvectors.cpp +++ b/frmts/pdf/pdfreadvectors.cpp @@ -419,7 +419,7 @@ class GraphicState adfFillColor[2] = 1.0; } - void MultiplyBy(double adfMatrix[6]) + void PreMultiplyBy(double adfMatrix[6]) { /* [ a b 0 ] [ a' b' 0] [ aa' + bc' ab' + bd' 0 ] @@ -427,18 +427,25 @@ class GraphicState [ e f 1 ] [ e' f' 1] [ ea' + fc' + e' eb' + fd' + f' 1 ] */ - double a = adfCM[0]; - double b = adfCM[1]; - double c = adfCM[2]; - double d = adfCM[3]; - double e = adfCM[4]; - double f = adfCM[5]; - double ap = adfMatrix[0]; - double bp = adfMatrix[1]; - double cp = adfMatrix[2]; - double dp = adfMatrix[3]; - double ep = adfMatrix[4]; - double fp = adfMatrix[5]; + // Be careful about the multiplication order! + // PDF reference version 1.7, page 209: + // when a sequence of transformations is carried out, the matrix + // representing the combined transformation (M′) is calculated + // by premultiplying the matrix representing the additional transformation (MT) + // with the one representing all previously existing transformations (M) + + double a = adfMatrix[0]; + double b = adfMatrix[1]; + double c = adfMatrix[2]; + double d = adfMatrix[3]; + double e = adfMatrix[4]; + double f = adfMatrix[5]; + double ap = adfCM[0]; + double bp = adfCM[1]; + double cp = adfCM[2]; + double dp = adfCM[3]; + double ep = adfCM[4]; + double fp = adfCM[5]; adfCM[0] = a * ap + b * cp; adfCM[1] = a * bp + b * dp; adfCM[2] = c * ap + d * cp; @@ -1055,7 +1062,7 @@ OGRGeometry *PDFDataset::ParseContent( return nullptr; } - oGS.MultiplyBy(adfMatrix); + oGS.PreMultiplyBy(adfMatrix); } else if (EQUAL1(szToken, "b") || /* closepath, fill, stroke */ EQUAL2(szToken, "b*") /* closepath, eofill, stroke */) From e059561d9d496afa9447a5bd1c90517711d97c4f Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 7 May 2024 23:01:39 +0200 Subject: [PATCH 013/301] PDF vector reading: make ExploreContentsNonStructured() be able to parse OGCs in Resources.XObject.Resources.Properties as generated by ArcGIS 12.9 (fixes #9870) --- frmts/pdf/pdfreadvectors.cpp | 109 +++++++++++++++++++++++++---------- 1 file changed, 79 insertions(+), 30 deletions(-) diff --git a/frmts/pdf/pdfreadvectors.cpp b/frmts/pdf/pdfreadvectors.cpp index efd9c5f3e333..45eb7551269c 100644 --- a/frmts/pdf/pdfreadvectors.cpp +++ b/frmts/pdf/pdfreadvectors.cpp @@ -2155,43 +2155,48 @@ void PDFDataset::ExploreContentsNonStructured(GDALPDFObject *poContents, GDALPDFObject *poResources) { std::map oMapPropertyToLayer; - if (poResources != nullptr && - poResources->GetType() == PDFObjectType_Dictionary) + std::map, OGRPDFLayer *> oMapNumGenToLayer; + + const auto BuildMapNumGenToLayer = [this, &oMapNumGenToLayer]() { - GDALPDFObject *poProperties = - poResources->GetDictionary()->Get("Properties"); - if (poProperties != nullptr && - poProperties->GetType() == PDFObjectType_Dictionary) + for (const auto &oLayerWithref : m_aoLayerWithRef) { - std::map, OGRPDFLayer *> oMapNumGenToLayer; - for (const auto &oLayerWithref : m_aoLayerWithRef) + CPLString osSanitizedName( + PDFSanitizeLayerName(oLayerWithref.osName)); + + OGRPDFLayer *poPDFLayer = dynamic_cast( + GetLayerByName(osSanitizedName.c_str())); + if (!poPDFLayer) { - CPLString osSanitizedName( - PDFSanitizeLayerName(oLayerWithref.osName)); + auto poSRSOri = GetSpatialRef(); + OGRSpatialReference *poSRS = + poSRSOri ? poSRSOri->Clone() : nullptr; + auto poPDFLayerUniquePtr = std::make_unique( + this, osSanitizedName.c_str(), poSRS, wkbUnknown); + if (poSRS) + poSRS->Release(); + + m_apoLayers.emplace_back(std::move(poPDFLayerUniquePtr)); + poPDFLayer = m_apoLayers.back().get(); + } - OGRPDFLayer *poPDFLayer = dynamic_cast( - GetLayerByName(osSanitizedName.c_str())); - if (!poPDFLayer) - { - auto poSRSOri = GetSpatialRef(); - OGRSpatialReference *poSRS = - poSRSOri ? poSRSOri->Clone() : nullptr; - auto poPDFLayerUniquePtr = std::make_unique( - this, osSanitizedName.c_str(), poSRS, wkbUnknown); - if (poSRS) - poSRS->Release(); - - m_apoLayers.emplace_back(std::move(poPDFLayerUniquePtr)); - poPDFLayer = m_apoLayers.back().get(); - } + oMapNumGenToLayer[std::pair(oLayerWithref.nOCGNum.toInt(), + oLayerWithref.nOCGGen)] = poPDFLayer; + } + }; - oMapNumGenToLayer[std::pair(oLayerWithref.nOCGNum.toInt(), - oLayerWithref.nOCGGen)] = - poPDFLayer; - } + if (poResources != nullptr && + poResources->GetType() == PDFObjectType_Dictionary) + { + auto poResourcesDict = poResources->GetDictionary(); + GDALPDFObject *poTopProperties = poResourcesDict->Get("Properties"); + if (poTopProperties != nullptr && + poTopProperties->GetType() == PDFObjectType_Dictionary) + { + BuildMapNumGenToLayer(); for (const auto &[osKey, poObj] : - poProperties->GetDictionary()->GetValues()) + poTopProperties->GetDictionary()->GetValues()) { const char *pszKey = osKey.c_str(); if (poObj->GetType() == PDFObjectType_Dictionary) @@ -2213,6 +2218,50 @@ void PDFDataset::ExploreContentsNonStructured(GDALPDFObject *poContents, } } } + else + { + // Code path taken for datasets mentioned at https://github.com/OSGeo/gdal/issues/9870 + // generated by ArcGIS 12.9 + const auto poXObject = poResourcesDict->Get("XObject"); + if (poXObject && poXObject->GetType() == PDFObjectType_Dictionary) + { + for (const auto &oNameObjectPair : + poXObject->GetDictionary()->GetValues()) + { + const auto poProperties = + oNameObjectPair.second->LookupObject( + "Resources.Properties"); + if (poProperties && + poProperties->GetType() == PDFObjectType_Dictionary) + { + BuildMapNumGenToLayer(); + + const auto &oMap = + poProperties->GetDictionary()->GetValues(); + for (const auto &[osKey, poObj] : oMap) + { + const char *pszKey = osKey.c_str(); + if (poObj->GetType() == PDFObjectType_Dictionary) + { + GDALPDFObject *poType = + poObj->GetDictionary()->Get("Type"); + if (poType && + poType->GetType() == PDFObjectType_Name) + { + const auto &osType = poType->GetName(); + ExploreResourceProperty( + pszKey, poObj, osType, + oMapNumGenToLayer, oMapPropertyToLayer, + 0); + } + } + } + + break; + } + } + } + } } OGRPDFLayer *poSingleLayer = nullptr; From ce62eb0b7036b2e6e185d83903be560fd3d3c817 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 7 May 2024 23:02:30 +0200 Subject: [PATCH 014/301] PDF vector reading: just ignore unknown objects referenced by /Do (fixes #9870) --- frmts/pdf/pdfreadvectors.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/frmts/pdf/pdfreadvectors.cpp b/frmts/pdf/pdfreadvectors.cpp index 45eb7551269c..41adf73e84e7 100644 --- a/frmts/pdf/pdfreadvectors.cpp +++ b/frmts/pdf/pdfreadvectors.cpp @@ -1286,9 +1286,13 @@ OGRGeometry *PDFDataset::ParseContent( } else { - // CPLDebug("PDF", "Should not happen at line %d", - // __LINE__); - return nullptr; + szToken[0] = '\0'; + nTokenSize = 0; + + CPLDebug("PDF", + "Skipping unknown object %s at line %d", + osObjectName.c_str(), nLineNumber); + continue; } } From 080470fb8f4670c856104b8a2f1e3e4194fdca20 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 7 May 2024 23:04:21 +0200 Subject: [PATCH 015/301] PDF vector reading: add debug traces with stream line number --- frmts/pdf/pdfreadvectors.cpp | 95 ++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/frmts/pdf/pdfreadvectors.cpp b/frmts/pdf/pdfreadvectors.cpp index 41adf73e84e7..8772e4f70af4 100644 --- a/frmts/pdf/pdfreadvectors.cpp +++ b/frmts/pdf/pdfreadvectors.cpp @@ -760,6 +760,8 @@ OGRGeometry *PDFDataset::ParseContent( oLayerStack.push(nullptr); } + int nLineNumber = 0; + while ((ch = *pszContent) != '\0') { int bPushToken = FALSE; @@ -775,9 +777,24 @@ OGRGeometry *PDFDataset::ParseContent( } if (ch == 0) break; + ++nLineNumber; + if (ch == '\r' && pszContent[1] == '\n') + { + ++pszContent; + } } else if (!bInString && (ch == ' ' || ch == '\r' || ch == '\n')) { + if (ch == '\r') + { + ++nLineNumber; + if (pszContent[1] == '\n') + { + ++pszContent; + } + } + else if (ch == '\n') + ++nLineNumber; bPushToken = TRUE; } @@ -935,13 +952,23 @@ OGRGeometry *PDFDataset::ParseContent( if (pszContent[0] == 'E') pszContent += 3; else + { + CPLDebug("PDF", + "ParseContent(), line %d: return at line %d of " + "content stream", + __LINE__, nLineNumber); return nullptr; + } } else if (EQUAL3(szToken, "BDC")) { if (nTokenStackSize < 2) { CPLDebug("PDF", "not enough arguments for %s", szToken); + CPLDebug("PDF", + "ParseContent(), line %d: return at line %d of " + "content stream", + __LINE__, nLineNumber); return nullptr; } nTokenStackSize -= 2; @@ -970,6 +997,10 @@ OGRGeometry *PDFDataset::ParseContent( if (nTokenStackSize < 1) { CPLDebug("PDF", "not enough arguments for %s", szToken); + CPLDebug("PDF", + "ParseContent(), line %d: return at line %d of " + "content stream", + __LINE__, nLineNumber); return nullptr; } nTokenStackSize -= 1; @@ -1020,6 +1051,10 @@ OGRGeometry *PDFDataset::ParseContent( "PDF", "Should not happen at line %d: offset %d in stream", __LINE__, int(pszContent - pszContentIni)); + CPLDebug("PDF", + "ParseContent(), line %d: return at line %d of " + "content stream", + __LINE__, nLineNumber); return nullptr; } } @@ -1040,6 +1075,10 @@ OGRGeometry *PDFDataset::ParseContent( if (oGSStack.empty()) { CPLDebug("PDF", "not enough arguments for %s", szToken); + CPLDebug("PDF", + "ParseContent(), line %d: return at line %d " + "of content stream", + __LINE__, nLineNumber); return nullptr; } @@ -1059,6 +1098,10 @@ OGRGeometry *PDFDataset::ParseContent( "PDF", "Should not happen at line %d: offset %d in stream", __LINE__, int(pszContent - pszContentIni)); + CPLDebug("PDF", + "ParseContent(), line %d: return at line %d " + "of content stream", + __LINE__, nLineNumber); return nullptr; } @@ -1134,6 +1177,10 @@ OGRGeometry *PDFDataset::ParseContent( "PDF", "Should not happen at line %d: offset %d in stream", __LINE__, int(pszContent - pszContentIni)); + CPLDebug("PDF", + "ParseContent(), line %d: return at line %d " + "of content stream", + __LINE__, nLineNumber); return nullptr; } @@ -1159,6 +1206,10 @@ OGRGeometry *PDFDataset::ParseContent( "PDF", "Should not happen at line %d: offset %d in stream", __LINE__, int(pszContent - pszContentIni)); + CPLDebug("PDF", + "ParseContent(), line %d: return at line %d " + "of content stream", + __LINE__, nLineNumber); return nullptr; } @@ -1181,6 +1232,10 @@ OGRGeometry *PDFDataset::ParseContent( "PDF", "Should not happen at line %d: offset %d in stream", __LINE__, int(pszContent - pszContentIni)); + CPLDebug("PDF", + "ParseContent(), line %d: return at line %d " + "of content stream", + __LINE__, nLineNumber); return nullptr; } @@ -1204,6 +1259,10 @@ OGRGeometry *PDFDataset::ParseContent( "PDF", "Should not happen at line %d: offset %d in stream", __LINE__, int(pszContent - pszContentIni)); + CPLDebug("PDF", + "ParseContent(), line %d: return at line %d " + "of content stream", + __LINE__, nLineNumber); return nullptr; } @@ -1225,6 +1284,10 @@ OGRGeometry *PDFDataset::ParseContent( "PDF", "Should not happen at line %d: offset %d in stream", __LINE__, int(pszContent - pszContentIni)); + CPLDebug("PDF", + "ParseContent(), line %d: return at line %d " + "of content stream", + __LINE__, nLineNumber); return nullptr; } @@ -1255,6 +1318,10 @@ OGRGeometry *PDFDataset::ParseContent( if (nTokenStackSize == 0) { CPLDebug("PDF", "not enough arguments for %s", szToken); + CPLDebug("PDF", + "ParseContent(), line %d: return at line %d " + "of content stream", + __LINE__, nLineNumber); return nullptr; } @@ -1266,6 +1333,10 @@ OGRGeometry *PDFDataset::ParseContent( "PDF", "Should not happen at line %d: offset %d in stream", __LINE__, int(pszContent - pszContentIni)); + CPLDebug("PDF", + "ParseContent(), line %d: return at line %d " + "of content stream", + __LINE__, nLineNumber); return nullptr; } @@ -1307,6 +1378,10 @@ OGRGeometry *PDFDataset::ParseContent( "Should not happen at line %d: offset %d " "in stream", __LINE__, int(pszContent - pszContentIni)); + CPLDebug("PDF", + "ParseContent(), line %d: return at line " + "%d of content stream", + __LINE__, nLineNumber); return nullptr; } @@ -1319,6 +1394,10 @@ OGRGeometry *PDFDataset::ParseContent( "Should not happen at line %d: offset %d " "in stream", __LINE__, int(pszContent - pszContentIni)); + CPLDebug("PDF", + "ParseContent(), line %d: return at line " + "%d of content stream", + __LINE__, nLineNumber); return nullptr; } @@ -1348,6 +1427,10 @@ OGRGeometry *PDFDataset::ParseContent( "%d in stream", __LINE__, int(pszContent - pszContentIni)); + CPLDebug("PDF", + "ParseContent(), line %d: return at " + "line %d of content stream", + __LINE__, nLineNumber); return nullptr; } @@ -1377,6 +1460,10 @@ OGRGeometry *PDFDataset::ParseContent( "PDF", "Should not happen at line %d: offset %d in stream", __LINE__, int(pszContent - pszContentIni)); + CPLDebug("PDF", + "ParseContent(), line %d: return at line %d " + "of content stream", + __LINE__, nLineNumber); return nullptr; } } @@ -1400,6 +1487,10 @@ OGRGeometry *PDFDataset::ParseContent( { CPLDebug("PDF", "not enough arguments for %s", szToken); + CPLDebug("PDF", + "ParseContent(), line %d: return at line " + "%d of content stream", + __LINE__, nLineNumber); return nullptr; } nTokenStackSize -= nArgs; @@ -1464,6 +1555,10 @@ OGRGeometry *PDFDataset::ParseContent( } } + CPLDebug("PDF", "ParseContent(): reached line %d", nLineNumber); + if (!oGSStack.empty()) + CPLDebug("PDF", "GSStack not empty"); + if (nTokenStackSize != 0) { while (nTokenStackSize != 0) From 1d4f6fea90c104ec01348db4304f6b17258da170 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 7 May 2024 23:05:46 +0200 Subject: [PATCH 016/301] PDF vector reading: make GraphicState a inner class of PDFDataset --- frmts/pdf/gdal_pdf.h | 11 ++++ frmts/pdf/pdfreadvectors.cpp | 108 ++++++++++++++--------------------- 2 files changed, 55 insertions(+), 64 deletions(-) diff --git a/frmts/pdf/gdal_pdf.h b/frmts/pdf/gdal_pdf.h index bd535b890d19..23dc489654fe 100644 --- a/frmts/pdf/gdal_pdf.h +++ b/frmts/pdf/gdal_pdf.h @@ -390,6 +390,17 @@ class PDFDataset final : public GDALPamDataset int UnstackTokens(const char *pszToken, int nRequiredArgs, char aszTokenStack[TOKEN_STACK_SIZE][MAX_TOKEN_SIZE], int &nTokenStackSize, double *adfCoords); + + struct GraphicState + { + std::array adfCM = {1, 0, 0, 1, 0, 0}; + std::array adfStrokeColor = {0.0, 0.0, 0.0}; + std::array adfFillColor = {1.0, 1.0, 1.0}; + + void PreMultiplyBy(double adfMatrix[6]); + void ApplyMatrix(double adfCoords[2]) const; + }; + OGRGeometry * ParseContent(const char *pszContent, GDALPDFObject *poResources, int bInitBDCStack, int bMatchQ, diff --git a/frmts/pdf/pdfreadvectors.cpp b/frmts/pdf/pdfreadvectors.cpp index 8772e4f70af4..4b42fc9f6081 100644 --- a/frmts/pdf/pdfreadvectors.cpp +++ b/frmts/pdf/pdfreadvectors.cpp @@ -393,76 +393,56 @@ OGRGeometry *PDFDataset::GetGeometryFromMCID(int nMCID) } /************************************************************************/ -/* GraphicState */ +/* GraphicState::PreMultiplyBy() */ /************************************************************************/ -class GraphicState +void PDFDataset::GraphicState::PreMultiplyBy(double adfMatrix[6]) { - public: - std::array adfCM; - std::array adfStrokeColor; - std::array adfFillColor; - - GraphicState() - { - adfCM[0] = 1; - adfCM[1] = 0; - adfCM[2] = 0; - adfCM[3] = 1; - adfCM[4] = 0; - adfCM[5] = 0; - adfStrokeColor[0] = 0.0; - adfStrokeColor[1] = 0.0; - adfStrokeColor[2] = 0.0; - adfFillColor[0] = 1.0; - adfFillColor[1] = 1.0; - adfFillColor[2] = 1.0; - } - - void PreMultiplyBy(double adfMatrix[6]) - { - /* - [ a b 0 ] [ a' b' 0] [ aa' + bc' ab' + bd' 0 ] - [ c d 0 ] * [ c' d' 0] = [ ca' + dc' cb' + dd' 0 ] - [ e f 1 ] [ e' f' 1] [ ea' + fc' + e' eb' + fd' + f' 1 ] - */ + /* + [ a b 0 ] [ a' b' 0] [ aa' + bc' ab' + bd' 0 ] + [ c d 0 ] * [ c' d' 0] = [ ca' + dc' cb' + dd' 0 ] + [ e f 1 ] [ e' f' 1] [ ea' + fc' + e' eb' + fd' + f' 1 ] + */ + + // Be careful about the multiplication order! + // PDF reference version 1.7, page 209: + // when a sequence of transformations is carried out, the matrix + // representing the combined transformation (M′) is calculated + // by premultiplying the matrix representing the additional transformation (MT) + // with the one representing all previously existing transformations (M) + + double a = adfMatrix[0]; + double b = adfMatrix[1]; + double c = adfMatrix[2]; + double d = adfMatrix[3]; + double e = adfMatrix[4]; + double f = adfMatrix[5]; + double ap = adfCM[0]; + double bp = adfCM[1]; + double cp = adfCM[2]; + double dp = adfCM[3]; + double ep = adfCM[4]; + double fp = adfCM[5]; + adfCM[0] = a * ap + b * cp; + adfCM[1] = a * bp + b * dp; + adfCM[2] = c * ap + d * cp; + adfCM[3] = c * bp + d * dp; + adfCM[4] = e * ap + f * cp + ep; + adfCM[5] = e * bp + f * dp + fp; +} - // Be careful about the multiplication order! - // PDF reference version 1.7, page 209: - // when a sequence of transformations is carried out, the matrix - // representing the combined transformation (M′) is calculated - // by premultiplying the matrix representing the additional transformation (MT) - // with the one representing all previously existing transformations (M) - - double a = adfMatrix[0]; - double b = adfMatrix[1]; - double c = adfMatrix[2]; - double d = adfMatrix[3]; - double e = adfMatrix[4]; - double f = adfMatrix[5]; - double ap = adfCM[0]; - double bp = adfCM[1]; - double cp = adfCM[2]; - double dp = adfCM[3]; - double ep = adfCM[4]; - double fp = adfCM[5]; - adfCM[0] = a * ap + b * cp; - adfCM[1] = a * bp + b * dp; - adfCM[2] = c * ap + d * cp; - adfCM[3] = c * bp + d * dp; - adfCM[4] = e * ap + f * cp + ep; - adfCM[5] = e * bp + f * dp + fp; - } +/************************************************************************/ +/* GraphicState::ApplyMatrix() */ +/************************************************************************/ - void ApplyMatrix(double adfCoords[2]) - { - double x = adfCoords[0]; - double y = adfCoords[1]; +void PDFDataset::GraphicState::ApplyMatrix(double adfCoords[2]) const +{ + double x = adfCoords[0]; + double y = adfCoords[1]; - adfCoords[0] = x * adfCM[0] + y * adfCM[2] + adfCM[4]; - adfCoords[1] = x * adfCM[1] + y * adfCM[3] + adfCM[5]; - } -}; + adfCoords[0] = x * adfCM[0] + y * adfCM[2] + adfCM[4]; + adfCoords[1] = x * adfCM[1] + y * adfCM[3] + adfCM[5]; +} /************************************************************************/ /* PDFCoordsToSRSCoords() */ From 6be4fcb9fff686961e9b47fc6989d29181e64ac4 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 7 May 2024 23:07:57 +0200 Subject: [PATCH 017/301] PDF vector reading: propagate GraphicState when recursively calling ParseContent Not totally sure this is needed, but seems likely. --- frmts/pdf/gdal_pdf.h | 2 +- frmts/pdf/pdfreadvectors.cpp | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/frmts/pdf/gdal_pdf.h b/frmts/pdf/gdal_pdf.h index 23dc489654fe..480fd4686652 100644 --- a/frmts/pdf/gdal_pdf.h +++ b/frmts/pdf/gdal_pdf.h @@ -405,7 +405,7 @@ class PDFDataset final : public GDALPamDataset ParseContent(const char *pszContent, GDALPDFObject *poResources, int bInitBDCStack, int bMatchQ, std::map &oMapPropertyToLayer, - OGRPDFLayer *poCurLayer); + const GraphicState &graphicStateIn, OGRPDFLayer *poCurLayer); OGRGeometry *BuildGeometry(std::vector &oCoords, int bHasFoundFill, int bHasMultiPart); diff --git a/frmts/pdf/pdfreadvectors.cpp b/frmts/pdf/pdfreadvectors.cpp index 4b42fc9f6081..83eedece4df3 100644 --- a/frmts/pdf/pdfreadvectors.cpp +++ b/frmts/pdf/pdfreadvectors.cpp @@ -665,7 +665,7 @@ static void AddBezierCurve(std::vector &oCoords, const double *x0_y0, OGRGeometry *PDFDataset::ParseContent( const char *pszContent, GDALPDFObject *poResources, int bInitBDCStack, int bMatchQ, std::map &oMapPropertyToLayer, - OGRPDFLayer *poCurLayer) + const GraphicState &graphicStateIn, OGRPDFLayer *poCurLayer) { if (CPLTestBool(CPLGetConfigOption("PDF_DUMP_CONTENT", "NO"))) { @@ -723,7 +723,7 @@ OGRGeometry *PDFDataset::ParseContent( int bCollectAllObjects = poResources != nullptr && !bInitBDCStack && !bMatchQ; - GraphicState oGS; + GraphicState oGS(graphicStateIn); std::stack oGSStack; std::stack oLayerStack; @@ -1419,7 +1419,7 @@ OGRGeometry *PDFDataset::ParseContent( { OGRGeometry *poGeom = ParseContent( pszStr, nullptr, FALSE, FALSE, - oMapPropertyToLayer, poCurLayer); + oMapPropertyToLayer, oGS, poCurLayer); CPLFree(pszStr); if (poGeom && !bCollectAllObjects) return poGeom; @@ -1936,9 +1936,9 @@ void PDFDataset::ExploreContents(GDALPDFObject *poObj, int nMCID = atoi(pszMCID + 6); if (GetGeometryFromMCID(nMCID) == nullptr) { - OGRGeometry *poGeom = - ParseContent(pszStartParsing, poResources, !bMatchQ, - bMatchQ, oMapPropertyToLayer, nullptr); + OGRGeometry *poGeom = ParseContent( + pszStartParsing, poResources, !bMatchQ, bMatchQ, + oMapPropertyToLayer, GraphicState(), nullptr); if (poGeom != nullptr) { /* Save geometry in map */ @@ -1992,7 +1992,7 @@ void PDFDataset::ExploreContentsNonStructuredInternal( } if (pszConcatStr) ParseContent(pszConcatStr, poResources, FALSE, FALSE, - oMapPropertyToLayer, poSingleLayer); + oMapPropertyToLayer, GraphicState(), poSingleLayer); CPLFree(pszConcatStr); return; } @@ -2008,7 +2008,7 @@ void PDFDataset::ExploreContentsNonStructuredInternal( if (!pszStr) return; ParseContent(pszStr, poResources, FALSE, FALSE, oMapPropertyToLayer, - poSingleLayer); + GraphicState(), poSingleLayer); CPLFree(pszStr); } From 59e99fca61acfb0d1bc28991b4cc95b41297e0e2 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 7 May 2024 23:46:15 +0200 Subject: [PATCH 018/301] gdaltest.download_file(): make chunk size configurable --- autotest/pymod/gdaltest.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/autotest/pymod/gdaltest.py b/autotest/pymod/gdaltest.py index 509e7f87f52a..f05968272bea 100755 --- a/autotest/pymod/gdaltest.py +++ b/autotest/pymod/gdaltest.py @@ -1109,6 +1109,7 @@ def download_file( force_download=False, max_download_duration=None, base_dir="tmp/cache", + chunk_size=1024, ): if filename is None: @@ -1143,18 +1144,18 @@ def download_file( if download_size >= 0: sys.stdout.write("Progress: ") nLastTick = -1 - val = "".encode("ascii") + val = b"" while len(val) < download_size or download_size < 0: - chunk_size = 1024 - if download_size >= 0 and len(val) + chunk_size > download_size: - chunk_size = download_size - len(val) + to_read = chunk_size + if download_size >= 0 and len(val) + to_read > download_size: + to_read = download_size - len(val) try: - chunk = handle.read(chunk_size) + chunk = handle.read(to_read) except Exception: print("Did not get expected data length.") return False - val = val + chunk - if len(chunk) < chunk_size: + val += chunk + if len(chunk) < to_read: if download_size < 0: break print("Did not get expected data length.") @@ -1167,6 +1168,7 @@ def download_file( sys.stdout.write("%d" % int((nLastTick / 4) * 10)) else: sys.stdout.write(".") + sys.stdout.flush() nLastTick = nThisTick if nThisTick == 40: sys.stdout.write(" - done.\n") From 9f716a2ab85bef4ec20c12a2a8a7f5440c0d7c13 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 7 May 2024 23:46:29 +0200 Subject: [PATCH 019/301] ogr_pdf.py: add test case for #9870 --- autotest/ogr/ogr_pdf.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/autotest/ogr/ogr_pdf.py b/autotest/ogr/ogr_pdf.py index 19511be1c61a..442ffcde50dc 100755 --- a/autotest/ogr/ogr_pdf.py +++ b/autotest/ogr/ogr_pdf.py @@ -29,6 +29,8 @@ # DEALINGS IN THE SOFTWARE. ############################################################################### +import os + import gdaltest import ogrtest import pytest @@ -431,3 +433,38 @@ def test_ogr_pdf_layer_with_ocmd(tmp_vsimem): assert ds.GetLayerCount() == 1 assert ds.GetLayer(0).GetName() == "parent_poly" assert ds.GetLayer(0).GetFeatureCount() == 1 + + +############################################################################### +# Test bugfix for https://github.com/OSGeo/gdal/issues/9870 + + +@pytest.mark.require_curl() +@pytest.mark.skipif(not has_read_support(), reason="PDF driver lacks read support") +def test_ogr_pdf_arcgis_12_9(): + + srv = "https://raw.githubusercontent.com/OSGeo/gdal-test-datasets/master/pdf/nsw.gov.au/9130-3N%2BPARRAMATTA%2BRIVER/README.txt" + if gdaltest.gdalurlopen(srv, timeout=5) is None: + pytest.skip(reason=f"{srv} is down") + + gdaltest.download_or_skip( + "https://raw.githubusercontent.com/OSGeo/gdal-test-datasets/master/pdf/nsw.gov.au/9130-3N%2BPARRAMATTA%2BRIVER/9130-3N%2BPARRAMATTA%2BRIVER.pdf", + "9130-3N+PARRAMATTA+RIVER.pdf", + chunk_size=1024 * 128, + force_download="CI" in os.environ, + ) + + ds = ogr.Open("tmp/cache/9130-3N+PARRAMATTA+RIVER.pdf") + assert ds.GetLayerCount() == 58 + lyr = ds.GetLayer("Background") + background_extent = lyr.GetExtent() + assert background_extent == pytest.approx( + (313422.48894187197, 342337.1271782691, 6249436.830917485, 6264705.818204939), + rel=1e-5, + ) + lyr = ds.GetLayer("Map_Frame_NSW_TopoMap_Layers_BUILDINGS_POINTS_NSW_Building") + buildings_extent = lyr.GetExtent() + assert buildings_extent == pytest.approx( + (314770.38136460556, 338159.3346125973, 6249907.04700745, 6264139.920707164), + rel=1e-5, + ) From a4089d87fae5ca927b5fed7e5628c12e802e1dac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edouard=20Choini=C3=A8re?= <27212526+echoix@users.noreply.github.com> Date: Sun, 5 May 2024 19:31:32 +0000 Subject: [PATCH 020/301] CI: Add branches-ignore on pushes to backport branches for CodeQL workflow --- .github/workflows/codeql.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 3e38e1168049..25e59e1be1af 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -4,6 +4,8 @@ on: push: paths-ignore: - 'doc/**' + branches-ignore: + - 'backport**' pull_request: paths-ignore: - 'doc/**' From 24bf2abe57d86d6e5d53d0f8e8dc8bf056dc2325 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edouard=20Choini=C3=A8re?= <27212526+echoix@users.noreply.github.com> Date: Sun, 5 May 2024 19:33:31 +0000 Subject: [PATCH 021/301] CI: Add branches-ignore on pushes to dependabot branches --- .github/workflows/android_cmake.yml | 1 + .github/workflows/clang_static_analyzer.yml | 1 + .github/workflows/cmake_builds.yml | 1 + .github/workflows/code_checks.yml | 1 + .github/workflows/codeql.yml | 1 + .github/workflows/conda.yml | 1 + .github/workflows/delete_untagged_containers.yml | 1 + .github/workflows/doc_build.yml | 1 + .github/workflows/freebsd.yml.disabled | 1 + .github/workflows/linux_build.yml | 1 + .github/workflows/macos.yml | 1 + .github/workflows/windows_build.yml | 1 + 12 files changed, 12 insertions(+) diff --git a/.github/workflows/android_cmake.yml b/.github/workflows/android_cmake.yml index 55a556debb9a..8c481771551a 100644 --- a/.github/workflows/android_cmake.yml +++ b/.github/workflows/android_cmake.yml @@ -6,6 +6,7 @@ on: - 'doc/**' branches-ignore: - 'backport**' + - 'dependabot**' pull_request: paths-ignore: - 'doc/**' diff --git a/.github/workflows/clang_static_analyzer.yml b/.github/workflows/clang_static_analyzer.yml index 07965bbb2675..d769bd66362d 100644 --- a/.github/workflows/clang_static_analyzer.yml +++ b/.github/workflows/clang_static_analyzer.yml @@ -6,6 +6,7 @@ on: - 'doc/**' branches-ignore: - 'backport**' + - 'dependabot**' pull_request: paths-ignore: - 'doc/**' diff --git a/.github/workflows/cmake_builds.yml b/.github/workflows/cmake_builds.yml index 29ea77387387..102b51be6e7d 100644 --- a/.github/workflows/cmake_builds.yml +++ b/.github/workflows/cmake_builds.yml @@ -8,6 +8,7 @@ on: - 'doc/**' branches-ignore: - 'backport**' + - 'dependabot**' pull_request: paths-ignore: - 'doc/**' diff --git a/.github/workflows/code_checks.yml b/.github/workflows/code_checks.yml index b11e0ceee661..55a1b342742b 100644 --- a/.github/workflows/code_checks.yml +++ b/.github/workflows/code_checks.yml @@ -6,6 +6,7 @@ on: - 'doc/**' branches-ignore: - 'backport**' + - 'dependabot**' pull_request: paths-ignore: - 'doc/**' diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 25e59e1be1af..fca5e1a9c714 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -6,6 +6,7 @@ on: - 'doc/**' branches-ignore: - 'backport**' + - 'dependabot**' pull_request: paths-ignore: - 'doc/**' diff --git a/.github/workflows/conda.yml b/.github/workflows/conda.yml index d64da3f0c831..ddb4a2612f8c 100644 --- a/.github/workflows/conda.yml +++ b/.github/workflows/conda.yml @@ -6,6 +6,7 @@ on: - 'doc/**' branches-ignore: - 'backport**' + - 'dependabot**' # Disabled because run is quite slow, especially for Mac #pull_request: diff --git a/.github/workflows/delete_untagged_containers.yml b/.github/workflows/delete_untagged_containers.yml index a31790db89c0..6e0fdc998e41 100644 --- a/.github/workflows/delete_untagged_containers.yml +++ b/.github/workflows/delete_untagged_containers.yml @@ -6,6 +6,7 @@ on: - 'doc/**' branches-ignore: - 'backport**' + - 'dependabot**' permissions: contents: read diff --git a/.github/workflows/doc_build.yml b/.github/workflows/doc_build.yml index 250730b65364..282858e5e00d 100644 --- a/.github/workflows/doc_build.yml +++ b/.github/workflows/doc_build.yml @@ -4,6 +4,7 @@ on: push: branches-ignore: - 'backport**' + - 'dependabot**' pull_request: concurrency: diff --git a/.github/workflows/freebsd.yml.disabled b/.github/workflows/freebsd.yml.disabled index 2ad11b426b73..d6d757e1cd69 100644 --- a/.github/workflows/freebsd.yml.disabled +++ b/.github/workflows/freebsd.yml.disabled @@ -6,6 +6,7 @@ on: - 'doc/**' branches: - '!backport**' + - '!dependabot**' pull_request: paths-ignore: - 'doc/**' diff --git a/.github/workflows/linux_build.yml b/.github/workflows/linux_build.yml index 69f75d555f31..f7af4e104e44 100644 --- a/.github/workflows/linux_build.yml +++ b/.github/workflows/linux_build.yml @@ -6,6 +6,7 @@ on: - 'doc/**' branches-ignore: - 'backport**' + - 'dependabot**' pull_request: paths-ignore: - 'doc/**' diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index d4b5e2087ec9..053cd36c7283 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -6,6 +6,7 @@ on: - 'doc/**' branches-ignore: - 'backport**' + - 'dependabot**' pull_request: paths-ignore: - 'doc/**' diff --git a/.github/workflows/windows_build.yml b/.github/workflows/windows_build.yml index bba1e21e9b07..cf970ca82bb7 100644 --- a/.github/workflows/windows_build.yml +++ b/.github/workflows/windows_build.yml @@ -6,6 +6,7 @@ on: - 'doc/**' branches-ignore: - 'backport**' + - 'dependabot**' pull_request: paths-ignore: - 'doc/**' From 928a4c39468f9954bf7db01f9ac6361b139fe122 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 10 May 2024 15:39:57 +0200 Subject: [PATCH 022/301] Fix -Werror=calloc-transposed-args with gcc 14 --- frmts/gtiff/libgeotiff/geotiff_proj4.c | 2 +- frmts/gtiff/libtiff/tif_hash_set.c | 4 ++-- frmts/northwood/northwood.cpp | 10 +++++----- ogr/ogrsf_frmts/shape/dbfopen.c | 8 ++++---- ogr/ogrsf_frmts/shape/sbnsearch.c | 2 +- ogr/ogrsf_frmts/shape/shpopen.c | 14 +++++++------- ogr/ogrsf_frmts/shape/shptree.c | 2 +- 7 files changed, 21 insertions(+), 21 deletions(-) diff --git a/frmts/gtiff/libgeotiff/geotiff_proj4.c b/frmts/gtiff/libgeotiff/geotiff_proj4.c index 8e3812059973..9d25a7c1a7fc 100644 --- a/frmts/gtiff/libgeotiff/geotiff_proj4.c +++ b/frmts/gtiff/libgeotiff/geotiff_proj4.c @@ -85,7 +85,7 @@ static char **OSRProj4Tokenize( const char *pszFull ) if( pszFull == NULL ) return NULL; - char **papszTokens = (char **) calloc(sizeof(char*),nMaxTokens); + char **papszTokens = (char **) calloc(nMaxTokens, sizeof(char*)); char *pszFullWrk = CPLStrdup(pszFull); diff --git a/frmts/gtiff/libtiff/tif_hash_set.c b/frmts/gtiff/libtiff/tif_hash_set.c index 9792c63f47d0..81dea3fcf26a 100644 --- a/frmts/gtiff/libtiff/tif_hash_set.c +++ b/frmts/gtiff/libtiff/tif_hash_set.c @@ -146,7 +146,7 @@ TIFFHashSet *TIFFHashSetNew(TIFFHashSetHashFunc fnHashFunc, set->fnEqualFunc = fnEqualFunc ? fnEqualFunc : TIFFHashSetEqualPointer; set->fnFreeEltFunc = fnFreeEltFunc; set->nSize = 0; - set->tabList = (TIFFList **)(calloc(sizeof(TIFFList *), 53)); + set->tabList = (TIFFList **)(calloc(53, sizeof(TIFFList *))); if (set->tabList == NULL) { free(set); @@ -367,7 +367,7 @@ static bool TIFFHashSetRehash(TIFFHashSet *set) { int nNewAllocatedSize = anPrimes[set->nIndiceAllocatedSize]; TIFFList **newTabList = - (TIFFList **)(calloc(sizeof(TIFFList *), nNewAllocatedSize)); + (TIFFList **)(calloc(nNewAllocatedSize, sizeof(TIFFList *))); if (newTabList == NULL) return false; #ifdef HASH_DEBUG diff --git a/frmts/northwood/northwood.cpp b/frmts/northwood/northwood.cpp index 98f2dc6c22ee..1917e154f2fd 100644 --- a/frmts/northwood/northwood.cpp +++ b/frmts/northwood/northwood.cpp @@ -184,14 +184,14 @@ int nwt_ParseHeader(NWT_GRID *pGrd, const unsigned char *nwtHeader) } CPL_LSBPTR16(&usTmp); pGrd->stClassDict = reinterpret_cast( - calloc(sizeof(NWT_CLASSIFIED_DICT), 1)); + calloc(1, sizeof(NWT_CLASSIFIED_DICT))); pGrd->stClassDict->nNumClassifiedItems = usTmp; pGrd->stClassDict->stClassifiedItem = reinterpret_cast( - calloc(sizeof(NWT_CLASSIFIED_ITEM *), - pGrd->stClassDict->nNumClassifiedItems + 1)); + calloc(pGrd->stClassDict->nNumClassifiedItems + 1, + sizeof(NWT_CLASSIFIED_ITEM *))); // load the dictionary for (unsigned int iItem = 0; @@ -200,7 +200,7 @@ int nwt_ParseHeader(NWT_GRID *pGrd, const unsigned char *nwtHeader) NWT_CLASSIFIED_ITEM *psItem = pGrd->stClassDict->stClassifiedItem[iItem] = reinterpret_cast( - calloc(sizeof(NWT_CLASSIFIED_ITEM), 1)); + calloc(1, sizeof(NWT_CLASSIFIED_ITEM))); unsigned char cTmp[256]; if (!VSIFReadL(&cTmp, 9, 1, pGrd->fp)) @@ -424,7 +424,7 @@ NWT_GRID *nwtOpenGrid(char *filename) nwtHeader[3] != 'C') return nullptr; - NWT_GRID *pGrd = reinterpret_cast(calloc(sizeof(NWT_GRID), 1)); + NWT_GRID *pGrd = reinterpret_cast(calloc(1, sizeof(NWT_GRID))); if (nwtHeader[4] == '1') pGrd->cFormat = 0x00; // grd - surface type diff --git a/ogr/ogrsf_frmts/shape/dbfopen.c b/ogr/ogrsf_frmts/shape/dbfopen.c index e423e1b10335..4fc70b91d9c6 100644 --- a/ogr/ogrsf_frmts/shape/dbfopen.c +++ b/ogr/ogrsf_frmts/shape/dbfopen.c @@ -1944,13 +1944,13 @@ int SHPAPI_CALL DBFReorderFields(DBFHandle psDBF, const int *panMap) /* a simple malloc() would be enough, but calloc() helps clang static * analyzer */ int *panFieldOffsetNew = - STATIC_CAST(int *, calloc(sizeof(int), psDBF->nFields)); + STATIC_CAST(int *, calloc(psDBF->nFields, sizeof(int))); int *panFieldSizeNew = - STATIC_CAST(int *, calloc(sizeof(int), psDBF->nFields)); + STATIC_CAST(int *, calloc(psDBF->nFields, sizeof(int))); int *panFieldDecimalsNew = - STATIC_CAST(int *, calloc(sizeof(int), psDBF->nFields)); + STATIC_CAST(int *, calloc(psDBF->nFields, sizeof(int))); char *pachFieldTypeNew = - STATIC_CAST(char *, calloc(sizeof(char), psDBF->nFields)); + STATIC_CAST(char *, calloc(psDBF->nFields, sizeof(char))); char *pszHeaderNew = STATIC_CAST( char *, malloc(sizeof(char) * XBASE_FLDHDR_SZ * psDBF->nFields)); diff --git a/ogr/ogrsf_frmts/shape/sbnsearch.c b/ogr/ogrsf_frmts/shape/sbnsearch.c index ea443cf784d6..3fa0b65fe8ea 100644 --- a/ogr/ogrsf_frmts/shape/sbnsearch.c +++ b/ogr/ogrsf_frmts/shape/sbnsearch.c @@ -127,7 +127,7 @@ SBNSearchHandle SBNOpenDiskTree(const char *pszSBNFilename, /* Initialize the handle structure. */ /* -------------------------------------------------------------------- */ SBNSearchHandle hSBN = - STATIC_CAST(SBNSearchHandle, calloc(sizeof(struct SBNSearchInfo), 1)); + STATIC_CAST(SBNSearchHandle, calloc(1, sizeof(struct SBNSearchInfo))); if (psHooks == SHPLIB_NULLPTR) SASetupDefaultHooks(&(hSBN->sHooks)); diff --git a/ogr/ogrsf_frmts/shape/shpopen.c b/ogr/ogrsf_frmts/shape/shpopen.c index 84448e9afb26..959b5a1b818e 100644 --- a/ogr/ogrsf_frmts/shape/shpopen.c +++ b/ogr/ogrsf_frmts/shape/shpopen.c @@ -273,7 +273,7 @@ SHPHandle SHPAPI_CALL SHPOpenLL(const char *pszLayer, const char *pszAccess, /* -------------------------------------------------------------------- */ /* Initialize the info structure. */ /* -------------------------------------------------------------------- */ - SHPHandle psSHP = STATIC_CAST(SHPHandle, calloc(sizeof(SHPInfo), 1)); + SHPHandle psSHP = STATIC_CAST(SHPHandle, calloc(1, sizeof(SHPInfo))); psSHP->bUpdated = FALSE; memcpy(&(psSHP->sHooks), psHooks, sizeof(SAHooks)); @@ -1083,7 +1083,7 @@ SHPHandle SHPAPI_CALL SHPCreateLL(const char *pszLayer, int nShapeType, return SHPLIB_NULLPTR; } - SHPHandle psSHP = STATIC_CAST(SHPHandle, calloc(sizeof(SHPInfo), 1)); + SHPHandle psSHP = STATIC_CAST(SHPHandle, calloc(1, sizeof(SHPInfo))); psSHP->bUpdated = FALSE; memcpy(&(psSHP->sHooks), psHooks, sizeof(SAHooks)); @@ -1226,7 +1226,7 @@ SHPObject SHPAPI_CALL1(*) psObject->nParts = MAX(1, nParts); psObject->panPartStart = - STATIC_CAST(int *, calloc(sizeof(int), psObject->nParts)); + STATIC_CAST(int *, calloc(psObject->nParts, sizeof(int))); psObject->panPartType = STATIC_CAST(int *, malloc(sizeof(int) * psObject->nParts)); @@ -1255,16 +1255,16 @@ SHPObject SHPAPI_CALL1(*) const size_t nSize = sizeof(double) * nVertices; psObject->padfX = STATIC_CAST(double *, padfX ? malloc(nSize) - : calloc(sizeof(double), nVertices)); + : calloc(nVertices, sizeof(double))); psObject->padfY = STATIC_CAST(double *, padfY ? malloc(nSize) - : calloc(sizeof(double), nVertices)); + : calloc(nVertices, sizeof(double))); psObject->padfZ = STATIC_CAST( double *, - padfZ &&bHasZ ? malloc(nSize) : calloc(sizeof(double), nVertices)); + padfZ &&bHasZ ? malloc(nSize) : calloc(nVertices, sizeof(double))); psObject->padfM = STATIC_CAST( double *, - padfM &&bHasM ? malloc(nSize) : calloc(sizeof(double), nVertices)); + padfM &&bHasM ? malloc(nSize) : calloc(nVertices, sizeof(double))); if (padfX != SHPLIB_NULLPTR) memcpy(psObject->padfX, padfX, nSize); if (padfY != SHPLIB_NULLPTR) diff --git a/ogr/ogrsf_frmts/shape/shptree.c b/ogr/ogrsf_frmts/shape/shptree.c index 97331ea2bcc7..dfbc5ec93591 100644 --- a/ogr/ogrsf_frmts/shape/shptree.c +++ b/ogr/ogrsf_frmts/shape/shptree.c @@ -677,7 +677,7 @@ SHPTreeDiskHandle SHPOpenDiskTree(const char *pszQIXFilename, SHPTreeDiskHandle hDiskTree; hDiskTree = STATIC_CAST(SHPTreeDiskHandle, - calloc(sizeof(struct SHPDiskTreeInfo), 1)); + calloc(1, sizeof(struct SHPDiskTreeInfo))); if (psHooks == SHPLIB_NULLPTR) SASetupDefaultHooks(&(hDiskTree->sHooks)); From ac4ae26a57252303e46c5ec9b82fb62c60ae868c Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 10 May 2024 16:44:18 +0200 Subject: [PATCH 023/301] Fix false-positive -Wnull-dereference with gcc 14 --- frmts/stacit/stacitdataset.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/frmts/stacit/stacitdataset.cpp b/frmts/stacit/stacitdataset.cpp index 50374a73ec30..8a0ac98815a8 100644 --- a/frmts/stacit/stacitdataset.cpp +++ b/frmts/stacit/stacitdataset.cpp @@ -288,6 +288,10 @@ static void ParseAsset(const CPLJSONObject &jAsset, for (const auto &oItem : oProjTransform) transform.push_back(oItem.ToDouble()); CPLAssert(transform.size() == 6 || transform.size() == 9); +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnull-dereference" +#endif if (transform[0] <= 0 || transform[1] != 0 || transform[3] != 0 || transform[4] >= 0 || (transform.size() == 9 && @@ -300,6 +304,9 @@ static void ParseAsset(const CPLJSONObject &jAsset, osAssetName.c_str()); return; } +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif } if (bIsBBOXValid && bIsShapeValid) From 6932f7ac3ffd20f3bae30bd47e20803f50b3b810 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 10 May 2024 15:08:07 +0200 Subject: [PATCH 024/301] configure.cmake: fix build with mingw64 with gcc 14 --- cmake/helpers/configure.cmake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cmake/helpers/configure.cmake b/cmake/helpers/configure.cmake index 6aee8f7d6487..55b1df0f6d6e 100644 --- a/cmake/helpers/configure.cmake +++ b/cmake/helpers/configure.cmake @@ -226,13 +226,13 @@ else () #endif #include #include - int main() { struct _stat64 buf; _wstat64( \"\", &buf ); return 0; } + int main() { struct _stat64 buf; wchar_t path = 0; _wstat64( &path, &buf ); return 0; } " - NO_UNIX_STDIO_64) + WINDOWS_STAT64) - if (NO_UNIX_STDIO_64) + if (WINDOWS_STAT64) set(VSI_STAT64 _stat64) - set(VSI_STAT64_T __stat64) + set(VSI_STAT64_T _stat64) endif () check_function_exists(fopen64 HAVE_FOPEN64) From 0871f47a72779a41c8a56553715734c8429d8339 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 9 May 2024 21:52:17 +0200 Subject: [PATCH 025/301] Miramon: remove always true/false conditions --- ogr/ogrsf_frmts/miramon/ogrmiramonlayer.cpp | 276 ++++++++++---------- 1 file changed, 131 insertions(+), 145 deletions(-) diff --git a/ogr/ogrsf_frmts/miramon/ogrmiramonlayer.cpp b/ogr/ogrsf_frmts/miramon/ogrmiramonlayer.cpp index c20f7c20d54f..c326d916921f 100644 --- a/ogr/ogrsf_frmts/miramon/ogrmiramonlayer.cpp +++ b/ogr/ogrsf_frmts/miramon/ogrmiramonlayer.cpp @@ -807,34 +807,69 @@ OGRFeature *OGRMiraMonLayer::GetFeature(GIntBig nFeatureId) /* -------------------------------------------------------------------- */ /* Read nFeatureId feature directly from the file. */ /* -------------------------------------------------------------------- */ - if (nIElem < phMiraMonLayer->TopHeader.nElemCount) + switch (phMiraMonLayer->eLT) { - switch (phMiraMonLayer->eLT) - { - case MM_LayerType_Point: - case MM_LayerType_Point3d: - // Read point - poGeom = new OGRPoint(); - poPoint = poGeom->toPoint(); + case MM_LayerType_Point: + case MM_LayerType_Point3d: + // Read point + poGeom = new OGRPoint(); + poPoint = poGeom->toPoint(); + + // Get X,Y (z). MiraMon has no multipoints + if (MMGetGeoFeatureFromVector(phMiraMonLayer, nIElem)) + { + CPLError(CE_Failure, CPLE_AppDefined, "Wrong file format."); + delete poGeom; + return nullptr; + } - // Get X,Y (z). MiraMon has no multipoints - if (MMGetGeoFeatureFromVector(phMiraMonLayer, nIElem)) - { - CPLError(CE_Failure, CPLE_AppDefined, "Wrong file format."); - delete poGeom; - return nullptr; - } + poPoint->setX(phMiraMonLayer->ReadFeature.pCoord[0].dfX); + poPoint->setY(phMiraMonLayer->ReadFeature.pCoord[0].dfY); + if (phMiraMonLayer->TopHeader.bIs3d) + poPoint->setZ(phMiraMonLayer->ReadFeature.pZCoord[0]); + break; - poPoint->setX(phMiraMonLayer->ReadFeature.pCoord[0].dfX); - poPoint->setY(phMiraMonLayer->ReadFeature.pCoord[0].dfY); + case MM_LayerType_Arc: + case MM_LayerType_Arc3d: + poGeom = new OGRLineString(); + poLS = poGeom->toLineString(); + + // Get X,Y (Z) n times MiraMon has no multilines + if (MMGetGeoFeatureFromVector(phMiraMonLayer, nIElem)) + { + CPLError(CE_Failure, CPLE_AppDefined, "Wrong file format."); + delete poGeom; + return nullptr; + } + + for (MM_N_VERTICES_TYPE nIVrt = 0; + nIVrt < phMiraMonLayer->ReadFeature.pNCoordRing[0]; nIVrt++) + { if (phMiraMonLayer->TopHeader.bIs3d) - poPoint->setZ(phMiraMonLayer->ReadFeature.pZCoord[0]); - break; + poLS->addPoint( + phMiraMonLayer->ReadFeature.pCoord[nIVrt].dfX, + phMiraMonLayer->ReadFeature.pCoord[nIVrt].dfY, + phMiraMonLayer->ReadFeature.pZCoord[nIVrt]); + else + poLS->addPoint( + phMiraMonLayer->ReadFeature.pCoord[nIVrt].dfX, + phMiraMonLayer->ReadFeature.pCoord[nIVrt].dfY); + } + break; + + case MM_LayerType_Pol: + case MM_LayerType_Pol3d: + // Read polygon + auto poPoly = std::make_unique(); + MM_POLYGON_RINGS_COUNT nIRing; + MM_N_VERTICES_TYPE nIVrtAcum; + + if (phMiraMonLayer->TopHeader.bIsMultipolygon) + { + OGRMultiPolygon *poMP = nullptr; - case MM_LayerType_Arc: - case MM_LayerType_Arc3d: - poGeom = new OGRLineString(); - poLS = poGeom->toLineString(); + poGeom = new OGRMultiPolygon(); + poMP = poGeom->toMultiPolygon(); // Get X,Y (Z) n times MiraMon has no multilines if (MMGetGeoFeatureFromVector(phMiraMonLayer, nIElem)) @@ -844,50 +879,84 @@ OGRFeature *OGRMiraMonLayer::GetFeature(GIntBig nFeatureId) return nullptr; } - for (MM_N_VERTICES_TYPE nIVrt = 0; - nIVrt < phMiraMonLayer->ReadFeature.pNCoordRing[0]; - nIVrt++) + nIVrtAcum = 0; + if (!(phMiraMonLayer->ReadFeature.flag_VFG[0] & + MM_EXTERIOR_ARC_SIDE)) { - if (phMiraMonLayer->TopHeader.bIs3d) - poLS->addPoint( - phMiraMonLayer->ReadFeature.pCoord[nIVrt].dfX, - phMiraMonLayer->ReadFeature.pCoord[nIVrt].dfY, - phMiraMonLayer->ReadFeature.pZCoord[nIVrt]); - else - poLS->addPoint( - phMiraMonLayer->ReadFeature.pCoord[nIVrt].dfX, - phMiraMonLayer->ReadFeature.pCoord[nIVrt].dfY); + CPLError(CE_Failure, CPLE_NoWriteAccess, + "Wrong polygon format."); + delete poGeom; + return nullptr; } - break; - - case MM_LayerType_Pol: - case MM_LayerType_Pol3d: - // Read polygon - auto poPoly = std::make_unique(); - MM_POLYGON_RINGS_COUNT nIRing; - MM_N_VERTICES_TYPE nIVrtAcum; - if (phMiraMonLayer->TopHeader.bIsMultipolygon) + for (nIRing = 0; nIRing < phMiraMonLayer->ReadFeature.nNRings; + nIRing++) { - OGRMultiPolygon *poMP = nullptr; + auto poRing = std::make_unique(); + + for (MM_N_VERTICES_TYPE nIVrt = 0; + nIVrt < + phMiraMonLayer->ReadFeature.pNCoordRing[nIRing]; + nIVrt++) + { + if (phMiraMonLayer->TopHeader.bIs3d) + { + poRing->addPoint( + phMiraMonLayer->ReadFeature.pCoord[nIVrtAcum] + .dfX, + phMiraMonLayer->ReadFeature.pCoord[nIVrtAcum] + .dfY, + phMiraMonLayer->ReadFeature.pZCoord[nIVrtAcum]); + } + else + { + poRing->addPoint( + phMiraMonLayer->ReadFeature.pCoord[nIVrtAcum] + .dfX, + phMiraMonLayer->ReadFeature.pCoord[nIVrtAcum] + .dfY); + } - poGeom = new OGRMultiPolygon(); - poMP = poGeom->toMultiPolygon(); + nIVrtAcum++; + } - // Get X,Y (Z) n times MiraMon has no multilines - if (MMGetGeoFeatureFromVector(phMiraMonLayer, nIElem)) + // If I'm going to start a new polygon... + if ((nIRing + 1 < phMiraMonLayer->ReadFeature.nNRings && + ((phMiraMonLayer->ReadFeature.flag_VFG[nIRing + 1]) & + MM_EXTERIOR_ARC_SIDE)) || + nIRing + 1 >= phMiraMonLayer->ReadFeature.nNRings) { - CPLError(CE_Failure, CPLE_AppDefined, - "Wrong file format."); - delete poGeom; - return nullptr; + poPoly->addRingDirectly(poRing.release()); + poMP->addGeometryDirectly(poPoly.release()); + poPoly = std::make_unique(); } + else + poPoly->addRingDirectly(poRing.release()); + } + } + else + { + OGRPolygon *poP = nullptr; + poGeom = new OGRPolygon(); + poP = poGeom->toPolygon(); + + // Get X,Y (Z) n times because MiraMon has no multilinetrings + if (MMGetGeoFeatureFromVector(phMiraMonLayer, nIElem)) + { + CPLError(CE_Failure, CPLE_AppDefined, "Wrong file format."); + delete poGeom; + return nullptr; + } + + if (phMiraMonLayer->ReadFeature.nNRings && + phMiraMonLayer->ReadFeature.nNumpCoord) + { nIVrtAcum = 0; if (!(phMiraMonLayer->ReadFeature.flag_VFG[0] & MM_EXTERIOR_ARC_SIDE)) { - CPLError(CE_Failure, CPLE_NoWriteAccess, + CPLError(CE_Failure, CPLE_AssertionFailed, "Wrong polygon format."); delete poGeom; return nullptr; @@ -926,106 +995,23 @@ OGRFeature *OGRMiraMonLayer::GetFeature(GIntBig nFeatureId) nIVrtAcum++; } - - // If I'm going to start a new polygon... - if ((nIRing + 1 < phMiraMonLayer->ReadFeature.nNRings && - ((phMiraMonLayer->ReadFeature - .flag_VFG[nIRing + 1]) & - MM_EXTERIOR_ARC_SIDE)) || - nIRing + 1 >= phMiraMonLayer->ReadFeature.nNRings) - { - poPoly->addRingDirectly(poRing.release()); - poMP->addGeometryDirectly(poPoly.release()); - poPoly = std::make_unique(); - } - else - poPoly->addRingDirectly(poRing.release()); - } - } - else - { - OGRPolygon *poP = nullptr; - - poGeom = new OGRPolygon(); - poP = poGeom->toPolygon(); - - // Get X,Y (Z) n times because MiraMon has no multilinetrings - if (MMGetGeoFeatureFromVector(phMiraMonLayer, nIElem)) - { - CPLError(CE_Failure, CPLE_AppDefined, - "Wrong file format."); - delete poGeom; - return nullptr; - } - - if (phMiraMonLayer->ReadFeature.nNRings && - phMiraMonLayer->ReadFeature.nNumpCoord) - { - nIVrtAcum = 0; - if (!(phMiraMonLayer->ReadFeature.flag_VFG[0] & - MM_EXTERIOR_ARC_SIDE)) - { - CPLError(CE_Failure, CPLE_AssertionFailed, - "Wrong polygon format."); - delete poGeom; - return nullptr; - } - - for (nIRing = 0; - nIRing < phMiraMonLayer->ReadFeature.nNRings; - nIRing++) - { - auto poRing = std::make_unique(); - - for (MM_N_VERTICES_TYPE nIVrt = 0; - nIVrt < phMiraMonLayer->ReadFeature - .pNCoordRing[nIRing]; - nIVrt++) - { - if (phMiraMonLayer->TopHeader.bIs3d) - { - poRing->addPoint(phMiraMonLayer->ReadFeature - .pCoord[nIVrtAcum] - .dfX, - phMiraMonLayer->ReadFeature - .pCoord[nIVrtAcum] - .dfY, - phMiraMonLayer->ReadFeature - .pZCoord[nIVrtAcum]); - } - else - { - poRing->addPoint(phMiraMonLayer->ReadFeature - .pCoord[nIVrtAcum] - .dfX, - phMiraMonLayer->ReadFeature - .pCoord[nIVrtAcum] - .dfY); - } - - nIVrtAcum++; - } - poP->addRingDirectly(poRing.release()); - } + poP->addRingDirectly(poRing.release()); } } + } - break; - } - - if (poGeom == nullptr) - return nullptr; + break; } + if (poGeom == nullptr) + return nullptr; + /* -------------------------------------------------------------------- */ /* Create feature. */ /* -------------------------------------------------------------------- */ auto poFeature = std::make_unique(m_poFeatureDefn); - if (poGeom) - { - poGeom->assignSpatialReference(m_poSRS); - poFeature->SetGeometryDirectly(poGeom); - } + poGeom->assignSpatialReference(m_poSRS); + poFeature->SetGeometryDirectly(poGeom); /* -------------------------------------------------------------------- */ /* Process field values if its possible. */ From 56535558af3286ea7275b6671d36a021b7fce7c2 Mon Sep 17 00:00:00 2001 From: AbelPau Date: Fri, 10 May 2024 15:14:35 +0200 Subject: [PATCH 026/301] MiraMonVector: Adding more matchs in the look-up table MM_m_idofic.csv --- ogr/ogrsf_frmts/miramon/data/MM_m_idofic.csv | 92 +++++++++++++++++++- 1 file changed, 90 insertions(+), 2 deletions(-) diff --git a/ogr/ogrsf_frmts/miramon/data/MM_m_idofic.csv b/ogr/ogrsf_frmts/miramon/data/MM_m_idofic.csv index c19fd2581642..382951480779 100644 --- a/ogr/ogrsf_frmts/miramon/data/MM_m_idofic.csv +++ b/ogr/ogrsf_frmts/miramon/data/MM_m_idofic.csv @@ -66,6 +66,20 @@ EPSG:3003;TransverseMercator-Monte_Mario-Italy_Z1;;; EPSG:3021;TransverseMercator-Sweden-RT90;;; EPSG:26710;UTM-10N-NAD27-CW;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ EPSG:32610;UTM-10N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32611;UTM-11N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32612;UTM-12N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32613;UTM-13N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32614;UTM-14N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32615;UTM-15N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32616;UTM-16N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32617;UTM-17N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32710;UTM-10S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32711;UTM-11S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32712;UTM-12S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32713;UTM-13S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32714;UTM-14S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32715;UTM-15S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32716;UTM-16S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ EPSG:26901;UTM-1N-NAD83;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ EPSG:26902;UTM-2N-NAD83;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ EPSG:26903;UTM-3N-NAD83;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ @@ -98,7 +112,6 @@ EPSG:4488;UTM-15N-ITRF92;;; EPSG:26715;UTM-15N-NAD27-MX;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ EPSG:26915;UTM-15N-NAD83;;; EPSG:26716;UTM-16N-NAD27-BC;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ -EPSG:32616;UTM-16N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ EPSG:24877;UTM-17S-PSA56-P;;; EPSG:29187;UTM-17S-SAD69-PE;;; EPSG:32717;UTM-17S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ @@ -123,8 +136,19 @@ EPSG:29191;UTM-21S-SAD69-BR;;; EPSG:32721;UTM-21S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;; EPSG:29172;UTM-22N-SAD69-BR;;; EPSG:32622;UTM-22N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;; -EPSG:29192;UTM-22S-SAD69-BR;;; +EPSG:32623;UTM-23N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;; +EPSG:32624;UTM-24N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;; +EPSG:32625;UTM-25N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;; +EPSG:32626;UTM-26N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;; +EPSG:29192;UTM-27S-SAD69-BR;;; EPSG:32722;UTM-22S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;; +EPSG:32723;UTM-23S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;; +EPSG:32724;UTM-24S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;; +EPSG:32725;UTM-25S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;; +EPSG:32726;UTM-26S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;; +EPSG:32727;UTM-27S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;; +EPSG:32728;UTM-28S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;; +EPSG:32729;UTM-29S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;; EPSG:29193;UTM-23S-SAD69-BR;;; EPSG:29194;UTM-24S-SAD69-BR;;; EPSG:29195;UTM-25S-SAD69-BR;;; @@ -178,7 +202,12 @@ EPSG:25833;UTM-33N-ETRS89;;; ETRS-TM33;UTM-33N-ETRS89;;; EPSG:32633;UTM-33N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ EPSG:22033;UTM-33S-Camacupa1980;;; +EPSG:32730;UTM-30S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32731;UTM-31S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32732;UTM-32S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ EPSG:32733;UTM-33S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32734;UTM-34S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32735;UTM-35S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ EPSG:25834;UTM-34N-ETRS89;;; ETRS-TM34;UTM-34N-ETRS89;;; EPSG:2100;UTM-34N-GGRS87;;; @@ -191,19 +220,78 @@ EPSG:25836;UTM-36N-ETRS89;;; EPSG:32636;UTM-36N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ EPSG:2736;UTM-36S-Tete-MZ;;; EPSG:32736;UTM-36S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32737;UTM-37S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32738;UTM-38S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32739;UTM-39S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32740;UTM-40S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32741;UTM-41S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32742;UTM-42S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32743;UTM-43S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32744;UTM-44S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32745;UTM-45S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32746;UTM-46S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32747;UTM-47S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32748;UTM-48S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32749;UTM-49S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32750;UTM-50S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32751;UTM-51S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32752;UTM-52S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32753;UTM-53S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32754;UTM-54S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32755;UTM-55S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32756;UTM-56S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32757;UTM-57S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32758;UTM-58S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32759;UTM-59S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32760;UTM-60S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ ETRS-TM37;UTM-37N-ETRS89;;; EPSG:25837;UTM-37N-ETRS89;;; EPSG:32637;UTM-37N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32638;UTM-38N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32639;UTM-39N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ ETRS-TM38;UTM-38N-ETRS89;;; EPSG:25838;UTM-38N-ETRS89;;; ETRS-TM39;UTM-39N-ETRS89;;; +EPSG:32640;UTM-40N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32641;UTM-41N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ EPSG:32642;UTM-42N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ EPSG:32643;UTM-43N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ EPSG:32644;UTM-44N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32645;UTM-45N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32646;UTM-46N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ EPSG:32647;UTM-47N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32648;UTM-48N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32649;UTM-49N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32650;UTM-50N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32651;UTM-51N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32652;UTM-52N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32653;UTM-53N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32654;UTM-54N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32655;UTM-55N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32656;UTM-56N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32657;UTM-57N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32658;UTM-58N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ EPSG:32659;UTM-59N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32660;UTM-60N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ EPSG:32759;UTM-59S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32601;UTM-1N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32602;UTM-2N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32603;UTM-3N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32604;UTM-4N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32605;UTM-5N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ EPSG:32606;UTM-6N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32607;UTM-7N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32608;UTM-8N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32609;UTM-9N-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32701;UTM-1S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32702;UTM-2S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32703;UTM-3S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32704;UTM-4S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32705;UTM-5S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32706;UTM-6S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32707;UTM-7S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32708;UTM-8S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ +EPSG:32709;UTM-9S-WGS84;Sense paràmetres TOWGS84 a https://epsg.io/;Sin parámetros TOWGS84 en https://epsg.io/;No TOWGS84 parameters at https://epsg.io/ EPSG:4218;lat/long-Bogota;;; EPSG:4149;lat/long-CH1903;;; EPSG:4230-1145;lat/long-ED50-PS;;; From f37ec77452e3c711df8dcbfa1420e09f05e4015c Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 9 May 2024 19:45:19 +0200 Subject: [PATCH 027/301] GML: fix memory leak due do xlink:href substitution in a non-nominal case. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=68850 --- autotest/ogr/data/gml/link_to_immediate_child.gml | 11 +++++++++++ autotest/ogr/ogr_gml.py | 12 ++++++++++++ ogr/ogrsf_frmts/gml/gmlhandler.cpp | 15 ++++++++++++++- 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 autotest/ogr/data/gml/link_to_immediate_child.gml diff --git a/autotest/ogr/data/gml/link_to_immediate_child.gml b/autotest/ogr/data/gml/link_to_immediate_child.gml new file mode 100644 index 000000000000..de4133f0fa9c --- /dev/null +++ b/autotest/ogr/data/gml/link_to_immediate_child.gml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/autotest/ogr/ogr_gml.py b/autotest/ogr/ogr_gml.py index bdc642f4c6cf..0d592827c032 100755 --- a/autotest/ogr/ogr_gml.py +++ b/autotest/ogr/ogr_gml.py @@ -4315,3 +4315,15 @@ def test_ogr_gml_geom_coord_precision(tmp_vsimem): prec = geom_fld.GetCoordinatePrecision() assert prec.GetXYResolution() == 1e-5 assert prec.GetZResolution() == 1e-3 + + +############################################################################### +# Test weird scenario of https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=68850 + + +def test_ogr_gml_geom_link_to_immediate_child(): + + ds = gdal.OpenEx( + "data/gml/link_to_immediate_child.gml", open_options=["WRITE_GFS=NO"] + ) + assert ds diff --git a/ogr/ogrsf_frmts/gml/gmlhandler.cpp b/ogr/ogrsf_frmts/gml/gmlhandler.cpp index 305fa94d3a62..6b35729868b3 100644 --- a/ogr/ogrsf_frmts/gml/gmlhandler.cpp +++ b/ogr/ogrsf_frmts/gml/gmlhandler.cpp @@ -1685,7 +1685,20 @@ OGRErr GMLHandler::endElementGeometry() // m_oMapElementToSubstitute at the end of the current feature. while (psLastChild->psNext) psLastChild = psLastChild->psNext; - psLastChild->psNext = CPLCloneXMLTree(psThisNode); + if (psLastChild == psThisNode) + { + /* Can happen in situations like: + + + + Do not attempt substitution as that would cause a memory + leak. + */ + } + else + { + psLastChild->psNext = CPLCloneXMLTree(psThisNode); + } psThisNode->psNext = psAfter; } } From 05653317d88448e3231f5b62804dc4694f6d4af1 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 9 May 2024 00:30:44 +0200 Subject: [PATCH 028/301] MITAB .tab: AlterFieldDefn(): fix data corruption when altering (for example) renaming a Integer/Float32 field of size 4 (or Integer64/Float64 field of size 8 --- autotest/ogr/ogr_mitab.py | 106 +++++++++++++++++++ ogr/ogrsf_frmts/mitab/mitab_datfile.cpp | 64 +++++++---- ogr/ogrsf_frmts/mitab/mitab_imapinfofile.cpp | 12 ++- ogr/ogrsf_frmts/mitab/mitab_priv.h | 6 +- ogr/ogrsf_frmts/mitab/mitab_tabfile.cpp | 23 ++-- 5 files changed, 178 insertions(+), 33 deletions(-) diff --git a/autotest/ogr/ogr_mitab.py b/autotest/ogr/ogr_mitab.py index 94508cc86095..c5da4c3e3043 100755 --- a/autotest/ogr/ogr_mitab.py +++ b/autotest/ogr/ogr_mitab.py @@ -2812,3 +2812,109 @@ def test_ogr_mitab_label_without_text(tmp_vsimem): def test_ogr_mitab_write_LCC_2SP_non_metre_unit(tmp_vsimem, ext): _test_srs(tmp_vsimem, "EPSG:2277", ext=ext) # "NAD83 / Texas Central (ftUS)" + + +############################################################################### + + +def test_ogr_mitab_alter_field_defn_integer_width_4(tmp_vsimem): + + filename = str(tmp_vsimem / "foo.tab") + + ds = ogr.GetDriverByName("MapInfo File").CreateDataSource(filename) + lyr = ds.CreateLayer("foo") + fld_defn = ogr.FieldDefn("int_field", ogr.OFTInteger) + fld_defn.SetWidth(5) + lyr.CreateField(fld_defn) + + # Changing field defn while no feature has been written is OK + idx = lyr.GetLayerDefn().GetFieldIndex("int_field") + + new_fld_defn = ogr.FieldDefn("real_field", ogr.OFTReal) + new_fld_defn.SetWidth(15) + new_fld_defn.SetPrecision(6) + assert lyr.AlterFieldDefn(idx, new_fld_defn, ogr.ALTER_ALL_FLAG) == ogr.OGRERR_NONE + fld_defn = lyr.GetLayerDefn().GetFieldDefn(idx) + assert fld_defn.GetType() == ogr.OFTReal + assert fld_defn.GetWidth() == 15 + assert fld_defn.GetPrecision() == 6 + + new_fld_defn = ogr.FieldDefn("real_field", ogr.OFTReal) + new_fld_defn.SetWidth(30) + new_fld_defn.SetPrecision(6) + assert lyr.AlterFieldDefn(idx, new_fld_defn, ogr.ALTER_ALL_FLAG) == ogr.OGRERR_NONE + fld_defn = lyr.GetLayerDefn().GetFieldDefn(idx) + assert fld_defn.GetType() == ogr.OFTReal + assert fld_defn.GetWidth() == 20 + assert fld_defn.GetPrecision() == 6 + + new_fld_defn = ogr.FieldDefn("int_field", ogr.OFTInteger) + # Use 4 as this is also sizeof(int32) and there was a confusion before + # the fix linked with that test between decimal width and binary width. + new_fld_defn.SetWidth(4) + assert lyr.AlterFieldDefn(idx, new_fld_defn, ogr.ALTER_ALL_FLAG) == ogr.OGRERR_NONE + fld_defn = lyr.GetLayerDefn().GetFieldDefn(idx) + assert fld_defn.GetType() == ogr.OFTInteger + assert fld_defn.GetWidth() == 4 + + f = ogr.Feature(lyr.GetLayerDefn()) + f["int_field"] = 1234 + lyr.CreateFeature(f) + f = None + + new_fld_defn = ogr.FieldDefn("int_field", ogr.OFTInteger64) + with gdal.quiet_errors(): + assert ( + lyr.AlterFieldDefn(idx, new_fld_defn, ogr.ALTER_ALL_FLAG) != ogr.OGRERR_NONE + ) + fld_defn = lyr.GetLayerDefn().GetFieldDefn(idx) + assert fld_defn.GetType() == ogr.OFTInteger + assert fld_defn.GetWidth() == 4 + + ds = None + + ds = ogr.Open(filename, update=1) + lyr = ds.GetLayer(0) + idx = lyr.GetLayerDefn().GetFieldIndex("int_field") + fld_defn = lyr.GetLayerDefn().GetFieldDefn(idx) + assert fld_defn.GetWidth() == 4 + # We don't change anything actually + assert lyr.AlterFieldDefn(idx, fld_defn, ogr.ALTER_ALL_FLAG) == ogr.OGRERR_NONE + fld_defn = lyr.GetLayerDefn().GetFieldDefn(idx) + assert fld_defn.GetType() == ogr.OFTInteger + assert fld_defn.GetWidth() == 4 + f = lyr.GetNextFeature() + assert f["int_field"] == 1234 + + +############################################################################### + + +def test_ogr_mitab_alter_field_defn_to_string(tmp_vsimem): + + filename = str(tmp_vsimem / "foo.tab") + + ds = ogr.GetDriverByName("MapInfo File").CreateDataSource(filename) + lyr = ds.CreateLayer("foo") + fld_defn = ogr.FieldDefn("int_field", ogr.OFTInteger) + fld_defn.SetWidth(5) + lyr.CreateField(fld_defn) + f = ogr.Feature(lyr.GetLayerDefn()) + f["int_field"] = 1234 + lyr.CreateFeature(f) + f = None + ds = None + + ds = ogr.Open(filename, update=1) + lyr = ds.GetLayer(0) + idx = lyr.GetLayerDefn().GetFieldIndex("int_field") + new_fld_defn = ogr.FieldDefn("str_field", ogr.OFTString) + assert ( + lyr.AlterFieldDefn(idx, new_fld_defn, ogr.ALTER_NAME_FLAG | ogr.ALTER_TYPE_FLAG) + == ogr.OGRERR_NONE + ) + fld_defn = lyr.GetLayerDefn().GetFieldDefn(idx) + assert fld_defn.GetType() == ogr.OFTString + assert fld_defn.GetWidth() == 254 + f = lyr.GetNextFeature() + assert f["str_field"] == "1234" diff --git a/ogr/ogrsf_frmts/mitab/mitab_datfile.cpp b/ogr/ogrsf_frmts/mitab/mitab_datfile.cpp index b1e0b31c696a..84d0c6b890f1 100644 --- a/ogr/ogrsf_frmts/mitab/mitab_datfile.cpp +++ b/ogr/ogrsf_frmts/mitab/mitab_datfile.cpp @@ -748,19 +748,20 @@ static int TABDATFileSetFieldDefinition(TABDATFieldDef *psFieldDef, else if (nWidth == 0) nWidth = 254; // char fields. - strncpy(psFieldDef->szName, pszName, sizeof(psFieldDef->szName) - 1); - psFieldDef->szName[sizeof(psFieldDef->szName) - 1] = '\0'; + snprintf(psFieldDef->szName, sizeof(psFieldDef->szName), "%s", pszName); psFieldDef->eTABType = eType; - psFieldDef->byLength = static_cast(nWidth); - psFieldDef->byDecimals = static_cast(nPrecision); + psFieldDef->byDecimals = 0; switch (eType) { case TABFChar: psFieldDef->cType = 'C'; + psFieldDef->byLength = static_cast(nWidth); break; case TABFDecimal: psFieldDef->cType = 'N'; + psFieldDef->byLength = static_cast(nWidth); + psFieldDef->byDecimals = static_cast(nPrecision); break; case TABFInteger: psFieldDef->cType = 'C'; @@ -1236,8 +1237,8 @@ int TABDATFile::ReorderFields(int *panMap) /* AlterFieldDefn() */ /************************************************************************/ -int TABDATFile::AlterFieldDefn(int iField, OGRFieldDefn *poNewFieldDefn, - int nFlags) +int TABDATFile::AlterFieldDefn(int iField, const OGRFieldDefn *poSrcFieldDefn, + OGRFieldDefn *poNewFieldDefn, int nFlags) { if (m_fp == nullptr) { @@ -1261,20 +1262,20 @@ int TABDATFile::AlterFieldDefn(int iField, OGRFieldDefn *poNewFieldDefn, } TABFieldType eTABType = m_pasFieldDef[iField].eTABType; - int nWidth = m_pasFieldDef[iField].byLength; - int nPrecision = m_pasFieldDef[iField].byDecimals; - int nWidthDummy = 0; - int nPrecisionDummy = 0; + int nWidth = poSrcFieldDefn->GetWidth(); + int nPrecision = poSrcFieldDefn->GetPrecision(); if (nFlags & ALTER_TYPE_FLAG) { - if (IMapInfoFile::GetTABType(poNewFieldDefn, &eTABType, &nWidthDummy, - &nPrecisionDummy) < 0) + if (IMapInfoFile::GetTABType(poNewFieldDefn, &eTABType, nullptr, + nullptr) < 0) return -1; } if (nFlags & ALTER_WIDTH_PRECISION_FLAG) { - TABFieldType eTABTypeDummy; - if (IMapInfoFile::GetTABType(poNewFieldDefn, &eTABTypeDummy, &nWidth, + // Instead of taking directly poNewFieldDefn->GetWidth()/GetPrecision(), + // use GetTABType() to take into account .dat limitations on + // width & precision to clamp what user might have specify + if (IMapInfoFile::GetTABType(poNewFieldDefn, nullptr, &nWidth, &nPrecision) < 0) return -1; } @@ -1282,22 +1283,24 @@ int TABDATFile::AlterFieldDefn(int iField, OGRFieldDefn *poNewFieldDefn, if ((nFlags & ALTER_TYPE_FLAG) && eTABType != m_pasFieldDef[iField].eTABType) { - if (eTABType != TABFChar) + if (eTABType != TABFChar && m_numRecords > 0) { CPLError(CE_Failure, CPLE_NotSupported, "Can only convert to OFTString"); return -1; } - if ((nFlags & ALTER_WIDTH_PRECISION_FLAG) == 0) + if (eTABType == TABFChar && (nFlags & ALTER_WIDTH_PRECISION_FLAG) == 0) nWidth = 254; } if (nFlags & ALTER_WIDTH_PRECISION_FLAG) { - if (eTABType != TABFChar && nWidth != m_pasFieldDef[iField].byLength) + if (eTABType != TABFChar && nWidth != poSrcFieldDefn->GetWidth() && + m_numRecords > 0) { - CPLError(CE_Failure, CPLE_NotSupported, - "Resizing only supported on String fields"); + CPLError( + CE_Failure, CPLE_NotSupported, + "Resizing only supported on String fields on non-empty layer"); return -1; } } @@ -1330,12 +1333,31 @@ int TABDATFile::AlterFieldDefn(int iField, OGRFieldDefn *poNewFieldDefn, } if (nFlags & ALTER_WIDTH_PRECISION_FLAG) { - m_pasFieldDef[iField].byLength = static_cast(nWidth); - m_pasFieldDef[iField].byDecimals = static_cast(nPrecision); + if (eTABType == TABFChar || eTABType == TABFDecimal) + m_pasFieldDef[iField].byLength = static_cast(nWidth); + if (eTABType == TABFDecimal) + m_pasFieldDef[iField].byDecimals = + static_cast(nPrecision); } return 0; } + const bool bWidthPrecisionPreserved = + (nWidth == poSrcFieldDefn->GetWidth() && + nPrecision == poSrcFieldDefn->GetPrecision()); + if (eTABType == m_pasFieldDef[iField].eTABType && bWidthPrecisionPreserved) + { + return 0; + } + + if (eTABType != TABFChar) + { + // should hopefully not happen given all above checks + CPLError(CE_Failure, CPLE_NotSupported, + "Unsupported AlterFieldDefn() operation"); + return -1; + } + // Otherwise we need to do a temporary file. TABDATFile oTempFile(GetEncoding()); CPLString osOriginalFile(m_pszFname); diff --git a/ogr/ogrsf_frmts/mitab/mitab_imapinfofile.cpp b/ogr/ogrsf_frmts/mitab/mitab_imapinfofile.cpp index 9b40cf77036f..e58cfd5470fe 100644 --- a/ogr/ogrsf_frmts/mitab/mitab_imapinfofile.cpp +++ b/ogr/ogrsf_frmts/mitab/mitab_imapinfofile.cpp @@ -441,7 +441,8 @@ int IMapInfoFile::GetTABType(const OGRFieldDefn *poField, { TABFieldType eTABType; int nWidth = poField->GetWidth(); - int nPrecision = poField->GetPrecision(); + int nPrecision = + poField->GetType() == OFTReal ? poField->GetPrecision() : 0; if (poField->GetType() == OFTInteger) { @@ -519,9 +520,12 @@ int IMapInfoFile::GetTABType(const OGRFieldDefn *poField, return -1; } - *peTABType = eTABType; - *pnWidth = nWidth; - *pnPrecision = nPrecision; + if (peTABType) + *peTABType = eTABType; + if (pnWidth) + *pnWidth = nWidth; + if (pnPrecision) + *pnPrecision = nPrecision; return 0; } diff --git a/ogr/ogrsf_frmts/mitab/mitab_priv.h b/ogr/ogrsf_frmts/mitab/mitab_priv.h index 60bae209ea36..52ad8a549203 100644 --- a/ogr/ogrsf_frmts/mitab/mitab_priv.h +++ b/ogr/ogrsf_frmts/mitab/mitab_priv.h @@ -231,7 +231,8 @@ typedef struct TABDATFieldDef_t { char szName[11]; char cType; - GByte byLength; + GByte + byLength; /* caution: for a native .dat file, this is a binary width for most types */ GByte byDecimals; TABFieldType eTABType; @@ -1876,7 +1877,8 @@ class TABDATFile int DeleteField(int iField); int ReorderFields(int *panMap); - int AlterFieldDefn(int iField, OGRFieldDefn *poNewFieldDefn, int nFlags); + int AlterFieldDefn(int iField, const OGRFieldDefn *poSrcFieldDefn, + OGRFieldDefn *poNewFieldDefn, int nFlags); int SyncToDisk(); diff --git a/ogr/ogrsf_frmts/mitab/mitab_tabfile.cpp b/ogr/ogrsf_frmts/mitab/mitab_tabfile.cpp index 35ac42b4b599..c8291c951783 100644 --- a/ogr/ogrsf_frmts/mitab/mitab_tabfile.cpp +++ b/ogr/ogrsf_frmts/mitab/mitab_tabfile.cpp @@ -2839,18 +2839,17 @@ OGRErr TABFile::AlterFieldDefn(int iField, OGRFieldDefn *poNewFieldDefn, return OGRERR_FAILURE; } - if (m_poDATFile->AlterFieldDefn(iField, poNewFieldDefn, nFlagsIn) == 0) + OGRFieldDefn *poFieldDefn = m_poDefn->GetFieldDefn(iField); + if (m_poDATFile->AlterFieldDefn(iField, poFieldDefn, poNewFieldDefn, + nFlagsIn) == 0) { m_bNeedTABRewrite = TRUE; - OGRFieldDefn *poFieldDefn = m_poDefn->GetFieldDefn(iField); auto oTemporaryUnsealer(poFieldDefn->GetTemporaryUnsealer()); if ((nFlagsIn & ALTER_TYPE_FLAG) && poNewFieldDefn->GetType() != poFieldDefn->GetType()) { poFieldDefn->SetType(poNewFieldDefn->GetType()); - if ((nFlagsIn & ALTER_WIDTH_PRECISION_FLAG) == 0) - poFieldDefn->SetWidth(254); } if (nFlagsIn & ALTER_NAME_FLAG) { @@ -2859,11 +2858,23 @@ OGRErr TABFile::AlterFieldDefn(int iField, OGRFieldDefn *poNewFieldDefn, m_oSetFields.insert( CPLString(poNewFieldDefn->GetNameRef()).toupper()); } - if ((nFlagsIn & ALTER_WIDTH_PRECISION_FLAG) && - poFieldDefn->GetType() == OFTString) + if (poFieldDefn->GetType() == OFTString) { poFieldDefn->SetWidth(m_poDATFile->GetFieldWidth(iField)); } + else if (nFlagsIn & ALTER_WIDTH_PRECISION_FLAG) + { + poFieldDefn->SetWidth(poNewFieldDefn->GetWidth()); + poFieldDefn->SetPrecision(poNewFieldDefn->GetPrecision()); + } + + // Take into account .dat limitations on width & precision to clamp + // what user might have specify + int nWidth = 0; + int nPrecision = 0; + GetTABType(poFieldDefn, nullptr, &nWidth, &nPrecision); + poFieldDefn->SetWidth(nWidth); + poFieldDefn->SetPrecision(nPrecision); if (m_eAccessMode == TABReadWrite) WriteTABFile(); From 3fde3927a91d3d3e47685d3ca3070409c753ecf7 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 10 May 2024 17:41:23 +0200 Subject: [PATCH 029/301] FlatGeoBuf: more explicit error message in case of feature geometry type != layer geometry type Fixes #9893 --- autotest/ogr/ogr_flatgeobuf.py | 18 ++++++++++++++++++ .../flatgeobuf/ogrflatgeobuflayer.cpp | 6 +++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/autotest/ogr/ogr_flatgeobuf.py b/autotest/ogr/ogr_flatgeobuf.py index 48427940f013..a37597cc044c 100644 --- a/autotest/ogr/ogr_flatgeobuf.py +++ b/autotest/ogr/ogr_flatgeobuf.py @@ -1401,3 +1401,21 @@ def test_ogr_flatgeobuf_write_arrow(tmp_vsimem): """ ) + + +############################################################################### + + +@gdaltest.enable_exceptions() +def test_ogr_flatgeobuf_write_mismatch_geom_type(tmp_vsimem): + + filename = str(tmp_vsimem / "temp.fgb") + ds = ogr.GetDriverByName("FlatGeoBuf").CreateDataSource(filename) + lyr = ds.CreateLayer("src_lyr", geom_type=ogr.wkbPoint) + f = ogr.Feature(lyr.GetLayerDefn()) + f.SetGeometry(ogr.CreateGeometryFromWkt("LINESTRING (1 2,3 4)")) + with pytest.raises( + Exception, + match="ICreateFeature: Mismatched geometry type. Feature geometry type is Line String, expected layer geometry type is Point", + ): + lyr.CreateFeature(f) diff --git a/ogr/ogrsf_frmts/flatgeobuf/ogrflatgeobuflayer.cpp b/ogr/ogrsf_frmts/flatgeobuf/ogrflatgeobuflayer.cpp index 76cb1163610c..c541bad2ed0f 100644 --- a/ogr/ogrsf_frmts/flatgeobuf/ogrflatgeobuflayer.cpp +++ b/ogr/ogrsf_frmts/flatgeobuf/ogrflatgeobuflayer.cpp @@ -2285,7 +2285,11 @@ OGRErr OGRFlatGeobufLayer::ICreateFeature(OGRFeature *poNewFeature) ogrGeometry->getGeometryType() != m_eGType) { CPLError(CE_Failure, CPLE_AppDefined, - "ICreateFeature: Mismatched geometry type"); + "ICreateFeature: Mismatched geometry type. " + "Feature geometry type is %s, " + "expected layer geometry type is %s", + OGRGeometryTypeToName(ogrGeometry->getGeometryType()), + OGRGeometryTypeToName(m_eGType)); return OGRERR_FAILURE; } From 35f65aa969e10f307b3fac3fce6ca9c8d44feaa2 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sun, 12 May 2024 14:59:15 +0200 Subject: [PATCH 030/301] OSR importFromESRI() Arc/Info 7 .prj: fix importing LAMBERT_AZIMUTHAL with a 'radius of the sphere of reference' Fixes https://lists.osgeo.org/pipermail/gdal-dev/2024-May/058990.html --- autotest/osr/osr_esri.py | 92 ++++++++++++++++++++++++++++++++++++++++ ogr/ogr_srs_esri.cpp | 62 ++++++++++++++++++++++++--- 2 files changed, 147 insertions(+), 7 deletions(-) diff --git a/autotest/osr/osr_esri.py b/autotest/osr/osr_esri.py index 586c7a56cf90..c109d219e016 100755 --- a/autotest/osr/osr_esri.py +++ b/autotest/osr/osr_esri.py @@ -1097,3 +1097,95 @@ def test_osr_esri_33(): ############################################################################### # + + +def test_osr_esri_lambert_azimutal_no_radius_of_sphere_of_reference(): + + prj = [ + "Projection LAMBERT_AZIMUTHAL", + "Datum WGS84", + "Spheroid WGS84", + "Units METERS", + "Zunits NO", + "Xshift 0.0", + "Yshift 0.0", + "Parameters", + " 20 0 0.0 /* longitude of center of projection", + " 5 0 0.0 /* latitude of center of projection", + "1.0 /* false easting (meters)", + "2.0 /* false northing (meters)", + ] + + srs_prj = osr.SpatialReference() + srs_prj.ImportFromESRI(prj) + + wkt = """PROJCS["unnamed", + GEOGCS["WGS 84", + DATUM["WGS_1984", + SPHEROID["WGS 84",6378137,298.257223563, + AUTHORITY["EPSG","7030"]], + AUTHORITY["EPSG","6326"]], + PRIMEM["Greenwich",0, + AUTHORITY["EPSG","8901"]], + UNIT["degree",0.0174532925199433, + AUTHORITY["EPSG","9122"]], + AUTHORITY["EPSG","4326"]], + PROJECTION["Lambert_Azimuthal_Equal_Area"], + PARAMETER["latitude_of_center",5], + PARAMETER["longitude_of_center",20], + PARAMETER["false_easting",1], + PARAMETER["false_northing",2], + UNIT["METERS",1], + AXIS["Easting",EAST], + AXIS["Northing",NORTH]]""" + + srs_wkt = osr.SpatialReference(wkt=wkt) + assert srs_prj.IsSame(srs_wkt) + + +############################################################################### +# + + +@pytest.mark.parametrize("has_semi_major_and_minor_axis", [True, False]) +def test_osr_esri_lambert_azimutal_radius_of_sphere_of_reference( + has_semi_major_and_minor_axis, +): + + prj = [ + "Projection LAMBERT_AZIMUTHAL", + "Units METERS", + "Zunits NO", + "Xshift 0.0", + "Yshift 0.0", + "Parameters 6378137.0 6378137.0" + if has_semi_major_and_minor_axis + else "Parameters", + "6378137.0 /* radius of the sphere of reference", + " 20 0 0.0 /* longitude of center of projection", + " 5 0 0.0 /* latitude of center of projection", + "1.0 /* false easting (meters)", + "2.0 /* false northing (meters)", + ] + + srs_prj = osr.SpatialReference() + srs_prj.ImportFromESRI(prj) + + wkt = """PROJCS["unnamed", + GEOGCS["unknown", + DATUM["unknown", + SPHEROID["unknown",6378137,0]], + PRIMEM["Greenwich",0], + UNIT["degree",0.0174532925199433, + AUTHORITY["EPSG","9122"]]], + PROJECTION["Lambert_Azimuthal_Equal_Area"], + PARAMETER["latitude_of_center",5], + PARAMETER["longitude_of_center",20], + PARAMETER["false_easting",1], + PARAMETER["false_northing",2], + UNIT["METERS",1], + AXIS["Easting",EAST], + AXIS["Northing",NORTH]]""" + + srs_wkt = osr.SpatialReference(wkt=wkt) + assert srs_prj.IsSame(srs_wkt) diff --git a/ogr/ogr_srs_esri.cpp b/ogr/ogr_srs_esri.cpp index 4d955e8f09da..df0180b48b0b 100644 --- a/ogr/ogr_srs_esri.cpp +++ b/ogr/ogr_srs_esri.cpp @@ -262,7 +262,8 @@ static CPLString OSR_GDS(char **papszNV, const char *pszField, * importFromESRI() by an automatic call to morphFromESRI(). * * Currently only GEOGRAPHIC, UTM, STATEPLANE, GREATBRITIAN_GRID, ALBERS, - * EQUIDISTANT_CONIC, TRANSVERSE (mercator), POLAR, MERCATOR and POLYCONIC + * EQUIDISTANT_CONIC, TRANSVERSE (mercator), POLAR, LAMBERT (Conic Conformal), + * LAMBERT_AZIMUTHAL, MERCATOR and POLYCONIC * projections are supported from old style files. * * At this time there is no equivalent exportToESRI() method. Writing old @@ -310,6 +311,8 @@ OGRErr OGRSpatialReference::importFromESRI(char **papszPrj) /* -------------------------------------------------------------------- */ CPLString osProj = OSR_GDS(papszPrj, "Projection", ""); bool bDatumApplied = false; + bool bHasRadiusOfSphereOfReference = false; + double dfRadiusOfSphereOfReference = 0.0; if (EQUAL(osProj, "")) { @@ -420,10 +423,45 @@ OGRErr OGRSpatialReference::importFromESRI(char **papszPrj) } else if (EQUAL(osProj, "LAMBERT_AZIMUTHAL")) { - SetLAEA(OSR_GDV(papszPrj, "PARAM_2", 0.0), - OSR_GDV(papszPrj, "PARAM_1", 0.0), - OSR_GDV(papszPrj, "PARAM_3", 0.0), - OSR_GDV(papszPrj, "PARAM_4", 0.0)); + for (int iLine = 0; papszPrj[iLine] != nullptr; iLine++) + { + if (strstr(papszPrj[iLine], "radius of the sphere of reference")) + { + bHasRadiusOfSphereOfReference = true; + break; + } + } + if (bHasRadiusOfSphereOfReference) + { + // Cf "Workstation" variation of + // https://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=Lambert_Azimuthal_Equal_Area + // that is supposed to be applied to spheres only. + // It is also documented at page 71 of + // https://kartoweb.itc.nl/geometrics/Map%20projections/Understanding%20Map%20Projections.pdf + // ("Understanding Map Projections", Melita Kennedy, ArcInfo 8) + // We don't particularly enforce the restriction to spheres, so if + // the "Parameters" line had non-spherical axis dimensions, they + // would be used. + // EPSG has a EPSG:1027 projection method "Lambert Azimuthal Equal Area (Spherical)" + // that uses the radius of the authalic sphere, for non-spherical + // ellipsoids, but it is not obvious that it would be appropriate here. + // Examples: + // - https://community.esri.com/t5/data-management-questions/problem-when-projecting-a-raster-file/td-p/400814/page/2 + // - https://lists.osgeo.org/pipermail/gdal-dev/2024-May/058990.html + dfRadiusOfSphereOfReference = OSR_GDV(papszPrj, "PARAM_1", 0.0); + SetLAEA(OSR_GDV(papszPrj, "PARAM_3", 0.0), + OSR_GDV(papszPrj, "PARAM_2", 0.0), + OSR_GDV(papszPrj, "PARAM_4", 0.0), + OSR_GDV(papszPrj, "PARAM_5", 0.0)); + } + else + { + // Example: https://trac.osgeo.org/gdal/ticket/4302 + SetLAEA(OSR_GDV(papszPrj, "PARAM_2", 0.0), + OSR_GDV(papszPrj, "PARAM_1", 0.0), + OSR_GDV(papszPrj, "PARAM_3", 0.0), + OSR_GDV(papszPrj, "PARAM_4", 0.0)); + } } else if (EQUAL(osProj, "EQUIDISTANT_CONIC")) { @@ -589,8 +627,18 @@ OGRErr OGRSpatialReference::importFromESRI(char **papszPrj) } if (!bFoundParameters) { - // If unknown, default to WGS84 so there is something there. - SetWellKnownGeogCS("WGS84"); + if (bHasRadiusOfSphereOfReference) + { + OGRSpatialReference oGCS; + oGCS.SetGeogCS("unknown", "unknown", "unknown", + dfRadiusOfSphereOfReference, 0); + CopyGeogCSFrom(&oGCS); + } + else + { + // If unknown, default to WGS84 so there is something there. + SetWellKnownGeogCS("WGS84"); + } } } } From fad19abcbfcfb0cd4e5296c78c2f64cba3ad6294 Mon Sep 17 00:00:00 2001 From: AbelPau Date: Wed, 15 May 2024 06:52:44 +0200 Subject: [PATCH 031/301] MiraMonVector: Fixing error in linestring (from not polygon) metadata file --- ogr/ogrsf_frmts/miramon/mm_wrlayr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ogr/ogrsf_frmts/miramon/mm_wrlayr.c b/ogr/ogrsf_frmts/miramon/mm_wrlayr.c index b49d1cc67d1d..1682989c48f4 100644 --- a/ogr/ogrsf_frmts/miramon/mm_wrlayr.c +++ b/ogr/ogrsf_frmts/miramon/mm_wrlayr.c @@ -5877,9 +5877,9 @@ static int MMWriteVectorMetadataFile(struct MiraMonVectLayerInfo *hMiraMonLayer, memcpy(&hMMMD.hBB, &hMiraMonLayer->MMPolygon.TopArcHeader.hBB, sizeof(hMMMD.hBB)); hMMMD.pLayerDB = nullptr; + hMMMD.aArcFile = strdup_function( + get_filename_function(hMiraMonLayer->MMPolygon.pszLayerName)); } - hMMMD.aArcFile = strdup_function( - get_filename_function(hMiraMonLayer->MMPolygon.pszLayerName)); nResult = MMWriteMetadataFile(&hMMMD); free_function(hMMMD.aArcFile); return nResult; From 79a5273fa5dc1e05947829f400c7707afebe5ba7 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 14 May 2024 23:15:15 +0200 Subject: [PATCH 032/301] ogrinfo: fix error message when not specifying a filename Related to using argparse Before this fix, ``ogrinfo`` returns: ``` ERROR 4: : No such file or directory ogrinfo failed - unable to open ''. ``` With this fix, it returns: ``` ERROR 1: filename: 1 argument(s) expected. 0 provided. Usage: ogrinfo [--help] [--long-usage] [--help-general] [-json] [-ro] [-update] [--quiet] [-fid ] [-spat ] [-geomfield ] [-where ] [[-sql ]|[-rl]] [-dialect ] [-al] [[-summary]|[-features]] [-limit ] [-fields YES|NO] [-geom YES|NO|SUMMARY|WKT|ISO_WKT] [-oo ]... [-nomd] [-listmdd] [-mdd ]... [-nocount] [-noextent] [-extent3D] [-nogeomtype] [-wkt_format WKT1|WKT2|WKT2_2015|WKT2_2019] [-fielddomain ] [-if ]... filename []... ``` --- apps/ogrinfo_lib.cpp | 19 ++++++++++--------- autotest/utilities/test_ogrinfo.py | 10 ++++++++++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/apps/ogrinfo_lib.cpp b/apps/ogrinfo_lib.cpp index e287a7cb7ae7..9612d6570d7b 100644 --- a/apps/ogrinfo_lib.cpp +++ b/apps/ogrinfo_lib.cpp @@ -2427,15 +2427,16 @@ static std::unique_ptr GDALVectorInfoOptionsGetParser( }) .help(_("Format/driver name(s) to try when opening the input file.")); - argParser->add_argument("filename") - .nargs(argparse::nargs_pattern::optional) - .action( - [psOptionsForBinary](const std::string &s) - { - if (psOptionsForBinary) - psOptionsForBinary->osFilename = s; - }) - .help(_("The data source to open.")); + auto &argFilename = argParser->add_argument("filename") + .action( + [psOptionsForBinary](const std::string &s) + { + if (psOptionsForBinary) + psOptionsForBinary->osFilename = s; + }) + .help(_("The data source to open.")); + if (!psOptionsForBinary) + argFilename.nargs(argparse::nargs_pattern::optional); argParser->add_argument("layer") .remaining() diff --git a/autotest/utilities/test_ogrinfo.py b/autotest/utilities/test_ogrinfo.py index 2ed12333c2c5..1d15129dd13e 100755 --- a/autotest/utilities/test_ogrinfo.py +++ b/autotest/utilities/test_ogrinfo.py @@ -63,6 +63,16 @@ def test_ogrinfo_1(ogrinfo_path): assert ret.find("ESRI Shapefile") != -1 +############################################################################### +# Missing filename + + +def test_ogrinfo_missing_filename(ogrinfo_path): + + (_, err) = gdaltest.runexternal_out_and_err(ogrinfo_path) + assert "filename: 1 argument(s) expected. 0 provided" in err + + ############################################################################### # Test -ro option From e82d16481aa819d8d4f4ce021e1fa766aa443a5f Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 16 May 2024 20:07:56 +0200 Subject: [PATCH 033/301] [Backport release/3.9] MiraMonVector: Fixing the way that Z are written in MiraMon layers (#9952) --- autotest/ogr/ogr_miramon_vector.py | 15 +- .../miramon/mm_gdal_driver_structs.h | 19 +-- ogr/ogrsf_frmts/miramon/mm_wrlayr.c | 128 ++++++++++++++---- ogr/ogrsf_frmts/miramon/ogrmiramonlayer.cpp | 16 ++- 4 files changed, 142 insertions(+), 36 deletions(-) diff --git a/autotest/ogr/ogr_miramon_vector.py b/autotest/ogr/ogr_miramon_vector.py index a7110c8824c2..410ea84f7ce9 100644 --- a/autotest/ogr/ogr_miramon_vector.py +++ b/autotest/ogr/ogr_miramon_vector.py @@ -1173,7 +1173,16 @@ def test_ogr_miramon_write_basic_linestring(tmp_path): ds = None -def test_ogr_miramon_write_basic_linestringZ(tmp_path): +# There are to ways of writing/reading repeated Z's in a linestring file. +# So let's test both ways (different Z's in each vertice or the same Z for all of them) +@pytest.mark.parametrize( + "LinestringZ", + [ + "LINESTRING Z (0 0 4,0 1 3,1 1 2)", + "LINESTRING Z (0 0 4,0 1 4,1 1 4)", + ], +) +def test_ogr_miramon_write_basic_linestringZ(tmp_path, LinestringZ): filename = str(tmp_path / "DataSetLINESTRING") ds = ogr.GetDriverByName("MiramonVector").CreateDataSource(filename) @@ -1184,7 +1193,7 @@ def test_ogr_miramon_write_basic_linestringZ(tmp_path): f = ogr.Feature(lyr.GetLayerDefn()) assign_common_attributes(f) - f.SetGeometry(ogr.CreateGeometryFromWkt("LINESTRING Z (0 0 4,0 1 3,1 1 2)")) + f.SetGeometry(ogr.CreateGeometryFromWkt(LinestringZ)) lyr.CreateFeature(f) f = None ds = None @@ -1198,7 +1207,7 @@ def test_ogr_miramon_write_basic_linestringZ(tmp_path): assert f["NODE_INI"] == [0, 0] assert f["NODE_FI"] == [1, 1] check_common_attributes(f) - assert f.GetGeometryRef().ExportToIsoWkt() == "LINESTRING Z (0 0 4,0 1 3,1 1 2)" + assert f.GetGeometryRef().ExportToIsoWkt() == LinestringZ ds = None diff --git a/ogr/ogrsf_frmts/miramon/mm_gdal_driver_structs.h b/ogr/ogrsf_frmts/miramon/mm_gdal_driver_structs.h index 663cf23b335b..2e9320df42d5 100644 --- a/ogr/ogrsf_frmts/miramon/mm_gdal_driver_structs.h +++ b/ogr/ogrsf_frmts/miramon/mm_gdal_driver_structs.h @@ -99,14 +99,16 @@ CPL_C_START // Necessary for compiling in GDAL project #define MM_LayerType_Node 7 // Layer of Nodes (internal) #define MM_LayerType_Raster 8 // Layer of Raster Type -#define MM_FIRST_NUMBER_OF_POINTS 10000 -#define MM_INCR_NUMBER_OF_POINTS 1000 -#define MM_FIRST_NUMBER_OF_ARCS 10000 -#define MM_INCR_NUMBER_OF_ARCS 1000 -#define MM_FIRST_NUMBER_OF_NODES 20000 // 2*MM_FIRST_NUMBER_OF_ARCS -#define MM_INCR_NUMBER_OF_NODES 2000 -#define MM_FIRST_NUMBER_OF_POLYGONS 10000 -#define MM_INCR_NUMBER_OF_POLYGONS 1000 +// FIRST are used for a first allocation and +// INCR for needed memory increase +#define MM_FIRST_NUMBER_OF_POINTS 100000 // 3.5 Mb +#define MM_INCR_NUMBER_OF_POINTS 100000 // 3.5 Mb +#define MM_FIRST_NUMBER_OF_ARCS 100000 // 5.3 Mb +#define MM_INCR_NUMBER_OF_ARCS 100000 // 5.3 Mb +#define MM_FIRST_NUMBER_OF_NODES 200000 // 2*MM_FIRST_NUMBER_OF_ARCS 1.5 Mb +#define MM_INCR_NUMBER_OF_NODES 200000 // 1.5 Mb +#define MM_FIRST_NUMBER_OF_POLYGONS 100000 // 6 Mb +#define MM_INCR_NUMBER_OF_POLYGONS 100000 // 6 Mb #define MM_FIRST_NUMBER_OF_VERTICES 10000 #define MM_INCR_NUMBER_OF_VERTICES 1000 @@ -653,6 +655,7 @@ struct MiraMonFeature // Number of used elements in *pZCoord MM_N_VERTICES_TYPE nNumpZCoord; MM_COORD_TYPE *pZCoord; + MM_BOOLEAN bAllZHaveSameValue; // Records of the feature MM_EXT_DBF_N_MULTIPLE_RECORDS nNumMRecords; diff --git a/ogr/ogrsf_frmts/miramon/mm_wrlayr.c b/ogr/ogrsf_frmts/miramon/mm_wrlayr.c index 1682989c48f4..18b60286633a 100644 --- a/ogr/ogrsf_frmts/miramon/mm_wrlayr.c +++ b/ogr/ogrsf_frmts/miramon/mm_wrlayr.c @@ -89,8 +89,9 @@ void MMUpdateBoundingBoxXY(struct MMBoundingBox *dfBB, void MMUpdateBoundingBox(struct MMBoundingBox *dfBBToBeAct, struct MMBoundingBox *dfBBWithData); int MMCheckVersionFor3DOffset(struct MiraMonVectLayerInfo *hMiraMonLayer, - MM_FILE_OFFSET nOffset, - MM_INTERNAL_FID nElemCount); + MM_INTERNAL_FID nElemCount, + MM_FILE_OFFSET nOffsetAL, + MM_FILE_OFFSET nZLOffset); int MMCheckVersionOffset(struct MiraMonVectLayerInfo *hMiraMonLayer, MM_FILE_OFFSET OffsetToCheck); int MMCheckVersionForFID(struct MiraMonVectLayerInfo *hMiraMonLayer, @@ -652,6 +653,15 @@ MMWriteZDescriptionHeaders(struct MiraMonVectLayerInfo *hMiraMonLayer, } } + // Overflow? + if (hMiraMonLayer->LayerVersion == MM_32BITS_VERSION && + (pZDescription + nIndex)->nOffsetZ > + MAXIMUM_OFFSET_IN_2GB_VECTORS - nOffsetDiff) + { + MMCPLError(CE_Failure, CPLE_OpenFailed, "Offset Overflow in V1.1"); + return 1; + } + if (MMAppendIntegerDependingOnVersion( hMiraMonLayer, &FlushTMP, &nUL32, (pZDescription + nIndex)->nOffsetZ + nOffsetDiff)) @@ -3921,16 +3931,43 @@ static int MMCreateFeaturePolOrArc(struct MiraMonVectLayerInfo *hMiraMonLayer, // Where 3D part is going to start if (hMiraMonLayer->TopHeader.bIs3d) { - nArcOffset += - hMMFeature->pNCoordRing[nIPart] * pMMArc->nALElementSize; - if (MMCheckVersionFor3DOffset( - hMiraMonLayer, nArcOffset, - hMiraMonLayer->TopHeader.nElemCount + - hMMFeature->nNRings)) + if (nArcElemCount == 0) { - MMCPLDebug("MiraMon", - "Error in MMCheckVersionFor3DOffset()"); - return MM_STOP_WRITING_FEATURES; + if (MMCheckVersionFor3DOffset(hMiraMonLayer, + nArcElemCount + 1, 0, 0)) + return MM_STOP_WRITING_FEATURES; + } + else + { + pZDesc = pMMArc->pZSection.pZDescription; + if (!pZDesc) + { + MMCPLError( + CE_Failure, CPLE_ObjectNull, + "Error: pZDescription should not be nullptr"); + return MM_STOP_WRITING_FEATURES; + } + + if (pZDesc[nArcElemCount - 1].nZCount < 0) + { + // One altitude was written on last element + if (MMCheckVersionFor3DOffset( + hMiraMonLayer, nArcElemCount + 1, nArcOffset, + pZDesc[nArcElemCount - 1].nOffsetZ + + sizeof(*pZ))) + return MM_STOP_WRITING_FEATURES; + } + else + { + // One for each vertice altitude was written on last element + if (MMCheckVersionFor3DOffset( + hMiraMonLayer, nArcElemCount + 1, nArcOffset, + pZDesc[nArcElemCount - 1].nOffsetZ + + sizeof(*pZ) * (pMMArc->pArcHeader + + (nArcElemCount - 1)) + ->nElemCount)) + return MM_STOP_WRITING_FEATURES; + } } } } @@ -4187,6 +4224,16 @@ static int MMCreateFeaturePolOrArc(struct MiraMonVectLayerInfo *hMiraMonLayer, STATISTICAL_UNDEF_VALUE; pZDesc[pArcTopHeader->nElemCount].dfBBmaxz = -STATISTICAL_UNDEF_VALUE; + + // Number of arc altitudes. If the number of altitudes is + // positive this indicates the number of altitudes for + // each vertex of the arc, and all the altitudes of the + // vertex 0 are written first, then those of the vertex 1, + // etc. If the number of altitudes is negative this + // indicates the number of arc altitudes, understanding + // that all the vertices have the same altitude (it is + // the case of a contour line, for example). + for (nIVertice = 0; nIVertice < pCurrentArcHeader->nElemCount; nIVertice++, pZ++) { @@ -4202,17 +4249,41 @@ static int MMCreateFeaturePolOrArc(struct MiraMonVectLayerInfo *hMiraMonLayer, pZDesc[pArcTopHeader->nElemCount].dfBBminz = *pZ; if (pZDesc[pArcTopHeader->nElemCount].dfBBmaxz < *pZ) pZDesc[pArcTopHeader->nElemCount].dfBBmaxz = *pZ; + + // Only one altitude (the same for all vertices) is written + if (hMMFeature->bAllZHaveSameValue) + break; + } + if (hMMFeature->bAllZHaveSameValue) + { + // Same altitude for all vertices + pZDesc[pArcTopHeader->nElemCount].nZCount = -1; + } + else + { + // One diferent altitude for each vertice + pZDesc[pArcTopHeader->nElemCount].nZCount = 1; } - pZDesc[pArcTopHeader->nElemCount].nZCount = 1; + if (pArcTopHeader->nElemCount == 0) pZDesc[pArcTopHeader->nElemCount].nOffsetZ = 0; else { pLastArcHeader = pMMArc->pArcHeader + pArcTopHeader->nElemCount - 1; - pZDesc[pArcTopHeader->nElemCount].nOffsetZ = - pZDesc[pArcTopHeader->nElemCount - 1].nOffsetZ + - sizeof(*pZ) * (pLastArcHeader->nElemCount); + + if (pZDesc[pArcTopHeader->nElemCount - 1].nZCount < 0) + { + pZDesc[pArcTopHeader->nElemCount].nOffsetZ = + pZDesc[pArcTopHeader->nElemCount - 1].nOffsetZ + + sizeof(*pZ); + } + else + { + pZDesc[pArcTopHeader->nElemCount].nOffsetZ = + pZDesc[pArcTopHeader->nElemCount - 1].nOffsetZ + + sizeof(*pZ) * (pLastArcHeader->nElemCount); + } } } @@ -4391,7 +4462,8 @@ static int MMCreateFeaturePoint(struct MiraMonVectLayerInfo *hMiraMonLayer, { if (nElemCount == 0) { - if (MMCheckVersionFor3DOffset(hMiraMonLayer, 0, nElemCount + 1)) + if (MMCheckVersionFor3DOffset(hMiraMonLayer, (nElemCount + 1), + 0, 0)) return MM_STOP_WRITING_FEATURES; } else @@ -4403,10 +4475,10 @@ static int MMCreateFeaturePoint(struct MiraMonVectLayerInfo *hMiraMonLayer, "Error: pZDescription should not be nullptr"); return MM_STOP_WRITING_FEATURES; } + if (MMCheckVersionFor3DOffset( - hMiraMonLayer, - pZDescription[nElemCount - 1].nOffsetZ + sizeof(*pZ), - nElemCount + 1)) + hMiraMonLayer, nElemCount + 1, 0, + pZDescription[nElemCount - 1].nOffsetZ + sizeof(*pZ))) return MM_STOP_WRITING_FEATURES; } } @@ -4436,7 +4508,9 @@ static int MMCreateFeaturePoint(struct MiraMonVectLayerInfo *hMiraMonLayer, pZDescription[nElemCount].dfBBminz = *pZ; pZDescription[nElemCount].dfBBmaxz = *pZ; - pZDescription[nElemCount].nZCount = 1; + + // Specification ask for a negative number. + pZDescription[nElemCount].nZCount = -1; if (nElemCount == 0) pZDescription[nElemCount].nOffsetZ = 0; else @@ -4557,8 +4631,9 @@ int MMCheckVersionOffset(struct MiraMonVectLayerInfo *hMiraMonLayer, // Checks whether a given offset in 3D section exceeds the maximum allowed // index for 2 GB vectors in a specific MiraMon layer. int MMCheckVersionFor3DOffset(struct MiraMonVectLayerInfo *hMiraMonLayer, - MM_FILE_OFFSET nOffset, - MM_INTERNAL_FID nElemCount) + MM_INTERNAL_FID nElemCount, + MM_FILE_OFFSET nOffsetAL, + MM_FILE_OFFSET nZLOffset) { MM_FILE_OFFSET LastOffset; @@ -4570,10 +4645,17 @@ int MMCheckVersionFor3DOffset(struct MiraMonVectLayerInfo *hMiraMonLayer, return 0; // User decided that if necessary, output version can be 2.0 - LastOffset = nOffset + MM_HEADER_SIZE_32_BITS + nElemCount * MM_SIZE_OF_TL; + if (hMiraMonLayer->bIsPoint) + LastOffset = MM_HEADER_SIZE_32_BITS + nElemCount * MM_SIZE_OF_TL; + else // Arc case + { + LastOffset = MM_HEADER_SIZE_32_BITS + + nElemCount * MM_SIZE_OF_AH_32BITS + +nOffsetAL; + } LastOffset += MM_SIZE_OF_ZH; LastOffset += nElemCount * MM_SIZE_OF_ZD_32_BITS; + LastOffset += nZLOffset; if (LastOffset < MAXIMUM_OFFSET_IN_2GB_VECTORS) return 0; diff --git a/ogr/ogrsf_frmts/miramon/ogrmiramonlayer.cpp b/ogr/ogrsf_frmts/miramon/ogrmiramonlayer.cpp index c326d916921f..517008cd7d5f 100644 --- a/ogr/ogrsf_frmts/miramon/ogrmiramonlayer.cpp +++ b/ogr/ogrsf_frmts/miramon/ogrmiramonlayer.cpp @@ -1816,6 +1816,7 @@ OGRErr OGRMiraMonLayer::MMDumpVertices(OGRGeometryH hGeom, MM_MEAN_NUMBER_OF_NCOORDS, 0)) return OGRERR_FAILURE; + hMMFeature.bAllZHaveSameValue = TRUE; for (int iPoint = 0; (MM_N_VERTICES_TYPE)iPoint < hMMFeature.pNCoordRing[hMMFeature.nIRing]; iPoint++) @@ -1831,6 +1832,15 @@ OGRErr OGRMiraMonLayer::MMDumpVertices(OGRGeometryH hGeom, phMiraMonLayer->bIsReal3d = 1; } + // Asking if last Z-coordinate is the same than this one. + // If all Z-coordinates are the same, following MiraMon specification + // only the hMMFeature.pZCoord[0] value will be used and the number of + // vertices will be saved as a negative number on disk + if (iPoint > 0 && + !CPLIsEqual(hMMFeature.pZCoord[hMMFeature.nICoord], + hMMFeature.pZCoord[hMMFeature.nICoord - 1])) + hMMFeature.bAllZHaveSameValue = FALSE; + hMMFeature.nICoord++; } hMMFeature.nIRing++; @@ -1939,9 +1949,11 @@ OGRErr OGRMiraMonLayer::MMWriteGeometry() { CPLDebugOnly("MiraMon", "Error in MMAddFeature() " "MM_STOP_WRITING_FEATURES"); - CPLError(CE_Failure, CPLE_FileIO, "MiraMon format limitations."); CPLError(CE_Failure, CPLE_FileIO, - "Try V2.0 option (-lco Version=V2.0)."); + "MiraMon format limitations. Try V2.0 option (-lco " + "Version=V2.0). " sprintf_UINT64 + " elements have been written correctly.", + phMiraMonLayer->TopHeader.nElemCount); return OGRERR_FAILURE; } From 3feb12912961d6ad755ae62885d7fc762403c91d Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 16 May 2024 20:41:55 +0200 Subject: [PATCH 034/301] typo fix [ci skip] --- ogr/ogrsf_frmts/miramon/mm_wrlayr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ogr/ogrsf_frmts/miramon/mm_wrlayr.c b/ogr/ogrsf_frmts/miramon/mm_wrlayr.c index 18b60286633a..ccdf8724dae9 100644 --- a/ogr/ogrsf_frmts/miramon/mm_wrlayr.c +++ b/ogr/ogrsf_frmts/miramon/mm_wrlayr.c @@ -4261,7 +4261,7 @@ static int MMCreateFeaturePolOrArc(struct MiraMonVectLayerInfo *hMiraMonLayer, } else { - // One diferent altitude for each vertice + // One different altitude for each vertice pZDesc[pArcTopHeader->nElemCount].nZCount = 1; } From cb49511b69568ce4857f2a8dff3046a71dec1d44 Mon Sep 17 00:00:00 2001 From: AbelPau Date: Thu, 16 May 2024 20:30:51 +0200 Subject: [PATCH 035/301] MiraMonVector: Fixing chromium bug 68809 A copy of a pointer was freed instead the pointer. --- ogr/ogrsf_frmts/miramon/mm_gdal_functions.c | 16 ++++++++++------ ogr/ogrsf_frmts/miramon/mm_gdal_functions.h | 2 +- ogr/ogrsf_frmts/miramon/mm_wrlayr.c | 4 ++-- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/ogr/ogrsf_frmts/miramon/mm_gdal_functions.c b/ogr/ogrsf_frmts/miramon/mm_gdal_functions.c index 15c9c1facbcb..330de60aca21 100644 --- a/ogr/ogrsf_frmts/miramon/mm_gdal_functions.c +++ b/ogr/ogrsf_frmts/miramon/mm_gdal_functions.c @@ -1695,13 +1695,17 @@ int MM_ReadExtendedDBFHeaderFromFile(const char *szFileName, return 0; } // End of MM_ReadExtendedDBFHeaderFromFile() -void MM_ReleaseDBFHeader(struct MM_DATA_BASE_XP *data_base_XP) +void MM_ReleaseDBFHeader(struct MM_DATA_BASE_XP **data_base_XP) { - if (data_base_XP) - { - MM_ReleaseMainFields(data_base_XP); - free_function(data_base_XP); - } + if (!data_base_XP) + return; + if (!*data_base_XP) + return; + + MM_ReleaseMainFields(*data_base_XP); + free_function(*data_base_XP); + *data_base_XP = nullptr; + return; } diff --git a/ogr/ogrsf_frmts/miramon/mm_gdal_functions.h b/ogr/ogrsf_frmts/miramon/mm_gdal_functions.h index eb4464f4d625..351470946d24 100644 --- a/ogr/ogrsf_frmts/miramon/mm_gdal_functions.h +++ b/ogr/ogrsf_frmts/miramon/mm_gdal_functions.h @@ -102,7 +102,7 @@ MM_GiveOffsetExtendedFieldName(const struct MM_FIELD *camp); struct MM_DATA_BASE_XP *MM_CreateDBFHeader(MM_EXT_DBF_N_FIELDS n_camps, MM_BYTE nCharSet); void MM_ReleaseMainFields(struct MM_DATA_BASE_XP *data_base_XP); -void MM_ReleaseDBFHeader(struct MM_DATA_BASE_XP *data_base_XP); +void MM_ReleaseDBFHeader(struct MM_DATA_BASE_XP **data_base_XP); MM_BOOLEAN MM_CreateAndOpenDBFFile(struct MM_DATA_BASE_XP *bd_xp, const char *NomFitxer); int MM_DuplicateFieldDBXP(struct MM_FIELD *camp_final, diff --git a/ogr/ogrsf_frmts/miramon/mm_wrlayr.c b/ogr/ogrsf_frmts/miramon/mm_wrlayr.c index ccdf8724dae9..c0d30b761513 100644 --- a/ogr/ogrsf_frmts/miramon/mm_wrlayr.c +++ b/ogr/ogrsf_frmts/miramon/mm_wrlayr.c @@ -7397,8 +7397,8 @@ static void MMDestroyMMDBFile(struct MiraMonVectLayerInfo *hMiraMonLayer, if (pMMAdmDB && pMMAdmDB->pMMBDXP) { - MM_ReleaseDBFHeader(pMMAdmDB->pMMBDXP); - hMiraMonLayer->pMMBDXP = pMMAdmDB->pMMBDXP = nullptr; + MM_ReleaseDBFHeader(&pMMAdmDB->pMMBDXP); + hMiraMonLayer->pMMBDXP = nullptr; } if (pMMAdmDB && pMMAdmDB->pRecList) { From b15ed8e8f3135e3b6d792e6507c35b134e204c54 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 17 May 2024 14:29:51 +0200 Subject: [PATCH 036/301] gdalwarp: fix help message for -wm (fixes #9960) --- apps/gdalwarp_lib.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/gdalwarp_lib.cpp b/apps/gdalwarp_lib.cpp index c2e82d772623..9ca7146e5622 100644 --- a/apps/gdalwarp_lib.cpp +++ b/apps/gdalwarp_lib.cpp @@ -5731,7 +5731,7 @@ GDALWarpAppOptionsGetParser(GDALWarpAppOptions *psOptions, else psOptions->dfWarpMemoryLimit = CPLAtofM(s.c_str()); }) - .help(_("Error threshold.")); + .help(_("Set max warp memory.")); argParser->add_argument("-srcnodata") .metavar("[ ...]") From 37ae98f6e19c801ed813ad7db6fd46b11fea60b5 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 17 May 2024 18:48:33 +0200 Subject: [PATCH 037/301] CI: try to fix Travis-Ci Graviton2 builds --- ci/travis/graviton2/before_install.sh | 8 ++++---- ci/travis/graviton2/script.sh | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ci/travis/graviton2/before_install.sh b/ci/travis/graviton2/before_install.sh index 5c85105472b8..dcec7440be08 100755 --- a/ci/travis/graviton2/before_install.sh +++ b/ci/travis/graviton2/before_install.sh @@ -3,12 +3,12 @@ set -e sudo pip uninstall -y setuptools -sudo rm -rf /usr/local/lib/python* -sudo apt-get remove -f python +sudo apt-get remove -f python python3-dev python3-pip python3-setuptools +sudo rm -rf /usr/bin/python /usr/local/lib/python* /usr/local/bin/pip* sudo apt-get update sudo apt-get install -y software-properties-common sudo apt-get update -sudo apt-get install -y --allow-unauthenticated python3-pip python3-numpy python3-setuptools libpng-dev libjpeg-dev libgif-dev liblzma-dev libgeos-dev libcurl4-gnutls-dev libproj-dev libxml2-dev libexpat-dev libxerces-c-dev libnetcdf-dev netcdf-bin libpoppler-dev libpoppler-private-dev libspatialite-dev gpsbabel swig libhdf4-alt-dev libhdf5-serial-dev poppler-utils libfreexl-dev unixodbc-dev libwebp-dev liblcms2-2 libpcre3-dev libcrypto++-dev libfyba-dev libkml-dev libmysqlclient-dev mysql-client-core-8.0 libcfitsio-dev openjdk-8-jdk libzstd-dev libblosc-dev liblz4-dev ccache bash zip curl libpq-dev postgresql-client postgis cmake libssl-dev libboost-dev autoconf automake sqlite3 libopenexr-dev make python3-dev g++ fossil libgeotiff-dev libopenjp2-7-dev libcairo2-dev ca-certificates +sudo apt-get install -y --allow-unauthenticated python3-dev python3-pip python3-numpy python3-setuptools libpng-dev libjpeg-dev libgif-dev liblzma-dev libgeos-dev libcurl4-gnutls-dev libproj-dev libxml2-dev libexpat-dev libxerces-c-dev libnetcdf-dev netcdf-bin libpoppler-dev libpoppler-private-dev libspatialite-dev gpsbabel swig libhdf4-alt-dev libhdf5-serial-dev poppler-utils libfreexl-dev unixodbc-dev libwebp-dev liblcms2-2 libpcre3-dev libcrypto++-dev libfyba-dev libkml-dev libmysqlclient-dev mysql-client-core-8.0 libcfitsio-dev openjdk-8-jdk libzstd-dev libblosc-dev liblz4-dev ccache bash zip curl libpq-dev postgresql-client postgis cmake libssl-dev libboost-dev autoconf automake sqlite3 libopenexr-dev make g++ fossil libgeotiff-dev libopenjp2-7-dev libcairo2-dev ca-certificates -sudo rm -rf /usr/bin/python +python3 -m pip --version diff --git a/ci/travis/graviton2/script.sh b/ci/travis/graviton2/script.sh index c8470b76d942..c1d570a7f751 100755 --- a/ci/travis/graviton2/script.sh +++ b/ci/travis/graviton2/script.sh @@ -9,7 +9,7 @@ export PYTEST="python3 -m pytest -vv -p no:sugar --color=no" (cd "$PWD/build" && make quicktest) # install test dependencies -sudo pip3 install -U -r "$PWD/autotest/requirements.txt" +sudo python3 -m pip install -U -r "$PWD/autotest/requirements.txt" # Run all the Python autotests cd build From acd40d1fae9797c966bd176f1af6726506cae067 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sun, 12 May 2024 20:16:39 +0200 Subject: [PATCH 038/301] CI Conda: remove no longer needed patches --- ...hon-bindings-due-to-https-github.com.patch | 38 ------------------- ci/travis/conda/bld.bat.patch | 13 ------- ci/travis/conda/build.sh.patch | 13 ------- ci/travis/conda/setup.sh | 7 ---- ci/travis/conda/upload.sh | 3 +- 5 files changed, 1 insertion(+), 73 deletions(-) delete mode 100644 ci/travis/conda/0001-Fix-build-of-Python-bindings-due-to-https-github.com.patch delete mode 100644 ci/travis/conda/bld.bat.patch delete mode 100644 ci/travis/conda/build.sh.patch diff --git a/ci/travis/conda/0001-Fix-build-of-Python-bindings-due-to-https-github.com.patch b/ci/travis/conda/0001-Fix-build-of-Python-bindings-due-to-https-github.com.patch deleted file mode 100644 index 19d6fe4db1f3..000000000000 --- a/ci/travis/conda/0001-Fix-build-of-Python-bindings-due-to-https-github.com.patch +++ /dev/null @@ -1,38 +0,0 @@ -From c8e8942b5dd50d1abb4369662b0cb9d282c3bf69 Mon Sep 17 00:00:00 2001 -From: Even Rouault -Date: Wed, 6 Dec 2023 19:06:08 +0100 -Subject: [PATCH] Fix build of Python bindings due to - https://github.com/OSGeo/gdal/pull/8926 changes - ---- - recipe/install_python.sh | 14 ++++++++------ - 1 file changed, 8 insertions(+), 6 deletions(-) - -diff --git a/recipe/install_python.sh b/recipe/install_python.sh -index 4bcd219..1561771 100644 ---- a/recipe/install_python.sh -+++ b/recipe/install_python.sh -@@ -21,12 +21,14 @@ cmake "-UPython*" \ - cmake --build . --target python_generated_files - cd swig/python - --cat >pyproject.toml <=40.8.0", "wheel"] --build-backend = "setuptools.build_meta" --EOF -- - $PYTHON setup.py build_ext - -+# Cf https://github.com/OSGeo/gdal/pull/8926 -+# The above build_ext has been run with numpy already installed in the environment -+# because otherwise it would have failed. -+# But as we run pip install without dependencies, we have to force -+# GDAL_PYTHON_BINDINGS_WITHOUT_NUMPY=YES to disable the related check. -+# This is OK here since the bindings have already been built, and it is just -+# a matter of bundling them in the wheel. -+export GDAL_PYTHON_BINDINGS_WITHOUT_NUMPY=YES - $PYTHON -m pip install --no-deps --ignore-installed . --- -2.25.1 - diff --git a/ci/travis/conda/bld.bat.patch b/ci/travis/conda/bld.bat.patch deleted file mode 100644 index 7bb286166552..000000000000 --- a/ci/travis/conda/bld.bat.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/recipe/bld.bat b/recipe/bld.bat -index b6616ae..b98a480 100644 ---- a/recipe/bld.bat -+++ b/recipe/bld.bat -@@ -32,6 +32,8 @@ cmake -G "Ninja" ^ - -DGDAL_USE_PARQUET=OFF ^ - -DGDAL_USE_ARROW=OFF ^ - -DGDAL_USE_ARROWDATASET=OFF ^ -+ -DOGR_REGISTER_DRIVER_ARROW_FOR_LATER_PLUGIN=ON ^ -+ -DOGR_REGISTER_DRIVER_PARQUET_FOR_LATER_PLUGIN=ON ^ - "%SRC_DIR%" - - if errorlevel 1 exit /b 1 diff --git a/ci/travis/conda/build.sh.patch b/ci/travis/conda/build.sh.patch deleted file mode 100644 index 373b5103c2ff..000000000000 --- a/ci/travis/conda/build.sh.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/recipe/build.sh b/recipe/build.sh -index a3474a2..249dc89 100644 ---- a/recipe/build.sh -+++ b/recipe/build.sh -@@ -23,6 +23,8 @@ cmake -G "Unix Makefiles" \ - -DGDAL_USE_PARQUET=OFF \ - -DGDAL_USE_ARROW=OFF \ - -DGDAL_USE_ARROWDATASET=OFF \ -+ -DOGR_REGISTER_DRIVER_ARROW_FOR_LATER_PLUGIN=ON \ -+ -DOGR_REGISTER_DRIVER_PARQUET_FOR_LATER_PLUGIN=ON \ - -DGDAL_ENABLE_HDF5_GLOBAL_LOCK:BOOL=ON \ - -DBUILD_PYTHON_BINDINGS:BOOL=OFF \ - -DBUILD_JAVA_BINDINGS:BOOL=OFF \ diff --git a/ci/travis/conda/setup.sh b/ci/travis/conda/setup.sh index 6692df1b9c29..c3bc9ca1491a 100755 --- a/ci/travis/conda/setup.sh +++ b/ci/travis/conda/setup.sh @@ -16,13 +16,6 @@ git clone https://github.com/conda-forge/gdal-feedstock.git cd gdal-feedstock -# Set -DOGR_REGISTER_DRIVER_ARROW_FOR_LATER_PLUGIN=ON and -DOGR_REGISTER_DRIVER_PARQUET_FOR_LATER_PLUGIN=ON -# To be dropped once that's upstreamed in conda-forge/gdal-feedstock.git -patch -p1 < ../ci/travis/conda/build.sh.patch -patch -p1 --binary < ../ci/travis/conda/bld.bat.patch - -patch -p1 < ../ci/travis/conda/0001-Fix-build-of-Python-bindings-due-to-https-github.com.patch - cat > recipe/recipe_clobber.yaml < Date: Mon, 20 May 2024 18:56:44 +0200 Subject: [PATCH 039/301] CI: fix Conda builds --- ci/travis/conda/setup.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ci/travis/conda/setup.sh b/ci/travis/conda/setup.sh index c3bc9ca1491a..b4cd637babee 100755 --- a/ci/travis/conda/setup.sh +++ b/ci/travis/conda/setup.sh @@ -6,6 +6,9 @@ conda config --show-sources rm -f ~/.condarc +# Cf https://github.com/conda-forge/gdal-feedstock/pull/939 +conda config --add channels conda-forge/label/numpy_rc + conda config --show-sources conda config --show From 2ee0b46b0521b3ff63cc000699051c54d7cf828b Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 20 May 2024 22:22:40 +0200 Subject: [PATCH 040/301] CI: workaround issue with latest version of coverallsapp/coverage-reporter --- .github/workflows/linux_build.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/linux_build.yml b/.github/workflows/linux_build.yml index f7af4e104e44..30204f559ffb 100644 --- a/.github/workflows/linux_build.yml +++ b/.github/workflows/linux_build.yml @@ -318,11 +318,13 @@ jobs: ${TEST_CMD} - name: Coveralls - uses: coverallsapp/github-action@3dfc5567390f6fa9267c0ee9c251e4c8c3f18949 # v2.2.3 + uses: coverallsapp/github-action@643bc377ffa44ace6394b2b5d0d3950076de9f63 # v2.3.0 if: ${{ matrix.id == 'coverage' }} with: format: lcov file: build-coverage/gdal_filtered.info + # Pin to v0.6.10 because of issue with v0.6.11 (https://github.com/coverallsapp/coverage-reporter/issues/127) + coverage-reporter-version: v0.6.10 - name: Push build environment if: github.event_name == 'push' From c67e7c51ff4faacbf78d83b494d805b6278c6f59 Mon Sep 17 00:00:00 2001 From: AbelPau Date: Mon, 20 May 2024 18:06:23 +0200 Subject: [PATCH 041/301] Fixing chromium bug 68809 correctly When first feature fails, the creation of the table MMDB has to be destroyed --- ogr/ogrsf_frmts/miramon/mm_wrlayr.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ogr/ogrsf_frmts/miramon/mm_wrlayr.c b/ogr/ogrsf_frmts/miramon/mm_wrlayr.c index c0d30b761513..51899ba919cf 100644 --- a/ogr/ogrsf_frmts/miramon/mm_wrlayr.c +++ b/ogr/ogrsf_frmts/miramon/mm_wrlayr.c @@ -4409,7 +4409,10 @@ static int MMCreateRecordDBF(struct MiraMonVectLayerInfo *hMiraMonLayer, if (hMiraMonLayer->TopHeader.nElemCount == 0) { if (MMCreateMMDB(hMiraMonLayer, nullptr)) + { + MMDestroyMMDB(hMiraMonLayer); return MM_FATAL_ERROR_WRITING_FEATURES; + } } result = MMAddDBFRecordToMMDB(hMiraMonLayer, hMMFeature); From a5921d76e058a98791f9aa70dc3140bbe5c62e69 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 16 May 2024 15:54:13 +0200 Subject: [PATCH 042/301] JSONFG identification: recognize more JSON-FG specification version --- ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp b/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp index 2006604795e9..24f411f971c2 100644 --- a/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp +++ b/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp @@ -508,17 +508,24 @@ bool JSONFGIsObject(const char *pszText) const std::string osWithoutSpace = GetCompactJSon(pszText, strlen(pszText)); + // In theory, conformsTo should be required, but let be lax... { const auto nPos = osWithoutSpace.find("\"conformsTo\":["); if (nPos != std::string::npos) { - if (osWithoutSpace.find("\"[ogc-json-fg-1-0.1:core]\"", nPos) != - std::string::npos || - osWithoutSpace.find( - "\"http://www.opengis.net/spec/json-fg-1/0.1\"", nPos) != - std::string::npos) + for (const char *pszVersion : {"0.1", "0.2", "0.3"}) { - return true; + if (osWithoutSpace.find( + CPLSPrintf("\"[ogc-json-fg-1-%s:core]\"", pszVersion), + nPos) != std::string::npos || + osWithoutSpace.find( + CPLSPrintf( + "\"http://www.opengis.net/spec/json-fg-1/%s\"", + pszVersion), + nPos) != std::string::npos) + { + return true; + } } } } From 2033091af4fb9ba284def21ad59dee5bfc3467ae Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 16 May 2024 16:23:40 +0200 Subject: [PATCH 043/301] Test opening a JSONFG file with just coordRefSys as a hint it is one --- .../jsonfg/crs_none_fc_mixed_feat_no_conformsTo.json | 12 ++++++++++++ autotest/ogr/ogr_jsonfg.py | 9 +++++++++ 2 files changed, 21 insertions(+) create mode 100644 autotest/ogr/data/jsonfg/crs_none_fc_mixed_feat_no_conformsTo.json diff --git a/autotest/ogr/data/jsonfg/crs_none_fc_mixed_feat_no_conformsTo.json b/autotest/ogr/data/jsonfg/crs_none_fc_mixed_feat_no_conformsTo.json new file mode 100644 index 000000000000..7f1089f35cb5 --- /dev/null +++ b/autotest/ogr/data/jsonfg/crs_none_fc_mixed_feat_no_conformsTo.json @@ -0,0 +1,12 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "id": 1, + "coordRefSys": "[EPSG:4326]", + "geometry": { "type": "Point", "coordinates": [2, 49] }, + "properties": {} + } + ] +} diff --git a/autotest/ogr/ogr_jsonfg.py b/autotest/ogr/ogr_jsonfg.py index b2d5aecbbcc2..55db4212ce79 100755 --- a/autotest/ogr/ogr_jsonfg.py +++ b/autotest/ogr/ogr_jsonfg.py @@ -296,6 +296,15 @@ def test_jsonfg_read_coordRefSys_invalid(coordRefSys): ), ("data/jsonfg/crs_4326_feat_only.json", 4326, [2, 1], 2, 49, None, None), ("data/jsonfg/crs_none.json", 4326, [2, 1], 2, 49, None, None), + ( + "data/jsonfg/crs_none_fc_mixed_feat_no_conformsTo.json", + 4326, + [2, 1], + 2, + 49, + None, + None, + ), ], ) def test_jsonfg_read_crs( From 4739aceee894f5c057d5b6de14b424ca58f64306 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 16 May 2024 15:43:09 +0200 Subject: [PATCH 044/301] GeoJSON/JSONFG: do not recognize GeoJSON files with a featureType feature property as JSONFG Fixes https://github.com/OSGeo/gdal/issues/9946 --- autotest/ogr/data/geojson/featuretype.json | 30 +++++++++ autotest/ogr/ogr_geojson.py | 10 +++ ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp | 68 ++++++++++++++++++++- 3 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 autotest/ogr/data/geojson/featuretype.json diff --git a/autotest/ogr/data/geojson/featuretype.json b/autotest/ogr/data/geojson/featuretype.json new file mode 100644 index 000000000000..0cd898c0af60 --- /dev/null +++ b/autotest/ogr/data/geojson/featuretype.json @@ -0,0 +1,30 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "featureType": "Pipe" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 10.618902721, + 59.949950678 + ], + [ + 10.619008536, + 59.949828304 + ] + ] + } + } + ], + "crs": { + "type": "name", + "properties": { + "name": "urn:ogc:def:crs:EPSG::4326" + } + } +} diff --git a/autotest/ogr/ogr_geojson.py b/autotest/ogr/ogr_geojson.py index 2b5e0837e68d..7e14d2e13e51 100755 --- a/autotest/ogr/ogr_geojson.py +++ b/autotest/ogr/ogr_geojson.py @@ -5151,3 +5151,13 @@ def test_ogr_geojson_geom_coord_precision_RFC7946(tmp_vsimem): prec = geom_fld.GetCoordinatePrecision() assert prec.GetXYResolution() == pytest.approx(8.983152841195214e-09) assert prec.GetZResolution() == 1e-3 + + +############################################################################### +# Test opening a file that has a featureType property, but is not JSONFG. + + +def test_ogr_geojson_open_with_featureType_non_jsonfg(): + + ds = gdal.OpenEx("data/geojson/featuretype.json") + assert ds.GetDriver().GetDescription() == "GeoJSON" diff --git a/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp b/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp index 24f411f971c2..a7373b0e0ec3 100644 --- a/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp +++ b/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp @@ -31,6 +31,7 @@ #include #include "cpl_port.h" #include "cpl_conv.h" +#include "cpl_json_streaming_parser.h" #include "ogr_geometry.h" #include // JSON-C @@ -530,9 +531,7 @@ bool JSONFGIsObject(const char *pszText) } } - if (osWithoutSpace.find("\"coordRefSys\":") != std::string::npos || - osWithoutSpace.find("\"featureType\":\"") != std::string::npos || - osWithoutSpace.find("\"place\":{\"type\":") != std::string::npos || + if (osWithoutSpace.find("\"place\":{\"type\":") != std::string::npos || osWithoutSpace.find("\"place\":{\"coordinates\":") != std::string::npos || osWithoutSpace.find("\"time\":{\"date\":") != std::string::npos || @@ -542,6 +541,69 @@ bool JSONFGIsObject(const char *pszText) return true; } + if (osWithoutSpace.find("\"coordRefSys\":") != std::string::npos || + osWithoutSpace.find("\"featureType\":") != std::string::npos) + { + // Check that coordRefSys and/or featureType are either at the + // FeatureCollection or Feature level + struct MyParser : public CPLJSonStreamingParser + { + bool m_bFoundJSONFGFeatureType = false; + bool m_bFoundJSONFGCoordrefSys = false; + std::string m_osLevel{}; + + void StartObjectMember(const char *pszKey, size_t nLength) override + { + if (!m_bFoundJSONFGFeatureType && + nLength == strlen("featureType") && + strcmp(pszKey, "featureType") == 0) + { + m_bFoundJSONFGFeatureType = + (m_osLevel == "{" || // At FeatureCollection level + m_osLevel == "{[{"); // At Feature level + } + else if (!m_bFoundJSONFGCoordrefSys && + nLength == strlen("coordRefSys") && + strcmp(pszKey, "coordRefSys") == 0) + { + m_bFoundJSONFGCoordrefSys = + (m_osLevel == "{" || // At FeatureCollection level + m_osLevel == "{[{"); // At Feature level + } + } + + void StartObject() override + { + m_osLevel += '{'; + } + + void EndObject() override + { + if (!m_osLevel.empty()) + m_osLevel.pop_back(); + } + + void StartArray() override + { + m_osLevel += '['; + } + + void EndArray() override + { + if (!m_osLevel.empty()) + m_osLevel.pop_back(); + } + }; + + MyParser oParser; + oParser.Parse(pszText, strlen(pszText), true); + if (oParser.m_bFoundJSONFGFeatureType || + oParser.m_bFoundJSONFGCoordrefSys) + { + return true; + } + } + return false; } From 7b0fa5640d0ae40c971f0c2833af95efd4135192 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 16 May 2024 15:48:02 +0200 Subject: [PATCH 045/301] GeoJSON/JSONFG: make it possible with -if/papszAllowedDrivers to force opening a JSONFG file with the GeoJSON driver Refs #9946 --- autotest/ogr/ogr_geojson.py | 19 ++++++++++ .../geojson/ogrgeojsondatasource.cpp | 4 +-- ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp | 36 ++++++++++++------- ogr/ogrsf_frmts/geojson/ogrgeojsonutils.h | 2 +- 4 files changed, 46 insertions(+), 15 deletions(-) diff --git a/autotest/ogr/ogr_geojson.py b/autotest/ogr/ogr_geojson.py index 7e14d2e13e51..048c8b6548f5 100755 --- a/autotest/ogr/ogr_geojson.py +++ b/autotest/ogr/ogr_geojson.py @@ -5161,3 +5161,22 @@ def test_ogr_geojson_open_with_featureType_non_jsonfg(): ds = gdal.OpenEx("data/geojson/featuretype.json") assert ds.GetDriver().GetDescription() == "GeoJSON" + + +############################################################################### +# Test force opening a JSONFG file with the GeoJSON driver + + +def test_ogr_geojson_open_jsonfg_with_geojson(): + + ds = gdal.OpenEx("data/jsonfg/crs_none.json", allowed_drivers=["GeoJSON"]) + assert ds.GetDriver().GetDescription() == "GeoJSON" + + if gdal.GetDriverByName("JSONFG"): + ds = gdal.OpenEx("data/jsonfg/crs_none.json") + assert ds.GetDriver().GetDescription() == "JSONFG" + + ds = gdal.OpenEx( + "data/jsonfg/crs_none.json", allowed_drivers=["GeoJSON", "JSONFG"] + ) + assert ds.GetDriver().GetDescription() == "JSONFG" diff --git a/ogr/ogrsf_frmts/geojson/ogrgeojsondatasource.cpp b/ogr/ogrsf_frmts/geojson/ogrgeojsondatasource.cpp index 5a2d259d4dbf..ad83a8672983 100644 --- a/ogr/ogrsf_frmts/geojson/ogrgeojsondatasource.cpp +++ b/ogr/ogrsf_frmts/geojson/ogrgeojsondatasource.cpp @@ -882,7 +882,7 @@ int OGRGeoJSONDataSource::ReadFromService(GDALOpenInfo *poOpenInfo, /* -------------------------------------------------------------------- */ if (EQUAL(pszSource, poOpenInfo->pszFilename) && osJSonFlavor_ == "GeoJSON") { - if (!GeoJSONIsObject(pszGeoData_)) + if (!GeoJSONIsObject(pszGeoData_, poOpenInfo->papszAllowedDrivers)) { if (ESRIJSONIsObject(pszGeoData_) || TopoJSONIsObject(pszGeoData_) || @@ -1003,7 +1003,7 @@ void OGRGeoJSONDataSource::LoadLayers(GDALOpenInfo *poOpenInfo, oOpenInfo.fpL = nullptr; } - if (!GeoJSONIsObject(pszGeoData_)) + if (!GeoJSONIsObject(pszGeoData_, poOpenInfo->papszAllowedDrivers)) { CPLDebug(pszJSonFlavor, "No valid %s data found in source '%s'", pszJSonFlavor, pszName_); diff --git a/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp b/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp index a7373b0e0ec3..86eed7535833 100644 --- a/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp +++ b/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp @@ -157,7 +157,8 @@ static CPLString GetCompactJSon(const char *pszText, size_t nMaxSize) /************************************************************************/ static bool IsGeoJSONLikeObject(const char *pszText, bool &bMightBeSequence, - bool &bReadMoreBytes) + bool &bReadMoreBytes, + CSLConstList papszAllowedDrivers) { bMightBeSequence = false; bReadMoreBytes = false; @@ -168,8 +169,12 @@ static bool IsGeoJSONLikeObject(const char *pszText, bool &bMightBeSequence, if (IsTypeSomething(pszText, "Topology")) return false; - if (JSONFGIsObject(pszText) && GDALGetDriverByName("JSONFG")) + if ((!papszAllowedDrivers || + CSLFindString(papszAllowedDrivers, "JSONFG") >= 0) && + GDALGetDriverByName("JSONFG") && JSONFGIsObject(pszText)) + { return false; + } if (IsTypeSomething(pszText, "FeatureCollection")) { @@ -230,7 +235,8 @@ static bool IsGeoJSONLikeObject(const char *pszText) { bool bMightBeSequence; bool bReadMoreBytes; - return IsGeoJSONLikeObject(pszText, bMightBeSequence, bReadMoreBytes); + return IsGeoJSONLikeObject(pszText, bMightBeSequence, bReadMoreBytes, + nullptr); } /************************************************************************/ @@ -396,13 +402,14 @@ static bool GeoJSONFileIsObject(GDALOpenInfo *poOpenInfo) bool bReadMoreBytes = false; if (!IsGeoJSONLikeObject( reinterpret_cast(poOpenInfo->pabyHeader), - bMightBeSequence, bReadMoreBytes)) + bMightBeSequence, bReadMoreBytes, poOpenInfo->papszAllowedDrivers)) { if (!(bReadMoreBytes && poOpenInfo->nHeaderBytes >= 6000 && poOpenInfo->TryToIngest(1000 * 1000) && !IsGeoJSONLikeObject( reinterpret_cast(poOpenInfo->pabyHeader), - bMightBeSequence, bReadMoreBytes))) + bMightBeSequence, bReadMoreBytes, + poOpenInfo->papszAllowedDrivers))) { return false; } @@ -417,11 +424,12 @@ static bool GeoJSONFileIsObject(GDALOpenInfo *poOpenInfo) /* GeoJSONIsObject() */ /************************************************************************/ -bool GeoJSONIsObject(const char *pszText) +bool GeoJSONIsObject(const char *pszText, CSLConstList papszAllowedDrivers) { bool bMightBeSequence = false; bool bReadMoreBytes = false; - if (!IsGeoJSONLikeObject(pszText, bMightBeSequence, bReadMoreBytes)) + if (!IsGeoJSONLikeObject(pszText, bMightBeSequence, bReadMoreBytes, + papszAllowedDrivers)) { return false; } @@ -452,13 +460,15 @@ static bool GeoJSONSeqFileIsObject(GDALOpenInfo *poOpenInfo) bool bMightBeSequence = false; bool bReadMoreBytes = false; - if (!IsGeoJSONLikeObject(pszText, bMightBeSequence, bReadMoreBytes)) + if (!IsGeoJSONLikeObject(pszText, bMightBeSequence, bReadMoreBytes, + poOpenInfo->papszAllowedDrivers)) { if (!(bReadMoreBytes && poOpenInfo->nHeaderBytes >= 6000 && poOpenInfo->TryToIngest(1000 * 1000) && IsGeoJSONLikeObject( reinterpret_cast(poOpenInfo->pabyHeader), - bMightBeSequence, bReadMoreBytes))) + bMightBeSequence, bReadMoreBytes, + poOpenInfo->papszAllowedDrivers))) { return false; } @@ -476,7 +486,8 @@ bool GeoJSONSeqIsObject(const char *pszText) bool bMightBeSequence = false; bool bReadMoreBytes = false; - if (!IsGeoJSONLikeObject(pszText, bMightBeSequence, bReadMoreBytes)) + if (!IsGeoJSONLikeObject(pszText, bMightBeSequence, bReadMoreBytes, + nullptr)) { return false; } @@ -661,11 +672,12 @@ GeoJSONSourceType GeoJSONGetSourceType(GDALOpenInfo *poOpenInfo) return eGeoJSONSourceFile; } const char *pszText = poOpenInfo->pszFilename + strlen("GeoJSON:"); - if (GeoJSONIsObject(pszText)) + if (GeoJSONIsObject(pszText, poOpenInfo->papszAllowedDrivers)) return eGeoJSONSourceText; return eGeoJSONSourceUnknown; } - else if (GeoJSONIsObject(poOpenInfo->pszFilename)) + else if (GeoJSONIsObject(poOpenInfo->pszFilename, + poOpenInfo->papszAllowedDrivers)) { srcType = eGeoJSONSourceText; } diff --git a/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.h b/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.h index d0988eb450e8..37940f161447 100644 --- a/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.h +++ b/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.h @@ -59,7 +59,7 @@ GeoJSONSourceType JSONFGDriverGetSourceType(GDALOpenInfo *poOpenInfo); /* GeoJSONIsObject */ /************************************************************************/ -bool GeoJSONIsObject(const char *pszText); +bool GeoJSONIsObject(const char *pszText, CSLConstList papszAllowedDrivers); bool GeoJSONSeqIsObject(const char *pszText); bool ESRIJSONIsObject(const char *pszText); bool TopoJSONIsObject(const char *pszText); From c79484a77b6e64f38da436e5906c37a4f29eacae Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 16 May 2024 15:51:15 +0200 Subject: [PATCH 046/301] GDALIdentifyDriverEx(): transmit papszAllowedDrivers to Identify(), to for example make it possible with -if/papszAllowedDrivers to force identifying a JSONFG file with the GeoJSON driver Refs #9946 --- autotest/ogr/ogr_geojson.py | 21 +++++++++++++++++++++ gcore/gdaldriver.cpp | 1 + 2 files changed, 22 insertions(+) diff --git a/autotest/ogr/ogr_geojson.py b/autotest/ogr/ogr_geojson.py index 048c8b6548f5..f905273b2939 100755 --- a/autotest/ogr/ogr_geojson.py +++ b/autotest/ogr/ogr_geojson.py @@ -5180,3 +5180,24 @@ def test_ogr_geojson_open_jsonfg_with_geojson(): "data/jsonfg/crs_none.json", allowed_drivers=["GeoJSON", "JSONFG"] ) assert ds.GetDriver().GetDescription() == "JSONFG" + + +############################################################################### +# Test force identifying a JSONFG file with the GeoJSON driver + + +def test_ogr_geojson_identify_jsonfg_with_geojson(): + + drv = gdal.IdentifyDriverEx( + "data/jsonfg/crs_none.json", allowed_drivers=["GeoJSON"] + ) + assert drv.GetDescription() == "GeoJSON" + + if gdal.GetDriverByName("JSONFG"): + drv = gdal.IdentifyDriverEx("data/jsonfg/crs_none.json") + assert drv.GetDescription() == "JSONFG" + + drv = gdal.IdentifyDriverEx( + "data/jsonfg/crs_none.json", allowed_drivers=["GeoJSON", "JSONFG"] + ) + assert drv.GetDescription() == "JSONFG" diff --git a/gcore/gdaldriver.cpp b/gcore/gdaldriver.cpp index 46df8d269e9e..5a6fc444f130 100644 --- a/gcore/gdaldriver.cpp +++ b/gcore/gdaldriver.cpp @@ -2642,6 +2642,7 @@ GDALDriverH CPL_STDCALL GDALIdentifyDriverEx( GDALDriverManager *poDM = GetGDALDriverManager(); CPLAssert(nullptr != poDM); GDALOpenInfo oOpenInfo(pszFilename, GA_ReadOnly, papszFileList); + oOpenInfo.papszAllowedDrivers = papszAllowedDrivers; CPLErrorStateBackuper oBackuper; CPLErrorSetState(CE_None, CPLE_AppDefined, ""); From 476f3b608048430b0a9e4219cfb21610dd3a6ac6 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 16 May 2024 16:17:49 +0200 Subject: [PATCH 047/301] Add CPLJSonStreamingParser::StopParsing() --- port/cpl_json_streaming_parser.cpp | 14 +++++++++++--- port/cpl_json_streaming_parser.h | 2 ++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/port/cpl_json_streaming_parser.cpp b/port/cpl_json_streaming_parser.cpp index b22277ccfdcf..e5e23481e3ae 100644 --- a/port/cpl_json_streaming_parser.cpp +++ b/port/cpl_json_streaming_parser.cpp @@ -144,6 +144,15 @@ bool CPLJSonStreamingParser::EmitException(const char *pszMessage) return false; } +/************************************************************************/ +/* StopParsing() */ +/************************************************************************/ + +void CPLJSonStreamingParser::StopParsing() +{ + m_bStopParsing = true; +} + /************************************************************************/ /* EmitUnexpectedChar() */ /************************************************************************/ @@ -433,11 +442,10 @@ void CPLJSonStreamingParser::DecodeUnicode() bool CPLJSonStreamingParser::Parse(const char *pStr, size_t nLength, bool bFinished) { - if (m_bExceptionOccurred) - return false; - while (true) { + if (m_bExceptionOccurred || m_bStopParsing) + return false; State eCurState = currentState(); if (eCurState == INIT) { diff --git a/port/cpl_json_streaming_parser.h b/port/cpl_json_streaming_parser.h index 50e422deedad..62c569e8b679 100644 --- a/port/cpl_json_streaming_parser.h +++ b/port/cpl_json_streaming_parser.h @@ -55,6 +55,7 @@ class CPL_DLL CPLJSonStreamingParser bool m_bExceptionOccurred = false; bool m_bElementFound = false; + bool m_bStopParsing = false; int m_nLastChar = 0; int m_nLineCounter = 1; int m_nCharCounter = 1; @@ -98,6 +99,7 @@ class CPL_DLL CPLJSonStreamingParser protected: bool EmitException(const char *pszMessage); + void StopParsing(); public: CPLJSonStreamingParser(); From e7a12a813390fb50b565bd13578c394c21a982af Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 16 May 2024 16:18:10 +0200 Subject: [PATCH 048/301] JSONFGIsObject: use CPLJSonStreamingParser::StopParsing() --- ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp b/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp index 86eed7535833..4ec6ba2b3ae6 100644 --- a/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp +++ b/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp @@ -565,21 +565,23 @@ bool JSONFGIsObject(const char *pszText) void StartObjectMember(const char *pszKey, size_t nLength) override { - if (!m_bFoundJSONFGFeatureType && - nLength == strlen("featureType") && + if (nLength == strlen("featureType") && strcmp(pszKey, "featureType") == 0) { m_bFoundJSONFGFeatureType = (m_osLevel == "{" || // At FeatureCollection level m_osLevel == "{[{"); // At Feature level + if (m_bFoundJSONFGFeatureType) + StopParsing(); } - else if (!m_bFoundJSONFGCoordrefSys && - nLength == strlen("coordRefSys") && + else if (nLength == strlen("coordRefSys") && strcmp(pszKey, "coordRefSys") == 0) { m_bFoundJSONFGCoordrefSys = (m_osLevel == "{" || // At FeatureCollection level m_osLevel == "{[{"); // At Feature level + if (m_bFoundJSONFGCoordrefSys) + StopParsing(); } } From cdd8042049ea5468c10aa1ae16b0e6af1e9d20db Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 27 May 2024 19:16:56 +0200 Subject: [PATCH 049/301] argparse.hpp: add argument name after 'Too few arguments' error Fixes #10011 --- apps/argparse/argparse.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/argparse/argparse.hpp b/apps/argparse/argparse.hpp index 118e2145ce1a..b9dbc094b4d5 100644 --- a/apps/argparse/argparse.hpp +++ b/apps/argparse/argparse.hpp @@ -968,7 +968,8 @@ class Argument { std::bind(is_optional, std::placeholders::_1, m_prefix_chars)); dist = static_cast(std::distance(start, end)); if (dist < num_args_min) { - throw std::runtime_error("Too few arguments"); + throw std::runtime_error("Too few arguments for '" + + std::string(m_used_name) + "'."); } } From a563c031b62b9b7d8ae5d28c916cc61dd54fa3db Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 27 May 2024 20:00:55 +0200 Subject: [PATCH 050/301] Python utilities: avoid UseExceptions() related deprecation warning when launched from launcher shell scripts Fixes #10010 The launcher shell scripts generated by setuptools don't use our gdal-utils/scripts/{script_name}.py scripts, but directly the gdal-utils/osgeo_utils/{script_name}.py one. Hence let's move the call to UseExceptions() from the former to the later. --- swig/python/gdal-utils/osgeo_utils/gdal2tiles.py | 2 ++ swig/python/gdal-utils/osgeo_utils/gdal2xyz.py | 1 + swig/python/gdal-utils/osgeo_utils/gdal_calc.py | 1 + swig/python/gdal-utils/osgeo_utils/gdal_edit.py | 1 + swig/python/gdal-utils/osgeo_utils/gdal_fillnodata.py | 1 + swig/python/gdal-utils/osgeo_utils/gdal_merge.py | 1 + swig/python/gdal-utils/osgeo_utils/gdal_pansharpen.py | 3 +++ swig/python/gdal-utils/osgeo_utils/gdal_polygonize.py | 1 + swig/python/gdal-utils/osgeo_utils/gdal_proximity.py | 2 ++ swig/python/gdal-utils/osgeo_utils/gdal_retile.py | 3 +++ swig/python/gdal-utils/osgeo_utils/gdal_sieve.py | 2 ++ swig/python/gdal-utils/osgeo_utils/gdalattachpct.py | 3 +++ swig/python/gdal-utils/osgeo_utils/gdalcompare.py | 3 +++ swig/python/gdal-utils/osgeo_utils/gdalmove.py | 4 +++- swig/python/gdal-utils/osgeo_utils/ogr_layer_algebra.py | 2 ++ swig/python/gdal-utils/osgeo_utils/ogrmerge.py | 5 +---- swig/python/gdal-utils/osgeo_utils/pct2rgb.py | 1 + swig/python/gdal-utils/osgeo_utils/rgb2pct.py | 1 + swig/python/gdal-utils/scripts/gdal2tiles.py | 4 +--- swig/python/gdal-utils/scripts/gdal2xyz.py | 4 +--- swig/python/gdal-utils/scripts/gdal_calc.py | 4 +--- swig/python/gdal-utils/scripts/gdal_edit.py | 4 +--- swig/python/gdal-utils/scripts/gdal_fillnodata.py | 4 +--- swig/python/gdal-utils/scripts/gdal_merge.py | 4 +--- swig/python/gdal-utils/scripts/gdal_pansharpen.py | 4 +--- swig/python/gdal-utils/scripts/gdal_polygonize.py | 4 +--- swig/python/gdal-utils/scripts/gdal_proximity.py | 4 +--- swig/python/gdal-utils/scripts/gdal_retile.py | 4 +--- swig/python/gdal-utils/scripts/gdal_sieve.py | 4 +--- swig/python/gdal-utils/scripts/gdalattachpct.py | 4 +--- swig/python/gdal-utils/scripts/gdalcompare.py | 4 +--- swig/python/gdal-utils/scripts/gdalmove.py | 4 +--- swig/python/gdal-utils/scripts/ogr_layer_algebra.py | 4 +--- swig/python/gdal-utils/scripts/ogrmerge.py | 4 +--- swig/python/gdal-utils/scripts/pct2rgb.py | 4 +--- swig/python/gdal-utils/scripts/rgb2pct.py | 4 +--- 36 files changed, 50 insertions(+), 59 deletions(-) diff --git a/swig/python/gdal-utils/osgeo_utils/gdal2tiles.py b/swig/python/gdal-utils/osgeo_utils/gdal2tiles.py index da560c837437..2287834bc246 100644 --- a/swig/python/gdal-utils/osgeo_utils/gdal2tiles.py +++ b/swig/python/gdal-utils/osgeo_utils/gdal2tiles.py @@ -59,6 +59,8 @@ Options = Any +gdal.UseExceptions() + try: import numpy from PIL import Image diff --git a/swig/python/gdal-utils/osgeo_utils/gdal2xyz.py b/swig/python/gdal-utils/osgeo_utils/gdal2xyz.py index 5440447d8769..1c77ec25954e 100644 --- a/swig/python/gdal-utils/osgeo_utils/gdal2xyz.py +++ b/swig/python/gdal-utils/osgeo_utils/gdal2xyz.py @@ -423,6 +423,7 @@ def doit(self, **kwargs): def main(argv=sys.argv): + gdal.UseExceptions() return GDAL2XYZ().main(argv) diff --git a/swig/python/gdal-utils/osgeo_utils/gdal_calc.py b/swig/python/gdal-utils/osgeo_utils/gdal_calc.py index 777cdfd05975..2b6fea3a0985 100644 --- a/swig/python/gdal-utils/osgeo_utils/gdal_calc.py +++ b/swig/python/gdal-utils/osgeo_utils/gdal_calc.py @@ -925,6 +925,7 @@ def augment_kwargs(self, kwargs) -> dict: def main(argv=sys.argv): + gdal.UseExceptions() return GDALCalc().main(argv) diff --git a/swig/python/gdal-utils/osgeo_utils/gdal_edit.py b/swig/python/gdal-utils/osgeo_utils/gdal_edit.py index a8864e6a13c4..cfcd459517d2 100755 --- a/swig/python/gdal-utils/osgeo_utils/gdal_edit.py +++ b/swig/python/gdal-utils/osgeo_utils/gdal_edit.py @@ -538,6 +538,7 @@ def gdal_edit(argv): def main(argv=sys.argv): + gdal.UseExceptions() return gdal_edit(argv) diff --git a/swig/python/gdal-utils/osgeo_utils/gdal_fillnodata.py b/swig/python/gdal-utils/osgeo_utils/gdal_fillnodata.py index 60960befd199..3a8fc5c4f46b 100644 --- a/swig/python/gdal-utils/osgeo_utils/gdal_fillnodata.py +++ b/swig/python/gdal-utils/osgeo_utils/gdal_fillnodata.py @@ -285,6 +285,7 @@ def doit(self, **kwargs): def main(argv=sys.argv): + gdal.UseExceptions() return GDALFillNoData().main(argv) diff --git a/swig/python/gdal-utils/osgeo_utils/gdal_merge.py b/swig/python/gdal-utils/osgeo_utils/gdal_merge.py index 72f64ffba9a3..442bf2f9349c 100644 --- a/swig/python/gdal-utils/osgeo_utils/gdal_merge.py +++ b/swig/python/gdal-utils/osgeo_utils/gdal_merge.py @@ -647,6 +647,7 @@ def gdal_merge(argv=None): def main(argv=sys.argv): + gdal.UseExceptions() return gdal_merge(argv) diff --git a/swig/python/gdal-utils/osgeo_utils/gdal_pansharpen.py b/swig/python/gdal-utils/osgeo_utils/gdal_pansharpen.py index 7c640c294759..02af4295d3be 100644 --- a/swig/python/gdal-utils/osgeo_utils/gdal_pansharpen.py +++ b/swig/python/gdal-utils/osgeo_utils/gdal_pansharpen.py @@ -69,6 +69,9 @@ def Usage(isError): def main(argv=sys.argv): + + gdal.UseExceptions() + argv = gdal.GeneralCmdLineProcessor(argv) if argv is None: return 0 diff --git a/swig/python/gdal-utils/osgeo_utils/gdal_polygonize.py b/swig/python/gdal-utils/osgeo_utils/gdal_polygonize.py index 9fbd361168b7..b4aaa5656305 100644 --- a/swig/python/gdal-utils/osgeo_utils/gdal_polygonize.py +++ b/swig/python/gdal-utils/osgeo_utils/gdal_polygonize.py @@ -355,6 +355,7 @@ def doit(self, **kwargs): def main(argv=sys.argv): + gdal.UseExceptions() return GDALPolygonize().main(argv) diff --git a/swig/python/gdal-utils/osgeo_utils/gdal_proximity.py b/swig/python/gdal-utils/osgeo_utils/gdal_proximity.py index ab9059cf23dc..09d7a51a3cc5 100644 --- a/swig/python/gdal-utils/osgeo_utils/gdal_proximity.py +++ b/swig/python/gdal-utils/osgeo_utils/gdal_proximity.py @@ -65,6 +65,8 @@ def main(argv=sys.argv): creation_type = "Float32" quiet = False + gdal.UseExceptions() + argv = gdal.GeneralCmdLineProcessor(argv) if argv is None: return 0 diff --git a/swig/python/gdal-utils/osgeo_utils/gdal_retile.py b/swig/python/gdal-utils/osgeo_utils/gdal_retile.py index 40a9f9d973da..165b97f33e4f 100644 --- a/swig/python/gdal-utils/osgeo_utils/gdal_retile.py +++ b/swig/python/gdal-utils/osgeo_utils/gdal_retile.py @@ -941,6 +941,9 @@ def Usage(isError): def main(args=None, g=None): + + gdal.UseExceptions() + if g is None: g = RetileGlobals() diff --git a/swig/python/gdal-utils/osgeo_utils/gdal_sieve.py b/swig/python/gdal-utils/osgeo_utils/gdal_sieve.py index e5d561022528..c014299b5aab 100644 --- a/swig/python/gdal-utils/osgeo_utils/gdal_sieve.py +++ b/swig/python/gdal-utils/osgeo_utils/gdal_sieve.py @@ -60,6 +60,8 @@ def main(argv=sys.argv): mask = "default" + gdal.UseExceptions() + argv = gdal.GeneralCmdLineProcessor(argv) if argv is None: return 0 diff --git a/swig/python/gdal-utils/osgeo_utils/gdalattachpct.py b/swig/python/gdal-utils/osgeo_utils/gdalattachpct.py index 80b88c11014f..6f5dfcc62ed3 100644 --- a/swig/python/gdal-utils/osgeo_utils/gdalattachpct.py +++ b/swig/python/gdal-utils/osgeo_utils/gdalattachpct.py @@ -48,6 +48,9 @@ def Usage(isError=True): def main(argv=sys.argv): + + gdal.UseExceptions() + pct_filename = None src_filename = None dst_filename = None diff --git a/swig/python/gdal-utils/osgeo_utils/gdalcompare.py b/swig/python/gdal-utils/osgeo_utils/gdalcompare.py index 139e72f4d4ff..4d57f09c81f9 100644 --- a/swig/python/gdal-utils/osgeo_utils/gdalcompare.py +++ b/swig/python/gdal-utils/osgeo_utils/gdalcompare.py @@ -503,6 +503,9 @@ def Usage(isError=True): def main(argv=sys.argv): + + gdal.UseExceptions() + # Default GDAL argument parsing. argv = gdal.GeneralCmdLineProcessor(argv) if argv is None: diff --git a/swig/python/gdal-utils/osgeo_utils/gdalmove.py b/swig/python/gdal-utils/osgeo_utils/gdalmove.py index 6a986641bb43..f198ac5c5964 100644 --- a/swig/python/gdal-utils/osgeo_utils/gdalmove.py +++ b/swig/python/gdal-utils/osgeo_utils/gdalmove.py @@ -245,8 +245,10 @@ def Usage(isError=True): def main(argv=sys.argv): - # Default GDAL argument parsing. + gdal.UseExceptions() + + # Default GDAL argument parsing. argv = gdal.GeneralCmdLineProcessor(argv) if argv is None: return 0 diff --git a/swig/python/gdal-utils/osgeo_utils/ogr_layer_algebra.py b/swig/python/gdal-utils/osgeo_utils/ogr_layer_algebra.py index e85b9a3016aa..3069eb72327d 100644 --- a/swig/python/gdal-utils/osgeo_utils/ogr_layer_algebra.py +++ b/swig/python/gdal-utils/osgeo_utils/ogr_layer_algebra.py @@ -191,6 +191,8 @@ def main(argv=sys.argv): srs_name = None srs = None + gdal.UseExceptions() + argv = ogr.GeneralCmdLineProcessor(argv) if argv is None: return 0 diff --git a/swig/python/gdal-utils/osgeo_utils/ogrmerge.py b/swig/python/gdal-utils/osgeo_utils/ogrmerge.py index d7b3bfaff7b8..28846dd52b84 100644 --- a/swig/python/gdal-utils/osgeo_utils/ogrmerge.py +++ b/swig/python/gdal-utils/osgeo_utils/ogrmerge.py @@ -518,10 +518,6 @@ def _gpkg_ogrmerge( if dst_ds is None: return 1 - ogr.UseExceptions() - gdal.UseExceptions() - osr.UseExceptions() - class ThreadedProgress: def __init__(self, dst_filename, estimated_final_size): self.stop_thread = False @@ -1207,6 +1203,7 @@ def are_sources_gpkg(): def main(argv=sys.argv): + gdal.UseExceptions() argv = ogr.GeneralCmdLineProcessor(argv) if argv is None: return 0 diff --git a/swig/python/gdal-utils/osgeo_utils/pct2rgb.py b/swig/python/gdal-utils/osgeo_utils/pct2rgb.py index d7fe81538ac1..3275e9e00089 100644 --- a/swig/python/gdal-utils/osgeo_utils/pct2rgb.py +++ b/swig/python/gdal-utils/osgeo_utils/pct2rgb.py @@ -223,6 +223,7 @@ def doit(self, **kwargs): def main(argv=sys.argv): + gdal.UseExceptions() return PCT2RGB().main(argv) diff --git a/swig/python/gdal-utils/osgeo_utils/rgb2pct.py b/swig/python/gdal-utils/osgeo_utils/rgb2pct.py index d79b4f926eb9..4b2316660737 100644 --- a/swig/python/gdal-utils/osgeo_utils/rgb2pct.py +++ b/swig/python/gdal-utils/osgeo_utils/rgb2pct.py @@ -202,6 +202,7 @@ def doit(self, **kwargs): def main(argv=sys.argv): + gdal.UseExceptions() return RGB2PCT().main(argv) diff --git a/swig/python/gdal-utils/scripts/gdal2tiles.py b/swig/python/gdal-utils/scripts/gdal2tiles.py index d687f8a0c7b0..b41e6898d7a6 100755 --- a/swig/python/gdal-utils/scripts/gdal2tiles.py +++ b/swig/python/gdal-utils/scripts/gdal2tiles.py @@ -5,9 +5,7 @@ # Running main() must be protected that way due to use of multiprocessing on Windows: # https://docs.python.org/3/library/multiprocessing.html#the-spawn-and-forkserver-start-methods if __name__ == "__main__": - from osgeo.gdal import UseExceptions, deprecation_warn - - UseExceptions() + from osgeo.gdal import deprecation_warn # import osgeo_utils.gdal2tiles as a convenience to use as a script from osgeo_utils.gdal2tiles import * # noqa diff --git a/swig/python/gdal-utils/scripts/gdal2xyz.py b/swig/python/gdal-utils/scripts/gdal2xyz.py index b2681f9ce811..e5f940dc4695 100755 --- a/swig/python/gdal-utils/scripts/gdal2xyz.py +++ b/swig/python/gdal-utils/scripts/gdal2xyz.py @@ -2,13 +2,11 @@ import sys -from osgeo.gdal import UseExceptions, deprecation_warn +from osgeo.gdal import deprecation_warn # import osgeo_utils.gdal2xyz as a convenience to use as a script from osgeo_utils.gdal2xyz import * # noqa from osgeo_utils.gdal2xyz import main -UseExceptions() - deprecation_warn("gdal2xyz") sys.exit(main(sys.argv)) diff --git a/swig/python/gdal-utils/scripts/gdal_calc.py b/swig/python/gdal-utils/scripts/gdal_calc.py index 008e8437c64d..4fc0bae32340 100755 --- a/swig/python/gdal-utils/scripts/gdal_calc.py +++ b/swig/python/gdal-utils/scripts/gdal_calc.py @@ -2,13 +2,11 @@ import sys -from osgeo.gdal import UseExceptions, deprecation_warn +from osgeo.gdal import deprecation_warn # import osgeo_utils.gdal_calc as a convenience to use as a script from osgeo_utils.gdal_calc import * # noqa from osgeo_utils.gdal_calc import main -UseExceptions() - deprecation_warn("gdal_calc") sys.exit(main(sys.argv)) diff --git a/swig/python/gdal-utils/scripts/gdal_edit.py b/swig/python/gdal-utils/scripts/gdal_edit.py index 32e2b9dca8c4..d89a54fe980e 100755 --- a/swig/python/gdal-utils/scripts/gdal_edit.py +++ b/swig/python/gdal-utils/scripts/gdal_edit.py @@ -2,13 +2,11 @@ import sys -from osgeo.gdal import UseExceptions, deprecation_warn +from osgeo.gdal import deprecation_warn # import osgeo_utils.gdal_edit as a convenience to use as a script from osgeo_utils.gdal_edit import * # noqa from osgeo_utils.gdal_edit import main -UseExceptions() - deprecation_warn("gdal_edit") sys.exit(main(sys.argv)) diff --git a/swig/python/gdal-utils/scripts/gdal_fillnodata.py b/swig/python/gdal-utils/scripts/gdal_fillnodata.py index 885adcbe3e78..d3a74e5580a0 100755 --- a/swig/python/gdal-utils/scripts/gdal_fillnodata.py +++ b/swig/python/gdal-utils/scripts/gdal_fillnodata.py @@ -2,13 +2,11 @@ import sys -from osgeo.gdal import UseExceptions, deprecation_warn +from osgeo.gdal import deprecation_warn # import osgeo_utils.gdal_fillnodata as a convenience to use as a script from osgeo_utils.gdal_fillnodata import * # noqa from osgeo_utils.gdal_fillnodata import main -UseExceptions() - deprecation_warn("gdal_fillnodata") sys.exit(main(sys.argv)) diff --git a/swig/python/gdal-utils/scripts/gdal_merge.py b/swig/python/gdal-utils/scripts/gdal_merge.py index 48a7dcd7d042..95fc79f50bfa 100755 --- a/swig/python/gdal-utils/scripts/gdal_merge.py +++ b/swig/python/gdal-utils/scripts/gdal_merge.py @@ -2,13 +2,11 @@ import sys -from osgeo.gdal import UseExceptions, deprecation_warn +from osgeo.gdal import deprecation_warn # import osgeo_utils.gdal_merge as a convenience to use as a script from osgeo_utils.gdal_merge import * # noqa from osgeo_utils.gdal_merge import main -UseExceptions() - deprecation_warn("gdal_merge") sys.exit(main(sys.argv)) diff --git a/swig/python/gdal-utils/scripts/gdal_pansharpen.py b/swig/python/gdal-utils/scripts/gdal_pansharpen.py index 55bef6ff2403..5521968e0630 100755 --- a/swig/python/gdal-utils/scripts/gdal_pansharpen.py +++ b/swig/python/gdal-utils/scripts/gdal_pansharpen.py @@ -2,13 +2,11 @@ import sys -from osgeo.gdal import UseExceptions, deprecation_warn +from osgeo.gdal import deprecation_warn # import osgeo_utils.gdal_pansharpen as a convenience to use as a script from osgeo_utils.gdal_pansharpen import * # noqa from osgeo_utils.gdal_pansharpen import main -UseExceptions() - deprecation_warn("gdal_pansharpen") sys.exit(main(sys.argv)) diff --git a/swig/python/gdal-utils/scripts/gdal_polygonize.py b/swig/python/gdal-utils/scripts/gdal_polygonize.py index 0bd9935072a8..a104fc9f3ff8 100755 --- a/swig/python/gdal-utils/scripts/gdal_polygonize.py +++ b/swig/python/gdal-utils/scripts/gdal_polygonize.py @@ -2,13 +2,11 @@ import sys -from osgeo.gdal import UseExceptions, deprecation_warn +from osgeo.gdal import deprecation_warn # import osgeo_utils.gdal_polygonize as a convenience to use as a script from osgeo_utils.gdal_polygonize import * # noqa from osgeo_utils.gdal_polygonize import main -UseExceptions() - deprecation_warn("gdal_polygonize") sys.exit(main(sys.argv)) diff --git a/swig/python/gdal-utils/scripts/gdal_proximity.py b/swig/python/gdal-utils/scripts/gdal_proximity.py index fd26a1c364a9..9ef1e76e9fb4 100755 --- a/swig/python/gdal-utils/scripts/gdal_proximity.py +++ b/swig/python/gdal-utils/scripts/gdal_proximity.py @@ -2,13 +2,11 @@ import sys -from osgeo.gdal import UseExceptions, deprecation_warn +from osgeo.gdal import deprecation_warn # import osgeo_utils.gdal_proximity as a convenience to use as a script from osgeo_utils.gdal_proximity import * # noqa from osgeo_utils.gdal_proximity import main -UseExceptions() - deprecation_warn("gdal_proximity") sys.exit(main(sys.argv)) diff --git a/swig/python/gdal-utils/scripts/gdal_retile.py b/swig/python/gdal-utils/scripts/gdal_retile.py index dad78b04ecd0..3e100ddb85d7 100755 --- a/swig/python/gdal-utils/scripts/gdal_retile.py +++ b/swig/python/gdal-utils/scripts/gdal_retile.py @@ -2,13 +2,11 @@ import sys -from osgeo.gdal import UseExceptions, deprecation_warn +from osgeo.gdal import deprecation_warn # import osgeo_utils.gdal_retile as a convenience to use as a script from osgeo_utils.gdal_retile import * # noqa from osgeo_utils.gdal_retile import main -UseExceptions() - deprecation_warn("gdal_retile") sys.exit(main(sys.argv)) diff --git a/swig/python/gdal-utils/scripts/gdal_sieve.py b/swig/python/gdal-utils/scripts/gdal_sieve.py index 429214128018..bb44c66852d9 100755 --- a/swig/python/gdal-utils/scripts/gdal_sieve.py +++ b/swig/python/gdal-utils/scripts/gdal_sieve.py @@ -2,13 +2,11 @@ import sys -from osgeo.gdal import UseExceptions, deprecation_warn +from osgeo.gdal import deprecation_warn # import osgeo_utils.gdal_sieve as a convenience to use as a script from osgeo_utils.gdal_sieve import * # noqa from osgeo_utils.gdal_sieve import main -UseExceptions() - deprecation_warn("gdal_sieve") sys.exit(main(sys.argv)) diff --git a/swig/python/gdal-utils/scripts/gdalattachpct.py b/swig/python/gdal-utils/scripts/gdalattachpct.py index a49d48a6bce9..500ec90ae227 100755 --- a/swig/python/gdal-utils/scripts/gdalattachpct.py +++ b/swig/python/gdal-utils/scripts/gdalattachpct.py @@ -2,13 +2,11 @@ import sys -from osgeo.gdal import UseExceptions, deprecation_warn +from osgeo.gdal import deprecation_warn # import osgeo_utils.gdalattachpct as a convenience to use as a script from osgeo_utils.gdalattachpct import * # noqa from osgeo_utils.gdalattachpct import main -UseExceptions() - deprecation_warn("gdalattachpct") sys.exit(main(sys.argv)) diff --git a/swig/python/gdal-utils/scripts/gdalcompare.py b/swig/python/gdal-utils/scripts/gdalcompare.py index 954a22b6bbda..1b66df514267 100755 --- a/swig/python/gdal-utils/scripts/gdalcompare.py +++ b/swig/python/gdal-utils/scripts/gdalcompare.py @@ -2,13 +2,11 @@ import sys -from osgeo.gdal import UseExceptions, deprecation_warn +from osgeo.gdal import deprecation_warn # import osgeo_utils.gdalcompare as a convenience to use as a script from osgeo_utils.gdalcompare import * # noqa from osgeo_utils.gdalcompare import main -UseExceptions() - deprecation_warn("gdalcompare") sys.exit(main(sys.argv)) diff --git a/swig/python/gdal-utils/scripts/gdalmove.py b/swig/python/gdal-utils/scripts/gdalmove.py index d3b186a87c6a..0284a20a6d4a 100755 --- a/swig/python/gdal-utils/scripts/gdalmove.py +++ b/swig/python/gdal-utils/scripts/gdalmove.py @@ -2,13 +2,11 @@ import sys -from osgeo.gdal import UseExceptions, deprecation_warn +from osgeo.gdal import deprecation_warn # import osgeo_utils.gdalmove as a convenience to use as a script from osgeo_utils.gdalmove import * # noqa from osgeo_utils.gdalmove import main -UseExceptions() - deprecation_warn("gdalmove") sys.exit(main(sys.argv)) diff --git a/swig/python/gdal-utils/scripts/ogr_layer_algebra.py b/swig/python/gdal-utils/scripts/ogr_layer_algebra.py index 909f2ba0e9dd..6acde54ef4b2 100755 --- a/swig/python/gdal-utils/scripts/ogr_layer_algebra.py +++ b/swig/python/gdal-utils/scripts/ogr_layer_algebra.py @@ -2,13 +2,11 @@ import sys -from osgeo.gdal import UseExceptions, deprecation_warn +from osgeo.gdal import deprecation_warn # import osgeo_utils.ogr_layer_algebra as a convenience to use as a script from osgeo_utils.ogr_layer_algebra import * # noqa from osgeo_utils.ogr_layer_algebra import main -UseExceptions() - deprecation_warn("ogr_layer_algebra") sys.exit(main(sys.argv)) diff --git a/swig/python/gdal-utils/scripts/ogrmerge.py b/swig/python/gdal-utils/scripts/ogrmerge.py index 992e3e81cbbc..6a736e99f9fa 100755 --- a/swig/python/gdal-utils/scripts/ogrmerge.py +++ b/swig/python/gdal-utils/scripts/ogrmerge.py @@ -2,13 +2,11 @@ import sys -from osgeo.gdal import UseExceptions, deprecation_warn +from osgeo.gdal import deprecation_warn # import osgeo_utils.ogrmerge as a convenience to use as a script from osgeo_utils.ogrmerge import * # noqa from osgeo_utils.ogrmerge import main -UseExceptions() - deprecation_warn("ogrmerge") sys.exit(main(sys.argv)) diff --git a/swig/python/gdal-utils/scripts/pct2rgb.py b/swig/python/gdal-utils/scripts/pct2rgb.py index 1d6dbeb7a9e0..3a0932363226 100755 --- a/swig/python/gdal-utils/scripts/pct2rgb.py +++ b/swig/python/gdal-utils/scripts/pct2rgb.py @@ -2,13 +2,11 @@ import sys -from osgeo.gdal import UseExceptions, deprecation_warn +from osgeo.gdal import deprecation_warn # import osgeo_utils.pct2rgb as a convenience to use as a script from osgeo_utils.pct2rgb import * # noqa from osgeo_utils.pct2rgb import main -UseExceptions() - deprecation_warn("pct2rgb") sys.exit(main(sys.argv)) diff --git a/swig/python/gdal-utils/scripts/rgb2pct.py b/swig/python/gdal-utils/scripts/rgb2pct.py index b8cebcc35ec0..eca0248c82e9 100755 --- a/swig/python/gdal-utils/scripts/rgb2pct.py +++ b/swig/python/gdal-utils/scripts/rgb2pct.py @@ -2,13 +2,11 @@ import sys -from osgeo.gdal import UseExceptions, deprecation_warn +from osgeo.gdal import deprecation_warn # import osgeo_utils.rgb2pct as a convenience to use as a script from osgeo_utils.rgb2pct import * # noqa from osgeo_utils.rgb2pct import main -UseExceptions() - deprecation_warn("rgb2pct") sys.exit(main(sys.argv)) From 709d3b5bb8ea36963cc6505c73b056df10794508 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 27 May 2024 21:17:13 +0200 Subject: [PATCH 051/301] Python bindings: do not emit warnings about not having used [Dont]UseExceptions() if run under gdal.ExceptionMgr() --- swig/include/python/python_exceptions.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swig/include/python/python_exceptions.i b/swig/include/python/python_exceptions.i index 3e4d8abe1789..da08a8697e3d 100644 --- a/swig/include/python/python_exceptions.i +++ b/swig/include/python/python_exceptions.i @@ -133,7 +133,7 @@ void _DontUseExceptions() { static int _UserHasSpecifiedIfUsingExceptions() { - return bUserHasSpecifiedIfUsingExceptions; + return bUserHasSpecifiedIfUsingExceptions || bUseExceptionsLocal >= 0; } %} From 85dc991f58540592d9c8d3fbda873fe677df4531 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 27 May 2024 21:53:10 +0200 Subject: [PATCH 052/301] Python bindings: avoid gdal.ExceptionMgr() to re-throw a GDAL exception already caught under it --- autotest/gcore/basic_test.py | 9 +++++++++ swig/include/python/python_exceptions.i | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/autotest/gcore/basic_test.py b/autotest/gcore/basic_test.py index fadea2241720..7d1ccb964fe1 100755 --- a/autotest/gcore/basic_test.py +++ b/autotest/gcore/basic_test.py @@ -331,6 +331,15 @@ def test_basic_test_11(): with pytest.raises(Exception): gdal.OpenEx("non existing") + try: + with gdal.ExceptionMgr(useExceptions=True): + try: + gdal.OpenEx("non existing") + except Exception: + pass + except Exception: + pytest.fails("Exception thrown whereas it should not have") + ############################################################################### # Test GDAL layer API diff --git a/swig/include/python/python_exceptions.i b/swig/include/python/python_exceptions.i index da08a8697e3d..f654e10d9af6 100644 --- a/swig/include/python/python_exceptions.i +++ b/swig/include/python/python_exceptions.i @@ -81,7 +81,7 @@ PythonBindingErrorHandler(CPLErr eclass, CPLErrorNum err_no, const char *msg ) %exception _SetExceptionsLocal { %#ifdef SED_HACKS - if( bUseExceptions ) bLocalUseExceptionsCode = FALSE; + if( ReturnSame(TRUE) ) bLocalUseExceptionsCode = FALSE; %#endif $action } From 423237a5729bca05aa569655461a761352397805 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 27 May 2024 22:22:09 +0200 Subject: [PATCH 053/301] Python bindings: avoid exception emitted and caught under gdal.ExceptionMgr() to cause later issues --- autotest/gcore/basic_test.py | 7 +++++++ swig/include/python/python_exceptions.i | 6 +++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/autotest/gcore/basic_test.py b/autotest/gcore/basic_test.py index 7d1ccb964fe1..a2dc2a49a7f9 100755 --- a/autotest/gcore/basic_test.py +++ b/autotest/gcore/basic_test.py @@ -340,6 +340,13 @@ def test_basic_test_11(): except Exception: pytest.fails("Exception thrown whereas it should not have") + with gdal.ExceptionMgr(useExceptions=True): + try: + gdal.OpenEx("non existing") + except Exception: + pass + gdal.Open("data/byte.tif") + ############################################################################### # Test GDAL layer API diff --git a/swig/include/python/python_exceptions.i b/swig/include/python/python_exceptions.i index f654e10d9af6..e52dcd9af4f1 100644 --- a/swig/include/python/python_exceptions.i +++ b/swig/include/python/python_exceptions.i @@ -65,7 +65,7 @@ PythonBindingErrorHandler(CPLErr eclass, CPLErrorNum err_no, const char *msg ) %exception GetUseExceptions { %#ifdef SED_HACKS - if( bUseExceptions ) bLocalUseExceptionsCode = FALSE; + if( ReturnSame(TRUE) ) bLocalUseExceptionsCode = FALSE; %#endif result = GetUseExceptions(); } @@ -73,7 +73,7 @@ PythonBindingErrorHandler(CPLErr eclass, CPLErrorNum err_no, const char *msg ) %exception _GetExceptionsLocal { %#ifdef SED_HACKS - if( bUseExceptions ) bLocalUseExceptionsCode = FALSE; + if( ReturnSame(TRUE) ) bLocalUseExceptionsCode = FALSE; %#endif $action } @@ -89,7 +89,7 @@ PythonBindingErrorHandler(CPLErr eclass, CPLErrorNum err_no, const char *msg ) %exception _UserHasSpecifiedIfUsingExceptions { %#ifdef SED_HACKS - if( bUseExceptions ) bLocalUseExceptionsCode = FALSE; + if( ReturnSame(TRUE) ) bLocalUseExceptionsCode = FALSE; %#endif $action } From fe97fca38dd450c366b3ceecc4fad358d31ea071 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 27 May 2024 22:25:09 +0200 Subject: [PATCH 054/301] gdaltest.run_py_script(): add a return_stderr: bool argument --- autotest/pymod/test_py_scripts.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/autotest/pymod/test_py_scripts.py b/autotest/pymod/test_py_scripts.py index 5865dfcc67bb..26d703a6e6d0 100755 --- a/autotest/pymod/test_py_scripts.py +++ b/autotest/pymod/test_py_scripts.py @@ -77,27 +77,33 @@ def run_py_script( concatenated_argv: str, run_as_script: bool = True, run_as_module: bool = False, + return_stderr: bool = False, ): - result = None if run_as_module: try: module = importlib.import_module("osgeo_utils." + script_name) except ImportError: module = importlib.import_module("osgeo_utils.samples." + script_name) argv = [module.__file__] + shlex.split(concatenated_argv) - result = module.main(argv) + return module.main(argv) + if run_as_script: - result = run_py_script_as_external_script( - script_path, script_name, concatenated_argv + return run_py_script_as_external_script( + script_path, script_name, concatenated_argv, return_stderr=return_stderr ) - return result + + raise Exception("either run_as_script or run_as_module should be specified") ############################################################################### # Runs a Python script in a new process # def run_py_script_as_external_script( - script_path, script_name, concatenated_argv, display_live_on_parent_stdout=False + script_path, + script_name, + concatenated_argv, + display_live_on_parent_stdout=False, + return_stderr: bool = False, ): script_file_path = os.path.join(script_path, script_name + ".py") @@ -109,6 +115,13 @@ def run_py_script_as_external_script( python_exe = python_exe.replace("\\", "/") script_file_path = script_file_path.replace("\\", "/") + if return_stderr: + assert ( + not display_live_on_parent_stdout + ), "display_live_on_parent_stdout=True and return_stderr=True aren't supported at the same time" + return gdaltest.runexternal_out_and_err( + python_exe + ' "' + script_file_path + '" ' + concatenated_argv + ) return gdaltest.runexternal( python_exe + ' "' + script_file_path + '" ' + concatenated_argv, display_live_on_parent_stdout=display_live_on_parent_stdout, From 860db75031474b8856e95baa70bbe3d743db0aad Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 15 May 2024 00:45:27 +0200 Subject: [PATCH 055/301] GDALNoDataMaskBand::IRasterIO(): fix crash on memory allocation failure The method had a fallback path when allocating a temporary buffer of the size of the one passed ot the method, that intended to use a less memory intensive block-based approach, but this was buggy. Fix this, and add testing for the fallback. Also, when attempting the fallback, emits a CE_Warning instead of a CE_Failure. Fixes https://github.com/rasterio/rasterio/discussions/3028 --- autotest/gcore/mask.py | 55 ++++++++++++++++----- gcore/gdalnodatamaskband.cpp | 94 ++++++++++++++++++++++++++---------- 2 files changed, 110 insertions(+), 39 deletions(-) diff --git a/autotest/gcore/mask.py b/autotest/gcore/mask.py index 2ff7fd5073cb..180521e11b65 100755 --- a/autotest/gcore/mask.py +++ b/autotest/gcore/mask.py @@ -996,7 +996,10 @@ def test_mask_27(): @pytest.mark.parametrize("dt", [gdal.GDT_Byte, gdal.GDT_Int64, gdal.GDT_UInt64]) -def test_mask_setting_nodata(dt): +@pytest.mark.parametrize( + "GDAL_SIMUL_MEM_ALLOC_FAILURE_NODATA_MASK_BAND", [None, "YES", "ALWAYS"] +) +def test_mask_setting_nodata(dt, GDAL_SIMUL_MEM_ALLOC_FAILURE_NODATA_MASK_BAND): def set_nodata_value(ds, val): if dt == gdal.GDT_Byte: ds.GetRasterBand(1).SetNoDataValue(val) @@ -1005,15 +1008,41 @@ def set_nodata_value(ds, val): else: ds.GetRasterBand(1).SetNoDataValueAsUInt64(val) - ds = gdal.GetDriverByName("MEM").Create("", 1, 1, 1, dt) - assert ds.GetRasterBand(1).GetMaskBand().ReadRaster() == struct.pack("B", 255) - assert ds.GetRasterBand(1).GetMaskBand().ReadRaster() == struct.pack("B", 255) - set_nodata_value(ds, 0) - assert ds.GetRasterBand(1).GetMaskBand().ReadRaster() == struct.pack("B", 0) - assert ds.GetRasterBand(1).GetMaskBand().ReadRaster() == struct.pack("B", 0) - set_nodata_value(ds, 1) - assert ds.GetRasterBand(1).GetMaskBand().ReadRaster() == struct.pack("B", 255) - set_nodata_value(ds, 0) - assert ds.GetRasterBand(1).GetMaskBand().ReadRaster() == struct.pack("B", 0) - ds.GetRasterBand(1).DeleteNoDataValue() - assert ds.GetRasterBand(1).GetMaskBand().ReadRaster() == struct.pack("B", 255) + def test(): + ds = gdal.GetDriverByName("MEM").Create("__debug__", 1, 1, 1, dt) + assert ds.GetRasterBand(1).GetMaskBand().ReadRaster() == struct.pack("B", 255) + assert ds.GetRasterBand(1).GetMaskBand().ReadRaster() == struct.pack("B", 255) + set_nodata_value(ds, 0) + got = ds.GetRasterBand(1).GetMaskBand().ReadRaster() + if ( + GDAL_SIMUL_MEM_ALLOC_FAILURE_NODATA_MASK_BAND == "ALWAYS" + and dt != gdal.GDT_Byte + ): + assert got is None + assert gdal.GetLastErrorType() == gdal.CE_Failure + else: + if ( + GDAL_SIMUL_MEM_ALLOC_FAILURE_NODATA_MASK_BAND == "YES" + and dt != gdal.GDT_Byte + ): + assert gdal.GetLastErrorType() == gdal.CE_Warning + assert got == struct.pack("B", 0) + assert ds.GetRasterBand(1).GetMaskBand().ReadRaster() == struct.pack("B", 0) + set_nodata_value(ds, 1) + assert ds.GetRasterBand(1).GetMaskBand().ReadRaster() == struct.pack( + "B", 255 + ) + set_nodata_value(ds, 0) + assert ds.GetRasterBand(1).GetMaskBand().ReadRaster() == struct.pack("B", 0) + + ds.GetRasterBand(1).DeleteNoDataValue() + assert ds.GetRasterBand(1).GetMaskBand().ReadRaster() == struct.pack("B", 255) + + if GDAL_SIMUL_MEM_ALLOC_FAILURE_NODATA_MASK_BAND: + with gdal.quiet_errors(), gdal.config_option( + "GDAL_SIMUL_MEM_ALLOC_FAILURE_NODATA_MASK_BAND", + GDAL_SIMUL_MEM_ALLOC_FAILURE_NODATA_MASK_BAND, + ): + test() + else: + test() diff --git a/gcore/gdalnodatamaskband.cpp b/gcore/gdalnodatamaskband.cpp index 635f936e7e4d..135679647b25 100644 --- a/gcore/gdalnodatamaskband.cpp +++ b/gcore/gdalnodatamaskband.cpp @@ -33,6 +33,7 @@ #include #include +#include #include "cpl_conv.h" #include "cpl_error.h" @@ -166,7 +167,6 @@ bool GDALNoDataMaskBand::IsNoDataInRange(double dfNoDataValue, { return GDALIsValueInRange(dfNoDataValue); } - case GDT_Int32: { return GDALIsValueInRange(dfNoDataValue); @@ -279,19 +279,65 @@ CPLErr GDALNoDataMaskBand::IRasterIO(GDALRWFlag eRWFlag, int nXOff, int nYOff, return CE_None; } - if (eBufType == GDT_Byte) + const auto AllocTempBufferOrFallback = + [this, eRWFlag, nXOff, nYOff, nXSize, nYSize, pData, nBufXSize, + nBufYSize, eBufType, nPixelSpace, nLineSpace, + psExtraArg](int nWrkDTSize) -> std::pair { - const int nWrkDTSize = GDALGetDataTypeSizeBytes(eWrkDT); - void *pTemp = VSI_MALLOC3_VERBOSE(nWrkDTSize, nBufXSize, nBufYSize); - if (pTemp == nullptr) + auto poParentDS = m_poParent->GetDataset(); + // Check if we must simulate a memory allocation failure + // Before checking the env variable, which is slightly expensive, + // check first for a special dataset name, which is a cheap test. + const char *pszOptVal = + poParentDS && strcmp(poParentDS->GetDescription(), "__debug__") == 0 + ? CPLGetConfigOption( + "GDAL_SIMUL_MEM_ALLOC_FAILURE_NODATA_MASK_BAND", "NO") + : "NO"; + const bool bSimulMemAllocFailure = + EQUAL(pszOptVal, "ALWAYS") || + (CPLTestBool(pszOptVal) && + GDALMajorObject::GetMetadataItem(__func__, "__INTERNAL__") == + nullptr); + void *pTemp = nullptr; + if (!bSimulMemAllocFailure) + { + CPLErrorStateBackuper oErrorStateBackuper(CPLQuietErrorHandler); + pTemp = VSI_MALLOC3_VERBOSE(nWrkDTSize, nBufXSize, nBufYSize); + } + if (!pTemp) { - return GDALRasterBand::IRasterIO( - eRWFlag, nXOff, nYOff, nXSize, nYSize, pTemp, nBufXSize, - nBufYSize, eWrkDT, nWrkDTSize, - static_cast(nBufXSize) * nWrkDTSize, psExtraArg); + const bool bAllocHasAlreadyFailed = + GDALMajorObject::GetMetadataItem(__func__, "__INTERNAL__") != + nullptr; + CPLError(bAllocHasAlreadyFailed ? CE_Failure : CE_Warning, + CPLE_OutOfMemory, + "GDALNoDataMaskBand::IRasterIO(): cannot allocate %d x %d " + "x %d bytes%s", + nBufXSize, nBufYSize, nWrkDTSize, + bAllocHasAlreadyFailed + ? "" + : ". Falling back to block-based approach"); + if (bAllocHasAlreadyFailed) + return std::pair(CE_Failure, nullptr); + // Sets a metadata item to prevent potential infinite recursion + GDALMajorObject::SetMetadataItem(__func__, "IN", "__INTERNAL__"); + const CPLErr eErr = GDALRasterBand::IRasterIO( + eRWFlag, nXOff, nYOff, nXSize, nYSize, pData, nBufXSize, + nBufYSize, eBufType, nPixelSpace, nLineSpace, psExtraArg); + GDALMajorObject::SetMetadataItem(__func__, nullptr, "__INTERNAL__"); + return std::pair(eErr, nullptr); } + return std::pair(CE_None, pTemp); + }; - const CPLErr eErr = m_poParent->RasterIO( + if (eBufType == GDT_Byte) + { + const int nWrkDTSize = GDALGetDataTypeSizeBytes(eWrkDT); + auto [eErr, pTemp] = AllocTempBufferOrFallback(nWrkDTSize); + if (!pTemp) + return eErr; + + eErr = m_poParent->RasterIO( GF_Read, nXOff, nYOff, nXSize, nYSize, pTemp, nBufXSize, nBufYSize, eWrkDT, nWrkDTSize, static_cast(nBufXSize) * nWrkDTSize, psExtraArg); @@ -453,30 +499,26 @@ CPLErr GDALNoDataMaskBand::IRasterIO(GDALRWFlag eRWFlag, int nXOff, int nYOff, // Output buffer is non-Byte. Ask for Byte and expand to user requested // type - GByte *pabyBuf = - static_cast(VSI_MALLOC2_VERBOSE(nBufXSize, nBufYSize)); - if (pabyBuf == nullptr) - { - return GDALRasterBand::IRasterIO(eRWFlag, nXOff, nYOff, nXSize, nYSize, - pData, nBufXSize, nBufYSize, eBufType, - nPixelSpace, nLineSpace, psExtraArg); - } - const CPLErr eErr = - IRasterIO(eRWFlag, nXOff, nYOff, nXSize, nYSize, pabyBuf, nBufXSize, - nBufYSize, GDT_Byte, 1, nBufXSize, psExtraArg); + auto [eErr, pTemp] = AllocTempBufferOrFallback(sizeof(GByte)); + if (!pTemp) + return eErr; + + eErr = IRasterIO(eRWFlag, nXOff, nYOff, nXSize, nYSize, pTemp, nBufXSize, + nBufYSize, GDT_Byte, 1, nBufXSize, psExtraArg); if (eErr != CE_None) { - VSIFree(pabyBuf); + VSIFree(pTemp); return eErr; } for (int iY = 0; iY < nBufYSize; iY++) { - GDALCopyWords(pabyBuf + static_cast(iY) * nBufXSize, GDT_Byte, - 1, static_cast(pData) + iY * nLineSpace, - eBufType, static_cast(nPixelSpace), nBufXSize); + GDALCopyWords( + static_cast(pTemp) + static_cast(iY) * nBufXSize, + GDT_Byte, 1, static_cast(pData) + iY * nLineSpace, + eBufType, static_cast(nPixelSpace), nBufXSize); } - VSIFree(pabyBuf); + VSIFree(pTemp); return CE_None; } From 68301e6547b6228f7645b3cda27a55bf76c51604 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 22 May 2024 19:12:30 +0200 Subject: [PATCH 056/301] PDF: fix build against PoDoFo with MSYS2 UCRT64 and CLANG64 environments Fixes #9976 --- frmts/pdf/pdfsdk_headers.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/frmts/pdf/pdfsdk_headers.h b/frmts/pdf/pdfsdk_headers.h index 77d7a438de6e..d5a3af3dea5b 100644 --- a/frmts/pdf/pdfsdk_headers.h +++ b/frmts/pdf/pdfsdk_headers.h @@ -89,14 +89,19 @@ #ifdef HAVE_PODOFO +#ifdef _WIN32 /* * Some Windows header defines a GetObject macro that - * shadows a GetObject() method in PoDoFo. This - * workaround is documented in the PoDoFo source. + * shadows a GetObject() method in PoDoFo. As pdfdataset.cpp includes cpl_spawn.h + * which includes windows.h, so let's bite the bullet and important windows.h + * right now, and then undef GetObject. Undef'ing GetObject is done in some + * source files of PoDoFo itself. */ +#include #ifdef GetObject #undef GetObject #endif +#endif // Related fix submitted per https://github.com/podofo/podofo/pull/98 #ifdef HAVE_PODOFO_0_10_OR_LATER From 51a694237f3dbf08b8703a3a4a4dd81382a3310b Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 22 May 2024 19:53:36 +0200 Subject: [PATCH 057/301] OGRSQL: validate column name in COUNT(field_name) and error out if it doesn't exist, otherwise it evaluates as COUNT(*) Fixes #9972 --- autotest/ogr/ogr_sql_test.py | 4 +++- ogr/ogrsf_frmts/generic/ogr_gensql.cpp | 2 +- ogr/swq_select.cpp | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/autotest/ogr/ogr_sql_test.py b/autotest/ogr/ogr_sql_test.py index 626b1f7e6db4..ef67fca17736 100755 --- a/autotest/ogr/ogr_sql_test.py +++ b/autotest/ogr/ogr_sql_test.py @@ -784,8 +784,10 @@ def test_ogr_sql_28(): "SELECT COUNT(*) FROM", "SELECT COUNT(*) AS foo FROM", "SELECT COUNT(* FROM my_layer", + "SELECT COUNT(i_dont_exist) FROM my_layer", "SELECT COUNT(FOO intfield) FROM my_layer", "SELECT COUNT(DISTINCT intfield FROM my_layer", + "SELECT COUNT(DISTINCT i_dont_exist) FROM my_layer", "SELECT COUNT(DISTINCT *) FROM my_layer", "SELECT FOO(DISTINCT intfield) FROM my_layer", "SELECT FOO(DISTINCT intfield) as foo FROM my_layer", @@ -1084,7 +1086,7 @@ def test_ogr_sql_36(): # Test select count([distinct] column) with null values (#4354) -def test_ogr_sql_37(): +def test_ogr_sql_count_and_null(): ds = ogr.GetDriverByName("Memory").CreateDataSource("ogr_sql_37") lyr = ds.CreateLayer("layer") diff --git a/ogr/ogrsf_frmts/generic/ogr_gensql.cpp b/ogr/ogrsf_frmts/generic/ogr_gensql.cpp index cb0ed0aa2d8a..dc618451b357 100644 --- a/ogr/ogrsf_frmts/generic/ogr_gensql.cpp +++ b/ogr/ogrsf_frmts/generic/ogr_gensql.cpp @@ -901,7 +901,7 @@ int OGRGenSQLResultsLayer::PrepareSummary() /* -------------------------------------------------------------------- */ /* We treat COUNT(*) as a special case, and fill with */ - /* GetFeatureCount(). */ + /* GetFeatureCount(). */ /* -------------------------------------------------------------------- */ if (psSelectInfo->result_columns() == 1 && diff --git a/ogr/swq_select.cpp b/ogr/swq_select.cpp index 9d63d199b00c..becd1221d1a9 100644 --- a/ogr/swq_select.cpp +++ b/ogr/swq_select.cpp @@ -981,7 +981,8 @@ CPLErr swq_select::parse(swq_field_list *field_list, // Record field type. def->field_type = this_type; - if (def->field_index == -1 && def->col_func != SWQCF_COUNT) + if (def->field_index == -1 && !(def->col_func == SWQCF_COUNT && + strcmp(def->field_name, "*") == 0)) { CPLError( CE_Failure, CPLE_AppDefined, "Unrecognized field name %s.", From 94214c66c0e49063ca0fa24849764f1062700273 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 23 May 2024 00:14:36 +0200 Subject: [PATCH 058/301] LIBKML: fix handling of styleUrl element referencing to an external document Fixes #9975 --- .../data/kml/point_with_external_style.kml | 13 ++ .../style.kml | 14 +++ autotest/ogr/ogr_libkml.py | 30 +++++ ogr/ogrsf_frmts/libkml/ogr_libkml.h | 6 +- .../libkml/ogrlibkmldatasource.cpp | 16 +-- .../libkml/ogrlibkmlfeaturestyle.cpp | 115 +++++++++++------- 6 files changed, 136 insertions(+), 58 deletions(-) create mode 100644 autotest/ogr/data/kml/point_with_external_style.kml create mode 100644 autotest/ogr/data/kml/style_of_point_with_external_style/style.kml diff --git a/autotest/ogr/data/kml/point_with_external_style.kml b/autotest/ogr/data/kml/point_with_external_style.kml new file mode 100644 index 000000000000..aee7354616d2 --- /dev/null +++ b/autotest/ogr/data/kml/point_with_external_style.kml @@ -0,0 +1,13 @@ + + + + + point + + my point + style_of_point_with_external_style/style.kml#myStyle + 2,49,0 + + + + diff --git a/autotest/ogr/data/kml/style_of_point_with_external_style/style.kml b/autotest/ogr/data/kml/style_of_point_with_external_style/style.kml new file mode 100644 index 000000000000..8131fdee5e29 --- /dev/null +++ b/autotest/ogr/data/kml/style_of_point_with_external_style/style.kml @@ -0,0 +1,14 @@ + + + + + diff --git a/autotest/ogr/ogr_libkml.py b/autotest/ogr/ogr_libkml.py index 5576ee4fa71a..28608e370283 100755 --- a/autotest/ogr/ogr_libkml.py +++ b/autotest/ogr/ogr_libkml.py @@ -1351,6 +1351,8 @@ def test_ogr_libkml_read_write_style(tmp_vsimem): data = data.decode("ascii") gdal.VSIFCloseL(f) + assert "#unknown_style" in data + expected_style = """ + image/png + + DE_EPSG_25832_ADV + + + + + DE_EPSG_25832_ADV + EPSG:25832 + + 00 + 17471320.750897426 + -46133.17 6301219.54 + 256 + 256 + 1 + 1 + + + 01 + 8735660.375448713 + -46133.17 6301219.54 + 256 + 256 + 2 + 2 + + + 02 + 4367830.187724357 + -46133.17 6301219.54 + 256 + 256 + 4 + 4 + + + 03 + 2183915.0938621783 + -46133.17 6301219.54 + 256 + 256 + 8 + 8 + + + 04 + 1091957.5469310891 + -46133.17 6301219.54 + 256 + 256 + 16 + 16 + + + 05 + 545978.7734655463 + -46133.17 6301219.54 + 256 + 256 + 32 + 32 + + + 06 + 272989.38673277246 + -46133.17 6301219.54 + 256 + 256 + 64 + 64 + + + 07 + 136494.69336638605 + -46133.17 6301219.54 + 256 + 256 + 128 + 128 + + + 08 + 68247.3466831932 + -46133.17 6301219.54 + 256 + 256 + 256 + 256 + + + 09 + 34123.673341596535 + -46133.17 6301219.54 + 256 + 256 + 512 + 512 + + + 10 + 17061.836670798286 + -46133.17 6301219.54 + 256 + 256 + 1024 + 1024 + + + 11 + 8530.918335399143 + -46133.17 6301219.54 + 256 + 256 + 2048 + 2048 + + + 12 + 4265.4591676995715 + -46133.17 6301219.54 + 256 + 256 + 4096 + 4096 + + + 13 + 2132.729583849782 + -46133.17 6301219.54 + 256 + 256 + 8192 + 8192 + + + + diff --git a/autotest/gdrivers/wmts.py b/autotest/gdrivers/wmts.py index 532ccf027bc2..b4c1b0693b23 100755 --- a/autotest/gdrivers/wmts.py +++ b/autotest/gdrivers/wmts.py @@ -1870,6 +1870,18 @@ def test_wmts_check_no_overflow_zoom_level(): gdal.Unlink(inputXml) +############################################################################### +# Test fix for https://github.com/OSGeo/gdal/issues/10348 + + +def test_wmts_clip_extent_with_union_of_tile_matrix_extent(): + + ds = gdal.Open("data/wmts/clip_WGS84BoundingBox_with_tilematrix.xml") + assert ds.GetGeoTransform() == pytest.approx( + (-46133.17, 0.5971642834779389, 0.0, 6301219.54, 0.0, -0.5971642834779389) + ) + + ############################################################################### # Test when local wmts tiles are missing diff --git a/frmts/wmts/wmtsdataset.cpp b/frmts/wmts/wmtsdataset.cpp index 0ff4c388aa82..59ba8c172e48 100644 --- a/frmts/wmts/wmtsdataset.cpp +++ b/frmts/wmts/wmtsdataset.cpp @@ -1927,6 +1927,21 @@ GDALDataset *WMTSDataset::Open(GDALOpenInfo *poOpenInfo) } } + // Clip the computed AOI with the union of the extent of the tile + // matrices + if (bHasAOI && !bExtendBeyondDateLine) + { + OGREnvelope sUnionTM; + for (const WMTSTileMatrix &oTM : oTMS.aoTM) + { + if (!sUnionTM.IsInit()) + sUnionTM = oTM.GetExtent(); + else + sUnionTM.Merge(oTM.GetExtent()); + } + sAOI.Intersect(sUnionTM); + } + // Otherwise default to BoundingBox of the TMS if (!bHasAOI && oTMS.bBoundingBoxValid && (eExtentMethod == AUTO || eExtentMethod == TILE_MATRIX_SET)) From b37c71384bf8ae752963f62d891bd9724ab3c5ad Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 2 Jul 2024 22:02:04 +0200 Subject: [PATCH 238/301] gdalwarp: fix -srcnodata/-dstnodata to accept negative value in first position (3.9.0 regression) --- apps/gdalwarp_lib.cpp | 18 ++++++++- autotest/utilities/test_gdalwarp_lib.py | 28 ++++++++++++++ doc/source/programs/gdalwarp.rst | 51 +++++++++++++++---------- 3 files changed, 74 insertions(+), 23 deletions(-) diff --git a/apps/gdalwarp_lib.cpp b/apps/gdalwarp_lib.cpp index 6fb54762fc6a..b79dbf15b75f 100644 --- a/apps/gdalwarp_lib.cpp +++ b/apps/gdalwarp_lib.cpp @@ -5747,12 +5747,12 @@ GDALWarpAppOptionsGetParser(GDALWarpAppOptions *psOptions, .help(_("Set max warp memory.")); argParser->add_argument("-srcnodata") - .metavar("[ ...]") + .metavar("\"[ ]...\"") .store_into(psOptions->osSrcNodata) .help(_("Nodata masking values for input bands.")); argParser->add_argument("-dstnodata") - .metavar("[ ...]") + .metavar("\"[ ]...\"") .store_into(psOptions->osDstNodata) .help(_("Nodata masking values for output bands.")); @@ -6126,6 +6126,20 @@ GDALWarpAppOptionsNew(char **papszArgv, } psOptions->bCreateOutput = true; } + // argparser will be confused if the value of a string argument + // starts with a negative sign. + else if (EQUAL(papszArgv[i], "-srcnodata") && i + 1 < nArgc) + { + ++i; + psOptions->osSrcNodata = papszArgv[i]; + } + // argparser will be confused if the value of a string argument + // starts with a negative sign. + else if (EQUAL(papszArgv[i], "-dstnodata") && i + 1 < nArgc) + { + ++i; + psOptions->osDstNodata = papszArgv[i]; + } else { aosArgv.AddString(papszArgv[i]); diff --git a/autotest/utilities/test_gdalwarp_lib.py b/autotest/utilities/test_gdalwarp_lib.py index a3f7b300a64d..7f641242e18b 100755 --- a/autotest/utilities/test_gdalwarp_lib.py +++ b/autotest/utilities/test_gdalwarp_lib.py @@ -1473,6 +1473,34 @@ def test_gdalwarp_lib_127(): assert ds.GetRasterBand(1).Checksum() == 4672, "bad checksum" +@pytest.mark.parametrize("srcNodata", [float("-inf"), -1]) +def test_gdalwarp_lib_srcnodata(srcNodata): + + ds = gdal.Warp( + "", + "../gcore/data/byte.tif", + format="MEM", + srcNodata=srcNodata, + outputType=gdal.GDT_Float32, + ) + assert ds.GetRasterBand(1).GetNoDataValue() == srcNodata, "bad nodata value" + assert ds.GetRasterBand(1).Checksum() == 4672, "bad checksum" + + +@pytest.mark.parametrize("dstNodata", [float("-inf"), -1]) +def test_gdalwarp_lib_dstnodata(dstNodata): + + ds = gdal.Warp( + "", + "../gcore/data/byte.tif", + format="MEM", + dstNodata=dstNodata, + outputType=gdal.GDT_Float32, + ) + assert ds.GetRasterBand(1).GetNoDataValue() == dstNodata, "bad nodata value" + assert ds.GetRasterBand(1).Checksum() == 4672, "bad checksum" + + ############################################################################### # Test automatic densification of cutline (#6375) diff --git a/doc/source/programs/gdalwarp.rst b/doc/source/programs/gdalwarp.rst index 639fa780d9be..042de075e33c 100644 --- a/doc/source/programs/gdalwarp.rst +++ b/doc/source/programs/gdalwarp.rst @@ -15,27 +15,36 @@ Synopsis .. code-block:: - gdalwarp [--help] [--long-usage] [--help-general] - [--quiet] [-overwrite] [-of ] [-co =]... [-s_srs ] - [-t_srs ] - [[-srcalpha]|[-nosrcalpha]] - [-dstalpha] [-tr |square] [-ts ] [-te ] [-r near|bilinear|cubic|cubicspline|lanczos|average|rms|mode|min|max|med|q1|q3|sum] - [-ot Byte|Int8|[U]Int{16|32|64}|CInt{16|32}|[C]Float{32|64}] - ... - - Advanced options: - [-wo =]... [-multi] [-s_coord_epoch ] [-t_coord_epoch ] [-ct ] - [[-tps]|[-rpc]|[-geoloc]] - [-order <1|2|3>] [-refine_gcps []] [-to =]... - [-et ] [-wm ] [-srcnodata [ ...]] - [-dstnodata [ ...]] [-tap] [-wt Byte|Int8|[U]Int{16|32|64}|CInt{16|32}|[C]Float{32|64}] - [-cutline |] [-cutline_srs ] [-cwhere ] - [[-cl ]|[-csql ]] - [-cblend ] [-crop_to_cutline] [-nomd] [-cvmd ] [-setci] - [-oo =]... [-doo =]... [-ovr |AUTO|AUTO-|NONE] - [[-vshift]|[-novshiftgrid]] - [-if ]... [-srcband ]... [-dstband ]... + gdalwarp [--help] [--long-usage] [--help-general] + [--quiet] [-overwrite] [-of ] [-co =]... + [-s_srs ] [-t_srs ] + [[-srcalpha]|[-nosrcalpha]] + [-dstalpha] [-tr |square] [-ts ] + [-te ] + [-r near|bilinear|cubic|cubicspline|lanczos|average|rms|mode|min|max|med|q1|q3|sum] + [-ot Byte|Int8|[U]Int{16|32|64}|CInt{16|32}|[C]Float{32|64}] + ... + + Advanced options: + [-wo =]... [-multi] + [-s_coord_epoch ] [-t_coord_epoch ] [-ct ] + [[-tps]|[-rpc]|[-geoloc]] + [-order <1|2|3>] [-refine_gcps []] + [-to =]... + [-et ] [-wm ] + [-srcnodata "[ ]..."] + [-dstnodata "[ ]..."] [-tap] + [-wt Byte|Int8|[U]Int{16|32|64}|CInt{16|32}|[C]Float{32|64}] + [-cutline |] [-cutline_srs ] + [-cwhere ] + [[-cl ]|[-csql ]] + [-cblend ] [-crop_to_cutline] + [-nomd] [-cvmd ] [-setci] + [-oo =]... [-doo =]... + [-ovr |AUTO|AUTO-|NONE] + [[-vshift]|[-novshiftgrid]] + [-if ]... [-srcband ]... [-dstband ]... Description From 4a6d9800271f0cbc1b5f917170507f8d9b0924f9 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 2 Jul 2024 22:02:38 +0200 Subject: [PATCH 239/301] gdalbuildvrt: -fix -srcnodata/-vrtnodata to accept negative value in first position (3.9.0 regression) --- apps/gdalbuildvrt_lib.cpp | 15 +++++++++++++++ autotest/utilities/test_gdalbuildvrt_lib.py | 10 +++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/apps/gdalbuildvrt_lib.cpp b/apps/gdalbuildvrt_lib.cpp index ae642786f383..31e720fcc866 100644 --- a/apps/gdalbuildvrt_lib.cpp +++ b/apps/gdalbuildvrt_lib.cpp @@ -2268,6 +2268,21 @@ GDALBuildVRTOptionsNew(char **papszArgv, psOptionsForBinary->osDstFilename = papszArgv[i + 1]; ++i; } + // argparser will be confused if the value of a string argument + // starts with a negative sign. + else if (EQUAL(papszArgv[i], "-srcnodata") && i + 1 < nArgc) + { + ++i; + psOptions->osSrcNoData = papszArgv[i]; + } + // argparser will be confused if the value of a string argument + // starts with a negative sign. + else if (EQUAL(papszArgv[i], "-vrtnodata") && i + 1 < nArgc) + { + ++i; + psOptions->osVRTNoData = papszArgv[i]; + } + else { aosArgv.AddString(papszArgv[i]); diff --git a/autotest/utilities/test_gdalbuildvrt_lib.py b/autotest/utilities/test_gdalbuildvrt_lib.py index 94f449d1e282..74e41222ed6e 100755 --- a/autotest/utilities/test_gdalbuildvrt_lib.py +++ b/autotest/utilities/test_gdalbuildvrt_lib.py @@ -280,15 +280,15 @@ def test_gdalbuildvrt_lib_separate_nodata_2(tmp_vsimem): src2_ds.GetRasterBand(1).SetNoDataValue(2) gdal.BuildVRT( - tmp_vsimem / "out.vrt", [src1_ds, src2_ds], separate=True, srcNodata="3 4" + tmp_vsimem / "out.vrt", [src1_ds, src2_ds], separate=True, srcNodata="-3 4" ) f = gdal.VSIFOpenL(tmp_vsimem / "out.vrt", "rb") data = gdal.VSIFReadL(1, 10000, f) gdal.VSIFCloseL(f) - assert b"3" in data - assert b"3" in data + assert b"-3" in data + assert b"-3" in data assert b"4" in data assert b"4" in data @@ -309,14 +309,14 @@ def test_gdalbuildvrt_lib_separate_nodata_3(tmp_vsimem): [src1_ds, src2_ds], separate=True, srcNodata="3 4", - VRTNodata="5 6", + VRTNodata="-5 6", ) f = gdal.VSIFOpenL(tmp_vsimem / "out.vrt", "rb") data = gdal.VSIFReadL(1, 10000, f) gdal.VSIFCloseL(f) - assert b"5" in data + assert b"-5" in data assert b"3" in data assert b"6" in data assert b"4" in data From db9354e49beeb09371bd8f6fc8a71f7f70c3642f Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 2 Jul 2024 22:03:19 +0200 Subject: [PATCH 240/301] gdal_translate: fix -a_nodata to accept '-inf' as input (3.9.0 regression) --- apps/gdal_translate_lib.cpp | 30 +++++++++++-------- autotest/utilities/test_gdal_translate_lib.py | 12 ++++++++ 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/apps/gdal_translate_lib.cpp b/apps/gdal_translate_lib.cpp index 0dbbd9193253..79f1e4895551 100644 --- a/apps/gdal_translate_lib.cpp +++ b/apps/gdal_translate_lib.cpp @@ -3032,19 +3032,6 @@ GDALTranslateOptionsGetParser(GDALTranslateOptions *psOptions, argParser->add_argument("-a_nodata") .metavar("|none") - .action( - [psOptions](const std::string &s) - { - if (EQUAL(s.c_str(), "none")) - { - psOptions->bUnsetNoData = true; - } - else - { - psOptions->bSetNoData = true; - psOptions->osNoData = s; - } - }) .help(_("Assign a specified nodata value to output bands.")); argParser->add_argument("-a_gt") @@ -3383,6 +3370,23 @@ GDALTranslateOptionsNew(char **papszArgv, psOptions->anColorInterp[nIndex] = GetColorInterp(papszArgv[i]); } + // argparser will be confused if the value of a string argument + // starts with a negative sign. + else if (EQUAL(papszArgv[i], "-a_nodata") && papszArgv[i + 1]) + { + ++i; + const std::string s = papszArgv[i]; + if (EQUAL(s.c_str(), "none")) + { + psOptions->bUnsetNoData = true; + } + else + { + psOptions->bSetNoData = true; + psOptions->osNoData = s; + } + } + else { aosArgv.AddString(papszArgv[i]); diff --git a/autotest/utilities/test_gdal_translate_lib.py b/autotest/utilities/test_gdal_translate_lib.py index 8948856bd329..07375a0f0801 100755 --- a/autotest/utilities/test_gdal_translate_lib.py +++ b/autotest/utilities/test_gdal_translate_lib.py @@ -292,6 +292,18 @@ def test_gdal_translate_lib_nodata_int64(): ds = None +############################################################################### +# Test nodata=-inf + + +def test_gdal_translate_lib_nodata_minus_inf(): + + ds = gdal.Translate( + "", "../gcore/data/float32.tif", format="MEM", noData=float("-inf") + ) + assert ds.GetRasterBand(1).GetNoDataValue() == float("-inf"), "Bad nodata value" + + ############################################################################### # Test srcWin option From 97b89ae5bae4d30844b15b4ec3627ba6b1239d17 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 2 Jul 2024 22:06:22 +0200 Subject: [PATCH 241/301] argparse: accept '-inf' as value for numeric arguments --- apps/argparse/argparse.hpp | 4 ++++ autotest/utilities/test_gdal_translate_lib.py | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/apps/argparse/argparse.hpp b/apps/argparse/argparse.hpp index b9dbc094b4d5..0a66f37e0f18 100644 --- a/apps/argparse/argparse.hpp +++ b/apps/argparse/argparse.hpp @@ -1358,6 +1358,10 @@ class Argument { * '+' '-' */ static bool is_decimal_literal(std::string_view s) { + if (s == "inf") { + return true; + } + auto is_digit = [](auto c) constexpr { switch (c) { case '0': diff --git a/autotest/utilities/test_gdal_translate_lib.py b/autotest/utilities/test_gdal_translate_lib.py index 07375a0f0801..180b3c4e9d41 100755 --- a/autotest/utilities/test_gdal_translate_lib.py +++ b/autotest/utilities/test_gdal_translate_lib.py @@ -1154,6 +1154,20 @@ def test_gdal_translate_lib_scale_and_unscale_incompatible(): ) +############################################################################### +# Test -a_offset -inf (dummy example, but to proove -inf works as a value +# numeric value) + + +@gdaltest.enable_exceptions() +def test_gdal_translate_lib_assign_offset(): + + out_ds = gdal.Translate( + "", gdal.Open("../gcore/data/byte.tif"), options="-f MEM -a_offset -inf" + ) + assert out_ds.GetRasterBand(1).GetOffset() == float("-inf") + + ############################################################################### # Test option argument handling From 2e5890493d9dae3a48ec3e8ffb30d8034c1990b1 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 28 Jun 2024 20:28:02 +0200 Subject: [PATCH 242/301] gdallocationinfo: avoid extra newline character in -valonly mode if coordinate is outside raster extent (3.9.0 regression) Fixes #10336 --- apps/gdallocationinfo.cpp | 7 +++- autotest/utilities/test_gdallocationinfo.py | 45 +++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/apps/gdallocationinfo.cpp b/apps/gdallocationinfo.cpp index 1ec5ae30b1e8..e81b08c5e8b8 100644 --- a/apps/gdallocationinfo.cpp +++ b/apps/gdallocationinfo.cpp @@ -424,7 +424,12 @@ MAIN_START(argc, argv) osXML += "Location is off this file! No further details " "to report."; else if (bValOnly) - printf("\n"); + { + for (int i = 1; i < static_cast(anBandList.size()); i++) + { + printf("%s", osFieldSep.c_str()); + } + } else if (!bQuiet) printf("\nLocation is off this file! No further details to " "report.\n"); diff --git a/autotest/utilities/test_gdallocationinfo.py b/autotest/utilities/test_gdallocationinfo.py index 2b8c80cd7a2e..0b64f4c19333 100755 --- a/autotest/utilities/test_gdallocationinfo.py +++ b/autotest/utilities/test_gdallocationinfo.py @@ -254,3 +254,48 @@ def test_gdallocationinfo_echo(gdallocationinfo_path): strin="1 2", ) assert "1,2,132" in ret + + +############################################################################### +# Test out of raster coordinates + + +def test_gdallocationinfo_out_of_raster_coordinates_valonly(gdallocationinfo_path): + + ret = gdaltest.runexternal( + gdallocationinfo_path + " -valonly ../gcore/data/byte.tif", + strin="1 2\n-1 -1\n1 2", + ) + + ret = ret.replace("\r\n", "\n") + assert "132\n\n132\n" in ret + + ret = gdaltest.runexternal( + gdallocationinfo_path + ' -E -valonly -field_sep "," ../gcore/data/byte.tif', + strin="1 2\n-1 -1\n1 2", + ) + + ret = ret.replace("\r\n", "\n") + assert "1,2,132\n-1,-1,\n1,2,132\n" in ret + + +def test_gdallocationinfo_out_of_raster_coordinates_valonly_multiband( + gdallocationinfo_path, +): + + ret = gdaltest.runexternal( + gdallocationinfo_path + " -valonly ../gcore/data/rgbsmall.tif", + strin="1 2\n-1 -1\n1 2", + ) + + ret = ret.replace("\r\n", "\n") + assert "0\n0\n0\n\n\n\n0\n0\n0\n" in ret + + ret = gdaltest.runexternal( + gdallocationinfo_path + + ' -E -valonly -field_sep "," ../gcore/data/rgbsmall.tif', + strin="1 2\n-1 -1\n1 2", + ) + + ret = ret.replace("\r\n", "\n") + assert "1,2,0,0,0\n-1,-1,,,\n1,2,0,0,0\n" in ret From f033d5c372c6e6be92a8966a04e5d8bffd3353a5 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 27 Jun 2024 22:45:11 +0200 Subject: [PATCH 243/301] GML writer: fix missing SRS in Featurecollection's boundedBy element (3.9.1 regression) Fixes #10332 Was caused by the fix 3674ec7570f324ea43eef08b6f5ce3a29de2741d for #10071 The regression mostly occurs when writing a GML file using ogr2ogr when the source layer has a named geometry column, e.g if the source is a GeoPackage or if using -sql The problem was acutally latent and also could have occured before 3.9.1 if using CreateLayer() without a SRS + CreateGeomField() --- autotest/ogr/ogr_gml.py | 92 ++++++++++++++++++++++++ ogr/ogrsf_frmts/gml/ogr_gml.h | 18 ++++- ogr/ogrsf_frmts/gml/ogrgmldatasource.cpp | 88 +++++++++++++---------- ogr/ogrsf_frmts/gml/ogrgmllayer.cpp | 34 ++------- 4 files changed, 161 insertions(+), 71 deletions(-) diff --git a/autotest/ogr/ogr_gml.py b/autotest/ogr/ogr_gml.py index eadda1826340..fc70d74f1766 100755 --- a/autotest/ogr/ogr_gml.py +++ b/autotest/ogr/ogr_gml.py @@ -4356,3 +4356,95 @@ def test_ogr_gml_geom_link_to_immediate_child(): "data/gml/link_to_immediate_child.gml", open_options=["WRITE_GFS=NO"] ) assert ds + + +############################################################################### +# Test scenario of https://github.com/OSGeo/gdal/issues/10332 + + +@pytest.mark.parametrize("use_create_geom_field", [False, True]) +@pytest.mark.parametrize("has_srs", [False, True]) +def test_ogr_gml_ogr2ogr_from_layer_with_name_geom_field( + tmp_vsimem, use_create_geom_field, has_srs +): + + ds = gdal.GetDriverByName("Memory").Create("", 0, 0, 0, gdal.GDT_Unknown) + if has_srs: + srs = osr.SpatialReference() + srs.ImportFromEPSG(4326) + srs.SetAxisMappingStrategy(osr.OAMS_TRADITIONAL_GIS_ORDER) + else: + srs = None + if use_create_geom_field: + lyr = ds.CreateLayer("test", geom_type=ogr.wkbNone) + my_geom_field = ogr.GeomFieldDefn("my_geom", ogr.wkbUnknown) + my_geom_field.SetSpatialRef(srs) + lyr.CreateGeomField(my_geom_field) + else: + lyr = ds.CreateLayer("test", geom_type=ogr.wkbUnknown, srs=srs) + f = ogr.Feature(lyr.GetLayerDefn()) + f.SetGeometryDirectly(ogr.CreateGeometryFromWkt("POINT(2 49)")) + lyr.CreateFeature(f) + f = ogr.Feature(lyr.GetLayerDefn()) + f.SetGeometryDirectly(ogr.CreateGeometryFromWkt("POINT(3 50)")) + lyr.CreateFeature(f) + + out_filename = str(tmp_vsimem / "out.gml") + gdal.VectorTranslate(out_filename, ds, format="GML") + + f = gdal.VSIFOpenL(out_filename, "rb") + assert f + try: + data = gdal.VSIFReadL(1, 10000, f) + finally: + gdal.VSIFCloseL(f) + + if has_srs: + assert ( + b'49 250 3' + in data + ) + else: + assert ( + b"2 493 50" + in data + ) + + +############################################################################### + + +@pytest.mark.parametrize("first_layer_has_srs", [False, True]) +def test_ogr_gml_ogr2ogr_from_layers_with_inconsistent_srs( + tmp_vsimem, first_layer_has_srs +): + + ds = gdal.GetDriverByName("Memory").Create("", 0, 0, 0, gdal.GDT_Unknown) + srs = osr.SpatialReference() + srs.ImportFromEPSG(4326) + srs.SetAxisMappingStrategy(osr.OAMS_TRADITIONAL_GIS_ORDER) + lyr = ds.CreateLayer( + "test", geom_type=ogr.wkbUnknown, srs=(srs if first_layer_has_srs else None) + ) + f = ogr.Feature(lyr.GetLayerDefn()) + f.SetGeometryDirectly(ogr.CreateGeometryFromWkt("POINT(2 49)")) + lyr.CreateFeature(f) + + lyr = ds.CreateLayer( + "test2", geom_type=ogr.wkbUnknown, srs=(None if first_layer_has_srs else srs) + ) + f = ogr.Feature(lyr.GetLayerDefn()) + f.SetGeometryDirectly(ogr.CreateGeometryFromWkt("POINT(3 50)")) + lyr.CreateFeature(f) + + out_filename = str(tmp_vsimem / "out.gml") + gdal.VectorTranslate(out_filename, ds, format="GML") + + f = gdal.VSIFOpenL(out_filename, "rb") + assert f + try: + data = gdal.VSIFReadL(1, 10000, f) + finally: + gdal.VSIFCloseL(f) + + assert b"" in data diff --git a/ogr/ogrsf_frmts/gml/ogr_gml.h b/ogr/ogrsf_frmts/gml/ogr_gml.h index b5e0cda9b9e3..4ccedcbbfb61 100644 --- a/ogr/ogrsf_frmts/gml/ogr_gml.h +++ b/ogr/ogrsf_frmts/gml/ogr_gml.h @@ -61,7 +61,6 @@ class OGRGMLLayer final : public OGRLayer char *pszFIDPrefix; bool bWriter; - bool bSameSRS; OGRGMLDataSource *poDS; @@ -137,8 +136,14 @@ class OGRGMLDataSource final : public OGRDataSource OGRGMLSRSNameFormat eSRSNameFormat; bool bWriteSpaceIndentation; - OGRSpatialReference *poWriteGlobalSRS; - bool bWriteGlobalSRS; + //! Whether all geometry fields of all layers have the same SRS (or no SRS at all) + bool m_bWriteGlobalSRS = true; + + //! The global SRS (may be null), that is valid only if m_bWriteGlobalSRS == true + std::unique_ptr m_poWriteGlobalSRS{}; + + //! Whether at least one geometry field has been created + bool m_bWriteGlobalSRSInit = false; // input related parameters. CPLString osFilename; @@ -300,6 +305,13 @@ class OGRGMLDataSource final : public OGRDataSource const char *GetSRSDimensionLoc() const; bool GMLFeatureCollection() const; + void DeclareNewWriteSRS(const OGRSpatialReference *poSRS); + + bool HasWriteGlobalSRS() const + { + return m_bWriteGlobalSRS; + } + virtual OGRLayer *ExecuteSQL(const char *pszSQLCommand, OGRGeometry *poSpatialFilter, const char *pszDialect) override; diff --git a/ogr/ogrsf_frmts/gml/ogrgmldatasource.cpp b/ogr/ogrsf_frmts/gml/ogrgmldatasource.cpp index 4ef9d4f6b47a..d9463991ef84 100644 --- a/ogr/ogrsf_frmts/gml/ogrgmldatasource.cpp +++ b/ogr/ogrsf_frmts/gml/ogrgmldatasource.cpp @@ -86,9 +86,8 @@ OGRGMLDataSource::OGRGMLDataSource() nBoundedByLocation(-1), nSchemaInsertLocation(-1), bIsOutputGML3(false), bIsOutputGML3Deegree(false), bIsOutputGML32(false), eSRSNameFormat(SRSNAME_SHORT), bWriteSpaceIndentation(true), - poWriteGlobalSRS(nullptr), bWriteGlobalSRS(false), poReader(nullptr), - bOutIsTempFile(false), bExposeGMLId(false), bExposeFid(false), - bIsWFS(false), bUseGlobalSRSName(false), + poReader(nullptr), bOutIsTempFile(false), bExposeGMLId(false), + bExposeFid(false), bIsWFS(false), bUseGlobalSRSName(false), m_bInvertAxisOrderIfLatLong(false), m_bConsiderEPSGAsURN(false), m_eSwapCoordinates(GML_SWAP_AUTO), m_bGetSecondaryGeometryOption(false), eReadMode(STANDARD), poStoredGMLFeature(nullptr), @@ -126,13 +125,13 @@ OGRGMLDataSource::~OGRGMLDataSource() if (!bFpOutputIsNonSeekable && nBoundedByLocation != -1 && VSIFSeekL(fpOutput, nBoundedByLocation, SEEK_SET) == 0) { - if (bWriteGlobalSRS && sBoundingRect.IsInit() && IsGML3Output()) + if (m_bWriteGlobalSRS && sBoundingRect.IsInit() && IsGML3Output()) { bool bCoordSwap = false; char *pszSRSName = - poWriteGlobalSRS - ? GML_GetSRSName(poWriteGlobalSRS, eSRSNameFormat, - &bCoordSwap) + m_poWriteGlobalSRS + ? GML_GetSRSName(m_poWriteGlobalSRS.get(), + eSRSNameFormat, &bCoordSwap) : CPLStrdup(""); char szLowerCorner[75] = {}; char szUpperCorner[75] = {}; @@ -201,7 +200,7 @@ OGRGMLDataSource::~OGRGMLDataSource() szLowerCorner, szUpperCorner); CPLFree(pszSRSName); } - else if (bWriteGlobalSRS && sBoundingRect.IsInit()) + else if (m_bWriteGlobalSRS && sBoundingRect.IsInit()) { if (bWriteSpaceIndentation) VSIFPrintfL(fpOutput, " "); @@ -268,8 +267,6 @@ OGRGMLDataSource::~OGRGMLDataSource() delete poReader; } - delete poWriteGlobalSRS; - delete poStoredGMLFeature; if (osXSDFilename.compare(CPLSPrintf("/vsimem/tmp_gml_xsd_%p.xsd", this)) == @@ -2001,6 +1998,48 @@ void OGRGMLDataSource::WriteTopElements() } } +/************************************************************************/ +/* DeclareNewWriteSRS() */ +/************************************************************************/ + +// Check that all SRS passed to ICreateLayer() and CreateGeomField() +// are the same (or all null) + +void OGRGMLDataSource::DeclareNewWriteSRS(const OGRSpatialReference *poSRS) +{ + if (m_bWriteGlobalSRS) + { + if (!m_bWriteGlobalSRSInit) + { + m_bWriteGlobalSRSInit = true; + if (poSRS) + { + m_poWriteGlobalSRS.reset(poSRS->Clone()); + m_poWriteGlobalSRS->SetAxisMappingStrategy( + OAMS_TRADITIONAL_GIS_ORDER); + } + } + else + { + if (m_poWriteGlobalSRS) + { + const char *const apszOptions[] = { + "IGNORE_DATA_AXIS_TO_SRS_AXIS_MAPPING=YES", nullptr}; + if (!poSRS || + !poSRS->IsSame(m_poWriteGlobalSRS.get(), apszOptions)) + { + m_bWriteGlobalSRS = false; + } + } + else + { + if (poSRS) + m_bWriteGlobalSRS = false; + } + } + } +} + /************************************************************************/ /* ICreateLayer() */ /************************************************************************/ @@ -2037,37 +2076,9 @@ OGRGMLDataSource::ICreateLayer(const char *pszLayerName, pszLayerName, pszCleanLayerName); } - // Set or check validity of global SRS. if (nLayers == 0) { WriteTopElements(); - if (poSRS) - { - poWriteGlobalSRS = poSRS->Clone(); - poWriteGlobalSRS->SetAxisMappingStrategy( - OAMS_TRADITIONAL_GIS_ORDER); - } - bWriteGlobalSRS = true; - } - else if (bWriteGlobalSRS) - { - if (poWriteGlobalSRS != nullptr) - { - const char *const apszOptions[] = { - "IGNORE_DATA_AXIS_TO_SRS_AXIS_MAPPING=YES", nullptr}; - if (poSRS == nullptr || - !poSRS->IsSame(poWriteGlobalSRS, apszOptions)) - { - delete poWriteGlobalSRS; - poWriteGlobalSRS = nullptr; - bWriteGlobalSRS = false; - } - } - else - { - if (poSRS != nullptr) - bWriteGlobalSRS = false; - } } // Create the layer object. @@ -2081,6 +2092,7 @@ OGRGMLDataSource::ICreateLayer(const char *pszLayerName, pszGeomFieldName = "geometryProperty"; poGeomFieldDefn->SetName(pszGeomFieldName); poGeomFieldDefn->SetNullable(poSrcGeomFieldDefn->IsNullable()); + DeclareNewWriteSRS(poSRS); if (poSRS != nullptr) { auto poSRSClone = poSRS->Clone(); diff --git a/ogr/ogrsf_frmts/gml/ogrgmllayer.cpp b/ogr/ogrsf_frmts/gml/ogrgmllayer.cpp index d5a9a3009d33..bb47fa9e9ab7 100644 --- a/ogr/ogrsf_frmts/gml/ogrgmllayer.cpp +++ b/ogr/ogrsf_frmts/gml/ogrgmllayer.cpp @@ -44,7 +44,7 @@ OGRGMLLayer::OGRGMLLayer(const char *pszName, bool bWriterIn, : poFeatureDefn(new OGRFeatureDefn( pszName + (STARTS_WITH_CI(pszName, "ogr:") ? 4 : 0))), iNextGMLId(0), bInvalidFIDFound(false), pszFIDPrefix(nullptr), - bWriter(bWriterIn), bSameSRS(false), poDS(poDSIn), + bWriter(bWriterIn), poDS(poDSIn), poFClass(!bWriter ? poDS->GetReader()->GetClass(pszName) : nullptr), // Reader's should get the corresponding GMLFeatureClass and cache it. hCacheSRS(GML_BuildOGRGeometryFromList_CreateCache()), @@ -708,33 +708,6 @@ OGRErr OGRGMLLayer::ICreateFeature(OGRFeature *poFeature) poDS->PrintLine(fp, ""); } - if (iNextGMLId == 0) - { - bSameSRS = true; - for (int iGeomField = 1; - iGeomField < poFeatureDefn->GetGeomFieldCount(); iGeomField++) - { - OGRGeomFieldDefn *poFieldDefn0 = poFeatureDefn->GetGeomFieldDefn(0); - OGRGeomFieldDefn *poFieldDefn = - poFeatureDefn->GetGeomFieldDefn(iGeomField); - const OGRSpatialReference *poSRS0 = poFieldDefn0->GetSpatialRef(); - const OGRSpatialReference *poSRS = poFieldDefn->GetSpatialRef(); - if (poSRS0 != nullptr && poSRS == nullptr) - { - bSameSRS = false; - } - else if (poSRS0 == nullptr && poSRS != nullptr) - { - bSameSRS = false; - } - else if (poSRS0 != nullptr && poSRS != nullptr && poSRS0 != poSRS && - !poSRS0->IsSame(poSRS)) - { - bSameSRS = false; - } - } - } - if (poFeature->GetFID() == OGRNullFID) poFeature->SetFID(iNextGMLId++); @@ -794,7 +767,7 @@ OGRErr OGRGMLLayer::ICreateFeature(OGRFeature *poFeature) const int nCoordDimension = poGeom->getCoordinateDimension(); poGeom->getEnvelope(&sGeomBounds); - if (bSameSRS) + if (poDS->HasWriteGlobalSRS()) poDS->GrowExtents(&sGeomBounds, nCoordDimension); if (poGeom->getSpatialReference() == nullptr && @@ -1246,7 +1219,8 @@ OGRErr OGRGMLLayer::CreateGeomField(const OGRGeomFieldDefn *poField, /* Enforce XML naming semantics on element name. */ /* -------------------------------------------------------------------- */ OGRGeomFieldDefn oCleanCopy(poField); - auto poSRSOri = poField->GetSpatialRef(); + const auto poSRSOri = poField->GetSpatialRef(); + poDS->DeclareNewWriteSRS(poSRSOri); if (poSRSOri) { auto poSRS = poSRSOri->Clone(); From af5cf321050895453f76fb20524064fe30677ecf Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 26 Jun 2024 20:20:26 +0200 Subject: [PATCH 244/301] GTiff: make SetNoDataValue(double) work on a Int64/UInt64 band Refs / fixes #10306 --- autotest/cpp/test_gdal_gtiff.cpp | 28 ++++++++++++++++++++ frmts/gtiff/gtiffrasterband_write.cpp | 37 ++++++++++++++++++++++----- 2 files changed, 58 insertions(+), 7 deletions(-) diff --git a/autotest/cpp/test_gdal_gtiff.cpp b/autotest/cpp/test_gdal_gtiff.cpp index 1ea518295fb6..b9a24c5a59b3 100644 --- a/autotest/cpp/test_gdal_gtiff.cpp +++ b/autotest/cpp/test_gdal_gtiff.cpp @@ -240,4 +240,32 @@ TEST_F(test_gdal_gtiff, raster_min_max) GDALClose(ds); } +// Test setting a nodata value with SetNoDataValue(double) on a int64 dataset +TEST_F(test_gdal_gtiff, set_nodata_value_on_int64) +{ + std::string osTmpFile = "/vsimem/temp.tif"; + auto poDS = + std::unique_ptr(GDALDriver::FromHandle(drv_)->Create( + osTmpFile.c_str(), 1, 1, 1, GDT_Int64, nullptr)); + EXPECT_EQ(poDS->GetRasterBand(1)->SetNoDataValue(1), CE_None); + { + int bGotNoData = false; + EXPECT_EQ(poDS->GetRasterBand(1)->GetNoDataValue(&bGotNoData), 1.0); + EXPECT_TRUE(bGotNoData); + } + { + int bGotNoData = false; + EXPECT_EQ(poDS->GetRasterBand(1)->GetNoDataValueAsInt64(&bGotNoData), + 1.0); + EXPECT_TRUE(bGotNoData); + } + int64_t nVal = 0; + EXPECT_EQ(poDS->GetRasterBand(1)->RasterIO(GF_Read, 0, 0, 1, 1, &nVal, 1, 1, + GDT_Int64, 0, 0, nullptr), + CE_None); + EXPECT_EQ(nVal, 1); + poDS.reset(); + VSIUnlink(osTmpFile.c_str()); +} + } // namespace diff --git a/frmts/gtiff/gtiffrasterband_write.cpp b/frmts/gtiff/gtiffrasterband_write.cpp index de8d09e6934e..0b7ee7dc8663 100644 --- a/frmts/gtiff/gtiffrasterband_write.cpp +++ b/frmts/gtiff/gtiffrasterband_write.cpp @@ -34,6 +34,7 @@ #include #include "cpl_vsi_virtual.h" +#include "gdal_priv_templates.hpp" #include "gtiff.h" #include "tifvsi.h" @@ -705,6 +706,33 @@ CPLErr GTiffRasterBand::SetColorTable(GDALColorTable *poCT) CPLErr GTiffRasterBand::SetNoDataValue(double dfNoData) { + const auto SetNoDataMembers = [this, dfNoData]() + { + m_bNoDataSet = true; + m_dfNoDataValue = dfNoData; + + m_poGDS->m_bNoDataSet = true; + m_poGDS->m_dfNoDataValue = dfNoData; + + if (eDataType == GDT_Int64 && GDALIsValueExactAs(dfNoData)) + { + m_bNoDataSetAsInt64 = true; + m_nNoDataValueInt64 = static_cast(dfNoData); + + m_poGDS->m_bNoDataSetAsInt64 = true; + m_poGDS->m_nNoDataValueInt64 = static_cast(dfNoData); + } + else if (eDataType == GDT_UInt64 && + GDALIsValueExactAs(dfNoData)) + { + m_bNoDataSetAsUInt64 = true; + m_nNoDataValueUInt64 = static_cast(dfNoData); + + m_poGDS->m_bNoDataSetAsUInt64 = true; + m_poGDS->m_nNoDataValueUInt64 = static_cast(dfNoData); + } + }; + m_poGDS->LoadGeoreferencingAndPamIfNeeded(); if (m_poGDS->m_bNoDataSet && @@ -713,8 +741,7 @@ CPLErr GTiffRasterBand::SetNoDataValue(double dfNoData) { ResetNoDataValues(false); - m_bNoDataSet = true; - m_dfNoDataValue = dfNoData; + SetNoDataMembers(); return CE_None; } @@ -767,11 +794,7 @@ CPLErr GTiffRasterBand::SetNoDataValue(double dfNoData) { ResetNoDataValues(true); - m_poGDS->m_bNoDataSet = true; - m_poGDS->m_dfNoDataValue = dfNoData; - - m_bNoDataSet = true; - m_dfNoDataValue = dfNoData; + SetNoDataMembers(); } return eErr; From b32acf17a24da1907d1b647842cb0af2900e2c5e Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 26 Jun 2024 20:21:19 +0200 Subject: [PATCH 245/301] gdal_rasterize: on a int64 band, set nodata value as int64 Fixes #10306 --- apps/gdal_rasterize_lib.cpp | 25 +++++++++++-------- autotest/utilities/test_gdal_rasterize_lib.py | 4 ++- doc/source/programs/gdal_rasterize.rst | 4 ++- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/apps/gdal_rasterize_lib.cpp b/apps/gdal_rasterize_lib.cpp index 39913ad306cb..12ebd7cb2466 100644 --- a/apps/gdal_rasterize_lib.cpp +++ b/apps/gdal_rasterize_lib.cpp @@ -482,7 +482,7 @@ static GDALDatasetH CreateOutputDataset( OGREnvelope sEnvelop, GDALDriverH hDriver, const char *pszDest, int nXSize, int nYSize, double dfXRes, double dfYRes, bool bTargetAlignedPixels, int nBandCount, GDALDataType eOutputType, char **papszCreationOptions, - const std::vector &adfInitVals, int bNoDataSet, double dfNoData) + const std::vector &adfInitVals, const char *pszNoData) { bool bFirstLayer = true; char *pszWKT = nullptr; @@ -598,12 +598,16 @@ static GDALDatasetH CreateOutputDataset( } }*/ - if (bNoDataSet) + if (pszNoData) { for (int iBand = 0; iBand < nBandCount; iBand++) { GDALRasterBandH hBand = GDALGetRasterBand(hDstDS, iBand + 1); - GDALSetRasterNoDataValue(hBand, dfNoData); + if (GDALGetRasterDataType(hBand) == GDT_Int64) + GDALSetRasterNoDataValueAsInt64(hBand, + CPLAtoGIntBig(pszNoData)); + else + GDALSetRasterNoDataValue(hBand, CPLAtof(pszNoData)); } } @@ -649,8 +653,7 @@ struct GDALRasterizeOptions char **papszCreationOptions; GDALDataType eOutputType; std::vector adfInitVals; - int bNoDataSet; - double dfNoData; + char *pszNoData; OGREnvelope sEnvelop; int nXSize, nYSize; OGRSpatialReferenceH hSRS; @@ -832,7 +835,7 @@ GDALDatasetH GDALRasterize(const char *pszDest, GDALDatasetH hDstDS, psOptions->bTargetAlignedPixels, static_cast(psOptions->anBandList.size()), eOutputType, psOptions->papszCreationOptions, psOptions->adfInitVals, - psOptions->bNoDataSet, psOptions->dfNoData); + psOptions->pszNoData); if (hDstDS == nullptr) { GDALDatasetReleaseResultSet(hSrcDataset, hLayer); @@ -910,7 +913,7 @@ GDALDatasetH GDALRasterize(const char *pszDest, GDALDatasetH hDstDS, psOptions->dfYRes, psOptions->bTargetAlignedPixels, static_cast(psOptions->anBandList.size()), eOutputType, psOptions->papszCreationOptions, psOptions->adfInitVals, - psOptions->bNoDataSet, psOptions->dfNoData); + psOptions->pszNoData); if (hDstDS == nullptr) { GDALRasterizeOptionsFree(psOptionsToFree); @@ -1020,8 +1023,7 @@ GDALRasterizeOptionsNew(char **papszArgv, psOptions->dfXRes = 0; psOptions->dfYRes = 0; psOptions->eOutputType = GDT_Unknown; - psOptions->bNoDataSet = FALSE; - psOptions->dfNoData = 0; + psOptions->pszNoData = nullptr; psOptions->nXSize = 0; psOptions->nYSize = 0; psOptions->hSRS = nullptr; @@ -1195,8 +1197,8 @@ GDALRasterizeOptionsNew(char **papszArgv, } else if (i < argc - 1 && EQUAL(papszArgv[i], "-a_nodata")) { - psOptions->dfNoData = CPLAtof(papszArgv[i + 1]); - psOptions->bNoDataSet = TRUE; + CPLFree(psOptions->pszNoData); + psOptions->pszNoData = CPLStrdup(papszArgv[i + 1]); i += 1; psOptions->bCreateOutput = true; } @@ -1472,6 +1474,7 @@ void GDALRasterizeOptionsFree(GDALRasterizeOptions *psOptions) CPLFree(psOptions->pszDialect); CPLFree(psOptions->pszBurnAttribute); CPLFree(psOptions->pszWHERE); + CPLFree(psOptions->pszNoData); OSRDestroySpatialReference(psOptions->hSRS); delete psOptions; diff --git a/autotest/utilities/test_gdal_rasterize_lib.py b/autotest/utilities/test_gdal_rasterize_lib.py index b2669d966a87..67b2ba8d6d42 100755 --- a/autotest/utilities/test_gdal_rasterize_lib.py +++ b/autotest/utilities/test_gdal_rasterize_lib.py @@ -712,11 +712,13 @@ def test_gdal_rasterize_lib_int64_attribute(): feature["val"] = val layer.CreateFeature(feature) + noData = -(1 << 63) target_ds = gdal.Rasterize( - "", vector_ds, format="MEM", attribute="val", width=2, height=2 + "", vector_ds, format="MEM", attribute="val", width=2, height=2, noData=noData ) assert target_ds is not None assert target_ds.GetRasterBand(1).DataType == gdal.GDT_Int64 + assert target_ds.GetRasterBand(1).GetNoDataValue() == noData assert struct.unpack("Q" * 4, target_ds.ReadRaster())[0] == val diff --git a/doc/source/programs/gdal_rasterize.rst b/doc/source/programs/gdal_rasterize.rst index e7a08808509b..bb4f8e0568bc 100644 --- a/doc/source/programs/gdal_rasterize.rst +++ b/doc/source/programs/gdal_rasterize.rst @@ -172,7 +172,9 @@ raster data is only supported since GDAL 2.1.0. .. option:: -ot - Force the output bands to be of the indicated data type. Defaults to ``Float64`` + Force the output bands to be of the indicated data type. Defaults to ``Float64``, + unless the attribute field to burn is of type ``Int64``, in which case ``Int64`` + is used for the output raster data type. .. option:: -optim {AUTO|VECTOR|RASTER} From 3ff2bb9550da1f29f65ce9d392e8ae1bdcfdcef5 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 26 Jun 2024 21:11:55 +0200 Subject: [PATCH 246/301] gdal_rasterize: restrict to defaulting to Int64 raster data type only if the output driver supports it (and the burned field is Int64) --- apps/gdal_rasterize_lib.cpp | 62 ++++++++++++++------------ doc/source/programs/gdal_rasterize.rst | 2 +- 2 files changed, 34 insertions(+), 30 deletions(-) diff --git a/apps/gdal_rasterize_lib.cpp b/apps/gdal_rasterize_lib.cpp index 12ebd7cb2466..493922ee1068 100644 --- a/apps/gdal_rasterize_lib.cpp +++ b/apps/gdal_rasterize_lib.cpp @@ -793,6 +793,36 @@ GDALDatasetH GDALRasterize(const char *pszDest, GDALDatasetH hDstDS, } } + const auto GetOutputDataType = [&](OGRLayerH hLayer) + { + CPLAssert(bCreateOutput); + CPLAssert(hDriver); + GDALDataType eOutputType = psOptions->eOutputType; + if (eOutputType == GDT_Unknown && + psOptions->pszBurnAttribute != nullptr) + { + OGRFeatureDefnH hLayerDefn = OGR_L_GetLayerDefn(hLayer); + const int iBurnField = + OGR_FD_GetFieldIndex(hLayerDefn, psOptions->pszBurnAttribute); + if (iBurnField >= 0 && OGR_Fld_GetType(OGR_FD_GetFieldDefn( + hLayerDefn, iBurnField)) == OFTInteger64) + { + const char *pszMD = GDALGetMetadataItem( + hDriver, GDAL_DMD_CREATIONDATATYPES, nullptr); + if (pszMD && CPLStringList(CSLTokenizeString2(pszMD, " ", 0)) + .FindString("Int64") >= 0) + { + eOutputType = GDT_Int64; + } + } + } + if (eOutputType == GDT_Unknown) + { + eOutputType = GDT_Float64; + } + return eOutputType; + }; + /* -------------------------------------------------------------------- */ /* Process SQL request. */ /* -------------------------------------------------------------------- */ @@ -809,25 +839,7 @@ GDALDatasetH GDALRasterize(const char *pszDest, GDALDatasetH hDstDS, std::vector ahLayers; ahLayers.push_back(hLayer); - GDALDataType eOutputType = psOptions->eOutputType; - if (eOutputType == GDT_Unknown && - psOptions->pszBurnAttribute != nullptr) - { - OGRFeatureDefnH hLayerDefn = OGR_L_GetLayerDefn(hLayer); - int iBurnField = OGR_FD_GetFieldIndex( - hLayerDefn, psOptions->pszBurnAttribute); - if (iBurnField >= 0 && - OGR_Fld_GetType(OGR_FD_GetFieldDefn( - hLayerDefn, iBurnField)) == OFTInteger64) - { - eOutputType = GDT_Int64; - } - } - if (eOutputType == GDT_Unknown) - { - eOutputType = GDT_Float64; - } - + const GDALDataType eOutputType = GetOutputDataType(hLayer); hDstDS = CreateOutputDataset( ahLayers, psOptions->hSRS, psOptions->sEnvelop, hDriver, pszDest, psOptions->nXSize, psOptions->nYSize, @@ -885,18 +897,10 @@ GDALDatasetH GDALRasterize(const char *pszDest, GDALDatasetH hDstDS, GDALRasterizeOptionsFree(psOptionsToFree); return nullptr; } - if (eOutputType == GDT_Unknown && - psOptions->pszBurnAttribute != nullptr) + if (eOutputType == GDT_Unknown) { - OGRFeatureDefnH hLayerDefn = OGR_L_GetLayerDefn(hLayer); - int iBurnField = OGR_FD_GetFieldIndex( - hLayerDefn, psOptions->pszBurnAttribute); - if (iBurnField >= 0 && - OGR_Fld_GetType(OGR_FD_GetFieldDefn( - hLayerDefn, iBurnField)) == OFTInteger64) - { + if (GetOutputDataType(hLayer) == GDT_Int64) eOutputType = GDT_Int64; - } } ahLayers.push_back(hLayer); diff --git a/doc/source/programs/gdal_rasterize.rst b/doc/source/programs/gdal_rasterize.rst index bb4f8e0568bc..4d0cf59c5b39 100644 --- a/doc/source/programs/gdal_rasterize.rst +++ b/doc/source/programs/gdal_rasterize.rst @@ -174,7 +174,7 @@ raster data is only supported since GDAL 2.1.0. Force the output bands to be of the indicated data type. Defaults to ``Float64``, unless the attribute field to burn is of type ``Int64``, in which case ``Int64`` - is used for the output raster data type. + is used for the output raster data type if the output driver supports it. .. option:: -optim {AUTO|VECTOR|RASTER} From cdc23b9aff4388ba6ab2163da2c2e447072dd451 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 1 Jul 2024 15:37:02 +0200 Subject: [PATCH 247/301] OpenFileGDB: fix attribute filter when an equality comparison is involved with a field with an index created with a LOWER(field_name) expression Fixes #10345 --- autotest/ogr/ogr_openfilegdb.py | 66 ++++++++++------ ogr/ogrsf_frmts/openfilegdb/filegdbindex.cpp | 75 +++++++++++++++---- ogr/ogrsf_frmts/openfilegdb/filegdbtable.h | 3 +- .../openfilegdb/ogropenfilegdblayer.cpp | 36 ++++++++- 4 files changed, 142 insertions(+), 38 deletions(-) diff --git a/autotest/ogr/ogr_openfilegdb.py b/autotest/ogr/ogr_openfilegdb.py index d61b3a3b4dd9..4b840cff019b 100755 --- a/autotest/ogr/ogr_openfilegdb.py +++ b/autotest/ogr/ogr_openfilegdb.py @@ -776,17 +776,13 @@ def test_ogr_openfilegdb_4(): ############################################################################### # Test use of attribute indexes on truncated strings +IDX_NOT_USED = 0 +IDX_USED = 1 -def test_ogr_openfilegdb_str_indexed_truncated(): - ds = ogr.Open("data/filegdb/test_str_indexed_truncated.gdb") - - lyr = ds.GetLayerByName("test") - - IDX_NOT_USED = 0 - IDX_USED = 1 - - tests = [ +@pytest.mark.parametrize( + "where_clause, fids, expected_attr_index_use", + [ ("str = 'a'", [1], IDX_USED), ("str = 'aa'", [2], IDX_USED), ("str != 'aa'", [1, 3], IDX_NOT_USED), @@ -809,19 +805,47 @@ def test_ogr_openfilegdb_str_indexed_truncated(): ("str IN ('aaa ')", [], IDX_USED), ("str IN ('aaaX')", [], IDX_USED), ("str IN ('aaaXX')", [], IDX_USED), - ] - for where_clause, fids, expected_attr_index_use in tests: + ("str ILIKE 'a'", [1], IDX_NOT_USED), + ("str ILIKE 'a%'", [1, 2, 3], IDX_NOT_USED), + ("str ILIKE 'aaa '", [], IDX_NOT_USED), + ], +) +def test_ogr_openfilegdb_str_indexed_truncated( + where_clause, fids, expected_attr_index_use +): - lyr.SetAttributeFilter(where_clause) - sql_lyr = ds.ExecuteSQL("GetLayerAttrIndexUse %s" % lyr.GetName()) - attr_index_use = int(sql_lyr.GetNextFeature().GetField(0)) - ds.ReleaseResultSet(sql_lyr) - assert attr_index_use == expected_attr_index_use, ( - where_clause, - fids, - expected_attr_index_use, - ) - assert [f.GetFID() for f in lyr] == fids, (where_clause, fids) + ds = ogr.Open("data/filegdb/test_str_indexed_truncated.gdb") + + lyr = ds.GetLayerByName("test") + + lyr.SetAttributeFilter(where_clause) + sql_lyr = ds.ExecuteSQL("GetLayerAttrIndexUse %s" % lyr.GetName()) + attr_index_use = int(sql_lyr.GetNextFeature().GetField(0)) + ds.ReleaseResultSet(sql_lyr) + assert attr_index_use == expected_attr_index_use, ( + where_clause, + fids, + expected_attr_index_use, + ) + assert [f.GetFID() for f in lyr] == fids, (where_clause, fids) + + +def test_ogr_openfilegdb_ilike(): + + ds = ogr.Open("data/filegdb/Domains.gdb/a00000001.gdbtable") + lyr = ds.GetLayer(0) + + lyr.SetAttributeFilter("Name = 'Roads'") + assert lyr.GetFeatureCount() == 1 + + lyr.SetAttributeFilter("Name ILIKE 'Roads'") + assert lyr.GetFeatureCount() == 1 + + lyr.SetAttributeFilter("Name = 'Roadsx'") + assert lyr.GetFeatureCount() == 0 + + lyr.SetAttributeFilter("Name ILIKE 'Roadsx'") + assert lyr.GetFeatureCount() == 0 ############################################################################### diff --git a/ogr/ogrsf_frmts/openfilegdb/filegdbindex.cpp b/ogr/ogrsf_frmts/openfilegdb/filegdbindex.cpp index 57ed2d7d0910..d90e5898f7e0 100644 --- a/ogr/ogrsf_frmts/openfilegdb/filegdbindex.cpp +++ b/ogr/ogrsf_frmts/openfilegdb/filegdbindex.cpp @@ -916,6 +916,8 @@ static const char *FileGDBSQLOpToStr(FileGDBSQLOp op) return ">="; case FGSO_GT: return ">"; + case FGSO_ILIKE: + return "ILIKE"; } return "unknown_op"; } @@ -1015,10 +1017,36 @@ int FileGDBIndexIterator::SetConstraint(int nFieldIdx, FileGDBSQLOp op, eFieldType != FGFT_TIME && eFieldType != FGFT_DATETIME_WITH_OFFSET); - const char *pszAtxName = CPLFormFilename( - CPLGetPath(poParent->GetFilename().c_str()), - CPLGetBasename(poParent->GetFilename().c_str()), - CPLSPrintf("%s.atx", poField->GetIndex()->GetIndexName().c_str())); + const auto poIndex = poField->GetIndex(); + + // Only supports ILIKE on a field string if the index expression starts + // with LOWER() and the string to compare with is only ASCII without + // wildcards + if (eOGRFieldType == OFTString && + STARTS_WITH_CI(poIndex->GetExpression().c_str(), "LOWER(")) + { + if (eOp == FGSO_ILIKE) + { + if (!CPLIsASCII(psValue->String, strlen(psValue->String)) || + strchr(psValue->String, '%') || strchr(psValue->String, '_')) + { + return FALSE; + } + } + else if (eOp != FGSO_ISNOTNULL) + { + return FALSE; + } + } + else if (eOp == FGSO_ILIKE) + { + return FALSE; + } + + const char *pszAtxName = + CPLFormFilename(CPLGetPath(poParent->GetFilename().c_str()), + CPLGetBasename(poParent->GetFilename().c_str()), + CPLSPrintf("%s.atx", poIndex->GetIndexName().c_str())); if (!ReadTrailer(pszAtxName)) return FALSE; @@ -1186,13 +1214,23 @@ int FileGDBIndexIterator::SetConstraint(int nFieldIdx, FileGDBSQLOp op, /************************************************************************/ static int FileGDBUTF16StrCompare(const GUInt16 *pasFirst, - const GUInt16 *pasSecond, int nStrLen) + const GUInt16 *pasSecond, int nStrLen, + bool bCaseInsensitive) { for (int i = 0; i < nStrLen; i++) { - if (pasFirst[i] < pasSecond[i]) + GUInt16 chA = pasFirst[i]; + GUInt16 chB = pasSecond[i]; + if (bCaseInsensitive) + { + if (chA >= 'a' && chA <= 'z') + chA -= 'a' - 'A'; + if (chB >= 'a' && chB <= 'z') + chB -= 'a' - 'A'; + } + if (chA < chB) return -1; - if (pasFirst[i] > pasSecond[i]) + if (chA > chB) return 1; } return 0; @@ -1337,12 +1375,17 @@ bool FileGDBIndexIterator::FindPages(int iLevel, int nPage) nStrLen * sizeof(GUInt16)); for (int j = 0; j < nStrLen; j++) CPL_LSBPTR16(&asMax[j]); + // Note: we have an inconsistency. OGR SQL equality operator + // is advertized top be case insensitive, but we have always + // implemented FGSO_EQ as case sensitive. #ifdef DEBUG_INDEX_CONSISTENCY - returnErrorIf(i > 0 && FileGDBUTF16StrCompare(pasMax, asLastMax, - nStrLen) < 0); + returnErrorIf(i > 0 && + FileGDBUTF16StrCompare(pasMax, asLastMax, nStrLen, + eOp == FGSO_ILIKE) < 0); memcpy(asLastMax, pasMax, nStrLen * 2); #endif - nComp = FileGDBUTF16StrCompare(asUTF16Str, pasMax, nStrLen); + nComp = FileGDBUTF16StrCompare(asUTF16Str, pasMax, nStrLen, + eOp == FGSO_ILIKE); break; } @@ -1392,6 +1435,7 @@ bool FileGDBIndexIterator::FindPages(int iLevel, int nPage) break; case FGSO_EQ: + case FGSO_ILIKE: if (iFirstPageIdx[iLevel] < 0) { if (nComp <= 0) @@ -1431,7 +1475,7 @@ bool FileGDBIndexIterator::FindPages(int iLevel, int nPage) } break; - default: + case FGSO_ISNOTNULL: CPLAssert(false); break; } @@ -1691,7 +1735,11 @@ int FileGDBIndexIterator::GetNextRow() nStrLen * 2); for (int j = 0; j < nStrLen; j++) CPL_LSBPTR16(&asVal[j]); - nComp = FileGDBUTF16StrCompare(asUTF16Str, asVal, nStrLen); + // Note: we have an inconsistency. OGR SQL equality operator + // is advertized top be case insensitive, but we have always + // implemented FGSO_EQ as case sensitive. + nComp = FileGDBUTF16StrCompare(asUTF16Str, asVal, nStrLen, + eOp == FGSO_ILIKE); break; } @@ -1743,6 +1791,7 @@ int FileGDBIndexIterator::GetNextRow() break; case FGSO_EQ: + case FGSO_ILIKE: if (nComp < 0 && bAscending) { bEOF = true; @@ -1759,7 +1808,7 @@ int FileGDBIndexIterator::GetNextRow() bMatch = nComp < 0; break; - default: + case FGSO_ISNOTNULL: CPLAssert(false); break; } diff --git a/ogr/ogrsf_frmts/openfilegdb/filegdbtable.h b/ogr/ogrsf_frmts/openfilegdb/filegdbtable.h index 11a27363b626..9f3cee9faa18 100644 --- a/ogr/ogrsf_frmts/openfilegdb/filegdbtable.h +++ b/ogr/ogrsf_frmts/openfilegdb/filegdbtable.h @@ -774,7 +774,8 @@ typedef enum FGSO_LE, FGSO_EQ, FGSO_GE, - FGSO_GT + FGSO_GT, + FGSO_ILIKE } FileGDBSQLOp; /************************************************************************/ diff --git a/ogr/ogrsf_frmts/openfilegdb/ogropenfilegdblayer.cpp b/ogr/ogrsf_frmts/openfilegdb/ogropenfilegdblayer.cpp index c98a978a49fa..1ded0d1eb206 100644 --- a/ogr/ogrsf_frmts/openfilegdb/ogropenfilegdblayer.cpp +++ b/ogr/ogrsf_frmts/openfilegdb/ogropenfilegdblayer.cpp @@ -1329,7 +1329,8 @@ OGROpenFileGDBLayer::BuildIteratorFromExprNode(swq_expr_node *poNode) } else if (poNode->eNodeType == SNT_OPERATION && - OGROpenFileGDBIsComparisonOp(poNode->nOperation) && + (OGROpenFileGDBIsComparisonOp(poNode->nOperation) || + poNode->nOperation == SWQ_ILIKE) && poNode->nSubExprCount == 2) { swq_expr_node *poColumn = GetColumnSubNode(poNode); @@ -1373,6 +1374,9 @@ OGROpenFileGDBLayer::BuildIteratorFromExprNode(swq_expr_node *poNode) case SWQ_GT: eOp = FGSO_GT; break; + case SWQ_ILIKE: + eOp = FGSO_ILIKE; + break; default: CPLAssert(false); break; @@ -1402,6 +1406,9 @@ OGROpenFileGDBLayer::BuildIteratorFromExprNode(swq_expr_node *poNode) case SWQ_GT: eOp = FGSO_LT; break; + case SWQ_ILIKE: + eOp = FGSO_ILIKE; + break; default: CPLAssert(false); break; @@ -1414,10 +1421,31 @@ OGROpenFileGDBLayer::BuildIteratorFromExprNode(swq_expr_node *poNode) if (poField->GetType() == FGFT_STRING && poFieldDefn->GetType() == OFTString) { + // If we have an equality comparison, but the index + // uses LOWER(), transform it to a ILIKE comparison + if (eOp == FGSO_EQ && poField->HasIndex() && + STARTS_WITH_CI( + poField->GetIndex()->GetExpression().c_str(), + "LOWER(")) + { + // Note: FileGDBIndexIterator::SetConstraint() + // checks that the string to compare with has no + // wildcard + eOp = FGSO_ILIKE; + + // In theory, a ILIKE is not sufficient as it is + // case insensitive, whereas one could expect + // equality testing to be case sensitive... but + // it is not in OGR SQL... + // So we can comment the below line + // bIteratorSufficient = false; + } + // As the index use ' ' as padding value, we cannot // fully trust the index. - if ((eOp == FGSO_EQ && poNode->nOperation != SWQ_NE) || - eOp == FGSO_GE) + else if ((eOp == FGSO_EQ && + poNode->nOperation != SWQ_NE) || + eOp == FGSO_GE) bIteratorSufficient = false; else return nullptr; @@ -1450,6 +1478,8 @@ OGROpenFileGDBLayer::BuildIteratorFromExprNode(swq_expr_node *poNode) } } } + else if (eOp == FGSO_ILIKE) + return nullptr; FileGDBIterator *poIter = FileGDBIterator::Build( m_poLyrTable, nTableColIdx, TRUE, eOp, From a50ca917070ce233b1f544f3e52d87a12e0a5c1b Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sun, 7 Jul 2024 09:59:59 +0200 Subject: [PATCH 248/301] test_gdalmdimtranslate_lib.py: try to fix failure --- autotest/utilities/test_gdalmdimtranslate_lib.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autotest/utilities/test_gdalmdimtranslate_lib.py b/autotest/utilities/test_gdalmdimtranslate_lib.py index 787fcfb7ea86..645480e4314d 100755 --- a/autotest/utilities/test_gdalmdimtranslate_lib.py +++ b/autotest/utilities/test_gdalmdimtranslate_lib.py @@ -115,6 +115,8 @@ def test_gdalmdimtranslate_classic_to_multidim(tmp_vsimem): tmpfile = tmp_vsimem / "out.vrt" tmpgtifffile = tmp_vsimem / "tmp.tif" + if gdal.VSIStatL("../gcore/data/byte.tif.aux.xml"): + gdal.Unlink("../gcore/data/byte.tif.aux.xml") ds = gdal.Translate(tmpgtifffile, "../gcore/data/byte.tif") ds.SetSpatialRef(None) ds = None From 42a8b4a6ef4a87052502a085b32be27a7fe0afa2 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 27 Jun 2024 12:22:59 +0200 Subject: [PATCH 249/301] PG: fix ogr2ogr scenarios to PostgreSQL when there are several input layer names like schema_name.layer_name (3.9.0 regression) Fixes #10311 --- autotest/ogr/ogr_pg.py | 35 ++++++++++++++++++++++++++ ogr/ogrsf_frmts/pg/ogrpgdatasource.cpp | 2 ++ 2 files changed, 37 insertions(+) diff --git a/autotest/ogr/ogr_pg.py b/autotest/ogr/ogr_pg.py index 37d03c4a95b0..b853827f6773 100755 --- a/autotest/ogr/ogr_pg.py +++ b/autotest/ogr/ogr_pg.py @@ -6067,3 +6067,38 @@ def test_ogr_pg_no_postgis_GEOMETRY_NAME(pg_ds): gdal.GetLastErrorMsg() == "GEOMETRY_NAME=foo ignored, and set instead to 'wkb_geometry' as it is the only geometry column name recognized for non-PostGIS enabled databases." ) + + +############################################################################### +# Test scenario of https://github.com/OSGeo/gdal/issues/10311 + + +@only_without_postgis +@gdaltest.enable_exceptions() +def test_ogr_pg_ogr2ogr_with_multiple_dotted_table_name(pg_ds): + + tmp_schema = "tmp_schema_issue_10311" + pg_ds.ExecuteSQL(f'CREATE SCHEMA "{tmp_schema}"') + try: + src_ds = gdal.GetDriverByName("Memory").Create("", 0, 0, 0, gdal.GDT_Unknown) + lyr = src_ds.CreateLayer(tmp_schema + ".table1", geom_type=ogr.wkbNone) + lyr.CreateField(ogr.FieldDefn("str")) + f = ogr.Feature(lyr.GetLayerDefn()) + f["str"] = "foo" + lyr.CreateFeature(f) + lyr = src_ds.CreateLayer(tmp_schema + ".table2", geom_type=ogr.wkbNone) + lyr.CreateField(ogr.FieldDefn("str")) + f = ogr.Feature(lyr.GetLayerDefn()) + f["str"] = "bar" + lyr.CreateFeature(f) + + gdal.VectorTranslate(pg_ds.GetDescription(), src_ds) + + pg_ds = reconnect(pg_ds) + lyr = pg_ds.GetLayerByName(tmp_schema + ".table1") + assert lyr.GetFeatureCount() == 1 + lyr = pg_ds.GetLayerByName(tmp_schema + ".table2") + assert lyr.GetFeatureCount() == 1 + + finally: + pg_ds.ExecuteSQL(f'DROP SCHEMA "{tmp_schema}" CASCADE') diff --git a/ogr/ogrsf_frmts/pg/ogrpgdatasource.cpp b/ogr/ogrsf_frmts/pg/ogrpgdatasource.cpp index f14a4278c755..36ca26450eec 100644 --- a/ogr/ogrsf_frmts/pg/ogrpgdatasource.cpp +++ b/ogr/ogrsf_frmts/pg/ogrpgdatasource.cpp @@ -2152,6 +2152,8 @@ OGRPGDataSource::FindSchema(const char *pszSchemaNameIn) return pszSchemaNameIn; } + EndCopy(); + std::string osSchemaName; std::string osCommand( "SELECT nspname FROM pg_catalog.pg_namespace WHERE nspname ILIKE "); From ba66a98aed29b98e9210d21b8d10753653ae32ca Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sat, 6 Jul 2024 11:33:11 +0200 Subject: [PATCH 250/301] gdal2tiles: fix exception with --nodata-values-pct-threshold but not --excluded-values on a multi-band raster Co-authored-by: James Scott-Brown / @jamesscottbrown --- autotest/pyscripts/test_gdal2tiles.py | 8 ++++---- .../python/gdal-utils/osgeo_utils/gdal2tiles.py | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/autotest/pyscripts/test_gdal2tiles.py b/autotest/pyscripts/test_gdal2tiles.py index a89e2ef4a952..b3da97a4de72 100755 --- a/autotest/pyscripts/test_gdal2tiles.py +++ b/autotest/pyscripts/test_gdal2tiles.py @@ -643,7 +643,7 @@ def test_gdal2tiles_nodata_values_pct_threshold(script_path, tmp_path): input_tif = str(tmp_path / "test_gdal2tiles_nodata_values_pct_threshold.tif") output_folder = str(tmp_path / "test_gdal2tiles_nodata_values_pct_threshold") - src_ds = gdal.GetDriverByName("GTiff").Create(input_tif, 256, 256, 1, gdal.GDT_Byte) + src_ds = gdal.GetDriverByName("GTiff").Create(input_tif, 256, 256, 3, gdal.GDT_Byte) src_ds.GetRasterBand(1).SetNoDataValue(20) src_ds.GetRasterBand(1).WriteRaster( 0, 0, 2, 2, struct.pack("B" * 4, 10, 20, 30, 40) @@ -665,7 +665,7 @@ def test_gdal2tiles_nodata_values_pct_threshold(script_path, tmp_path): ) ds = gdal.Open(f"{output_folder}/0/0/0.png") - assert struct.unpack("B" * 2, ds.ReadRaster(0, 0, 1, 1)) == ( + assert struct.unpack("B" * 2, ds.ReadRaster(0, 0, 1, 1, band_list=[1, 4])) == ( round((10 + 30 + 40) / 3), 255, ) @@ -677,7 +677,7 @@ def test_gdal2tiles_nodata_values_pct_threshold(script_path, tmp_path): ) ds = gdal.Open(f"{output_folder}/0/0/0.png") - assert struct.unpack("B" * 2, ds.ReadRaster(0, 0, 1, 1)) == ( + assert struct.unpack("B" * 2, ds.ReadRaster(0, 0, 1, 1, band_list=[1, 4])) == ( round((10 + 30 + 40) / 3), 255, ) @@ -689,7 +689,7 @@ def test_gdal2tiles_nodata_values_pct_threshold(script_path, tmp_path): ) ds = gdal.Open(f"{output_folder}/0/0/0.png") - assert struct.unpack("B" * 2, ds.ReadRaster(0, 0, 1, 1)) == (0, 0) + assert struct.unpack("B" * 2, ds.ReadRaster(0, 0, 1, 1, band_list=[1, 4])) == (0, 0) @pytest.mark.require_driver("JPEG") diff --git a/swig/python/gdal-utils/osgeo_utils/gdal2tiles.py b/swig/python/gdal-utils/osgeo_utils/gdal2tiles.py index 2b3cb201733c..1ed7c69a0469 100644 --- a/swig/python/gdal-utils/osgeo_utils/gdal2tiles.py +++ b/swig/python/gdal-utils/osgeo_utils/gdal2tiles.py @@ -895,13 +895,22 @@ def scale_query_to_tile(dsquery, dstile, options, tilefilename=""): options.excluded_values or options.nodata_values_pct_threshold < 100 ): + warp_options = "-r average" + + assert options.nodata_values_pct_threshold is not None + warp_options += ( + f" -wo NODATA_VALUES_PCT_THRESHOLD={options.nodata_values_pct_threshold}" + ) + + if options.excluded_values: + assert options.excluded_values_pct_threshold is not None + warp_options += f" -wo EXCLUDED_VALUES={options.excluded_values}" + warp_options += f" -wo EXCLUDED_VALUES_PCT_THRESHOLD={options.excluded_values_pct_threshold}" + gdal.Warp( dstile, dsquery, - options="-r average " - + f"-wo EXCLUDED_VALUES={options.excluded_values} " - + f"-wo EXCLUDED_VALUES_PCT_THRESHOLD={options.excluded_values_pct_threshold} " - + f"-wo NODATA_VALUES_PCT_THRESHOLD={options.nodata_values_pct_threshold}", + options=warp_options, ) elif options.resampling == "average": From 5729c5c7cb14512602becbab47393c0b6a615cf3 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sat, 6 Jul 2024 12:55:17 +0200 Subject: [PATCH 251/301] WKT geometry importer: accept (non conformant) PointZ/PointZM without space as generated by current QGIS versions Cf thread at https://lists.osgeo.org/pipermail/qgis-developer/2024-July/066906.html --- autotest/ogr/ogr_wkbwkt_geom.py | 33 +++++++++++ ogr/ogrgeometry.cpp | 99 +++++++++++++++++---------------- 2 files changed, 84 insertions(+), 48 deletions(-) diff --git a/autotest/ogr/ogr_wkbwkt_geom.py b/autotest/ogr/ogr_wkbwkt_geom.py index 6930da09fcfc..26fab54f5f97 100755 --- a/autotest/ogr/ogr_wkbwkt_geom.py +++ b/autotest/ogr/ogr_wkbwkt_geom.py @@ -166,6 +166,7 @@ def test_ogr_wkbwkt_test_broken_geom(): "POINT Z(EMPTY)", "POINT Z(A)", "POINT Z(0 1", + "POINTZ M EMPTY", "LINESTRING", "LINESTRING UNKNOWN", "LINESTRING(", @@ -568,6 +569,38 @@ def test_ogr_wkbwkt_test_import_wkt_sf12(): ) +############################################################################### +# Test importing non-conformant WKT with Z/M modifier directly appended to +# geometry type name + + +@pytest.mark.parametrize( + "input_wkt,expected_output_wkt", + [ + ("POINTZ EMPTY", "POINT Z EMPTY"), + ("POINTM EMPTY", "POINT M EMPTY"), + ("POINTZM EMPTY", "POINT ZM EMPTY"), + ("POINTZ (0 1 2)", "POINT Z (0 1 2)"), + ("POINTM (0 1 2)", "POINT M (0 1 2)"), + ("POINTZM (0 1 2 3)", "POINT ZM (0 1 2 3)"), + ], +) +def test_ogr_wkbwkt_test_import_wkt_z_m_modifier_without_space( + input_wkt, expected_output_wkt +): + + geom = ogr.CreateGeometryFromWkt(input_wkt) + assert geom is not None + out_wkt = geom.ExportToIsoWkt() + assert out_wkt == expected_output_wkt + + # Test with input in lower case + geom = ogr.CreateGeometryFromWkt(input_wkt.lower()) + assert geom is not None + out_wkt = geom.ExportToIsoWkt() + assert out_wkt == expected_output_wkt + + ############################################################################### # Test that importing the wkb that would be equivalent to MULTIPOINT(POLYGON((0 0)) # doesn't work diff --git a/ogr/ogrgeometry.cpp b/ogr/ogrgeometry.cpp index 8ac87d6cffae..65ca9bc23b9c 100644 --- a/ogr/ogrgeometry.cpp +++ b/ogr/ogrgeometry.cpp @@ -1791,19 +1791,33 @@ OGRErr OGRGeometry::importPreambleFromWkt(const char **ppszInput, int *pbHasZ, /* -------------------------------------------------------------------- */ bool bHasM = false; bool bHasZ = false; - bool bIsoWKT = true; + bool bAlreadyGotDimension = false; char szToken[OGR_WKT_TOKEN_MAX] = {}; pszInput = OGRWktReadToken(pszInput, szToken); if (szToken[0] != '\0') { // Postgis EWKT: POINTM instead of POINT M. + // Current QGIS versions (at least <= 3.38) also export POINTZ. const size_t nTokenLen = strlen(szToken); - if (szToken[nTokenLen - 1] == 'M') + if (szToken[nTokenLen - 1] == 'M' || szToken[nTokenLen - 1] == 'm') { szToken[nTokenLen - 1] = '\0'; bHasM = true; - bIsoWKT = false; + bAlreadyGotDimension = true; + + if (nTokenLen > 2 && (szToken[nTokenLen - 2] == 'Z' || + szToken[nTokenLen - 2] == 'z')) + { + bHasZ = true; + szToken[nTokenLen - 2] = '\0'; + } + } + else if (szToken[nTokenLen - 1] == 'Z' || szToken[nTokenLen - 1] == 'z') + { + szToken[nTokenLen - 1] = '\0'; + bHasZ = true; + bAlreadyGotDimension = true; } } @@ -1811,55 +1825,44 @@ OGRErr OGRGeometry::importPreambleFromWkt(const char **ppszInput, int *pbHasZ, return OGRERR_CORRUPT_DATA; /* -------------------------------------------------------------------- */ - /* Check for EMPTY ... */ + /* Check for Z, M or ZM */ /* -------------------------------------------------------------------- */ - const char *pszPreScan = OGRWktReadToken(pszInput, szToken); - if (!bIsoWKT) - { - // Go on. - } - else if (EQUAL(szToken, "EMPTY")) - { - *ppszInput = const_cast(pszPreScan); - *pbIsEmpty = true; - *pbHasM = bHasM; - empty(); - return OGRERR_NONE; - } - /* -------------------------------------------------------------------- */ - /* Check for Z, M or ZM. Will ignore the Measure */ - /* -------------------------------------------------------------------- */ - else if (EQUAL(szToken, "Z")) - { - bHasZ = true; - } - else if (EQUAL(szToken, "M")) - { - bHasM = true; - } - else if (EQUAL(szToken, "ZM")) + if (!bAlreadyGotDimension) { - bHasZ = true; - bHasM = true; + const char *pszNewInput = OGRWktReadToken(pszInput, szToken); + if (EQUAL(szToken, "Z")) + { + pszInput = pszNewInput; + bHasZ = true; + } + else if (EQUAL(szToken, "M")) + { + pszInput = pszNewInput; + bHasM = true; + } + else if (EQUAL(szToken, "ZM")) + { + pszInput = pszNewInput; + bHasZ = true; + bHasM = true; + } } *pbHasZ = bHasZ; *pbHasM = bHasM; - if (bIsoWKT && (bHasZ || bHasM)) + /* -------------------------------------------------------------------- */ + /* Check for EMPTY ... */ + /* -------------------------------------------------------------------- */ + const char *pszNewInput = OGRWktReadToken(pszInput, szToken); + if (EQUAL(szToken, "EMPTY")) { - pszInput = pszPreScan; - pszPreScan = OGRWktReadToken(pszInput, szToken); - if (EQUAL(szToken, "EMPTY")) - { - *ppszInput = pszPreScan; - empty(); - if (bHasZ) - set3D(TRUE); - if (bHasM) - setMeasured(TRUE); - *pbIsEmpty = true; - return OGRERR_NONE; - } + *ppszInput = pszNewInput; + *pbIsEmpty = true; + if (bHasZ) + set3D(TRUE); + if (bHasM) + setMeasured(TRUE); + return OGRERR_NONE; } if (!EQUAL(szToken, "(")) @@ -1868,10 +1871,10 @@ OGRErr OGRGeometry::importPreambleFromWkt(const char **ppszInput, int *pbHasZ, if (!bHasZ && !bHasM) { // Test for old-style XXXXXXXXX(EMPTY). - pszPreScan = OGRWktReadToken(pszPreScan, szToken); + pszNewInput = OGRWktReadToken(pszNewInput, szToken); if (EQUAL(szToken, "EMPTY")) { - pszPreScan = OGRWktReadToken(pszPreScan, szToken); + pszNewInput = OGRWktReadToken(pszNewInput, szToken); if (EQUAL(szToken, ",")) { @@ -1883,7 +1886,7 @@ OGRErr OGRGeometry::importPreambleFromWkt(const char **ppszInput, int *pbHasZ, } else { - *ppszInput = pszPreScan; + *ppszInput = pszNewInput; empty(); *pbIsEmpty = true; return OGRERR_NONE; From 06fbaed5201eecd62f266ab48f0dfcbf66d3a244 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sat, 6 Jul 2024 13:06:22 +0200 Subject: [PATCH 252/301] Modernize test_ogr_wkbwkt_test_import_wkt_sf12() --- autotest/ogr/ogr_wkbwkt_geom.py | 136 +++++++++++++++++--------------- 1 file changed, 71 insertions(+), 65 deletions(-) diff --git a/autotest/ogr/ogr_wkbwkt_geom.py b/autotest/ogr/ogr_wkbwkt_geom.py index 26fab54f5f97..aec4dcc5001a 100755 --- a/autotest/ogr/ogr_wkbwkt_geom.py +++ b/autotest/ogr/ogr_wkbwkt_geom.py @@ -373,76 +373,79 @@ def test_ogr_wkbwkt_test_broken_geom(): # Test importing WKT SF1.2 -def test_ogr_wkbwkt_test_import_wkt_sf12(): - - list_wkt_tuples = [ +@pytest.mark.parametrize( + "input_wkt,expected_output_wkt", + [ ("POINT EMPTY", "POINT EMPTY"), - ("POINT Z EMPTY", "POINT EMPTY"), - ("POINT M EMPTY", "POINT EMPTY"), - ("POINT ZM EMPTY", "POINT EMPTY"), + ("POINT Z EMPTY", "POINT Z EMPTY"), + ("POINT M EMPTY", "POINT M EMPTY"), + ("POINT ZM EMPTY", "POINT ZM EMPTY"), ("POINT (0 1)", "POINT (0 1)"), - ("POINT Z (0 1 2)", "POINT (0 1 2)"), - ("POINT M (0 1 2)", "POINT (0 1)"), - ("POINT ZM (0 1 2 3)", "POINT (0 1 2)"), + ("POINT Z (0 1 2)", "POINT Z (0 1 2)"), + ("POINT M (0 1 2)", "POINT M (0 1 2)"), + ("POINT ZM (0 1 2 3)", "POINT ZM (0 1 2 3)"), ("LINESTRING EMPTY", "LINESTRING EMPTY"), - ("LINESTRING Z EMPTY", "LINESTRING EMPTY"), - ("LINESTRING M EMPTY", "LINESTRING EMPTY"), - ("LINESTRING ZM EMPTY", "LINESTRING EMPTY"), + ("LINESTRING Z EMPTY", "LINESTRING Z EMPTY"), + ("LINESTRING M EMPTY", "LINESTRING M EMPTY"), + ("LINESTRING ZM EMPTY", "LINESTRING ZM EMPTY"), ("LINESTRING (0 1,2 3)", "LINESTRING (0 1,2 3)"), - ("LINESTRING Z (0 1 2,3 4 5)", "LINESTRING (0 1 2,3 4 5)"), - ("LINESTRING M (0 1 2,3 4 5)", "LINESTRING (0 1,3 4)"), - ("LINESTRING ZM (0 1 2 3,4 5 6 7)", "LINESTRING (0 1 2,4 5 6)"), + ("LINESTRING Z (0 1 2,3 4 5)", "LINESTRING Z (0 1 2,3 4 5)"), + ("LINESTRING M (0 1 2,3 4 5)", "LINESTRING M (0 1 2,3 4 5)"), + ("LINESTRING ZM (0 1 2 3,4 5 6 7)", "LINESTRING ZM (0 1 2 3,4 5 6 7)"), ("POLYGON EMPTY", "POLYGON EMPTY"), ("POLYGON (EMPTY)", "POLYGON EMPTY"), - ("POLYGON Z EMPTY", "POLYGON EMPTY"), - ("POLYGON Z (EMPTY)", "POLYGON EMPTY"), - ("POLYGON M EMPTY", "POLYGON EMPTY"), - ("POLYGON ZM EMPTY", "POLYGON EMPTY"), + ("POLYGON Z EMPTY", "POLYGON Z EMPTY"), + ("POLYGON Z (EMPTY)", "POLYGON Z EMPTY"), + ("POLYGON M EMPTY", "POLYGON M EMPTY"), + ("POLYGON ZM EMPTY", "POLYGON ZM EMPTY"), ("POLYGON ((0 1,2 3,4 5,0 1))", "POLYGON ((0 1,2 3,4 5,0 1))"), ("POLYGON ((0 1,2 3,4 5,0 1),EMPTY)", "POLYGON ((0 1,2 3,4 5,0 1))"), ("POLYGON (EMPTY,(0 1,2 3,4 5,0 1))", "POLYGON EMPTY"), ("POLYGON (EMPTY,(0 1,2 3,4 5,0 1),EMPTY)", "POLYGON EMPTY"), ( "POLYGON Z ((0 1 10,2 3 20,4 5 30,0 1 10),(0 1 10,2 3 20,4 5 30,0 1 10))", - "POLYGON ((0 1 10,2 3 20,4 5 30,0 1 10),(0 1 10,2 3 20,4 5 30,0 1 10))", + "POLYGON Z ((0 1 10,2 3 20,4 5 30,0 1 10),(0 1 10,2 3 20,4 5 30,0 1 10))", + ), + ( + "POLYGON M ((0 1 10,2 3 20,4 5 30,0 1 10))", + "POLYGON M ((0 1 10,2 3 20,4 5 30,0 1 10))", ), - ("POLYGON M ((0 1 10,2 3 20,4 5 30,0 1 10))", "POLYGON ((0 1,2 3,4 5,0 1))"), ( "POLYGON ZM ((0 1 10 100,2 3 20 200,4 5 30 300,0 1 10 10))", - "POLYGON ((0 1 10,2 3 20,4 5 30,0 1 10))", + "POLYGON ZM ((0 1 10 100,2 3 20 200,4 5 30 300,0 1 10 10))", ), ("MULTIPOINT EMPTY", "MULTIPOINT EMPTY"), ("MULTIPOINT (EMPTY)", "MULTIPOINT EMPTY"), - ("MULTIPOINT Z EMPTY", "MULTIPOINT EMPTY"), - ("MULTIPOINT Z (EMPTY)", "MULTIPOINT EMPTY"), - ("MULTIPOINT M EMPTY", "MULTIPOINT EMPTY"), - ("MULTIPOINT ZM EMPTY", "MULTIPOINT EMPTY"), + ("MULTIPOINT Z EMPTY", "MULTIPOINT Z EMPTY"), + ("MULTIPOINT Z (EMPTY)", "MULTIPOINT Z EMPTY"), + ("MULTIPOINT M EMPTY", "MULTIPOINT M EMPTY"), + ("MULTIPOINT ZM EMPTY", "MULTIPOINT ZM EMPTY"), ( "MULTIPOINT (0 1,2 3)", - "MULTIPOINT (0 1,2 3)", + "MULTIPOINT ((0 1),(2 3))", ), # Not SF1.2 compliant but recognized - ("MULTIPOINT ((0 1),(2 3))", "MULTIPOINT (0 1,2 3)"), + ("MULTIPOINT ((0 1),(2 3))", "MULTIPOINT ((0 1),(2 3))"), ( "MULTIPOINT ((0 1),EMPTY)", - "MULTIPOINT (0 1)", + "MULTIPOINT ((0 1))", ), # We don't output empty points in multipoint ( "MULTIPOINT (EMPTY,(0 1))", - "MULTIPOINT (0 1)", + "MULTIPOINT ((0 1))", ), # We don't output empty points in multipoint ( "MULTIPOINT (EMPTY,(0 1),EMPTY)", - "MULTIPOINT (0 1)", + "MULTIPOINT ((0 1))", ), # We don't output empty points in multipoint - ("MULTIPOINT Z ((0 1 2),(3 4 5))", "MULTIPOINT (0 1 2,3 4 5)"), - ("MULTIPOINT M ((0 1 2),(3 4 5))", "MULTIPOINT (0 1,3 4)"), - ("MULTIPOINT ZM ((0 1 2 3),(4 5 6 7))", "MULTIPOINT (0 1 2,4 5 6)"), + ("MULTIPOINT Z ((0 1 2),(3 4 5))", "MULTIPOINT Z ((0 1 2),(3 4 5))"), + ("MULTIPOINT M ((0 1 2),(3 4 5))", "MULTIPOINT M ((0 1 2),(3 4 5))"), + ("MULTIPOINT ZM ((0 1 2 3),(4 5 6 7))", "MULTIPOINT ZM ((0 1 2 3),(4 5 6 7))"), ("MULTILINESTRING EMPTY", "MULTILINESTRING EMPTY"), ("MULTILINESTRING (EMPTY)", "MULTILINESTRING EMPTY"), - ("MULTILINESTRING Z EMPTY", "MULTILINESTRING EMPTY"), - ("MULTILINESTRING Z (EMPTY)", "MULTILINESTRING EMPTY"), - ("MULTILINESTRING M EMPTY", "MULTILINESTRING EMPTY"), - ("MULTILINESTRING ZM EMPTY", "MULTILINESTRING EMPTY"), + ("MULTILINESTRING Z EMPTY", "MULTILINESTRING Z EMPTY"), + ("MULTILINESTRING Z (EMPTY)", "MULTILINESTRING Z EMPTY"), + ("MULTILINESTRING M EMPTY", "MULTILINESTRING M EMPTY"), + ("MULTILINESTRING ZM EMPTY", "MULTILINESTRING ZM EMPTY"), ("MULTILINESTRING ((0 1,2 3,4 5,0 1))", "MULTILINESTRING ((0 1,2 3,4 5,0 1))"), ( "MULTILINESTRING ((0 1,2 3,4 5,0 1),EMPTY)", @@ -458,22 +461,22 @@ def test_ogr_wkbwkt_test_import_wkt_sf12(): ), ( "MULTILINESTRING Z ((0 1 10,2 3 20,4 5 30,0 1 10),(0 1 10,2 3 20,4 5 30,0 1 10))", - "MULTILINESTRING ((0 1 10,2 3 20,4 5 30,0 1 10),(0 1 10,2 3 20,4 5 30,0 1 10))", + "MULTILINESTRING Z ((0 1 10,2 3 20,4 5 30,0 1 10),(0 1 10,2 3 20,4 5 30,0 1 10))", ), ( "MULTILINESTRING M ((0 1 10,2 3 20,4 5 30,0 1 10))", - "MULTILINESTRING ((0 1,2 3,4 5,0 1))", + "MULTILINESTRING M ((0 1 10,2 3 20,4 5 30,0 1 10))", ), ( "MULTILINESTRING ZM ((0 1 10 100,2 3 20 200,4 5 30 300,0 1 10 10))", - "MULTILINESTRING ((0 1 10,2 3 20,4 5 30,0 1 10))", + "MULTILINESTRING ZM ((0 1 10 100,2 3 20 200,4 5 30 300,0 1 10 10))", ), ("MULTIPOLYGON EMPTY", "MULTIPOLYGON EMPTY"), ("MULTIPOLYGON (EMPTY)", "MULTIPOLYGON EMPTY"), - ("MULTIPOLYGON Z EMPTY", "MULTIPOLYGON EMPTY"), - ("MULTIPOLYGON Z (EMPTY)", "MULTIPOLYGON EMPTY"), - ("MULTIPOLYGON M EMPTY", "MULTIPOLYGON EMPTY"), - ("MULTIPOLYGON ZM EMPTY", "MULTIPOLYGON EMPTY"), + ("MULTIPOLYGON Z EMPTY", "MULTIPOLYGON Z EMPTY"), + ("MULTIPOLYGON Z (EMPTY)", "MULTIPOLYGON Z EMPTY"), + ("MULTIPOLYGON M EMPTY", "MULTIPOLYGON M EMPTY"), + ("MULTIPOLYGON ZM EMPTY", "MULTIPOLYGON ZM EMPTY"), ("MULTIPOLYGON ((EMPTY))", "MULTIPOLYGON EMPTY"), ("MULTIPOLYGON (((0 1,2 3,4 5,0 1)))", "MULTIPOLYGON (((0 1,2 3,4 5,0 1)))"), ( @@ -511,31 +514,31 @@ def test_ogr_wkbwkt_test_import_wkt_sf12(): ), ( "MULTIPOLYGON Z (((0 1 10,2 3 20,4 5 30,0 1 10)),((0 1 10,2 3 20,4 5 30,0 1 10)))", - "MULTIPOLYGON (((0 1 10,2 3 20,4 5 30,0 1 10)),((0 1 10,2 3 20,4 5 30,0 1 10)))", + "MULTIPOLYGON Z (((0 1 10,2 3 20,4 5 30,0 1 10)),((0 1 10,2 3 20,4 5 30,0 1 10)))", ), ( "MULTIPOLYGON M (((0 1 10,2 3 20,4 5 30,0 1 10)))", - "MULTIPOLYGON (((0 1,2 3,4 5,0 1)))", + "MULTIPOLYGON M (((0 1 10,2 3 20,4 5 30,0 1 10)))", ), ( "MULTIPOLYGON ZM (((0 1 10 100,2 3 20 200,4 5 30 300,0 1 10 10)))", - "MULTIPOLYGON (((0 1 10,2 3 20,4 5 30,0 1 10)))", + "MULTIPOLYGON ZM (((0 1 10 100,2 3 20 200,4 5 30 300,0 1 10 10)))", ), ("GEOMETRYCOLLECTION EMPTY", "GEOMETRYCOLLECTION EMPTY"), - ("GEOMETRYCOLLECTION Z EMPTY", "GEOMETRYCOLLECTION EMPTY"), - ("GEOMETRYCOLLECTION M EMPTY", "GEOMETRYCOLLECTION EMPTY"), - ("GEOMETRYCOLLECTION ZM EMPTY", "GEOMETRYCOLLECTION EMPTY"), + ("GEOMETRYCOLLECTION Z EMPTY", "GEOMETRYCOLLECTION Z EMPTY"), + ("GEOMETRYCOLLECTION M EMPTY", "GEOMETRYCOLLECTION M EMPTY"), + ("GEOMETRYCOLLECTION ZM EMPTY", "GEOMETRYCOLLECTION ZM EMPTY"), ( "GEOMETRYCOLLECTION Z (POINT Z (0 1 2),LINESTRING Z (0 1 2,3 4 5))", - "GEOMETRYCOLLECTION (POINT (0 1 2),LINESTRING (0 1 2,3 4 5))", + "GEOMETRYCOLLECTION Z (POINT Z (0 1 2),LINESTRING Z (0 1 2,3 4 5))", ), ( "GEOMETRYCOLLECTION M (POINT M (0 1 2),LINESTRING M (0 1 2,3 4 5))", - "GEOMETRYCOLLECTION (POINT (0 1),LINESTRING (0 1,3 4))", + "GEOMETRYCOLLECTION M (POINT M (0 1 2),LINESTRING M (0 1 2,3 4 5))", ), ( "GEOMETRYCOLLECTION ZM (POINT ZM (0 1 2 10),LINESTRING ZM (0 1 2 10,3 4 5 20))", - "GEOMETRYCOLLECTION (POINT (0 1 2),LINESTRING (0 1 2,3 4 5))", + "GEOMETRYCOLLECTION ZM (POINT ZM (0 1 2 10),LINESTRING ZM (0 1 2 10,3 4 5 20))", ), ( "GEOMETRYCOLLECTION (POINT EMPTY,LINESTRING EMPTY,POLYGON EMPTY,MULTIPOINT EMPTY,MULTILINESTRING EMPTY,MULTIPOLYGON EMPTY,GEOMETRYCOLLECTION EMPTY)", @@ -543,7 +546,7 @@ def test_ogr_wkbwkt_test_import_wkt_sf12(): ), ( "GEOMETRYCOLLECTION (POINT Z EMPTY,LINESTRING Z EMPTY,POLYGON Z EMPTY,MULTIPOINT Z EMPTY,MULTILINESTRING Z EMPTY,MULTIPOLYGON Z EMPTY,GEOMETRYCOLLECTION Z EMPTY)", - "GEOMETRYCOLLECTION (POINT EMPTY,LINESTRING EMPTY,POLYGON EMPTY,MULTIPOINT EMPTY,MULTILINESTRING EMPTY,MULTIPOLYGON EMPTY,GEOMETRYCOLLECTION EMPTY)", + "GEOMETRYCOLLECTION Z (POINT Z EMPTY,LINESTRING Z EMPTY,POLYGON Z EMPTY,MULTIPOINT Z EMPTY,MULTILINESTRING Z EMPTY,MULTIPOLYGON Z EMPTY,GEOMETRYCOLLECTION Z EMPTY)", ), # Not SF1.2 compliant but recognized ( @@ -556,17 +559,20 @@ def test_ogr_wkbwkt_test_import_wkt_sf12(): ("MULTICURVE (EMPTY)", "MULTICURVE EMPTY"), ("MULTISURFACE EMPTY", "MULTISURFACE EMPTY"), ("MULTISURFACE (EMPTY)", "MULTISURFACE EMPTY"), - ] + ], +) +def test_ogr_wkbwkt_test_import_wkt_sf12(input_wkt, expected_output_wkt): - for wkt_tuple in list_wkt_tuples: - geom = ogr.CreateGeometryFromWkt(wkt_tuple[0]) - assert geom is not None, "could not instantiate geometry %s" % wkt_tuple[0] - out_wkt = geom.ExportToWkt() - assert out_wkt == wkt_tuple[1], "in=%s, out=%s, expected=%s." % ( - wkt_tuple[0], - out_wkt, - wkt_tuple[1], - ) + geom = ogr.CreateGeometryFromWkt(input_wkt) + assert geom is not None + out_wkt = geom.ExportToIsoWkt() + assert out_wkt == expected_output_wkt + + # Test with input in lower case + geom = ogr.CreateGeometryFromWkt(input_wkt.lower()) + assert geom is not None + out_wkt = geom.ExportToIsoWkt() + assert out_wkt == expected_output_wkt ############################################################################### From 2ea39363fb44d1750e95db276ac52254af811ac0 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 8 Jul 2024 19:56:16 +0200 Subject: [PATCH 253/301] gdalinfo_output.schema.json: pin stac-extensions/eo to v1.1.0 Breaking changes in stac-extensions/eo (for v2.0 presumably) have landed today per https://github.com/stac-extensions/eo/commit/81bb3b13dfed92e1a2d8776b2c9fe5f23e28a3ec --- apps/data/gdalinfo_output.schema.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/data/gdalinfo_output.schema.json b/apps/data/gdalinfo_output.schema.json index 166a490d9e26..a4c50c780e66 100644 --- a/apps/data/gdalinfo_output.schema.json +++ b/apps/data/gdalinfo_output.schema.json @@ -277,7 +277,7 @@ }, "stac": { - "$comment": "Derived from https://raw.githubusercontent.com/stac-extensions/projection/main/json-schema/schema.json#/definitions/fields, https://raw.githubusercontent.com/stac-extensions/eo/main/json-schema/schema.json#/definitions/bands and https://raw.githubusercontent.com/stac-extensions/eo/main/json-schema/schema.json#/definitions/bands", + "$comment": "Derived from https://raw.githubusercontent.com/stac-extensions/projection/main/json-schema/schema.json#/definitions/fields, https://raw.githubusercontent.com/stac-extensions/eo/v1.1.0/json-schema/schema.json#/definitions/bands and https://raw.githubusercontent.com/stac-extensions/eo/v1.1.0/json-schema/schema.json#/definitions/bands", "type": "object", "properties": { "proj:epsg": { @@ -334,10 +334,10 @@ } }, "eo:bands": { - "$ref": "https://raw.githubusercontent.com/stac-extensions/eo/main/json-schema/schema.json#/definitions/bands" + "$ref": "https://raw.githubusercontent.com/stac-extensions/eo/v1.1.0/json-schema/schema.json#/definitions/bands" }, "raster:bands": { - "$ref": "https://raw.githubusercontent.com/stac-extensions/eo/main/json-schema/schema.json#/definitions/bands" + "$ref": "https://raw.githubusercontent.com/stac-extensions/eo/v1.1.0/json-schema/schema.json#/definitions/bands" } }, "additionalProperties": false From 37f64543e159f9be3aefe00187e91affbf9ef693 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 12 Jul 2024 21:19:12 +0200 Subject: [PATCH 254/301] OGCAPI: do not emit 'Server does not support specified IMAGE_FORMAT: AUTO' when opening a vector layer with MVT tiles only Avoids error message on ```ogrinfo OGCAPI:https://demo.ldproxy.net/daraa/collections/AeronauticCrv``` --- frmts/ogcapi/gdalogcapidataset.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/frmts/ogcapi/gdalogcapidataset.cpp b/frmts/ogcapi/gdalogcapidataset.cpp index c6c489af99db..0b5bd35aaef2 100644 --- a/frmts/ogcapi/gdalogcapidataset.cpp +++ b/frmts/ogcapi/gdalogcapidataset.cpp @@ -1156,9 +1156,12 @@ SelectImageURL(const char *const *papszOptionOptions, } } - CPLError(CE_Failure, CPLE_AppDefined, - "Server does not support specified IMAGE_FORMAT: %s", - osFormat.c_str()); + if (osFormat != "AUTO") + { + CPLError(CE_Failure, CPLE_AppDefined, + "Server does not support specified IMAGE_FORMAT: %s", + osFormat.c_str()); + } return std::pair(); } From 78a4f3ffb878d0a5f16a2423e3c8c19eb8525748 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 12 Jul 2024 20:25:39 +0200 Subject: [PATCH 255/301] OGCAPI: fix reading encodingInfo/dataType for Coverage API --- .../data/ogcapi/expected_COVERAGE.tif | Bin 0 -> 40492 bytes .../gdrivers/data/ogcapi/expected_MAP.tif | Bin 0 -> 40516 bytes .../gdrivers/data/ogcapi/expected_TILES.tif | Bin 0 -> 40524 bytes .../expected_map_lough_corrib_COVERAGE.png | Bin 2943 -> 0 bytes .../ogcapi/expected_map_lough_corrib_MAP.png | Bin 1239 -> 0 bytes .../expected_map_lough_corrib_TILES.png | Bin 951 -> 0 bytes ..._-9.5433_53.0905_-8.8722_53.7616.http_data | Bin 0 -> 3931 bytes ..._-9.5446_52.4188_-8.2024_53.7610.http_data | Bin 2734 -> 0 bytes ...658__scaleSize_Lon_256__Lat_256_.http_data | Bin 0 -> 188768 bytes ...689__scaleSize_Lon_256__Lat_256_.http_data | Bin 154478 -> 0 bytes ...658__scaleSize_Lon_256__Lat_256_.http_data | Bin 0 -> 188336 bytes autotest/gdrivers/ogcapi.py | 8 +++---- frmts/ogcapi/gdalogcapidataset.cpp | 20 ++++++++++++------ 13 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 autotest/gdrivers/data/ogcapi/expected_COVERAGE.tif create mode 100644 autotest/gdrivers/data/ogcapi/expected_MAP.tif create mode 100644 autotest/gdrivers/data/ogcapi/expected_TILES.tif delete mode 100644 autotest/gdrivers/data/ogcapi/expected_map_lough_corrib_COVERAGE.png delete mode 100644 autotest/gdrivers/data/ogcapi/expected_map_lough_corrib_MAP.png delete mode 100644 autotest/gdrivers/data/ogcapi/expected_map_lough_corrib_TILES.png create mode 100644 autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_map.png_width_256_height_256_bbox_-9.5433_53.0905_-8.8722_53.7616.http_data delete mode 100644 autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_map.png_width_256_height_256_bbox_-9.5446_52.4188_-8.2024_53.7610.http_data create mode 100644 autotest/gdrivers/data/ogcapi/request_collections_SRTM_ViewFinderPanorama_coverage_f_tif_subset_Lon_-9.1406_-8.4375__Lat_53.0627_53.7658__scaleSize_Lon_256__Lat_256_.http_data delete mode 100644 autotest/gdrivers/data/ogcapi/request_collections_SRTM_ViewFinderPanorama_coverage_f_tif_subset_Lon_-9.8437_-8.4375__Lat_53.0627_54.4689__scaleSize_Lon_256__Lat_256_.http_data create mode 100644 autotest/gdrivers/data/ogcapi/request_collections_SRTM_ViewFinderPanorama_coverage_f_tif_subset_Lon_-9.8437_-9.1406__Lat_53.0627_53.7658__scaleSize_Lon_256__Lat_256_.http_data diff --git a/autotest/gdrivers/data/ogcapi/expected_COVERAGE.tif b/autotest/gdrivers/data/ogcapi/expected_COVERAGE.tif new file mode 100644 index 0000000000000000000000000000000000000000..caa0445bdd39ab4a3dcc38a3769cdc82417fee78 GIT binary patch literal 40492 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 x`E_QVVup_W(Bcnq}|*Cky=>s zAf5_Bj-@BT7Cajd_9Xrb-t0-dc<~^_`EK{2&I_{gX7asp|#!T4ys;ytUK4YeAebd%|Xiu0~ zTmRnHZ?|U*?)%f$@3gC(H~H7rzqna7@7wmnwvM0a?(gCY@;hm7JM*G3*B6cXWyP4u zE&JBp-}$p=PM^8fdnUyuC$$J|d>YcKy@|Mc$btF_LQdi}Z9T0j5vv7g^O zb^Pm(@4jnic>f3UGvcqS_VzXpYCs#<=Qgmhu~A!ETH5jtv@-^zi-FMp ziFdYkk6zl@eg50sJqOxPy!Xitxuju29%*#;V~ih%;1f8qd?Kq2een$cxjfJ2>BfJ= z7tveFER93k5W5(+^7VIh&x`+|niuuQnDmJUOkkhTB$fU?ANt6B7G-mAxjf81QndbY zbxKu#*nGsz%^_=`R6H;ad}Kf8c8N#OzpUI4!V`1cuW<`3#({y)Yrn>=QH@Ey{#oav z>Lal6125G&dtT_Pjjec}toIz3HoWVo?nhj0Q7>ZR_8%Ah{dtaZ%);7K=3A8S+`e+p zxR#^*xt5y?@@!{Z^LL)Tj4}`3?tMQ&j6z%9yNzS}DCZE^ewOB#b5{E}>hI5)JobK% z=WCSme3W^}+7Et$*oC?Ficb>H(6`qC-@>zso|lq?jD>e7T1$#9WtY%6FHS*QT+_UZ z@RjG`UeTlM5_2hA=g{#*Ps|+$bPaum-(T4D^1l?U#*v4wyh@&K2z{DeHRd4LIWif_NM&&ea7hcL-o)5Tyz9=&<^IVE$2JtKQJB|DECAY`k zyMqT~mfjyza6x=ze%CXBugB&BKct_8F%d2?^ZjefR9wWIXrF)O) ztu4tVpGQ_M60O}btDm%?UmnL^jKBr=;eL4*%P>~G^co~TxqioZHasTa1wH%m7x5+d zO)u`e7S0PXNc0UYx!(-eTVtdB_z3RNJez&OnT7fY;uLd7xXxPJgtpLF8?Wda@mPQv zdBoLM>lbc6{ND;1|A23B9}<@z)=3%`=tCZ(!vZ|$8}WFA_=WfndBo!py3XagDjo~T z<l7GqU>9wB=V@`%p^aZBSP{EQ?G3-Hk9b^1p-CYrnsKazC-%eZVb zd4w@5E(6!bH93U)^E5m(z9D-P#5LxTxLmZp;WBZ3i}m600gI6DqQHcCWO(}fwoD%J zwDq+vIuDIg60hhZ!)3Vn-H$c=8w6M1e(L;uakyMU^F|i4A|K>+Ju}UoJd1(bM!ofV z7ip#a+{)G8uNRHM>v~=x`#_(AoKtVT-Wsh2S!02TW(@YxGaJ-LsI^{etyY8Nb?q4J zr{^|EUZ>7_okO(hH;;sj!M=KS{pJyBtk*bHtI*FDvA+);gZ=gVkVistJ3qhDYum3K zB5rB?gx`V0XW=pgmn>fa2ejk5+n@C`d?bc}0sMv>(&(ON-{euQ{&`&3PA;?o+5l~U UHb5Jo4bTQ?1GE9!K-o6%ALsU&Bme*a literal 0 HcmV?d00001 diff --git a/autotest/gdrivers/data/ogcapi/expected_TILES.tif b/autotest/gdrivers/data/ogcapi/expected_TILES.tif new file mode 100644 index 0000000000000000000000000000000000000000..eb0feb6cdc16331aa7af415a681086f039613a09 GIT binary patch literal 40524 zcmeI4&2Jk;7{35oVE2q#YE-^dAZ=71FDjr~)n+x0r}uDxUDi8X!So$q;`_hToHy0GxN zn{>`S?ObKtRlK(5OC`|9yne#h?fEj^uD5;@ZGFt^PgPF1$GrU4muK4bHs)+wKjZah zy>5N}@#Xn;z0Gs2t=l}yUbk^o-|*x&RX6VSHLrjDZPiV9{kGSCZ;rc~*MIZ+-DcI< zxWB!AuQ}$Xy#Alpzq&K#KJxk*uiMXL`!oL%pQ<0W__A}~&pUU2)vvhiPu>2^Tz%)t z;)jjR`dWRnK6|QGn_1Xwtk-VV*Bh75tt_l8zI$%=W@GiOH`iBh)IV?BT5W7?eDP&t z=7M#bJvDRT;qmUT`}T8dt|dR6JJ?c}e`?R2|HHaW{rUd9N&B(=Id{?-L=}H-4|=Q4 z6IgM3Qgh8K=Na}rg0=XFBhHDB zIC#LX#YZuGbi(nC4?f$aoPKY6zgszbV|U-mi$CpmEc9Vs);0;R$6bO+GVX(!$!=U& zJ6Ma4e10N6^5IvsKZ}q4^3e%ji$}zuF#a4S&Sb@)UfNib{g`CmMcZ51^Kq_ZJ`f-M z^@C2li;r?}7awuqE&?K8R5!Prfp@Z-x6CF?M=-dY3}mpksg0>v0awKS&?QT8sUN zkMeVe@gzQ4-@j+s>>%63hxjNu7xXe;tob9&7kTHxcgX9Zq^(!UT-?!m!8Fep@$vBA zNr{iczdy)74v$q@d?~t4e8j~^(fnr32lvD;lf?FZ<`&i<|7Gp*IJJq7xO`E3h!1;D zR=i5L1NlcfE-~gTaxJ!;=l+)*%bctcHUY<7i_|lf+c^leOnjZsYu56Y_u# zeo0)@p6MIPWIx(iQ+zz|W%2O#DCI5(n7x_mVJP;ejM_hc6kIB*G?6iE&T@emV!mDI4yo!%v za4gCm#fSJP%9ciX9&!RX!ldql<@t{IC=dHIKNlb3Bh4;U*Rl)wM;!ifl=ofodw6H$ z9x1ynhEMTP430(FqxcXXMcL9Q&C|&*$Pq`Cql8TvXAvL65vPvo7xXW~rbcN^`G@>t zlWcyu^fZ7_$U_FUhPzT c#K8mniI2GWfEP*eA{&qm$OdEs{j!1o0e#+-fB*mh literal 0 HcmV?d00001 diff --git a/autotest/gdrivers/data/ogcapi/expected_map_lough_corrib_COVERAGE.png b/autotest/gdrivers/data/ogcapi/expected_map_lough_corrib_COVERAGE.png deleted file mode 100644 index 209a22bb64409cb90fd1df94a7ad9338db55af11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2943 zcmV-_3xM>AP)>5&59)~*&!js8X;lS zR)dA{pzi9ShODg2mz8h4!#O8{#p~*B<6gf-#r7(s^TqH*#CPR?xbb-X-J1X(e)x;u zJi20Z_wF|zyxxAqrvKlcUv36c?{yOeGxw5vvS^UvsHzn=2!dz?i%l?BKpe}sN%UmI z2k<%>fHyBfRZThl_K&{L{DV1hlgBs41F7?n%+cD-QM@#CC8D@F1r3_JU}&^W3>E;~ zyrQx+IF7Ohi=XiE83(`rP6YX(J$}*g+PA(Br$2^^_c}jsmCe;)QXDT@x+26O$C8aa zmfka{PlHOJreH{miFlAqD2BkEko+w#&b#L1&L8q_xcczXTzL9V?N7!4xBj@Fk7P|& z9gnwLN)@xPr7y8oEu;=0Kw3x)LUBUW6v0fZkXeW5+4qzaarozd{l$yvclgV9-v5_J z&wGyVee+(J9#`~Fes$GeUvasX$+6FA<2biDf#3)r2%$lXH;omvs$wX^6zd0#3YLn= zzL4xKT=w42-+%a+MbKf$fzx^sXR#X7on3bs|E(w47oH%v9ySaqhF(U*D%7DzX-m*l z1QGX2^PWohuld&Z9^5$@UXV7On|9AZ3&sKzH%B{os)Ao0ttVE&YuksalVuM;iBr&fGYvp#IJ~Ts?mD@YBl?(>4vg*>6pF z08zmmToiLqQ6=XAcS-I_U6GBlA0*+niim`&u4~LocfH)!v&pBA>TD}%CQTJ*5(Lvx z{W%obJx#?76>&FLQ5}tgn^W9f#EY2;#ZcK#P86}?m4i02I-4k);Zv>urTP@Bl4$_YZM%Yk_gou_Ty0`218fq;b5|)ekHZrQm zuU-7xN6LDeH)&XK-EP{x&uGZI9h}`n-I;?C%rZjM5WJ-nw5pY4cuxD8j4d|~yMaXKWg*ki(I+2`kS_K0jRsq;mW!>CEEW$=Q49eWb;A+yQmAM&rKAd~CQ=+k9orK@ z%6D;G#?uM2QFZ&Rw_a!U?>{|TtTYm))oPUsMWiG$EtL-jp%n2Vs5`&2jtjo)(I6=9 z8eXOAH=G*o&7J#)ht+g8j@|P4P#qpMWxE~v^^1;@Ea#L7F-FTpLI@ZjDk5JLGC|c< zMBRgm`;OFtnRvGSl<*oqx%ZtPO`otWhp)|+AF&uR2XD+4Y+Cmr8xq3dL3>TEBwGft zP)RA6?T-1XkyPAKBuYvJK(u6vxEJwEF~SC3gof04{6(`j0)2dso50+{cF zb5u+zpRWK_P0IU15*m@Z-hA>fKKwdQhr?N4KYNm=-X~ul&%C`jyIRa&EH6L3Gzm

=9hAa(F!z7ufW zC5R|NO+*Ayu_2dNs2PoIa?yUyhsSM|mP-h;H*Za=a~_`8MeCYlo~Lkj#`AY8f4W`q zqN@&@#X-GbaT>a+G@#CvYy3ysYw_7V* zoz0(7<{=uj1>@LS2J{i86ur@yV~A z6}&};QBB`Xj_UE0Jel18#&pi3U;cVAWXDvq`wz_H=I6- zr=btDe!4h&+EDH_=L>J}Y-X-hLpPsj!>#t|vta`Enh*Z$ioV@3%KtmQ_I1aP31!#` zGNs4|Pi9Pg>pnc0GM!H2FdyJb)+H8FNu{wBrjvsk@{AXohRg93y?cK+r{dcC?9u#7 zNB++CCJ*K;043fS$9TvM`eEZk%Q{R#NeL^Zi&C(XZ7Y##eEavRZD1Iz)Hf1~O^|S~ zCCG)Fh5RM$WuHiniEZ5uDClc%wC$7zNu~EfFE7TE+gB{QysdPg%SfdVMsdDXXVq&- z0lFYkH%1o^EGxqAZryvZ{e){lin}z0rnI3E2CWpe4y&?{CyCM{ofmS}NmT+dUqq+S zdN!X6DiW4gJxrx^$-!PqB7ly@dqU#$2@x}7SRWh&r79*`ONKHGGBRee9CA^jku)mO z%to{@9c<`^jEGCJ0Cvz^uF6hv69vb0G&>gp{xeSJgJ)^ z?iOlcdZS`GEx1X)TCG?QU|tc>I165r+abFFE>UD(1UaCknw{hohu<81bagalm>swC zEK2cEQXdFI*JW{%S>4bjMZ_g!@_3wwY{Z!q p$B{x9&`hptnrg;$zTPGe{2vh)>oHOS=;i zPiPcZ9LIm@YF#a5rQ{&^Z;J~L0)d30=C-3CDS|HuUV5p55Kk4Pr}mOJJ@g>7LT*Zg zdTI+oaG+sDNZ#CHKpGH)2U~1yi$QvDp~NM$q=)S@v&n9Dvw1V~o8D zT=s~Fgb-ou1MCqvgc*Hlr@h9QvN6W9ufvsLMMSi(5ZS>`}DiNKKjCY@@nsuBei+m-{1dRyOWJE3 zDQ-LRC6A&7&NP8Tn9*`#*sj!J%MD8(e&X!}XGGzW`oba1Xjy)jQu>m}C%W78e()lg z2>%^cg_8HyEydiD?q#vZPC~gA9n%I5VMgjpxE7nu-FtIBmCOw>1hj;WAVP>x2oYZ1 zKjYP_I_=@41{*;@19pN4A;PbRe(4*U9aFW6N_#ko!%mRh4x22i6ULZw+!+{$20A!| z8JQ8p#+HMRuIaSL5+|7vWVZl8n2|X_Mh6Niu8E`Vyib$N39{44OxhbI2!e^lvkz3< z-(x4H$8#_B=s-aw(Jc>$Fe8%=i8498Fqg!Va=ohQ^8OhwZkNCz%*eb$q8MY!51-Xk zoQ^s8=vu7zl)xd(*ijB?NA#XXB1-K372621l?)9IVaBd-NIRnU$lFeu*Fk@Fc#3f%Yo>=WAHbtue#oUsHLzn@FIOg;FzpoOtjzyiQS2bb? zHy{WzAc$ke2baC^!R0M?U)tg&1Yt&IxA^0VEs=}_x70k5>XZuGw71cDFYqsm8*qq2 zY-wBpMUlMJTx5hpm;pf?A*J-!;z4&D z&%M;^--95`Kn!t+l+veQjEIOjHS*P~nnni-8;*fPm;pf?Bc=4El>X4{nA+^Pe95DS z&uSZvfgsG-u*Dy6$CFokuk87t*!J`Ki3`PA#V2FT+ZI(ggc%To8Ay9$;?C0px|=e} z{IMH~h{!&z0S;jXx=tKnJMVkl;Tuc1Oo2lj@zvi~S6y5O4q*laafGYwq#y`0Ac!NR zl)i0{+s;lC5QG_+sXIgn5sn0nhZ!uEJk`rJ;1FhD9ugD1K9>s)VFm<=iR%|no$0iU z+X@K63<$yutf|L{5F$ME{0IH#a z6HB-ZfkT)9hcE+zFav@x1A;IEf-nPuFav@x<39nf!_tXPlpX*8002ovPDHLkV1i|@ BL^J>Z diff --git a/autotest/gdrivers/data/ogcapi/expected_map_lough_corrib_TILES.png b/autotest/gdrivers/data/ogcapi/expected_map_lough_corrib_TILES.png deleted file mode 100644 index 9d2e18c1e63dd2ac2e518d42d3260aef252e8ade..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 951 zcmeAS@N?(olHy`uVBq!ia0vp^DImt*0Yi?PW>$`Ez$??mpQRh7$XCDGd5@ z<(GCW6Z^7Gz);79hg)#*R-T#H9J^yyq&ZD~|Ig3+`?fpUc4Zu#2j2bji;6oNeBq=} zILP$2){aEQq#kEmr^+ujjV~83xmZ{J--K0S-CoZGGsW82R}cBFHeBZ@hbay`J3(ch zyWX3*wk!#$|Et+P{9f>J|WcbxLJqs#AkU<3uhl*Zo$J& zM>Yr;9$R?t{rBysp6580vXswYkojshDP!{?Pqq!ezJ``fmhPDNpz!!6p&jLdFuM#( zj~Q5bPCa+&+LUM4Q>TQ_?>cx&|7lL#83VoEqNjRKy0t+*g&3ZftC>0XlRU?~tLu5$ z-rr|>Bb%b>kZwHp>Dsd*F!MGV_*e6=H#<&LP4~Z4v39M^Pt#kQK2(3%u_=OQp3~0S zM6u1Cu)FDqlUWu^N(%a)_hMC8h~d~ z+f0`3OMSG-XXmM$loGksSMH1F?rOJwd~9|1VV+sCO^>;t4%Kn#`EPY)_Jt=dyA+&u ze*4EVOSf}vzeafH#Z;I(fe~`&XF&e!)jr1I)&DMTE(gaEFfkZ;dp@6gqE907U5=XY z?Km?f8Sma0XfgptWd?Bc=IWxv)H?O6+ppn|q7 zN0#U`8u>3v_0-WXh4}}V{Ju+^Yxwn$#c*}R(cjK48zFA&kbv9gbmRwfoR{g;vwPqE Q24+YGPgg&ebxsLQ06~PUX#fBK diff --git a/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_map.png_width_256_height_256_bbox_-9.5433_53.0905_-8.8722_53.7616.http_data b/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_map.png_width_256_height_256_bbox_-9.5433_53.0905_-8.8722_53.7616.http_data new file mode 100644 index 0000000000000000000000000000000000000000..fb2122ed9eea98ea0b290be710593ca71d1c0d73 GIT binary patch literal 3931 zcmeG!X{FHO zDWM^GD0vWSh|u&}898rHxHw%K zHj5L>j?}e^jAS3vb&X|)FRAgP9nUj7j9b$o4W= zVVrOZWN2gpL;qKe>=}U}j9A#51l?FhOgtlw!wAtm#^i+SK>sD&<9IYf2V(zIbsZ=$ zo)Zr569YL+HVZxm2XBX2hrx~|85vhC1z87*3QVvd5sCj) zjl~FFqoqK9;r^xanlK8)j0y~6=tr}{uox^RbDxVH7Nddz0AL;LY3=|Z;4K26rQqdo zY)L2#_jaIJc_jEv4!CA)9@+Hrho-RkUTRxSR&hjEbFhwbP+zJ{3})vy=jWyhWyaON zRx2#*OLSE0@!P#eQN_A=_D!nX{Ek8!d#XZZKh=QXY=7#!)6U!a_j=vcCRp-!20y=e zO?#UDZo<)x<$kzxk1E-#h}N5reWS9W=#crNKLR6w3D3KT0NfR-%)XYqg+ z^nZDzrjUtff%xF^ zIeHpI)pkRiW8N3lN6uLA{b?br&WlUg7bt}hCV%g!k1PmI-}YAKv~}>R@I(!M=>*u%EYABU{l_9Jdj8$7rCCjg1Cu5ym|Snxn<5q6jhF5 zY4k~l>O zpxb*y`jK@MAoj~?4PbV+l-8BRIN}`KJrTrV>G={2&*b>f=2sh?E$-jo$ z+a2Q1bFjSG@_RetL9<+1VYM2y=jV!<`r-pspir2v#(Vr^b~yc5#R<;W9aDvO{2iQI zhU6N-&8EGwh~9V7=QO(&saNZM3QCYUQrW)Mu{+9~kD&Y$@fU5!pXRgcYc4TrTTd~r zO5*E1T#?=pPD1bfY~6hR`qki;B0~bS1iC8^U_h9;*wR{dy?IzO39`XqPcwqCRE5q+cO@eyExHYFxvuv=clIq0ziV(i%!m;Aw?Vyzg`{qLR z;1j`7jn&VBsq72chw%N|14e9%2i;R@JFfAl1y7_Zo0KXwu40Pg)c4h|=exRTs;0GP zA2NCjN<6f4`|1-#O z{(Z^VZ!W`&z7ZJ}>SS>HB*<`>O4T9|_}SOf7HcGb4lUFx4+CqX-13FJ+`$qY{6 z-;}r*NGWBXMa!KHBA|G(-(Ly%PdzX56FvGT)!%(^<2jUULeB1LkdVIenVE8*h`xr! z!^!ks{$U!hHLgSyf5N+8x49`v2No?s>RzM?UcX{gNHumlHz2#m#+y3*C=O4@C?H{ho z3%A(h`Eb6j+_KEh$Opo!+E>ncvUMkuqD3^8#oyXAll;XA zMe|(*f1|FF#pXVr(5_X_JZFhrJeW#L0W$}eDbxNtdZu>mejidA!n*Xc{zv9~x@XB4 zO7_i-S@jQmvegs?6P<5+T-ZM1Z(Mtq=kVI;wK$d)Y7VS-Yden@}QzM;Ggl6;`sI`CAHqGUl^ZnuN7R1u8or*412dN6tb6M302>v zE&G?YnDRKvOQzAQSo0gI*#oTljmhwhc{SFuObn%7_0tPBp&|iji`uze-*zs6YN=BF=KTXY-)&tkS$X zb=VCt>!z2hUn~4MFD@$iJ27pW%_Qn=$v!Qk!#(ADL~rGL+Kc?2F7wM>mtV4%AJ+Mb z7;%%g)gM*L8#tLNr1{$00K;hppqF=9FRve{E5+(fy zmR`4f_B&Zk4_k=MP40X(Un7gup!va3}Weo^86rHeWR7R)mpo$h}+I z_09m&>#-D+&#r4a11YWgxvjF&p|Xga;sBGtgD-dyO`&p#oDGLCsc>&`VGSIEGWP3D>g0=9Z#D(+v}YLxBxnYFO`DqW**(M8hL}c5U-4%Ff6=nUf(nrszi=Ix(0= zet8)OG7j{lYLA@z+IS+sz9H8?WQ19jGaRlCa9NhmmflMfCP#YIC;rTnMew{(wKFPY z%b7#mX7QIbgn{-$rS|bnSqypHi-#DV7hN#>vWIJc0zpklXGg7JliW@}KMH4Hw27MS zn(_@A#a6i&WK*lwYrZ@LwrkuKf!&7<_8>tfM*F1xo|OLT)o&$+W33KxSr!nAM-apk&&|n(8hXkf2kdzJ4p$WeMjZ$NDwx*NnBIOvZ)IX z`SP_jbZ-8t(la-J1f-o?>;Aa1erV>&!DkO{?{5@-62q^4UA)`#rrk-BnI6hYXTEtr z=pztJL}mQ;M1|MTE6wv##GGz^Xd^cUPlnBXOO`v0G4a7@UN1dHK^YFDoQ&A&WV1{M zD?R*ZGY(|t&uUGV^vXO?RRkLp-^~Ryer$U#hW+rA=_)(pJsscy>`yaYWM}?RJy!|r z6(gcryd%cScXWquH4#l3u6zmjUG)N>-j!5Jmz9@l*kWC2(e3(D4t^ZN#Cxe97hJyz z#YZ!zvN+!da zTp}dOCQAsiYltFLDFTAB7lERpEJBJb!9ZkgrqieMqcih=p855i@7#0VZ$0mKok%1v zGrTDtO~B#Mo~}rQ1DOpH(WFQa18t#QA{me%n4|GHqWOLzo`62=PC_DlKvopUBBJfX z$&^sgj9_YEx|e`9@jV&IU`OskA{;s4G!_^^MEj807&LzG?>H7{oF&l$PsIHb$DTp~ zBOFng- z4FE7`2?OAokT}k|`yBwlN1Yw)Nu0pxA=Uks&wtrOIIJ){6B7Yu6m zXBuLhDEmltT9IML{Ar6~i;uE7SdbqRW!n}_9d3&?|2Udrv=d#x%tQh?foed~T0mnb zu>Lw=7yRc+e;J}-S@!6Wm!;es;h{*w*h)Y~V#)n>kP)y%Lw@ z?IOP{=-7VgDZAw;PlrSVDkEIi$zE}0N0(ApQahOXl3VG(yto1us+_#y9ul^ipzIu| zH%Tk1Nz@>Ew*a>!Y-*GEGnewku?L*hg#x&pY_~4&P%i#N)UUM{-9siCn`3X9Y60;2Ueh^&en_1G=zQ0s{^T+A^!ov)l2G@#SQ@1X3582s$C~#q4(%%(MhQQ zCPC>EXsNli-T-NLWRuVI%v|)T6^9%*jc?>RyYz4v$0Keh>Q}iDmCGyH{y808qc0@w z3cZCJ755r4YHWZjsFf~SDLp(@dbGnLF=nzScb5T14^eeb1iPLc;9mzNpjVbOa`Gce zQ5hBioYI}wPCJ!2-r=S0wdqN>Dr=IUoSE1=O!Gceb~|>%`C;w(jY25+J0=xR#6d01 zo^N;A2>e!&{co!?Vx)lrno=?1vRtVOU(AP}Wn7$J=Kcz4%5mO^rYQLlUEiy$(42S2 zq`)+;zR)URhv!89ghh@wH@x!3=ZMNrKh{x=E4pQ2w!s`O!cOEDup-Pl~Jkm+Y; zHXJwO;%Ds}fYDpWE)xT7&#~B7fmYue7)l2Z5EPD;3!g++l>u*cuw^yxJj_eyrc+-;$QvQ;bv_@Ec zxB=%eszr;j^)$Lg-0y9vv!j1KubNNq{af{A4}O3|nRTfIv4Q8CyTFZaN=Z~KdM3!l zveg~Stp^`{>XKoDm@|X5vM9c+04hX+Qf@S?kf9P1@`grA=q0PV4);c_c>bcArQD9h zjKV6#>-Kbc5Oa$ozB=KRswa#DiDKElfOd6*adoUG)#fN zt9vf0X&XQa!K&&WH+O%}Kyu_@ntGFODv(#TJt@dNfk=p%4taP$a1E)YDcpDs2-x;+ zENQQr!_gb&y!NW++KYiUU8+hKeuRa_Oy|$Wbw+52HeXopJ7xy!os_Tn5`=2P=FHDb zO5j9}#`Y-5iOsyMf&2OA$hH^XN;Mqr?NKlHn{xcR3EntdLd6)pE2^1NFTY{D&#>j$ zd3pW(5N?P2^fV>Nc-uc$m_=y2HeC_i$J1I)EQv@ zb_QHUQ@Ng5wfgGTj(~zx(sL86Rg)PU6o}$S5u|g#d{I|R!&J)ichkdSz}gw${wq5y zIX8#`E7Yu?F31?A*Y8*Jwo=TpO|`3>0^;B|1Q{ z6Tq!n{JL1W_23W2(VG1WziCVVL`=q?E3& z%^zz}_bTbxB2QdQd3W%0+{91Plo6|no|nI<7;ePs!TU9>XNuHnVJX4N^LduY{9@=y tnrr>{iSh4e$^XCnr%C%im7T?d{FY~>gPXp}hyHm0XGaf*vTuUV{2geW}bGJ6Xn>q|9cQge0l#OG!ed)zHBxF+?O~Z0&ZHyj#W+ zDneA+Gqchli`7k%1A}m_i}% zaFP&X`o#oUl5L~H^vFiWWXEISYdOZIWFrepV-rgwGqT-w4+$~%ps3?PQI=#{q+dX2 zkfE`Gsezd>S$miNv51&sIuc?wv5{d>LD80EcfXkbyB)Lt+F3i+3ja?#w19x1=xBY$ zk%*Y6BjNhA@bDui^mjysg@i>|l657-JpH0hu31?t6&a)Ve@^-~5dlX6!y-cTT%&@5 zgQ6tF{;M4n5u;D{KN4$6*57PkWJ)nNHq$dRF<3iqGNkP!QS_Q^iTFEA)-?S^9Yqk@he3yO{j3e-Ol789yR{{PK; zoQw?8BOm#n&g+r=j>UwoU7zxc2|E(8_A?+reXZ$`wMT1gZY&|@6ciM>cDrH6*AimF z4hJ1M7PHk%k9^oKcB>KP|8y=QDB!=kmgN5}`@fz3&zL1S?66-*kYP+%aPStgUu0x> zSit|7+Zqyd>=ZZEVWfELP%!w0j(s;o=#He5*N-7p}@c>sUP~+>54IISk z!1oy`iB&G~`FlLFWhH{H`Mj@L?b^y+x^=-9ygFv(-O;%EHV5~=D0(=qj?KLFw;A1R z{hUox_`8g%T0d!H-1?h}nprZIM#Q;pQN_>oLNF=>zQ7f-iN#<@T8qwz^w6RgqSU(R^Kz35S>V<1o4rfv_N~R> zU+E*aQLXfmN_1=b2oEKvj|`Pt=QP6nZ_v&sp~mSy7r55BSU5Z`#~%(-WxGA8rjkar z(JjQ$GkVt7ilo9P*)|-(k;>%7YD7k4vG&Ge7v_@nHdT1Z`f37v#F$Oz2?E%RZb6uf zNiMpNIA%(Z%dh_Vi57QecBxB$U-LN5>9l|I#NYke)+s)yO_4^LRPzwleN zm9Sf6BXGdtIb?&{;weN{o`UL=X5jv~>>`*>HQ~(CBp8=W)KK5Neme&~8VhJl9&mb$$55=SfuZfYd?V6rn##>KzY;^hlxk&y) z5%F3V8eA|!MopS~HVby``@lj)zW6K1J!-~rF*Q|s2b5~&_HM02WS37~X}Qc7E_a0S zxrybprjx+##M0EAdk)PQ3PRwD{H zF)D~C52K94?kB$oW&v&BpRz*^EmXKs3SD`;*f#kE|3-2TIY-#-J88$_)H z=X>4*T73#2uZXbVJkJXQ+jXX6@3Hw<1%!eT->3(&03Og|=|Vibb`v|s6kwd?S-=EO zwg-#_Izbpha1CIonF`_)SRk2?8lt%OvRv?--2l|E@FiGy!(%d8lHc_>_h8w+3T|Oz zUn6`VEM7FG=ywt61DR~JJruDu@eF8Z$A%#g9^j}NB7gOzi&r#61JJ)B3tbKk%Mm)q zj1^j!3Ub8GY$wjys^bro=x5iIHCuf90$q*t1z__nixEL^VC?1W0uR5A-irOWV{Chu~;B&`5 zjJ1c2!tKaYL!bx%~qRamBQ4?O6B>anh8UKHGbS$Z;nQowUD2!(UH; z_mPHN5n-CZ)HOEFVo=E(kEmMr9As^yQ>vM>1VfAw@ovYRuA z6U$27m8dl1uhj0lD;EmxTIMC1ZM2bYM!YShmtH}qhjmD^WbFHRjNyEi{goREjVC*xR8*TRcrpxmCqU1F=EF| z?I@%1#mP@KGw13891NX@PDbz-sGE*TX_69t-e5m*NS|x_{^hz-RAa-NgrH9nq4%DX z{w%NN5ulVQV{Co{r1J)xO2WeS09q&7@8+)kLXj1o-n`htGhByV9~XPu!skh;CtoJ@ znmiXHmSQ0fvto|z0QfCKPfn>eg9IC59pV>l6ypl3hxV5A*;NZxU)OaQyg8tAp|Q)y z>4t~F?-pUms~@h)lgsdfPCki0ocV%^5s8P+0Y%F#021rCTF1`766nxQg2+yQNK%2+ zOM9@fSQ`kRD4*Z|`KuU9Skb1gUX~@w!~(oJiu3_&jM9Yw77$ME1B@^gb>aeGU>1NX zOB*1u2)?c4GK-+Io(HZ7HQtAlI6$Ji-)f}P0^qT02HFr19t&6166*gAM6i!M;R+TV zLyBtN5;Zss_fT+5d7k)Dq(Bww}Ht?g-z%W>AdTET_=AWy|{Bub~&chu1l4 zUF|4RrTV16UrvvI9X24D=i1zOKkIhk1-xqGSE$%|&EL^(X*+?j67c6#pXRi;_F&=1 zPL%9lp8&g!Z+sg1d71ZovMdKK6cqQweD*9YU;38dYW<6s^C48k_hw4%#D>7(>zc=m zEavkO;VQw|_%V+yvs@+O;vxGxT0sen<&pEB4$Abrl_q}wq9d~8)taS!pypV%L7)G@ ze?rc6d>q0~y;2L^WH?R7JtB$Docg@?*Eeaq=sgOFH-gCFpv|{eR#0<1+W&iHT*yX^ zfcG|%SL2-&eToI#1r{p&J(f;tS}I0=?D?EtsqY!5V}>>8htp_HkB*h7yuUPDCL3~L z_q;?%nF@QHaylp4I;G?AhW9B8t#J8?lOt0~n~!~cz5Cj@(#QJc{rtUyR5hE{`wkEbO=F?#^Pl*+3&C%ADyH7wHKoZPl2oO#+g)DY*Rm(VUF zktS2d>P?th2SH}%eLkk(Dg2L+_A-Z%|4C#~)E=v^$5jheJOxn2^9J;G%E?<-!fo4x zU0V`;%@2~XSQh%;S3QNQ2hq9!aIWG5p{}1qQAO~V%z23SJnlEml* zz1B&C0W)#!@w5g!AW!NIzWow;RD{9)$2a_FA++oZ*Cl9vO*gF@sWlQc-_V^aes{T{ z%sYxQb?}!qy-@lLKXKiyGeX~O%UW1Omkhk2e+c=LLz22bx#%`PCl00&BPRC*`Ic5B zEUBjzVq^=6p$Ai@ASy6TpTu2!CQ0xSgpe8OGZmUsD-;iiR(_;fzA;s=iEv37C;utL zO!@rr0*!@@wvl^;vNr_giAC8~1_yFA_o}^IDwwwY{)SaBvrj`fiV$?XtWcoDMP;di zn_@9jfm6SlKW)L)?$R)py>R=USlzu=bKi#jPiqho3m-jXG8bRF;0%Lsp)hyzL`c;$FODC;OV{H0(@+a{pSht(EC zv)xn5^0FPQZu(#ZrpF8-9k>r4woKQ&w)Cs&zilX18ZV>MpiCV8SDTlpBT2rao~%+{ z_wAxvDT|l4ai4m-@w}tJuElvj-@>tsZ}e)#AcXF1R3>z(Jq|ChcFhevnwR#TQWB%QHvXAa(P6&9--K=1EirgY75{u=v3u1peqSIZ+QK9ZX2u z;){j2r~<$^(e48%4Pr;j?sR}sjrGd5^^#|SQJ`3B`I_I0- zcs(y|+bTj;27*YV1_-ZPe>t^1nIrFDK4Qi+FTr4UtQVE>bqcJPQLl7Q(tPkD!nt9+ zp9#r0SlI!eHG2L8&Zt1m7(N-o=gv=U&+!Z_xoGS1U{<&i zJ>xKRZY(I>tjoggMY}18fblLfU9;i8nhcBk8;rwadSqoa4jp)*NJIqI)MV@O2c~xp z>BQ4aGjo3;-V6HUx6db7_hZm)ekkF>@3LXN`6*~ir%xc zx4sEaJYLs1=^d~+*j~f_&~2z%XH$=`w?S6HtX!bEdGSUozfmt4D|Oj360&OvA*b&Kz+7Ay63z?47F z@{w+jmHVr8`riyH8hIkZL-Ev=LwCFl2O;;2%}1Nf&ofO^SOs&RDs_8*UzYbeMD<7H zi9<=wXood9HyeH8jFAq?dbsZ~dE$rUTe*(z!AATl43OAFqgOhF_k*WQ?V;70hk=j}%%Q|YG8v0r$X8v^H#H-2s z`lcNU$24~CWSI@AzPNSe$?+Z7o$WS%Dq@%}CJYNPqb&F0FtP9#yS{HaatpWjL9y+_ zoySlYnHpBiLgnSVi(7uJcN$K`8N@fb!2{DJgSDlv=klmy^$$TgB5b-p%rzOSzlzJo=+q$Vo!PuP^aUo+9Bl zrK#YO_M1xGX(M zXwVj)|N8gCjSda>m2Q>BDwlC_4*Hjf@vZ<$An`B`ZS)6Rfc5W`qM zV}a__B5m@60H4+`_B&mdAJa0HJ*g>p^?Mt2^q<(A(*Yvo$^6(r6*{FspEsLe?xXA{ z2u~`!5b2=graW>bCdR$q_CjCfQGtTH+?{yIJiiMy?@fI2?n67ff}KRHuHx*O76h$~ z%@R>3-hLI)>c`uSpG{4%+wn91NF#|QV9J&4SKm=Czs>H8xrOKf|I47<^U-F;_>^ZzL4DJlX1peC)O2>>r?151D*Cn=Bx z7;2IfZS`FPU4btN`PqxCc*tSS0alXSKpabrXT>~H_(oghj%tp&q$}e3JCJ3+tI6uh zc!6f%yjb7gTUIfW5waDrp3HY<0Y7i=9Gu#xPI#)XlbPkd)pBe1_?1HI9?aHT?-C~U z7lb!ZA+K5w-(KRxwXcU%NW&02yQeGM;P;ZeOCQmLpyS;1!CL(lSi z4^H=*V5UiAanK)nb&IR(9{D(c}gd_31%{z3M`j+p+&`YTf1<3C47R(B#^LLFLfnu|MK_`G&roRdLAUy^61vWn;4+*g6~S z&kN9a&(L^%V|;l3Cbbjm^MhUxdL^Qe2 zby+SPP8ztv%?UAIT6_w2glqEBJg({;$wc-2ab zHr*L)jPc%5C%B2M`!?~3AqYJhS7~n>ARuSP`Eine&HIUp#f81;{OJ#$5xhh2#Gle| zt)LT8A}y&qt(peKJ^YbA{~O}RMI1J7R@GT)qiYs?jr{j757o7PR^BM7& zi<5|C>))B(1!LN%eZlBBs!jU&;~f8@$lru@>0_=axnK;S2oDQacd_YxtIFw&#VKT6 z!{5PB5k7-w9dGE~H!Z@4l4!)S*#nAf1}qSy;uiA};@INxp7crB&AP~zCvamk71y|| z(>tgbVuk@H>t>9SI19gB$xfDsQAOOcs*CRQI4ym&d#k<&&>%Y)Y}4aHqX>}-_21p4 z3Xg-{k;i}z*~9||dzXZ*AyDf>_X4#A)Rlu*M9lymLj8f-tH-{O9S>|{+t2_NVsHQx zV%7oM4{}|o6$`&{5=i+=F{wU54!{OtUd7m7K9pD)cX?16%Q6R;1gT1_9%2G;s#0CR z0MTdRq+tuJ8A4#GVP#;j5g`GonrVvIRgfpqh$NO}x# zLA9pw6ZA0P5~#t)57W1T?Q>#T@~QNVu56~SXfC=9xKTI9<5&= zJb}^T4ZzoT%t=A{aoyiz2FI4V&~tG=*J;h26iu!~v}>7ar&spQ{)I1v%2=JdO2iXh^uwfq6ZUa)Cg&6V+*M{!(GEz~>KqdheP#uc@$?Sshhu%=7>2Ly& zDT0luGL2GH;H-WJW6&NAwSz6C4r|nzc9D-1OcO*v<}cir1(~1D7S=f?uwZ|e2VxP| zW%9#A0*0v-#t`FtwJ}R_gZe<$@B7!a-3;0Ez>09#-oAYE1!$H_u z?qyV{7ubY`3B1>!w!jynKNYd=(y$QhgBT5h0}vxa5X5HG3BuWoFu_rXX(5PaGmHdL zYyQ3(?&HZDw9bE>B8Xwz+6#^u1*{={@v)WBbzcYJthgJ7n+0dJXbV^*FL6O4L4og; z6iDPBS4d(9eHRF`gEItpc2Mp)EIY_`HU2^J(>&`NSSi^0TL~gK&bCn$9A?}2{TEAc zSPc~G`7`nN&7hQ$C7Zsb55b*Zj6j3~786C%=fUVlwudXat6&xZak&-01tD*=7E6Oa z4oa!ST~(Fxj>|KS6huNa9l>#k9x6EY>0uqpAg&E}_kz(GdfZo&!ttsCK1kY8urNT4 zi>E93#0|8#o`ax}c!4k!+`W1}t91d7B&#hhSEY|-HOJ+v%2(V^!s7=_oT|@UGwq2w zY*K51VH|Bk*)6w`fGiw zKfG5Kq7VN24&Y(b0pJ$UW+NMsN8{y*qJYM>mm<{v9qtB#W?z<6{Mzguf8Xf(0$rY+ zu`WO4N_2u{sV>0u!>W*{14dbm<5vXW{r9L~n+XfAf=9@JwxvgPZK;65s3;3^gs5bI zs;dBpPpRQX;wm( zyI3S$nuj+khq3ZS`McB$XR`p*r@(?vt5$UIpBT*qimY3Ob}X)>_yPe`^Mz8{)u6!Z z1Cl$XWd@)_Y@B)CoADvi=oyFfSy)l#41NbaJnqKF%~~asnxTGuaRuFj*27+REwy)v zqgtt^EX)VSn1!T{D=Lp-4b>Wh0@C#+oH)YdLngb-87cIMsy z(DZXfyi1BN0e5Wxns}{FEtOO**c_VRwIT94CT$L8*zJ?Ndj3o>&r-@um%6`%hw7nN zb1WSrsyWO*BoXOH8ojNR{5$;jyFNOhOzBGc(tZsIqlIll^?^z1JUD?ayPT#)`S?}rZ%&)#p3c2w<>R`H@W%#>7LJw!2^dnopboTZ;aaX~~ z#LJuZs;!hJ6$*?*#T^}*miM9LTkJr)iE=X%tE7c0+VM>bBb-yr|+I zPZf&(c$yIo4ji|=?htt5Rd*2}0M^-!T~x*KWdW&2vmFwP+GW?M#>4%6nSO8c(+|&- z`Myq!(C&3&^>JP)b?bFmdFoj9eLzFJfI2HfiftxZNc#l9ghJCgW8lD!0pxas2!OcT z9#~_zSs%bR;dm-W{6#8|$(&W>I0wE%hnWDpyw7(98+nxKhOXa57ZmH?c^CU#-~+cA zGF`SJ|7uRccdt*H(I`G-p)vb-d52z2q-QjS0!RUo^}W@;QLJ z+;!qr&6Ot%u>ay{SjU#F9#18naiYG=-T0*(vt!fAbSZ;a=3UOKm>aj-?s{rb{E#)hFet-NROA&pJnjQC!0c6pa^zv3kpYd}KN27+LpqOmko84nX~XB8r}0Qky(s+~qPBdr7zn>u2ey#63W^SODUcTao_X&?cjU3f}6LmXXGAPB+>#fU#*A+BIO zdq3%iypo+2-3pEQXNL4K&nbd&=1 zT=Y<&uh7K)aQP#y7s`GB=*RKh74^77x8(-}cR(C z(!8}rzBUUas>&iPi}T&~5WosCn*r8h!*^rZW2bR6 z{qJ?nPPh z=ExJPd^j3-{~8x9F3FpEC3~Z}y3j7P#bC)~(&bnD#E@j$rugH;VZ}_T2xr7LNAIZ0 ztrljrUO}S29W!=%T!h3-7zw=*f9V#HdalEl8J~7)96NJnd?qfkePre;p{qmMLGVG{ z5!U-8Arva56CmY_LekGfhqH=&6E`-M7t&-0sje`t9^(goW%_AKdqUK6)UkTfjO!2p zKyqQ7yaCbjPrkL-i-0?rnaM({;fr}! zeq@QiNb|n?{z>o^Swnl7&h6NHu@XR_Tyb-$GU5?=_E0naPzY4_T5#xBF64ennk87` z_K^lEZ_)(8p!^s>Wsp^z?ZS};CUNwwB2AzKP+vEkJBB;Zp`YJ7`}6l z=|Y?}YaTY^jc7DsCo7g82YjkGY&Dr7guCOm8cdM}&h64{BvzDT51oN%?}@MGUyG-T zzFLCZ_n8Aeai9*O_7X?>uq**deIst*jKb( zVqGAQO!L^Tz4yWsB|>^d0hVb0M8`itJNzcQji)ntQ&;t-2*66PucQ>QHhMG}m7SS$ zT^p*wl(x~+S&yB%#l}m$xZFe;#vlOfUe#WpO77Wip_pI}(Xs&9R?ioU*B8+isbmk&VduA9O`X0{^PR0}>3WjDWf9ZjJDpzkZg!iw?Gbv&%N>N7p#y!R3Z zlxo$1QKM`|;X0`dC0d7s3wuUwqtpG{r)9r6+dtoqJD93pvxD-P5RoG7c2?!CoY+Cm z&kK>J1F;8XEM3HG>F#g`TlmIKS#CtF{ZQ(618$t5?0BNbuB@W?Uv1eD!VtAS`xa+& zZ)#_AV+J)*LzjbREL5V3PQy*eu2kJwY->P_K=>Vm)@#_)!38x+ON(wpLDXBtt9v9pNQI(f68%aN+B=~|u zfA(y8eK4Z55*C`779J-i18 z>SKQ>I=Ax}`^}mn1K<8W?&!SiIW1Z!P;3;pNKZY|6TB@)dG?nZewOUEDNnrRuN_VB zZ-65yz?GC!epAG@ba&++aRpmnR3vye-9!7x$lJz|QE8{C!?qufCOs327byCoVnHyu zVp_c7d)S@(TOQv1&aCD}TvL~<^axe|Zt%cS!ZDp7q)Z z<*(`}+VjshJn()cQX>iVy&C&+&aUp|poUYo@Y#^hj!hegg{A@kr_x3i*KEJa4*v0)Bjql4Ml&Bb`?Xh}&L&R?I(SI?JaNbFZ|GOjZ{Dac-3mcvE ze#D1o#JwnTjJf2>=rX@5Z|$idJ@n5$BlYns2RqEB?u`q_zNyfy9F-r;f7!Gq^EJoZ5tn-Jd;rn^FL z$bzBh@K@X=`!}jicS{l=4c*@w@$GL??N{?!f9E~Eq}~1@Fv!v(=F*j)e|_KllztrQ z@Hp^S_Nyus7nbI5?0Da_i&D@}FT0fC8Q*JpgUr*pp0IQAhBB+un_V4;t2=W>e|(al z@DhFg^l!S7XC1J#jbU4=5K$lS%j$!V8IOHa_mh{xw%{!MBfg;>?jY%p-)1d0sV?J+ z(OGYs+k~35;ELiXo5B5lkIshgIz!RC@3&&jJr?sKbC16=@yF-lpje35X)1QW)F#84 zTJ+72MA_tbEQPtXTKKBl%&&`jn=a2v=A}qfIGp_;{fPWBk~>Kpt&_U=-F&o8j4Dvh zxlY%(zgOsqk5KL29Lhe+sl64bke^`5gG49KlV;U66(XX3Fll1Gyd^9q`Y*VdCM}#? zn3V-LfSgRVjVMKg@R_7268N&u_<{(_<+An;&GF2;9pPDuVc)NQKcbnL82|B7@WVqA zAFI5_rrRiQjXuuA!Od}mA6eP&4tcu88ywJ`D#rn=7(myv0Q6J+ZHC3AA{Pxa%58vE zWpR_&-9F0)J=Y#;a4P{h?m~xw=9bnc|MWchqvNr_i&$uZ_GUkh?*rhvSMDf|ihcjn z?cM3Wa@sZL7pz_MCT7BW0u?n1V#dzTzAR|1KBwq)_Ve)?qxUmMHEyH}+rF0~eGJ~j zh*f&*$Nl&{b3SOpaawM-hPI>d#B5O~qe2fo5ctp=+MAf*QRSqlQRfpPzB%h^Gm~Fg z(<0W$l)UC>Ans^dtitIqj_lB#TiT4vF7zaGV-=j%%O&i&SLd8A0H_Hm}&sgcaWme0HBUS^kh+qCWLr_}0`<|I>^>jXl9n;8Q#O$s!3b z8+!<`0K)9`vZw{P1~K`fwP-lFZtp0IC7>xlz0ID2O<<@Y>QvDp84SoqOpAxrv@sOA z5m~00JdR<~WyxA)G5CxFR%;kl%otw8I0|uPQLS|=j`V#6y~FCX71uSj-aB=*Ju4n` zW74}4)vA?Xy2|qpc-4TFlXljXY=^PGrs%ookZF>9_Gh`}Q= zTnt!Ke?x!dSZWvA!KDr^)&gSkuv^$nfZ5_Ali^E+2jL~El-O*Dj6vUi`ZIs~weZ+!=Gln@> zb3}=ymMLwI-EyO|&5;GoB-=grmtMF>(TolB$J0%5|wAQEiB(D8xXYuHtORB5GrbVw4xq9bt{7pOs~??eRYC>bGJK3Sq7=bJ4|0fiip6UWYoj_G zd{5didoAQKkqOq`tAZ~EZm-roq^hxLa2|P^$mKV3Y zDb*IZZ@(PVV^)_&83z_UR<-&tkzYc!4cH8R(e*>Ym$qt)S@3{e*_XyrOOOU>W*W|W z8V04XOBRxFB9l$~4R*2_DPSjLQ|smLoSGfD{cVDj50Jr1c~Z9rwqZ8K2V(3I@hnAD zne>PA-a4BuCHl4)rIFya6qBaol1WLRj!ZNR*{@_Js4lhd!&qMR8e0Qf4|PzLYn`M{V$r~ZT-Eua5Zvr_xpyZOf`Y``u{cr5J*e6 zFn1+H1QlC%{ArPn>&lZq9r`Kc_Nvdip_N!^o3tmzI+Mc~d4%2})7O6u;7<9`2t!sL z9O4B*^R*I;CZae~<^1>gG%*@OncQKz3x>bkXi41={&OhyNX@h@)2Jl;=|4rXnll%& zzM6iy{H#hAykx@IEs)1wuXK->GDZ`Rw&kKzTe^pAoVIkuC|=b}@&!s7I{RFbl&O%1 zBNZ}o<_RrBT;L$Hnc@ZRzXY&b__t}gFcqI=y~a9OkQqevDp^y_z*sl}P!go*n0$bx z(B-K>2ak*caW8LxI3rj-R(9_KMhpX40QioCUmYD#@meUE3g~t8wZ$DN6|DIi-a>w- zss@0o;iQHrnzmkAvBp#-(;gf@SS2j(i{-rFg6OF)%Se{Fk|+I7no((IqAzxXO1vwM ziZ`}dn3ji&dQTyBZ>}`GgaY+YE4TFxxx4nC-FGMD*Z`z={Z`tU1AgDEboAPuUXF4; z&!>xz@(~GUu2m2@1{fz1M7|SF?(_R?tKB}C7hoS&dac&6se}KzSjHg0e|l%?A{Sx_ zbY&8vgrX%JiYXtI6W~g>nQYCiV>~4w`Y^3~P&Ap7sI&pAZr1?qyaS_>EWllZDL~(- zva1np2_eH&EwUa^8V?R_5Dn3s4hC|~livOfEn2+`>gy<*RC;36UsX7o*51KfvXxIDBctchSJS=Mj&C$dh2vSPN`zzSxnzN{tKzCs*^R1<41q}koJt&`O{f1ZVcM;r z7|e1Io=mrHA=8EZ1hodo-s&_htN|!1>x;hVw{?HcL)5cPcyf~U=R=$|XF4XM{_W81 zq9bA#?GdpYS!55JPB6eD!aRXK7B(Xdwsbz~LRHT%Jh}fM|8Dun)UzFby@hm|5zIsW zx1U4%_BTw8?|pc?M>*O$q*&d$OgwaRPjSd$oes->)q@vx7T=sS)J$`KwLgF!r5Stc zMfb~Ms|mu!LRIZtFE(!4I(;_7$kym9-^5u`j-?;{E?Knw-)*51a0?85lTbUOcX`Jp z6|1qE3^vYeqZ{4vtn>vpu@rmrOyd^gQHu^s_frQX=PfQu=H^|FL{|zLgb_SD6MK7u z0zXh#9nHdacawTs#a*8?e^#iU3SBi?<~;NbC3Pl8xi z9gGjjs{c_FCms$2K{H|L$Fp&I{wC%3i3^=xrj5yvrw9|p1-SK*c<@ZZT z>B3Ic5~=aa>iVTc$wlcfkF6uFWB`wCdKXdu?G91y*Y;$TSbqCi_2^Pk(~67Vh;kht zW4MDk+?&T`-j&#z^GKsnFL@=8fD!O;e8J`^_I#b%@>wa@|MrQTAr0m7jT$ViTa^Fo ze*qf3uhC znTm0~{vR{{9V$DD_N@k&6-IRZ@PZT1{8jXcL_ktJ<94KV?!Pv-d^V>1sx>S9fq_&W zQc$^%_BOuzMPt|-Qy;z`-}Mx6dUxvhvUu_eZwUh_uyI*s^4^D7FHi48k%H|5ZhQ1e zTvOk0n#FdQaq>0><8(Fp$wQ=HJl#%o^Xl-nd-EYppPt{x^O(>!vO#Q@^tO#NrmrV5 z!^NycGW!nSJ-amI)Vl^NK<;(asUF8GZVQ;WGK4REkv2B0mtHstz}t5}Jzq3M zxl;^2xUOl1m;2kuW7Do55{*ANdo~}Lp$3YbZHd`hwNK`i+gV4ePgOo2xgTY_Y~LNU z%F%CrRv{4J)^f#g>_JRN|M#YRNxK`@suaz;mP(3s&u)L1U%X(R9Gs)YVuW>FcT~(w ziU_}XF!E;kqt`5PnxLk;uckBq$Q#W^!hv_F=$z)kf0|}$%2lq1eR3M^8W0NYF?{R9 z^s&5?KpV0elTdE;ZA{ldDf<5^2Q_C0C$w^~P2W|b1BI|;6oX(lzol+|k+z52yoZHG z*+l;Jv)gd*N*PEcO-$cqPEKCfMw;MBk_A(&HsVyTe7vANK9g_@-AoPv?axq(lvya-qbT4GMr2M*(2iT&%qk-F%*dE%PN zue(Hd&0+k);owiAZ|LGT??Wz6D6f-#wtUv0qKbx3Tub^3-^jX7s9bkBVD?MVOZUXO zVeikaW=ier`;2_I>AN~Ig)Ag=x2fBjy5i*R21J{$Vt?L!UM{rhzIODqa%PI2fR(8B zQZwIovN5b=OG931d$>uM*oU2^3T0ETw)>~eXqPzJpRw`yCSgj5lR(>DOz)HyCKbpc5|N(?_Qyrp z_YI&22)DTtIVwpQ@22!H5;E5ibR`+I7p?)8{4L{)vLi0LOh&eLJN8e{sB^K|FB1lc z(;BV3ORA%*{)P69>tyU^`p4eMx5FO2S%yPcg|^2+O)ivMy&vo*Kg9dA_)5a+inb*Y zm-SOmIpC})z9)6gTkM$M(xB3Mx&CCkRi4Z(W&9D@!@*%wX9Dh+=jdpjRF8L3C(xwL zQ?){bWuKXdR+_(Cw=H0gYy?E5-JD2>D)75a8t#wAW$g?|{ac*HO@!u>n~aZkEohdD z29N%-nUpRRJf?DqBmH15aBa`!t~sxoqYDxSjnEFdZ!p$3cw(E&2D35)FNTa|w^%kV zdh1)|m}(V~HDEr2AVnViv;EPxwyny+H_tDsKX|ed_{s_YfP5Kj?Yy~EQCUai1p1yM z%?uMNv>|FUai#@A1nY%@iF31Z1A_HMeZ-mfl7)f|y5;wfh3Ud{(_^tUZlV8?w~OYa zi8=|gVBPRT;y`2F+>CRlT0r)!3|Fv0SerD^U)vy<5|dTA&Ct7diu6lftU4b%6OMD7 zAkYMXNBbdafU#doDA9j+V)$-JdskMr;p;w#I$WQKcTKZ$+*sl9M=#hN4zXoHF9$-u zbB+psssBSh{P6D6cb(?C>qCN1VT10^2i=rP@bbhLZQt2`sjuE0rlZ1d0L9RTIv zUMugsyB+`u*&LbZk(dd)7%qy*kcD>J#IRiwO=hOZSP@tM*Qux_5332sz8af;+02gf zkWOekqm4N${OHJuS9&bh>}@^2MY$-M4zWWo+L{J;gnz=dw`Fm$A}@sJer&uVKUam$421gB}8oxQXDUSudz1D+@HJe#dDE7YEyW|kKBfmfErRvaW z`pLitv_@;Y*f&R|(cl0e!Y>d7%{z1W#Lm_So$LC8N zA|AfcfB9kbkBMhB1#+f`cSLt=$Gyt9{g8HX=}Kv8nptPqgzOGh>?0G4qv{i`AknBL z(#0#+yHxbBn_E;sOsIIc%L5nj*Tw^eSE>(o2?>25DTWIY+|3{C%(Oz5#|b%U)A56iMS66{8^|t zRWMVb{F^^cny0{ig7rbsT1Wg2e1ArqCoIv1Er8(XU6>?nNt|hyxZ)RPs{&E;NE6=- z#Vu;O+g(~^pY{ZVlFWNv99(sdIV!?%Ipvum1R5|2~q^dBVt6x&Fe% z8^a?PXveM(5_Vr*+I_Wsw-RCduNG^yeNs32j9V zEn#~}scdI-#zl*r7Zq>)e=MDOG?f4Q|6j8h_t<8!hRlqekUgZ#jD26S6=^Klk}XNA z!EH@Qlu9*rS&C9g+k|XMlB7~^dq_eX#rWNQzP~@5<2a7P%eZt0rI!v}Gsah?T0dbYcn_S3D`=C?Zcp1R`X*s9LQsrysO9w0CZQfk zgK*&hv%I&bOQJ`k3N!9XFA%Ru(NN4wJbvL3V~{H9RdPamUaNIcqx9u*p_Y`{K0uA^ zjd*?{Z@ho&fn$!3K1?43x^f0>{(ENN%EP*jqt{Awx1m4xmVJLC z7R@SVb(}knm$v1W^+lMLjPdD5ym?jAfz3G{RG7B7L&8g)>rDU}*!N9+PwLa%0z*p1 zZk-+`G}%b&HvPVRFkz&Qud#X4;Uhjd;pT_c>CZ&-A8Wc9Jqv3Xh5sHh4PT{xiApQM z9mr(h^IX^Sf{%vv)J-G@oPscxm*F1}M`cuTfZZy0XA_DK;qh zUH#s}-$&Kus{~u`-#p9FoV-Rl)PD@~@IzV6gm+2U)_YeflL}J9JwMZbv!chi4hI;a z)e9O<_H|)gK98vM`(MIid}$B&<4@b`i|no>GI%n2PK4DHvO`vNH~RcG#Vu6oZ*rUI zN9yvPnt>=n2j}DdKHH!#P7An6N{|s@Y+d(a5yaqacEl}@Uw+hWLHMHJ9bOddd`~A8 ze?K2@fGM~uF?@x-WMJA}+Ezde8@QH*1m}W=&aHDnkEpr(ilzA`&YeFM!r9y3e0b6) ziF7>GmhS(g;lWP77~6t^t;rlgHu}|Ii+lxZ?aoX0-K}?v$FG%p8hdnE@G^H5ZG9kh zWBhWj*lV*nL8aog0n{kCC=p-3f0%GZyp2L^_;h1x* zpQzNETU3PbkcA`ZG{}mB#=`sPRLG_Y4Z*E|W@DdV8f=z>4jM27@(?SAkd7FT%sb6Rg$X#Tk%3jal7*bL5^X2IFvSEQ z6L6->5;LnM^rJ11EMKAK zAuSqIsI#%R#ODxQg%ZG)ih2V_8iB2}EUE~SX(DU^G#TREp-Ei(67UbgM-or`GU+6u zJ27VS-9iSr`^z{aMFliUd=t1b#u2@UPe2(HuK?u5@I{%1#Z6L+P=teYd4vwc^mXZO@Ir{&3!cbeSQ-iWBl(0i~RlYlr7-vJ_wxm5b(_#MH?+LE@{2I;hVal?rJKe@oERH73LNY}t2qiUqH%1Zb zZX96#gC;`cIWTMTSdG40S21`PQN@fTKJEAM+6oSY?&vN;xOpe)NBFH1c>Pg zm$qfVCVAp9Xy6+715wCKqP8IKN)IwPXeG&+b+)J>mVX7ZC&ixAB9(B3oZP*-yE$pd@3vYH`tsTr6iK$RO7wxL1C_5?`5=K;aMgD@#5tpN@|?_+2g40J_%2 z6h^v9@}l`seFDXh3lmS%SEq6Usy&<^d8jG;Iw?YG-`0uV4aB$VB#ZSYJ;nRfUKsq# z7k~;n6gIBd2xu2x*PN%L_NNq(Lp)8Atr1LHCb}4qhA$tR#?tZn#N=cMM70f?-8^ge zVW`I~SW6qD#es?DD-R*2jajx~2c^Tdi7;VwD}AZj+g9u2eycsVi8Tu34v|4`t%iJ0E(US;q_$npg{iX(nbf z(fbMGAG3|_5bqtd-;GOIZ{+I%Vm>UpL$#5U`ga-+T~4_MIlgGQmk=2yF#hVn;$n}V zSlZb@o8m1C8LSM94Yjw3dF}Lc+dZ*j0*qdj@ZvZCfmb_2M%E$5!LFe_eel)SBd(#v z?;bWqx%c%n=%W0WU}_&#Td3D zgMps6I?xF;vpDgU)YT{@3$SGCe6`Xa5nkJZ%xy7jtQCrg#x8%eqIEe{0Nimaoj6-7 zD!iGE50zsBb(ppS(32l@GQ@omL^;YeOYaf}dfSCqme^dB01o@~!ocqaLn5;}tx>S; znR~5xoccBo|9yB!v?}k=vs&cW<y~fZ! zsfV*tr})3C>YD$}C!yBs-cn(5XqYu&!tkTdbM3a|qQpRMM&c{G(U7gJtFfoI3%5Kx ztC=kJHkArSzv+nu0xBx8>clW#=SJ-vHggleYGBoK-QvBOC^|GGV7s~KMcUxV;xM2* z8qz;A`P@i%JgC^KCwqE98}ja=30~E_bu*e7ePA+lnGVZz{#nP-)}v4Vym_L5xb>SF zO^N@*ML~dx4$m}FF`E14XW?;Lq+~5%`NrwC{a5#BVk3$OT*j3n7`ynhe1quY6- zL2zO%&gJ+HE7iBx1L}OOjxp@aW~FWtW=}ld#D2=!_Uv`oSF1-iLHXe3fcHWZ>&?dJ zd*90#JddE?Yg_wO7T|en_}bUDPDAB~6Tb8Z5j03X1EYpiK}C6{@;|zrXZuDj7joZl z0yI9&Elg!Idi*5AgA2nvB_{14>-Oy$7FG+BM-`)8{1f8lc{YrIigKf37wUq8+s7V> zBSO6Z&+Y7ui_zAWsf*mDHcy@%g&f!>3|1Si?`R$YrJ-m!U%X+< z<&z;ttG@k;>53+)#2avz3yO_J+%vBiCtvs%q|_7vVMCFOK_#X)udYZNyCgoIB|GhJyuE1g?Du zz;*GnzGtt?eNu~0rou=oR8TW-IDn&07X#Efs5vEm1>bi9t-mS5wpGj8Pn|+}@4Li|0<$V#7}8p4!ehv& zfZ5yoN{Ou<0swjxu3@Psa&?*gKg?8PPtM;XYOJyAr44#}dgos&)(yS1bV+XwP>#-i z8Kh!c&z#SQrP+J}XynQrldZ>{kvAr^8e5)KABed1vWrVgvOso5GxbV9!(Y3@ib^-%~*f6 z)+v_ZVk8;HQX+M4#{f`8N!vX#U+NvoWF=a!dfZ_>7hyvKVpme4a0=IG$n64CZ5Xo0 z_0X@+^^2CMPG-!cklts85RQAZ!BQPa5ULyOA%e)V^y@D>u>`MqI^;s6yF}rBXcuFK zT*HVE-DzPI7uC2jrZ+U7@>@16?%f?f93Ru*&KD)2MkTV#2M;?oQ2eq`%ob{tjkBpO z(cCl;BQa%@*aa@QTttO23l2wI$_n7C+ljRc`0q`lsgrbt(`GY8k-EYUo2wic1CMoX zFst}w`Ac~A1P3PuQn5JZpC(I2S{7P!gt7bD)2etUFKs>C571JUmP45~6b;u1uu>J& zUHKtV#2UJ$XInj8*Grj`7kZiQ`;^zrj{f6Ox)$xbG@5Xe+u!`GLtkJ<4`Ui;buj{Q zK;r5SU^RSp!H{#ak7&-Hz8}%4m9|5FLI5w~wNpg!K>4%p#(A$yS_Q)EofgL|D4&UI z@;NOB91a+A5qXR){o-E6)eTRl3ixEeGs4~`XgKgRU- zEFJWtgTz~Y&xsGKsfLI1e%kaDo}e`Vv2b^>=*v`%%SS%gO17u;e;`ZF3hG=I%)r9> zwT@8QbL;m?YHX!?B?0|wc;+sW*RPCwfE$i=zM9c*_WknID|rX=#4Vr`EGQLKEjg^Krr& zn7e!}D$9J)^eHUvf@`P5+0c0hZZh4~KQ`#Yfj>qDtw=e+<#1Lpo-^Z6X1-G9$LE}{ zeJ)Guou%-*W0|SufdvU6#{)3!E|Y8JB3pN8z;>!1DcNW36Qsg(HTd&=|5 z7OPt=*ej*U@0UhvuV(QYw&pY#A2+E|e0bo+o)nwU2#D{TxAt3|t&WQNEu^ntwei^= z9pX~#{rzavoRBq83OchJ3)h`n-=WTOS(=p1oaW+#Zi>m5+eMds8>XygO$OgW-|Az1 z|C}=x-NsI>Rq@(;C$yNDQS&aK@>2VyqbmOAcx>V68TZ2{-#)i;czxo>f%=vyt4km2 z?+vERFyFt}mKgm=rs;UHt02i$$)WXW;$W4-l5~>rHnO8)RVjp6WHO5+h1AZU7FHtt zSxE}mqndoi2?}XKn<#e0D+TyC6g<22z_jF`W4i8NCu%v6f9E33C%KezH^bkF$^`}z z2IjkEVv|mow{$fh-#06#mRyWvA#XUNKxg0mM!&hG{Z`K`YQs1+^@q+2)N~8Ux)!Dx z9yL2UwYN_5o7Zl%@xqkpL{x3^K!sbc&ATJJJI1!3ySucy68hcWF!!Cw*ds9iHmaPFBCqL`eN?WW=pBYI;T$_A*X6; zYINGD5^aBzGYh)vA6eiZs1*~teA>-sn?^lta1}Y@Rrckl??$GDuF5Px)6IXBAFs1+ z$Ku?5e+{jJ)Uqv@Qmacoe82YH8s1<2W8XBIe|H8%|A5pmNbfn&?oSToefFd6_AD6p zl*iH?u`lkiPkq<@8$=BKjIzH|vzr~hH4Czbo6nuPN$uJP|8l-LJw`P)-60THqDYx4 zMa!N!h=9%#_qygVF+o?hD2SGfHMg8#hwJ(2%a$6HfCj@)wp`t4(c(w+50$z%p9HF% z!L6ON$X@8QKO7`}MEv>YKQUa9S+jUs-?)gUlM3hJZ7Cw6+n-(CLoJD6yzP2wmZN+( zeEZBdjE&^2%|vW=al3fX<=!5(66sa{&AWx$`FuaEnaRHRT;KAcL3-?_Lr3quufj7{ z@V&8*=Kon~tXuAxKdv80JTm@jSS88F%UQ}Ajw|g8|JQ3mO+(e>A|2Y-4~P(Y*Tu@@aKSnqHbXU&(kd4Lc)9fWbTN-Mc@w1<0$>P zsyBw`?e2bxhidCDt2|(nxac9>i0is>?zV?jZ#clV&et4 ztN!g~Td%gj5VJ^qK?efmWPa=(fd|F$5%10Bcc1#pO^w*!Ht);Z_sG!K;`%S??U64< z7WcPej}^YyUlBg6dMhZ6@Fi5_bjZtHTl8>hN6M$JBG4;J+|n?Uvyyua?v z)O#}6uB66`&7rG8&e3QV{17NsH^qwXK-|aLF8F2gFv<ZHO9+rxa3XvL9m&4k&QZwr-RbLInF3F z2>;89nRI9vz6*qqcpD&UUXWws(X)i;Gl~J+uF~WSk6zrjXoSD4e)Pl>i0$@+i1l%* zCSIkZg{AYD$b3ayy)w4uF$f+8Xn(vBP|drv@=Z~@Ksl1N0=tS8J6duPzM0T#`|@nKzszE&%nu(jnKZo{&u;E zQoL@On+|hTc%KvCt$89VBXnXiNehrlNo+c~ehD~cSa5-Tb32wCNW{`%Yc^IJR%T;m zxJ$Bh%ssGuvWZy$utu;(Ybz-MkeUCZV2SN?(N}{BG;%r0Xgp35j1>u74WNY`6S;E|K2rbg z2xI|mL`ik7I?-^GD2E@pYe%R3QAHSGb7DUN>f2PKbcGtZu*kc2p(wQ+ zMZT*Mgk|r(#HHzy4TZ~lo8iO+K3CNHoJAIFmA5(f7)`dEKjuIWIS=NSYq&>;4R+)s zGbAZ0iog&+Q9ZIwr*r{ggEC*W2UZ9GmOsGq!^pW7v~>V##!}I^yhST97En*>vWX^k zcz3l_WGDoPM#Qr&;+_^)rQ2e|9Y@z_N{TmVPiN@PnfK$j;v9O|Y&0>M=nbfA6=H1~ zZuUvBTA7@i60IZhY_OHZ1`qkUz$#+$Gz~kRs5rkCM0; zsZ=)Le=4A2iBbfNcl$JSVy*BTK=1|tL570>sEj-_)@qal@d0AJ2*CeD)1hDZZqtJ~ zNAm$qdP|qhRbqNSz>{Nl)tLWC#H;gB`yF&@4ZQzwv5;~N^{3o3tx9K8taCC8q({Rl z&Od}9W+q~iU{d44zxo_fH+iHFfpHmlIO$H zT-Z!v2@%Swkf%vBjJ0mLfD{9q%2~;~$U*$ML>jsZK2JRGTT&h+n@tDGj{1M?s($M=&LPT# z$CdP@rj5>(4+j+1B4FwQWq#&tpm2F&juMB`sbNHzs5{TUv~=JgBH5j|4)ZT@iAfn7 z(hSHX{jb<&%wIu4^Ys_n61dMrGDU}+_>SxSO5SAtXQTOu=2P5R-iLOVM9Cz9S(qAb z_Tl~4y}u8`4GryP&t^jo#=53rw+KCXZ?_osJ8M;IvHYX-We+j)_3Hvd)e-4`JtPsC z`M&Aeqz286$S;}wAHO_38L{^eM7IqS><71Tw|^!?iP19fpG~9JmQ9B<)Y<%Hm{#Hg z0ENdn)!F@E#zOYpY%)OYEQ+QEJ(;ysOEvx_RBOcS>>E|w$r;Po zhh84jD;$552a5&QiNRF`nfxX#*I&29dE0eV)sjX5LDM9~ydRlLB7G|$3fUuNQQB&8 zfIcllM}8BNdqyzV24GD18CUE1uXf`VQe7JMFpYc!yL2GM@+-{No{T+7EL1)+=E26p zz|pqNs8PFjQ`wK*ry1dO+`1AVyj!6>sZ75m@0LX9x>TY55dkj0r%NE^to>86JbM&H z5V8w^%Y$qv#& z9tP36x03oyaPyy1HBE>~qo6P)0YvJGUF+-qAoN8>sZZ$2Q#F%&)p;5ZTwj%g*hOAh zX5HHKc8MR78q@UQo--2WD?Vy&QHYhuRHWuYlHbLalVebrt87UA-r5!>!9S$sh=ic^ z--@`%f=I%W3o-r0QT|qxT4CJrw7nUrwd@HJ&dE&?p!ZHS*}Z(y?(zx31dAs4inpy*boy>i_R()7-p*FyP01;3Kf)r8_>5`>o(lO0Zsfe_ zoKz#s!w$JiUBqNoqO4kb;+fAuW*rYwDHEpogpIv(m+8AG^KuI#Roht$mLtt)_SfG( zqT9Erzv|$plEjoPILwxQYZvr})u%_F4O!9929AK*+W%sVCzZDu4emxH(FtD$#G_qkcr8 z$dVl01kOB>KffKoyG8tFt+N&g&club*K)|nZG9F1Ocn}C`Y60aFi3xGoSX$4b`YMU@K>rDtRcX|(Ua?G10 zYoOb=I9UM+z2%Zo$c~CpirG^iJjo4LMr(ZT0Dr+-|a?q z5W4gnU&oIA;aL%R$x?u^72P#?h`&Gk5^Opt!rd%jDevZa3G;;3=PwM$a;)@c@|=7+ zvi+X3{e!s?_I;1G4ziYGw|-Xb%x&QCFCXFei`UL5b6D`4ExOp9Tw_Z}o4 z-+u0)9^eI!Dn^{^+w%SGj_D{<(RN`Mxxig|JFH%rOn-{{y6DTUxzS;ISb%5L-{kwO ze;+Q*@A>1XI5Ef_cO&Tp<(u58IgPn?GI~K9mF=iebyh@OHNG>tD};BfbDUAqvREU= z%oKMiqo241DAfpQ=>``Bvax09TF+-40Z!e-@_5>< zISsdGEV#G4-_aF#v0xdy)Al)1;{ma|*bYGTD$=tBDFuKkFhZ3i2OcInk`a+PtABhk>iUfO^~NK6%h-AJo+NUkgF%KX`xy;6%u{<1F*)S02Xa$~ z+|Dzsry%ZI3mUQJj;uKqmNw{@iqx;`c_lbixd&k=slbL6e)Ue@6-)N^QB`2xGj6wC z$Jng4a(RVU_bC!cQJTu1*5sbXz+9!|)qyQyL=Oy|*3r{@@}a419~Kl=dHu zY*gS87HR0(fd^aenGvb@=hWI-<=Y2L?%IbQV65qLd0;e65_Jm2Nt3yNSXa+eenWoB zb_jF)8c1Us1U zU7vr~+a1b-5xWZ3pQ9zJu+m;UMq*{QiNzJ{A^fy3@rWrbcMyUU5xLTOty(H5wZi~>FbPd z|Dg!K!SjhY^=!&~`=heO&ivu3PZ=I|~*+2@UQXtf>Lb zmluB08ej*-j$jSbN%+t1{moY4?^sW8)7q9sTF=khgj@D9_>CL$Pm~=az)JG+D^4mHd z-fTST4YerO9S|&HrNt4y|7sKzFXO^uB^$A00)(;3P+QnfAjp>I--q7hD-BNZ7OgUL8m8F1bbRm}J92 z(UyafuXSFF9_@O-aRP0oEOOdbVt=Qo5>E3C= zd=&fM+O+wHBn}M7UpeLHk5^n%&Rk%o4>KB02%DfdQItDq!Q}1XwsY@yFZOqgRv+H4 z@jc$|*yr1KEzGvEQ+4&h`UeTrDEPeC7N(tO?kbb2Z+)jyd8*gsYCO@|V&$S*zPPI* zVQ}#EDAAP)(EJ68hilMEV-AyIVEc3Dm@VW{EO39nqjyq8-Y7TVcNTMx(#jnvqxIb3 zW(B6v$z;DFOo4GxUE!I^_w`$STmqhP)dAoix(40Jv54se#&nu!h&$0Q#aHEIR zQtt3#o*E8+=8t8{us0cVcH+3_&!mph^J)*brJw2Sbi-!6T0a->rEXN|#HV%jIOobG z81O~eyLAVj4^uzhe15LfVt3jlhT8;jbhf>VT(Fz}-6460!q7Rb4$nlIThsQkCl`&E z8QN#eO`A*ICY~==x2n&qzpd4yUk(!O@c&DN=vE1+kZz|Z8t;Zp%&&)R8Xs9p!1YAz zR6zbt>`s&oqS;El@qnT`oP1=?s^rD(bNH&Mhtba-UGF<3;Cei@2-X;6_>6`P*qm#nc){K0a-jnrGVL6>a*+J2O=ANgkVdEMjY@0c6A^hvCZ zpdE>(UL2m@Ro>S3ygwUnQC&}PSKg#9)tu`>pG>_$==*tcV#r0@MDW4QzoPXf?L2FJ z-j0dd^Uv!oe>cV{VC){$o9NzuCH;h;75G^)y!<>aGqBTKUS_r-r0O?*FmT#B+ePxYR=rYV9VxQTS_yq;yEQ0b4? z_%N{tVWZC{`ux=F>>xjQwL{Zx&Y=SJ(tND7#PkXDG^TKD?!vnr1ux>ugCd{z6+16? zYjj7*x7`?5;RUQox~Hg$_P30|2$2gBpZ;fn1jz7qJs`Ak?azB3d6# zKAQ)#v8zZ9?3R}w^^*Z{H{A2Gs@9C(@oH#P=edWcEZ{?CbvD-Kf98?rrAC|o*)B#C zoAga|Nd~+Qnn>=KWl{pKg(jc-rImDs*Ga?Yew8P25YMy>h$hKK)a^(P^bOBdqAHMiw`_?P)@P!?7^7cn}A ztgsfuFn1|XmA*F5wK6+@wm6(d>iipIK$)h(F1cTqAhU}|W#8-~lXyfWgIU7!N3uLb zs>>9Nr3u7j{EO!rU|g&G46jH=+XeR19VfXbK5f_G`KqR`9@nyei7~QzCQmXfyrF_@ z^ArBOx`)P4WBo8IY$Zu0-g4L?LPG==LuQRn8KB@_B%4Z@-$XOY`Mj1SZDldpZ?!lKk^VnLYYQ-mo1@4WWSQlncct_b#Zty2)9;m+^h;zX=kSC#WA z6*uhW|4C0ZtVI2=q4AZiUbAf0pXG%>%&`r1sB?`YLHLScy|cgdf6D?D6GvegWRZr; z4+?Y|U~qq*C{WScARCBnz^3MtyU-#uaX^a|g-}9=0NO%P8!N?B1N0zy7E;=F0G914 z|K!p;09H}K1t>HBrSSWPN$u)$1>O@;#(J0gpc&dUO%_IdQq z|LuSzy8t_y7QniR8UZUB!v5YO5z%gldJ;R^J_8Td=3U^DX7Q7NnwQH(+d{r5)w~oy zPJ%*F^2F1Cw4T*k-{~qZte$+5k~up#R$ppcxvPO`NAuxX>K( zu$lnx2bk?G-|iip%L6&z9xQtS1uiTL6j%tfjv-3}<5;Y-SjSQqOb0s4LR(7NPz?=X z-Rfx405s8%sIsL9C?IgR2;uZJ4Z}t@10tgblUsS%_E2)JyJJLTr` z@A4E#d{Yt1^USbB1RanCo9C6m+|An!nIr!>8J09eGi_;uTuv65yvPiTv%EuH6RU$X z5rx%Wn&{`%8^iyE?M%Y74NS{L?Cx6ErYm9-F9i^v?$2Np@%$miECQUH7xBC^ER%S< zAVfXw@9_SPmT8hI3_YZJgEdNc7NW~5AVvI z8oF8c`S<8Av;R^!yuCH%>v_vCnS+2{w5*fZ2+meTH{XY0iV`8SNCNdvS{A$720&LFR?Iy$Tk}W9hEfT zv9bHDfNz!g1t2b*Mfb;rZMb@fd+hVfYU5q^_fDzX zv#B?QVO?IS9hYcCg$+B6@2Kk=Ynx73R-^i22%nm?lB#&|~jL|7?V5MrQB68+&K1vP5)vYF^%etQtcw;bPIR z#~>_LmL@U^aIREkh}jR471xDubQJ2dY??gVG@gzZ6=h>_6?A~zgM9cyRfR+&z(`=? zxmdEfQTPoyq+<3=)*TQN{7#RR=~qInSZYErGY>#haW`RF9Y9A&*tvGAWg{{Up{Jo@ zbkKF-JDPa9_mpSjV#~RPc@VgJ&z5{pCq_;S7j_{6WwB>P@5Dyv5Pgqw#(*>{0oVr| zbq*m;Alk?xt2~rQ=vh&~MN5|y0i#ZvIZN#i;(45Kpgc1zf18Wwd=$vYZ=bnefSAex z#3X@0RevT`Ij-Mv3^J6b!YXvsjL zSC~LaTs&}fnKl;F(aa2LDHLgOw4Lt%KzjG9*p`hp#kAyY?#F1pDm7FaTW!w3pMU24 z;APObS}HmT^gMfCVY1cVJol%&Tp^1oj9IT}?i}H&U-3Bkjjsl~$a~SYvJsKwl9;U@ zY1VO6pRx$_a+f~ES+4*nV0a%}J53k0S`n`>O5kg5 z*UdL?b{xg+x%2TZvdfji**NMa|J2(b5xg>F%@#B}4>H;l@0J`s=_{JPNjz)zaYr!5 zkH|c!DJ!X`Ug3cjb@s|Jq6wLlCD%^?(G~3e$F=POqt#oZ$0Sz#w!b>I@K}f(xaO`c z!SD9&&{Z!&cx6phNET$ncK3W`kfMaZ^>iR=9Yn`3!sw;*%B-TA|1=<@sQ-@FdrOI5 zY^ki?&i@^;v@0k)t$mlcMJaf%VD&$2J;Zut9Aeg)O{)r`T9F;5lEpLwulUII+@4?RCzh2m8R4rjb3GkQP7&KYxO(^TY`OfK7Yvu&^}_( zH;O=VX}O0E7o|^fQqN$cA^G+_MxgwE%IUaO4;ePv5gn-Ibs80`l`m(I9Y`&iM7(P{ zqisc34$BClj8%^HIawssqf~m&H3kn1 zCjh*I6TpZng?XrMC(nFD{DFu0#))EFtkJ92C)Lggy|D-+$DP}?EUw%uf)q=FGf)D= zblLIS-?bv-lCZ#K128@drbw26l;&d19l;-UdatUrI-y#bHm1rsCja|{_Mmg7Pei-V_bAb3z z8IL8_x%>pej(wOU#_nqs!5FKBpp=!)=st-b zA1iZYC{g7s%3LkiLFl3LVsLPNn19Z_1~g>%F!;;kHstAFuoSXSL9yeS*)Ud+=%(Vb zQM-0B%K_OUwjJMxk zKV>REjuAnbG6YC4-_;AK*c#*$xB*aAGgZ$s(7~wzL~-OROG@M{_4L4K3~38_vL+Kj zA*qIR1=fd5EwZ`A_*d2->;zQLL&7Eo0g)=Dr`}IE$Yu<(R6B&bbBsp5g0 z)Nnb?uj4{=wB6Sk=k}9w050riG22f3cks_B9UhZQIOA~3&d^lyM3*nkGT#AtB}eEshdJ{0Vu^d}?`wFNd}u@Ou#1dO?l>%i_sa zbLL&9=G~IEo)e4+x@}R>x7Zz8Ry*28C315#w(NnNIhGYvxnQ|7PXYPmUi?_!^(3(u zN#q7Pe1!4d<0(&W+FQ=DbWf;8;_Q>*CAv-DGtLuFV5NI38oS8*w%vc@})92$_3 z%()v)jS{x{6E*5hSR6W-yBGCC=%IZ(l2LWdOV#w73f9UHaah)AIe*X#aGnc%ba#8i zj9uMDGrfMU&ol41AS;y~;)v0k=|Yqa{Kuj+Y#{f@7~CDLfEL2kW3joR-iV&NtPPP8 zzU|-?(&59NF6LUlF{Pem5HO6&Zo#ft3OiYtq#~vuF1qBrS>8|kE8dZ$I-pPks2W*a z5u#kQQb2%mjF))5CyNTU20nkW!!5i|BdQ%s6uYI!hh9OV@sFgGBC|^*MILRnA?siHW9z=-W_1{YAuX3GI9M9 z|2KpN)VVmyMWAEBPX`tuRZgbS3k~m@ZTnw2j(Iw-V4VE423s3!_}$ zw>O^T^F6}o&D{%kN@v2UGF)IdP)e|{SC1`Jbkn2K;ZJSX)zyys2l-j)<^?D#i|;!1 zC(Q{d6NpA6boONL_y3}29!TUC|EwJlwigIY;_bC;@fous%s-ZKS@`=OGt$#~v z>aHm3*XYdLQA4#f`r#fETkdSK3&4&9;gluwn`LU<{vboLaMiw1c=Hz-zP3HR@-39H zU(>9Ad(mXi$wT{H|{JOaT)VJ{$2c8QKCUjd4HP+lVb#D&+v15mqUsuBu zYx^4;=XlT3TjQG2P8DRd*ZG}DjXu$V!t_59eCuJVFC4GE4SZk1@FjsSHxJj|SUA`E zXv;I))XJ&Xvqz8#Pr+$RZX6(HcjR$){qWrHpN%|en9b+ZydLk$-go2`>NxlB$P8Oq`A-+*4bKY+SsAjG&EM?^TKU!3hxWG0=PFMBP zB{s&DV*zZMkdjTB%R2XV2yt%768I(R z_If|x&)24Pb-d5dXKr`xe5Rc(Ja~OJ41SUI7T@-O38d+3=jn`iiEw$1=K1TRMxU4d z`VIWtJ-FBJ>zk?q+dD6b(vG9Tedb<@5`+CKDvVt0w`dxZO)d)W);iqqrZX;on$wgm zQF&dr8j_j#m_pt$a^by7a9#ryS6KIc0xBkr?L%IrFsV4^juu@yoiKV*yvQX)LPT?P zAIH4tpb6dFN_I^v-zLPTvCpuHMCT8Ojdy zenYAP^d@+RjE3G`>Z8PWB6?sg%mh%RaDR2;O2p_AEP-S?W=g z2_2n&xOmg-oT%xkT-M;%`nk6WdZJ*FaEj$xPb{`>q<0ri#W&oHzwfqO5|nx}?{Sj@ zUw@3L&IT_xB#Au_ckFTA{mMzMm_*)6zul zlUey?WBD;k!u!JU)tjQPsddvb#B}csJa;S>H%O~OboH0?^k@jz)u*}zo_4#{j)~Y13xpep6 zSD7)CURAY=sh|qnJUr%TyA@$uefuezQ=GJ{Wl&alH%wQfZEU*I_OwXh*H7f<0kVZ| zdxL&l*gENsN-?Y|gWT^2yWcB)!KbJjR;6NHuJTI~Hzb@RF*DU(ye1T>`QlR4ethmm zb{+#Feq)}_2<&n=muGJE{ESchJyX<^D5)r3boJNQaa%p+!G#8VQ3Drl-QF!Z(N3R} zxq3GE^at+)@ysM;A)9Ww!D52P28_+A4H3}DWtmwl_c*(&8MJpF7P0bxtw9fo3BFaS zt@we& zyWjeX%Dh|q^2N%`3i^=|vgh-IqI-|+ZjWJpH}s3~0?@^rtXmAYv54hTt>Uv2I~IdT znQ>_DZNGK4uHjStnTNAnB`X~LjspL&+w-@;@>kQO>KiM#FPE8NGwVkfifyfO{K*@> zEb`C9-A%ds?e}yVU!J^KgP!ygAKaI6u=SjE(&kz2H_)8iC&?(0=qhx#Nz>xldlOBV zc~kQr7f+FC*EI>)cTWze%||*t{PVq2V_}5n>B$Jrfr;apZLOW-`+`%3lCWidfz~cc z13*7*1(KbXCZ_8I%tOXkq5bC`$i8+sj~dEeR9KC4S#CY&cqH@YBFBX<4=%*L9!sU} zQp!PuJz?1t= zN6!cP#vd57UOnGT{x48BUrKWC0>9fszN*2!{_??Q7e4u{p^uEHkQ+q3$7w$YW890Q zKjh#=T|>GyEc!(LmL7irGU`=^p$FMhNsF{57HPMGF3Wr|ZT#rHn9;9J6k2I)HoqA9)P zRrLV7%ZdhgZn)MlaK{TVSQ<_itHORjP#8BSv>*&&)r2*i z#6whnP}XNbMi0S}Um0Xeg>TqhuxG=Jf^MR=0&%)E1yN9FM-T;EvN$miK+vUd#bU*f zrw9Zr4t7-t9a%hf?(Z#< zj?71M*^0lzd41Tt-i;JPSPD%j|CTNoYeZ5iAMGMM-{A`}x!GrX^7lNoFSThO{b*E)JN{$pzW__TBPcnaUm{X?3=%&bsdWo9`BO)7&8;k?jnd}sH?Vd@@!Ix)f$ zCVhVk1mw@eeuwA|Q^}?lbX5UZWZ^{(l3DH}5ly)3*t7K8%GBjY%V#RrjhFK;4>9zShSYH|@aQ0k-_}RCk$Gf<#B_fCc_dx2t?EpG&&1F>Sbi zuO0yaj(G}&q6Y|pg7ZibIElrRU;4PEyQi!jVS~2^LKmA2godFpgb||v z2&F;mh<%J~me4V%4YB7d=ndfG|;`IUcFo% z{XjvJs-a)izpmTg?)8ztgqjFg7Vk~e!>)0p8sr>@&mxXHqcrH&*rx=3BGf^Ugr}Z{ z0At1`>}G+kmB)cNdyx09wK6Xqw>@q#Oo7caa?w;CtAA>WeGbz(pYKP`2ZMZBTs5$I z&U$=~HByb?g3Kt$H*(kmW*C+%P8;Mcg(2ZvKoeZMXYs$P&3_e|rp`!1L&u=AQo;b* z?q;B{|1kMIMF4km1=!Nf>A-;`&xwy6v4;CDVR#xi+!#lw6NG}{@L9;5lb>LnwE`wf zDX8NL&#Rb7V~7~{S8pH?M+I0|m=5w|w&UV}fVCLB*7>Mq&Vq!)f_-}rojWq7TKAhE zj^{+hym?*+qW>ZK*PlF_hp>oWmc3wM+L z&pN_8w>8w9KO06B$)6dc;__#hREhGLJVat|5d6=>k@&O2i<(o}IsjKDzJ5L196kof)yq}Ww zcJMI+o|gTU(HRi9ssU=A4SNb3S zxdZ|_IoQ`^)gsE`?TI7$#t!9dv_$H~8xw55lq1aX)E^|Jal)BtFSbrPwnS#i)DN@D zILv||J3NZBLeSN+Z^2EDxS3W4?_`gg^GL8zsA9m$VY6lWPga7$n}al?L24T00g#X; z1#wUTRktWInd{0ij?ghBf(#0E4*e)J2tPCq(1-Ex52QdpA{}x$tj>c+3X-r-_oP9m0Z8|L zX-&caPCkVpxZV*Rk7RM}0XB$2nDM->@|bjZPa@l>$OG*3TS|$e(fs8RInN zpv^&m5Jv&z8$13NHV{dJSRGCE6nG$j7bqdMnY_96F!IhA_eb5=B7c!DTRxz~EG5WQ#n` z=3Q7gm@)K3rsFD>CO@L9=(r1S^Ale!%SrsP@+3Q~*8nNJS{8_iL@BgY)U}a>WfA)3 zoawFU!jsCDu5_NS)3<~IU*QPQ5jtWQmS#=y#ojfrBlrS=pLoNgdYhMEO};>+iD6|a z5YIW`=t|{ z;*&ZQA$RoJpLRjbWCAyitsT;~BTj(i@>gqKacq8up8zIJ_cHf0##47IFQ%Rs)ZZSH zn}$rsQgfKpk;BTjPn+@#Xinxns^l=`kOfXCLXJt-!Vj?P`qev4+jta%#KS_waaI6@ zcd$i+j9})?c3`hmC7>N2Ox#l{9qsf=Z5efaY2Xp~ShO(R-(lhj5(kDYhA4iW=Wk>p z*q_Q6Z713x72_c)hkyNtn90k}jhVDlSMGQpkGyv85$`zmmczh_T+V`)Q|sHNC!fZu zhsF9I@9O>jq!e;ESoh&xy1vB0?~f*+eV?^&Ci(xVhzoRC1r+c(ok7Z#gA)8wv)%Sd0_4oSnv}}@dqYfa`v?l( zFY}GH2Q$U*GY4fW1q@-i&B~;y)o!otye5fLFhS zT766K(x$$m!8=K0pLgwEJ&%UZXRJ>P9ww1-a@Fun-GPN-t$I;o%dmGP*Ot#3?us4qrr)|z`LHGH*V6t{J+u0lTa41M^nfYf zYl6~wWi5Gcu^zTVHgp~jNnvjz?5=8g3ZJE(A8qi7ee1!jUoEP=Y^&!#$F*jTh3<4< z<1ter0+{VvJ4|l+^Y=so$Gc|j_XpoVL@gYO5CJ6Usjd^e11gjeyztaPS7hD?Dj^V$ zIv;uy!AFExv~LIF&40>Kfls~>Hghx8ul@P#)7+Gv=GUWrg#AKa&J|5ajt2*O>NI)+ zr4!#PE}X7B{jjJcO#9>R#Tc*W=P}XSQ@$x29VK~xw$#sN(!+KFNn<9{Lm&RQucW4w zj#D2}Xd9v>PoLWTY}WVa3m^Y|i#I)qYa>)`^OiDl^LFXeZ*5@}mt__$BYT4r@}{4u zQGVZ+-zJW<2>gCAepzN72*Jf)K_hTU-9FoSmZEyH;^EjH_2t?YoW(*S{3pJqmrnke zdFWp@aQ!pDb8@ew>#6rb=jj6j+sI|ST1T5&|8FxqP?jA_BMB22xf)1w32bFL>2rUj zwS0%RoOxOHc||%z#aYwOhZPtG2CLb#hvZUTN45%De;y8iCzB}}lao`OjaY!Rh>{jZ zF5etlS!2PM?;PcCia;(x3;?~b-}w{H7tRM4-Avcc;M19`DIroP>S=;H{5Y;suBsX% zCbg1=5@v!=reXE)&=OxFSnnV}AAi5}OJp@ryR!ccizbxa|5mPgtg3oq>0=>PJ1-p` z-8EsK`@+GVN(NFp`01yGtCzyDX2{=K%SQOFTA}m44CI^l4w?M?KSeF!3_cq}nuhC2 zNl0fBs&y}NNW-Nv9m)Q$foY^_KGPsuJzMHDnLDSDhEupLvmAP@{tLD~=X@IAzangYz}^T*N`%-Z&k7&`@}dvvj@g2x=X#%HVNdAh<%Rr(if@zpMC zU*%$H)%p`llQar&L|ldoJr)~0guaDA_EHMpbFlWlCwq-Be5DYv0JCDv$+LVj_KHgG zW!#W`UvBPEfyH}vBip8d?3bUAmcgO)l=~O>!U?dr#a4)>x_&NN2os(Zn~AaLfhWC< zOwAhG5kJ8kF(SJwbPRGv9zRj~xHcW8uG#tX9dkEz1Xo&^H1%_tQ70PUX-onlN@g~E zE!VPbE(kCLdSA6A)a(V{zN=@2o;YNCc5YJqyR=|q0pz&SH@AG!K0V2)w5uoZ$*bgF z{TKvahPsl7f!gwxrSYyBS26D7&P<=Zd`f$*!Zwv22D&z`hOb}|?3FYKv#@~-V2hi% zViuop%!9v+SN5`~r)t#CtdLJ0HNuj2P_R>AqI8zPmSp4&%r|BIhY=>w0Bz3T;jqwmxCuhQ`UlUm2H69p)>{p#PR4Jch0L0J1obQw zQjTgsp_zB4SEKtCX@w&7$#r(YUafp}JXU7)-z238|F zxYA~jS#{F8=#N7_L{9UhuOTi{(mq z*pu_5{}|^0J&s5_Xz3AhgQ;6vc60V#I}t36ya;9HV7byIj>DEcWmiP`k<5s71ywZX zn;#noT!9l0a;Yvc6euDDTUh$s!X#*?hB>tenhoO{YX$L^_ZTz2gfzLC;) zn-QuxqkUU(t+v3Am5k*I-(gYt=IHS?; z#OeAtsdp?<8>2JI6?Zf`?qpq`HYPIgnF_(+B!wzk+lGB5LpJs8J9+B|9iS~Gn$JlI z@@#id*b;UtG80$bC_4w7ghjrKNxlvh{yyDjwU(NYOlba-|R3>>% zM(n4!jht7vSQ4g&*&gU$cOYR01CuI?43v=AivFMc^rGw%UmF(4&aN_}N-3CgDZHV& zQNW&xWB{F2IInKF#BoM6OQtTTO!-{m{l;(yBLZpKj(_o7*nc`hL-dNhNh+MXnKZ@t zQV}9zmk#j*u^(oUAQug{^~vINW$n0pUzfx!j%1pM!<&m{bw+(3^F(X1 z+Qk5ex0s8;#Lr8j7b2aP&bl#v2n#pwCeobtYDuMEa@TpCnr;8V^RMWI$uD8|1Xy6y z#niqjb(ev=+dz=uPw(9ttm0BTQNBS{@)C|hqY`OU5x?E|YJDcP*v30`>}oNxFoXZQ zL(y5koL2Ln1RK;o$&8xv`o_=0bI{}p^J}qU2~xy?42Q z>GH7Gyev@=LMq&D+NRvo3Ss2CVk>|zr3K3=i0;N3j4TTR;C9-}_fl+2_{%gFRRRyLpLRWD zVIZVf=XnT8eU-p_f}__Z*El~6a%-?!Zs(? z5-(m3een92x>Xp1Yt0m&$d?#YW1Mv8^i`+j=!B(+th%HZvnLyK`hEoak8YpQn(yI` zI;C{$jN#6SqiwtF@MnJ5E_-)udvNL$6zZ?F_N`c;D4)1R&7&#oW>#NwQ!IsY7&EiR zJ+Wgv-h`RRyVX+5)Gdn3)HqrpAhTGv8^M-X9F*^@kDHoQrc%{CpPb1~0mv?cutNz& z`_Z1!_304?>)w{@;iF>$Mf0ycFs@ zYd1+Ob+2Xzml4l-8gZRhz#w_lA#ZvqU;5_5qE3@to?Th*%HBWXx3XT9e%MSatp}2hl*GtP_UfhMc0QUACu%3-UwbjQLMY@n}!4! z-*YqVCEbv7`{BmPFI_ZQS5UeXK6;ZWpE$KkX0}1%YF)k}MfSUX&4f-@h%wgJMbj=C z_qe#<>TU~*%5h^~m}S>a)Oge`vG7;yu-lb8C;D4Fh7WG6oxHCHw@bQboIo8g%g)16LlFWMv|`r>$y(Opq4iv z;;H@b#ADi(F~5`lO}3q2^)>5xJ6ozY2lF?Yx1HVODSUgvtOn4SCq-4Xy%?^SwJHyK zOg^a}Do0oPE2@%!o0s%}&KYyk5To2O=|X*hI@o_uU}f!G;_F*o!9dt+;FJUZQmt_I zuJfj?KnJT!%1-#`PgBmzHrh&XJFF(_V=<*>dWsC$+S6}F+FglsysLhRuR|~KQtB`< zi+h90Bofpmc&6MmLMD9GOn|X+1=9xG9Id6H$nxs6P+GX4;5nN{V z_JQp5Wn_V#z4`O;94F%RN~zc`$Lu%PDBoB=7r&X!_%yUDNbN56*1Qig0=M7zjVgxW z$FWk6dhb=WP%3>I+wNuJNFI^T!+mLKfC5%e-&GKdm<^oSzl8`i+0>Xv@)!)8d!!i4f+Qpo>ITnSC!GANx6nz9@6c1s~HVbGFyl zqENxGh%5chGk2s^P584tm-wu-`7A?2!?{8)L*9cCcAv^09)IKe`>&$>UoH}!X9RbR zT|>~vEVv4t-{C>xg{Kv#;8Mi>CU4Ey8h$Xzu4Q zns3J!n}2lc@#rbIfzRpN>Axsyj>&DvmgD!vIV*y+%(qEFKK3($FlG^nlV^AS%eDh? z%IpDx;H#x1wZANqjmgJpxs!j#NUr6drsd`Seu!#wlv#St!S1(D9pT4p`CfEFP~<2C zU7;%tO_ZnfYx0CBr#z2{}vHBVAg`hp@)DFwuFV~YVd-6)fQBF7Rs08 z2Dql>@gR|;4y>jX04f{?okKJzfJ`0A!WL1m)v*Uihk<nPSUMzw$rAUA-Z3MKasmFn^2E-R=W-!5(JNA>GtEdzxf`BGMIfQ>~F`V(jT(Teq zDkBK6puCZLk##iw`vX3KtbMB=>Mpk3GNb_GX(muG$kV3o5c!0lP8}o}sZKY;A~hf) z3#km55kU`%g|c)3SVWADMS%hJI6#Kc2v296!LM@HP1>HWfN>xPmpX>3IK5sxDrX}U z{K@d()Cw4JF6h5k4`k>6CB?CWAYX-oH2Qz$+LVRVR{_xHMIgtZY5}Oe17>C}#1U0l$hDE6_6LB55SfUUTSC?8Oi*+?AT1{iSy9RCf zkTGx$`oGu~i-kK4-La@jd*E-00Jftm zV*girm_!V$xTum9h{Vlh7O@br1S}pQMi7O&6bUL+ZK@js8tM<$nh6;QWo}n(%f<|8O>F@71&h{&r7fjNt`b5 zQG9@C{o&)J6_H6sSP~*6u{UC;Gj`;4eM#7dCKr*oz|;--iht-gJcp-S7_j{yiwisB z;@n%OKL47;zMi0)wZj_`=3n962y+Bnk7$<7CeumpVMN??l^u}uv<+UQm^FF1hzr`v zB?#AU6{lfl%cM-Mq(JNwJ4YtyCOs2+GE-q~`KyiCw6Ik1nMRYRpi!p#@^_gPi(Qmp zFFBr2^m_d-j!Ll+(a5g;J;GZ;9o6`>m9Ksuhv z2_WVDvv9!{Hu?NZN;rHP-2qmhgb1P1R}L$7ta!K zRji_-g(9Z!AzNb$>vL_NlM%9W)_}i{%V=f3(d@0BeSd|SBLdO}!kdx&Ee5$R^H=i6 z0UACJ2BC|eFUKbE_5=T5 zw!e4(IspwM-RW2kEHa@o|Cgn))t{3{7NVIebm6sxR|w#BvxjpQ>S*1oW8WOY=?oy> zf%S&hCRj~Onp_DBja3^zOyOK?KIO%M zzQrGM0qW|y+OU}6vp`Hw*b5WwX2CL3n2W+@8D_CyNV#-qfX{ABV8tp#-E#TCQLFw zsA|#?LOr9Z@Nb)g_XTXLe;ssKp1@5+lKEm7(nO^AV0)y5+-$^9Jll#YkI%3pgsM@8 z!0rdF<;n-q%oY)2h>1Lk&ffE`2chUR#9^Yx@Jz&W$D6-tlcb>M+%ucv@ZEHf?HE1i zvk-!=TU9GmF;Fr^qe~ol1$m5gERU{~nW?X54a77RD}OuCqyEFtetJMzK_J0OLei|8 zjNrRe1g=)h!n-2uH3@4MEEiM;NdTKj*qX`^1JGd zt=+eRJ%wpD&cdTtlBAeL9z}Xod2H>TpGJ4%1&8nGn`19`avdfZ4GL30yG6%PaPF16 zEob%};dpm6!6TXA8NMR1pGgNuC4UNbvq8k=y}Ow;$lB|1gM>W|cn!&SG=F|MkVula zSNr_5lkC5=y4yIIz JEG4l3-^*_GNhSO3^GUbMZuo8Z$e&Zsa3Pd!?ltlZ%j;;``His`(IAKDy|Zbz7C|1Pw&y3Y)|@ro2MU@khO7< z_d_@S_&bGo!xid>D?*LFQG0tSV|cRFpDbQ4Jb}xZ{oSMtowj0rko(U=Q3TsJ;OZj^ zRRFd|jJtz{HJNX0tdbjK_xsuS7a+^n8Nxq%xlueM4w{6aG&ng7 z{CcB{v(f`Z$R>#n!8K5$g&g-r6$arh+mbqu_c2`W7&8L&gwndti1Vv_^N-abN1Be9 zg7yS|`T#bD3*IBqhoMY)Mj4*^q0?ZXFZrE){{Y{%>h*a3V}~*5Wpk?io+{(M&;aLtFmnbckI-i%@>PzbMYC^IF`S2sAx zD_rGK)2>kst$yJ=r0T3O6KKX{4*_tUL(@a|W6eTrT?>A_!8K%LDCCv)52xxMuJKCw zj*x5e_xy;%TK+#N#Y%JIzfTO_!Ib_g6#SLx8ge2%B#`fiQ(VZa(yj0Gr7FcuQcE3W z`)DloFf$$Sv_;Tbgl`OU&9e90Siz|MSBeKG6z{SX z`$p@WtWp~Lar?r9??y5+54nZT14^~b9K=s%`+`6FG0D$(#~#1zd))p>p9#a+4`uFj zB5yo=$k2N>zUVX4;d`=-CxG2S?8nSK;F)(zapOvfaOAoCR5F!woGle}7%o#Z?U>Yz>6VB)CU~=G zuogM=yomPoqVno`seqiY995ahSG1m6Qq{6Q=G|_WY8BZ-*yx{@MKM-5)h|Vb)*Z1* zfkPVBTY`F_hlYF98!Tyrw^+{4j$QapHQE!OLXJR@%kzyAlP?Zh-+l6P|dYX zl!)Yo=L5J)(m#bAr-vBFwk_m6s@8~xvW?TRrue~=>Kqb4aF#pd^5${XjazSZj=oZg zjZxEuA^0mkcX)MA>{aQ10R&HLPsXS>L~6i~nhJzk?toIEUhPQJW{=}4lPazIQn9B8 z@WhjyZaXxrG%u`(+^}CGpndKL`6*lrWKnBtJUDN7wO+4M%~=UM7vsxW6_i6?%-ITh zWgdFS@<;JIz2axSPI9`MTR~1qzluNY(b^TlbC&GdtaFPMhUE!QFh73%&Vi7JXj67H znD(K&>oapBDO4WCFGjVNBFFRG$-s}rXqYPsn@Yct22Uwphrhn%Q=xP$)H|GbZyR3o z2-OU{_wWW{Mdtg{ZT#c|VtmAfx5rtIhiQzPWZH?D26WE7WCDl_-Ht|x8{w~UfIA!! zT&I*yaXNcjD8YLdp_sWoUhWYk3cGu*@eH4CGM}cZ)lpn6~M^db7CcCZuSL*$`=ttyq)=6&w!uN_pVyYQiWbRV4M|sT1rFIah5b_9(}1f z!SY?xUfi!U+0|BE>WW{FTE9K-rekrMF(=S^^?jFYxb+t+;VN65=T`6;YklGz7PWt1 z*LRXhvL^2IY8FMWvNSNw{;dfnM;NGg@k5nGWUjKlhhK`dY&GKki!8Pq=(NcQuw8#5 zcz?81Ow6Hg_Jn(8GM+=el8=w1K_k_;+RPnVn#&;4ymh98su{(tFZR`S5i8#qPCd>g zvc}Gb&3Dhbebsg+6}T;w&|3pn26#Q)o3jHJfk1nt-hJ=$BHPz}x@K4p<0Rld zkoTzDiNha+IkqXuBGqUTC4DAxXQ?s4*aGT70@Zd4= z2IEA?8_|SokxC$LrvC|%7V-XLU{4uG31@lt4W=ju({Lx6_~dw;>oy@YQYi6+eov&< zF!CE478zmtrA~8GI{4&I^`>z~ABHN}qH~?`j4(0h2!2n$liW;!T-8LSQptCkoms47 z++R%9<1o%S(FAtNQ2nXYEQ zx3H0M=fljzhCM05jfHxrtvFB!KohFU)gvOB#*qg7oep)UtW{#Oz81W@aMsS?DBTrY z)T0_C;sos1D$RH*HhpLbx`3lNPax&%2qIPZ$=PF9gmF`cj$N^q$0{b`?1GU8zRr2M z(_LvAFpN?x+`YP9mo)(E;y&UA3#Muv@Ke=B$g-2H1JolD)!)!l(1-{uX!_n^MlQm(gMEqcoLgq&NXa+pt(?7v|Y zH^9B`?3e2_D3OSD2ENf!v4_H<$Wnm!0@Gs>vdg?7b++fg&P7^7kfrK2*P4jh&)DNI z`_1&{n%}JX6L&alK1vu_cSMZR(ShZ|JUY$m>kC;JM zHBt;w|F`^X4ENb%pAG)Zxw@=o+MId6_~Vedg@gPijso-~^%Yi=hr>qy3o##b$TM4d z@v-?*V>1qmV>;?U<%9v?K+B8OEL4>j-p1~=@NMk8y!Snn?;54)#Gfx+;vep! zv!8jNre0fBoEK|K+xx|-l!~H$3K5kP}xbxYw$9O>xq zee*I*EQUt^37HnyE^3oo3AzEAUj_Xbr#4xv&^do?SRM#??DSmVQTyXvb%k~v9%)5u z&7t{5n}>`c@3J393iW0^k1UV5~lB21H~T^unW_7S>yPXo;|78LR!RL_X(YRj7Q1w{tYGJ%15cPr(xr? znaMkpqS@aBl7IPRE%)z_R6~=S*5>zrzc7=dnL!p)Fe@CGdfVEj@DHG7nB4BO+N|K& zD@E%Jaedx85w}BT6wm!OoM1mCNE}(~kYf{xCeH(;8x?LR{sQn$|0*AOnB1M*h zToYmfMZ!Pjvyd`Ujvz{rlNHS3D1rdv-zzPcj z1->&ma|Gjog*kzNB9qR*cpVwIQSAX0GNp*Lyp0h3w;J7qk|sF;b9q?3;sJY6bbpnS z!;q5qKJ?i!xzJ63FId-HZiovT0nR~YOz0zZSBbr%xgrDDlF%Ud1d+4(G2nb3F|9Ox z=JZp7qS}?0#m8&nfTtY`5#gap3I;sEO4{HaNeI}uhj&%FyEa&yz41Mw#^VjllbQmw z{Qsg*sxLsQMSZNauGj{sg|&8WCAFMcV?Y?9mMe2<0~xwG12nWWjv>EX<$-T8fB-`p zYIQBz9~G9WBHRFf>t2D~6mXRQr(ln%6ggW7z&DA7KyDzG402nfa)>|nEfELZ2W(hLzOPRa;iJ|5^$E7q@aUI2Fpn=%#2y2%sVysrfU+e{u?E zsuX6%uQ!%%d2HtxuQ@D)5S@k_2=&$R+_WoiZ0b9*U);pGt8%ZtvUv{j2^A_Qs zz?lhljj01~(;?stnQg&`c{QNTT<)b7lR#-~S=`>4*Dt-wW_gdk5~R$@})d4+(-(utesc=eoUorj#lxGgC*E z%Ktm$n|kqDZRFTSaKO$<^rr;J)QcV1$<$I=?3>imtC!#$mPBOx(#*oxV8P$3uZsJQX9JXqh=z@rsYC)dkoC zY&teW8)0HyAtK+V+|7EPNV^_!t3uf~+zI0O2dYv$96_L)qHnbMC?hQl*cenB*f(}t zbncP{kf1XY#nrW0R7GYofU=%HsX#Z!ZObKN!TiEyGgP#V)UFJO`j4@7MPd=$LzBBD zD?{}uh!&Jfz&QY=!#CYP_007z=g9ECEa5jl3x!AFn}G9p9Ka9mtE?9MpXV9<{s0Pp z0FcC2RIl4N^oeu1zj&^r7(@rQreq*5#sUZ(^SagC)QP_ zb34!Fqh5wpf?7eWuo;J}97Ll0Di}GUr68*wC(lRVV*v}y9e)!7BmuDWR2JkakG7xy z?8n--eCPO2%7!SIH|D$ig&ZKZwsdqCAPvI}URRqHvG7#NWf-UuuVrQ6;m@)K2+eoV z#7l@sL0&i73_-s2vH*Z0AhR%##iXiuu}H`H#H=X@JuFRP86w@id?-`Rr9o1!PVMml z2w_~s@q2`)V%v?1XPGS29hF(S>XZL7@7)KUZm)0NA-p{I4@wP@;_Z^|=*Kf#Z=4y7 zK|rx|o|L}g>*nNmyedEdEG+vz6i6rP%!=Jav4G$5K|h+&;>NLcae(wj(7Ct+#D3V3 z`-^=K{g;yP_HS;T2z0tN6lzZ&pg|rr{dX^v1b1L>0si=lYMI!M#);u(t8JpUo$c__ zCJA?MonX)_HH{RhY(+pi5VtLlTIp8fx3n1GS%l&K^GE1J6M@&F6Tw1`6udQ_$#wxv z?JE?oi9VAD4@c%ISirl(fVdBYf?Wr{dVQ-uW*|~DvCBP1IM3ac!c(Rl9!+W&F>bP5 z7!=I<{WnZK5)Mo*LGUGzCzV40FcL2ODo5m6|pUf2bZz4;C6^G@e!TN2VlPnMDl<`i^hBYH7KIJuD;?Ov(Mp%`9r z0|3wt1wdf~>O(3_Is*SGEW<^`MR9u0nku__q&0#0F4XxYN@d6~d-ATnYBpC<%N6;% zt7rSy!)^^8JE)AruEFPVTc+01Z{zpl{RJ0OuB`Eq_6YRhVIJ4!eG~S6Vpy@&B5;bX z2FU$tr6JXTlgG^Zr8R=*zAjyvfv~w=)8aInOfU}%+eJZ7@xc|k4v!wmDQ+K<6*9K7 zNk^F?DF`|2P=&C~w}Vrw)|RG_mmO4=IA9b7S62lA&Vvydmk-(2QUHxY)iWGx1gf0G zFbVBi;k8SLj>UVRb$~1hdlt*nq($dpn`We1R_XD^a0lk#Q3^6a;qG=hd5y^;#HdBS zHv}%9qei2Sc*#HjR`?A+y-uXzn#mY_;2%VE{0-vvxk{-Y0ll|h}cE4Fu z2>}o%^*sjB+S(*c_}Ai=(OsQ~Eo#~lT%rQ; z_1*Gtl-0R*FL|@iOsbH_+g0x`5J5ol)F0!4=B3HGFCToI)}Hk~Vt2&$(g27cG)32P z1H0|6Xud9mdmJwYv9wXhZrN*sD-PkYa)asJ5Attxa&T7TxIN-){ow?+YmVN}cS}xP zUFuw0a(YCUeKlk?nrxqwK;G`81B$8f*>M`zTtr80Xy;6S!@>ayJY?BG(RR;Pr{1mjKP!W;E< zCo`1xg1p>f&v|o+Pa0xyN1x$p|mo>!a*BEC}#d@t|I z7%1IqrX+k*uuy;`hmg--x@DHA5f|H1dhF=?Jw0Pfi0I{oehiqWfC; zyVgp0Y*aIE!h>2nWsB;@{K3D6avvdU!T8~&76 zDi0^B8t8+%@0$At^mdz?Cut3fX~$>@Y4}4F4s7(((z+KTQ@czkAYmLS%}S>dRv_&W zSO?)^x(>;WD6J>V6-97UkZ&2|HAwt~&KZfx?^66(Qpaj{Ib7p!l@nOc6LwgD9L5T- z+pE_1DMWc%ujk`kIYlG8_BUIa&yVMYT{nyCmZ_)L@C0iz*UIbJ)s?ccQNsW6GyCJZ zK3JcyoeI@&4#i)X)?HSgITn%MOu5#fd}$(EQba;?-soB&G_@RF@;uF)e;YwW9hm%R zFP~?lDlzlZT<2DD1*yzUL$GFKkL&~%2r$W-^G7CR6k5Doe;!^Cv=3CQ)#?%PEHL)~ zEG*YPk8zr(Vr;`(n%DPxEoo1bMlQA=XB~Dve5N--D2;t4%{QeU3Ai_+XRfZ+j7zP3 zf{t!LKfdo-fwO_YR3go{w@YA-vTDkvj66^qDoRv8i}>DCKcTy`vU^{{WMoJY-|L(o zAqhMqj6qj+ZPeIC%|XwRGS43c(4kA}3uUc`)WbE#>r9hY)+(b~m~6#N4=zgJ9vOMH z*b{-(KM40^=4_={?D`3kHcj8&&oMH zZW`yy2M3)GV;Wu??8%6@H+LL*gw+wj$LzNP>CzOW3@d{;PQwlFHdQ{ot1nmjdAF1> zeahv;?jqr_nBe~C&XXCUaU~9xOxP~67u&STPq#h@PyN19r9rwCVa5{AVRozg9@gdW(sOy7qwlAbB z<>2z6{)rHH8um>yBIWDP6t?9faJxY=wxh zb>S%olbwXmky#}3#NWz}FpTo}W;pu_ai}srAff9}2hZl~u$fGBLGrd;NdQ;Ahrk%0 znnR(L9Z)FN#IQWco>8Rk|fEN_};xgzu%w!^WdI)uIqdr&*S83K~$zy6jqdH$?uvxgk2=|N+U4dG&R0i-hj;Y88Wrk) zosq~8G@au}tWZl!zKtbyt=KErR@N#j_BqTJ&5qEocY2eu8@1d5<2HjPX)F(}21`WL zhNB?+uFBTAi}Ns?J)8N+{>*IF@v@f+wr})v-NQ)AfcQ0v@2ptEG5m;%QA?cuHP!_^ z-HR2Ycl27!Qh5cwlO)8AD&Rvl)U8+j>(V9bFgqvxQ`yqn=XnLgM=xoo%EB<53_wgk zN4*WHEQX_(D>s^k%%-Z;q9KXpp`(mZRQbRtuddA8sglR<*1EE8_J7Hf{5r6_W#+qOU79S#%s(2KcSU^zf@wuZig>xLgv+Y- z_pJ9Gk5vOj#>5r3|8Rysc#ry}@fx}QO7tvR!O8{QJe#E@+Nq1`mJjU>FQYR3#g?4d zTQ^)`3HpOZ#3XPTcX-D86m{V#EIjhI&);1)l1MtCvM%)K5>JlJrK$XVq1`RF#@3uqsr8OyAS0S)Q&XcDH<4o4km9NM^}c)Z`+dcd2zB0CD2AM zjHf0qrSd3bBfg}#2wBqIT}}NCW8F^%mP(oZ?f%@;*z*XV;jSM2_YNsAe+bf*>NwWp zf7n_XIqrP><+-h7RJyv(v)99g99S9(Vo_e`Cyqu!Hi+ z?k8KL&POz>o^o^#qp84uPuc(1)7O^-F3wvx4b5y^{&X(rzZ?5DU4re=XUH1`&stBW z{8{Zg73~ptGvtR;;gD4}Uu4k`OL2_hDYxSS&($9;x9}g{x*J*T)kAF+o67B-+}&3e z#WMxZ`jU92;Ink4*d7DlzSlo>vu`ROn@SUUG(5j^zkPGdO>^UKy(zAdiF?l%U$pmv zbX#n%k(011tV1Voy~5V-b`#N--->ZtyA4D|vBg(-*WGI3{(FnXxZk_?iGnZhu2*m43T;ET28sN;n34k>R zHwu8;G(jpiQx^}G0!f_AcqVYkp+YyY$aTVPpp>SL=VT*%tU~|@&~iasiYXluO{8^N zuN(>GBp`R5eJKPWm0cciWZwdy9TGxdvu~3SH=*xI|Cby?uzr}ID&7dUyND7s0c>W# zBHI4t%?FiHp=3NT>>^B}+{gg{O_KzGLiPcyr!AW2!^!_5WP&p4bmbT}nS^`9ZiP4y zcGNB4iwqK%LRLm%QjCHD*FPu~2S>!nv3mg43GWBMY(y>n7m0X)2}pmBp3R1<(yY>@ zqydpYbJqQ5LP$hny}*;@llfcEYOmfG)u?HuT>(fEO#z4(#(=cv1f*PFsGKrLQ?)BN z4#eO63vmA&2kF5O^6)VL7XL-B97H~SgfJ0P(=Wb+rmWfbDLnb>h@%{|}iW3B&U zTl<#459>b_b@Jl*dqdNjN1o~Al3_5{8aXgZL^I$37xIF!*nhDtk@q5rW;yJE%?37z zNC3N>brIn-33RTEMd?Lzj^P3(%{rT}bsV@SG55T=1n7x5*+&ad0cIb=e!! zt;#cJ(cZoEL~~Q8z{PDG_JKF5oThZbYH{|1TS-LLgslQ1d+#2i?Z*`*3o)^s3NBb~ zfFr`ZtovTI>z|(FQP+5ZnokiY#_A=-*0Ht~kedPRnArM8IuRdZOoLN!0?i1E1~dcv zUrj#^NA~!BCAueJ_r7y&$JQ-X=_9mGSf)E6$ljyW!BWU@zWR{fX3cp8f7|5saS7KI z*eAQ=sCYJQxqk)bc6?uCcZg#3sYqe02R8~!2ZocnaAI>2M?zT}WCMhZ?{ESI$m!YGBr+Kc}@zg=TUAn_>;*&MOAlcrn|g= zEA9a50tznhEB@-Q(7o_XNPN}pi&nIvml*^QBLbXZKB;Kst6k++x!oV7t911d_dPi3 zJ1DnbZ(-oaEze;84Eh8>AQAx90~^=AmxDL{BGTCy{?hLUh6*;~=|~PTw%|ms^1P|u zUA#mvnVX9Go&^9WnXfh<{~Y!?OaL#hmTL)2a98E{Ic_!PJ`&*J4ZWZOdsYAerk@GO z5EKcaHx oL~h?d+AME<(Gx{S_dCSHxCKT`TY9idF!bS9hp=-D=q%IjWQk(!>Zt_ zwm1^-fXESm)easanzeHqp#Uq*0q~-(aVKXV*U$w7GIr3c9Xd@#U{`L^$^ZUdRdL{+ zf$c{4Ko{|_PcTuRMU$r=X;tBw#^~S`Fkdt=)J9WKG~@-2LlQ)Jdml6v*?+~-PxJnf z)iOSEfce@xBA0*wwvt7{YY-3>yo&_@vV*-wh-lxOsap8x5zqACKDLc>Tve)xV$-8U z7+)RhjM$^<3B@*r%iMl9eFM*TEmG>S)ex%W*y%;0o=loAHsQ}|gMgg*e`?Ej$t$2y zz?kU7_sio5&(3y#3L?N5Fvp4>x0%1<*97-qbUsnh<0lfEGC(Mmiq zOj&|)8}7#wy>7awf2cSc=potwaV7#H6#yzW@ir2ZKGH+z_AS4P&sK$as9?63lBh|> zB2yEi(*R_u4xnl1;3VQ)bvslfRZn}wc<{~msSuJKNyzSJrxMUS>?R_L!*zO{gI9Un z|9&1SuMxia-N!5W74cWPy5~I|HDl|T>kxVSpx3F zeAdCj7?(Td&u36;Iognc={Z_pN9}8{SM7Y8XL_ssXdq?aSuc$!N8qOdz~lEdt!U2) z{ry$IAk#E!$2#fuFsWt=5>4KI$9w$Z-;nR=>aHs^K9)_UjXFas`KPC)gL<-Xzt`FF zMw4&xZ-Y1n_#_`R-~m6yx9M!jgu~}3wWo`hEg#Anzvko!bd)h--0>a-sJABZ{IN0p zSPO0E;M?6NrTE%+SvSx1Nh%EAau{IwIX2fUmb`bLOItKM@`m{I@iF3)4lbRmyMO1R z&0p_Hhkn_Ef$S;937BnV(%>O2L{fZ4ps{_Mh@$QWP6-9gZ3a=6o+T{=b|J;)Me#=Z zkgn>QRG8DbEya#p~$^`V@Lr z?q{`Ct9LkiZ~Tko+{om7-}&3>y~SR0=IkETSA4Q#E#5Nm)gBNwB%_RW}lwB zeRevA0-s(Sqe^K#GAKTySoX5p4(Gz1%r(4I(nj_8c`$Y(eQ9s0w3pSpx2l)F^f}(* znn^Z}#4f~-Oah68wbTH))ImNtgiAHfTNl$q4Tdex|}VXWoBmMswn4QLP0m_4z8+bCEOdnuKN%7!fF+pb>3b*j9FBw}d->-x!hTI6 z*-(8z!uX&>@!TRrf4+I|c@o#MIKY!g&(|afjqfdjVQO|UZfzr=+!}GaR9+k)AYD3= zC;1s5Y=0f1PdA?9SM1wX^{Vr>!T-3u6qticT!T(JSSc=98wlCHOtYqjJ@8tv2wXK^ zDtL~@$+5KBQD_+DdiU-R@(KE0!E|Q=V<)Jsx!QqB@~x%Ar?p6o>MO|VT{FFn`cmNh zl5#-ZSallnJZqF)nuC=RW1FYI$9w%N`wI5!I>6*?Wippc<%)la3OD9!>c5r2WSIxS+YgV>w=~9ni_vGBhF)Ry0niU#WgKP)(l18az_NOd3pTvL(Vwc$RjIr?ubqMF=yIi5|ak;#Js%zh+#!FN2#4)*cE$ zWrt)oQyM}u#J6S22hwxbRL$MEsjS2)I6M*L_x)^*v**uUhu}g3C{nKG948`L2QMAUUr^nU;rf zP!p{u3nS@Bh)#RM5^?}zHAxHx`~z4f;9y_8`^AFpNu#%m0#Ix8^%I7Pgx0>eBy_-z z4Zur0Y_MM7z0Tc^kZNWV7GO6WqD#l2%+jQqN|(2FozK8)>4(XBm_mWf)-5#DH)YY7 zkZygQBldpvjzQr5voTd@T5VDm)ZO1A)%-7q8$0@LJ*oTT)YFKNKQD+S9- zm^-J)g^$O|9rk1=lo0O7tfrim3K#4B#zlD-Q=Qqjm?>b?^I%S>U&@hPE!@i>w?DNo zGFM6OFcq?sWF0=rIl23okNrfJKG*9?&I{w0mnCLpFQe^q7?fF}oMoW> zbML$pSGA!e8K1Q8#<1Ao zO@@66cPJqsRGCgo?;BGsmwV@XcT}ce#L-#$jgF9_0=6Ng@MoOEwbw%Y#-A8&h6+qg zMdPU~r>cgHi zzvb)98Et&9?yF!V6@}@N0fYrj`2DFGkv}Hl(e+Z&qQX7rd?2RQ?bm+Q)$BZ@Z=A_( zz5e0bb0VBv;itXFh2wTD{KI|AGArSSvz$;XgF2TmD>o2p#Ol}sud$zx;H-Oeq^Fs8 zV_=811xgf&_%YtiC;T{Q05TMJGE1@Vru1d^`pYREUaq*or13O&oypgdrPDUCU8UDg z7QLO`h}sup$#{s~lXbwCDA6}ek8bOlmE?8U9^tZ79Xzj*p-1raUEwUv8FSd0y3BU; z!bV;A4X*&!H{lx!lX}IS zS-6Tkgku-FmMX;52NuM*hbnC@CT$)M5^$VCxW^y3%f{_Z5-vZtD-aQBXurBlR@W>Z zRfv5A5>5Vu-F_twtAFw4oB0j(x76>SbP4;Y8cM!6YLs_PoMoNezF(Sxyl2wGJyUy9 z^Nx$EveYD!OWiu(K?ZW>(jxp7q0EaCrh1;+0g0Z4N}~TS!nd9kxA5-;PE=_M!s9V_ z!8o~uPKu5!jSLG^_nN1Yb@ki1ez%AIuz1th*et}MZDqh7gVv25Jy$8Y5|4dz&rm{x z4t%F#*|!%@v1wJFdmbA7&UdOT`e37t5dZDV1h_DvsiW3xIsa>8x_RK}@t{;$RIZDEmEcxoG5lI7VfI%^W&M3XcZ=60q-D$Qic!-GQsR-eFPGEa*IE)Fl3{BG zx#hImsi^FIeEUNyhr{V-%EyC3x8H@fFaj^6_-`CLamDUverb5tCpLfLrBPIg(_25S zw!G66?7T-3VGmFT#HRW?2)p}lh#%nA=9&5&>Aox4qro%PGP+&Zeirk0MSIN-arwoA zyROrJd_|5luI?LE4(|;aVjif{1Qzb97A?3#iFWn{+%J64C3xCdd`k@G&GRU}GmG0z z-)xKOq7GaW!8Sb1mr)aIMUvd67UIPDTBs}$dc58z;`mi zDx(95VfP+>ZFuIyYS8c^E#m$&9J?*QiS2o-nEST^mFFe z$=S_YsTt@FbJ$oF4e+vrk`Qr~y=T^f`%;q%8k$(%>&ww{4tZsCz8NHbe*}+tkH%=4 zB#dJ=im?KRdQ5idT3Rk~G$8wzm=n(R_c+_Swi)B)I=%pCIZRCi8Z1X0aXNosjQ#Zq zOV8|HuAtHq8}gY8hDmac3d!7G5mG@A9yBYyPsj#afiL(C+!y;f`uOt(C zg?kDz;c7J;k%XMIz}akq=e2Dd?c`&&WMX@&Hq|5P5|i~MZ)BM19)cjLo< zA7_Y>e|yM0_r@8-lY3z_okru67yb}vIXd-yCZ~2aK8Fltr)2#-+v_M4`;Kb4BQ{L) zdkm3p!XToNi#`$8g&;kW?!cu0UU8fq37;D81rxvs38DxCAw?9BfEVSts7U!V@y?$J zZX5&Nw8zW776mf%%Da{+hSc4Xd?qT8N~Qi&D&T~W`-yNuDvl>1rHM*FJcsukQj*9^ zg~6dpssDK#{zvkj0Qy~0RwyHxJZwA_r~AJ&_+Ko{z5rOU830RUmqD;tSD+-VP#D;f zKw=OlQD|*CHiNWpNp9ca!Y8nunU?@KN&t|6Up_OsreJ>;j*cGIH3X+=0wnaNt|mBx z;w2$BERIVRqCsg6CJ%k<}Acz*DdXErx8F_GEjzzW7 zPEb*Ov{L}Zq^XXJ!+A3A|AO!f3owqWZv`w;3@N}$Umu}Q#2m4r$z}@-;tcrc2n?J` zdjGs4%s}tAeIuEQFn73a;s|rB0z9;-fVB@%pQf#0jUKrs*byuEjMM0qcm%@R^%T*V z#3wtvYm=hqxN9%T0)w<1Mq6j}?#=qx=B2<5akntNyNd1g(^V`rx-b{)%|O^snsHVzJuaqhdP z9p~ZVJLt=ud1+8IdpCm}cg=a(bG`0a#4|KuaWFNP#B| z751-^(8a*uG5?O9{pw5Sx;Ht^4z!m}?ig{bF;Q~TD!zWoPNBJyfN4Vw^Fjd%P%RJAY>ZWLx=P5G)NeJ$kgfm?|6qdw99Ed}+ z^3W5o(=t*(vQ~-)UyY2cboWuAU=;j<=~>ZLF;tc4YFGe9Yi2-2v+YI$36wy5z|#@d zQ=^WEH#r_QXl3e0RPFm>VlOvGUAgni)NknM z&oqif@^j6Mygqv0wN8AMT@s1q(5=G)u;p|p%cMM6I@IcRLXySvrTiQsbRO`UD47%Q zvBlsZdsW>9}sY6qJ(G!{cuN30myLaQ$C;_rvhDBDvUq?fcJ*A z64gvVW73YoUv#c?BxeEv$;AtsRqKX9LMp6tu;~Rv^A~Ut-PMtlb%0>x12B|pbDRI< zk}M4+CDBa~MdSU=lTkz~0t%1?D1byG4E5NDrg3v|l|TroxUv1p_Hy^UiZ)UddOdt;DXqlsk zpaJYs2~^*bJ59~aZWz5k4pB;G25cL5d0aX}{47q?KXVu!ujSRiW7wHzNRc78uU_Yh z`}=&Nqd@0F&6h|X86tXRR|S&U+b0dT@U;wx^~jAy8R)jq2y5#BH@#g?gsX{D(%_@8iEY9UQ=NW}AL#3w~~hjg2LR0mb@- z?RIv<88v5fdy6j?Dd2l8M^gms zbGP}G`lBWQ8=jOsJp~BEL;y!1^m1^|9e~aQ@T`JVX!J^1Q3TuB0wA~IxGT!5!L6B( z0&dP4&F672k@+dX!Il+&wWJO10zD@AZu@-DD>t{NqvA>U+(%Wf58ODpxL+319WQ@> zUWIv7+7Tj8kd*TRZ_?n|PP+T$v|D`GM10+YBFKx%dB}VF^J$3eOOjIeD5+Mx=4i^$ zNkKDF4Sk`$X-u7FuCs|EiM#(@THM9uhj#}q2mr343yN`?JD<<>@4NU_)@Jt?A~!VM zdcf(hZC6hKZ;JVY(=Q*_HGMGIHi)4hAlq60*OSrv>jT`r^=aIPrWzi|aJ}ava#9eE zHNp!o__K+~du+c76&?hC`g^N!;P{$yK>^SA9r+23u91N5$E!tjWS(H;B~1MCW%gmfEC0{Ryg%qHM4vKl6LB>RslxHmi3W*6P5y zUvjM5K`W|(bv$UJK3}>j7IECp+q9p<4db7?NJyf7!<+S&FQ#y;k!Wno-E3a3)=}zG zbykUT@sOp4T@g1VALg2sbLnL!WHjo^bIzqs(d94(veazpY&7X) znzMMW*aI`|t~&E;w%Mg9dMdSFS@hk%AcH~iN ze5UbN{giP?xq*{J2cANBDoQydpWLMk>8=5goxt5y(2)6hR6MOgMQG(47mgc;Lty#L zu_|oX2F%qyCZxQkxE7N^NiY^qF`i^q_#&zb)m~K~E4sG=@*Eo#l^RA(!A|jcyaULx zk%cO}ar|&cq3l<7q3@wX48EHIzBfb2vH|h?X{-emX$8ps!OmPD&&(|{K0ci*E1S=r z-ZZGb&%z|jDudhH+KHF%qiG!M2ENBdr@icRgL`4)6K1pm@o`8YEETZDCmLbq0Em)^ zHdTk1iV%OULH4;NFQlfK%SDw3qyt^&Fuv08BW+>>^b6UT$XRMSz*tb09SNrRB5whp zvUpIxNKzH;%0af0c=cV9uk8A&T^SkDJ*Hk%d45H{Ggt{(^{!8Pjr#$Md+54Tf3qEr z_P6;SE1Mz6!Eh~2z9jRxi{$e1ENk7XSt;7I=ecdGS6wz|ckGHnvAjDm8b|9WV*ujx zrtaA0A32uucqd$-zx0WwttMoZ3m>|Kev zj^tXA)W)i?knW*)N4HmS8f=)J_0Hh_Zk<`XDvmqerQF_e&gHYm?Rb3ld%KASIjg@? zykAMDmZsTj2&(&58K||G^i5}m9VTxC>G7#wIud#5QuwP31#|n!TjpG^nLDwp-)#pm zDfD5Wr<&G~Sx}-u`YDa+Jj_wQ_l+2rj|k z9`dKM$GyVp7l{Jd{rq`AfjdFyXI9*BnXKOpOv6=v#(o>rNo!C4L7XWJBMX>tX~VK# zLTD?zYBW@qQt=6P=!gNh9wmC3Y78VC^t@D6XHFAxzDq9h6~&V=mHG@Stzq$`gpIMJ z%Ib^$0~iu8lwaj~N2i1G@ER2?~DAtZ!5T_g6`2gWh24Kmss8Qr0$(TA_Y{p+np4hj#DRyr1Wq0E*Ip;;R zi+5Uu*BGQB(epht1)jYwP2N#lx@|qMO08WmyO<3*xKm744H?UZ4udf zwM;IcKw{7fdr_A_>q~sAokV+DDA960%KW66QFH?CX~4jsGZ#Qpu7 zxgAB>_fxtGKma!U+o9nEs}CXmBWqKi?H33804}Faz%+0 zKjfz+5^fB9Z{Q{qDy^D^2QLVHg|bsB(<;~nsEL(>7pWdsEgg|*HOD_I7p66o-hX^K zW_qvD`0fbbN_Gh|4}%%}%5~zFlF%QedKa_+->B*r6QS>ZrXP6NH-SQgXu%V-pb0S{ z!fbr8{Z-7T6LWdK`6t-qcLSv>fP#npla6jRfNbkq3% zrcx5KW~7WzREtNEQtvvS5D;SGK9+e2j_%4py*F#~p9M*s$(+nvHsm0f7F@Zebzafg z{9dG(*DKll_aXS#Os}z135W+Yf$|q(a!5O zXG-^X4&3l2C5CnNUTYJlZ5G`)R=jX)8FCV77gRg7HEp*~tI%EdSaZ6o+((^#Z7idtC8fgNSY>o^+%~|t&=mp^0o=w`FvrP`}*zPWA1L7 z`O__@Sz*tI633cIZNZ{kU66yI)?&B&g>5;sR^ImMPKeXjTdHb^R%`A8O<#}j9M`}# z4Y8jZC0Cd=74bxkD+P!NPe0#JO>DX1-TVa2PgMrKulUSye0}Fgem7#GI;#oUz}&k0 zQUn(jwQoG(P4P0nxy&8$t2JsS;qLDMd5^DSKmn}4)bM?R-$_FJTZM7;0&5KJ7^cQA z?%jUghAdue<;YJ)8hmiN(f{U)+=!?Ah`9^zrJo!P6s?MLgE%L?;m?y99Rt2L2_FIn z_P=gm&wF@F#5ASqjf*+IcwLmcC}3%~$M_%h*v=aWAD~=T|gcM_C4q`M912+3$?Re zdmdjnZ>I;e-SW-enBDqzrHwGX`s#F-W#SyEu$ z@oiI$7F_GZx&nSbthwC(tF@;147bMcgz7{~a5XndPnwR5g$Pzi*0QgCaLt=i6Xg#F z6LKJ8Nsu!Unc4u08Kz-gHwlSb0j%*bT1})`0l^e9K=PZa79>iWf?%X@ihee7e+rq2 z6iYFHO~4ueTxa1x@=3^L(EdjP!#)SzU6B6u9ZK!~BsBbg zZEFY;zpIh$|CA5KSWS@i|An!N09TCdAi?8zI25%Vfg#|3IPeh^oVs&LpsT{hOCo_0 zq)!FLW-V4Ub1drcGRXQli8=;ZmoLD^23ABIq(?v=fg6^PT9Cm{KuRGYkYvcP2$r(y zyB%@!c%=*rfSm}dz**wvzqB+1HhIwztVBKuR-cgB84@C&eXLjxxX#+clME(8

tF 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∓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 literal 0 HcmV?d00001 diff --git a/autotest/gdrivers/data/ogcapi/request_collections_SRTM_ViewFinderPanorama_coverage_f_tif_subset_Lon_-9.8437_-8.4375__Lat_53.0627_54.4689__scaleSize_Lon_256__Lat_256_.http_data b/autotest/gdrivers/data/ogcapi/request_collections_SRTM_ViewFinderPanorama_coverage_f_tif_subset_Lon_-9.8437_-8.4375__Lat_53.0627_54.4689__scaleSize_Lon_256__Lat_256_.http_data deleted file mode 100644 index 98e25ab8500a25443c08299c8715f9d2ae466339..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154478 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 z 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 diff --git a/autotest/gdrivers/data/ogcapi/request_collections_SRTM_ViewFinderPanorama_coverage_f_tif_subset_Lon_-9.8437_-9.1406__Lat_53.0627_53.7658__scaleSize_Lon_256__Lat_256_.http_data b/autotest/gdrivers/data/ogcapi/request_collections_SRTM_ViewFinderPanorama_coverage_f_tif_subset_Lon_-9.8437_-9.1406__Lat_53.0627_53.7658__scaleSize_Lon_256__Lat_256_.http_data new file mode 100644 index 0000000000000000000000000000000000000000..1c5cf06b2cb3389108f6e2d9d313e049206880be GIT binary patch literal 188336 zcmZs?c~leE8~^{zWRl#305>5(!a9TO0tQ4y>M{w7fT)P5xHe%E6crIIwbl+{h(Qq% zH&nC%sZ#5LOO;w{6GTL771vU0ZBVP!T8q|N+FJWdKi~5^-`^ji5vE!GRSUNf`K4y4)bSyn# zQkJuHT7K!u{L*+@TVlv9%pVpL6&p1oh7O&cvtmiviZEwsQh7;HY5wwfdYYl^|9hMf z{~gEi=ji;u<7jhp^OrA=Ojx?4taNE{q_((t={u2AN{bd0Es3YYouxAjrSCe<;^Qmv#fAm>!^(;Z3f`g(B_+j0x&J%e*ai7Z|7&!XI!jYi!-2a)0w;&`Qn`eD!U*an zm*StOvrJH3VJ5b?C>ShACK12IOv6o<6vzfOG)~DU1yEK(W6>fKV7_(Rx}9!v6>GF$ z1&V?k+E^$41O>tD0b?)uNvplAPsq8X<5WUvhmL1Mi`6-DUsf@x*EE|f^70xYU}T_JHq6zBzfjJCx* ziBnkk4(+fgI(U;rR#DcGLC2^M89kXZDS~=+Dw)R^VM31jeSQJc)*EE>8f%=!Y^)o* z_BymCjHT0BG&FTOVNqK=d0ouR#4x&w1)VvshfOvw&=OLwbA*D~lq2}dStV>R$&^B~DGh|7ra2VVYg$54Uv-yk zHmYlBrBSWVa1T(g#%}Tf&?0@m@lSC9I>BsBL?&i)0V-xb8J(!FylOy^$^s= zLa86p+R^y$ISJjx?fuj_amr2L7vsq22=>;kkBUFQdF6aQPE1k>Y8Un6vmQWyyXxN4 zLdEzDYutnBT;z-lR?|cXF}7YpWEkgaibFm z->G`axJ8dIRzXU{CFqm&5`X6dbz=2IElvFO#lNXHB;J<}ioO$a@~=wAd>DSLV(sH4 z0%F$vEB~%%=Mr==Ls(s$?!^hH!@F-D7{I5`gJ{)WniSA{6okglTfgbn>1!a~TJlk$t!CQ%@#uYa*n&w`5U7r(A4hMNlq^qeBVr zUU{u0(S=}*h(M~PdftP=Rxx>QyKKW#B8K{y4-f6LjD~ z_@r}OOa>pzqZ25hUF(|N25d@#x&zi6V5#BxNZ{5LD_Cpchk<6=u#a9dLPo@F)>D%o z=!ta}-h=l!FjCb0K9V2Am2F19;6P&Ic^LpoP(J{QinfDdaJ-5EraGEqjH-835=sxm zY~0mmS2D5!5mh{jhpi~*j9$W;hESx$6SxUfbUk+MZu3Euu7=R#b0wVTZ}ur0^rj%~ z;0u(~E#|OUe17mxl#}gxtxppt%zFf=JKRO`EU0SmGRkTDpr(ZaQGmPnfgwWJcL`sh z_jns*D(C0T_*}QYSCeeA@c9YcVHxku$RgH1Ka6c3MWS4Kd<~dFDoLRmKoTE4PLolb z=uF5c9(UmL4OXWLnJ>cc&LoinEj7OrGawqN!;^7tBI9f&hw0>f%KC#^iG~m7Rojqm zP%F*gRp7pPLBuaJ!ux2bY&OElmcZf3^NF2*ZOSa&y4f)?w_Kn_E-hJvd9MOCf6;jS z98IhTKEiQE4K2&3m@)ME9UF=!W)Yu$#oiHHsM$u_>(5Kjtz^OHPLOmbp`ZKw8%J=c zfXnK=Ub){8^}I#pP0?neW8EikY0Si-$DTl^Vh#M1~XtZ|MB#=Kq43-V4K+s*!hn6M^KfY^05({!8Ur^jscp`Y1LqL%%&`U zQALY|EqSCMWuh=&wm0LOq7=xWT0s8-1<)dAi!mHZuA?EeNEV_XO`^5e0_@_N{(n6h zv6I)1r&J+RLOis#5(%NlzSJ1~!H4zR#Ox`ugP?KHPUKqXD$`TUg5p+%MeJfR{-Z-L z%l5@m#9l?ty|*qFf8DIqH4VUu7vIkr=o=rkJWM*XRVeuR=u3G9d23$o-dXG833k#c z+4oL+U17}fMb1+{YaC3u8o!$4-YGx*jkFl-t3rUAkuN(jbVcf?zdYT)?e6m7mjs~x z<@=YPzkBGxKdaj=j|A2;bY=2j%wIpZ$tuCD}t;jW!w0GON7o3@?28%vwTvI#-YF~BLtf^-B?x5 z{A2?Sf30nzwr2ndI>stBVUD@c741ABL<=0jZb0h~W9BFa0-`@NZP@s1NqU9+i@;Mm z-iL~nmuBg+=&s?eIQOU)V!NVwd}D;3nl{P$=f-1TCxRYi47HZSKz0Tg+ZnPuq4K}g@%M``Y9Dyqs=^vN2e$O=mvNWfNtT+f`1)~SYxe~(z={MTU#z*Us{ z^zCbHcT}P6b{W~qtm|VVjjCS%2Pq8Cy%`g3xe8jG1Ov33?B7TccsxIlEf?XpsXn}L z{l8Zts|KHsvbuY>Ck=()yY@+ElGjM+eSg4$d$@4gBM3P8;u?-snkXDHeiMARaaB4u>gV?YKu}Yk~ zP+}9xHG4emJhF+D1!MAvUa*^@Y4mQNWo2Z}t@T|iYe&xEWL2!a_*ai&OU66Rf0d;a zIHpxe)r+?mO&+1uLu%c*BTlX<8E%37xMGCsHQ3T8@)T;oNW0ra?yZgMMl`^>}~MeL07}|EgofktnXh{NDcC)9rr#7vtZVFx!W7nREYUBv*bXY5oVMhf6jb zi$09XpWf71WaWkFTY|d-_MccKo<8J8RM~H7XRV|(!Hck^Bc_MY=8tyU@(b$`o>>rT z_jqK@Ao`L*L*&DLJT_y25SW?cWZC)UU2D3a0?8#Y^DPuga!S=uSEN^NWiKKyfa= zR%pP!WjH7<*OEW{d}p}6H9vno5tNm#d3h`;1p*(D79*KAAJa$N3<5Fjr=nXDXi`d> zvg}_Bo(0iS>*cb7Gyo^+c`tW$ z02wkMI@ZG`^3Fd1sfSfIu@n6oR~U~mXvgJoolGkP`-~7|2{`0V^FB5-Ip?L%C-?j~ z-c3vGvVH5pngj+T@YYF5YoP9!vklRX8?NQh45>$J8Zg zkK)Ovk_!r&JM*JoEikSA@+m2}_Tr9d<*r~KsTSq1ow$Znp?yfJf=82GesGt>sH6b!4QlnTlhY$h^m_mwIz!xE2WQ)DX|S2#Z(v zsoa&0oB6d&1qwgsC9vS{5x?BLI&<96Nw+^eR4jK6ufM24;H&K#Txty^0#AR-WrOL# zfFY(eI(Z%)Zqp58o^fJ1&Bs z;(DBg(J_sLs9!0x+?({1(z0y$Zz8hb*O(1=-=A=^@38;!<`YE7U$gV?dxMM7Y9$1t z*f^J}S1;!jteW$VRk1xbk`_f*6hgO0C5l}by#JjX=?*UI&e{W>94v-9Xre;xB1Lr| zG5m1x@>*Yz)mx(DZW7h?i-MnZER)1;uHQ10m4u&AYpr%NCV#!LHZ0;58MnpX@fq1F}ViF8Zn@!HV!&!0xkv!!DDE9O_*KrOH*6@ zvoaz?{_X~0(0=k(*RSRKz19qd@h#s*Iz2kO@5G|*E>@-x4C9bC5NjKc9+x5gJ{62f z(E>%AgpN=pcnR*NRNeHMJ*6JNDrl2}1&_pbne?oa^=zxX(ZBCp+RJ03nK!<66KPrV zFH8IPeJf_y_|hh4$0uuYwT|DVU+va+8|e>w_H`qD1SLI-2xz4ne56sXS{UC%s;FYG zriy9WGEBIW1f;PTG{sVmbdmZX`qeg;NU>obszquOH2r?xg*K_RbV%mNxv44 zs=DkS?JNi0)kYm7E@K^%aT0|#6qa@Vb~$LSd#8jG`Pq3-i?N#C%wmO#PDc7WDE^L% zmZbhXi|H)1V*4yhISk>PIkKA0!-=>3IKkUC3j|(KYAH4Fep+#^VGCZg+8NL#YaHk& zn@T4cC*F@Se5`z#@^!>F0Xn-7kaN$&9PPk)hpv*E<fkYWPbJVwwi;AmID0zr_N113Rm3aAI%565Z`*knt;n0>m0EHjg6?2za7r_y3tK{1 zfU`ygJVG;mU9#w%Gs3c&yJqBh_ikMuQ55uQ!M-5R8dsmLKxdAcaamezCEq4Eu=Ff6 zN@a?(6>GB|{MZ&7LN4DwzWzo+;JNUa-%{qh$hw*h*K~Wr$GjC!+NzJ&dOBjL=lz?g z;>!(pZ{~fzX4JmW(y5y6lfK~NndKaBFZso-E#w&+^2cNhxOX!>7m0^nw+cDu<1u3@ ze{7VP7j>H@?jL<~-ZOcrKD6}P(Cd*QA6$NQ^^o8C<)>FZUj9~gXrJ4fZ+zz8UHsKs za~rvBnZT?(r98OZ6JpwO)il6=88RXSRp8 z*VTWK_)GiAFsqexR;WSVWwpSICC1I$zq?zk2Kq+hs5Qf~ue|vE{h({NuG>y78}&tG zazMpu93AOhNy29{&lqfFowr>$p<#9%Xd{Z_>%t#08 zK4uM4ZgF8aw+Ghbz0bxoaY|~PTVI8USf!%!lzJ}Nwna$>r2Om zj)HrGem2P|t7F@-R-21wpZ@L5OT1=Klwm=Rl$DDC#3c>_%4SI-7|ee&C3XScMEZ){qkV#Bv- zNx=c@x6(GyG}De?45n?`(J2$HZV`ML5t%ZHlQ!_DwJj*g8hw|y5<8HVWy<(Q(xW>K zM%#IlZb(Wx>y^g`X!oH+t5+7EtZnU{00CycKsU)BVxOaz{B&Fcam^sw$qcVceSrsr zu?)Q_G1ww|qC-R~70lxNIfSWO%S{|K4xqPC2sfwPXeUmhnEf`Ygc9H?&}5a#5aUHo z8QL1%t;M98QgD&w+A^vk(bGD1akJoKb1>xCjfLWPbEsA0s;(VJun&W|(f!(V;oNU} z-aCh!-g7Kf4+<>GWAs7d;|?d*Z_C$$-rbrwMJIBp+rmvvMcI`6Cg{?7mE+YU|BPlg zpsTof{mZH+ zpPK_%mvfC=TzDr~O89KTxgW$nF1yO<2HB#2AdrqD>nb!3jqc1NR_2Y8EHZ_8f(21W zVd~4roF&Idevtr3i4sAEgJ?}CGxC>FduwY( z#>-YuU5^r5o(>!O{pQfNO}!0*D9R#JnG>xpL1+SpqXI2#S1q@f<)d+);C?DfyoNs7 zlc>&STstKz8A+#PS1?S7s|w)))OT59fGUolnpF)1GOCmHHAYn-Y;0&{6Of+h(3uMi zRu<(I8poIoe;VV=1#)tPS-*@L-cO-R%+5sUVm3TNXBl48U@B@LITLLT(3@s91jL!9 z;{cT@w}BZjr8Y3#rgAgWYf6DRXaK5p>T!BWj>-(?W>q)*5=fIC<~%#8K>Deq%a4vL zU@q#*O$nHeGtGtxgAOfpLLu*o3;Ov~T)^?madNz(%B+1ZT4YYri;B$2c9GuxP`-+B z?v$^+frCSN0S;>C9qM@aDy=dAr|Ue%E||-BKN8tz1Kn#1gt_V#)?`#~VNLf{j*kvi zvfiXqJ=0g^sGrdMXiMb<=bNHhHm6cgmDOiZKihgLRYHwc&bC9fBloslEC+pCDyw-r z$UzJ!#!Ad=&_JJKfm@nE09}E!+1l!F(w~qH^=R_ta*#JZ=J9ukjnjVll8QItOE}}F zjjkCy)#bER%}_Ev`V!X0B`6rmlZu{8Yf}=G4@5(ZJw~#zjqpEQbY-mPd<20)_YORB zYnwzW%HZW|d#Fv;P*M<~f<9yX1bqW>ZcyjnA)CO{JpG_hhmCQTEgJqUa5^v6QS&Lr zhfd+PfUf1GG@%>T_0&Pm)F}51eiSc{_0&ldoPc8L?364qmK4=671aXVY80{ zjG4Nwr}vttxopl{B^=UbZr?tz=1riyhj8uiq+b9QpyKm+MoSiG&Jg$m~4 z2yM2G0^~>07Pyh!mR21dLIqylNpWI9b&Y^K5l1?6Wh@BM^kJkxn zX_^$lTsT@Yk7e&J0yGGmRAj`|r2T{9D_--4ZTk2NS1#}k$GM0%GLH~jA}|i{<3aP* z*6Y?BnD(V+WA$%BPUZHI6|XYUVk)Hm_>3o4MnY&*GbmLv1sL28MShg^nR-at(#ewz zSNz?2>9yb$NupjNcuO8sl;zi0wQ^7tx^S}a{aap6Pdj#{A!&vI^xI~`$gkDMq!`CGxbtdglxsx5A~(O5E<3!AGq$WVBBCBkCMC-6=84 z+71O<$Ly$oI$va=k`mg8Thyu3q5iYp1gu`0da0HL=`Bv5; z2*-m*N`MaKpq!`rsy0&`pe&R#SO4kM(gLI3=!JVJn(r~ufK$(PpdrIWq1dr55jV+J z^WtmOwuXcW)|*Vngr4EkD-9~Tfmz3r|3JG<@O3u*#inM=9(T{_lPz&9@l8CUP^tO- z`a01Vp8?+ckJnmFUmk68mqF%O-XTQLy%~Ej&(feR{B8cb>G;2_RAE-dp8Fc>PB2o2 zijkL)R-+Y0NxaAoRi%oKV=8WX;0qd#)XKbTd=~~gQe0$sNOO8qw9cs{yz+T4jCvEu z)7Mwle*4HAcV#&5eOUo`Vp5;S`mI`b9R2C3BZEm2fnDUB_h{^d?tdhPaaU{Zo7tM& zGDyDW3klWlqp?rNj%0P7AY3PkHj0d@w^hS9Ule@FC#^R@3{GL|u@QYb|Infi*=mYb zGNQeoyF!l6g@iQ75f=gyogk!O^2 zl>=Vre!TluQzur1&%aN}H1SlJd6)#bXU?0aZ_{-E}2?|3aUNo@%k{@$QYzLovn z_xQr?iUHj2_Kn=g$^_}<(%t=9iL83hqN%6{TJvJx zPxPNW-g)$t>c1|0D{m7dJ>N!DYD+wAO;0>h*G<|g{2DR>*5c>S_W%2>Qa&}R{x9?9 z*&n!-M}XFK|H60Ha+h3Im67P5jr|K@_-7)^uab2q#}!3ZS;>l?;~;efE1_uRIF2F~ z>k#X5nLa?IH#=EX59v>#BGZkQjbwu0oC5197l%kU$tbaUouDm5ni0`n2kMQ}c@I{e z_g}h$vqw{oP=!-qA0cd$%$cYS4?uQYOSciJB(iwy{9jHZ!`^dLnO#&CToN)1D-hziQ zxXxvs1HnG3mk-DmF=OGe!mUoWf(eBMB(_TzG7<1y5+{-ACeb%G%{nT8HoyJ8NvY1s7G5g!$dNT+tJz5`SdY-jT|hq#jW zob)v3nT?((PfxldLyA#>a&{PT{A7zM&`h7Z3`SBdV~-asBR|+{aR6pvr}{LbOmwSX z0>WP2fP;GYB@ool$3RdwPeXov4C&r1U#;D8A5&VTPToUI3AR#M!)fKs8IZib6dF6^ zX2L%}o&m>mzcnJW!A?4va~!%JG87tx$Y3P_>8+x7N6?Z>49UrlF&SGlKnDA+nsE?DDI@Ka#4uE+^1cf4t$Yz)`JC5!RwL@+ zPLQ`V{vdzt;Ni}3;bul}^2OTUZZasnkMcF^%~dMT05p!_o3XzuVv%VYj%n8u9=DrB zllNNGG$T#)UgJo^giS>#`MDrJE=n~>&MpAO9VG;hjDvh(tJW}~{L~UftyBhtIdyug=ps)h%^!SK~)KQ4yz8fRBs3 z2ft#iBC>O(d{l;1I^Ql7CuUK)qlF}s5KX##*6Up-BHemON{d7eG}p|9`Xa5BG^Pv_ zB?2O+y5%>JHo3CGr%Fg2D=g0wi7!!J)wQ@F4*TXqu+@ED3h*n z?Jguj4#vT*ttHO_S3%;qyvwbHM1q;;`dTKk)uRYuq`(^RjJU`S5UWwNZRLUP_5z-&^kX)|w;3T1e z_IP~0r@|3@=OBC-pYPYo`kZ6@xmTLX)&#E(Y8<7xtx4!k$kbkDHe#bUsj`CB%&ct^ zjXdv6U;s+!!{s}+XFwOMoMiLN-8qfjrqFDK#kYobV#@z!Z9~-WnIOw#gm2| zW_clxkI!)`WKff6Pa;PtZg5)E!$ z=_U;&4lO%DKTs)&y z5?DsqC!Twu$9PO%M{Jl@Q%d67I3bpCX(CT|S-`gssQ`;U&`GZOc1Z6yS;d>7jxRU| z0@Jw|c(l8+x}%3A)yt#44iytiQZKpJsea#myj=|H+w0L1ybpT7LfqM*lM1@}Vz)fp zvU$7WQCjLOuI&7T_{aSvKYw4_Fw!EwTXaG7^!uNmhhDvVc?)FI*Ku_7TrODH>f4IeWJ+~n&LdaENqzZPRNTh?Ll>>WLUUtUbGc4r z6}or!P#*8Rc=L)&0SmhG_`+Obc*7V6me16!&OlGGp!(*yxz#LmlpSr_w9IcIWNd4& z#(uLsb6_0I%<+VX=|YZn|HLA5HKY&q=e&we1@}AAo%3RTIRWFQ>WSf+moPEi1EO_F ztf~#os@mm!V@)j3`k8D%?x}(S5&id1@8_^&MdfUw+tLODSDO-|yC0kyw>%&*gId;> zLN?-Z;=#_@6mAntC_6+da264!r(zS2KKVZPt+9(M5>EtM8x(yzNiqhSSRXhOyFuQ4 z)hkIakS@7NiXuu0V`oHFZU&V|H<0jmJXk(2?|k@&%kTHHpbvU>j$IWvt*ug7{gsHP zYv|jd3-Jv1IiGBbgIn(fPi?Y7h1C?yJNq3cdYKJ&tHVcvd_qj$W_am2Fl(J`vMe4x z{s2(g9})3`l+!(`%l$*A2h!hvSTx|-g<_GR(U55$giYv95+R#f<283p#l;t@tp0-4 zHl~79y}_}6o0)40{Bdbivf!?M23l8Eu%gDri`MEn+F1$o? zBJYAT#lVYgq*rcy_r5c@X05;)i<1^gIgv`wyV=mprcOLL>uqB7e;R)B>Dfbe`q3OA z>Bm&Lr`7>YucNR>{v7BzZg*e9I@&}UjKgz{^9FnlYSDDVOKdo?D7pO%gH#c%b6U$G z_&Nrvqu~B&Z8ubR$!uu0Jsnr%AZ-mUuIXT2B5f9?1Cf4)DlrXPjFP+n3_FqGwo01l zpR*3>7lv6(l#TotO3{!5av;f)?UKEBzv6f&K=Vo_35ifJ%;=~(jI<(oRpY21@3@|u z4eXs4dsDmsI}2t*W%eSQ@<#&|rw_zT>`9tZ6g+{Xbx!-^GMaDmY*Bd8(vRg5q0q< zbSbL(GaO)dIKi#d^FH9`hXOWsr||j=Xl9iFYZa=s&YgG7kLo^l@rU4HO)N=fOCVsV zB5tTSt?X&MKWpq&1T34Ny5ZpCA%y~QCW@?y<}CH%!$ZlI@Cpm@cwZ*y7L-wiene*a3KeAN;aS2`;7kgG-O?`ObJXFw~D;YrGSg7D4n7 zx+VG7k(2p$<%MHnP(H9K-ggY|@g;{7U}+xJ$_FQZD8cl_7%2mS^9v)Ngu+Be7wTO|;Oy1t*=MwA5$% zcDS4(2brYnGC?nh`K8azBT=qhb&yI$mK>y94*6 zy>#bLw?kyu)VPOMA%h*l?h#r_Z*N9PnsK*ERR^W2k;@8uM@~dS&pAFq6(n>!w%*A>4eL!@qbjBx_4jiz*#DV2+EnKbbq-7S~DYh7A zo$(DX{EuY^>V!7I6l;`f$N`VON=4^2G1~yqji1+CnP_W+^-^z}XhAqP>PHXP&^^H2 z-A;=}dW>>EI)8n)HLGi+m_xbH03RL6|LCy04Y~hVj4Sx!WCsg~gRBf8h85nLY;=_weFGC%IU>JZt07X~SZKjP1@C(*w5ceCzpi*=+hrg2+ZoC^s-i$QP4VDCk z4Zj)uc*1hMhmv<8s)r4=l@NW6(R=Z&7l!Z&5zs;Vd3tQM;JO#h(VkITLh6EngNwtK z-v4AQ((#6iW3H6EM>jy%;ME1Q8&KPd?$+4DvPxF;zTukR@e(ttir)94Z)gsfdmq=X z7IV_)!(9xH#V%bk^+HKDOMLLh-Vf|0@M>Ik{(3h%{~z!Bgn}gFp6CoO&M9|$jZ@`@ zk)8S!PcgIXHlu-B-HWO)7@Nw8_=NjcGcDq^e1RL4l2QvYUv$$`qm;!p8_c`BB^j zlU%QR&2o6C5DblzS&Wq9;1jRTEc#)@y2IXdrQ)m1%ym9lRB~2bze8X5UmuFoI@DTm zA(4*D67jSt>#U;POao-obE>`=jqf>YMUA)Gk@hJr$sjqD_M4wSR7omF3P3P(sE&vb zXa70o;IJQ)l3Aau2~vlZ0z}0Ts}CgIe-}>gGv% z2Gl6#eRR*o23Bn|5{|ALEpjtd7XJ0=-ijwEe)WL^iQblqw~4=yTs(Q$^*x_`q1Y7R zUzMC}5nXVQmb^1xE#rMuW2Q_qF4_01dCA>vrKbXlN~9naArmb5zBG6F(xMV4z;|oo z-#sOKSK<pfvwA%OPcgoo?VKxFoE@RSIjxPN+F^x!2y!^YdY1PoUZWei_5Mr zE&IFgi$5|;ua||NVway&5TjOoV3wS2E+NfIhlinOd#mQ0pV9N3cUomn&NvVK`?J6b z4!W0x);xZ15e4?booK|`V~RjGL10cMOn(1^oOmK3Ix^+kVKJ{xrhKw?skhUqH!@Ci z9|pkEGM$sp@2RewbaQEiU6bh@H_Z1NG7xKq-z&df-39jbaU2%gt1i4Y%0bvobI>@v z-J5seB=wI^4{>?2gm$gBw?g9sze#UA8&WnLEm%5SU&+c`Io?}~Mm;Jlu;t;P(s@C* zH-2LEesUV=bC0uYKbbhr*}(tFW&>;a1jx6icIcnz&*+_rm9)&sE?ApEeGfz$WB zQ91qbvDM^asoWg*!xpGjg*|fnxE8%TeQU+e6HO5~FkvTW5@^W;hlCmS>+xI9w}<`e z!yQD6E=luBQ6PhOj19)I;UY`ZK_CDb;wax2e&ARgFHzAy$=S-}12s|YWzync4o^An^43AW!3)KvXxOe6>4^6A4v2E*lRuZ);P&lP6go&6FMul zWsnMv{IVqW%#R1Yw0EFj&w1}As4cuqOZli@?~YUVzm;dQVWho_4MShN9X8O1@Pxqp zf1=Kb(s0t@?~|7k1<_55jvabhc41vmOU=oX>pAPy?_9&hzP@V?{Ovbwn>7B=Pn)&8 zuHwKTYZ4iZPM@7cW4|>>)2!>}-TdqQV`*m(GUZTxqhjj95nHE?{Nwb}?R{?*e7YpF zXN7qB8kKQl%Q#c^+^`N-41Oyn?Flpv4ATw}i%)vMkd@aXhJC*4HQ5Z45KVH^`i)l6 zSro|ea*JXOo(SJ8qd;1W=fJJ!LcKf_&xV&RN@ZPr>RN(&PH9}G;Y@Ip+JH0*&x4OP zQ5L89cse}VB-A)BN+PaEz=3^9f@=wXKUqjQ%rt>PT)<8%b;e;WnbRER(bn4?!o9b1 zQyQiMevul4DiKk)6EX;77b@^BPN#O{6Fzt!)8T&mSE*40)*4n8s>>jb?X$A!{6msY znZjyf`E*L`@NjB+`37>6nFU6}#}aN!A)rqZ3PE@~jLpgU^{7BOl+CS>+^tA)AZB+7 zDi=(utL+YaR}x{=)~$ujn^2u-c#bvygJE81At_NgNhx6K7%8WzXa1{q>41v89GGqGQ{sQ(oW00dnwC2alYHnL5*yhJZrTEIhH*kjRFxC1IVu`12O=)oykL{V zw^`PjO-M;~JzcHyT|RI75ip5Bn{7(M^vkx}r&cSmfMmr=~_)y5#^CNJ63GamSTX|nx zAb3Nljd-=zs~Lw9yK?Yc?XDxVs01Z!5-mXqtZ1Q*R`1$XR}i&D>v=7Onrqf_XkLOo z_)Y;7#PPX!l_Pt1EQd06%|h#lV~4XL;VTD%IRD=AK~W;mqhn|oezYP{sX~@R*QHjZ6P^(m0L4s zB_PHxp}!oyYR@Ku+U7#3qo7H1Aeisnrm!1hfVsOY^~Q6Ks)&Fqvjlb_JnQ^qt3{NzLEa+g0_JZ3abO3I*eU|Zi-T6Ku?Tf+l(^#`G-)#i#ii+^K7m#(CJMotY64F&aAKAbB4JeHN8 z=cwks0dh!5FPxio7Y9%b^od>yHT*|cGyXPPrK&rvB3bAyZ;o~Gn%zn{?f(b%1{QjO zf?R6wJq;z?_Yf(San85aak4)y$p7XtLj;uQr9ZX6C~1K9^DmUR2@PiZ+h_F9ZFvMuA^>1$!nrC*`cRYQ6EUSPjY_N zs%&Wit=bsk1ijlL#Ty!ZQBs)~AFP!D&Z6i_!C9)pEeMKe{g~jKG!@hK$Y|D*O)@!( z{@wgM^f1mjS!TZ7O&EK0j^ZIVFSUOg7uFafnpl5cwdY-wt@Q(4zUpFTmX4MAC5G%w zdx5>6Y#)N~F9}YWcHTjdspA$NXONvYiwN@PZ4NS>1e@~QAnRmm=(iVA%j<~yZU1vW z1eQpYi6vBhG)qz!l7sSY?lN;YeAt;gmP{Dy1B9-B5Jios)%a z=ZLOu#DzfBF*$ab%J{;$>uxlPVa7v3jKVG&$;e=Dcc^lwu8@#Xv{m_37ff7z7{Jmu zb@NH-LmKE-or3tPB^Z2qbqk5BEsRw{>2hFWV2DL_U6)OS^gD`X`8%uyrNW5pUg4;^ zP24oKBwK8BCWQ5JyUUE7#5#|juoOO4;9dYZyBnN_2NJSGn)chXn#x|ZHTRfvfG!kn z@c}O+^|}n$-5Hcg1tz4nO$dy6kGh=@)h6#8NmnE$2+;J-5uXuR3CmP&EgDuBn6L!o zi6hn%E(xisxB>+kYtpfdIj=?1Xv!jRir$Kkn6+};709S%ZG@ukG7yCG6V|ovBKSRz zH4bCeIXoU}E9rt3%reT5LGA#m1>GDn=dq;3oZD}7G3T@zJy4FF^c!zMJDE)!I?2=p zIJ{q5645he=YJ*1yE_R#W>0N~DH|wkdbdH)YMNmlQfM+clj<4znrJGK+1-o|Fvdr? znb`vvxsp>4d6AL_h2`Wn?o(&n`thhRy{eNr%ivDtUNdB+WDtbhLK5cusnmN&ca&OV){QobP`;i3c;qzb zjfbULfeKI;f*?SZ$5wQx9KSTHW*E}*QYxcsJLUHoWvA?E2u?2N-^0o1|70dQsA}Nd zaQoB&Qc2=GU44gqfY{uDFKg@X%kOFxg@xorzEeJX3(RsEUsuJcb&P;hPj)<(az}|} zqIzy4m`*nknISZ}qKS4^xZ{k9H~OjoRTgX3sY;+`Mv9d+FVI^bI}0V@%!UHVFs+aC zpNTkbK|ePh<+Eh$#riTmi%9hW`mL_#AT=+SbxEP1m!E)>KDQ8Vq`aGOZe17bFdBr$ zGR_#&qG6(9i&ZA)IdADk%oRF^+%Ste$U2z^fo9O z{p$T6AjrNO-f7Dqs0)36{C#%N0bG_JAkJOu=Z^kAB%OPFOZWfBKj-8m`6Nx#lQeD9 z`#HTyt4J>>D?3SgqeWXqhmo{ZMNw509Vh8&no^{7D>KsSsO!qi+-4_LZJAk_S(#Z{ z<~FR%tn>BVejnf8U&;fIhdMc*_vdwazEQ7{b@MY58t}qKCNoO^Nh82mUV%yP9q|S- z!V9Q>)1k&NM#O{O8_xr~OYo3>ss?yRzKdan+*ShQNTdMwV7Dt0dG&IEh}C(5u(@Nl z7d{8Z`;evtr&|*+=Sl^V6KNDPb5|z_MU5~UWM-3Qmr!uuF2Lq$Ft%L(&TZNOl=4s@ zCYE%Js%2#<0tX?EDIBt%m3!DU*wD5T!aJ)0Pk&T^p|RebhfBMz1+3y9S=ky54H8#- z0vYXX6wOWrLbr9f=6yVz=~c7TtG?n2$b6Iu6r1vk%Su6v-z1=z?#IeTAI4FjUG-&f zn{)=-OVBe}!ee4)D?w#qg0d^o5vu(*UhaFzG*oN#Te#)r`CNkwN5c(PBZ}@&=W^ar zTPN?Rj3?O!Cn|o&1J6FS-fbCViT6TuY=mB2rN()B19(?Z%pgOWX*1jQ<3&3~nq?y) zdH*IOO)k^b(pDZ{R^7ulxe}PBCF4omfI)GO=>KxxKp=+>XJdv*Gr8rgzO^#A7lH=H zD%LCZFlnSut@l7Q2R&dO3tANOUs%xffQh~>Q&H*;=;xqCN8~6Y)u#SlJ($bjJkLb{ zI2Pu=IOykO)^`9_SzS!-S`t7RV*Ai-j<(t@9(wh6YEf-|t>2B14zKwVJq#dXSTKqI z6AtF`fcL$bRC)I;D@5Lg>}P7h8Q zuzbmUA&ocb$;!CA9^I+%jDwg%F#GzEX;rLfgoS)Uj-QfxKyi+`$^N)oCvTV>c5W_T zq{E%EavEq-#2vo0AMjETTE}`X!8;ms_KFR5e8? z9-_A{&joSnmT({&&!O3Z=++16WtXgghzxOIb9x`?qZ*h!OY5l7~jlf3T9H~4h|1&?a^0-v4%{XLTruXHK^|8xsrhQ+ZO`NZeNO>9U5 z7D!eA*N|)Ms#Qu zH|SJ=$zgc;kRX@D{N`UHx(ddk+(bDaeqRPuVIjHh%1PnBKHL9?eB_#eyIAPTvHM#z z!07nNgGvMc{Y+piZ@@k)E>CJ$>A_M`>{CWyc8`I31brw=O^nr=PFdXkTrB{SlA+^x zmT~u*G_CCAw?BNb{Ob^lolt>=2naKvlLM7fTOulN1EP(9!8zL@6s?^Jj?T;lnZAd9 z_N*(->n4(4bmLfwUd9H5aI_ZF$88L;Wa2X@9y6O70C2{G(v<1z3mUiNGXjym1UE<) z4jEX`^q3`5l~+~=vL4wUUHkNmYDU}3%y;3A36js(f$OiX*g6ua7f;U?P!7!2bd*{* zDl&Xd>UVC8Xiyuu1qF0zRpBBJ;1<}Ryb}p&No*ma6*$}Gq8C`UG%F2M$u53lIT6bR z@AlNYQR{k%sQ!LV?UST?yt<+(X~4-~Nfc+S&dSQ|A@OLsHg4ypHhh>`5AJPjB`XoA#6Xk-C36Pmh_4ERoQwV}q(T zX6lG(y)4kRZ@xGynXa|d>)tuRbW;=%h3OuN{Pm|gj(?Hfqe?WBV63KBl{aFH4rmqy-f9;kKXkyRhkN@}3a(CW}Gy3mLc~|GO z6IdoRp-FBkG_8TyL}g)ELmI=*L!4Lojoq;aWPkw9~G!_b|NT|FD{1`LEo$94p4{AsVwQ>#%7q^QCVsFopzwKL=9 zgrbMy=@LL8le?@sqgu1v18$Uph}F*;%J*B#_n)XnRZOThcd4#$1JEZg_s>_Oy=IfWooLYm1h583f0sZIKNd=QhThiP#rV&T{+NYU6=%v4mR$I z{XojZeTWf|jLbHP$fO2!>mV!jJsb~AHK`O~)S*~8A=ZiB81IldWp zc8X@bSnHnDJt2KGS@0A^2B#SzFn4HJv9D~+H@dt;P%Uuxj5hMn2tf7<&tqdf0QizJ z$@2Y$GKt^C#_aCGQ=ub-KYXMJPe4@;ty*^TsW?vr#z@Tu7tV*GGny6Q|#V* zg`CoZO24r$)NsnbAF_0g#6RasBDrwn6pwvAtax(UUUF*?G$xYT-F?P-^!gh2=eB|;&NX<>CBmVg2xuntocqR@gMqh0XVPrRd?=P~^sn2ip?Dpvcxa zZ!}$k&pm0@czXerZ))wYlOygw?7;?IM`Vjt?#(ORyMJa_OvnB-5wCc7{g(|7<2H{P z_VBLM{d_s&6JOoDYWv@DJ>*@?^wEU3cdHvv!BTxS2#!3{TV19GvPwrTuswLsBlvxT zWcbxrtCy||2I%|Uil-ikm+RMD`eV&TJ-9k;ZBL{{vwcL%lFFg=;Mqj+=BH5C3i>Ei zyi5ez+9u?qN0ja#RtZN7e728v5iM8|;KxS-&vlP(Zg8kE*s|#oA}HY-F$!$ZOIWE# z9=m;GJzyXF_1W6w$9qS$rM%0FT!~(q7q#h?CUo7Wn|K+tNU2xq->Duj@QbYPM8>hZ zMOim|bok5e0maSMKPTn-vO@P>2gvwrbMet&9WlXJL59x?aAK(&B&jlMEK2-XL;Py; z7h=LIy0x*0i@DtS|M(;}6 zHv`#S3o%LFI+3w@Md$@%5=@R5K>Cx;{1VF0|C?21VlzxFK)5#J{!IWxzR9CO=4~N5 zp+G!Yl`u6tYpn0nx*O#lPGPEx0nxECmS`L8-sm3xJ%DdaSIGRK5+|I}n+v%69so`e zCgoJ+Oz7Q0W`^yKeCU}(#qAyY?;N-JF$-n=*JoF~73hS!Z#~}cJs*wQv-uWazbj`6 zV_TRhd*_AdptjMR@!A{6oFL1V9C%gIRvh*BcMcz?z~ATqS)DEWM8?C3vWn@%KFu+9UMUlLs zY45OxyjWmba(G0Q?=^>tMJ$Jg&YE3dDz9nUxGSPj4N|r zlVGx_MXd)=BE%RA!&2S)rL)7ds$R>?z53kGMv?3}(zLBhCk&Vqv;*tGsEwsSN$Bn1 zpn0ls)XHf)1|M~Vv(g`&4&ai=ZKIK=%d%kkrI&b`Me5mbM-x00b>NTiC>7yK-Li7? zsPxqOKaSj7DPFT?b5K>w>@`;j0q}}X+;3s!J{KQgX{iN2jfwaBuBWk!#_$Tc?EaW)ibS z2!L`aU&40ITn@Wxokf7veKDqt(1Z>=$$8US1O*LP&oC3cU)GyRx@>m-^3IJOl%4+IX+Ax?GGpU%Eq4Jfb6# z6^}oYUM!iv?e!OFfOvyJ5HXQ(iqlM0CZ3Zx#d4z^EF7BA{GBZ6yPvaM=NS#)p87dO zvz=NnX@9VhlL67CpZ`4MY$j`CPbmGsx)r;KD80)nNWVTdt7LXBmik*3&fJEfm-|DF z(`&oEO~JLgE7;l%$&TwAzLT9{OS|;P=WjC zIZ4gm zMm2Td$3spC=H2vhiV91K&hg#fm->FGy$p3%)f5g*ZDwFSy!RY4bu^-2Ogfo0Y459X zum1h2*YasJE{e+ew4PyH*01J0IR2^s*^Hw>PH`%$1_y2;e%~dhicAU3zIM5x8u{yW zwMXc>!@qFg9jlkk+x}7d@=yF@zRXD8NoE}^jF|gu zh`jA--1EE7W}R8Mo1aOB$A0CO&~$8$MoS+5>|6lFQexas!*8I?wNVy-Cx4Fqyw>fy zAI5({Zw-)M_to&9(%X6@$NjayPFLDBv3~!xl+xAq@RzinmqE9jEh{(L!9=?hM)9sc_!4VkE>VHd=U-@nL6_9P1{r!(mmoOJa z4!>R03G8u3e`KPr3_rdftn0UslGBg^OIZsm%%2MO_!u%3eI!_7e0p|aWkKe9lMX$< z0FFpniEV9?elfbNQ3beYG9lS{RTEJNLwRq06S^VOLA4F2vg$h6f#Z7BIL~2j-91=R zCxsKXBvvYe20*G|GA|E?NxU=^>KssGOJZb$AftbJ)*M>Im4JJIGXhlL4FG#H5i7B; zhbzQFb~O-gA!I+k4jIh?Tb^Qo5ciQ?0^8?W>0q1QD0=URQ6ZxR?X(zO_1>I+=Rua^ z*)%WG!_*fVxwXuZhnf6FYwV`HLG}ez&>}Gw?3drk)b=FTOwL? z#3eaF6D$&J)$QIH#;Lz0i1TIbirZDE#Qd zT&T+uPTdL=Wk@}xjYvoJO+(n=3>SB>xd~(e+|xnNlQdCU+!vs=QaaQNT#qH1k2_- z4v5-)vuS^z$V6VgLYE0j{V@h4 ztE7Nh1d+fHQRl+&W+8A^pnL-9qmov#ndE$s`I59S1c|{&I9xRfkn0zP@4_Pgw1wU( zjtXv*dm&}vmYx-Onc-*)U~da6ciy^ye|BBp>j(hs^Z-)y%1=N zKFCpl7fEwi^RHr{O%J?qjwKcAV?JNLc+ck7!~}}RQ;P|JOkt39&fOE-H;>y%0sAR9 zsO5FW>77GCZb#zWEsq1o%a=`b*ulf{3a~U*9&yLD#}R*D&W33>rpfl|971{MZM@@C zVPk5;EB{R2_l4%4brJCezz}86L>;qEtro*rj@eNo2RV5Gncl1E9d%{w-|I?R5q2sjZaE=z|)8Zm`GZHNKE#i=*JpdnR^A80+6Ik>=8MzG#9{S z9i=o;w*bSgi=8B=0HY^)t%EdTE2`_e5sp^6QpnxF^fNuo<5p@zNrIZzT}ghCNVKdv zzAc#*$%VCe^_+!bri4=rDaIr$=gyJ)p~0qGuPMd?PBnmhX+-;*2gj-a_=tULWc#f# z9q&rB%``y7HUPa=S%8ew-ltGWeF-8_m@z%ASHB_gT6&$s86H5fe{U_gx^%=cC`CtGV1@S+@Zz zw8ijbYeGCgMH$RQM7NP8K)+gI8~vAkhW#>`eIgf(nz22+NKWPjeS7QLBk+f|6;$QQ z!1&kiasCx+j~vT9sI8@{Bs0Lq7L;6>bpRk!SocWxzT*`&{fFZxEd#orbSmm1sbBDn zn*w8^Z+)CH87%rH;9%mv4kok8@8TV73wmx|rp1z<@gre)Yj6kDtfa8#>yEK*7WMyo z>fM&VMg8Wlo4S}gW}M6|n7pO7VJ7lh+(6K3AHC!h!Apa#cMC1LZh_zii<$GM0si2z zsp$b2UeG+@Q{xegfj;TEgu87QXnCA;r?EIn-X=@?l#vvV*tXiYO>%rwbrESTsr=5^ zpnF8NAjH^Ca@)Xipj$< zt9$t{y?U^kD4I;*VMBG`>j!;cCZ}aI$*e(+ahuRBKdp+T9-=|+E`5hG?8X3XjfP}1 zc|mK2wPD6e#yUnXo8gg9KrUv4R&88)Is%*Y66do3G+3wgepOUctxo@AzZ5Tch0}c>H(AD1k{tlio$i=6~LEW&BRm z+$h}Vtlu5fef8Uw$ITCyY}x%s{9nO<5qdbf_K3q}!JZFRGarrrb>gxjlN$1>&V}HgMUsr z(0Ju9)yX*^OJ?DTYAt2q@md%FM(4BWr~N;&6pnbBY>k(~NGHzdIA}TG29DtXQ>tSD z4A|U-3Q{!A;`M4ZfPUIDXK<2bS#=NHZZ-F3%X*QD;2)B)rLw#Akg@dW6NtnF9>@lxMpZ zRHYdzT0NUb9Kym3i`8WN@Oq-pU}zoRKKws~#h?Z$+z1B0{1H{1w)j3AMpdq{f6_JR zNQ`KJ4g()=xale<*4oWsl*HYL;bdDeIm(^EgygkiYEc%UK)S6C_ieVwXd9sF)k7+; zjigprDPfLvCnL1wz4kagTK6;{Z7lPXxIV--R8yeaZTX+Mt9YgRSg#{4G+Mhm3w{bz$~I zQ``hhA*R!nH+IqQ<}_qds{YQrVRVTm+mc@p**3-~nrbs3NUkku2{FT#Qb){yI#yUA zWfhisHl-B}j&now*e4b;#dzv)e*#^DIKs%IhY#po?Si1WDq*HIPbKWO&Qb|~BPs7T zwH<6NA7HXz{xN0(EXZWWow|T|BThIbqHQdEO7jA>)t`*Mb(pEi^W~Uoy*j@NuK4X# zTmuDALNRqptnTCgFC;4lFz-AsS^A)PPqGQ=UumTOeisu_ZwB~y$sQas(g0jyhrW7= zRZ=RbX?LzZLlfzyJNq3Z7ABtv=uR#q%|5zWee&YxaD7{1V$yn^B_Xrjv`JBxILS(XMoPm!GZ`D}{( zP^A@xjvEjlGARzUZ4-F)JYzu@Ekg7mlGa2{ zHc6=$Wdvc7#vRdHD^cQ*M?9jXrC{>(kR*$IpSf2=P3RJN zR2AdZd82W`%8?j-13@|9aY0@}J);C$A%nBq^fLs2;8OXSz-uI zMv!@5Wkyk)kn@};)(epoPsB(09z#E%q0K@T@Hrs7%4XJD<$#QXd8itai7@2E5ru)x z=3)*5q0OMuvC}zisaEJPc;H|frQ19#k z&RYi1?liC7n(KG(f?yw{cu{TVjb1kG zYPl=2?et$mRp7nmRg*G{!6&NGf$9IU!`8_YUEO%K=XWdhd$UJAb8F;tJCM-AW~76DD2vPn}&Mo%mj+NN0-039E(Pltg?6R}y9#-=CixUY%g27+Urkp@i9j-ncpnN(_ zDoOd^LXW}k9ud!JZ%~EICN-TwzqU7!{PQfBcY~_5TTu|O^1kKEGmXQTN3h&>{{$@9b+NpFB9{>{YZwI;LkANMMA5^gNFieeUI#lxV2+KC_ z^~X~g;%hdVta^m8@N2V*EQljSJqKHr5%YpJKC;?AEttB#nYI4o#NqFlLpSY-jcdiUoE(O zB0X&uEjn?q3?k(~*e}r$=Zxpb`9+7qwfT{*UsEFd9F}45U|eq+ppdJZ2czUcPW*3E z4+!Z)V%@ObazZxV2LNwDEx-_XbUA?)KvN=#O^2q9P#{Ob-L}W$=NiYth&71FiSUbR zbbSQYBelC4*hLU2{QAp(Ey;lkH0n- ziO({&k-^;2-yER29>1!(aQX4kC8@C6ooF~x()}`JNvdbqgrsE;i$8jH=8pLJ-3gDp zLCCFM$IlxY%o?9issyu1CGJ~#j%-{#<2H4F)?qhPXL{5 zBA{I2>PL{A?>8hOvi3@+19Lutlm@tPl-2@GYXIx5F-reznOfC)^`r|5Hmm<^d;~7t zM_!oK(X;4km@T~~-fdknpL?Fckq75*Vm&VHCaJ5?)J{?}$Dk0F@ct|_1=5cOu|x`% zL9XjJnuSxWl1+pf2djgu1=g+=)uZrjhUGA?Ex;{P!~O;K(3?8 zNW(#YDFqkwylFQ|jy0$w?K?eZjeRimi@01L2RpZSD3ql58(H#y-QeGKQ82>#K7**W zQ`Iq7;t$xxCd*LsW%m1QHMRR)I)YgTO~+wGgyIPL0@Wi?n&S0rm-Wr2BjjfpzP*+= z*UJ7jj&?rHA&2Ivowzhq4Z*2q6DZFK=Nv zTqp8uKT0MY2_|l$wC{n>tFo5)y>r#$4u5Wx$*x=&y>;&B#xC#;9I3BR0k^EofRObe z2bv2~$h)nmIoX#>ZcNEw;K{2AR;&f^u@knUAwVj4o^+o@mPga)Mkq_l1iWhkclDjs zl@#UA3Y1MZXJG?iaGywaJBk%69Pwnj{%Y-yv&W$)zX4U0_fe?Q98WI$2LQ?J-iEKJ zst>aUE0+uo?mLlqVQ>1TZ9CbE3}w!z(m;G!VoH<0gROZX9APX15j#b_7Wo!jjcE%V zY=>hDDa-R_n2U`rQnAe+G36T*Wde~3@XBFCzbpgDUm>42_Qm_dUG1c5Rj|W6#yK5E zw+y|}q3pHn-PTH*}b6)Alz*6P%pWSctd|S6P^`AT6 z?!*@E_HnP&RBv3V(N?Buf7!oj*pVmr5KgHa8GZfB!N>QlR-U?5dNE?ija!}PD`MwG z{1_9xf?M<-xVJ;PuoyBWLoKv3`nt9+E5>N^<9TwX{o(?!#ia5cfBlEka-W+ z16P=}XucT8Fn#Dp5gs3#wCt4$d9hLe&_m4X!bsskqL~^I8 z0l0k9I=X&XPLf(=-I_mC=&-ogbc48A3%p~6rmB4Es+vLk=)3B;EFEtRX0d>a;T!0w z>Y6r}03rxgM4q#xin!f7qyZ z4~>QD_?=Q6v(<49DE50k$o3SWa8#LEHr?0EU!=DX?~)k(1WHL669A2HCqvbdMca6* z(#Z_#O$?BvvVDKm4qTU+s>V1o0adbR-kaUy8KsFE9rGes=Kv{fh*R%-bo?at6`6kK zj9YVP8xzdRzM~nyYeJ}?VBP{iSfKm+kv_7Y=eDvgiwaQ79j@yWsza~$l=^?YVtY&J z>dwd^U#`sFwbXaZ-6Jz^xF>B)z3vNqOO>xGJJ&7lTwYo|Wa*KsYyMhvYsmKH`z`o} zANXl&zn(Dhhd~6W&iQFtb!7des7^XeoKX6A{ql1|OY46<^X%c-{o3pMHTX2@ha)Q6 z+$rtb9eC<>0HVJ`!rr4aC2(6yUcNVehL+33>M5|8){|3^- z@z~O%t?Fr0oTi!jlc0Zaw!HK};|X$p)6vWQ9`=6@TyDJAw|HdhApDDEGlzG=p$FYr z&#EbFK8yP6ktHhRaR4|I0D(*_%)tkR0Lf=BBf{kD%> z(2Sx=3(fJUNH@LrDVhB5MAiLIFB`99Txx0m$BPvWX3~K9Xt)FJQw;0_CBSqg_tI6l zi5r`?v*s1`SMP(dduNRp_Vjb3_~6qc2k&iqk+0v?3qa`o;PIZDE)TlKSWLYW)zN;N zcT~PA8?R9B>Sw^Vd*kzaTpf*fWU_3pZACAgjQ71=0R4k`{TwP+9X&tD%yiO+12DsO zr>@uBCG#MIbxfCY6^xr5<1x0mGUeOIX9w=_s7f82=|>Ju^m7WoMA5G-zpsAl%gCdv z3%Vr$hOk`}s2?Y3K}hKJXjvenJQk7D!0ROh={^Om(236yG9W26wB3shk5r3WY&4s_ zDmknU%i{mqG}Z7oD>0u_v@q>pJ=4iT(LlaL|jc0l6CR4bfBg`QR zk1W=09nw!svL#(3CXAtcgYJPO5;?L-eh^cJC^T5I-~}-Y`ObJAOg7?k&r-X-gBd(UuT+j`ZF5eu|N30O!swm*gh?ORhz4tM0O7FW zwy}7$+CJju4X_-%7vWC6Karx+=buw_Kqy(#NBfD{F8`27& z3V3NGM3_dim1U0K1Ap7>g!>GJjIc2-xz7bAVZ!;vPM6ff!D?e^70_yEMD_`z)oid# z0~)Po1a5kg(<|D@6MFA9)e@P74ayivMnDdL6ov}}a|K&4R7h^t2TtrFmY<^(-85i* zFZ?nv=79JY74UT-_O%Q#R%p^1N5)=TZd{+IenZu?sb?}(xcWL}wgilnZ(|kzx*IHH zl5S5{VIu8W2&Hsw2&z9O3jn}quvjCRn&UQikTt0Uf96l73UC@w0CM{T1n)R*II$ypw1_viI@nj z`SwAeRWSgO121&xz&AWN+nNUIC=$#Iq?)ylKyrf~w!ut}DnObJN(8FLaCAwzZ;5yb zPvU{fGt)YG5AXJp4kbP|HUAR5DXZ`O)LSSj%LqMFa=z)zv*lf;AQtA(0<&={$eQF1 zG>9F2J_s~CA6#F&57Y6*?v#3%lZeJbeu%sxsf;MN5eBZIpkGb6kl3}+=X0g$imz>Z z{qx!BP0!_SC_Re$$(zmHnC(;#Xm(|QtXeV!*>lOSzODg51+u@l439WmjQKW&00u33 zV+EHz7cH9j!M7>^MX@eXsg8FGx=1`wk+PNYQJ2)7_n&|Ax*UA_^uLK4>5G|#<@iMY zFaWu1r&vg#w#8+LD986pzSC-tqgN8`KJi<^2;dS8!%nPazeY@ zr(?m-0r+`04of6E%J~WUG=}SJrkI^ufMFMnn_%?JTtTf#i=D{I#cu7*D;Ds$Fv*5l zO7#9L6>jI{o;ZRuBL7)R0JEE{HVVbPumBi~SMv$6aB`T}$iIT{X)Obb zkJ*WY7z*QEdJ?F~gc7o%#($mPMz4$P{D4s)!RyMagg=8WlVgDBp?nXF>)`k1nJ-ksCf7(r~Yec69k<0s+Lu{f&5pr zw2|nl=CNQzg) zbZ?M!#W!E81~e0%bbQ)3zTEV)PE}p=iTZDDnTJ+Pv%UDBU~d%=6$lxrZ%Wr~U($R2 zgP4Rr3cHA%<1UT@tlJ0&5RXT6$b$PjH?ycTz*<6pRb+o83iLSv(zxZRhcxB#YWO48d!wk zwN?i+Yx7g$ntL&I_LDS8pI;={bs-PVJ1)|_sXZK8 z!_k5guyePr!Gniq5^G_yuLTPYBbD@q5VY)gPazC1o}pKdr?Eb@$TTxNOR&(v^jI@( zG-Dl3(wSB%>Pw=%8(;vf+yD-19*~%yP_uQnEUKfplu0Ke=`Ijj#o~T8(-PrI*iP!{ z$_M0Vx~3f_yn@n!>y$X}U8z{_+szDlU<7G!P6In`Unu_EAQL8_LN{78T|x@Gtb}TG zObSh$% z=zwiR3FKNHW_Qf3e|5{EWiV52w?79a4<$E&D>c{=qVvBQyz z?LGY)>l`2rj1t|76S0JGQd2IE?d^TVc1=wL?9+{n%*uZV)BOZnj{sIDC2ao9?pa$1y!LYm^&U$8%k6r z`VcxQjvq);^o<>AHiFoY9*2+k{-h0dt2(({0L|=T)@2JIR{kRIJ15|nqW3#bzjeEp zOIP#Euymu*+bLU??XW@)J0^0yEhe<{J-Tg!#IIBznP1eCopzU3uWT-kKN#I1Tj`@G zR}pjxxY(+fwaL;ss-3zF)S&TJP^gOw2HFL6M%Bne{i5(0_ttppl?Evziqw+_NqtrV zi0a#%B0V^zJ{s7jcmr;ICApmPg)w1!dEZHhdCeSl{MS@BPz0Rw;v-tNdWtEmlyzVi zy@u|~3rL25^dqP=(AJ_S+h7t$sWD+W61`xN=gqsMmBNBv7>VqDZfa+m4%^p-p^tas zq7s8xFMUzdZJCPFRuM$5`|$Q$10&l%r=WELV&sxNrm(HwoC>dvxcrsRvB!g5GmYj4 zO<+uj$0RF~iE6PF*-bewh^We9QGD!; z3MXjuG0x9VjY-Y&zX-H7uLBGl%3{mhGAmci3~6%%(n%~3#U8Z_{KiA9_C^n=LW0Bd z9886rIfI`qOV8kDmWu}^uU7w_nFf|5JpXxl;|;$JJ@cncSxjU<`(o&4Ib%wsp*Up0 zRdyy=Qb8v165sB4;kg)6AnMln0%i_DmI#G$zgGNqLU?vX;v>{Q`o51RzJBTXB)8(im*n0xBm$*tdHUX_;|CBE&@$c>d?nNJ|-Qf_a)Gq13 z{tarYm@~q3er-qhzmAY3kJ`)Y26cQQ5T=_pMM=ua3gxxN z-NK^of7d(s_ct|k4Ca|6&-@BV=)wYBLC`$b<9F7_74$D{^nG+j!u<0-s0Gq(aTnBn z7!yYos_EQNnsLy@9>3?w+Q}=_n&B-rr2C0jLgKInX#C&;Z#$~>nMY4|!qbih&}0ih z$e8eG@M-omIsh_v$T@{UEDliRnc`+U8$kF;!ejyHp6V0@4vGSWu6KA}7xJq`K7do` zM5^@oDUJeCM?swtm=M}8gIquTv+)Cnt}A0X4qg585C z(j)vZ*;Ibw&_rZycp1@M{oPVV1QCv~PF-k@g5hud0B%BDX{vA&!wPvTS~52~dFuJb zU1Y@AV28!YpHwHmlA1Vzu|BwXU!udmMq(W@`~INr*vcI)|=y0oSe(&-X}8xC|*TCT<%#KVz?`aL`7>AtyS7uO#l_GZE-EN zmi{i^-@hEr;T+D)-1olE^L(E5F5{2S{=n#Dblw5yOc?)kt+@+ZrqaDs$^cyD)?w_( zbx{iki5DRb?>g_sd;M$I|Ijb~rJqOnc+eEF?n`P-)WLNW=?2}vD0(;`xkH}Z1`BWy zx!T2Jk9D3c!9xb+0}gszMr(7L^^ZtPYP1Rj1~v~VbpVX5TjM5wU^@XHc*3pRz|~#e zU)koQKy$`dZYv3(pgab|Hw3bHm(qTbyGK$M7D+t7W?ZzT-?2NPEPkPO<7W49O>E1~ zB~{aJR{Tk3q59ABZa0Wb$$I)Tf;CS?OWiGZmKuNYZgEe;#NH8H5&u73gHe;?kB9() zP6?IA>bex3%N^8E`zymr{-*IO&bnlyO~&_xP&R))DO6PG-@!1YxdIlv@q`GT&J;V7 zf(!Tg{8>qu8iFrA@_AJw0X-qY`=K2=?+#jO?9s-{RIdNVI2(E}o5~&ipDSdTr`gB# zw!l*oa%x8KpLRcxBXHPNT$0djSA%^b#_ns*+3%!+pAIMaB%#snZ@N!xR7>2E6RDC~ z${6b54bG&|n8v3=C*wv>1gFHW>Sdru+s^nrm4-4s&&`ztI#MvKmQmc+(rU0gi2gH+rKHJOtfogl)2VqDSuF|sHh1wR!V{I(tG0pn*NPsmtz zCW>3)E|K5p;WVRIR*!^Ih4L-ao*tuywa~2HPg9Kt>Dq2eEA(a7(D!Q<6GPMbJSmn=GlD<}% ziBsWfD3AubIptwwP@==K)@TJ%k_T}W>4oNWfIkkc*n*i#30JIIQYbc>v)N>VOz*${ zeh^^DjJ;2>{bd{80OkcWmS~tq*N!0Plbo{$=sOV@fMSo zG_Qp0UUElTN)s|q3Eyw&fJ`OeF6KI*w5d6rw<m57-BT>Oo-FMe95yt{58 z3fJSS*em zr^BbH;=WXw7dHKJ`9VVe&4WI#TVG3j$hM#+^7X4;mu${m#g|&D#|`ga2M%rd%6?$P zpfh6VT*FDh*cjW~TR8T*>}(E}z2*n+1W(k?kp&qNxZuHc0DxBO{q(-ajXa5BAh%k! zm#fNbtwpxfc^lx=rQ=sl4lA9(m1*;%H`(hE4x-7t;0XdNJ4yqb-JfzcjIzimTQ45^ zSuKdZkI?@YoC`=%eFbd7OxBCLY$nwsT=M2d2L~P=kpsEVYcJsEN|3!FBJ=}cIvAg! zF(#0K(OOSH51+FTIbr-hsHpt?e7<8(xqg*&V5J<+R`mR0&ja86(1rd8hh6aYl zX17c`*c#}<7P~&_b7iJXFxj6016>&!Y+wj08o=QdY=cIT7Q6qt-?mSMMotcFDuxX+ zs>wd_7~5Fw&eTS(4K?#0vG=ro?*cK`H(!MfFujkA)k=&FHL=TGOErpH1r;`pnWaW- zY0l5-|H$y!3%hsg3o^Sa00;t{D>c+tz7*bxK5+w9syvpw+;ptq?X>-sfWGMM5*R56 zatqX~s0H62Ge7*~F69Zgh%}YZ zzx(ROcfy~smtJL44h=t^P+UAAK3ntaq2oVKXqfysMd-c9qw0Tk_p4wre}~fE@8#kw zxv{zJ=ie_}FJH`ML+JeoQVeF-1%bdjZZ}RB|FF>7x?P6R3(F|^Pn3E6WjkhSfoL`F zwGxXy?#+=?%)LqK+}fn^`s5AQ#FilA#C)TSoIE3xvUpQAiNhijEGJ_P_u9sJ|IvtZ>KTqnKMG@! z-2V-b+nv!Eac0Tfz|TAGqlN=7Q1-qqAGLr4PZ}5m%D-7PBiNiYc(9grrU$j}dRMwj zZ5}-lvmK=D3M>S_susF4p*h{B$D#zIKQU(pzaF46ub=FhEcx?oVA|5*=A<6*&a20w zHr{{7E)9Abqj2pLa(0<{^khuq>&}AavsjPCA2bMnU3G!QA>-rCS%k+2{ z3+UGApY4OD1`P!VvqU!E0w##(y6kXVP6~IMWV7wO@bHpZA|sM=)Tigq&;Y5oA`%0& zX~1XJAi3~j!j$T~ZR@6{IOG)8Ms~^j(2<~Hzv3riE3K>?Zy`zILAiseiC>DWtbM7J zJl$ksuR%afAO`m(+=j(<=}m)wAM6M;hiq-|&Rr@Kf8VsAl6X=}cRIv1TDdq|d`kwx=c3 z1RPdd=g>7E`}Qr^ZCDpgh7V~o14A;%sEMCP@Pu zwH=K6gt3$pC&iP5fDl2w5qhD;pNxPh=$w8Jb+b*y4qcS?q6c~LKHndUQE6PJB^Eoh zqEs=>PZ#zfq(E?{1x!E8wB$-iQP5{1jsx@XAa-l^oo#vQ+GsL{ISO;zj z;_xt-x7yOzo)7RxXvNk_f7}FL(0h2n#ylB9RR-F_M|G1i*FFpr*kkRnMW^%Y_#ZzN z<8KIczn@S(16^&wCcWkb#WiYLv29_fsM4kjFDfZHplLB-++{J!?)LxVP}@eFD36+dc`jGD$wrnwg}5)_D!Vu&i%L z5VRGP_(7XypRc{lu}@co3f&0Ia{^mxS z@!@jmgt4!MR1Xd-1_) z>*qoX6#A@~pb;x&c25Y1o?LF!jJWu}JzO}Lokc?r{-2@6OqgY8m9@qXDAo&TIKYbb z)#FkxYX;5?hUCw4tdcXR@1C|VvG`h02&Lb%3_u<+@#-oiC)p*UiDh|x?yCEss9W5E zL}7tJYUXAWaZKo?Vgoe1%fHGe#alFIeO}Zji4m8QuSDBA*;)&JYM>sJ!r29kwk4J_ zD3*YMGu!u8z90jb3^W@hS+Sup1gL?tcTmzyTht}6C!XP&w_@NzGK0%KvVj$<1?ZPD z5H`f6c%jdd^JOq1X8e`v$C2ZotVinjd6Ya<27~GbW@7>nuSuTmIR#!*v${+R+r zb(5v3l!f!#rn*>oV#Vv>cfaToT&!b#!MH`SE2csO;#ifF`HmZC}2z-P#{f$nnu)v`RsXMJoU&c>u<(@)52)2hP=>84n6#1}E>w z8?R?N;#O?n0tfGCRb)#3X8QZ;Lt<}Tn(jX-uR{1yL8J6Eh^Yfdy3XioE5C=d6)h}r zZFZu0=$A41GLFf)yKS4l38WIbdWvuuGzUO>P!SWQ*Bpj;#iuY}>hMNz0_JuCqiK0G zaV1h4Hj=himL|9WhQ-QQgR>aN&+0Lb3i>irB;5mvO^l~Fj8fJOX#Cob(Oqvp&gjxCkxuG{ZT)8V;7+Sx=%w)GWd#>U)Cqx7JB=q1kJRr+6_4Q$B}y(U(RchTj~xxN<7 zB?8a-PL8R275c%Z^~O5Nc{3+7}r(E7LC&T4aGdNK9C&U=Ms$gv7Jy8aRYR#QqPgpARnJ^W?-TY2`HixLG*&bfZPTR z(Tv?_9owYVfSFV_h*O9X%Z233WHC&cckw3&+B*YU!b6J%od6%N6^y+%f3wRWlGens zU2HY5MeB#o?xKZXSj3BYbJYIoBHhiY4<8Bd^RzHh|AC!S`BI*jMFV)rk2+keO)tAmh(csWV%~g_UinmJQhhM@*dGDA>Z>52xrWzwy z*-ESCX_8g`Og;D>Z3VcOCBQ7&9uQ)U@B3!Ui0J{1C_t+doZ)ypL`Y)ZZmYjl@y1Ip zn?XpOu6`4=SvXKvHH+}-0=lw&K8OG3ESOMK@|J3oDj9dZLxBbNq#YbmB}t65JylLOXS1aw*D{K=}mgdG_Lgkg#zxj!9?`RGx(RoBU%nuqiY12T%n z!Mt46?;J^Qsf@f8^t|U7T`BnEFs#=m507fhOZL2zC#Qw}YSnEw*BDGEezwN#O0^yK z=TbM;b*t^4P2=n~^FQ}&g%iKF7wZ3+X*)UbWb@of@Ax$j7LX6bkDkbCW))Q4vIw2B zne@a;o)6h%;&;&Xt>Vd=SC)MGm`qW6!CYjJYJ!>)r0ZeG;;)A+{@XGm!!WhdKUvp> z+b0G6elu(FN4RD<<^LxH)9rJ|ag*%%7>bJI|$=ZN>M@ka{+s30?-^%zys20B?##CpaoF9B$$w1#ac^; zHc9*tJVl|Tg+N)C1d^qV0y$1b3uNfOC@61K0D`cP|I@uWd^3*PG`HuHd)a_CvXJ81 z0-BhzMh&{@wFT&nio=Hi?|%_9(pAY=JiU{}qIRgdbceS zg%f48+=9eqMVn@?ab&xz#9dMI_gQ+A;h&A({*OtUO7%F=HX!t|{>7}l^9p+H0Y5cV zi_!O+-r^xN6V$?fjf`qiEi=KM-@;6Z3d0uB8^bU=UBQS%IXi@%HnJk3&L*mkSh_J& z-KM!psVxCpD`NUc#*EX3yKRNl(5(iQ`vcw>Tj>A`Dm|&?qT$?TE(qpDTfAYef)K*l z%@)D%WVwAbIUL+$PLR!7dS^a~(>sv+?l>1!V5P~ZOshYca__^?-5_8AE#TEj@IY5n;@*OuOU zJox&{bw2FPm;VkN^~0-~H;riK|NqfmCr~y*p77HaNGC6KuyObQdW5pjv5r+GYS2-2 zRj>?aR97Wn@eVbX*J4Qp9gk;|LDrD^IL$l>9HNohe*b1Jqglja!RR zgu2Kw6U!eeCB!7_14b?*6mDG9Au?k`0dTgGy?p{KQ3PJxB#hM#(C+yOYzF#-T*9TLq&OE8C!LF>VC!+#vbNVYJRNMOIej!&FNkQ9EYMh%MUi$U`` zXcClKDrbXhy$Bf`3io&3lpOd>zKEt;`**@jwy zFUvsmbo3sC9iSAkay+nKBO+>izaRw(1Ej+>ufK552OP4&l^Vrz6Py9)9&{sPW#Lv3 zS2>jw=?p%uwF|7eil|Gi26zC&H@UfGDQ>r~Nj6j@OzPM4_xGXHyGJ%BADgxGV>o-^ zx}!Q~GU0H{68z6q6(t1K&_wD6a!*MK*aE!V<5M^rsfX)KMI2p`X^~ye#D#RP@6AqL z)|url*>Az-`e;q_eTX~gjWl!lBI(Z4I~d8Ww~6wN^VFDZ9uPjIE`bVY;u+|BRcEL+ z$l8UouqCBYoW>>oG1`cd-9AFa)V37TH$dra?v0|JUNPW{6C}NGpPjr-Hu7AUrPim;-RyH&CtAqTbMB- zj+)a)2aYNBQu-o8u%7VktrJ1_|K2e6uPr3`U1fLOe%W$@>Y#qFMxMUmUxPS1iHc4F zXgCnY-qBg%ImlGA-+^pQsL_k`iYU$_qJPg6$epkV=;}yYTf&#SiZcO2Pe)hgos>*; z$W4F*%B!5>p#FIm_F#O?iogxGpAMaHctuLhk25}L8UEFb1W>%g3da3hA7w{1&u9BD z`r_^gV8KDbk-P5X=?owF#%8-5dt$>??(*eB4^lg^_kDXt|9*s=b>Xc#XxJt0<~*M^ z*`y+Ll{m|~4(`|an006T4|Olqfd$$?;Gd4!M+v}^Ja3S=f}#9LEAJiXB1qtJ`tYgO z?MwW*t`UPSaH9qG=iyn&8UDVe=sK*li!w8EFsCVJ;;n9a{PaZ$L$8T8-0GyZG6Xi8 z$lXbCsAv8vS^m&ovk&_zIjH6 z&trk0z78c1$Z}ptOueuss_n;t!7CrGpNF7L=vmhz117cLhLt=~@#XK1#o;Ych4uXb$&Q9CrZXcXg08P6rCB(Ww3Ef7RpTqFutW zaHEB>0hTz*=;6RSUJlCvQyrkv(Ke8z^zmjwz}X0ob*}l2hSE*@^P1o1CGQ(y$U;Q# zJ(UXJB#Ht@+9a&#I)mz$GY6ndzvv7(A2}UF{gAk5mO-ROES8H&Oym`<>C`1`S5^QojXtIAsavsx^WEn5pD_SA|cTF+f%*@K}A^HnGV%jfn=#$x#Xlu_ws5 zFd@Lb5sVuHQ|PK7Pch20i=Tv(riReP8+|-INc{G?IaSUig_fNWJi!SnDdfglFHdJS zpH$_j4fUY(>_KsR9&|ToDcjlawgoUY0hjbO)*X7~BqW(8*4v8i+jXN zfT@Q}3(%hxaZnl`0~}Ys;HC1dG2ldj7biW1ewj-j2cS^o#v2=B7nZd4U%BG*skd*{ z{@8zd%!{Kj3)kH3zxK}M>+7OAO3X&=(5VkEAJc;9;;4!b=N1Y?;5D@9m$rq$j4rVmgmW!E?Hz$2Nqe|PLuinC8oIUOZ>%9@Ni@l3o#90AMGV-& zyue#wy!8~D4St&pSU4{4$WAUhMG-C(T1hHw6k__NckaS^l`1$cQN>#iF;+Pcj&rpD zQ|jp}CSiKVfn(PRPV{-*7VWsnAmvmja+Zh^G*sXSn!{%&l9Bs-0Y1r@MVe82c`RzG zym9qbuLj0jeK?W!DDuUP?Nc?RD!BB0Vh(stx_Ny6A|KjE15JE!1sc}ozcKN z1F{{Y3E>WVHD<_aNp=xrYsi%AQXtN9xB;rCpM%~NTsb*Q!B|nhlK8cy?x>Gwei-Qz zjemN*1;y8`wy-kjWo2;Y! zf47 zuS}#465fNR9*rm_@F@vRR<*p)$HZkjc0rsXIljV`Oj3UoVwR5M#$>$ej?h4$H3(`AKzEKrH0InyNg5H)!khxM0 z#1V8oIY%l15(x#6n9+-O=W=2x(e5Y9h87+3$kk}5UG?I0@zO71Zhcw&m3^5weCh68 zE5{bBV@Ut83$X10vCW!0LyzBK(SbK4z1)& ztJnC~{5)Z!6ohED$CMQmaMTxrQXLy=*Oo<3Re>0;wz#}G(ER(e(w8gm!(s7J(xR8c zIfrD-k0qcpO(j=aIG^>Yh2~Tg50KiY=#gG#^X_gxo>UElGtJGntj#E%T@4_%s%UrD z(p@Gapd_~H1!yP}3{EUNL6X8G5zFuCd;DW+rRoW;cHY-{jKV*7UuP1**cFZ*fg8E6 zdIU&^HuVT7yNoG$hEb}QEgG&t$l3k*(W5*$V)xWIb4i@BCiDp&XkI_Uyg-YmDx6%n znGAYfspjtEhgBopcKHPvR2_o<2d@#`5CPMp*mK@Uq|0(+l{^X*EKAGVDaKK?!}1#8H{j> z5w$DdT`@-*>LL^l>y7WRY#+G>h$TDsOkhTmYa|Z7%u(}WHCZiiL9%GI_@_5Fo^T-V zl9UyT*TjieSEmzA^G$HP@fm3fJI&x}9gXRxQ>3m+%Lya+I^b?P#ml_9_JH?}hjN5y zA$2QT31k0QJmZ51scz!5T5!&8CGW!6qdvi&+{FHz9Ss6BK z6Bg^;E+_f*8tRtd$w>$rlGqm2oj{Urs5CDSbT|9E8lJKvF?W7~Cq%^CRqpenxK7C{ zpa%DaZo3~-B2wK7=)UKNl@Odg80!%j?S9z4IFn5H3M%>a26HSFX+y8#&{$7~k#Y_{ z;1!w~uu5!d29B`jjV-8hAn|C%Y2Ew6hoaDWwDCLESC5=kxgVHO-C`=B_CwQI;I-uN zp1tRe3_%Ezs{y+VKx05h3XKjl56yeU}7E_QK40HN+VN3>v^GL}BMZ-f;~ON~l!e z{$}Owg_)FSSGRD-?>YqC5?)y{BR(Cxw`c-(39^?ovLgcPNR&n;<@clxJ_5TZZm*KK zz);psN-n9*%w{v%dr^T{QWPM)JTIVWO>ld9ko$gu%NW$2MVSAaV{B4A3HJ#q{>t1i zjG|Nz8)baM4A%~?XE2B@8OjuDRA)nsB_C6%KCco5SWgwx>eU|UWjt^C#&0n12zp-R z#sBBO>~@utEx2;bza3J-%l|lRmi1rTbHo0ruuWb6m3@xyKLxgtKBt-&ocxEf)l<6E z*&=C&Eyj4XIk!XVu=S-5!v$h|xvg3k0T<`tI@>U#Gc|XmqRaL-wI_9U9&*>+VXB%J zyn)YbFPM$6FdPvYS5sztE*Dg1O~y{9rZUQUs}VbFpU4FkTc@&zQq!2Qy;d#uKm>f9 zu)cIo<(}ptt0hH(_sLCM@&-vFjH|5TOdBLdp@`fH&O9f0m`!GZWSaxn@66v3_-o0H z*>yiHT>0_3JHM>{`u-n@LErx6Q+ocVSgfyJLWS+2w&0RBDNxtm68Hx)2PjK3jQ_@Q zN%6nl>G5E9oUoH1P=oX#ldwfPeZ@af-1=j65K96}I;qWI$!)3{%sfkblu!N_O%v?)xU{W2Dt>^W& z*&Y5m*fKVGjKB+Qc=p(g;wA;a0jx>Dk!W25`1y%925}ma76VE~r#qspM!-?lAz<b^j?(_0V^Q_&u8X4nv zW1l~gmSwqezj1NB-{1-9mWsNGo~)J8V3 zd-dcad-9MJ-m9 ztJuL*-fF?wt9)n<0WQ2u#Jqdyt>Q+K6qNp;b*e6gNeTqSmznY*kX1-CATvoiAEsm+ zqqpyeRvPs|pQEeGF%iAEX!i%?t@^2nD#2k{-N?1}xt{uxN6untn8Z`! zOfL8@bARgC+DR*iKBzwH`*eAq&42wN;<}%~-1^YX=oB6cEP$qPlZf;wszZ^P=u<$^e$8+AqE zHj*IzmWA@gcHrvynsv;|3e!!jXtDJb5?WDd*%nzBA4_!_)h<~)#72@AHH?Zz;uQiu z@+7^r4_721Z9@Ur2xl8fNZI7Q8Dmqrv5d4q0EZWr5-K9@B*|186w%M<%}!#NSKqnN zfSRY>sHsj-6w1NrXtxb)I@De)xoT#JA(_>9kPC`o+^s#FcE5KcIeYiyKR)K77ehl4 zCU{8!zF2Q4FCxH{z1h}DO^IXu7HQ|XhCWu`-@AR~vJ7OuPHr0t+T$?J*|dSzr;Hx^ zxv#@$Bqp_V;$tfkG1c{vQ6F`V8e932Aa#N=9V-V3Gw9{kHRYNgHR3d)3(!es3>rWSsFaud2{8hWZNHdH~l%%L9 zX>dkutvWY-!jp>wQ8Nco+bO~~6cCuYe(raqbOI9)msN+Jv}pMtP75R55N{+4K;Kg( z8@eqTarb{ns2yw0w8xhh_sa(FLXKe#HDl`56KMt0ETlcU?Cp8w{(6F7G86rcxH{Z1 zQ3TuPwA+_K{1|QN;x7v-dCeRvlL9I)>NV?q|GYMBQ&+e`*g6_>k@C{#zeZjD$H&La zy>E?sD!%v@nY4>0c>QAwE+vNhhgpWWIvLbrb|k;9S_{Zr^1CHP2@an2a>DRU%@{$; z*b2Nj4s_o2@<)(y{1|

0)tEk=sDtO1P)gRHtP*ry$e{FSk7Um_%&t0ZN(*oE=7Df z)!;qeNZY9O$_wNJx>OUo&AePg1AiD66bY$j@?qvQXxc&j$@b`^`ETxXc~sfSLJ)3D zC2%cm^ z`0ZLtZFJj2ghb~LO1%jN58l{!>@RIlN9f|oeOUt7LqZ%*vfU?U~CH8@4@)))V9ZcQ&t zANDbdHvO4~k2z_;hU+NMes(x0I`^vKlc2wkP&O+HYPpD(J#mW1_0OIgU_lW$wS7#B zzw4!&4aGt9W-ISI%H#}~TvML(?X?%F&7R;jp!B!vZe)M_>srm?kKTwl@q`1F_>UW% zS*32tp7j^M0LEC-$_WL55C>XdeqX9t zlJpn-$vF2(y5oLmSis%3TVYg#CM=-5%iL$(J;OYoeaS<+{{GnzRu@3Tj}z()Az*9X zpesa+!5jGvbrPc4FtpCACgB%w)sU@G2Jl~S81xbdisP_`Fs;5Gx&jt z9lH17JwqH-LBzd)M+^k8*9`fGC^V#2j%gaymzc1fvZv%QBwJTJs8#7!xVPRCyXo* zNRK6w!N|p@R@hlaE`fSRE`VdX=ru5c(awW?0GSQLk#vY`fa>We-0PR~|AHneHdD(tj!Ka8f$96UvD-H#3V?#nPu!FnfgxCgVBZD{xq&SjDo!91*CDV$SxAA@Cl z31PQkNn(3hSCUue=ahZc&0IQhmL->#&$ZxGYp8iY4JMj#I&*ysuIO10=O{vs?j}&U z*sl>C&hjyT_s|>4-zMb<9yx4-?Op+?MMze@WZY`epmNleab<$)WVjreMrGQScAByc zBk4rjT08dT5aw$)+sMLv5+J6sgZ}^;>%h(m{olLjqkXd(9eRM?Wcp311rt#p3T9Ew z#-`Grl!^RSYK76Z59|bI>qmxV+U8bMnYQ=HxjZ^F#~Q7}$b7fen>=Wnw(F9EuBCM{ zvJMNv$rkXCcOZeD-6mQCvmcGj2UMkPR5fL{EdrF$rbU?z+X!-OMJ~1%Cu{NQHpN<2 zeXR&ev59h?Yx-5Kcw7`G(ix_PaqOSrQUx<$M8HV1uO0Zc``CeX4l^TpdA-i0*K z6d*IEwg`#S%3K)92hKu<&)5YK{NeBKS@r=2t}X|D%a=JOy`sv&^k-boUpSJBMS&ZWJ9u@-nBcpqJ{rxiDzsWrAPkFAnB} zUu|4c61O$`Q!OjY-SQg5j#+~M7WGP`73mwP8{&3`-a_~2w%2~D$v>qFGUt@w8lff( z&~_SETQs9!)J(4ma^wdO+y)s(5QI)f9jGmXOc6@X;woHoT#frmHj3atOrQ*)!9N4$ zw8Q{74=zBB$hvTXgjcMe%?l2ELcBzfA>HOWk<(0HOVtlO0ZR8UYG2}yesbiyabs# zAE|LGy^#frFX)UP;GhU5zm4{1_K@@wvE8?7gc&=pa$>n#DSn;JNX5F|8Kt?0!}OYy zYP@JaA=M1fWAiaUj3eTz$Z^%z(F2c6&%&S!q*ZH%qhQ=5FNU<}@_p4DH`3`#z$p7AJtC?8oiuStAEc1Vw$8fJ>`kUWY1R2)e zs$fG>gw;3t;4{U0CPDw(wQCelsbs86qad=+0}opGz0Qeb*L|#{>V;9{gL%oFC#L4A zXKj9Aq>!02(9DfjTXv9*tqeKm8B>mGO7xP;T8q$cM zM(-SL1*@PjkFq#yL4bS$*+f?M&c9TT`lVwJ9~^kVVlBB4xq8LtJL2k-La9fjsg(<1Ks$3u2LZ0eh{3FyP9`5 zYWuxila>Y;`aX>PWar5P)@2#X`hUxlzq%M7^@J927AO)Br^jFejHzHvr3hs1t34e$ z?6#Q^2n7dM$X!46sgymt$ctA?`bHLvE%?0@S;~CE#j;)&ck%UcheuKh`|oH6c{c)aNFq+M2O$^1piQfnAu97oZ_iz_I{yBGdD!GrKo25Uy1BgPGR@FQl)}!pS;tvN;W?3vPL}tbj6d zsqlHp99Q>!XdLyv@5Px4LBaW8Ojcah&4qE`G|Y7rWtwty$k!=r6ygZDJZsC72by-# zq|Hto`0|2~t}JY8q=h>BYImp$eh5W1t^>tGNNU#8Q?!W{VVdvJC% zD|c8S&@`Y2lpSJj#n^XWViZLu9csmaR#VlsBwwZu_nF>e5Veaomb=*xiGo>yChsXR z=H)}bhgTF&^FENjI38~4ehPC_Cswj&{o8ns#Oo?Wf)}AF*hCCiV!YXgtVYL!iGtRF z-lx0#FID~G)$aG7`T440EYi7MHXESuIi+q)*6*`<1S&dbKg2h;wO~GP>M>EYzPIJ& zRg2vBOg0?oGvQHIVddk)ztyBt!>C0xB0&@_zsn75N1<8JNHTzT(_V~BVm#(=aiA+Q zBg2+-i!Q>=%FVn8UD0HKIYw_lH-h$P;E%~7fFJ>w(Ou+zvdsMAjISf`us}X5pSpRT~;V|HC{wuP)LDjK;9EfOfr#--q#b zB^5HonJIoqD)|ROv+iSH_i`qk<{7P5i?4%I4E%YY(ROzJM%3FHZ9>@77^E(F<#HOT z0UA+NUK4LDl?p5eY)?ns$aqchpf3Xe@$gB)Y!?9RD>%M3#AsERESS;uiZb@{toz3N zN5+zt z=}kF~sSjXr(I0A(vVT>2(3|46+iwr=+9d?#vMo6wE*!fwWVXZR13R(f~Ud<3`|g_OWy^Ks#`U0om}MG5eBUI*fAXH9n?Q$w=XV6rBt zrV!A3Awz+@Gu|%I8_Et$RdC|9e}M)psXDi{&<{ZG3R`o{3~=%sYKdNJ@h$zR(^zQnHAXeNQuo=58#0++2*A zBOMmW#+knu>5u)AI#{}rc=(BCot!+u8aiQ7}~Bs@masgZhP0o;Q`KlnLrJ_ zW(qMb2dQZI9gNfWfHRstwm>uUm2sq+)+Eh-I?=(Tdyw=H8O|{kTpgf}K_lv4Kj`bi zM;S`v*zc)>8Xzx1oOJDT`y5wqP5Vx_P|05-O)nrDsfqsWeIvt~@MzO3HHLo#EZz>= zJg+@RpEd?lmK_U{o6IXUvEI`o4mPyCn`?CR;>d?cy-gMgunhoZ(|vcmKj$0OO$IKC z++oy`ap5R(tjS+Am+GbJLl&UouK%y`76H-Q@^c@$-B{ei;B8+7?V2BS^YmQ5g>&N< zb$d9BrEZL!GG?hdl_Cypb7@(`H?>%<{Sf+stlhQ$`m>jzlU`kWc1r?OTBhi`r&ZrK zSyJat$WPvw`a*y6cVb1#BY|}9*w5AL4i&HYK5k4Dzc#DzPSl;doOi^+*dIV(@YRi& zxx3bZ-}RV^CdaHd0&HwG(%gg7s=!^52Ee=SZs7JybI9>CsXr@g#%!*!-dZ0`+byex zTaAgporCf&e zD|bhel7Or!pYS^fkzdBdXxzp4H=b3?WuD#;Df5XdUqjVH)1Kn6+NLFw@!9tw6`DhK zC|vksi~%Nh-lHk+Q`ULPtH`?GM_GdauI9^(o}@7pp)?{~g@~lA1SjFdT-pE zC3h(?@F@bTW9BU)P3m61(6Zq{$GmdAHbMr(xZk?5rAI znYsVj`+`sXo770R4c(OrObL&X<~42Lvi{U9mcygAB^!9^e& zShJM?`iN3V(=j;hhWxl6!=2F(*8v0kUg3oDEoR1Zc?RLXMmvQi=$J6g{K*KF4l4@o z`flGyvd>_aZWLc3!?aZ<^FZeU|MmpAu_TDG$p^|a91VedxsE_q`+7bIKh6AG(gI7EN+QETeRc&N|L_0D*uBWG3Oq+3Xi6pMG-w< zYD{KuJ$h>*ngTr*vB0kBn}`D($_CfCcNL|&n&Kcv-*o6 zD;M9HH{ZKoK@fR$^S&Di@i$wa{x~7~?bul>YV2`DWe`yMeJ}6MGl%*$rj}={ph5Sp zAB$rz1%i-ee$Fx9ObAhQ;2<RuYOtG=T`Q3UJizH|2&zsw06cn-(QFV zMF%M>YOwYapl^=si8U|9?7*jqzgZ<7BX0QN&&si&@7Zs*ypt(bVMeg%qnH<~me)pG znsvy=Ug~q~A7r!yQ-A*Gy=B~4P&_qtvi-!i| zX@wv))Bnnh=uiC~M8y#rd~S$ZmpUcio1L9hZ2>+u6~ z8|1dbHsw$3KNAB_#2gtEv#Sa&d9xiqE5yAD$A=+w6{oZ7AA162j11}t6mRL3AVKLG zg>P?-uRRFqJc`+^a(m!mccTA0Qo@#!#$JzC@4Ot2Usy-BW2Pb!;{xcjjU)!71Uj*Q zKm%d$4F6)aiXXEt@>vN`OKP5ZR$M|9Z|AdRCuy@cD~1t38H+{#l5&QMQp5?pG~k$> z5GiJgGztA+|0nw)py4J!s%HVTu4-!L9})BESVFV$f3_uUC$7+EfrBNS&hqFCZv#s= zvlid43y;CH>Y{=GF`&Y7`wY0}@4mEg3M$t2JnBHB@BYye0s&P)kNIJ{wYx12J%p$hE%D}Fu< zjEfM4WUnL3y*)2{awPzD<>8Srgp=<@b?Sk+AItMCY$S~1*g8xeb_z_qR^;6ZZx$Ox z=?ym&o>f^A((-WEdhyeUzx^7NyGkEC%9pSXi9bQxeY;YPA>Y}d+w}FhoisGt(o^W?B98j zH$O$%i;jCOavxg!dss4N*6%zyjubDW3c#u{fB$Vf^6L-pe}cF|Qvapq$OO-$tHuYJ zOZ1-T3Yjv$VZ*;9T+=>^hChkv#8||qj!TFZ5?Np_#bxl7#CXK_5Ts|75IV5=H4UkQ zGI*qv_J}<;UDWFxYLVH^KZOqlIVtVJCB#H1_3{?RZ4NO=PmW0hn!9Z2BdMBtd?~e_#a+}oCnBV5^@y5UU5{i@ z+mhazsj7yz`za&;Z3nec)r+Z6@V1v)4c=a%)`h)wP$u?m3$@kq_9SIn}jAdS*?mLy^4*#F5T)Ou0&E0ArR0)@_DrGAp z&?>s=Z=Y~+3T3_G7%-PK>xj8|up$vOS_-Y=r+s3rBEcZJuapzAY(=5kJ6qW`8b*)I zk~W(DoWe}+Q^X#RFBQ$&c5wJ;uvK~RCZC^7V3w=Z22n)Mx5{FjkD^~c^{`R%0^16!U4tB<1y5_$M|$= zOCxQWSUae=TZ7zJG$TWv-}c=;;N}Jt>3%4E_ys$*$Gm_Tn`d4{OoWYWH6A3EiYFez zG}c5?9B`U3^!}Hbzkqx-rQ28wHqcc_B5O(mSkm^cl{44xeD<#N_}<@FB|JIwV&%X5 z<1gONl6?2-{pYcFkqt8oh?EKT6^R$nP@4(%-~m%OGRJMo2OIJU9qZ|1#0o)Yp#~;$ zi=9{rI5hnOJCbYcNz{XvneT&anW%Q!NKF|z(S*l?2Pa}#r~Mz+-UhcZ`G~agAJ)M4 z0wHtZ!jKr_;QO|>m6e0AApy8>g3--cm%S9_b<)U#TG9xjJ_^8P{RnrR?RsFKYFvdR0}ymLn_2iqOwjyK(d{SoOPV=G2NU2^eWpV zA{(eI z2}&bciZ^YnODV<>8b=eU{+$GBzTONHi(#T17THl*#Ps$pIJuu%Png6m$hM{y23H{v zHOw;OTs>+*kA+_*a(kg5y-p1VxD+P?Jm@(%xJ0;`oxJBF%J0w>HI3_(ERkcTxrYAOVDE&NOot!8b7N6BQm8k?tUG&A*Cg zcQZnGd*lJgO#+fCxByIi_ehk@&cLGItNW)l5@;c1q3KYqq7CDR&%udyQ#)KuKEOD8 zDQr+f%T_s12)$XwD+}w3t-tLfVU55Yjv?HUA;9?vcc=`Jp_R#i&icJylUA%1EyBo^ zgr@PoPHwYW4Q*69k@J1AIXcAGK_^PJr#Kk>N^(wh07EZP>wDN>m!b&_Y57kSb~bAE zbuRr_d1mBl2QI@6;WRrXjHFo|q(}Q;(eDUtv5x-$@01wn;A#b_b278mLDI8j<#xII z6d%*%a2&OXUi3&YrV$6<4zKp@mZu8;d^|u`+#fd;Pc*UC2<|`K-p+qkt=4?NO|ZnK zJ4A2kiFB2{+v0Vux6awu{7@Eam`xKW& z8zIlgTTx(wA~vL)G!bPa>TAGP;L`M6M_4WDk_>~(oq--KHw`W~ z^&1K}o!`%2@niX$(=Vy5JHx*IY{b#m^Z&ZKe_3wRt(6x)PLQ&Hptv4Y<*flX--Lk7 zhT_HYGz3Wp_7JfNOT$*{$8yM?cobbJ{XNY@fWk-=M3z?oFCOg>-o19>of(7*X_%h# zd)_>zDn%+`PXP_T9jnXzEA_jZ76dI#()VIu^@kJZ>0Tr+rzq4>pD;IO{FmqN z8DUhlBJrP7X{ynFs{yJ~0+H?pMWj+#L!}r`b|_;ZMPyGU@C$a{ zuwC~+Pup+(9+;P|k4f4*?&OnDTC|xY*?2G^TQ&`QM0tU6F<$P#V@c8tiGd*K z>YLd4!vm{YA4WUitBszz>v{u^9i-5dBD{yecENn@0Fq8rKgC0ILQswk*^AZdmNZRl zP+#P#bUER2Y}h1Zk}gZ_oio&ir0Bi~X`4%*TB1wkxTUdFZngA`9_g1<(v^YyQJ1sW?4s)V?O&xO$Z&IW2LUN09U|OZ z*C(<{PtUQ!l;A9Uw)+RkCP%Ma5;wYyPnIsT0-UNi>>< zCo#Mk9SzDI&^*@1m`;Q>+ys!SArD8uuLZ&3X8T%|)Pb&DZ70a@Xz2Va1L?3g6)5H8 zMu13n&$~Nz)82V27w!CdzTfFx`xk8O`2Ik?-<7imyFVgLnP6{e`{wR@i+(ut`@7a# z&`Fq1LM2nvZ#Vd|`M+>2fo;?ZU?H&|qe#P5v}yt##s(%Y_W#L`SN(~D+Ev%a5_rw@ z#etBoSr>h6DF-$hFFE))6Xk4SMGrjt?1}$b4A+75v#rK{KPo zT>XKJ_n{Pk#NV^03*J6m$*KuzrNiT>+e!j?J|5ywEnd!Uc=WBY!rjNnDKPcbA20a@ z4|a%$u6=7Pb!&cQK|p*^m&a!&75dS+{Oe${4zLRJ`-*LU&TM`S(xx`Bki!XrZuysVcq%l((1=Df75BayV8%0HMI}>j-%mogg0v1BX;!}{ zb&L+Bu)!FV!XVNbP?*vj-@(%=^gvfkc>?UJhW1#>aqz53dd@jx8F1Ww&(c>2OPWcF z;0PYACrmvin3^1dQ_qR=c;^PdBAm0W>(})-#oYa%!eLRgicb3jRs$s!9Lt2UKd`6L zO^2BLGw|#JP@dUFj(h8)sE+0EXmg)!rNsWe07K0EIV=q{bQ*@tjMM^J_@HDehNPjE zG>s=Kf~4ltYFg1}gbK#gyVc3@7Zs$9TGMVqUHyc0#%+v+v`{SAG5$PDt&T25P!g3q zfTw@^hiI*$NRB5?tR&tOXQ6>^{5HDvf7Uuoi+fBK&Y>!h$s7P?!1)NU^C>vBXlSK; z2M-XVapv$cGsIu$;&qBLR%4Ei1P~=9G_lhTFbT(73VuM0M1n_8!U5OHN{MTfc8#%g z8!vBtD%up(n68!FWOi`et1~=$v{LM!GTc--aW4|jcXTCsQKP1=>HP4KNnur>mDE}z z2)&l+@OcU?7%$b5w&sn>r#4+#AGV}tG*U-odA^Pt$@ct>&u*F}p)D$BF~B#jw0SU} z>#^HE0E$@3?|es`D^7sel7Ys*)p2D|#mf#`KGlxS*K}!kUpJCp^yE+~cP1z+phON{ zw2OE}Xd5YnMS~$q0Hg#Y!isCcLgRe+siQ7GL_=uBut*f6;I#bncThK&4;VASGCW@K zKpsXmBaZKeA?hi`2yzFc$p6}@qWNoDZOG3T7v&!~=Qn#~{?E~;W6mj_Hx4_ss_Nw} z&BEU=pFCdl_|Dex;{{^F<=7RfhloQ|paKF978=u!4Lo~5jg2U&caH_)LN~(~GG%L{ z3s}VEe9hhlGLYb7mZT&AHLvK~wKowE-SvI69qDN9qrQL38oM6C3?oDONl;eEsm1Z@ zz>XPbixJwn98CLT#FHf~n$uQnoZ#lJ&+YotL^PESzWmPdq@3e&2m-EBk47hT%fRdx zTw=_v?YFM&ghvc?YXjCjaf))abq>$H=P9->iZBkw>k zm-aTq9-tZ?i3U+P1ebld1e8TSF400WRY_X5tpgu74Z#yyx$_)4URVLOj^fZ7SkQ|A zzNkXaM>L;TpO}uK^FHeDbn~$SH^Hwc;DX?%NbqncpkEg?Olwq-2fx9IR^qQw(`0p+ z%B+6FniS6oq=j0;(BT;?ui=Ix{Jlm|P+PN$^H-k2)~y0wH(bjRbyV(&-cfyjrTFq-N@F6I2T8>u^;slokw8VD8)G}z_Hh`x9R zBA-!b(l{>QWXgMB0&WY;0QaNKp0Ib(^al0-Asg6ag_>NDe?At2V& z%9PD@fQptIPh->^j0gObeX$uoUx!Hq6c^4-S;i7b-IRGCuwYNXQqh|Em2B&w`RAhZ z+tQc#<`*r>U+)`j^xaT+F89@91A|if{Fk<+Ph$E3Pw%=uY;&Ha5;j}=0NK(FO-qd= zvZOi)`1&pR*t@PBNz#^_YroN$0F$MoNw0ppUtLFF)o_dqh>HdVTn7c$HvH0W_p`eU zj_4`{aJ_rU?YcarG^uulv#V(Kk!6>Q@(d(6_YhX9Uem{#>iW_wrw?vBZO2jV^ShHY zAsX@qF!zPuR5I9#(FgO+mceQ4=$83Fk?-J2B&HCyPrYJ_!QuHqfcF4w2`iHX{vLIM zj1GweCFdM)y^g2d9Rk(m0fa<@))}?)I5orfiiiPFt3!tbCm_IrIwH`w|X9guv8~d5GCf3Ucc3$#ugu8JsJs>eYh+KCKaHgn69XxYw59 zj%Ik$RXcg|{*AzR2~WNCyS*7005u zhj&P6I&$LSzYXDDJq>auA#=PHH}X8)fz3?EQFpAQ^Vu8w2Y=GS(Xa~m9cEb{%qmAx zhtg#lC-AjfyxD}m-I4yCS8R^cnU04+k6Mm<6iV5I24qn$u=*mUfuTPW@_6~pDcFzLO}N_vyLp8e3nC(+Hd$52 zhy>O0PWA|Rha+*gAzy@jo9>K+bXZ(c;Egy2cD9S;S%5NWsaPV|hH210>uMBOjc<~8 z4}{AaQwZG$Sc|Fz<%7ob3Z49DxPmZ)&pA+wNAf9qR5K7UaE1h=a zvbcCp)$;yD5P7c9@enakS7^7V+=<_RSv>^hiVQw~{-Y>D6hr@IGB}D1fluob#i6|O z{Ua6^c^lT%FM1>Q0Nz8E;`8#YpmoQ^C!)(sl2P%%_#u{Uf|k$uuWz;XAf4}*?0@A0 z#CHvi2)ZgvmUAaMShjS1*rDzsie1&Z2)vB>5%jJaGzsi~8@zM`M;Z!k2X`If*f)7j zT8LG~I}dH+(q?X-E?(YWwk-aeexFP|5%PPCg5`(Sw5Z*_^J^Rlb|E)62Ha{=R2Ne* zrFarQ?A50W;*QVHXnf*Y>A|88Adi4*DRZNsA!F@tZT&lED!BJ?C(3bKh)xq`xBT{# z8e;M}4k&=3`lpg5du7lO0+@oileM^4>Nloj0NB;p2_f3#kWNha06yr(qWlX=_Y|CD zFh~4gx0YK0^_B1v`%DEeelqS}kv3`Nu(~4q=S2@LC_t=_?^baB-pU&v4;Qe6A(6T8I$c-CRc%MZk4Up|qNC)ww9`ha>2x#vyt&-O{ew`)LG-CyBsH#p8 zxJled^W7oGkbl=w;r_jP3G(j*05kRxxG_`EdqL_*m})>Ke#P*6FUX2d;l@Z#uino% zOGmZ@y=e7jKfKk9#f8=X-hT{D9&l9p_H6V;W}YxaPaN+P^eEMbNti6Stvq6fR+||w zvIK_mPX(;LQx2o5u)Chyv_nCz#NiW?wBd`=Cvh@xVBy+L{AE)V94%ji);P>Wuy(lV z(dISeW7>?fyiL%%ZCo@5;dMYikRkJl9gnVyBn%#0;<=fK z&t7Uk)E7frN;PSS>mR@9-H;%@tP*uAyOyzTB=Y(a(bh$l-jQ5fDzC5+7J|>r*>rp{kU8U?_Rsi!kEH+N znC1QHY5Umn#u2Z;NwY}gvB$w#01Fc)w2W)m(T`+n?uqc(gE!+ZHv2xGv3{S%iQGSqOaP^Ee;k?27D(n^jc*Rw-V?zhiKMp4|gAnh*QQjp#ojdmNwZV27H@V(w zUAM}KV&^Xo_uANxIV1k`(5~UHmb0SI=`?V8*@=n^CGTPYQsSAUM_Kiv&4+Q{@0a~G z`!oMs#r1c7?)+_swtMdnbW!0z_cG&of>&x_)N)y(o97EZP$#ytZiRHe8phzibPFBK zNWy^PbRl72ABq!kLpuOFaK0{D_eHCe2~@c|xX);5 zXUCLIM%k-ZvZphg^N~m4zJ`PhXP9^I1+gY*ZR}tjdBpSCEs=A_l=rn$+$%j^ZwxRd zc(1OXcTX!HP|ab=Jef-(;e`NusbBf}HmFC!o&@0tPNy3;pk9y6zRc;Yy6^z(u)h9h zLD=d|EH9|OfS7#CU&AT5FM`(>U})QLip_Q7{!M>No~CWm7XZzQJ)itY{PwCx_X_0B zRXIVFTP*Qz%yq^C_87BU;uy(4eg0ivsvQ2Qy!{G1AE(=Zd+p+y6TxADpsh#*h|3kc z0tk0F^u?)fhwrT5dRJcczp}L;j;b3WwQrUD^3Rb%Q{A|lF`?+BiC;A`}JqXr|YI}B0xXP)hm0}Mhj_`^o*r_p`11B_fM)1U(wQ9y7OhjvN1 zRbX(Q5~34fX$j{fZrH5|9s%?GBd7wfs2N@+ye>Y24yw6H)i||J>|C(wekvHY6$dWv zcLzJ+y3A`jPDc3BNAMv}6Yj0?2^4z+&zb%;pZ&gm0qOli-5m*MKX9M?ft0@9jWN}2 zQi!+Iko|wv&f!hz6Rj<@h=sxs0hVnXz3bnbqs9U!?t7x~nWMnOn7x@(e=f4jeJ*sn zo3@Y6C$R<%s3%b(1>PCCYQbD0k&W4l11y)YHISVm*qB3{ZzErNb{qM`9Iw!$tGqi{D|r>O5`k3B*0)n?yF@CDrWvT;-<+hp7gD z-&fetJZcjNex>-#!6Awe|s~hfR2gk_zx&sgBgRA}enuN{f0Wv?Xqp>R9=Sb_{ zVXZ+c?%!~mRJFfuo&SZSWlVC3PonxG=fgzTDZj)SyPP3oT&K{)lplUcjGgq)bzSVR zUmBtdkW!tPOivuT{|L~&P%{YHg+^)43Kc%Rs>@yeE-qO0%!m(L^$&8R9CAHEoM^+xv}^wrnih)&VB^SdUW>XDT4QkrI=T!JR7#)Yf7UM{%!o1}w8zGQaZ z)G?+pXeBw5h>5u75Nm* z9vTRvBDx1FAKy$!+LjJD?>*gDR)Au|YQ@qPyMFwNj=c`g^+6zfjEwDdz>w=twLH%b zCMs|~BBh(LNB494eepnfB@n8HJ!*`TX)#o^q{Ami=hh6xBv7X}!}Y(~90zt4Lp|BJ z=@wE^Pc)%xU41c=dZ~@9^{dU_8Pnsd=}k)_6$P^9>m|VaTpybR>1&^FbdbY zMITw|B|M!~7mX$F#^iVm7<1b^6O8K(NBmV%5xsrb)(2g-2;~UUq*4F`h4E;*tX_G9 zhN*Wn$~uRjA8w&J`*2annM)c;wz7(;a4FjWYqJ2eqCsO9Ec|NYF%i(W^rcKd^<%(t zvVf_LtYj5ObZ(w!ULrW=m_lj^otFz!W6`J8I<-!z#lDrLbqc98oxBb^iq>JXSQ-n` z2u`zVi(HG8azkLAgfJ1~ixElx#x!Ap1t~**@o<(bt=625MiuX1kuO!LW`nf~GoXs8 zb8KDJh@!5LXl4ilRa7D`$k`?{mDKK;D8cy%%wPh^|C~o=EEZw?hVa_Wet?*?;IeVgQSa<(gysb%s(I_? zL~zEux-ey2`oIC3;%YY)Xkvac zmHGux6hB%e2272qXHFETdtL7!u_AV4@xY_2rhC6S^|6EIuX8D|u|1jqkWzvXaD~{c zop+2tO%F?vyAvv)os`2dYZ0SiIk2Op_My?uQlZ`eB?|d>_x>0Hud$@=~ zu(p{5^t|kJ)zq9zduuRJ{&&o zba+an`8^_P)6mgo^L2RdnD`Knv!LWpYs;mA zIhWe7)t>q84BM~g-z20bT%?ScN44@b`z5tQA7=7*p#7+CK>ockjph=B)TcD~g_~`h zAbdQlxNUxoqWM$WN#UC_%<5M}wQ>s-{x{h|>S1r#lnY>OaiX-uQUYrA`I8W20ACDTRSPWGYO`L-(e2Ky;xd@IOB7 zqGD_Wu48yZo1g2=Lx{vivj;J!(Y%nDt2U3dlFb&Ob+E=oR%w+d8R?4wjtO{94@kE5 zm84qdFd%hECz1elIcWXau0njM>UzApPn^4TLoT|OSs*njG6AF?RMKnUuZJmjDR0tT zm9i1=U5e+-p-1Og_|qZi@ftqDqqenp_&mQB(q{6u&fb8&6xHJ?)cQnR4=pJ~9JTtf zY^08;D25r#F+JuPLNZ?NAYFfoBuYLc^iw zJM`MJ8N){1m4lo#QzmGb^JJyR(h6A&o)7{4Og`Gdu`j;A(*UFM%9#k=XIy24Iee6`qjhCK4JSs>fvsT4(}k?v>tOd@M|c<|VCm5p{}|RD591j>WpX&#(nb{h4lY!t6)m23 z4`E|Mw4kohoD7^+a~6W6OvlXk2{)%)xYSPdF+7fdgts(;tnJISj$viO<+M76Lcrks z`Jesr!%`7&96ta4gnM-EpB-(N066ain&}@y?)-?kQ!F-@H^*Ag4alG2<{FpJVtEoL zF2JeyZ*B=@0-c@`8PHfQ0f3IAJRRuZ)LPWX2-DdVLzEX7y(ydq&|n6X3t-zvfRGlx z-g)MoKdT5n2E_jT+WC?_ks6;vJpd=;2<6h>>KXHSJelqez9kw5OhV zr<52=vdrq1a4gv#(G}$kLrqRSW!S#vq0R~j0$d4^_eYz z3&*fn9>)d86-cAjx3hfI@4(at(-{t9fg!^v7@!;~g9Tl!EGu=2ax1asFa*u?G9WP? z1RIVjHUinmQ8%GK@Xy}X(2lK+3}h; z2_QZUr`23eli3I8bHiOC6H><;fqaoE@v!pW`SxXe>LEI8mHDWIysB?3RsLl6$=z}4z=2V0 z`wf7-8-amxe17dYBj99!Oy};^EoZCRP2LM?HPP;Zzs%7zm}jpAWGq!)#}_#OE`(ma z5ou-|&~5V%%qU@BW}b4a#rnDyqSW#b6mLgOE@$jYW}ZoU`6`rp$qV!vIbT`rt@qCV!p7^!Q4<9=!Oh{UkI!exh55$6db+ zX_L{Ox5fQ5*ix{3B_E8F@j!@*NE1CY+cEApnaGI^R)p>z39jS>f`YMxh2&#{M3CU*9pLXmG!D#2z(E3o!9;g4(wmB1DisDXnG(kinUFWaEcNocThK4)|iE&nOY?q z(0`L%B)KR$? zP*dgY=6&2Q%~ogVJahDGvh|v8FokPD^z0g-*n;btHM^iu`E0~!J%um8gRL=NF3&3l96@cE2o+A32E!S9+Qt`!V&nf^!P# zo*4@+cxlh3l?5TV0>D(9krb#L3y5yf!p)I*g4P z$C68=<)f`&wi#w_F|>M<3}@OjvTXghvNYpvPzMvydeGXag-Yf8nJe6?1tcTGm2DAn|g>7)t<-&)A28EAWpH9;# ztacQleFGz78tfmN_$dUDjVbYhFxVGci2*a=0X@KNMggXv&8Mk=*Q^-#2tPX)Lkz{! zyX8MzlRK99IQ9#qzr8>DxM4n<1|A3IJn50OM$VST%?=|zNsll*xjEm+9(i;c(TL_* z0^zn&dA4;a!e-opEjT#)O^Ut(ItO8xE4NdHg$Ql7;O3cThJ zU6*#i7S&aeG8Aop^J0O2#eQJdUvuEQ^wpnEEc}!fa6m7xiz98OA6?r({=-#!PD@$Q z0{Di%>^T#n(#BNz$h3RgLZvZQ8U^px27lFmk;Q5|1fGWK%U zn1TBQJ1ZsiphEUP-n$%E=^vdlAPz+f5Iq{&#CWvi6KCq~--q-^F zK5%#PhSP_*QulS~Tq?JFfx7@WE-wuR}UQHrCUY@C8 z0di`P5rrh=ccv1Q#r#Qg?~7^=!22!a*;il8j$^cVa7)_KSA+KXL=WzOW`ywZ0T!qO zOnO|d&x8z`jn8UAvOf&fpq>qMENhW6><;%fIWj5T!Fn?mA?>Piu2EpOzIdub%+Gfx z=lyZNsQ-bx<&xyrooQfVs;3iEFy(3YZxh+oe!w%yQM=qD3NhNV7*DTsf0^(0y~&GqBLfp==Z^3c6`qS+9>A1& zZ^~ozcI(PQy&gv0%CUE?z?sxUY(SH8>;C6^@mFd2moRE1~nQs0`s;le0+aV?iEi_`_af>Bz8eCNnB08zI@=~>}tBiUVyyF zn^wMk+>xD{i{XdQG@XqW%w0S$??A-$S0SrvRzM%`M(N~xF2us^hy5?wBX}jjiS^RZ8#-Hp{*dt< zAkNqnfP~|Q!}yS5NEa6|mcRnCKZ79-3rs{RHfIqT@4maz(sB7^#*0)4t{m*%NDSED zWruv=UJ)Y3ndt$+QGxa{j|;XC&2>C9*u!>8Xg7K6Qbga(9X|PzBAE4Kd4cwFqe3q9 z*kvqw2iMH9yv9L`8)d$!YmFm`)YG0C?Bo=~;`(<4U7qp#_B`$Gh@)Lx>DvW`BmM+D zAv~HeF9xnJ!x@nW|IO!9RF~rq!)+vLbXF-IE_|b3$h+Cfgia%k>x=)K27OIG_GUjG zVyo?hWzSMTF&QKN@)7>JCvtV(R+J?~_3fa%QVH;IJN|a=^>W&R2{T4_nt-Fillgxk zl#d3-*trYo@#TrPq31{n&{4=qJovG^)6`?QpupbwKUjnt3gli{-mGSdCZE8&{Se0n zSYnE$__1hAAtQ{)`pRt)vK-c-28mf1;AKu4+YO_gnT^m`P<>G?;O|)3-@Q1gaCuGK z>{gl~(OH|mmbT9E8hT^eoqw|Yu(`Qq@~_kKqC@glTZE zNaaIUluu>$LI*(7OTP7p&CZSJ^Nig7@QGU$c#8*Z9Ty{ySEDje;d5dCH**yy{Oedy zz74Hux>R{75QG;NWnLbf^JeR39K_)N@?yZzr+fEb&dV}#{PwNdxII_;GW*(b|3eo% zUXZhH7KiTi^l4H#B@ zT!;JIsKF;%SvZ)qYtv&MkN9$nr$QdUA|qbE8JQ+2n>{wR?vxzw4sg)Ew8ht5>gTZV zpcs`Y_Uf|;ErJD$xKSkOypX10edh!af*QV6i-(}jKBc9 zeDYzO$pho;(O;!~9DW@tc!I@ZV)&6^$=e1Ux%u^(O?&btA-A8*I8y|iN4<8BvQ7VY zR_)*GYyW9q`EmO%()RDY+qWy*|M6`f`HyWB_u5-;Ci8euG96(@u7a|8aCRrFAUn+K z?@cGzn}l`IulnZit&9wCCnVPX!)7Sdz|YCK%mxtjl@J3x87T(b_&__G(rLo6CSO2r zGnf=u0L@u}wml~@ew;{F9J)th@Y#sKQ!MP=m_iuVNz{LR{M}a*47@>ImL%!sgWS#g zEgeYoj9F8Av$zee?jfIyIlJ?u$FDQq+PD8Ho7ymo+cw?Njx6360F+r_JD{xwc^B7e zX-6WL%vg{h2TK0SgosN4v-YcI+2uazpAxsy7ESZNVJ9vv9V$7NyGpz3>#Zk3=5`2J zJR)Xrkk5gG3)}OV0%YZky`cwJT~3-CSCj8oGHq_+<*Ys5oGy8Db;*-ko917PD7<|a zr`)LDg+QPPupC~n)Qg(aRdRUb6-^@|s)t_apqDSYGCUsL`F&q+hYuhMmt1Vz@$k~_ zXNSr13#+vzU9pb_{Tgz`N!`XR6Sh-rCOc0FVN_23B1S|Qil#mD!|6)GFm_Cff$9v* z2mCcgc6C<-;``ar#q9TEY5?ni9o~VgMBHir+hm!M_u*&>tjP6O zMpdTB`d^(T;hY?7=&O~jFmNT?Gfxf3?G%)mck=!YeylXouv#S`G+yDPhf=q_I*)ol zh$~~2LBc<5jyIM9x77oDKIHkxYWMJHVO3D)npCzlz-=Kp(!bwZqGz43F0A_-SVq8# z<^}iBcFPdrfOTORdc^Xc4zE$*>spR4B3L?7;UQtiH8IPHiy{C zCY=xzAi#DbpBUhot&tKgy=tDQ4UHpO8-k~K9&`4$oo|q?5Xp^V+t2yL9Z{=GO#H+W zPEjMmp9+Bz^D!SC4YV!8=3#nW0vLjfK)E zSD!+M7n;pTrJe@Sx^4oFobCG#wxHKbfhoOZGQeJ<)^up#;x>+*hhWg-cPztaB-$ov~i&rU|Xmk6f=( zbb(3}6j9EWuP`~*veJ%!K$sqGGsY5TE|E@M(wyG~lXUplm*{xw*mUgAHHk_QC2En= zfgrKXJf6sj)M9JLv5*y~)m4)a&-){WrVVf6ZFcqbRH32}sMP^npUxsu{iHG6;BnVq z9~dxxa_re*6DLpQew21&Q|RdQ|CBr&p3W!3+@sH=DX%+OZu(>ByZ=w;n+k@9PC;^h zRA62{Lv8ZRO?1$hTSK?>aDIgTPk6XLx*wDN*cX?i0Fe_nVb^qwBkB ztHyS^JTh(_SvY{^pzCQNFV>;v-J5=VQx|ljWr!ce-IuakzXuB9Z%{0C@OSuv@B%yx zcvTu4VTe%x;yo?wZCe4qgJlC3;jyrq3HeFU!{6o-DA`|+_u?FIph;e&u`OHi`Ou#_ z5?>=#!@JO#WbnSF;JKp-16m*NZBJGnYr5a;hDEj$8J?vS1QV7|2vxHsolvP^O)HgW z`L9|Q19Khb*+iJtTm;6nnZv;x#ykmx;^qlNV!K&Mn0FsWr6y??l1jPp(WmL)D`UYf zg}E5G9OeR0{~!@v_tYUu2m|4N-G1|F$^A5tv$OztwTFhe3hgy)+E7|~jQTG)xuFGz zQa_8Yp^Ul2O6rRiVe7=&fh*DgY;+T8`ehUC$W~}$M!wV%ku-}cQyKKWB93`C){e%T zquFq-0+uP3Ipz`#7vyA(cW`dMnGF|GhT#eZzRilEKz10+GEs+D9yZl zMpq_6Z6VmSh6w;>?BL{zmPN1r4t?Z$wydT<&ZfzP?MwmFgMl>|mOSp+~W z&P>Q>cr@vJ_JvT!PT}xht>py`54Rs`cmJK;s7+a2E5M^i5*2RLXK@3l*Kho2N2W0_ z_cr(eae&q{7m2cmKLO<=3<$$LT$sbM#3a%xdI1tbnGLAigLVpxqDf3=5Iz&vwsX*ojmEV2W@I*8cCZSy3GYH&U8EI~iBVRfsEB;Lb*`Q;wwEaoykX;U zpK)h1ozWD7pam7QlszTt(V#E-XDu0cn+U zSbD-|q^cBQh5agRm^cbY%U&@Eap*5bM|0xha+}Yv-t~2?Fe9RE7pS*p{WfRHzN5*F zKMq}zvFXZpABRFUDgFrj<#N}aRqXnDUp0iYFG9;r*EapL7*@sx3_2Enpq-I@LXr6X zsiJy5&GR1H!`n}>oElnzXjee51^u;mfkq5MGP1s!m6t*5zkRdg<~j@`GHhW>=zg9Q znV7>4xORv?B@=Aw9R<{$LmdPjL<+I{T{v>Sv-<33G`wkRZ^PLk06`VMm}Jy9 zx7B0+#&8{qOm7HtOD)<_%?8ipo!P{7=bJ;K{Xxr#bDn>_^<+l#q+TsO z%Lkn1sCb+g)ygBMf2FDuJ=R@=wvQR{vYcV#&=0Qxsn5?5BwBLm2M!RH=s;J)IJX2R*4axi z=*^ZsrX;Mu)z?IMi=rA=RFh>Y#aQNGt^-6^4N~+YJZBo4Xq~H}lc8JEm4s)fqeHB@ z&`OCjOHicQA-F_gtaLZ!(W0z@GL*FCBB1S-RI7@x9QCYM!hjvt1XA#vaqM_J$4UR$ zkHy=mZ7i&)+_al>Iuzq(S{C^~(p%CuKPtA&=Raz)L|KWac?IJtPMD&s%pJ4;dAo-; z7ldn1eQr%+u{?atOYCbuHvAO@M@Atf1M%@Y5l~l~}`o$&4@-CRxQ{nJn~th(M@Ign)Ll5Fx`Mk>Ap8ngUu0Qx4*Dt$?%nR;_S0 zob|;2kNGebj{aar;Qw0Dv&p)fWFLdG%9z_@QXpZZDIWlch@-TQ4mtdZx*T)2%_ z4W07b{4Y!I$0Gkn(wRp!as7Y)Gm}Yj6G9juKv`Mrgf-QH~K5}7~Z5jhPvqFFCUuPPy{J)N@q zBp%7kb!K`0^onuGeu@y%bF;x?$s!4zRu0&=Q?JY$In3x;{F%uidebElR~K^l-8|oA zesNdOp=CZjbB^x4d(40;!R3ALw8=#N>daW>rbsBiActOOuq2A}Mf4lO<wx82Bf%KcYky?ms!#)ihH|g%l!$v1z+pq{m zW#7RtZk*duM#vb6GQ}y{$e$!iPt5}Zd=Al9MgYAs#(FCXgc||5czL=(k-UMBM1^xy zyjgA7Y<57I$qSxj8u$s9sjxVV$`-8Rb#_Q7s^~sBa+V*eRg5;p8TspKQ@-h)YRScQ+44TNCU_ zRLEGGRIzJVSB*5u6)3Umyt8aR(k`rZznvw}_6V+oLKf$Hg2~>?@b;0n%%A)5lH}^fA1?E9PJ_l`w~<`u_%cExVBq#I-k3T;pVRlb{fPmVDq7Mx8{lNnkr^ z@Mft9Ed3{?2+1-t+_byTB;d7J75R(7LiDHIS!SgX&!y8vU!>8JBo{_XG4YH*Cx_Qi zepCY9T3qxQ{?u3-JiKc*=On(~d-A8UQr^@@`G3FCI;!j=D~=jEh1Sfw+q?9Z zpR78l3|{f&kA-vJYg0hs&*d}bzi!O_(9d`5$iU@3B300s7?tnJ}>cG$4TOS&pZr$_#Dy?9}CXt-0zPcd9Sg; z)n_C>vqH$S`Pzi2W1mlY;8UTYUkRp&?aDQNEaIChV_l9Opxn1b_ z)$9kGM?3|;*`;irXrP9pb5lf^@%-Slq_yoQA{Na8+2Zqtj>KqC&&fy?IswOo5b0841_`9h|e~7 znee4em+}dtlB9pSB_uNI0xhf5S!sNk)#`m~6eB8q7@~~$Mv+{4ywc;ElddzP|HZR# zv5+}z|4AK`^gaq1?H!qs9L&KutInxYdaR-MwRV#D=tUWEAIHUBD)ih&1y_ssE}bHh zQ4iIu9V&2KO-ns3kyrM3m6G7~tn;A$OoYeguU{EKMTj1Uc$v?H_T1t1I3GAp-Ppg! zV;%CW9OwiP6^EK#6WtCK!Qnj87-xfOj~daLfsC1Am#bwP{CVLEqDf68BI9)+U-^3k zder0$-qu48)SNhabVWE&s*EAvJelZ{>;?zeryC1H2*u$ul@rhE>Ko^c_sYy_%A9`A zqw;UEoNYNeKVB!I8*Y1@Lb}?QF3e`7XXv3=a-F0bzw10Y7hfsZ?CA%2#bh&i~D zXwSc1aO#F++_HAv&CC5lT7^4C2An#SRY{Gn!0mvpLycUNRF8kTE+leVsy^uU1l{vhk}7eF;?av0_8!9ia<1l6xNP#|&gg%-qpS$tt$aTO(r z1i3iBh|aJBdtw>3+zwo#dnWmUYp`a9DpHP^&fc-mYalAhxOwv2Tv` zl968=3BH^=z3dQODEx22z%y6-&mYrL6k}_c0H@bno@Dyck3M~_snomoS|u>SX+BeC zMJ;SvQ3N`7%Rk=bL-Kl`2nFS$Cnqk}Vs-A7*iu1oAxN(yj`meX|If!(aeiSR+%PSU ziOLmfVyA2?e%agi;{VAzpUEE|cC&ThN{kk0QOA(ddli;*|FZOcT*EOfO!`Rj{iOJq z+j}cWsgK{YF+Rr&-JMqz`c7h=-}m#j-F`l8>QOl+dgCHwNWe@K{mAt4UGBl+g%349 z6(x1ocA`573KjaK7(aR{7JNsRb$+1lfE#P_P)O|6i<;uVipw)a;Ab^DKe_s(^!(Kj z!wPHKjajZPC<-oo*s?r*f1y1+41aoYx@ECdw+egmo0(aK8ou|4>oF2CjS7Xh>FzAD zd4^VE$j{@*4TX74`hb_t;>7o-o;x&cf?}cX+-YW9)r<&$fGPIT)@N^Cy5eWl=*ki< zEjK$L_Ev6_E+FtY(=kIM{WpAUe$T+UvtG^n(~DTi`>D6&da9yI6WNL-%yHg!=O+wB|CBQmZ;>`OXS%FPHx>%kULZU+QETZ40+-Qpx?31bZC^9l$5TIS)MS->L2!+*)me+98%i^mT*HSE>Cy+v zQLI&ZVKOB5SZsX6IVGWuJmkixotFK~(GPfA*wVe5zc-=D*k7-Mew87FyWjOMh8lPD zaJxo*fww$yCGD&xvH5i{F{gn)`VP9vT5#Kr9iGlhOvlKNb2uoIdN8lVB!hI#? zLN(!XI`8;*s{Oxjz!T@v`xUhFSK#d4{c)P)uC#UcC_+$!EzGrYFVuy;z;COOqwxs) z@0SAgzYZY+|4*Z+ z>z#AxXR2W5f*TJeWlo!X)z`nN5DxlbseQ)5mJ+rIT%+TiK0Ti~MHi1v&#dHI?oi+x z6H2vL3!>hqK9dSh<>@MGWrzrNs zi_187Qgl0zaur^mzqKZJ*@@FUP3}3a%3LwO@MmL8BB7-$>F?ELeOjE~9=7Q{^T7yLsC-YoMA{n9U}=$b#f zc%A0W`*jqdfWat`SPN zY;o;;xh1c)T)%r6*of3uUv!t&NjK&yoZ=br2yFz~FM-p4E{4Io2 zwJ*jCHiEGzu+u4!V=VWVIWxd`pu6t0VkJ(@lpDKg)Kz*ada>6bZtKb`biwj%Xvn=K z4E{fM0C7?Dir=;pzanl0-Dh;D(d=}drn66iUZUEvSv_c*#7)XC%-QQHRx59cPh+HJ z676%w*Ryh`^Po>BMY)A%H8YXwxOo4D05>E%1xkLJ!i9!jg`(e2;}+gC=K{6QbEV5Y zMqdl^1x1r8{RMKra~Pd6E5ST<9MN;tX~GejW11 z*F2CJ<8D8kG{d*}oaw^6t)CtH_M?T8xNEPLefd+^-1$L0IYixw{-L?8YI`GQ{)*g^ zR<{mLU7zuwVadbdx$DMk4OmmJx5KL>AAyeDb*VQ&VUBR5S-t`Pw)dQsS4R6VmZ{QB zU3`ps^tBIuZ2hhwMvA9`WAh=mFw8Os>9g@LZCnaETfbvv+0Q-FPhXhw##HW|tLSZf z`Ra62bfCM|4|&cY}VRCzXd;t+O;w-i0x=t^h445 zAdmjU=DoAbJQ-u2sr&h!~oL);Hbq?zNXIJuoO? zRbB9r8L35f4J)?E8J*j_=QW7x4G|-(nKJ@(a81rfbEli%-2nKNH^4 z%#uk)%SPr2J*Xq{i*@aB*S?g^9p}VEL`g7bMS4k8D`rP*p1JK@Fi3Z_UiCzgu-Lk2 z-#A7ga2?hZa$|;`V;5NuiZ$ck!(g4Ygxpl) zocImOk_@KHp+76TYZ>LJ&WLXFP;KmR0Kbs;Ej`%Hx1#Q;XOqj=uPRYPs1`nBt+%{# zg9o3v#vcCs55NCPb9j6tQ9X)U$)0pXKMz?=rm@!~Q~INs??j6nb{Mc;*55J~V@dnp zMhfdp?5@$Q;+{U7c4zp%_MRt9q<=JspDAv^bo%Fm)H3hG?*5Knz;CrTO=zaJL>32c zvc$049jyG0?_I+JxD^%clnpUZ#5!D~P;X2Zi896rGw__3I4+9yF}T!k87tIU{IjGZ zo7*mA^t>%lwU{F2`<7J!T7p{z=vVf%sKu5{Q(Bu&^q|OAyyiTzt&pA9agGaNAl(5 zY%#0vaXb-Qrlty<41%ZqwW?3D7~_NOvq%UZNWiGnv7iW}$_Y51h4WuqrHpe{nl_4S}| z3*yl>i!4i2xEnVxina~fCJvsN5mJcy`Zr_QH|maf%eKw?w~`SqkK_vJQYE8EE>IuE zqyj~JRnsCX+?#&&&;OObc@^<^EquAGGwG*@?}hAN5zC`>yhR87Oj2dRmnZ!Eh@XG{ z5+xI-H!WF$jf6lAL#WmQXH9WAac`8D^0pyXn2vIfF{Lh>#)={^tdqeNxnaOuM+OHe zH(C8*NEQGSN3k?16Yh>~VkptM`V&?4V$s+mgb+Jb4qmyDjpkp5x}K2@sFM(xuvDVB zbC!_}b+(9UR}o2G{DvTwWrOfMjq@9eqi^HGJY>Q7tkN(7jX_$W7bu2_pj%kXWDK5U zrNJC5)w{G~su?w*7`NuxLE6pt2-SA>z-l0Bg8D&%kVWab7^*HgfDqC(jX8ZL6=6-3 zYQT^7em>RYdk0$ICyc0f10AWJ0I`++BL)Z{U@efpz^Gsht)etHyeMK!0!e)<6X14* zZ+Fq}9Zg1;Q1sslV|B8qfeNB@++zc70w(i2)*OpFa0rdt=#}XV@3jeSp`kG_q$cbc62m zP@@7A#0I(v_;`-zwwV?srPLl#YflDOYFuEQs->r>hS5=Dg*89Ngl<=6th6beHy>Vt}~TzVTk84U0AdEs9fJbzXjJH;|0@TKW<=FSk=NGhnRs# zY<9q5=N#Y@_x;&x|6WV1scau^!9lqU5xMeqqK3n>=uWu%})z$FF z*DLn~)<4Z`F))lUG()ZleJiYE%QDi7)$dy;u$vvpn&3m$VD_kk$qf;xr)&gdHu!SX z0hV?YHTbtk%30)Cz3V@>atOqc^!Jp5RXH+76^SK=3}T%%ieqXGxkO`>hSR^$r%+)j zH1w?3n~1xVzelAs%ppqqWoZvuFA?jTGa=YvMWP;c+WrYLMQN(zv*wga<+7!sPvL0EY!G~#yVqHpm7#UZf9ZWD}FShPhj3HDZtbJaus!im~rsND5 z=+k#ol=_W)sEi&KQDY%Rr`JH)_yH9G*Zk*)1t-2OF9af(28^ux62B4p+fz zH7qX*d}z;epZUmc^sHQn@*VH;k?|Qp2q0I_r8U{MnRd3`Hk@V|TP`qlHaxLB zTB8Sz`jVkXF8#z1QGW}wZBr*mRv>+FDOa7McstR~3AVKE5@e1YI&4Ki;D@(Vqpk+K zK|O~lSA4{(W>~^4@Oa-zC&qdBC5_d zOF{8AuDhf;l#VR1;Z?F}r@7Un`V4Qg1gp5x<_m*Jn8jPCLQIKu9;9-(f}TIRom@-O zc5?OCwr(!S;M@=^&h#J;i?B zi0-f(!TZwCYF+j#{>DCEG6>~%SXA~rd}0{DD64bqOqXqJH51>U4{o5N^cyc2HerWR zdzw`UNfpO>XRE2N)(T9}vEKQDL_QB@-(_qtduu@I_O|H^kp`I19Y#AO5m{MEud{qs zQaiM&t@sx0!pWSPH*-W~j|92$EI+VA1s(?`1G(xkY0_D3Ee59@M|O-_YZ4gA>16Vl zxGN;M;@TyjhpE*$@t`NN32VJYL14Epi=Z0Es&G@&Z)%EbS`M=TR-Np|zt>Ab4gZxi zWje{WtBZJ!$a=;}R3xG$pBj*pJm=8|L3|#^MD+VS%O}(kBmVT-nK+o#PD4^Q71U8) z&Pi6)m0^~|8SCWnRNso zKe(J1B;H^N46WD8Kt+Ue3erOFAn^D(Kv?#@BY6>!wY(S5q8+6hN}0M1f~knMGGa+> z8%fR@)&ZPYq(>yE+ciyIgTerMQo0V9#(N_so2?MwhP9;>kGD-i`ldD)b7~3iok8H>(f^gA)?kWil&j6pWRw zwo-ULF)xSz!WV(QD0y()-AM=&FD><@{xv8YxLY_nm>XStn)PO7QRPE6jk%i-fV14w$KBI|q^{ zeH8V!0O-1a)p_1)I-^Z-B-0IOfHfgPHxB&9)+mQz8kk>`Z)1>wl28fFke+S8S?vNV zJB&G3ZNNaXtfMT+>l=UF{?&>C#L{%_v1+-XFn-2K23P6`XjNc3>);eh{!G>&Hd0v@ zb%Q!x&7Ne-7Ft3`^+1}BN;9xeyT&UG$PTp5QqU+cJsSdE$7 zvI6opvC6y{6&7%bj`hov` z+;>4UOiukUYiFEmB7e zEg^KSd`(wxG0Vt*O?D}ymmkiMyQd%KM>Sf2dCy(mOW=G2uPXb$PO6VBY>JPWxP9er zWSNz6w_9p^E2VLR!;BEW)&>bk@QTu>I>!5cSrJv5=hY>nDf9oR-P%4v4;|=vi^nNse_t zLfSWM12d&ydY}N2fK|U@oeNb%C$S(=3bgO}>m>iZy#8?aC{}vqG7!LiMJ%9=inj>| zG&30uVopzL6$Y6%;PJN^WvBg^QbPX-$=YS$%F$D_&x-)jxXU%~f?T!`Zska0Hr)+_ zD^ids$mKfAMkxpt${#p`yN2cLjM^%hi#y;sNr^I4j4++Qs}N<8oa?x8hp26HgmL8n zAq)`}m}2bT)*Qi|QJ*`ZAeJNJCABEap8yqa3*ZI6i&^I%D~?b{f%!`+U~sCMqLeD& zj=Sp>Vkc#E4TRbrtyS1;QxFSId0fZc&yk4pbpy@WLK#6huTC9pO>4&=DY;p=MC+d- z4wo{IO=2X2`R;YE*c#+#X$K>PGAo)}`_qP^4)?r1Ji0&}MbQhMw`0N1BAZYL%n4+a zs2NW-4>Z_b&Z(%2)SVo&Iy}EkX0%XwxxggHCN2>PqF6$yj%f%}hSMhuQc& zhZWes*m006ga~pUO*`lT>95lpj$$Z^k*Oz`OI3oO_n~@dcoHhe{Mh z6kS`JKUJDlT@6lf@{69|`x)PEx(TFDVbVv3NY6ae;u*2WubucLGddOU5_UltM`#soDOr- zr0%2~M#@_~B-~n7zC#Hbp-=VicDw!j%}?sW5Yq_{?|m5a$`4`!t7cm2m=(=OtDRAH z++*t#76!2cS8r=~>4?UO4;#+((wvZh=97KRE6yX+*jrwpqMJHN=gD6VcvACcaE?=t zCsq9ZPB5R|VRQ!AlLox0>)+go4F z$s8jU5jzuK>(lozr{qm{c55hs)JRrEta-zE-iFB!`{qjN8VF2rK(DEx0*q#@YE`9L zaAiE^Gx!xWlY*z5XtSeAP!%0%#vdR_nq3LsZtgt|_h#>E7d4iub3@M=N z;Mf}@0nbAXfkiC_%-GuOPcsP-d#sl-o7HAljb|7nY?5>4FwYWEt7~-4${x6ks9)LR z>_ngLhUipL>!pL{Gq^m8;JeALO`_K05$uTIgetXYcKB6~pB^HK3>c-0z;5@3=eP#c z)3Re8DEI1laCvS3t#nxxdKv3EiOH&WIElZ>iwJn!ZXU zb}9+iXy%ccn0KlbrW-eb*ZI*@_wLzg)n3FGBWCB=wtJt>o{r7znH~pxcsRf<2{_6$ z|43d-t_I;(c-i=YQ!bqDfx@PInymSDy)rM8{c9 z9~G!EXhX$?s^0A=_vUOz(PUQ(#MGW>;n(*J3;`;1wE@xuyzmyl;}WgJf7VnmM~c!E zfk5?jhS9nFkX`m2t1rm}pT#i^^Nb}Rd@jc8-j-@`?YOpfM1@l!2Wt<3y2E&IbNV(Y zBs~-1eDB^ze_h;9q?`4jg)8elA%5Q8E7GbvKkeVePI-bdPOPcXk%xzXs<{_vtIfW) zJv?E2aunz_hb=b$*CShwdsT(3a`_D1xO*T&Zw1q`eJ+ZxI|@Uj1L_*dl+(2cy#Pn6} z!>)I|p4P5T_Z`^kT9$rPl+~zow8|ct3Jp>h4s1;PPo2`zjT?Hs>V@OKA+By3H^4)x02_Ug}u5K#VgrFnsX&o50W9d~uV3lW&RAy_4X;+m(3fUk6eUQJ@U zoA+LN(GGT=LVQflyMxRpLSIhzBSubknSxq9h=1$vksu5#@`NFCptnc;vSviY!8@Y1 zI+IP8W45?SlBDfrGr#gO!(rMA)7e!Wx0;Hl=0T@^Bd-rbpl=VxW*F$;bFOQW5 z#nS1=mS*>lW$33ozg-<*HalS(wsnzG;{@T&kS)1;w%q@e2srE)5qMDIwMNqGOnHD6h2urvZ zQ{>Ue@ROkj*i>7A#r3D4EAfr(g`Zpu6x!=c2og zTk_CPUL98y-rM@TeywBB!nMj*)stG*p8w+MwLfMREje#mYPi;WR`%k{7e{1d3*V$} zEUFWMzkzUqySbO;e?Jy&A`U%57_P0{p41@`4$Zmwvcz0+mxkdt+=7VXm-9NQ_tpB_ z%4Iw+`l<>bUMW3Fe05T-iV9ROPvwxU`uZx)uk?`TSB{nc^2sg2T($2yrWIRUy$4GE ztm11bek@t;ZXp_{M?moPnhr>}{|{izVMr>`YBbkf9ywk z^2%v6t!JjQ1I>LtB|4w#w26=G#b*8tc4>Aiu-K);iL%R|Ab9_7u65dE( z>H^KHrZ|Uz?;QXAe?KHFgCIuT>q)TF(l2O7B0G=PADvJmX1AVSjPo1jnYY2~ufhjx z>9%Y9sQ*(N2-rfJdL5j7Q~|zyoh8L1ZZ01C-e-#41%{5^#>l^(dr!T?|ZohDxZB4o7p; zDD>7c)3LJ_UMoWM!{~-6@iYZLau$8g{OWt}9jgjxw_W_&`@nZRPS;5iyz566I$Gwx zPU7GUyH71I4lUs-*#oy?{DSMrfo%0Hc2{r~sbseRb5uRnB4yWQFos|qdd;dG3p9Qv z>L+%DW2}W9Og&^t_|W2SA{FeX8JdQWUj)Mu!Ss{+cke295BkbHzn@gu_rI2j7`1{t3O@v@f>19E`5utdYnxs*f~&W5k7G=TiBg6ujf-6tp9?#NK)f zN1Q8Di33O(NBPqy1IJ>F?C?xt@>QPNU_p$ma#L13gHMbh<4}ytZw871za;DzYNHSf zy8iEhaAY#!e87uIT=1aEEHXxBv&cO3Z7C$FP%Oj@n=qNTL=m+P3nNO#M|Pr3yzu?W z$CI2=`{vFl?Nn&tnH?IolbLo?PfW_;x;SPNEBXj&(Qx!~6b^TX! z)X4%GWGynaL8e37ZwQFQrmIA9-l>aV#Ss50Y@Ef{DUH}dM=jF0w*E4QoYmxCwgCnP zZTbGZ6H#`~sca+x0ZZ&6D%kQe(UrmYFlOtg@WE;BVXeUB*$XmO&PKDAt(ZSQbYjLv zl>ZE-+6!3jX?P*or&dC$yNDfMoRo|~-L9=Y-RZq?vw8|o?Icl)IBaT*df7Cm`4+Pk z3X^oO$tKSr3Zla^f-y#jSp$8zx_1*J8!|T)gwmfv%qWvFk(DI>&e?MbF{H>Lr*z<&$Br0FMVihtj ze7D4&PrqCDbK^zjS!F9Ztby(i$^CIDgCs5L+gJ_4{XJ@8sn+0y%Qjdsp}R){TNT+> zI)!ekH^=FdI5T!L0r{icY)+tU*b@FN#Yw+Uv5OdMF$*=L`hY13=M#L2NsqMh;Xq2g zB5k!|K>2|iGoxV07lEKk>+ST@Y%Ws!RA_zrJQL8TNiCwsx-3Gxch^rFj!%8`;Qd3# zPo1)9YREhXZplV9oad1E(m@h6?qtrJ40ImV!+kK`! ziUO3NqHQ3e)2@@{o0da!_Vsil3WNj$29A+xOc(?9ypp0jk-h~4ZBVb@oR)z!Ua1gB z6&a$Dbz5nwp2J&e)+b`gvsADRwjveE?Ic{rW->+)2w1-Rvv$3A5e3$ITO!CTVFE>26Xvm!4uf2va~*D^o5+cR+{g`5q_zP*WAhy5my(Rowsl+HpY|bZ6?s*VEmVPbOI1v9;EIo zsTot76m;14g99Ggyyn3tf!bhM6+e)oo#KYtneRVZJrOf*R=Zuu_foz{zHi{8>^$We zE@e(X+aft+y_v?yw&lm${lbpkAw>K0j|F7GG%QW_Ov(ZVJ3v~0!4vYMt!Yvsu2E$O z@}XY*uV7)Oh2F1b?KLCrob6l{E)hnq<83N^*Pr-C`N6{p<9t46LZodwyeo(d`s~H^ zt4NBr4xZgxpi5Poa~tg(CUFJ$jx`FDh;k4XO*HVWcZb$?5wI~T|Jq$?ert>9vn(xf zuVSe1QXi(?-2bPN>nq@d?qE)7av>A2Z^l^xHYQzynm#O;+)O@vM!&dcnvg<`@U!LJ& z23rK>*UPi4xpJXs?wYI1ErN7f#UB1;r?!4GQ~&K;6k-KaY<~Yp3@lAZ&lB%a10hd>!_fp2D|=xWkXn#p%`UZcl!4uiZGthZ6p z@9MQ-{-BCXeDtFYsKg65{a^nY-dTckAn_Y6h#8`n3lnKgB;A)nUS#Nx|H~L)^II;| z>%F_v=4&in{2+*?2t53yqxtbtFj&+JrDUeiqECwKDm8s)L47KP?@9Gg8^S%(;Wn>d zELx_f^s~XO>toRjN90&UpnAxa&rm?zGZERlDzSZwr9 ziU*GH_lSC%H5-!VQ)&Z~MAY2!!FR{4j7W4)CnWXW$oA`F_F~Aeq+-yby`7?srap27!fG(?E>x} zvw*J@+n)X3OFfo@tJdFICuv&L@Yuf`LL|{u&aOW= zSMZV@-VVBoe*!zbzx-K|_M^m1N7c&{19^ZW)3!`l5;=IbRq#H)S~z0-Fo?i$gcK4{ zFgHx>65DiZV46cJNFwXi3D2XdOK9MW5^k4UUDPgaSVrQI$fN8Ivr|1ID)?FEfC>G3 zw|pyP`1%tG{@)A+7i@J3g1~O~G_YMWy)@Bc&vQ-DJC&x__|`;C$2+8n^m8pk(E`z%yVz(K*W2dUac9^VMhP~JJyLBOTHSjBLqu47 z5fNv5MrGPLU&%z2<}3LC>7Su_b_^t5Y)^kiF0pf0sRD#)8Yw7^L&3cm-Dv#t(wQy` zH6Cj&Hmd|#Z=(>`2gL{xa>QVSDvA{}5`3i8D#kF)NsN_HxU#8Tyk!xYMq4m3IKG$& zXz*3&Q_UXg6T6|=A{$bRs-CJSwQagWd3zu~GK-=jRpJ6A_-le4v@aRFi5nuFz$M!Y zflF<9Kt!^P6eR%0>+{_1wvDA?z*2GE85r*rFbeNT$ey>6B+Nq0~P6F@0t z1AR&FclhILJY38~fAUi6&SyL!Kp6T0sc%NS{oH8AS3);!n2E7w|()2DJx z?k|aigtJ6}Gw_N?n(Nyks?u~n$1WneR~@7E$s_jcqx`Gz+26NfLkE+AFA5 zu@IW@c2Y221Sh3Gym<552RB|U|9sUolf-uZu(#mXvHF2R^WhWF|LqC$d4iua!?uv3 zt^vFCe~8vQXsIO^XZpk__c>{OK7n{}Its2v(P^;wf|;8`A%E)jNCXxgH61rv&e-p`t^>bs;^CiO9Q+G8oaA#JYv z&wytwn1Fg)7;!BF|GWLjYov63RN!Xnh zCFoZKiW|S(GJF4ka+g%)rT|)9PlY7Eetg(YB`DP-O+n2jr@;L%j7yr`YtM?>P4!l- zRenYVijwg(<+VlYnZ$C8g0p!`yZ*v=gmi~F!^@SC;Cw8A%^6j4> z_AQI&D8CT6Ryre$v(?-F!y4z(VEM6`CbY?cH4u8#v7@w!o{91T2Hn(&a!Orn=eYgji`jSm+@_Y8$s&8QkQ>y)n_%bMAZX5~8t<^ym|ZpA``eXhQ5LM^u$y zhF>RL5{uhJvbot}3!ch$uRm@dl|2~L|A!~)_|m{SNIsbygvDb@r$Q2SvW#6Zhtg&C zZCcNU;s)zF-d!JituOuwVF&}*DbUJjdhr%)=kXOM;%~MS3+r-Wvj;o zjhcpRGd^gWW=`caqY11JiCpqLGb8n?K@u?3#e@10GT=X^*MdGNIe?WMThn48W_v8^ zIsfn*?+Hh4X4Hd+V^ePJ>&R^-=`3xi!1chdC=Nn%TCwK%~$)%|R zP5j2SfX!hD5Kz(92^Z+HENhR6`T7sMyo`-HbG@h1I0p9t_UcB^c{z3VQAtBE9tlku zmPTQQ#3d&KZeJq^n~PjYy<_mNMkkffDL6wt>HSNFi%AUByOw=8;PveHs{j1l#E1f` zlL&el<=OucLFN|2!_vKn`aM;^!oP>x)h~~i{&=(Rd(-B=Kl{*cRbTzocl?;&2Yq(< zgyh7^1S)6v(ytEm`1ZAe`Lu9)RQ;zL8m5mC$jck}lwtkr8FOd!TPvi5d3E5pHz%!5 z&v}BmG6A$83Yz7J@aypZ6`UgXvn*ocq6a%Xf_&UU6V-IYOh!)Bq!{a|v;;G8L_L{c zj~O|~b1Tqf@9HlFzpP`fc&5q9WRt`UB{ZHNKFh5o`qOH-*)U&d-V0o(LG6NMYS88- zXN4Z2gd(}@?W+i(D+pQO!}TydsAHpRWJ7e*`PyrmL+fWP^fn>0{kLyb_a8(LO{9vhbB)oB~p1UpdPEm}LLBe+kNL562ffiaz~v4~5p zSiRqSaRmj`|BNfuj0Is=Al8-9?9=@DS8N@bKv-YN&VL=pvub4XCy-Q4v&Iboz$r^{7dy06+! z9tQz2dw&M*m{SOW5fVGjId#c^4(BYvf+X9S1gUQ#7<@0c^>7MBM6O!Qk-6X8h2>!)K%eQW;o!Ti zuFkarMdP1?aO(s^=Q^vw^KXzx;@7eqtdGLXodg6_R6tZ*J3&BHR76EwijxpRRH|{QQl&O1 z?n}WHm*NBwacj}4wYJ&>H{5Y8F7@|Z`#HxSIB5}Qv4G4Y zJq|A_jQ-}b@ppCH?}Y-Koj z!_&bd`a;*SCFf2pbv^Z`tIgs%9;H1cE-7+pa*FY~XDNxGCRb2d?x$E8THM?fYP@_W z(&oR(4*p_|?!d=E^JNdc!n-Z~^HB?aS@4m3^p4sfQA#7YusK|7Tc~Y?mToqaKKUt_+a3y()G!yk z?AH+SG{AWa1?1eGZ1q?%I!5^p>RE+Li#N}@JIpetLB$oOmA)gzz15F+Z>MoeRuyqJ zLLonjTEQN)*@YL5Gc8`uo7K*e0Grv{xzz7MmGsF`H70mC%)Wx~pxR7DMEhy+k<}=8 zJ<~5Q+Yk8rtE+nGt(aS^7xEwJFLSW3-NNPzo*GjNj@3e@1^mPY3nj@8!Y%mIY;*-c z3tnduLCyy^Eer=}1#@;5OLPGy&vU1a+ld21HtpdRBzq0c664IZT$3jZ`{bc7MXfD} z4TJhfU+1xYUe`x|r=o-6@`qQj43OW^cJ z62Su42$=mG3$Z~Kd^AV`B)@=|wu7_+9V9`_UrIYZv2_0ku7aco9k_5QKyMuLXp-EW zCBMMMB~;7>w0F4gY{57-pEQgOrHKgD3YXzoNAqrimk%Ldi8kK6)+~L;g`C~-rYBlw zz<@}w4YS1#Rg%*;(_;mOCEcb z+_BWb^(b#n32OEO$%kkM5o80vpLA`zgVA`w@o`OcaxI73G7B2-d;uZrUV*xTIeoqL z&7H4ljc0NQ-ggBi_4}>5c>dMUvhb9fYo`X?I28OUXXeo(Gp~N#&0z@LKY3=+<$TXy zXTG~WbHnc;h3lc`gkdVHKcJhnj#dYa&4ylR)7K3>3anW7eVdEEo4&T)v9{*QybyQG zs$oRy2v#60V<`|6iLS!!Yh{3HOPMrxVc$&-1(v)69GUQK=#5ZT0#g)G0{27Nday1a zvTmsws0rC7OffUMy*9_#3iKujPzTbawYQSuN!wrS5d+|9Gb=B!5A2`UuuB7+zxG)- z339CgZ}zFGr!ZKc%n=O@JKP+B&|nq4I4akIL3VU@2pv%RSE{q23vJeLTYlC11U!9* z+Xwe?RtDT{AO+wqm~l)uMnFs?MTz_oz&AdE^Q^3ST9VW%CtwIEqgNd*m(v`tl|>AYHe;c${#U zoH~$1I=W>CK;;GW2XO_cxTmm7)DMF|pryfaDVtWvXj8A>^CQowyxXI%bG6TcE)A*toftIe*0`1-4mimuq^I<6bF6h+gQTYxufa&w4%ko?H}~l+VEZHM&#Z| zNh#u%F@}(H2VfpWc{dJkvS*tP5`7mNgU*F=ydRx>b3c7`Y~3u+D>Hq5owa{S&WM#= zH~hKZ=k9@`KMoxI?ZB=3KS_7a^s(D~rO=ir}( zdN1cc6EW6%Z#~uZDZv>(RNG^l*HYlYHUYC~?~(3R6Nk^wUC`H$S17kOA`V8KARlkb z1j4B3Yjjr9yoiS$b#uCxb#J{RbjeHq&|IBbp}Olo{d6=d3ozddM`o^mLN+aF((fb3 z_XLJYsEt~PR^rY@0R1JX^`rtb#Q@)59YQH*F1w4s8K+{IAon)f1AINy86^JVAP1`2 zLY4H_L-iVOM;Khi2he7$S{UeDeq6K_Dmy&|pfaze=*M+HWE;A)5+lg2DQKKHc!lIk z;W@Wi%}Yn;O9RlzgVxtSFt3p)@JFYS-EF`qXn@+yaudwWc)Qi&!@KA%W*~87NoNcEUoW`$Pj4{ShJi;7H$*C5p!#ocGXI3j>9 zo$%V>^5PB^V#S>%dB0lFhr;Z*Wc9igal63yY?WP{@Us;xf2I4aeY_yYu4Fe)8nc}X zxNUfO&r!-W{dIG5)a-J6Xj8T9Vl)7Q2+!0*!~2ix_TBDw7N0WruWv54PnoxuI5GTH zkB7TN^2NLN#Wnwa>&4?93-%|QzL`)1)VB|HYWl}f8_-n@Oc~jY{`=oj~-9? z^`}8so))g@+M^0aL}gd=MC#7K!tf`q_9J6+UU-K4#Ld9^2F!VMJ~wXWj(58Qca{_n zdNbUn%1uA{a>0E2n*vV7^lR@>`cTiA5^j zbwTL+c*#zx_lWk3y13><>#~UjteD*tR0-{1c2jAC*lBG5^ zK&n=&LR5Kj&u6c;Seek!g)>X52YdxZ4kJ~#W| z;aXnwc!C>-eT6mC3gWygk42Ifg2>$pD?W!b@WJC{EH;GP1OlD1P+ViJ1e_M~p7~@t zIKqfokT5*>H(4>K*+TEYdpzQ(P+cfEYYO2s8+4i2Dx#ZBCfCI?s+u6)HB`40tTP3r zyC&#j!8J74Cf~zjA;|jnRhVwEJe82Q}WbTc%}K_*T-7&?45+=mD?bv;h+AB z?9=netFt}@lAp=I(3OtBu9YR%nA#towt0J(JZ21=pI`Nf7}UsYsv!G~HsJBcC`(=i zqp)Eb@?sFVMo}y(u~q@kYM4?w&RPl*)_mz^r|w!KL^hdH2x-emo~|_A#8+BaKG|Zr zCX(a{snb$5ALzr_uR0kQ_>ShmTmeBgmlxANeA&$W4n&#$HFS$K7GMu~qXxT=7TlI2 zdtHfJ+mW&v1pKH3zQgvh)L9d+vSLvJ4KbC|yLl@RJOgk5q&!KfJrnq}RQg8{elruT z4_yTt+f*z4Ez@{_O2WsDo=9~x`CIfz{X=g!Jk-MFnSv}iYjAqF8P%-~fn+xGeG`mp z2@0fY*eWAAA8i#wB+e$iBzA4$smF{fp!cl>_Qo2#6esH-GX2%V207}J=_;nW&cEyd z;0rRgVh(gVuu?<zw?gD5>A&iQ}$$s05`LcU?He82LGr{u^%!B1p15BpM|X zg2)_@GAke%p2e6Y`8eM`*f&LOexQX$mkdUW%KQ?F!eLFPn3xZpBU5_`ji6qXIB~NTX5srYseUSW`HN zod|W2BJ;dm3ykPJsPAAzJVCGGrEWtgLdu#@9b-{<)-QG~ko(Z}V%H?pe=p$Q>&Oda z{O%N<9EMClgR4Q&TaK}0Q^((k*XB!L=}$!1Ql*HWY>Im7)!ZJBbN}8pI2s1)sP%4l zYk#fy$G<1|xRTm->atuYiPKS&rFSzKi=!mUwS`~aH8T=g&3>jYI<2G=9Vx+uWv%34kFjldpl!w@Vg)G;UBTXS?Nj%xbKuiKJ ztFBCltsS423}dvmUp-0Ebwz=?+AdtSS~cTrT2+(-h)YZV!M1kN2383sYKMX4ttsHj zKFj!aAbPrw#t!p)u15+Yoj?y?pBM=WDyIn%(qutN{z-~mop1t(8blfkOg?%zq5@f= zP4#w>Q-LV6lSz|;_o*g4O>w^QXY#Z}?mb|LGJdRuo4#C+Gl=QUuIC+MK6D z*czRr8b$;?8sh_~Xo4=r?A}g1Ij%6U$p6&MC2m#gDnS@;NE?$HjxiYJgy;4n|lIKPmZ^R($Ql_mWZ|mX0N@Hi!!(dKj3Is0*r%PKxDUp-75Bic`a+*I2!am#q+$! z#usXzHU8?r(2dTkfyslEfz*#L0==(%{+n4XdKQg5`9@~BB5W-+7hl2bN)E0JC3Nvw zSU^qSLD$c^-n1?obwf(x$68fEeKP-D5%1CM@1~fxr7)qytE#5&nQzSTiNJ&Coo-OX zQ`TV#{nClC@rhR5y}nBT89xE!&Su>Yo5FO_C{yK=VVWfB(vl){k3j34e9H)4UTL&} zz^M0rTZUSR@nkB{i=WDuFwok4Xruh!rKbm2yQ|gSpzLS9BcAVHZ_8oL5jc-l@kxF-r@pH^Q ze;|q^T8Uywyb>Qy&uypIf$94rQ*{4-BonnR#T$+PAu~|c$(qtSFm%*t2g2n3R;!r{ zLu?Ag`GZRl*>!%34Urv46Apw>(mgDU(-|4xdAg@n0R7x_ zyczJRT<4S?>1{V>`)8sATef)3x{N=@1Dlv94%GmSCfOG2I-I}%HqP}%H9t_&TZ>-G z6gKAnUU~p?hzE>1l)0+M3OynDZfDkn++Jlq}&o zvgr*=!CX`Kw)5-arn`ZG z^9a&PNL#gTyr0;_Sp;~TyXTLTf`tTgm`);f9)Orcg!+bw9eAWbiwyS; zZg^BH^Han`hNpZ|1pM~^&{C=TL++<5krX!I@%RyzG} zV9@)pv1`AjBSs8(;J2ACZko#uiRD*vPj0W+JStF7*0<^$-yIqR71Prv*aR1;fG&sJ z{HVUAd4Jxe4v(!qe{1IDMRVe(|J--O+dD-K*UCk!7dU2}0pv*37iujbQ!hXMGAoHvM8&`YXWwpyTa?#q5qj#G3-`qfB%($~0H+^0 z`h!6XzT#Jcz$Yf4Jn9f673UH}Qis+TC_KIxWB2J!pnbmpbY*9`);fTbXIup6{`-p8 zFuoQq?J$Wz^tZB=_ZI*(r(h7Ao4J2&rYPbAPGyMhzKB`UM6Q!{u%jvz#3i+eoeUy<2<`d-T$Hc`R2SUl%h!8?*es|6SouZ7C**XnQITe%^AK8O9Tj{k z_CO8l8G-m=!TA}|PKjUB=US3mx`Z`+9^4I_z9Fg~T#fCBBs$|=dC`>BFL}>y#db+e zHilWvq0J-#r>0_0=dP#AQ+0A3oJTP2p!};6GTzE4Sp2I-@(&pFbX0{$O&6A|0NXDDG z59v;z9`g22BEte66P!zcFw39kdi>6Yc7bVSUtbS8cs{$mWr1VhSpC~s%YG6+&6t(U z-43t3JLbgkub=OeoSe&xk_2r4Pj%V&A(|{}HNJFoU|m;HA-gMAf5*97$^y$zenp@H zo;p|u;SZvxUJ8>+mx}mWNF!nVxQq2?Fk>kmzE}!qcfpAKCMqcbBN_q#E*drr>>lLG z%U$mdjKSK$^Eh`j@-|z(h~nc> zB6vZ=qMsChV3KO?FsaWQY9p?gmMY_wQN0Egv8l&`KY_iA7dlg;9Lo1y`Pk%Z-=X}1 zzA*W~ol8LSxY`D?x!WUdq7R$Tu0iC8Af(nNV=TCDR`E)O!$k1PZ8i&VZ0*M>>`Ta1L+g-HePn{)>%aPv>6llU#Muaa_=js524sU)I58SS&?D9N%f9KBYTi9 zkI@x*y0*SZ$V%i)xLx9Tz!PXA9}9BV?SD-HRY=?Rl6Aylf}GxXkDbeIf*t!JF+30306$e zxPOjx$iY)#Pjw5h1#YEXl&nk{mj7E;ocps(4?_uNvncH)_>rF8ZCgltNmn?#oEb@} z*SczP7gQUxi$X;^;;Os%pPJRnoJI<;ji_j*8W58O`#@m?%+75^@o3Bw>JLzu96>Nh*TuLNcjL>)t&27sivHgA8do^Xl+!SsX;MI|pPqN8%|0}5vTvfGMa{BmSu2I9A{=j^zAx3c z)q@9a*UK|)X3@iz1p2cNYZg_P_|*7FpFUM;fyP!o(a{3AM2gOa+y~f0=}(uAyS(D2 zV<0)?f;+&CP7BB`xLF;NSS_ix4$Q;|4^<^YC5>b)k#mR6ulz=(T?Mwr|7 zIgI}tI+XY(Cn;w7vVQNi&Fe>>W#ypfJb@?1ox|2IO0x3=%QsAO9pLqGnb$wY;$WR* zyV2$7$zxCd>3#Tc>OzUlZ*0)v{TPQaq4P6S&Z4BYQ`no7K-7l%OJn9{?3*3wKUPpg z58KsLsN1V&=RYYprsc7gRwW3lXKN>}^6b6p1aRoSR9bb@gUJ-6w|dAR|0(d4cfeGCOx!}7tZJ-&9l$4rSUZH59yIkH^tQSL&+FTWJE zVwA=kjORZJ4cURDLDKhb;kFBG&0$Sb1j-MD?X=b6+dn|i zW6FzF?|bizJMtk{%O7M*bGo6{IlFk@sVX1}&6*d(Px-Q;&0U4`k^~MHqp!;o_>CfR z=sgdf@agZ>w{U3CjgeDm8M)Im#S=Jx+43nbmi$7Cmh|DTk!4rKcKIaRQ*z`rgj^Tf z%#w!)+j5i&Vj}{ZMRe&HAfeJ)M0|XNwt&F8_}SQ?jjcS&eqmE4q4p>}iNsQ%-r@H4 zfZQPbuI1dEYhhMUpy6h~Gft)F%V{~)=YWqvh=)bxwn(DuRbO5^Tg#DH%m6eIJhjQI zZIvq+XGa>fU5 zKvd8F(1yYci^StX-?VO>jn-=?XbV6;-HPKE2%FLM=>r(p;Dx4%k*iCWZoSoY>bf^# zAjfWQKoHx*f9yHbanj{M%uYdm@nI&hc1Az#m;6blQ*K3(nNSB6-15e~W`?<3F&kO$<3RqD$`b@>Zymi+D_AVHDallf&LnIw; z7aT-ngD0imvP8Z#6?dxRQeS>RQqU*3x&|R1N{^(`3t2BrZfpyj~%F1KfP?0 zr6Nu7Fag_{-C6LP>x`=lIpV0}sjssgawlBccF66YZx}Q#UxFo^%Ol>GZn)uC>W3%$ z0&O1mi5&l1K7L1|C3>;W%|pk2N>~hzCO^K*h3s#zPIsxs9xk*bcyWd~hISWcVOIwH zuC)@LpE0K~VnJc>JyRElNv0)gYx0v&e7Jkhb-h~u9n-$!Y{3GD=a~A$ubaWSF`sr` z;Lie2{|oiQzdZ`am5@DNc8R(n(UejHb8wnz*D7FpCLC)^z@z*mC^vZ!Iuo;KdbJxtLO%dvuLXC1Y)G@i$e;% zKa=kC78aZBdJlTr|M$1BhtAnx{-FaZUJ)Ey&a?)!OMrp(iE9jXD*R-{8ojW|neX-V zsl@)dOY*qCZ59>(xy#346n;Q#GyGcJ>DIPNYOqs|zh~RZZ?er$uOTNw#CA6#sc`F? z(%=eT9{1YsAfpz$^7s?x6N%k`+C-{5ve(5`)%6PKNwL};`aA+Z>Lnl`QNs%E=c$(t zfEBikd+(EXT$r91dPYb+_We(6N-F3)xF9(AxcmAmP7-9j5q;~ouJ$n|za{2L@r+I2 z^pKIE7v+(}3}9&NHp~U6ckVx*$`^o?23Mds`lIKupGw|68LYdg6$WA_UOb&K@pUIT z`Si?VXMP+nsg3g|3!@xSE&*w0hMzd`<2S-ihFAEX8eI0Vb~Q|4mT4mASl66>v#|83 z_Xo08E^RM5yi~1O(vJ>WYPE1x{tW&RpG^i7d9f|<7aP@wzR9v0_!+3Rpal*2nlV?jm4m9URMzrLd#Rc=x z)YO2d;{FPyHj%uX9Qa59aj#UCKIkJOt}z3w)6+?-TF>+b_g<+x6r&l`EqJ9GDls!+ z>&$fbMfiJWpjBMx^OU!uqHecF-&(vM>gTdqlvQ$_@v(+&Rmq4IOblq&saRzUgEB#l zYMO3CDVIw|=%6;NFKsbt_=sdJ$`iYjqeG3g_~Z3_+E5us^d&3#pyM!)$g{3WR`pkq zSR8pvPCRlgW+#xp-II$v?89dP^}VQ*(uNI)J2Cs7`!&-RT`zX7B;GQFlN?j>bRpyQ zWrBv0E88p1s3hO^li$5||jIe0gUv0C=xw{CU|0MwNhlV!8z4hi8&>t2qv6 zcbQXBE6A+U1XE@gLQ-$;YjBX3{sE3uONyvtd1b%G;5vV3F{!4wT1;0Ol$J7VaIf!@ ziX#KP%*A1Wo^8cF1HH08-OEAVyCvJ@A!$x@c?isty&aTgn$(eJ8ES9BB``J%{BQ`pqC0P2V;}T2hs7!Dw`wt^pd8a6rp}@r!UOgFPW+ z__)5Du%>|C2p0WNs{bDNSp7h*JQ6EwW;S!3$yQ>G4$}B?oD{J2h#0Cx-sDp)^?%~5 zDuZ3CLpUmhPSt^%M#MrK>d;(k-&qHith70<=r=n%r}!RywxsBf@=7q&LHh#>wVaS7 zI#18~B)MPTkp-~CX*NeF%`@)>+7AnvDRfkA`JWw1B)?snH?bsmMS&n;<=c!PC^U#( z*yY08rKiVVSnzZC*MC6oEi-Su`m0;-BXg_f8a;fvoGbkmO5lQ%5c3}d=MG@G+ryuS z#`!OLb|C=;t-=(^AbZEy71ix4^Zpcr{z3F6P)Ov7oHipY`*AwA`iP@d_**1Odh{`P zXm0$PpE=_o;BuR$dHI>=S(Ju7&eUYeqP-unJoCM^Te{C-<1FUKCT|51)viI@5b`Du zZC%sj#kJamsC2POH-}yq)XnDCrjy{3dkja9)sDSQR(Ilog-}T^l?713~b6gb@{E^O;Q#Fga6!m`6+{hIuk&0#?FQ5bvKd8%v9+K(B6{eu3`h zrF?wp1LP_|v0zqef?CW4mabNFCSZ1%LqK_p$%QPdH+@BxjlQN+XQ^x=#Y$e@9cl$- zKd7yPo!$vh!IUPD>m5{&^9d|tT!TlmM(D$=OYn|G{fkfz{fb51I~|G3colRJV)Ick zO_4gG?+<&?y;5tXC-%L)ea6IhKc6l5Yr~O?Gmt`@O8WslN$(hHYX=)`;_e|wIy1XTfpLR`s@K@K#@$TEQV;-;;OiHgQAbAqTj&p`&T1IM$i9QxqaCpSnH z$vz=bw#t@MxG^zRYOKf$#e1RV4P6B$!Wb;uU46FJCcMwV5=!MT$_PAiD?uu=<@Um_ z&dr;-QF3zslRuUAx+mjYe_Mb``KMec-;mP>pM6|)wtn^!D}QRE?}@j^W*^=0^5;1N zcD%P&cz$zJF7i&yK*5J!IApn}eyQx&8Y8f#g+0aOt&tmOBA)+04nVRfi#7t0Q?g)- z0@HWU642poBfihGxjo1qO(hdqJ5t@>Cc*KWi~UssMjBy0xz0$1l2)U)4Xo7pp7Mdy zqHuIiM4EVwtxE?gXhoX3kV865US#ew9ahyyRSG!+=rllHx{@Puk*D2}bj6DtK{AmH1O=;h+Iu;@|~?~*ff z=P<+5K%s_5?rKpWL6}jbP_v~SX`4hU+aQm#3q%E0IvTifTTZ8KA~uiSy^X93vCDe za0GPZ8hRP2tD-ZR%u4;hSe&}$cD{Y6^re+NSNk_*P^5`o?jalbuYK(bvFznRvN>-M zVr(xdbvnp%R{wzP`CqTHn!~i6SK-vqUYA~G4t_{gc(k`9D&G_bh&x}zmh#zq?09e^ zH3n*zGKQC?B&mR*mTVUZHkNE$dKJB~lD0;XzE?6oyPx0ZX_l=T)ChLNsh7%3{aFN{ z98IC8`f3)$-eg4@J1Q~gTD$@?b$);d>r#3|wN;w~s#_TZw(B{T#>VIYFgna=D>4pF zwSlYlPxQH!??~f%M#8Em0vcir>Knv|;YqJUkt=RBSjj^hcx33?Pu6ole5;%R#YzP>1_^z-(x7&fp5ajT)D#UU?&g%dG$d?AdHQj zj){kir^h|`-0yd3$%}WOAj@#1r!ale%pd+YK|qnhvf~qtF4HIe{?`6`*rT$|{?r+l zas=Vhm;NyIfFGFq<4LdFfuO}No7Pt!9xWG5nb}ZY@a8mTo-h!sJa*=0EGMdVkhq1O zR$2DjiSMdBy;t`3ca0CKw1#sUs$7!6r z2egMT@#r>GMvL|uJFp)O+4QQ|P%uvQZCz`J=v+*^Wos*ryLV#RPMr*NPZ#kr+=yCt zLkKOLP?m-RLQ*Ci*PWyv3x~F9s6VzG>YTnCH3f${2@U8MM1rU#Yr5*!PpLKj&jDM3 zgWSUNL?eid$o&2(Bi0ikjieQ%X-&1Yp`iJu&aIJf@<2T8ENQ^26=Y6_83VzQ8lD_| zgO&Su;*FVnkV^!sB#dMeuod0m3;2ZsJ2it2>hGDV^be=;%Qz1n#r~iXMHYivHfX`Q8AVQ9-m%4x zwiI!^hy(Kr+M{f-(`cG7k8QD@+V23;jvp1x#Rn2cN)%gQI8it)EKht}l@vJLTs3+7 zoi7yvG;ubIouB-bJIE%rbaz_0y!2ok=Ri2TWh^NcOuoRyqpYnvEq85y2YS+kUGi`6 z;&F~$7}(TFE5Nok5UyCqB+Q?cHJ(-bqskyJ5d}^FeC%afev*p>mv2$LvK2YYFDr3L z_H{VRk7XB0OI56onl*X=Kc7S%)3@fpVb^(009%TwOrC%WSfjzpR=EJ5E>|?bq4-40 zr6V+;IoelCkcp&zC<*lImtD4f;dp9Kbwe3<*5qnOEP)j_pIy4`vg?GM#Xuz5r|L~B zMHhFR*!3JdvHC0aK{grK4hGYt%b5mjcuyCeben0cFErP$^=8mI+^Cf9It$w7^>8yH ze+6peV0elfk4uPMsOcKU;7e$9QU43hjB`V!0;kap%>x=hAXe#z(`puwwAoe5b{OXS z;gqXE(C}s{0H~1T;ov=XXKmojt^zxp>m)GhyFEy%ATI(o8aA)o# zW=sIx>fP-)Li-@HzAI*kWcw1>;*HgxhdCzv=RBGGL|N#ejaCrd06xY!mXcRJ-CpEl zCkA7uetZxE(x&5_4UX!0g-JyVhxIlET0f#yaGM8|^Nv<9L>pH)KG<%<(~#8>==E*-LbHzO=1yK(l>-Y8kcZ?) zT;v@`Qr~){MG$9F+|$bT%NddEl0o6n$s)QWr2eQZc%qc%5|ND%g6xRKdU zjnmf0{&al;l7j_@A^oWzWOtl%7>V2isIgYC&w73;_1>IZSRR1^ACD24*vr*H&PW(` zmU6aY+HA;lfG3m;h242t#I?Uie?cD;X(N5hM}mXtzC8Jc?Zi}hGG6J{HUk_i3wc%O z!;^Om9r#Rzze2A%d*{Qb-4puk@BkX`Bnqp}%X8a2@fy}e%Yi+AWV)tbpEdH@%jUAT z>!^1!&hDJVed)0E)LU^+g)i`>Y<^y>(F^!{H*YardlFzkL`a1{ufX=VVe~MltptuO zI}DPm_EV&BpNNbUjO{z8XFzfp~#Yx<$RgTjRg zP_H0|)u{BQr}`~aOvPJvcItgKby}0%7{d~Y86NN`MDy26hY8#;@(GLJQYu3<4mwuZUIn16B zhN0&YVcrQ=PlCWN5&XSf?+sc_Ik^I0yVfJ{MkY|dUfF(=EylV_P@7z=x#+Rb8@Fu**a(M;R}HG>vFeTwQSS~8yZY-h90EUY zkKGe~-HO}`7#lNp<>UUPs619f4(CyNX4RWqT^qnK*}P+eo^1D+ zzdl<+moD`BA?Z09WJCPuMi(vK;am)3r85vtO)z zw?U24BR^MmGai412yRsGv$?AqF@43n#((|xr{fPz6JLJk&EEuq|7ceJbN^GF=22NT z#ey3V)6P+NSJl+RGW}ey%|c{dUeSaFRp7`OpNBohZ-}lN?p-sJ%72!Q&3{{3IS|=J zl(8L;lXL;WKd{{gy=Vll(ZSPgM(L*ho$sawUhDC_{GVU>>o!d%EfatL$%mJ%Daf+U zivDd*%Ix{n;*#F;n-UEr3og7H2UeEB4dI+9^UHX zG=lrZr2bO`Bk8j94!L#*g}9vcAAUI)M;cZ^Rzn&y)pkiZA9-ZMserwUmvZF`w+50q zewba-g*JI0Q-4n5r|DrN({WfHY;r+5EJ_t-k~Zw`?Dg^ln+*C=UknN&ei8 z9ChmO*_4g=5)*-al4=*-CZkR}Kw~WA(#e zOrpwZlxNou7tHQF8;JQs^uac0qnycp7)rlmEzU~>riMiYZmhWra*_G+CG*n>eQEEu zfkD*rg`n!cZOnI6c#6B;7__!mS7soYe1DE^Ey%J^KTB(a?bvrN55+#0QK$qqgY z`-;`lASpC#ezEn#f=?$Oru?2*Jn{Hf>wgHi+J~A|w(aWoY<|Huh4|R$b9qJAKFp;X zi&AZqhn(FY|AZQA2Oj)1+WJgsGmJ}Fu^=gVzMT_oQ*C@UTJhddv}iRM`Q!K7t1I7! z^}3qoDxK7_+M4@EeQsyc4(*yB!W&L84y@_};iAe~JbztRCbMG7qWy_EKW7pik(0k~ zlYo@7NvR9iv`Mh2v+hb47F_FpI1i}YLE8AFp7Z+P2=HA#xwCw7+x!U{xzF@lQ5vv+ znZ7;Ihj;Y>k(e6~c#mnI_V>ng%zo`U9dc?hSN^b%{_#x>0Fyr_Onx?@aKiZU|0)82 zr^mUG;KlCktGApg(V!mM;NJgKp9sjkQGg6lUa;b-r#`N;#3!HSv;FhUB-q%l=AroL z-WkrDSNt9iu#2AVJ^=b zehTE)lZN7BHVM}roj$7RRd+T9jZ0hZdD!8lJ$ zI(LQ@?XTUKM0nn|c8fpG?nFr=$! z3Pp>tUvL?%lpr(1k#e(7kTy@+{C!6~Yvd$7p^p^9cv&%tRxhf>4wZzQgpX(h3L8DI z|83>6emk!`o`14S$?p@7Uw=`wq(S)_#MItdwB+B@qx!RC2C2ZB?SS`i=$ky_&eKO3 zKM-1vT$#{K|7X(3_{hEt1-fSZ*N4i+*X{;l4^73DbiU@=Fwwd%Df2NBmYm$%kye+? z^LIyLvW?aDTPxKm|RWcM$MKiIq4e4jLt58JXU$oFR5)xRTiV}e$ zN@hU@MS%#@k)Z^?mFy%8onxu<(PlyE4Ox!#wIs5#jX!{(Te09+9mLFmDm2=cX;H>l zhVT*;H&MaT&A>Z@!JE8iFg^+1bN5=yT1~SNUCES2CbCF%%mt=VhEq@9gL z5o4bR$v?~oIW)S1l~G7W9@6)Ay=#K9CK611)QV|z$S3JIdFMkonce<>lTRbarH@W& z*JUA^)Y>*O5?4=1T+g`j)D2`=McNp55c=((Jkwz+0{tr~T>PXJdOq-{(2i7f(I+C> z;8452W(VF1!N9-eSs%wn))O~>$<4q%Eao#V+~2~PLP2#|31)6ob>g|%wA|+(fm--C zsO~iBKtbVU??Y?A@SA->Zt7Pc(iO&Aaf5qbLV9%tw(WSY-sh%Z@x{7;Mn#f|c7U@$ zC+CT;P4qyz9O@)G#p1ZN?c~P12U#{a+eG`(<*_=n{Jh)@aA>414RIb?A0|FzM5AwEwcXJ$(WU3zV~-HLFZHs$EXnXDxjY zS8SCDfv0F2mX^RP5!cBF_EhNu3qvBwufdVIV%~KrIfCcEm+g`${;$T_DxXV^0}Eaf zk@8VVQ#-5^Q;o4WW{Kwq)Eir+UquL9oh%Q<&aJ?}$dYB0wSq6~F3Xhmu$Fg?&>dDv2S4D=h3*2(VEX+(lFmIY#`ORH@B5y6X6~7$x~JomN%uV+bdruFr+cP@ zByAFM+?fg?B(Z79-880=Bq2pIC8WjXur}5*Q%S5P$4|R!?UWE&o5R}HTKl_ve}DRm zhq({e{W?5f(4Iq?#N!zf=J8oF7kNs>d09#kOG>D%T=_$p%}AuGBHJq4W|SG@={(e= z?Oy!P2VBw?GL?|NVe3!Xv9@<|u+|Io$dup>_X|4-FHUAreVViz@ml1{I7Ul-ULUzm z38ta@Sdc(YrUn0%L`%s}7O+qZ3C}H26FC=(q1r_@&mmyILsZMjV^cwwq+3KKeMmgV zC3NQDVYJC+0y+KedUtaAcdF6R&25ncw7m)AS*KCJ6XOU%B(w=FkB941bAH{=`4pgs zod3$?h}WdeU==qGCosmIXid0Dt`EJT_+&}kwC~IX^9+=2R7jh#o9#xj@BbX5sgfzp z_~sjNWWNgpW!?X#SDJ(ie>6!)ee+{sHg>xY-M9u7CvfsJ*`N0WqkSU}>y?({g3pXZ z7#VX5k44rLG2^O9TF%%+OV2Rw(b8sy7wuBTI7Pb{7-x>D?SbMd-JjZe*%_rkC39s& z3KyI%t#|35DTRxPMNmAgdZDL5JIauesr4k&R^#3VHH`-v7R}KH8PsES{)R+6p8yhbsat+5Jbbc9S+6CqDIMpD}3r z&8j8PE~|&hrWG+P_sOjO>*62(y!+dnEqCX&4L4xBo z36oPuyyn1^J9bc&X(+-v9-nuD#?&J`WpSddj?4`7TcMs4ehn9Zmc}|%uKXillFv{W zcZ}SmoitW0*m+>ojX6I|@%DncH|UM>vsO*uPt`99VfYyLRPjcoa>$;N1#Q_9x=|gM zNk}Q4;LZ{(z1~X64HBe@<;8fCSWxFPQ*(BpB_MXx>xHpwX*dBXtb--RK|FSf%zD=$ z2a|T62&ETvDMGS0C-LVN>j0xkY=&lH^2x=R#}I9Ne4{=k)d1#*+k11wn5tZ5&&ftr zd-$y4BJ#$V93ts1Ql3yw+FZU)R8KcyZJ=`D9J~(Eq_xf9Cktu=m&VDy9|PnZ9n(%UsCtBp5DJ>2|6UJNBXz~{sace! zL$A~}A7vTDBmJySy^q8bdZ# z-=*g^l8FXm1kOL~6*WBwNQ)8nbi0tz0x>8|5|xCVmi7dDQk}bZg`@Xo&T4dH*lAmk z`wyce(ov~`nLE}G=TcA2XZ=pkY9O^J3Ntz=)!rNVi(3^hF&3NaUucD^)m^;eBqiNW zUvM_Ie3_WZ+p+S)-+R-iA3faVfZ4OLuxsze&syd~;f?kyNfaFH<{0=xI)xTA-i;)W|vwmP1wBvoi@6gn{#iM&voIUOxODZ8 zU+zt?+CaE->tdZul^%xwfozaBYiy8II8FPlgwyJ8>Dsc>jtq=XQ!iD zNM)Y#p_;^m?suv54~*m$hvTx@GFrwAO@EINCGV=#!uP~U9TLl}G&(VAfAnarIlZk$ zYopdnHCk((=3}Uc+@=QqOrvVOs6XDA0T+R3elZ4W&`&Sv6869g~ma=n7#PrQJ ze`wz$2PV)Acmg^$$_kL$8hh8PRqY`0$sMR_FP&pO_yFnUJf%8U9l^(Qa1)n1@WLiw zx$VF_D#)^iy4#`Tt__@8*ZkDxSmipT(U!JK0!*Z&W%bi{Jnb@^&hs>m&H^=YD@a1m zMfwV1tn#2$UuLaaZQ*!JQm*Oy6-lpbmRzud*bSV8pj&=C<|#s*%eL#AjtCSZy?srR z<;Pw1nalWK<4s*#p$hQ8OcVXjNhE`%#DaAc(n|wSC3QZEb$lSB;OB-UhC!cTr*lYg4FEV}(O2)ME5z zPbo?py+}6IQ+wn!RhV|dKXCYLl!o=aP-8RxsdX!qIE1Fh{feL2qk3|wy>g0?glAPU zv8?)3#s#o@QfH}&X+}hy-|EHpiqb4AwJ)yP?N}9bF#4Wv6uzV3^{mG^zm)0V1X;dR zy#GXQNC-T+itnFx@o7-w8nm;AmGYk}yC0**R9?e**mVj!{ez?QIDJI;|qo5sg>o(O!zbVK?VK^|#P z^kkTRnMo94U$*Wij(iMVux)O|(GN!3oUtXHquStATM0q}*4G&h+YEqZ`j|EOiRo<~ zr-#@2+53mYeKM3XfBxl;d~8(Jku}_qSJ;fQreGtDc^-`HtM5zuK3pXR-w?C}HzudS zSR(bjNFjbpYw2d}{fCkRvXlcs3JDvI*4m=TgL)L$;Dq zI}eBp=2TcteagCf8RxP(N-1zP>Eu0HBMQ~CYErY8^p?pu+-7j)L(rczJ|MFvN=&HJ zgj+4f)r5Rnf(Ppk0C%WHA72>gwN@RX|z0({?oi;Y>?n_OcH+{FP?av^-(wMs>KEL?56KDxx z_O&bS(t%chKpcOG4RoUimOW;{C7%9^zhl%xjL&=z<2d`(8J~(791s5}MyeAG)gbV)sUYOzi#Lwxsl{rI?h&6xcA{!$T@}3X_4K*Btw@fA?io=zCZxEbO!c?E~! z(|c~cmjQ97Avsztr!tWC$(ygFVdnkNM=EEIs#ZACr;det%<5-t>ALkJu8!~X4a0n& z?|=3vE%f1WkLa+S&S9d`p_PwUR#^FClquw}rBXBE)TYJH&hL9p!JWtc>zeo6sSbHP zxT~!u5*x%k|IG}o4_Ya!7`-V{X@o7jiEm!B7;nKUshCcMRo~9rePI~-`dI${(wpj> zT{png`4dN7>WSEMP#$8xEv!iKWaTncpbM+S)*i+8_^uNeG6Elfz?Z z!QkDbqJM|C4|uL>rV8Up_AOO6N5N!~EV{3A$e501rh%IMT&5(PIh_nasP5btX4DPW zXy-E>vQLH>4Rjy5e0>aBg5mAjU&e|GbXU69rJfC4kT&V=P5}RUH ztxy;9%Yjd87cn_#)KAc(!*_i%m0KwbJ08Pt6{0`V`u|_ZdjItw%k|kiH5KKzEVxqa zF!Lg{_LriAAu+zy*){`jZyo-L>B7vp3UA9u6-$Bq%X=Z&Hbh5!W#CiK5#b|~n=RS* zWDcn4Jkxf1#2@7mZ_1NCw6B%@FwmA#oYNu6$Q==C>s0dP5`+0^Ue=!zy>E^7GGuvU z7M^2{oiy^xss~>lex7gcYL~B}>OL9#t;fpO1@~6W3%YhMc-`UJ(V@$ZT4lU$mOJHEJ*xmaQQA^% zrBnIyz!Q%~m%rRXxpDZe+lN*k4Vf3}yK;276GtV{J!4AN`0kxB`kJ4ep!(qD;mM;` zEsbodZ zYn1x0BD?7g$98OyhhAHJ==uED%e?EGq7PmzDBYVKY7$PYVR zS-;(P_$$}^cx;c6ocm96_%%1PsLGNDO~0-CPLk3&8j@8>w{gbhLtK8vz?!(C^+eu{rl|JrB@=sqp8wh6YcGgYbAKC10 zq8^MJ>z@-#a5i1F73bVvh!|ybfe{Q zPO13a*nR4OS#CdFjaof!UU&Of2l=?WZEWJHidVMmtAp1g*V&Eb)YwQ(+M$%0JJWyq z*5lY`+wOf^oOeN4W7qbL)6@---;CYsGcYCS-jA9I`(|h7=S|YAowW5Kwd#bxEOMjI zP~4A41KnoK-Hth$QO+{+&P50xyMvpE!xF$bgvo!GH z=Jh{TJ=wNw`cllyN8>TpYKWNeSLHB+2u!) ziodb3a+r35*8V7rzA|F@wedS_lAd)Qn|nDSW%Yrd&hY><9BSM)foUF40gGCuZPDP4+oHArD z6^mIk1Wd}NkfUJcTNo!Q3D3reUcdcD-er*~_ou+BMEtZ9=OzjfdXpZUHc#8n^J_4L zEBW2nu<}Ys(uhp9dDLfc_D`MDJA~6I%&{+*tYyZ*@>6Iy;wQ$we1)C;7NVJPDW8&T z?<*)_g214n)OH0o3xCuxv}fB^1QUt}-!5GOw!bqDT;43>PblBc6|E+G zgg)iFxtw23(le=RSF2ZKCXox6@o-sdA7t}c9~K|&!P@Wn@u>kr$;VGpD+33U?JR=P z3;~e+_r-dupC>#PA#iK9AlXvFMU?zqsGxNM%qsu7BRSb5mXfiw*ygN}oycI2Fp&Vu z+eExbMH#Wp<#}TIqB^1wyLj0ob|a%r0wxlyuK#&1%_JTbYLRuK1U&tq1=@;?#MWNv z5TP_##EypKfs0O<-QP&)Y?b=p{QCc&(az)P(kK&Opp_=^;!qsH^P6eu0&GV;^*~uw zFFm0~w4eFxW`#=zYrthS?3Q{N30v!B@$|M{mnyJPxy+@l(_9oZ8rmyR-!7iRS&@rC zkVi)EAeNA^JMg)r>ZBm?bOz(%O{u7EY+Kg6^Sx6N(`(vpA?TUMc(u=-Wj{Y*`DkTW z=F`n_oNg{mcOl_NPR$>MJ_*O#U)D;?d6UdWiQji4mlk@raI!Oum~&Ve0!*iFA9}D8JAhpPjao}9y|Kko*IzDx{S!YWv8J2^&tE3-T zOd(sT)~aOD%2`OOwK8Pf!scvk2Op-io%CiZ>TTYRqQa}AS#7<`J2m=1{=gzk^hFKS zyGWEPfFnplhKp86W~|0>a>;5U-w>@9tm<7nUW`@#(L&5NC{GGf+Blc-j1}kNp56lC zNR7iA(g>51wX=%gkO8*^;v7($1;L`W!FmUJ2W%mb5n<{=e1+Z&x8XQua`p87#5r*FsLrmS>Yl$U4-TTuI__{iHY<*F)+=cg|IS5!*Lw^Y~jbS)NiWueilx z1gD&jC+&pkvIH*3;KkCFm|c+8N~y^T#u~QS zNvGgAvlCY3NXrG^Gym6?DaW@UbC~Sz7s*xmP<}c|{;H9PFW<&R&mpskDCBH}xqL!I zQd=O(F+#8y-N=Wvb|x~bs?avt3*@gfC(E}%+AVTW=)d4=g68B^sst>qTjDqJtICA)C7e@6kicq=l9^&~ z2vcofiH+VH=+hC}RIJ#71jcEn!pfvT z?>g?kRV|1J_-fo&zHE{Qz!}fWA}q1>lj~xWN8TQr#SUUyZj_UL$#=~ZA)ab+PKaEE zCa)vesK%``992V?#vW4}dHU^~jlDM=7vn#h;BELYDHbgbO}9Tch)pSGiRq-uNTxNJ zq<2qoBIPcYYn92BP%q2IyqsJ<90HK(H&GC$XDFK0FQS0fr^1-kYHaR7H7{#3C;C{% zEvZ7!7@200?=Y@H8Fra9m)+yBn`)ZLlFfam#T`;Pn1J$vGI zKo=qNyM6sih_REUMKy*JZ`y!S7Ok!j85O)9(5iV#PRru0piRQD*a9KvDnmDu<1Ln^ zm|zo4K&SLTzt76=4{|?WJl-_$UF?r%2L4(3)3?9pU)<6Ju6jLDJ8TxJ=*+DuJom?! z#k`im4L;ypg$r%l|EL)??8@NWmlxHWRa!qWRdXrySSd~-LX_*meMg>;uQb}Dw!T(6=0WP|W|=XlVxFd~|8 zZlxSxN`gOl#f5U@mw_x%>voH!ip#NdO*UJq;AsAk3M|9|9Yew_HW?OWd;uPDB5-N4 zW=RLvY{Ck)e?WbP0gK=`kH+yQLBHydOrsQ?_TXBuDANF#r^G`^mo>17R9#_{D{4IM zZ6<`*vT>}3L>Hd304QlFOZ|PhYK09Sc{2VV{MoZBZ*-Br1qpJC&fm)t%C(#TG<8XUI#|s{Lx7z19bH>TUK*?YS6U6 zJOE{=`ooH?#kjz#ED4g8afKuBB&@;I1#Ks{fU=aawh;E|8#JZq-Ef5~{}!hfF5Ei! zfTIN%?kK2(Jgl&Mvs3RtLNONyMdi96j+}!uC`?G{?AxvWwlxuPI(j8U8&wW0F;+*< zhm^)jV4@i-6P}wfe;bdL^mpoBhH;`zB*#zG0U`7G)s0j|fPvNdwv*)sT~{zCji3sX z3LP0T$RJ&uz}i_4uO~jApuvN;S_)kY$yfu{LKQc1`Nl!^{@_K3T_A#)SyE6v+^_6b z5hf?st+b%vVD4Hr94?`9mV3IfFukV{O7F<%RPtNky~+h??*bk9KQc-O5~MQ`~SsT>qh|BHUASgthWbcf@7P0;#@0UvU%I}{Ke`FfA{p8sQIc&bLSu#EXlH~Nc zn3^<6@$L?R>W8uR9(`FGD_?iay*@`6vRM8DV#hiztJ)`1uPfuZWp=mrX#5j zQGUb1nr*k{AU)S*p15Zq!)2`|%ow&7z^f7prc(P=luNix}weI8QDE2=aOfpe8I7D^yZ$dSe&kfjfinCyG z2j8+&Rk`#r3ahM)>_oMnxvdu5=1}}3#EUxj49)9s%v^A8klLw2XEGHRg-&?=H_v7 z_TBS(3z~bi5R$%1M;)V}qtz;F6Y<&lBwqH}_!t`mmeJAcC?=0ot^=z8N(sZFW&w6B zvJTXRC%RDIj^-xQr80;oH8swbg`|2sI*5^|s{m;zX}yQmyNz-kRY-jGbjT-DQYacY zU~}z7%2^TXti9j}D?Dd2QF~2QM6o>nrwIH%}}EO3S8pl>6LPMoO}r)c!v?;0 zTU~SgRqb`jR<~n64qtt@qcpmG#}U^7v-|1;ZqqBxrN(R1Y?hkQe^vwu)Y6zzA^QcR zUI*&=eDx-|1si7Vhr~Y;uf1f>1&=jWeuw=`xQx~z(a{ZG1_F8h%Yk9=aW7{#xIN&N zX}V{680BBy)O5oBiHc;;QeNe}9^ApAi`9gkHITcXp>sSbQq%x9^v&|Q69Mx=$p{N7 zjUcZwVls;lU!M5Qh$jV2m7x9T&XQv+alqO6fMmG74C*ZJUXtM!L8;{oq<70$fkD#@ z>d{D~flL!gb|X0!ak5@)*H#op3~d>`^F&w)LvMZ2*?U?V98>Y^wD(08$$PqUtlhE-It&pcI8v*Vc}Z%K(AD+miZJM@UgIlZQe-bAnO5!z^(0hW22}!aj0W`7^sflQ2?~35((+CPHk{Q7kc%I#Fqa-z^f9E|k*v z@0LDbUk4inqk1m%nRY?u&frIzg1_D{I{Ebk!?n^k1tZIFWOYK+Z9Hn}s5dyykrU`f z$Q(rSt^8IChFw?!Hu9Or=V9GYXSf97OUTYD4sin~QE~p#sY93Ao9%B!LeB=0Nrj#) zGJKcxR!h(;r?%2rm%sUI*p5xki* z(g%F*8u}|FtUzMa*;;TXS|_gqH$#pLPjafmKR3HlKJm63&yS`cnm0AxO=ZRcWA*Q5 z<{yZk|Ga4#q&xjZZVNm(;GSsL^F?ApB8=Iyd@=}1H6ys{kwCk8f&fb~ITc3NzckQ0|7iCqGVp?|2dV8pIFF7TpOube? zWtQ~UmZ0!ve1N+Np8?&V>U1;_HfXg*gG)ij@8S9MGy%Wdr4Cv;BZ^F(RI*9NVN=aC z<&!OW`A}nP&rw8u>NW@h=+cAEyDT1)3S{- z*Ul>}-++&L`Sxa#ypWeAkcyI*dzNsnpd)&SGc0{PT6e;zbJ5_h3wM19dIELKkj=<` zBu$^7k792p;j?_Hxj=%tOmsmM6X*W+zSvwKqV?`f0b$XL(4ErbO?ihD2>YxxxUX;b z6vMC?;bUgD{uiBey_h3m&yHDJJSz$%kMaBxKcD)$5iYDCU~}uCbGZS9yMQa(YM-Hd z^yK+7zlxp~U|q@SWcXjvE+C;RNyh%Sd5(e1o+omvL0EfeAFaLc)eQs|9yawIoI95r z@+81~Ph%1|PtF0$5J@*mP%%rS68q&>*2^<~&A zU)R$2nADpLZ(V~pK<41uybq`0 zEelQ}gTw82R4kDMFh<4l)sGjS-@K@DNn`%j#>y3q?{^;!e!?6+VGZJIb606BMw8a= z&bo;|ZjkUHeyBPi4cUzYmkX-QOF@ zSF_~c`Jm^yw0ix%GZ=KmS!^US-^@@(q-;#Kg5L@;rWv2pK4S8-S?d>xS(} zooOKB7VDe;+Yq-tuRj4ip1kn&t%eN{Rq$WtcWW|m7vTGL65Q^j-z^tlv`KD)I3|M< zUo!h$8Xu=}L$yP7HWgFra=Devikhg-q-1aTJ+Qa%zlo_YWuH84%MDgP+zg*<8o+8I z4{+2j5GwJezcdXT{o0P2^Alz7~CBTw7knxH&IVY@w(<9J3~M^`}TU2zZYS*Qi<0?7)% zs}}y}O|tove}sb?RE#&uij(RiMJ74rGO{i2tqWVQQLWa|da?4OX#a@YM!nGT5z#S+ zaRq!dY^URu-W^+shd0X&cfax zDG1So&V%W4P#*tv!vDSr-@DyfG0kj*LL=#;c3_KE6^D9c_1|a}W5@ofSGmG_x8JH8 ztg4^YUVnR&(@q|EebaU&d>jtP-sDC)J6F0nj9WhcHt+LWoIBWVn z$h_9~UmVc{KXUy-6FI9jU)wpo_lL8~<+Q`H+T};rO&)zxdV5v1^+`U)&gmGKf&*3`SfTL}E?DxS0dB2uaHd5`1hR zP%3D$#{5>#+OU*OSJdGmi4Q<~^lEpz&|EUi$C?#f&?G>{4=<)ZfS)Xgi|Gtn2aZ%= zEPVgJS4tYpo9&H+(?03R&;5U0e;}Geaw%E6+m%$dfXBbo$f$FsA-Ey^<$%~59!emirgKHnvL3f^Q=}Zi==}}-g)P9q*FWFp} zS6)L3eCwZy_n%I}%rnY9yVOLa&vk#+wid+MR> zd-V?RXG%MGAI72KFnuIxd#;=2X^|N7UHU6LmsA$w3&_}K&~=~z!`mP&RVM^Z5NdQN zDcu~<(5SA#kh*gx4zVKHK9G%Oq%0+8Fpjce#4IUhNTjMUE*us11E@LOC}4wh7^pqx zV_=21(^~=I)@wNFF{G@!91XsH>O(7ifMZUEU%%sd9X%%dI(RiGg@o6j)(w6@C5nR| zLOe_3Vach^(+L(|Pg)PYp9J}cZh99a)lDg^kC~LDcLZ%NmbPe2qQMiyK}gWEnTVu4 zmuV7+SUr)m7_~u|3ACO#&1y5SIxn@5+(jyelU^n{nlAuV9*J`kH;`!b6i=`uxn$3e z<($(Vd^_RCxfsJQc`5R;uQpIva(t%{x}kYqkDv)o*)Val&1=z#8qGW3;#u z$JC;IIGDuq*8Z!_!|$In34Xi#gef<;44<&c-Z|qUQBrAiupt!?@Vqzm@W|5H3dtWS zg%B})7FIpjCDc1F`1wqc3unLdNmZf^ojk;rW1y1O2@SCz*o4-A#0wYASuD#1W!E}z zzw-CC)4z{fc<+qNBvqg@Ak#Io_?O{7Tp0MJU~+9H&32u^JiJ>7Tbu-*)ILvw)^s_+ zx5vJU2;#Zy9<)InbfXOdV_U?Zr?S4=PApfEH7GWLd?ag}s%6V@$^@mo((4c!Lg-SV zc-ETnDW>2Cx{UMP|LAW8nTqE<{9@aJ!S|WXYy)iukNOc&|w?@qLGeHw0y)7t!62y@ItyFCv%7Z$@wx1 zL7`wH+LL2QDekSJ_JN0t;ZsE1Yz{L}MJKU<6+CU`uY! z+_(}T6qOWjwfLLaO=}SgBRebyn2c}#j6T37e+}TZ7|=gtGYn5FuF4Ibm5q+3dNSzO z4u8kRqroSeR2Ydlm%H|uibkQgzyTZ$YREd34x>*RP9kL(dE=zB&GWfueatv7IPz=@ zy})821iWdQ6=Qdf+&aFQi_npZY(ng{&KF0xp4PGEme~QPTQ@(GOU|u6UGDld%h@jY zmT6FrE+w$ESLXu0+0*S^>*O*|eet<@4ncKURAf1}e0&nDz1aCP$I>(>fa|RyTHHaO z07I*Y^BJQ3{?}WNgBZ!F?l<3s8i`1^Z|3cY;ifgSGTs!F^a>hM0v@Mx;Kp{bG=DF_ z<0@8m3bv3Q;3qDQp_?!sddbLq=te9Cw*o4Uz64j7s-;=VWXy$dRy!J$@z^XKrFKbC zreTivO&-l!8*Gb#Wf5j=9cE|v%tBq)n zj`fm8v4yUN?X99XoZr?P7ptaIblsS~Gm4ev>V`1V5No82Iz+jSn_{#jH{jH&Ay020 zLQh^M;eC4-iL0E!tn&nklgbZF84AQxMGoGEbk5^;6Mx|h_OH>xN2*(fz&oiLP`BuU zK;!ojJ2$N@Hy_YfEpHE!b5HJsv3)J@v`ae+j+nIJppJZp6KT>0*rJurVvz&Bklm@G zQrO)J=?1n^i|S;1)2MpDw6Yf9waWTy42xHDLUOSP(DFhMUO+~1I3iD0;Tl8i^=!t@ zQzT;$WaB<6Cdv*3aLP_ph-9*Lalj63rlP0%-Do+HW+W2Bj8Y%Env;6cEku`gI2@w2 zuJ8o6T*|B8j?HY4tM&q75EkSdnINS3v-CAi=RXJARQ zHVg@jDWEMISHVy$)y)W_MG=hLge_l539NTPWh)iO?nG-x*tQ3>a2yY0(iz-SyG)); zMP~DyRH7i3TV|Cd*ZFP?0am-j#?Fhu- z;<3yjWM|N*&qRt5$G3>(Uz*Nh7LvtilOmhwsZ0%gzv>cw!CG&jlbkT>|1ohfY@FoP33kNj%o*yKT~w^7+0TVlesi zPqz?%Z02x&*^buD?9of|qlYOi#}iDOkMSs-2gpW}QH^*aN*-YOUjo}@u9^*)x3LCI z{U{)ariv^A_bvw_p)M2m#@b%Wk)WgP=op#GmL*Vyh=t-ol_QPKAuOD*RThopDyBGyLl1`A!0R{!ST42C zv<+2-aPKoe?`v)5%}a~JiXN?!yQcC!o8g#n(|2^5ILHCC$aJH$_MmWd1qu~IyRj?D zduDi@`L?w&RRJysYRzQI@Maw{Pb$f%4U-NP#@n_+)Ucv|7uYfdOslMq*Bii;Hh=WM zWnEV92A6GqMWVvfB%4Bsqtzgyo*DiVn3*kmL2)pdQ%PHi6*^iD`cxHiQ$Hu@j}T)}NiF=n9%0KAEV+|Zrm$P&OSY+~ zX%Lw5M6A~NvSed+nT)Xs#ucqp0ciR!aSr!K0GURr@-RKoy-!P3q9Ni_XIHbp?dThS zgTkR}^Y}7@9@sxe18t#B>O(qR$l0W`+&h~5HD=~<^v!jh+B@_usmx>#QsXDLQj#Oy zZZPLcJ(iN%0Ijm-rDNtJ<3SGfL#LdU#=eN+ctsv+{Ax&ALK|ya5M?2EL;1gw7Q1{N zE9A#DU>fxYv?!knQ$v805oA;+hB-We)8TtgGv&M)`HQA`IvpWL1=PhvG|6Fkm+xg3 zVCkrXXR_ZyPF`4aLqKXPukOH3-`9@&zwq|z^MEJytxNZhe#yyIOTl zA)!&k+2cI00o$KGmVs(KE)?}_h$l?nFF#|NzthQ%y3Hjwj(6W8!n%@3Xd%s0uGo}n z=JQLMH@PSuEPWE4l}^IMAZ#cP`Yxn{_n-AU!ttVM-$zg0yRhyGOZKEej=nxbWCj+& z99Z5U;mN`z;6=~mePlgx-i>_fX4&p3FTAb@T1IX@|HF)k0$BLF|E=eNDLQEjwz)70 z6O?B{bv{b{^^qelpL@&5A+zfpj5zkLb`ZHERVq14+K#1#;rxsjs6dDDN^c-AavLz7 zZ-LtS^k4E6EUXF7pA_?qZ^1;E_`>m%HE^eL?hm^ROx}MA2MAr~%*ht5S`m@CjoB4q zF0^XjbEi>#9c8N>VhBVS{5A3XjEVN&C7pcARljK~7hA^9!E^Z^30knho{6i^Iuz6VIc=#0vVYQ3EqG~7!N zzjZCdu(~n|3v8fqvSS%|bvFsF(}sNq7Xy2ujTKlURnli8Yr1nYRGEMdzl* z(FsmyBq&bjXu+kdj?dwCtWKiFvj_4?WhceVT6KA*f<8+HHxttjlgeWth#zhN7eUG* zPG@bx8<{v@DAddW^<8qx;+U^b2%{5YXcKJH0Y@=>cz?6GDB1^gTJB7XC`wmBuWYN& zx4zpgI}PN&zJ3*t*nV5j*PPA;1QDhIWyOit$GPsPpwKA^JJns75CPD{hYUZ58Ep<1 zmSgxsfz7+9K9!$QaA2hl(>{N6FiA&7Km1xhbgDFYksn=ebGT_GI$0-a=XzNNvDU@T zHnGeJ2aA1B{^X;=my$y3kG-6c*UN+{XbM8S`-gMB2?fWS^KEbcYY>e_^wK!$iG7yG z%d{tDi?`Y5J}Eo=ypDA;Ixp&klg2+i126onZOx-Z@5UXx zIOCvtyvG$jZ{3(<<3}OP1}h*cPWxw_`eE^5P_N7!xKAp(4<^MBh3Kni?KP4GDb$rqx+sTg+6(QH_O_iZu z?Hwb-Skvv}K0p0_7}6e|BK$>os@IkJa=gNK&BcPFG7=Rq>at19$a`rHP1=Hj`@_xo zl+bAy29B)G%7|Z;?7CXm1i`Np8gAf)xC6QlHL$2oM@cp~pmnx%eZ+CQTj{dkJGVnt zb*wcJGkg~ZJWX6nvzXsXXHGET+4I^r*Zuo-pEO7)3_Us(7LD~9kpRV~1||>uqR7OS zG9q>mHU|Xr9FS;Tc0`=r^ByQyN5YWS1ALUa?)fMl^mFeaP$$^FCxFz{@_Htcnr!F6 zyLRkEJ5DeCYMsV7vBgs1{uqt)6xaj={GZ=A*WGfB)GTzjeCJGmJg+__v^0>b7hW{A zNl*#FQZUc-ncAr5J5hYDz{DDamYM~Y0x|!c`{Pnu?qjN{#r>T^$o`kcWeXpd+G#${ zWoZB<#c^?U$0+6%F!;>76XjwZ#hfA8cFI%hK;y0!os9;++4BLg*QC-9NfhMj{9Zzf|P-$#Oql8PG26!5u5S6eTK%&RLO>jKmdMf$jzVxLE^$0Z@Hw4?!{1z=6!ZKg$@anGW7#7F0uy0-1yF%M z)`Z(0bOJSM%=Sad+^MC9^D zYc-%%wA4~-75!VgK~y~2Qm?ADHbJD+qvBCT#rO_=zxkoIRg&GA=lDGovpRj*@Ql1i z;WIL@j(xZU{B4D1Edrl?0!8Vktf9KMYyW*@#o%+T zNjR|?k|zUz<0zeS(&Q_)OCj6oY>)A z)gJ;R$U2T|y~X#sPtG$6ZH`$?ukzp5QdS2yK=HkuUa4;yt>|A1l@DDCxH`!8%U^_h zOb+Ci4bPtzF6G~OP187UdFzF^pu9s=g|s*o)ZPa&^nx>BkzoLYpkppTLYHfNM%yg}fr;OEhs7R6Qj?I)Lguy7eFM@8oNYq4Tx9|&17=^FUC za2Dbtc{N}mBgTcP@vr|iz}yKbkJ>NlTW^B$729(ja zAE)nrzt<7~M3*-=S9krkGN(6I-?#1W+PeBr#vXbGZ>}9T5&M+t#{^GH(kH`5XJ4Iu z9<@S|ZLUEu%*n-@zYH%nH7zZV?KDp<`19p$ZcFalXY;1!O_`Q{sxr?j_GWGf&v}A` zkp2h=_LQ!e$)!V25Zk2)Fs!D}<%N#gx%S-Zp;sF zSUzAPfBPinaf$8OWc~g>OJveD!a_-2QHA@+C z&&DNbyhuDBf|Ng3(6<4@Ehrg)=zw~TL|btG5OuD|_%3%& zT>Xc4kyQbhogY~U(S^7@2S@xm;&sFKX>ioK^qN&`&#iIyTHMvR=ggtt5s!ba2%0Xg zSU#}-$Y(p-SDiDjwz7g5-{fA)4joN#H`#l51kPA@aPdPFWA49S1%2)gzp$WU!PDLI z$E+ZSxzHsy>hi1?JM3O@^}t$$&J4YXK$AB--8|?(c?s$+^&JzAh{h~$@~TOG^iy6c7$_uceeXOE$jB6 z*xT~XjoPzsVVn5gwb>(kuv-)bF&E4rLQSgG0=lpw+=o_$hz=IZy7K z$EmRgY@Ga|)afFd&*?;=*8v!lzpWplEDT{8Qs~iO%ZA!MH(MdpdW!FT@3kTSxTVaQ zbwJ0(hc=U#*G;nyxSe?}usMFPRmmUhb3Pi6rs>=sN---C*-Rt`gq+FA4hYty*q4H`ZI84x}YY#FOL}6?6V%m~JqmQMX9ci?TUgx$`DC&SZK>Z|B-Xl;Ei>p721J zp~XnBYOW|wqz7i zV=PvYK9M4ujcYJbM+QF(<<9YV^H9d`)}AT33r>9CrSus zPi>ieIYn9#gnem1fT@B_SQgp8j!+>hWHPW6EG9$F&aDR7c441bLZ*W{Q?RGH2)8OS zV;3j(Q}IMJj-kLDbrQezb>VSda(*8cghPu$@vYdG5F-rKSdg^);gX~wThD@OQt*~J zJuO^?cy33*0I>nMy*ed}=k!OE&t4~7MYkY^Bub2+h2ePDRo>W_7-mrvKtwS(eK@k- za`xCq57MtVp}~l%;51G;E`%RlLe+qnR_cfOoFN4LX5(DIq#IWPw%GUqU=COAF{hwa zOLKBI;R%yfB0q>c;1F|Kr)ao2rC1baROy#95qfe1^A;CrDL6^HFC!;k$5jBjBpPYf6OU{zGyA3;g z|HQu@_r*WXXUN~wT~3_XEWPV}>u^!NKMBeW`54|M>jsj1(jS9eo=N1dSM@+NEv3AO zas_&hN{YV0$!c&wiR*9-cvrd==e_pbXUnA|_tXcK=BQ2`IcMs{4p#J!g;S2X%SEM3 z&&Q0>Cql@6N_-DQm%R7L$vPf}StN|crm8RJsylnJs3AbK9EOpE|DgRd2{K4Kg4$kP zpm}bCV>Fx(PK|?w*}6@?Fr~N#sPNOg@Yugl;l4@~9S5mdchf=OL_$ZRrbt#S{ncI9~l@)D1XXlvm6|YN8 z2F2de3WK75jv4ofOfm;4>Xa2-ikzh0x#13fSg6*?;k+0iGtYm;Ih)x!gVU2nFoyp8 zOn(7gZGWe5Rd&@4s?WWqQOdi}M9J?)yDNKb7Ds}al{pg4^THh(^St836m!9hQ^{~1 zQ+mQv-2a?5pLW!QyWOQs!z=olNh^FO(Mn~4z812L{ZaC$dybJe4Hfr~g>%hGhCY)} z1kjT)lfgNY^PuRIA5Vc}MHEmZi!{Vqf#-RlKGu(pIIl397LXEtU z$RH@5%IS>+LFu%J!-F;CeSj-y2?i*f^dN)K4mkrpSNH2H8PupLHVy%#8mc!eXzvq^ zH6W-{en%UK%OZe!jR?esc=rx`J1t&4JMHf}^4ZKq{CFBMo>GS4C&R!P#FuyStkX!N zI0(@<0w|NQbI0oCYu*^kr z;PbH8ixiu@BY-+|Rz`;kOU{gU#qNz3N9cC>yi1zIBmoptD7$M~#=s~cJMizWPF%Fj z^4pyKu*-iTzPv~wXy6>ivJ;7C^L`JQLrk8sJGg9Awe>_u_xSuwgMTDYHAQB2P-lpY zAwWSv4ca6pjY%B&-cSnq66hsu0LX|ztbb}HNai#yT_D*wWMPPg`~`RwNzJlI(r`oX zsfKQ5Sr%z%(R!^x!3VdN$PLt<$6>lK&gas4)_!`0Tc4Bkrb97H@d(7(~3CcxHnC^V4wX}Czeuc zQ%*-w$%tj@(Hg8}WHL|ue&xnzwT6FZKe+zqH#2@+>GgGZl8HMe$8UqPA^!tRU=yHr zk!3CVte|FaqplaEuFV874cmal7y!o9)g2~XT?NxbzfHaRq4U9w1eoT}9Q@Y>pSt2( ziUTRFQ)hs)<^X|}Y2koxP?PeT(7#7=chdo*-ilkJ; z7WHbNkJrcmOf=HjRH`ur1b@4e02$=j&z3Iv`Zir=cl=4fq|dtIqs^-`+}fLxz3e4f z#+Y1ryKS)l@>LaZ{DE^xs8t{q_jQtg{{B`vcObgESod6G`_XwuQ&Krncd-6(7xe>v zM9gXmi%-TH2w4)Qx3sZ9sFnJ&z%)wm<~#4XZ*R6yIpk>u5SUb>QJGXmpg{XE3^I;| z2+9Q6zEUG+@;%)@1BtYAe#q{OK3({=+}=qWf7J#2-t_J>JN?=i^M0~HQ7-Rt>8yRx zOY?75y3H+}FWJ^jo}PQ>SN`3H<&5rMjrm7C4U)=9lenyZ0-Rf~BsxvL`u?ftKu!=U zUTG_85kHQNt9_ZCRMsB?=Mw^B3`dQ#Xp}ahWN^}aT#E+j^h?gX0c6G3#a~Ztp{2{f z&g5`CY8GN*-iUJ~BJ~oZp8(wd_|j;9jz}`nuMxablXc#<9H`ciCSEX9faF}CF@U?a z95Bm=aa0IdXP1LA{J}P#`+JyWpHI2K0dRWiS_XJTYl;bP(hC0OqGS;KgnU>th`3qxmRb5`M{XV(>QhD-Fk=P2gjePQ#3 z&v%K|Joxmc>q3`ojCgtX@|<-)f34x1?XN?Zhu3i+ z;e;7-gKloD#7Sh}?W)z;L=mSv-3Vfen{`B}W!xo?xtva|R6ufFNW=tUC8$VlaZdqB zjQED&DafOceU?Fp!DKpElz^T(;Vp(6_)dr}l1+wI>^*Zd@UR(BPYsUa6}`rPKz(`^ z<1}E50hW%mTvYr?W%iqyV#!0}ai*mstJB%jSOC6(np_l;mYlrNiAYpGfh#m1qugc9 z_#--jbnWs;2Ty2eU38s2Dq}UkItmS7%KYzXivm50A$|cRJBB{>_!sdo z6Gsw3#V|~hhXv%G_$a|O{i`yKQO2lL>THZRdU8{>3A-m@%?7~4+o%y(qh|0_Mg4ay zVgeb6b0L{f#Hn74J=9MMT`Tjvzf^*;NBd6Zqw@e90wj|mO-Vn2L$XCfkkW+;jVV@q zwpqjAQ_QIh5o1;}lHzb1TTJo4Xc_1Ig&>}S0+79d0A_U%-t@d`L)bo}nK0na-LJjD z_LiNPF=c%KV$y~- zpKRr|HW_-i=Kt-8hWT3EFte7?MVi^ky5VLmri(UfI~^$0SpP0xIj*ms*5B)2O@A@2 zKbx*aE+oC#00QYR&I%SkGY0vPfN1k+ratJ-=DeWx04JLzCrz_S&}v!&L5Hc31f8Z) z5DPaI$nAZmKxG#S&)42nnOxlNW}6b^cXguDnqze7R5x{hAHB7#|55qwyJl0U_?1kR z)RWAWZZn(^e?3AQs1U5zJDDxEX^#gLv zPd>D%FyXL%>4%wDIw=vPxuL4TFjp*QH?9^-4AS9Jb#YOiz#Vt{vF}Zz^l^fLqx}cC z^7rlwyl|)x47J)MIZ2kGqaOidivdN64H>+T)CqW_bQFhi4gPz+ZKS)m5URG!LP^Mkt!IcKP+%entXQzI*>?@==^ETICWr6uhZz5euJdw9 zMy`-kubUK48{epwu1kpub6>qfvu^ybV4|o}#vY6i9f%cCSd8&-A*E@uh;6`QZ;MTM zxvx*qXkP}doUNbY_xD;Yg;%i#Fz8}2DDt$z72N>PGt?=?#1dX@eKSd(=N1dJSuM-ZSh(Ux(tU4~ zS=LS(ZJ56mWM*@_aTDVQ)zf=T*kllLD1;=ed*`#%Sgbx!qG$u9iz=9yG;LC9qX3+VgIGf06 zz0W+Tkpju6uzP9-7w9FMPTmU3a@wF=->x&BP1!ne{0U9E@%iq(efrc%3*JGpqYyb+ zA4`fmK)zneb#|6ApAM*_C*Hrz2G(1FtEeva_3o9cK?=gfO|tt1m+e@=Gq}hK=Kxhz z732T8D-T1nc#+aT&IUovwA*Ab>fTg2oEw{DY%%$W`%8BOy`ApNoT3eiaq@>JrGgi+ zK;NG~>S#Nyr*u9VMTDFE2wleL0^1Zuk1m3)ts4kH=B?6RM4Ny^hRWCgbkH><*H#|S z$Egb#kZlS^ZCW^&1W~^}PqOAEduSc^@dgx`RGa{ygsxhKQnqzG%aiOO6#%)aqQxz z1{erstq%eC4Kfs{J{Akoc#WTiC^)Xg+44MW$)4;sW8@9(cN0Et3F@UqeR#BiJP3R` zhX4<00D#{h4m`7N;qnJhX&@v$k|R@LGKGyjmvg_}hQkpO%~+O@;$$VL_|+5ZqtNtau9jCCa|{Y5m-V9LMW&weN~q*;KerCt*^?AJ#5zH{N{!U1%+Q7B zX7A>6!K8<=pz`N%ke$sHv5{cg;W1$LiEEobdH^^#fgmNeqVxLq4IW3yk;T~+qfj;ic5FB|BpU9;iH75JNrPyxbGLmb6D@lq$YV{g0gO~af{S}KysJg znaK-dlQ>yESwUjaGX-kA7!NN<2dRQSFe&#wGa$HervYFm1>t6)5e9~>SDfZ^hkQrcgQZsiesm+}1 z*7$ac_|i18ol81Xc_YLagT^S+OGx?NTuzuUmcUMW=MysuZQ{A9Hj&S`ZqZ^F^eoek z0tKzgjhE+~X`D4#%z~nW2;_K%7+cZue!!#O4v(OMdo<|<&n+S74`oc#eD1*t8F9Xb z6+|)ss~B-~x`uQGoF^?{Tvf`uj#nMeHebtMk-E+)en{?-&pB{=J#`%`02!gZ-AjA+ zMx+G-g+6?rw5?nG9_n>-mG0^u; z;zfZ!&&1KV7bk)bA^=9htfnQFOCYL^UvI-{$4szO`GCWF@*x{3x1BiiB`32w^1$t< z&Ks2vi;yaf>Sj(2ju{wnj5WEb9rJCM+-#kYy)m=6O>9G|G)W4(wChiL+rUHG9|CW! zofBA05(b57{Z!Rb?Xaz9uTA>xg4-2Ilz^yQHrKGknPRmXu{p=VIyQODafZJ z^jzG7>WAs%FqO9+M-Wg~HLl=|5S8pLMrVL;v_2(=2CkStMhSql<_KW+{S9!j4ITe* zq0Q*VDS>7`Vix= zSqXyl8+RCjs&2cid`-mQsu6fa^N{_`$R#>d@LOa@#5LggX?1=@QQDm{n=w7TyJ_*7 ztVy6|Qgl(~ge6&ap0np0H+y)3rs_bCu&&3({z=@rO;MrDDkyOe&~EfeskHrM%lP__ zXz_N{6m+`w4(FL0``f|rjl;xk1V?(66MNA!pEpPt{H?wpP~l&=#G*VLIb?(fgL|Hj z+7#+Z%9_wO)|)rFP=XNa7?Pd^GrJ(u1R^iE0{j8O3UaT3VDXLvhajuVXPV`Y#}KH) zg>1-7q{+Iv{WIX9)sZ%n0yx|mlft4yF#=C(5@Xeg?U5bm7iw3*y;+Ct5NcK8X9EhY zV=6i=F(!9)X=3GSt##+XCI^uA`5^O&H7a;qn3DzcM?SSkxG7l)dwwpnA$~03#&P0j zs;=Ih2h&$o6ZoAKM0xi?AqY%zKWw2bz<3T+HoY?xR|OSav#Qp9v$s?dGS(wY=Kf4L zW#*rI@BjJr^9xig15Lrd6o=UjqUWo;*p&5#&~%UZ{z)Zb+cZ}y0(ve3drtiszOp*~ z=FsG`WfgnJSvbo<*Eg^V9j(mEJ0ZOqBi>-HGxsjUT{!5`Aqvj@G`rz$rz1c<$zwxQq=raQwG zKbssogPX$EeWCe-9Kq-r^F-W#e5 z0QHlY0iwg`UhEGiUKvI7j{7LD$Me#-g2P=@P@+eMC7tweTZr0u;HMp)ob+aRv><)q z^*z0RjGA`+m!cc41?t1?db6j#w*KpiuOrJ$AZFLQ0deEAfqAbfoE66#=Y z?w^~_jEn+*>Un{2FYWm<%Vzb!R}-yjIS+lsEkkWkR+%H`3{GOW1s&rUqc4vO8XbU%g6iWX7GvFc(v26b{5~5E>470q zS6VPyKa-5INUegU8weIQ2g5&xT@(0E3 z!eURgL&lkQG$cH>>%4$TZgqIY*ZA49pmvGeo<5J$d8|Jxwg>K@f7CSOI6sf@HW{Dc z`AE(nBl`$miKUq_o?wATf>41Y0t-5&tGnkA6~!t z&7@ap^y4)zw|%o^+xabF&CCh3MTp&QLJ?yEx^HzX$ zt+#!r@=C8CcwWE%zdad-udreI1yk9RVpJY4J4!182ZA=BbXtf*m&U@7? zE7h<-%`2~GE1xWJV%~YP;cgF8j$T|g?aS3OQtSOJ12edk1x{7+zFShuI~Plb*mgb$ zIOb_nPV**3_EoP;$*IT^s68ovaG*$5CFFHyQAy*$_OEQeEC4!J;XAK;iOPq0QnpmV zcrRj2ii@#+ykHg$0Nr?@su|`8DgBLy?!F^fqgw-NO&URM9#rR(SlCjIaDM(lYX6n$ z#YaKIa|>`w)7FE(UKn2fH9~Op{cZ1UsIAGIe{sjSZr!&0(jnVdeBJ-&CZCvXyCcMR z#=iOa{olIn+kH;1ypp}i?}y(HjSse;;`OJF#ijqR%XY;_rRD^4ZT-w4OgpXW(^0YZ z;xTvm--lnI?V{!Kxr#jD(%hcH<&91oK z4QI4pYPfpo&C+93`S)IJBCIT6gXdzb`1s$A;+_HpmnhqpC$PtM@D5MeF8P4X({jqA zIEOWCic5>-oc5{w#mSC)ufBA$ zcrbc5{Vd?CK&|aS-Uw*oBkN#Pak&-vS&Y~SQ7Q#kYo1%rzH`GY&RX=DyehV>U&lMn zv5&qO>y`H!KC;tQbc@^Hhm_Wm$H3=EXyt+ho0S*0@84QTj5&&TYZ@}6l@>fK=*uI$?(&eb4R$#<5D_aBdOx9FTKCKpQgc%CtDM^8RK zuX$Q#9(eKe$v$hM=E#yh*Lzz}QI1x9ou3{3F*SbA6NLKG!o`K>?eCu4>dXHn@{Fly z#_ko#_jY@4T{bg1$otMNxDuJxR{~j+JG$0_ZXg`x|KQB4FJE=@rXRzkath3PQ}~d! z{g*Nf0`%BU&W0fNfZ7nx6XM_uu+a3{E5)CK?sdM`{>6soe-nLb8p8n!8)*d;j3lRk z)EHs7aHa+`wK?;VeUu2v9L|h4q)uP}he$Xyj8BJLw#txAIE5bWXF?b?g=+|(+`~&p zSEW^AFRgf4^2YHy!F4shX+k`qAVlDOb>^2D^9sB`ib@?h9u5Osi-8xVZ^h!Q7$XTs zdp{{!0*F$`G?44L7!{DWfu^SZ$n7gpS{@gctCGEU*UbUN4TMS*NKWP^JP-3uzz@J- zOhl1kF+QZ3nx`fpx~EU&rdx&exC?0nYO7PWfF^7Bpvg`)L3AAg=6wnm<4I(dnHUOn z`n0+&jOTfng=N>77%wG-@2BNl#9{K9;QsS98yK(cFcVSx%{-XwQdQ~&^S{-FnDb+F z@4@`@$eJtYO-zOb{SFN*Q0Yd(LYqSg=du8r=Vs%D=H#1r3e*6R(yZweNuY+3E=1my zG#v&rfeIKo!F#o!NnsNmp2z#|Ltq8dEl+Pj|Ai60SG=o$A;?c=V!awpzPe9ijRO!(vx{-HhbmJhu~Oy z3!#8&iU>6)10oozJ4JGsViS>2Z4tSeQxPc42FSJ3xTqNqffp__Gyc~Wa87XUP~c&n z&o~q?zu)19L`_`)oXfr2w4#&&EJaps-<;|$g*mA*8`Jrl|MO(EHmv>^T4nM! zW9g=ewf3#c=a|trQPR3b-$h?_DjDwxh6N3dkX7^g*SCrhRX54hrr4Qu&r0f$ zA-qf{Hy3jH1MVyml(($7Ve*jQA;lN&gUPXsx!5=w&EP=h)j|TjboH!8#z2I5B@&!k@M*SA zEZp#P_Jw}`kOB)(eBAQy_?v#gdnZx^U_?UA?hp;SUK;9!ggyn=uuZ zcn6&ilssYGL3*{A9PcYI>SwSs?r(m&$Lq3FcHK9*l`?IeU_7V78YrrQ^OxZe;$gEh z#%nD&X7#}IeUzSo!RtDO?&-h!5wZ@9u&74`S?5GzmO0ZSb2m7}S8g%P2*_{PHxjwe zwH8ARNaz@B#}Kk6aF$dDaGv?Yvq|JTrvR3r(LRLKK#CB28qqdIff^D)^Dckw1Y)nY{3nty%%pJ#?X`@_zY z<`sj`{LJ{h&6y--Z+80A{E&0zl>LqKNSX-3COI2BV0zM#}DEP#h+~ zX1W?ZhT7X*Q4|X(`_d??$3uUY2iP`T1&jm$k#t2d0BwG~femmpl!Utx@HWgo=pFtd zDo*g`j6^dKOT?TMx0A^M%v10ww#O9tbw7o+jPC(I&QUrtez*S0{M$QjV-*f!5)5+g5tL>%WHZNd22dUijO; z%(TNriHg>r4TvR?=7}&`vQdBLEb)Fe1N=vji9NXJtl3)_#?m zQiK_{La;7uJ&js)jR%3}pHaidcZy{5PJZCLtW*_u=k_UcdegbuB zlgCIz%O~)fHh1*#p=0ZuHoBJs3oXkY+T}hTZ>B>)q{e+Beu<7{T-@Cou*IKoJ_OY( z)M;i|rlkZago`y%lz&0k{eh6=MZ3@JeQ)DHNirFIzI){Ify>FWYCHFiq}PTe&#ArA zK2pDSOmg;+U)y7Y*5b+Zk5BJo{R5_%j4*w1uJdN&r{KC97jzRMfxE7u&JI#}h7rin zM|EN`L&2W|z#E_gzSP)mIe5#+!_gDx&dp|T?xB?V|Ge4jx4he5Z~R_3eti7w6@~~6 z0s&tjIH9Z=Oi7_)PzNU`_x;sfpPAY{#ESxpii*_=nF+_-YTsBCCX`NvF|A)zvS?Do@jcKaj3S#337m30* z1P=05|BF;XnsJ>J`nTDz2Fzm&{-ADWs;|0bb+K@-hIfxh;IiYXDsVfH5e!MTh=jP) zf0itTqwUmw+zaSX0^?|eA_$_lQ>Z3eM>%!Tvq#mR zWp?G01I!mVna_Nla{&LyoI>LzW`+YKIxILsQ4ZQM66SArB*KDXN0NE&0$rTBz=~eq zbDeadX0}xq3|STD0}J1$+Q$U>6tkGdN5Wu@J}21^3tKoTEWm&(EIeDggrqu5%Q>0bz7?n_#7`)=rsHl=c?W5OJ4iM5(Duagri5J{_#8hr&MI1w=ci zka9&jBg|J+u^-$GVrg!#(_ZAGI_;nXj86TuI8AsqI<8G|qI6xGV)dL#gQ7$EeD9NY zX7a(Qj5!tgiWFr9?sI$2N8?%td|^Q+%8?a(iShzc=m=yGDhOGz zfHTAh8rk~+EQf18fFeHzxsYf*Qx46J_hnRDZD+BliecANWJgEtH62sLy&qygN?LMhO2P$r4EBRKt}ceauP&|4FNDpI7E4x91$kv zsC6P4!eOQIYGN}z#Vq)s=<`a)bp<5#abO}RfWo4JH-=+_xIcz*)V{26#^s$ITSX~fmJW+ooHg`P$P80PEforA-Q#pnJEs($r@?Sio zO;jC0+iX}P`w%eTi%q{#K+kAAI7nTr8w5>c19c`Xu?Ql^0imaw$OQb2?VA_{E;~{q zv)Sbar~nK2-qV&4j3$CYpQck4jB79sAA-KM6Ao;SZ{&HGV_x68)osqeMNj;|p1-F= zaAm&d2nq`gnF;il$Yh(SjO)booyPY##puJ=Sr4GPN|uG|OXY{fI=6ay`s32{UYED*?%t*^g}A`=_L@HO-nZ5u{e2;3?AMwddNc{vZ0AP0OEP@ z!m210S7#=bvnE$@|NJG%1EXTIb@NVVCl%$Xtx7jk8AC~n|()i;S9&;dn@<(QLAXTVgqS^hgGXK_(05H-u zF*<3R;;7rB_W8AMnPGz0zqy_@(q^k}v4DB^5#O3r-&dsksl`>^-yGxi@{|X_|MJFh zvonuHpKId$><}dZ&W!pCY82xh(g=_7?^zV2z@#$^Y^EdvK8DG9j-XAHNTu=52Q3K1 zwMAqBdHFWLV;vy*)nwqrGJyO%9FS?#EBo((iH>1FHfCCTzgb2@tgf>t)A&P%`-qGb z{-af)L=%Zse&V!u<(%~KWC6W7u0rE7Czw$QB!{vpIGa%3o?t$}I)7qig#V*adZOq8 zCenn01tqhAVnf)vEi1i^C4wP)Z|?+*EVPYvYUFL$l<-~+Q``)fwJv1%DS;GhIx1wla0}P8r~N+}uH=AZ z54N!BVDcMKX>RIN9JtVUKw@ZOK?0{kRUvoe+5*>O@J<#LsL^s5=$lmV8jT{Qx;?!| z1$qjaeCb@VJwmEJs3Af&4UM};NrI94WzTFKW;&LiFlF8tZvdxS(gB;hohL*Kyf^G+ z%9;{2Az>3!ZlttNcCJw!vXYo4bFdahWPrUeLn@XR@*I%Xltx>UjH zJkZeBI?Q`QXxJ(l`L_m!{S25RgSgeKQ_dXWYB3TN?vD3I zcSHjEDr7eQ3rr9hsEkP@p4G6>*P8>YZFQvZj@%A@vemR9+O-A0jG8@kK4daTx)?GW zL3E1J0uaoXu%n5btbgf~@*Y<7^=!DbiXSYwcE#|6g``jPh04FUYx7TeM4A_ep3*(e zab>xkygRD#L3Izn{&~JMW0YMGXjdqNcbu(Yr&V=`GOgZUOYx>f;|{sSpnq(3RW)Wgz8fyy>fg5F0W+j*%VTJ31+@tBi=i{VNhOF=mjD4 zYY1J0WJV&gYTOtj;0VM9MQWYiy0`8d#RkR(CR`o(rPC7-czP@-ia&oQ z*(JS6M*b@Kd5TatSNhfR$=bTR;kV1zADQeFRc1punBz{uOt2`;(eX`uTOtVQRicAf zR$y0DcK6=c(M5l_6y%tf%$~$by_qtos&G~H1aZelu?7in5{6dh*?UMV5l%dufqE0^ z5TRi8=kYpL0T|cq3|!~2>z_t{UrvOMNXRIKs0TkxVP}mbFA{LZ>7lEt~+m(}c4AIoao>7Ynk4(#fuIA-1S7EOgT1n-3lu+vkTD2V{rf2S^GfAr4;n zHropuDrixV`H7rNK=YGR;;`PC)kU`m;CiI*TZERAagf|}AtgUc{mUa@TZ<~*zCh&z zI0*>Zw{ZDHkc}BRWAbi6T|&a$%TnOFk0npc%LL5UC%;hJd2y_@3B&5AQ7DtA`kvHE zFZ}8J;7~PZz&R*8lmA!aY|vmkVUze?IV@Zk7_veyHWc7Mbb{tV{>HzCedm-q(}fWy ztqg$^Zv9|u0d(w}#wLGWgyulNipY$1w3dOB3(k`7-SV{!f}U|Z;cqyh5S>yW5^J;$ zidW0q(jl7;Xxk}(w^IgkNSF`maoEZysb}A6z_(M=NP44|#@niQ+_X<40Yn^O01`Va zj@8&+w|hsI6yA?W{n?+=r)|1^g_}hRyq(m#B^2_l*L>8|CB?uO8PVZv9U0l5}2DXcKl87!o+A2lulBmRsJ26b|bk z4O42zBe_^I$bnK3&!$H{WBwuIX89N%KFUdlOfjH~AQMN9ug>=lL7K425<;dv1(&YF zRZM$>I}|M+B|N3Dz4J=D@sYJn{8v74nn$9)(w3{;SLkll&$ru1r*`Sltf39~jFp)g zaUZQI-zwn*g)iOPw*D6Sm1(y2EC?1gUQj92!1GcH>E+PPzmI|ovgkxGCBzTl&dnjy z?U7)ZO6rQQkQfd#qRr0(G}vIQVR@Y+fRiYU`Hp97SIWhNDa*@SX3K%wG)_|8(3y!g zIyu9jYQLp(z4=lmvthe9R?5^^uG#eC9+vJU0)CuOP?k{O{}11W4Ce;AC& zK+MqL8+`)r9bSMz@snJU)d6iL$e~Bv%9Wf6Q|p}Pbt-M``C(xzth#*e%w`nap&e(~ zh^1^r;n5{70GBoQ0;U<2c|hu_X{kkjd(59%^S+cX8P~uHvJ0djd)&bn-+Uj62cMao z?U!9yrB41K`}pAlQ%SM?zl_DJ)A+$H7=s!ooC~WOeZOm>nQM&?Ojw^%)%0^P8cgcG zJMG4riFymT*82CqX=&Sk!0uN`Y~EgTFNu;{yg`^B&`X0RPVOui6TE-Qge(P5V3aX_ zZe{8GH>L7_t2tv<%HPvI-aoVV){XM_3>{Z?Yu^80YAZr{nm7F*?T$h{j#dvIEksb} zY}(5HZ7HjokPhtK=x#nFJ9hhc9DS+ZRHC+XBYq*5LT0)-!s0!b;j-X*&d0em4O{lzOhBe8a*VL;JBd zn4`LB>n7d*@l#`-tNzI6!@!6I!=GMvwFrWb<}65WNR^BLZ5~^HBf=ZkUsRp7w0%nA=sXupAl%9AUN;so?*arz5kL#ZZY_WlWi@&>3 z?z46&C;F3K36>!zoA|T;uM43IGS@c>fXfUE#9T`bg`D!^+&6sxD2YW@96pD^vHcbl z=R=JEnAs?bNe9am5{@7?1iP>Pe4X8|a6!#>T0zoraQZ!6wVMau3*z#Tqv=oV04_&8 zE&8HWBj<9<(krEIJ>$JL9u?%AfNX)d2O;&}En)*p7!yi6tr@b<&kDAOy@}cEUK*NK z`fZE{0|49e%qDUU@2|bJ*Rk{9WX{!upxeO<@K;|?>Kr<$TZ{{R6Ln!t5@XZ-Ex2Hf zOO8=cw#(h~_i!dK5ghcwzPc-T+%=rvL^^4bQ#U&qjg+;eQlv)f-NMva@D!(bKW`dh-(M&OFv6JB(6gmz6gDiS{qq09*Y zY{lU{t{x00uvDx~GyC=|{P4>=lruVDnRJMeQ(y$p^eq_Ep)Nq;qK5fjy1L!@hVd&9 zXHH`zea1=H@Q&m<_e;hvn6JzefTYQInmLfJDV7+GW0?IgpxuKs~S2nc^9lxz~NN425M*~JXYAmTK$#Wzu9fp~d^Gah8a~x_4oLS>o<~(8c zv_emOELq39KXIzVMv~>>p5vVcxLt!bs%+3tC77X?$+vj*K2Q@vXG>S1C9*pyB=8~C zD(oCVGXB}>bo`vriwo&cL)@A0;9|qoDHy{V3P799pa6SG!z^HA4b)&gU?nJsbs^qo zvU@4Sn6*%KVD7DAjIkL!G4AvwF(CU#tb{n{U4)PezPa$fGOGZ@vEw%MairkMjd*-p zn^PXXo4i3d!Bk@BJr0#}^T9aIFcTEo42Tv83`@Y7va5n^q>7vmgDjGjnM`n-Kd7)6 z5bCzYFcC1&CMlHwQM2I~6}SZx=% z^Gm39!dIA6Er?Vk0#WpCL4P4#EABVZwfpS10GV_RszTCLMqxp+ z0+>yxNs?`H;V5XzZ~UkMF%gq3INHmbLFE2_|Au)*B*Sr?BFda>la|6EJTVaoyHJtH ze+no-HvlCke&U#`tzSjWMIpeI0bTVilF&N3ugz161I{^ZE-KqX9ByUBwn5{$d$4ia z14q}HF@+s$^pb>3m9Pe3NXFkTXmT0x?SBqnaxVyt$& ziZIG;t_~w;U&06*P01U~VlHwu^qYMPyLV%Di?T}5&#{HSTavc)`Z!AP0Ab!*|8sMZ z4xRi28dhWRKK%ksytFL`n369Ep6#_rX2Kv!^ppdW0$-kr{`|q!Wj0QE7?EEwH|}0B zlB&sn0LH{{Tr!fY zka5GPyj3+~TOYlS)_qe>y+eSwwDo=aNNejmiCrqJ?b}7(%tHz`1u)hW7QiH<_ox#Q zmwVV~`%!e^rs zbxv0*l}ZxAnduT?kT%!Th2$!^SYl((Os9;bCPFNBN=Pm?7i;5fcc+A0EU~R^t+i7^ zEZ(tpH`aQ8U+w4j`^P`r+}tvAUa#}GxIZ9?Zb{=sO&BGNd*+w(tmYalZR?7IDG;Nq zv{E}O88xlJpswFBeM>kQY^47hS&h_)jaW`$B%W5_>_G71shS|a$s#8M?ojgD%q4p> zc=1hpPF^#xi<;|7w#>AT{A_!*4zP{v#K~4DNooNVxGz%D03r2N2e)1=o@JN+51zJ> z^UC{lQ4di}R1pph0>sfa|A=IE3(HHi>b*3UxQ>dm99m?wla@-Q*d-K62LtXFJDhi? z`3_^4Er(DV&eD(+iy2;0Dtsk=lveC-z7MzH5Uwt1B@Cqz7!NSUgiIl*P?)MJD6dfv zCKmr& zs>T?2VE6=Hjo)Yf-oo>nlpQ)!oBl1l;;s?mbxNMrj()<^(;|{QLHTGij{=Pdvkuo^ z>S!~L#Iu3pIC&B^KzIdKiJO7KkA>FFJT59n<=!l_+J%!2bzf=?&-$%asY}h7otJ+q z;!#w6?A|d}b^6TTxJ_2I{RkfU3JlLoh<;8}^t=$d*trEGJu@xi3ZZyNeBVfvdpGLR zqa9vWORRej&z7bW3769NP4I>*w+h$|dgWa^hm`;sC*=q{bhZ*XS4ILdW8IrGt;$*U zc^fG;$i^JLjff(VIgZmMMerH7)H?^J9~-CWyzJ3tY|Kqh+iE$fTXTKpCviC)M|O@V zE;5Dv$zGD3YY`+Vjz1rjijv*Fi6H7dwRN0bO|+c=M0w`5fcbntm{(?R0bkXDh&d?^ zsjiXnsWY$VpR0}>tms;iJ#@j_PgU9BO+`j%5Y6ajI(N)@pw!!>FQ?d-7vG>YddaDW zKwkJm;vX!^TINtk`ewj!{*a9s%Y0!Z9cPhdT(Z<~66&I7le>Fabj%COD<9WNLXbgZ+6Sm<-^pM4`uwbH-z zA`q8GHT@5$Lei_4;LpbP8U_)lU{b`aiOqBk?OkB09MQ<6qX_UWeROSV10%DP0cBHw z=LJVj7VVKi7XGA1iJcCuZgD_J1t3C#9DL`GD+Fttb5?=BWcmWmlw&g19@oNAT)3GiQhLZ6UJ| ztEawf(4_6MDaU+!=;RiVmn3p1-n37(g;zK^;(^noNp^cSAK9ci?3mXV+2iCmEP;e* zFnAqZ{}pH(l}85ddws!#_)$bwGrljEFngfBS!R}>XUgEZw=B;dBjHOZ6+Uz{1!O7Z ztXIZpyoo)6vW<4vhCxfMFQ7DSCd9}2+o(C(B@kOX*rsgI!TJ&YiTHt^Jzep+7my1kHhh&9+DvQ#-}!JDvubl`{v`QmgS|1Ry0Y5KYSPdnSpRIf`X^S^MC_J)JkB{r?g&P3t><~WPKk-<%40+f+WF_0TLz2V%_+^vo2eUBbr|{a@)R_fN3(tSZ~^zU1NSmKu$4?9A6UTb z;{#31J_xU6u=Cey;_;2j6BdRU@w9-==mb|*_h7YBiM^j@rI{!qX%#7{{4$IkXm!t> z4;f*?zkK6m5NrEC>WLQwr^&hfT4gBguc7N;x3@Bwb8c3)a7rUx3l-kVXs)7J*~4`l zni#_p7FiYRE)b{Kgrm_Vu>XdYr_cfh98CDKt~O=1ZS+M8dOifB1)5I_R`v=djELFa?2zp9&S>8C=^-v4Z}d9+#w zRUsNO(-d1lW}?`9a(+~cOy3Hlds@J`MtPZA*7Ay6h!g$f$0qF}a;+)8hg`E}OqGxd z(l%j+8JJ>x(2gc-&)m&;PGYc5n9cil2*JExn~(=$|E81pTS_iKan+*x&HzqqMSnV{ zSb~>eO3(Fd$}DVli`J7hZoYal!|U4HrX<3HMSdpbJi3@R(AB73D2h3RqY`8_>bGd8 z+C^Y8h#r5W>;{wA8-8l`gsDl>K%IiT^^~zc{IEL69{gSG@neBR9RzP7dyLg|jHMH75?6xC0L`5Jpf1L@c}k@9 zCYv&52X?DvSbTQX>j|1bGOI;UTG6IFEynFwDQ6>%sgAPwup*gG&`Sl`x-g}8fDANp zKi^}xDQlvIeBu)g5C0*qfqmM|0k#Wlv2CM+Q9TSn9lJ>bSN48Vp~Q(Nf!)Jo(RsAD znvIyMqCXEd4);HXuMDqgo-@!Z9*@~vmo z?cTTjKcmazdiN)8TLh)j&p8$t#ZT-7sVnC+gfb({z2k|<=x*66^`&v+a6 z$)5Me(-O~|^Q#n+S3EgCV*mFY9PxVxH02GEKBR^o$g_!CI8K3IPLUO{B!;_W>B3-z znU1$fCUs(eFY7!Z)oEO<$ezMCw5Bkv6o-zEb^kNo$~_PmRRM)t=Dzx5h<&Q5OT#Rv z+yB5r6Jy{Uvl4j9ojyh=c;hK+$oek~$PrJI(mX>^*?FW(?{jEM(&ENaB*l0#@fNL= zqt;Vw0RZ`ePDu7LDc$Kkt3RolPXF6@E}p#!4+L^sK5jT`q+bIr7D#~{VWcvEfsEAz!+s*GONqj*}8{)s{bO!B^fcmsW!- z6<$gc0kLoiu^o9~^c54A{p`g&fh9*z;`#jMDsEg`4Y)JguJ8SCw>cJuJ!g08 zmV{`DPiP-NRM=%Eu}Uk~Qj01%2%X!(t0sNjC=6D2Ts9G_x~gwc%wi@!O*;tV?ZqcW z+pgJvykh3sp#pOsQUiw4-iyW~=>$j4e!ioPy1m&z4xN!^NMqC*b#FT)FQ?Q`jv+};>2h@L15iG9VzL3HyrIm+~Jp~52I zjJ*1jnfo$~!3RIS+ffWYoA3XJy8(%hLoRjYa9!5>%#5CL+UGedtsuv|{O;#rTjt!^ zlkZGk2@^Rsc#o6XNZ)w{cV=4U^q7^EbQ~j5xzv0)nChl6l>>ta=0LZBuJIn5B+HjO z*?Bo~;a05V7Epvuyou*1h|BYGeoRZLgp#RKR~ekfVZQwN5kmjOjl|c9u~Sr>h-z+} z^_f$n#*MrQE5eEsbcbpd-muP@-b$HuWXg3)(}CMdyu3ulIB)~Q7vG2A@7 z0g=+w3tSx1&<#VNflC2CviBCftSI6PnGc3;otRSN7$I2&3sjSQf0S&sLDLIK?<$Ek zPv?88>_iL>tB8TZcAXRc70*0crKqVJIPX0`NvuNu5UWj4rIQ0}g0r4nWnZ&`m;+o7 z(zL_m9(gs^5RTeCOp0vI`-IP@HER%;4eTb7fh-{I(rn{(3%T}2MD}xkk)>G1LwZxH zbBdoSBcEAc^so3iYO9sC|?zu~8GvJ}ht4_5sV+%Usd>(__Qhot+0xD5l1 z9SQP3hUfGUtB9jo2#i^7Lz)PhJ^v+8g95)Puof!_$XaMTogLpPr{$+8D_l+2(vsIN4s*+^H-flCQ4Oh_2h9c`4*$); zD7pQ+tvTzToI;w(v?#$%4`H1+YgIJxMeg+*J3UIVWgA6n7WZn%^%tGO)87Nz@I;)4 zH2N%Dk-T&hr7xvHj?yQqrKN+K_ zczWnwx#NpMCmH^{xb?uE#ht~pG)!47Qk?R=&WwWil7ZOb8b8_Ta1hwFw!R0LRD?em+o>m*R>T4!lmYI9l((9;z6yKzF7c6~&&EISzM}vp zqa?QkRh8t_2YTJgp~?)vgO(()s{KqX~C^+zi>t+ zhEG-Z<0!wHU_o3v=oS8UH+q^UKfKBP&IUhCy2&;(_B`$0(hIsEnMPz!;K@EuXDei0 z&=T-BWiKhJT=bHCJ*FZxy_*AjD-r;2}?*vKv+~*ft0B zZlV&>7pOp+9_lAWP0zss*f>KfHDS%+Bah!yhQ0A={1AIxd$B4$up@!lsDiA-FWzYQ z=*|-Z;wP)|tW6nt2J_X0y2%eh9&buomxvye1$oqno{t0b+YCFOq>rMOSC(ijM5bZ9 z4{v+vG&Z(J4W1j z3~kB}bht?<;t-PtH#OvhZeVi#ft1^DUWM#ET^OD9Zc1k(Xy@T~9crs9=!&EVsUb^( zPIcMA>DtpnMo3y-Pg(tj;L)HRLq}93E~&se8Hi4P0zjC^>JvSWI?CR%Qg*zG_BTR3HxCuaeu&7y(hCV zr1Q_YI4XB11LrbnwiRjoX}`1K2Rt2Z;2yh_7I}JEV0Py{ATX^rh_*L60-xU`jErv@ z>%C~S?mzanev@exzY=0Yy{5ki4N%<7Ok6m*{@EXgZZd*`CG*(gtH zrI}53v?NzCX_g}ai_`0AOo8TtgD+*Lo_@yLvQ{%igR);gyKzcpqt071=wvh1M4i7< zxBgE3D!`jZb<1pG$KJmkAJ;Foy#XJ^z}LeT{F#9?Csu+0Hj(1EWWBYKj&L9JmDu|f zUWws=YrVhh8jb~c8Qs~gAn#{Wh~qXgY29!;=C6xA6SC_6SU$@Mf;LA^SwG>+h_$CO zwui?z`@gdlY8Fq*cg}fxrr0OTy~xUw&3ABgVEjk-$ER4jKxHB$d~zeVqINf)I`E}h zaJci!YNi_kh=6F7OL)}pE2nc3JBwf^>0S4vX0QV$piaOWCLY#}P1VEo`eJ(xG!Ops z)9MmLeo!w>Ef|a)yBsYxNN#<9vm1ihO!z%NGS{~;^4@@3e&}B!4yxY`j zNPIS#nC`G4REKwCllJgj4e^63XZXxJN60FOTOr`R8xln|NQ)% z>tO{#16mMM1?9(7JUaF=HQBjhvUcb3lKY-k5;D`yDsn(SE6qxY+IGoKm4Yro%#+hB zxP80$@8NN-WtOLpWb|8_=IB&S5n~|1NwR`8RA$!i*d?9x707)O3MBk3pMlOt8Wq1jM z`5X{Fo!4k-9&HdUug;0K6suX7OB|lS;b8(kqbW`;y*mK6=S|x-*gQ6Bf*l{(5V7%c zXN%+0G^gSj^8tq1?m{rO2SuyW_tI{E-iaN|iWDoaga=;q3hvY-! zT*aN8GAlX2wE+*-c-Y9VSUem(E+kz+`=7lVFQk>;TYX~X<45{buAUCDrai(`@b&P< zDYwHLvlH_CJCA3xOAp;7tEo?Bb>s!tt?JWXb=nkAjg8;qXBc5n6D&>d0{dgP zUXU0zG4N3-xVqy&)sOrD_rbG1wh2GJFm8xQwLdQ>S@NrD5<;TChkjB;M5hIY>>pqi z>);G57cVmL=J{)=H38OYwPH8gm{}kREg9#ZWOQC0TSkS2>2Rin5 z{9V!>GrD9a*Vl0T>W6wEcb|cBERjG^DLA$rq9UO@Mm?c^B;&uivZp(zxiq6DC@&)L zNkif85v8Xi(a7Lqo%$1sDp(hXx6{er&O@HyviIQhubK(!$Dx1&B?=FF-&2M~k_p~Z z=bDcD{<^9CIS7BA-B8go9iSn7=f&4w`agh@XT|`3kD1dy`f}qjZuL4ng)9PI_IBU} zF9ObCB}($F?QUVtiU)|B4F1n#K&qaMK9iQQYH-v?mkgJVHahA_54xU?8n^6EO%_+I zJY0g(-+*Lzwcg9k#(#P$x!HCBxpYZ^Pj3>w-ZlZrLtVP<&_c_4O)`x9Qv~G4MH|yt ziVm)LvebO@Mz3SF=<|)4EjE!mHwU6Z>~-f>Upc;V;xYHV<-dHBe^w*%e!X&7x-ad2 ze|h#hM}}M;jI$2;SFzv|+~LHMGnw-clY$2|s%&HF@g};7tm-{(53`~#M$^+;n{#uO z=@9uOVfE?W-0J^g?LkwRp#G4HW}CmV{NwxQ<80e^W0*~&i(}k2=c4rCqj9Akhye#r z&0cZTM|ym=)6g?|;YISRH~*V?UNrQ{jn`?cD+F(Go!E$Y(%o9LYD5&(B=Y%t(OIh= zCPl-o8wiJ=M!Q*3-(5)D_xMVh7*AEN*}bSK_x|kTIMf6BU5$*?&b%4@6qDq;DYAWy zO=Kv;<1Rz{{;2;d@#4!#+wB-jWM}A}ik@sntd;SKXvRVq|4&mqL*(@cNnx!_G`Sf+ zjKk`f81fbg7=z5z5C=C$yZCCdpq=_xE43q(Z4GWVqm`N>=Cce`8nuXy2c{DRkim2b zry7q&kyGfB9zO$mXUL)}T3vsVr4dWb`+6iRP>>`kYzRE(Os^8##E23=q}F4fN*N5=rb)&&GSY~Pc?2~ zBr=l*6dU8MBO91qe0b&miJx1*H}79#c_k#AG98GuhVLGHZJ5WwfC-5-m81Y`4MlGa+rUi>4HA)6dB%MOo|6f6u?j{@~80w-*Paay#i)mq=SzISXfS*l} z@iUN#m|i2JQjwO!493__^6R5PKXt>-X8Hl_YNo$|-5E+P?CGM*xX;=VtTZKX8_ zAUB{`J%A}Qk0(u8IUq7E-}g?39ddNhHZ$WR0 zSArgC17W@?ww3s_GE1SD4Sx4JFz7CiT!gfpWI9S*0Ux0R9@0#jpG3M}zj}Lt%V2ZJ znTTr?l^1q9%o_ng=N7~E3}q;{y~Z{7Xl1vIVF%g>#5%^2hYDzS9EhnP={(ZWsH_LG zw^GhkX#dr8={Q2!r92C`&hnUZ?t6^Y-EP^Uc|X3Bk?TzfyLqW8y8;WlnfQ}rTEGxZ zJAGluIvB7SF@(3*nz%8<(Uwz5{n`a7m1Ty9F_ z$i*mbBsl{mq~k$nE4t5madZpoW~I-tB2HcLCoqv%*AfjVV#wWwHqx=tOx9Q#0z5Zb zL9TgdkaE4z(Il~F*uNc(^&-c{DuUseB5*Be0%alY-tLKZMx8-HhJ+L`XVZ(4-pCDC z+W#))2O?Y3;%F(zaBYU+QT@IL51V# z29cI;C-b;OYfq!MEi%&0EDzqECvico5^+mb!Qq&v(Mic(Md0gCf{EZF26CMeFOqmN z>i4(bPF^h2Y~p1SLM*R7i8bmO&NU~Jk(13~tW!<&NR#MWlDWEFvZOs((u!%ezf< z1bO8D*H|DqG?`+%Ag)21vsImBQmW?;;kDweC!+3J@Oqo%`3)P@iyzBEL zl|45g*u#wJ< z0UX+bVtFtP^Mp8Z4DBt$kq8CNrx7RE8*sL`{b$HGI;{-WL~%TG)Raz7YN+3_qV$H* zS+4JV4rL%Fo1oy)8>9_}tt0+qW>~k; zLC4>Gb8%y z%p#OEM^x9xQR!A@Qf%ijN4&pFFZMVvXgQj4j^KgnB1MoJhU4Eyjik+kX3i3Y#(!rK zDhX0+&%3uWnCT{ym-2Zi3@LaHjM3sPn0qnajL#D0(C^#qEs|p92((Lp>D7dRLRB(V zY$3FCDxY#&+#^{}a~vCp;s{szb8vD)X`(UaEjcbqRAazj*c{h%eEuw;H=A77$;ya@ zbfv{bgZHFInt48gl_ir(a|tXwb6-))>?M1QAfGb?zieA%_HRF2hDBexAD{gB?4v&} ziJCp=(8Xn6;Ozr<`fpL}fjcige#z54YxlS1t}Uqk@a?|SKff9IK6GatM{T1p$GA0g zXDgc4L?}C{23kSuh+T1lx|g8{vC)pP+r}J%k_;K3iP#2oQjdw%1TiDac9%X@v1Xpp zG_0e>BBGB<;)(Z8zet~eRzPsl(pR`i)TP`(VhF~;c#g(9Shu5@9eiLfvxlQoSp}dk zJ;8o_GRSLanvh(lahO7@lhCbJbr3sRZ!7Kqx7ExxkgW(y*2>g`y1Bobit6l^ z1j5J)F!+OUF(J_#vw`cc|7SJ|F6QLGD5z?t!>mZtzpbtf#2W(I95NXtz5<U!&kd`}GRxX4Qm0 zzbO=y^(@IN8(9f2yUZ%GWH(qltFn#tVq~|*neq0l*c{cdV-?cmlj~4?F92Go18V+= zj$$`@a9feXTrHL_(2QmCaGf4Twxa8XKwocSa(ECrB12$Um?WEBy}>;y071k;Tb8S!bIp zlvT7SzN*~T+<&r8=oKIRZPZWcJ4|tl$hjsihdjScz$f8A8_3x`&Emdk=E3i7aQnQK z^SHg<$}Ov}1M%Bp7~F&9`q7O>Zg&m+0d{&TBjNF(75Gx3nJU`+rlYEhdtA$qXOHIZ z4uYLE%9r3qDo=oiR@nj`MtU3k(6>PcJMIoDVV%0gl`*{fb{rQvc2Cz5kYIQ=NG!rf z^q`(PXzxBpPBz6el4w($jbi#b|IOfW!eHR41TAc$v7a2YC?Fnixt&wvFrjaEEu&0N z7je;4jMX;?cUOsKPNRmfT^_NeVIrJI=~bESK`wD@l~DvmL$}@=rruY*6i+*2&*Y@(_Ib8wW5k@C6l#>C2ZPHWL@nKbnv69ha;M^&!*QDve2(8jWUG$^b9MAM&U57+r1s5%3Fdzv z!-C16G@y@xd9VZT<&iv{NIAugXL?6#l7e*Crk5xl$q$S=towd%Q|izr9Vgb0lwNzA z5!9rtwX3l#F6`CNT6jeXW~R_N$+%$V?Wj}2km84H@D0P!mY3@ZaK>5L?#%*I``Hv*kV3&htW55&!2Yex>R z!!J{)&S4J+n=p9^X9&wg-Tp=6S9>Ei_*Vq89b&0CgwCnOrUTJdHJS)$fWYFx1JVWy zD!Zn&S>albJMep1d#iYgd|d^GkRzOiB7W_)Ld~lP|H$U5i&kp#)deA&t@4p1N`V8_ z!~L6ciG&rSi3wRygh8WLREc6KI2x{nghuVa2~|y)96-jQ1E1)rnYDVVma-aBSKMcb zsbu&x3rr3D<^HitPIl^R)hX%t9CXQ5$2n|3dTKVs)-mx`t;i}{plB0i5OZ-{60CTt zHL@8${(Z7oX#*KO==%#uTguJGkDi2|HCSBQ1upHw1=NSM<3E+A^CF`c1BerGE;nK|mOxu>E z27kBh^j)(+arQlKHPBqRC73?O^uW-37Z{S~CD=VIpV}M2yPOEMigqiyU}@?Kkr&lx z7}SIk(ZIrVk>0STW;J)A;@=RUYX%-Ss1PmG&A#e>!^WasGH}S(>(EEL_ZWXLo^ZKy zJzH6QTkzu>sxr)8JTWbMc+oD;Njp+soNG*T$*yQGJepmDUmdeI z@`YbvC@}IijvoGvjcVB(1|3T;Z75j0SHUYcex2a&X@#(3&(kJGovywC(k1YlZ;D|j z;Q8|{sym(JQ05&yc;!rSWlDU~ZL4s>yX%xBlE5@uy?{s6@)yke(r_mrejIVwI0mz%1sB> zR5Hhu)}U%*iaS24s{vjI;IEMDcP-<<2I&l95j1fq3JI!8PW{8RLQOvD@eU zSlBp*N`6Xe$qY5FUOFpk$RyQkEyZ9SVa}4#-ge@EH8s8wYGXdi)^H{{Bd|Vv(SLG z0h?VDxvExY-uP>JEVVTHV%q{brvv;bHy|CR_u*?eUXTX84NWOfVDq*b za$f(Yzzi;#=fG;hc`7!~@e@gh4Dj{ist--w%7{T{ASQ?EQ}+YeyRG3XPxmUY!!L z{T>A5{?2byPrj>i%6R>v^e40-#yWb`_Qe!9hBJ+D{0^@6Z`P;5o$a|Hcb02tj#2+t zo8#Yl;vfN=c~M}s4%j}#`@;T4lx&QE++Gr2vcbaCC^Q_fAgHMfXroOtV_kIxK? z)$6c^h1keYoABMTSiaAB6^F-r$%@W33vQfRQ>~`)i|E8L_D`Z#RVUCxKZJI@9zftv z`^f4QP|~2Np&8#xq%#j}y6UMkh@7XkBi)%r1cX)>O_^9S7yEC) zhrF!d#RwjB%}^_`P4!}meb!m?nnr%`-h|Q>!{cVHSnBp@4&v$|api!piCfITG)|I7nRZ4T)oho+gE zaG9EuBps}`S9Qo-i*gJNkdigZwjxB2Bz-O+5f>*}OA~ns&H;^`(73s7|C{pUyH6i} z{PeyA)IaJad!m|Othpe>R*iJFY0HD8zuz7ss@ijHTtSzb0`It6^uDJLM`;5*U4+19 z3yRM0A;OBL3o)lNqt;vATafdu5*Xawk5SHPgSd@{y3P-7y(z+HO3?bl4?QBF$f?nz zZ;DAp{ko!R)SLfKLyQU5yt^NgJ8XOW+S7?&PFGjkjk3(1zIIqb<*2WZ-aMIa=eM>5 zjjSEH(fI~>ZNMivf?c)QAx;^2(V_{+ef|57F}DK8IH$x9D=9&>o~|FpS)6dy{FzUO z=I_&sjoH0ET|`%s2b0fi-4=&8b9|$J8&HXy@{QF!gzSPBNFZdw#)m7{aoLEw55DiE zyu_p9Bf+lr=(CH)mOq4y^%JKYE5%=P;cRKZm7=F(Vv`QN2P1BLzh{#O-?IwG%j4?J z{|vp0m^k1tKs*>yH+o>$@%6=YNbnbSedb;2E){cBR&s45eopcr zuJr1J%!$Z@6Hy%vnQ0XzNv}%q5H2g4lc^fMn#Na_2K8`=8h_4FIoB6DO%=()Jy z1@pIj{DV}wo+=yrgRU5l&(q>|FAFjG4Bl0~3+z2Kqu|<#Kep|@I3@qrQ_pk1wSOQk zP4m#ewsqMmJ)yAT0PwIGCGFo>+aT;Fg~>_|AMoJ$_j*w~p8>%^>SU#Y6I7k#LfpsK z{gM$Cp8oc1X3^U559PGBOVWu?pHMo{sKOUcRt>`g+rHMBt!?A1n?^k96>pMFpAkKz ziJJX3dfpDdX+;m_bSBZm?e{NdPB&{dx&#X?M}Ec-8(@&!N=P6>F)~`33_*+y$wanhK)I{MI%eTS|4?0&;Iq5u_-@) zbi{vK3OjHzB4d1=yI4?WU-9C_-t(V4KNxkv#AIGy{NpJE+NX=vRo&5< znFT`Y)K{~qNm=*qzepN)Yw{5T)UA)kE@Zk zDb$yJ+OgzY$I`bB&)+StcePSv>uUzW15rDvqWAGi8S*9NbQRE7W$#Hhvk``c%jAZ5 zdQXn3Nfv6DY&P>QN?9Z^o!*?|vJN#G(&_E3t}9RikwX`^y3RzY20Ty^=krW#)(*3z zRX#IdZmr(j-)WVZ3>mirTD591(^Luci%WM10DK5dXho4}L$R zPS%)uK|2v<)%rK$$yyaZ$Jh6o_`KGcnN8u4V2w7HpB3l#PF$yrVP?I3L7+-9lis0s zxhk7Lq|l{EwObYjvF802N`uOXUr%xYPbrh|2>e#GVmq{7m)*nk3d^%+` zIo4dxd#Q2nl?|nXB9v{SVGJ{))+b5&IvRFvW??=`WFgy!w|7V8!8nzJrL!V&lVv7$ zrnF6Dz9~Tl6k4bOsVU1$IGQB@?Dk@?V=MbnZ`*3AloT_4fAKn$a0CjD@<6hsR$1R; zvs5q8=E2dz5OZ+P8g7?SbudWLEz4!eT4fSDpjH;Zdc+ZGR$ePZtb|ii7KrT?bTlPu z0CSD94klgB!@GTeUjEhQO}{6~we$s2k!MBWV{G&>tg<3ZT;%D!>_991*~IT7i+oED zECfjuR_YpA0_df0;7YG?Js~z5lL&Ahwd z^Xz+Tb{x&x*WXC}+4YCUL3}Y@ey#FJZ^}d?!iWrMH;(Zl5hy(V|E8(ix)ONX%gn9j zj7dbg4V$M{s}T`mE1yTPJRh_}Qn!(CVk9A@(mw}nDeJhqaqPeS(u(fJe~#olT2nlG z$AY^jOZ6h7#6z;1#56Uz5d{$LqzrFjbkVB`*_(YqEME6A?F5z<3b2*%e$gLn{9HE>$C6%e< z!ySrivDwW>{&>$9`EVq4kf%v@AdK5ph^w!8qSRVkmQA&? zlV-w3TQ8|5Wo;t&SxCM>&*3)CF2L6GW)2sE#d_49$cUteFA#+~LCU*18{(43_P6GY zdXb#PjaH=uH#SJzb1g8bM^#sHsgN#badc3QKM%k%rAmvySnYB}-qb{(QTrM4VXBXSen!c8D+P8XBlTWKi?Uc53&WB)7;d`(rD4JtikMAu)Vv+q zWAv6q%LDx6<4r0@_h$Nkw0O=($mvA7UEdxMU-0Ffex!}}$4PrH6GDhiDn%K_0OnkJqxZxM3;?+{dS+^Brwq#x@ zr^__gAcGn|@M1wBkAIXJEL_Gmt~JuRAS~4bca1LQMODT;Zg2HYhNVr+HHU zJKJe$Z~Db5U#2KeOE#mrG7QLV!P42~d~l4&W2Ec0MHtX*UR~uJC;xlOfqz1H-_lW> zodbcHrH5GnqxyM5wR{$3=etSQcLz_6usA46k!o|CMls8WoxtRTMboi$tT>z+(X5)V z+0e@Ed9?=O(^WJn+(N_%=P5Z_w;Jl#Eh|J447786<`P>soGN_GTm@OXGbqWAfX+v; z3=~_65=5ejFg;ET%=6E_H?k8}mkEq984LD=&-Y z{2HV$p@!po6(^9>)s>(&F}~zc?B{6P7!UGy!L64cR~FZ$YTOXDV{*y#z&}Q9jf%F+ zGMWNm7&6unrAe`RWuM^79YP6Vc6q`GIEXlKyCEzl?9fEsIojAKR^z9@fv#+aEZV=> zh-~sxm;i7q16k~Bj0GBfU@36qD3{EhE@1(s5{W34)mKv?!xwv}dSiuW?GKA9TW#pS zLH2|0)QTV)H2oz(*M8$IPBf8n;kh(TFeTbI`J~vQ2%6vP>&mImZ6)1M2p?!Q<`K2{ zyX!sruH0j7p?U|*v0M^8)d`iGY*u#?4dx`V$e+Pm3*I(*31WHrTW4UCnXNn>)&xvN+;N9VBwr^dhAt=cB0 z<7pv>_v5iK;%61s)8anC3;Y9wc;3HC7)KB0gn!o}=c4|0RR1}oRCA=cl-qUvCt{{LOS~^FHMWh^r~c6@ zsLk=M!fLblg;$a(@pv7J!>GX$-d`^a<)fHXZnrmmmP?bGh!MN=c#+cHDobUFek`m* zmMn;scFWvZXCNF$0p%aQHAOFT<8(9Bl2QLsY;W68H>=|8o;yHnk}w2f86gyAa*v_n z&ANW?&Oqu=;%=B?O3)Ft?m%R)9%pp|GN-idhtHhMuoA`YCRd?^Kysx?(@Ex{I1RaA z#vdkO6z`w^e}%VH@W1)laKu%SxhJw@%~%h`=?_O=*-KVM0mW`1@oBp+i+IOU-Lh9E z7`$A03B`>kKSuq1I+Tz@EjUhY!tR#k~4Y){c`ou>(26|Mc+~jmT0CGGHA*{o*0S&d-6Z zTIGF+wZ93P6{EmE?Jv*iH~3=>xUXWPjUXeDZ~4GemK4*GMjtCRfNa>v&~h(0RKO5= zMx%*lm_yIx6}(icf6w|_-eaBFMoEYg@!|LPn@k(TU6iXy*YH476K1`n7PMZ$!nQ z&tn~IF%!^73FAx%AXoAz4iBsN@F+8m-x5!;%^b)7tN%)Un;4W44GF0Im&@`}=UZV2q zC6TOi48^p-#Q?3mnVL5IaZ?bN6uW^@v85lE(YOKXbmPliCSFQ_j@;N)#mUsiT}iqe zBG1e;DYIxi(>SNO3QGIGsrFebLnoDfuat**e4VzmFbTGb{SRvCyC6cWya5_rYR=BS z&Wn)?|Lt8^2YA_&V94_Zj`*VRKFmnZfZ4nVCce?~?j7TRd`#7d6Yce6=(8eRc=zSD z=mp~We@ef=rva}lqmP_wZP+oZHB|orW>pd3edIE@n(>qAw=K_?V%mWnZAdZ{*cxCn zBLwkiH`2suBCl6{F9O4c^hGbmZF=LttLJV2MUYW1`CpuxSm&+g4)(^u9`reQ&%qyL z2-4yM-Q`upp%qEYT>c^WY;8C@!pbC0Jg_2H){KCR)VgfSbv?#9RKR_40L-s{t50+9 zJMFr%YPz)I$_g3DFAPTw8U}jo?Toz=_tXT# zMrPv(j=73aO)HDJ98fUee(Yvt>q2{cL;TG49<*jYz+q&ID6e}C^bEeL-z|h$dGze| zZJ$HCf0Q~;%V=VZ(J=LA2N;`nxvy)YJ^NlvQJ5pErbxJ zgph7-33-kTB!mWk zX)gN{BfV9cH%srwvgvv`NAgJ|wxt;yiI_#sf1a7iu%hhy2Z7#_uL;k_XB2W!eUSvG zF@3qjj6zQ;)QEuEF*JHmc>-8xvqWedpnko4wD7;;+l-crgmpF}5gI^iFS0C>=H-Sh z7^&|^KUML7jZNBB*);)1SaUjCZaWD;;O0RaodK?|84QC%0aY*k>uDKvE`Q(*%9rRM4(c&PGU znX-YB94_uK3IwJA{mLH>O@uVS8eH&=uz5E|&LH@O^Q-C!n{$jjETn%X2sp1bO$fvP zGuj@7_G=Oj(6B{y<_!TGCuoT!x3)Vf20=&#>;`I~R~-)*u9EBD+<12s)jGBJta`aF z7olSC->*AtG7DX+Q!HL{^y@oAAULx3gC?@V(R;Q|tX zuDBXaSG%_ITS*gIqYXjkYfkTLa8#o;M0_NpCy2JBA$qL-In47?h^flxzRRNZ!` zKY|XKjz%|3B0L)lt2B5O#Rl}%Pg=TqgU!JTtQus2yrGGm7(O=IYkfAZDe>535nU&; zEUS^W`luusT9)t(T0X0Ae;X*&AQd!nebd&UBx~v@=hiqg;8>|D-x2w!VoI9B65*D* zekbXGr)9;Y{JsMUY3aeE{Aw|BP^t^Ow=GN<3^jA@^qH)nwE$i*_F|uv&@XWXXeobR z()X^40yTE7DZIY-cSp&O`3>N%XwQ_PUZ+8Gpk|^FGia2tgsw(-AgKdsL7fD!nMG-~ zpchITlM*|e>`OLqN5?R0TF@u~PH;ab0I;N=N7%-(qbl%lt2i(~xRlzqT{K-}w!*e( z0y@YPpck2j5jVPz5E2)p_`Z<0-l1VErDZ0?WvD%gEBsNTh(()9K7?^(yRGVSQXV ziVJu^-P@=Nd~caa*sd_M&&DHCQxcC7*hOtFnzG<49E3`zF%i|i+Fy5X?A?LJPE%`({SF?_0t{l)L_x)TFb>lJ|JvDb?i~s58B(LOP&p!cBq*J-k_#{{jTJr&BCwaC2nu! z>_^wF)}Q$5nZL^?`E8;?&A&>4AborhE6A!as49hU*c49{sKqpWs+ZQ?k5tdYmgngL zJ~HLyJGKDCQ1zbjLSqGu7>rvAH|hbJ)z2rayQ`%qV^f__C6@G0l=n?#PR&!}L@?_? z%B*fSDnbaqr?Uz=ro8Bw$+T*<{xy*-@c2?T=7v2URp>;O zulaO1c|k#7%0&&1U(|w=GwpvK`}%#FyynVV_rG$)1`IIy;k>eau}_?6QU_Vf1fEIDeLT1TkF>AhlSygboz*laWbz)aDr0!L{3 z1WIz5qX5<^>Uro9ncIv9b><;yO$NgK3JA!C$dPV~r>K%)E0WKKokK^ap6ugU@)B7#Gy8k%ukMSSkt7PE0%* zmzOAsDfxasoIi(`S}3BJ(y;O=K|7_XuD(7GG?vXv%C?0PWzyX3 zB;Ea7XZu6B^+59Mg%0y`q9^x*dq<4#eBNU$|EzYj%=LA!WedjZ^w?SAw##Vg9I*>u z*@I;2TBFgH+dFwm8a)yWtGGO2)_s~TW5^N8DDAa$d-7)k*g=*U3kIY8D|Tn77Nf0s zTpNd-CFK~o$`7j{T`nl^0~|R9`{rqXiuUNlTPzt7xnGYi#W_jQF@yd zELBjDHGDu#Uf|BEG|B@j65D}e=@znJb2b6SA2+;Hn$slDg7k0|8$xPf+xOk6BO3fXwHJFye}{m%)4 zc}Ott2t!d&`mzqNY;LM;JfqTc?ajEPTIWqST&GvR2)L1><**`uv7`xk)8H=>Yv`}9QERzX+M|&u;U!&36JPSl>X%d zt1ivGN=#V4>X**(d0WwzteNk0niYtYLllo(B#qXAm>Yckq>-PL~a&Hm8u4+}0#_YYU=`yan637|P z+4{guSMTxcS7R$fR}^ZjQcE<7|w0z1- z_Z`caX8~x-ij2baM$dye(BLm4x$=XDw;Y{`oBG!ry%9!g9wAXiO>PjjD;P+$DNKFv z+|+(0Q16BLu_WaOpk;$@+1);Kpb@d3_p@cl+x>QtXM1m#DsjQJ} z6K?kE$YNnH9-n>VLgnz2{cJ-yvhmmNvy0lM?_YQE(6q@L33U;+sHNp1D7fffJM+BC z<9{la==z7psIF8ytmq&N!*8&Bg0%9$oLVgObIZmNaui&^IxtY#3A0VhC$zkfJY(!% zmg{$w6?ZRY(yP-{!I|w~&GF0&bQTDFa7Lx~`=ZrHH&{MrDnRk>Q?)j$Z>ItB$T53L zm%`Kn%c1d>pZIpmpN8eI3}&tSyH_0fK6zpO2;Psj$=3^4lbMfi zWHQOfxT~x&F*$m|lUlb{*6cq^jst=7gnm7XSpO`S7c~3JI7$%tIAZ0OyZH3;V9)Ay zPt$0nq&r&CG?(Xfs`QwTGsV6R$ zldBa+NwvbdKfqih0P_Dyq#!_w{5K96j@18TRqZ{ z$wCpzsuBvKFpW>g5u~3*c>6NdO@7r=4r+_>t9l;0N#=f(fnCzBX|L;gG&bX;@6lL! zLl!hRCLbWQk(fMC??4jvpI16ohX~9=#NZQx4XgMN0(x!)R;ii@r!SWs#{kO@rhdgO zm|We1NB}qgeESRQ1}8yj9#do-4$qry0)$Xw5pm#;ccdO={vIyNg#Z0alWq+5`dtsg zwYNi-*d`II1hV0?o-N5xl&?GSj90t}Z92trnaduvM&Q;HpEZhH#A)szNTqO4X5zDpXBA$gI*NVZ?YBcZxIc-;NUD zCeW@XAh8=}-ykN9T;-{t za!KEL`OT{$#`Zj*?_~l!MMhJk0vQ@1rTA#5l7gTD zodcIYACSZit}3nbm!@d|F?Mchsw}ahpT8p7!c;@*YZ2a5<70yc(JD%h_P;L18~l^T z@pcu4s%1kb=4{B3SPMWHf`1T1p{7ZMAc1Y|9ux_1C;V$R>PBhZg|`CIt0MUCdS~+4 z?od!2e}#2++zx{Gb$i+e&RqL?<9(lzvGn9oOF)S?#ZJz`127D!vZpd&FbM$-aPO=Z zR{?2}jqDZS*gTY>m^hnc?$G6U(0OyWTu;ea8UF5QW=)gI_UB+>Uc%9vFWqO?R&bJ= znc9ZU>6l2vikJejxy&?XC=mgox3Z1X$O^<-2n~sFvJNOihsQ^VcAR=FKK!>_CC6N@ zR*(F`E=@tTyDZ;h`=%CLmNHC-=}AC-P%8*7zQXFWTQK3K&hI;RjX08fEqI~!ZoH5jH`_yPwm&eejg7DOvmk;E~kZoV)==SV3TnjocCqBC*dQ5NyEt)5VOA4X%Oqa74j@kFOb zHa1CgfepJI%KehP-Rf^*EZTPZpIoYRfKv=Qm)1!Z(yk4^LB~?|wd}_)(xJK@AZ3X1Q#cu1 zP@`8INLyP?)0O%YsOKYqpHu@DB@P>;3Sxk(r-bf__8?o99Fs(dsBJ=y88EEo0I3Z)kCFAlx$BO-`gBG;xCgi%{7jGB`q837>qcTk7NQ~-XaPcGLPEQ76u39Q z1WIYXnuzj#(f6qA%vBQnSY$WXEe?Ssu_?ODO!uI2&ws3}j+$C=@KzDp18ATLj41<&g z3RgpcpBv6qFffG}f{nYp0>eXqj3WF1n?t0PTw-MXsg9UyP7bb9A97!nh)>3?o0>F& zN>&#KWuc$m?c7o-MoBex8Th7~@J->u-10#q zb<1ti$_N^hs$zI0F3bhZ^Rx#ZD1~MuHWmAyNn)0Sw7}M-l^=Q&3t@9LUBHuT4PeIe z!(c4`2FY}|2iTsLRz<~xI1Sl7fZf$6sry_@lP%qd%qYa=Tlm&QP`alW@L_+ zngI84@}wO+a1Mhc`)_`(xMoPzO6Md^OTVHQ8?Mjzf8 zkhD$@q-A-ESd*P1p66xdm~d758EKed-p)!6W~Q#KtR1BRzyo^%bk6 zGDc)nvHgL}i_1U87fm{F*(#+)9ru=5fn6T22`AICnj*FS5s@(A_2#V-@*SDr%1*o? zPL+^2na)_5*-wJvEQx-b#;oTb%qw~h7PxS3Ol)+bxu{4bVbQNUIoX5UX=5sPmkR9x zdwrGEAoAmr9Y*oL*I&NpIDTr3+P)d;_K)H?LQ)sM4OBP6l84`tYa6%lP53tJn#tn`{XwVp`Ly$ATJB|#nu8n8ypRZT( zH>N&u&S6disYlrYM=)M$pg+7VV-Od}LG35@^PU3##ehB8icmQ}e{SaM`-3>(cl@I; zocq%}2nEjjS01C@fJCp$fL|4)FpP@_+CQKNV=C7B9h#gACU$3U_8^606s$8$5oR@xgU!PM-H~WY{5b@>tMNLnerRKg%6fNAk{|?u!a#Cd{t-*ow+7I_zso3 z7B9OtOmWdvn<^z@nRDOwMt;X?W|k|)pTTU!JA_Y-_g%fw5b1bpmRr?JL-~k7*K(C3 z#*PO%CTOH?r1TLWZqGL{1q4r^>>OLzt?UBTOG@fK;)hQ=;k)s%WNucI^+IDeaqP|N zm$@A&V>cCG$yVd?XFlLo>rrdrVBOs#;&IZ?n?)3A>3v@&ve;y-A=01x-eX)t6_G+= z`So5y7UHDr@m&iDjOD`6CGbvM)m41JG+@#-xaY7Ug`eQHBNP zu8MeKDv931t=;Xgad+?@=vd%_wLqn8 zZ#=Z;$$^0ED#^&y4*`NKKz0JJO)GglPsr$Oo|kEMP=HPoWSo(Q1AlakQy1&t z#l2HT@G$nW&#=YP2gp_^uY43Jl!B3_{$OCeM?W)bG<)Qr4m(c}dlW$)CagC&)b?d+ zpL7sOhHEu7@=(#6t5MqZ4OMpuCU0uZ#g``W}j zguJR-btf}P39W0P4nSdkNbB$#Z~h$b@ObYnE#6D-cprF)^H#Z}+qg3(tHSeWF(0y) zh}J?-<%g3VpeomsVhIvqc}U>1n2!OxWVqIr%NdsjotSoe-O zlpqxL2Mh9R;R8w;BI&>*`d%Dc5&DXs9T>DKlj%HcoKurGjg%~(w;Ck&)n9q)A2Ezm z<+COHS+9u2emhoV{tn`_8=aVA_R9E8#EpQIjEjZ5AEZP>I#5y6GJaayk7Ii+m(c;Y zJN{_fS=>7m5$Kccis4hg;(|AT7z0Fp!2i*=1Nw&jU`6NPhmv=f)!{dSiW`>?M0;nv zH1ns53EQ&$1!|`c-Tek6RRy(rdEihUTu(YC3U1o-`g3chS3n~A>c)*2BnU9o=D$#z zv48IzN|IUo(biv$*^lmZI-Rn#a^&P{3q>VZQUc$Q^_0C}X(U_0VqJ{}bnFWSi)r-% z#AX`Du9#0H;R5J~rX`UoX=D?iQ+LW)!bC$bt?9y{XC7LgW^5k(yY+R-3AZQfMHNwH zFbJs@U;$#=pn9I`zTe_)mtlZoa!%hbRx}W8j}WP*oyY__mja`1Pm2AqDChSEaWa#5 zR9wAfQB(&(%6Ooj(K_F^HA77vd(8^nJW!-T^mZ%dh)9X^YxTt0pkIb_+d+SeD#-%w z5|G`YO0h7zG$3+GqtwiS*a)alHHXCmd+bRb!gUFzO}xsbJpR*3q}l`5dl-6S_db>; z8MKiXxrHJ)Q-p|tw~5YIoNEa3i#NMXU3^&|Wx&xkO%FFhALOHg?9u(qGY8e$hn=r% zS?m_i2)}ys)+&|Z;0YonVzF9NnYV7jXE4G3-sR=0z7ilBh7KhJR!>l{3~8|jjq6-K z=fSfQm)CCwT6tepsH$GjWTio|z}ve(Fl=#@o~U4M zX@ViZf5z-fo06TP+4L;{ES!slOL{{`dufcwgK2Y_W< zW1uoNIx^H03LY(B`Kh4u9ywsi)CJcrr+;j^5Il&{=qkkv{+;SS+F^b7cUvu)%3C75 zJY`El<<;{?%K|GOmoKx7Ol$_!PJ5b>o>P=|@>ry#^H|FIS(55$2k@*L3s$t0lB6b> z@_CO-U&Uuy`Nrw2-J5}UaUu0!&ZRqL>BTN^6cE7xGXhR1DM(>PSuP|CXMHEXMt6GO&HLKgRp}}M8O>I{bLo&>fP$7R z4A+N?a||COt4_AvJ8<;Vn}^I+_B_3HwbJK>TOHKVV_uJR4_d(bdwyn^5TH}Bf=A`F+vksRcDo@ zuFATJEuYRO^1rXHftNS4aWKRcI~Q>YEod? zhZ7^Vj#>cCu1O2%W9i+sdO@)&Jze?#m~VA>cS(1+jw;w7mkiy0Uj2x#N@2q$PPm{P zWd4fVdT47+reCiZ4&**L>$O^e_VuY;{e3cx0)O;&HBW6f08G99Heh?slx8gJU09^| z#LfBLzb4Bp^iF?|4Zvg8#4P)Jj{bA)>=>&iG5XNdy7-yrp}RnE_Di?VR!iE!{4RAE8dz~c2+#}4Q+f)?$!Sfx zk3uq(%hvC^U2uI)=k!_n@Vo5ch3h|;F1ql1(UVsP8uzQRJ2!JI2;Uyc46?h2EGc!R58KNvqeQM;$!hc%HwdvwH7IO7$>k z01wtJt=@l5-k*b!K;-dw_m6MNoeY)^^dTuEN?P_C6JW9^pz3>4n%kP|{dpr!M z_#if0i$eVZ=2eW}`0>!cGvC&qdj|_lV@!L$7q2+9?;B-rtAZ9@U3YfAFMhI!Jg6NW*KsZ6uC{BO{!=Bg; zwDVK}Vk6tBusaV|2Dl8`ZwWDkP2*aCxvhkuD(($#S=ol;PlY@XCb1nxc^46*_E5@* zCuv8Dp`J{5OSBP|1I68rD^N>93M{c2bjigzm9%Ax>Q9>LrEvSL;Sv(52nrB!W=ZUk z$TG^}hq~)d2e7e%;2f5eAUlJ?fKh`a05J&)RHzP1I>DZHU!Y&TH=@W-jhguFZzHm8 zKkci&@KP`Wh!Q$>F|-QfiD~rsQYOtzAfoAtQY?tId<7td1j*9dOSe53Q`v?2aP`2r zJQCmLvD@~I+R%C2Pr=%U(nLe2tB`0zHdbplH<-{wbHm|&YFjHm(?r^a# z_~IBjsx_lA;aZBom5xcoD2*_+VJ4s(R8Qk9uun-#nGBo;hrh%pX%sM6o|KBNYy=sTa^`LVAS7KURBOq9!gR7J$07aXHT(3)z zi_C)GVMY(*(PrF+viuTJAA;!KZy>_OhvpPZb&F$+jco}6fSW-gjYKO{YH+9@Q=oI8 z4DDXU_2e@mzIf^z;!Bvfm zOPVwZ*mSg^@wAB)x1np2GufM^@~XPbbR&33lV%|4C)~uN#e*&RG&>VMmE-BStw=4& z7S>8GA&{t)0Ir6MZ9suSoCFH8mzy0^n4~@rXj8J6xH!)2W9$;*hN#|~eySgc;iYD_U z(}AyCk_3De63BkKP?RL~Q(zwOUSJ6CWT!VEDq;?7>oG;BJ-h`mhuFp-9JzCJ#ilGN z1#mk&po=wD>OYLRN`(#BINV=`Sx9{WOZ%yu^yA_RGJ(sYi8X8K>7HK^DO{pKSSSqj zi-{Gy)M>*yE(Q!whIc3F_n$SS&Ef0j*+a0KCm`g#DuzQb4j;KjD&5L?)eBCs__=O!{Z-iZ%b{pSV{@U?wx< z`U+nl7=m3XucP}V{Yf;-XwI1tNj#uV7ggUR?V8E!sK$L$bJ=n~)Z9FB;*WiM>nHp= z^X$x*-)r~2`WmoFIng%d>vMfh1LB((?{L6Fmj$!3@}<8lne4Jg5lOIUb8SMzCP6p@ zCjug0a~x?pARb8YN}I%lO$8c zcUR2Ra2IRmcbm(IdZ(-5)RwXpB=9{4UtxLa1-v&HSWAG0E<2^wxG{mkH6<{x{G2;x zpG<5Cyx1shve1~}H@_8^fc1VN5V3;rmos%DHH8vd&82qnJ`?THKs9o83pH(l4rer24#qcqN_?&d~>$rozWS4zlS z5VvVk?Yj;nBCvs|YdsG(FTU4&#i=GCs-uP-u&ZvrVKq%yMo?@7wpLySC=q6h+QE~n z&Jjg2WHmj4pxB9uR>BNQ{#+F~#(HyQrlvwe7AcdM(By=@BDQJZFzajSb6Y)*;f>~# z7AbEnrsBNqy6ON!gv2}G+T{g^*sls5hPi&h{>GjLaQM%@#@Nyg4aois-7+ZXq#+ag zd*9ERzd4%ZY$=he27)dO`{0I% zsP~GI3dQm-n)Pm{PO356vu7e+vgk6YPHv3Yc%nyS3rO2(hthSCnW|PR1&D_m4=jkemY{Z=l&=0C>ffNedzoZ%Gj83}WzW$2e9_a~~ z>APj?O~sH5w%EAm{#;{yT1{!HU`8TUA^P#fS{&kl_|RE#m1>=m~TxR+Oy zDaQdHT@f&TZB}<|{_DPq`_3|zsR92u#~dBv&WZofpb@?T>>Lnf;gzY-WkV8iJ21v2 zx33G`{PcNW`lj&(dkreT7)MQ=Za;*YHVHK-O=~rU+V5o=v)6O%m+#N(0)6eD!OS$T z)$#(41>XWBbo?-%Mz+yLGB=x&uZEkCCI-MCix@BsZq!C3IbX6}W9N5Bg8kqCi$a{n zl6+x@9qH`$VVI25Qv4dK|8~d)krNxUP`9@{=V`HUHXV2T>Zs7RwJh^YOD#OouuZN6 zM+UEDML+IX%*={sZd}s$PO?c(FRKf_-P){|n8KlG>wzR~VD&^vGV&DG0+~k0iJOTO zD`cY~f5lB=mc^zfwT2S=ffHWg$5d2J$}~L?da*j%*g0^6rK-8bHW&c5GlaOmUgi88 zz1@~O>}axl{_oU`kv|M_hhOzFKhbl)08igtzP=I~bHY{qaCX`Cj98ug_8pzz_q0?q z04@%VY;H*d^X+>Ugdi%xewd#&mV(<=Y_F+xd-XtqYvkFHf6=t|pQ&CO_McnUo&tute5-$9``Z5s+rV)nEd}K5 z&Lj7pOJe=sj{<=Cir+UhunPoJWZToiI5yySVUO?aR*!iG~85TJltXn$L12 zYq+WbWDGMYd}_YqxKb|CzVV+A?RUqneQ==d{Dx+j2S0|4fUzrdZ#3bd_%2nevQj61 zwTp>>b^dk;9vORA!`e<-vVN@lz5REArMsR2te;lBh}Il`RhoAD+~yX?KQ^6U1OMUW zK$FYbU|z7|K=AXLq=1yHz=$HAliD*R2(gNTNdm89zbk99o2}xWUF+PiL zBpaMmH#vPlpACO~mSXsvvkG)XYSF}wFJPecH(%Wb*|z`+vN{-w66hh53c16e+^Nr*r*O z7ossZhG;JBc*9qCIJS0;r6#)3ioBEIPbeA)f~{OqulhNwxjtm+Jl41UK=V^n-bdyy zXfv*RdMoM%PwWQ{257X@-%uDnS$G2nO7zRL308Z8UA$cmmuE*^_emli=hY+p;&isZ zi@Gh~PyvYoqdT>K)6}kuAG3vnU?|wF`Z?o>2*ykQW_vk^Sl{L?S-wb^ep`QW&93HB zv5;{e&nkv^2eIwX$6Nf}@)Sta8RID4nsEcYez}j9{23SIw`}3(0MHKZ6+Uz^zMfQP z-aRXDE`M>lk7|&WY9`w5OdVflP`bvD=))aHp2;!oh(nw$d-`vM$c|J51qNgv zdmm;wvIemD{4Qs=mnC?14rnNPf5KR6xCmlmx48dF%NpNO1JeFjlLe&hisd)l_LVuF zF3L?xwQqGOWCF}bOL}*qeRs0iDiJHKg%A1%apzrY$L;!Z!ffW;`UL^)>8x^Xnq_v) z8`wYs35t}J|6Wp^7Lzk&pW*uF(Y+1>UiV8J71&zKxbe3<(gfLn*Zf^02ts!%%fIn` z@tvxTm9NX%ZdyHmUcYAiYyKZ$`bB<1+H!cD>MP=D?+v3$#ECW$6}7pVs^R6&8}O^?MrLkoy=P; zkkr_HYvYsjZ_C|8v?MWt>Ji%wRO7m|y~xyH3eIlAMHtCT)x}R0ii0fRMcrOU( z@30m`P;SGt|NQ>nW$EX+=NdOdBhm zC6S9TyKHy{K=h4=ZJ6D)FvsI(4dnRtqqB0~P2wCpx;sqh+U@Rd;H;W&r zxA*d`!^h2bwB(vblsd=@Omz=V=<;g+l;~sS1UA;F^bFgz^fSIMPQ?6|DeFLl(VWJl ze@@!XZEbS6_on0U?WG5^Va3E=FiJf0%-I|o_0;g*T|2>N^ZxMvnk#?SZTo7_(biGE zdH$J6-pR#J?)kXio9UhX)`_kI&*z2hyA$|*wV&nw#MZv89RY2pjNFGk5XScjSFY}O zpAqV72x#MLp84cUamu|sdX8pr2+smQ(-z6P)Z?tgS$YPtbi;O{qsze#s# zCyDiA^0U=We^YsXb_rOwZOf~W?@axuZo8;g=?09o%H`X2Z9`)>T6^xmHJYxyKfB#% z!`f{u?u@NFz9TzV=I=aPVdXgw?k?tMtEXWT#;2_X?Y`OJ8+JLaD-XFH`gKiy^7$0U zA)D&XvF;5MmiAChj|#x2lC1OU-{z}_H=?DHfl6$AOq`Ey#s~GUdzg0zRL}0_t#R5M z&o8@`;8!`tZ+kph34*TI@Y-dn%#@zKwNd?hM+Bm;dn%`_pU~m>uZNE|s>r@K`vBvb zcG~oer2BgP$ky%l9p8TKEc(8qT4)F&d0fd&#ac))^6*+YUUzGx>MD9jCw#k>aqPtW zp*@pkX!)Pj5^vgIRM%Dd^Q6Iuz(kr;)U>C|4$EOoHoVW?(B8D+T58TQMx3-_{ejx; zU$6_;nPUw*aM-xQ5?z$C(^0)Q~v2*N6O6ZdY1URMksZ(18(RpeeJ!i69X>uf32CXB(a=J zTX;`cJH?b|*rs3Wb_GqyTsd}cVoN;7-3nuSeBBWtW!8w~D#zBRZ9Ebfa6<9Mq zn^YivT-$otINryxZIYk(wAf(JwV!L|!EvL-E2p@gSuWsgwrE3xvdy;IFI5oZW862l z#DV!Ax#{0}hN_E~ocNKp)!}mza`(DXig~T!g<`ib!PmdI`@O~Nrl(9;7SZXEr$6VE>dc99L(n-v^gYv9vT6ON z!ZqVh^tx*`o(`?j`m!{jGTYuCw_{B3uUi zZ~22ck2r`<ERj6<{21bmhP z3LP-uIhynw09Q{pXz+0T4G{__DfI9BQFTgV8XqpP!gFv)Fgo!}DD`p$3CQ*s%GX1j z#h3s&46aS$cL>0PcgB zas2m1ON;f_7MyCRi=Zh!(_C8?^m+lVy7aBHB2!MEZOvI5@az%C=WA{&|iP>B^n zybH5Hj1Q~evdc@JTnPlmZsU}m*eE21P38k5KyC&2Lk^IgZ9q#nd@a>0cW9cWE~{~b z2L?473gOZnF> z-FjPpkzp(BX}mzSgl|FKhAUW?(%-BlRGfQ(2B9_ZbjY?9Q4oc?_dUulT*WVbJXHVd zs(JUv^NNxCn|IF|wAftlw*6vE!Tk99r%o-M74y%FWeE>*H1ZN3d>gwaxi@zFmXx@P z#7!~LRe$!y%xFK63J$gWiHWhSJ{X>Hpty?`Xoc!mx6m?lD`iN1GRdCpr{L19{8r7Vty@Nk9k0&*FhnVc@YQtCZCA6FaldRz zeaL%XefZGaIKLyWzeTFfnD2h1q9A@n!u|zs#E_=1gCcTfo<_$FQ0EQw6c)&8iU)m>?jsBEH@ zRy@YE)t^XaXRhh*p>uQblybUoe+QbL_vL1x>Iw=e=-cK3cB{Mu4~uAz$s3-JoHElc zv03%1di!_djMn4(E;g-+`We)Dp)S|>!Ih7{SN(hW^BVIBH^2OuGwtE`KkGI>`7zxo zLhO&L&|~jNbosPir{QF%_^d$gWDy9>^?=Du-ai)MVAWPbHLGnv(&`9y40|RbZ}MLi zuH5^je%Yo!|8nljPmA7}Ms$|mgX+b)CwU*U1H<2%-}_s12d@i#e|;Sj2GK*0H$nBg zMWVo+41cmU0N2n6{pJQpDibfaLi8Wibk`qPn{j`J|Cz@I&%`~eu(@e1--|W6-~I{z z`1;PVs8w4~$U>_9bpL=0jYROIAgv}FxMf-ZUfI+t%nH=)*S+X!HGt$Qn zd_BEw+`x>RXV*BVV&^KIrBL38a+xyay+g+Sg5u+A)z$~;PjXoN`s%o}(29HNGbMIW zN5xma)ka6=9k`HEpZ#vX0C0H8w3;d!`BCt*dg7-_*=iCZ8!YLh%`m=~kz zMIK*PD|>jxR@%3FOY4UOef%G@eDRr<-|u!`j?N5K4gT`h;@Il?&iQe_7S33Bq2!GI zhbQrmEf&Rh0DulK@)qi>$xyt8^y!N-f!>qnkVeYNPw?oAiZoclHB@sBvC{ogOG z&_YDv`2XqK$mjp_f|4eg z$^xw-&RVSvv?*(!J8ork_3W{gQ*9#8)?A$DzN2HF>&otdHIwAicv0u9{uTvPccr_n zim})oS{G#>eQv+cf!O-)`QumJPr5L>VY*|?dF!>;Qcv_QbYC4){bXTNyi@G?{TE;5 zoa&2yV^ z!Dd}x?cJeeUTb3a%|6mQ-+ktV+Dr3JKYF)(;+mf4Yc41kdBk6|`M2om!0<}%wbLzk z-x^x#HS6Mm$p?Dgd|f?h?SteCPllI!&%R{4?%K=GBWrxtP2czA{m5#cgi8l5z54d^ z_qxgJ9z6eq{NK;#|9(FIf36=lH=svT-zp*9L!cBZotQx+ry8uyhT(-AxL^_4@OQET zccXCDj7$xjqzOmdg4XxIZ4`zkxFwXza0X3&F9hk~&{~{Ak|qcaeIAR0l({TfNt@F} zf>?73qCL!I;71+_ARh~D9(LPmb$#=!-BwdR$4f=X3ji}Wg)kR0+A>pQ4MjoMR`G^l42(Wug2{W|rELsz z&|U9BTl#_D_Q#hI=Cp1ivy!=p5GW`+JdL3#tE9Lscr?RQww)&Ls5W6M34c1E6q7Sz zhyW1HVP>gV5mSLkfB|EQAgp7+-!rqbHe(nI^uc0*>bsnsM$!6*{?`dicyDz6$}xlU z_rJNUZGJW!XJY+j^Z;-%Y>u6vRnqqS^9++(*U94fRFn( zs%<#)glh(PsJ4PRHU#y<3>QqE-_Wz*ug{+?G*3pd5P5JzXqGttB}!fP4UDF zz&=`R1#0A`p~_9gjR>YKoM&ziteeaq&Z4*4-J7} z9Fb}**Q{v7jhoLH$>y#v7%Ab(E|2WumRSD@Gf^2374i%QsKPLV{)QqUEjIiQy#+ao zLe+Zj;%cnz-0gdV|IQs}LtHG`QLBuG<8Dm!{LB+IhfR>n3Nak-YY;~Ql9Z$aQDpWW z+_wug!~JBKv((Q8^@l)kH1dDNC*SpG6kN!I3^M;xhAu||DVr*^VIOxCDalmW-=rvA&_Aa!kQUSS(McctA$Ad2r3p475A`;xFNNQ7GV-X z2#XLE759LMXkAdb*0vS{BH~g-iC6dYj`#lYdQgaH1F1~w5%wJGEPgUJRU zgiF`t+UirB20ipCZ0>lNQfAdy(&Md*lMKY>fl zpUlI6X=Co;JHf412lh>0ahlK|5MDoJ$@=9RdQ#d6aOeuFO+~I&S_JwsX`>9ok*Yr! zZq_ET7TMZStWK`yrOYY6I$w&4%omHZP0u{3sj2O0dH+!8U-?y zI7Q63(2j)pA(6tNUN55wzI4uc>auuB1nhs3oHA$h*g~byPpkv3Oqa=0U*wFgaRH`A z-WiP8UjvUJp8y&d`NI@s4M=REVIW@0H?VdzT%gCI14i^KB%H+y>nc2e>{m*K5AY7p^;6QlG*WUy)0aa6L zZ%~M;k+%+gnu>^0h&_mTEo$6fL7pMKq)VaA46?u*8)o@Oo|dwuBBTmQ5^5YFq>cu) zo*C4z1QKu=X+Jd)DIkcMRm{p`lNDcX3CZxiWGF^{5BSfOx%A0H?~wXFR^rVAO^k&r zMi5};AFKA66~kEjoZ;=(u}VNJYz7#6eq5o*CLB^6PsQnRVrvYhuBQrt*v=LbD|n2> z_PDF_UMxD?FwM2?-gmQNPDf6;693bPA9J>C3)am@=svdOcu+eIc;2Z>iZ`)uQ~}}> zFOriOkJNeq+wWZp?P+WcF;V#X3QT^Ir>WODTry9EiKI;TtRtW$L^+H%5UCAHnDE@Y zQP3@=3+02Z8tFpE*Bdm2`@{h)q|&N-AXFO|D!Z7Vg!q83Ht2jnlR+tAv4!6kHjD&h zCi1evG?!ljlieBxO(?+fmvL7!O5pg#*B_isy53B<#(ou2#>VcT zTd#9CRh8;$FfRH8Cjfbjt#1^rspIi1?|gY;!&{(+b{B2|3R=z5)<(jmnal-iY|IxXruyL~LOdrBD=;9O0Qp&j z5jy`+&*w+KW_l)XrdY1-@o!dUUz#Cs#WBB2@stNIeD*Bkcscc9$<`gk9V-z7@%Q!X zUoHBjasB>};;K3$c-#*_qK#(tH&cA*K-^N-3|hO;X;eW^tWfbR$FQgH)H4v3Cw@GA^-qZ@6W)5Cw|iX~EBJ8R z7nltv6aR|j)epMj(jO#Uqv`UQgCdQzMZhJ{`Ar~f!SdBRD7>e-W?mC+GbLoknwxg# zlYgER2wqqmJi9XHaK^iJ?e{Kp7XG;Z-IZqIjM2JB(j$z~oxzXww??IyG;Rpz2()$_ zZp&$rW>LAZ9neTi;Vn>U5M%(fu#Ka7Es$f1Nh1NSu;eZ8sC#Ow$_Y64HIdj?8Llj} z)z*H`X@(H%k8S{F4rEG!$_OKzHz>a6tpXeq{|(S0rpuKnus0h1mL5RnF#)hvD;PJYn+D1iX3lD#kjUkmBQVs zY#PN1QwUeQ7#rkFJ?7tNCr*Q2 zSqTC5JrsYRRr=i_X#DNpuB=0svs0lC75|_LLGGqQRjq*2z(kRNYk;aw33nT+Y8<)t zEOt-~bRyGW$6;c&>AZleg{nar_XH+(@Sa_DX={gxjl8b0Fwtb$H5w+C+Px52R^>{j zb_kH?bt2)&HA7X7;MrTT=`Uw$g^W7^RT>$$6(+VzICd^72U`+S$vIaB+`#kzbI%3% zN{q!U&KtcJdLAk}?3<<0Bcsgyg6sMilNhPP3A+EUwb#G1U1ZjYBKGY;Zc#o)l0ZdI zn>M-8iPHXx@uH#u(&RPsjzC`~SUTj)3`eu+22Hx46b18}ks_!+qT@!WExdVOlITjh zC49@Hu9_mZ+RVnc&_ctsEYgX%MT-qFTWwSE-)ITx*KCuH-=n?Tt#R8&pl2t79eU~U z&RC`nPF*WvvRXO8Yw~J;d3p5lVRuh6AR+Ef85x$C~btASRPh3E;m%_C&{r zrtwuE_r2?dowv$TmhW+Vymq5o$jw;??(}`}agqPc&%eI=Dm%wL^wqWtkKS(hb8*0D zXMXDaXHKpxZ1uJ;FGzW_35>BfQY;7}sl6=iO;xh=!aeNaKn>y`KS2<$q>F*fRt5PM zRN~}bx!aWuNUu>93y_(xe9!?VW4Ug6)%#qTKE-CxS-&(e&%vS4ypS$EXg1KB<>qJf zj!W;Q^tQtHBavGB!2V=OPlC<|{n5G+lI}`fqNJ-$7bEEE*KIn`%;}_(hyA*_yq+js zoaOJQRG;05i-vTG-27<5&h983>agi`4(td6Vx-I4wMb6Ac}J~&1UohsS|o%62)ie1 z-R#rX#}>+exfvJ#1+q09c4th_hr5zZN$+L@fRZp&9Jhz)Rsf+F@Q#9DUivu35U809 z9zIN|Q-j#2DW)z~B!{$09QChwoigzW7}?KvfC`T93mJe%1g9V&U8fezKvT6}+Fr^B z!oBqH+E^qrKMFxlc5D7Nnzlh^%-uGXj16wH5VO`GO@Fw$4^N?j>Xl;=CWdJ0=`6(f{cvF} zO#%@&i=EWei9Uc+iVE{^$^uxov|GiicB%<0+{Wbw!IZW}MxSc)*N9#G_a5}N!vn`Y zm)&k3E-S8fPVZaZsa*t66r2F)@$o#TJ#OgE^KC!US+(j+o+0&jSoJ{g>Rj&g-UoN<{<>F+ zEt3;NRC&aH`#8S#*AQ$CNeWH&kZ#BPSZ|ETlv@LyfV**$eOvS|SGznmW~vTkM%4PHWFfv&NdB7eSeT zCJ?F3L#dWJkKmCCdtkpD#mLxZ{WTxK!k_&{a4VL8@Bo?-E}KaDYhP3P>06zTLM7fRp@EPc!64*q;w=cK;&wvGJwS@ z?M(v|5!4aZ#3*?h;!6U-2P3@|wnn~(X#4;w-D0j!ifnmRz_MAIi#pS^Zp+ZktW3~t zPZtM!h-GtYxb z*Cl#N=WQ|Ys~s4arVR>}-H)oZdz0fT>A&$t`60xrZKUOCfF{HPa&Y=?P%#NHZt>p%-aOpP3H-R$*{|xcunU}!ia9K^@=PMM_ z3ncH(`LFA>jwZ_-32Qbe`P~B(wLyCYz2*y+Z!!}~-tHgOY~DOgH4vr^ ztPE&ArzA|kmI#aorF2Db6QbV-qV64Kb22!EDq)4L#T#bMo!Y+^uvnBSgz(}*)}kMD zi>H+c7=C|;eG)s1Wf;cM;la`c+Mr$ksK;Za05ow(WiQRW3akaeIiBc>gGz|;Sgj{3 zT^UeK$P+ep1T*MLWTrFvInTf}=6lj3mX>V6J@1=&)>V)Kfw^R1Chs7EB3W}98^CP! zWkQ_gMi)ZIT4F;<>mQjnobDVyx6+#m8~6FlCD+V1K7RJe%9x$|&Yt-B-p2(iR-WB| z)OTa$)+S;c2(%^(pRgni9f3{Fl5jBW0QaXe5t!?!k*4o5o0k-BdeeBR@`9yYEP=wi zt^{!U+Z)!T4c5ZDP>Cd=g`ps|ZZvfDjTs$w6p3MXHGK{C{3sMo7 zN-hTBBjf6E_TA&6U*`QZc}sgPxh~V_VD!mkleEi!D4kp4*$ytz4IrOWI0NzITe~ON zch^Y)Q$u4Efe`arkYD2aC{yDI{6^+4&m_URmeFAE`nv5>?#J(@OMX6mIDWyXRRa%( zecf1i<8@xx(@nA?f8043I;RWlx9dJTcM8CcBhayU$7o2 z#W{k|jfo*HJw1;`Q&vs6lA05;o(^Yu?!KmQg`>|R zp+-myMISA2RzqmS@aTbHl1qG%DOer5yqia$3Oh3n&C< zS)puIbpH7N*+i)yTrQ;dd7E`<dl`X%P}Fj^T3$`ePsyqsfy)Y0p@J4}Rj zkD02Y?hb)#txL9M$#MH@9w2He;#$67IUFE!xq1v)v?BnE)yB=t7IAw!gTf_E%|9r~PMRqq5n4ck>FsEQ&9)d|(em@ZsOX(_fspkD`&V7ner`pY_pbkM#9O zfScd+)1@ZS8O8rQpBZ9u{de~+a)_msRTRIgl*Q{I4k%W`@ExHqt0XlLD~O6#ktW21 zvyDRJw#DVqh;XI~w(n1uBaJY-AQi)!T<*3EyN!cTlk8{pYIc%YN@0uA8Q7ZhQUz>fU{$dI27dBXRKlRIGI^mCv$qHVJ$sZAE&Yw)qYJ znwA;-HMYBe9j({%vYdi)=hEBDAICYjH|pra$|v2e)8%q=`v<{8 zqt5+6f9HxkeYez~BC4G#8RSpB80=Rdr0zbAO(Ou!QbbT}b_!ggtCr@-imIhiVI>;r zhb5)B^!;#{l9)^DlTD!KZz(#m1xacNOe8}~Q3^%vW_=Kh7x)keRYFUteZWb4K&>_LQ za45!sMtZzr-}%jBzZS*0Ratop(gYm&vO)B44UjdQ{d3fY+dGdx`ZDgPL$5YHm~iQj z+}kVtIvV_<4J0fqHi>3J4@#Ud-Vc#oK%yDN3Bx}*%Iv_&c4n`}W;}y?Nb4v*?&K~j z(zx9pt51^;B@)8M2qp2}o!$aI-dLFb3d>&oI28-+v+^=?^ybS0{$gk=?4fwoQg4-d zHKlgljO;MzEhgYk=eK}(+MqU9(4{={4SLHIb01yOW$vYm1m*^M@8OS?ULoDmR%U+^ z2{AVh(jJp3NC2MqZUI*Mq#(8Z&c}msKC-UfrVB7>CTj_o-U8`sOyb5gKzC|YVCf%G z*meg{LWWXbp9Md82+cg(js$V|T$KJ(r677u1m}MIujdc$|M0%=%VpW3 zvr$hKRAN#iDH*H6w=fcJ%NPM| zqWBxmjPvloAo3FOojh>G20Xp}{(WR{G7le%p+jn%$ z45THYW}s)Cp8$Ha<3&b|3!wIojR#0ih+)Tlc8Sywpy#vs^&M6_uI~Tt+L}xqh1*^@eV$S%T51pwa_)TPqEX+k zJMqOcYR0W9D<&l5fQesZ$?%V}CLU%N7evtEKx0q{6~q)RrJ^F*6@&-zxt0zkK~^LQ zj`fzjooXp~|Hh^YWdcEZ2`W!Jopw!;yt%vavxIZJ$H!(Dy(US{tbwY&u!i~-0nL?4 zXE5M8W+s3d*DuPt&0y-Olt6IpknEkoNzz~XqrjY)svMZ44Jvm0*%&K%k}WHI>pv;q z90ZfH0cO-q@`B1?-9+ZWL@>UY{1YILGOJ7wq9OUDcgrLo?X@HH!$ zA*ZqKIFcoi0g7%xw7NQ3ykGM|03O~r^1XjI`+;b}vX@~@VI|`6FGrxUP{`@|3 z(n&xyvw65Nxod%v<=6RIDFA2T*l~Y%T_$m)mBX=9?ReSJ9^75k&ilh(_EWRhye2b4 zWVWvW*NE5mquM}{nwv~%d_eGe9C#c@OfHcu!3wB}Z0zxQg{*mj-}gBgIjOR|}2TQ!`(+T@gOsinSp zv)4`=Laiu&a7MJTlWa1C zS*9y~To}ZPo23^3Q2QSG+?=P8zNu&u`$0l8TxpJls?AnJ;MTBfW;=*5!mP0|UOTXoRe#n~)<`5cHC#v1UfzJ+U1nes+gC z^TcxTB;LoX<2B|2m>iO)zmnk9W9YT)>r3AJK5%2W%N$A9<4j5abyWHY6J4&)JFsSQ z*du8ObTF*TG3so)SbXzta_Gd{f1euUGddxPyyc4W-s!)vI-WYWlIi?YrL({W#jH-q z4MOy!ktMG6q6(5Vz+J910y+aS-K4+D-2{dq>sShGR*gho0*v1K81=3_$^g{?BNApe zl>)|gjS1$~T%F!!N?bNz1e$05waBT~*`yJ%A~*7k<%$`gii1=KP+5l>&EEA! z;~%RR{t@`Vs-5$k-i`=6$0_!NsArZ$wSdX-Url^j_laNCDt|5$Qzg7HTE|{pSRK22 zD8OB%w*zpzxaWrY+#^mihwmipb+UOKvPs2{Q2~t7w{XF3Fxzhn&pPwbuvZI)-AZ=g zIjEunf3P^4ZwepDaJa<&*@+XIz*s2Xi`cG6w-?Y}Ry2OM3nhM+r7SKRDv_}mrxUQi z0yQC-!S6U<#}~zTQ*IY?TE=~ViQbalOgk#qmMe5?3WbT*ve&)$631>$KKJ!!x4*0H z#Z|eXs(Jxe16R62F9k{3TeZY?HnCZ1BVF;?^K3CCB4~wP5cCV<4RAAz-v3z~?gsQj}J)IKFLE zFgj3xz-LVub2tuMdD4QoZ(hrT1p7}7zbgf##KHm3Xn5=Uv&3eB!#3XdH!CLu59lAi zTVNbN64C#kwcyhTTR_Gj!wSLvo0n_d0de`vRBuxaplu=32Iy?aGyuAxw9p-@0!ho$ zcG#c=rE};09I1R3+T|~K-oiHy8h}pr3aO;$ew=xCa@R3Q7fRHpOS+~;H~q!XOWkjt zl|5{A0E1_#v67c~^ovF(Ft|GLsH~rnfx+MG$_aKM$v-OMK*o_B5wu?R{L!b&L=vu5 z0R~sSzUek9<4-zA@bHw|axEbrT!lOks4NM`Le;47mOu%Y@KZ}ROngqw;+)x=@Jr&|th9>b6*E%&7eg4Gst_K=AMObBF5fGJHj;Yi)X zg$2$kEu!FIr#fWZI+*nTljQs_5Jid;BFwRl`a#=5v*JocF1Xg?!IDoD42VS@2o`)r z7PvXw(@1`+SPWv`nD9XDeTHtE#yE}D*7LqYvGlT74QJ^OE#jTxSv&}x$j;2*lHl#! zYO_z79hTpcI0R9g;8cDwWzCA^-5{40dP6I~v}@Y%(Rx2tI{$JijRS8FyFhS|o{Va_ zwg&tP9cb{!ZRY_Cx-kmtc8+1k(uaQPiE|1XjH64ZJZhF6&rPBWf9lPWrsS@o4YJ2s z&M$H`^pWx>x1DVoE9pv?r@uSRY^)3N%s$D%eWf@=9>&J=x|YDaoS4^oggy|oJ_NcDS@%M3W}?L{(CvcAsI(Rc>uC@!WN80x zR%?yEOcYsPW;HqB@$dIRzQ~AwwZ8@XgeF>qaY$5IIF)v75oXbrEbPy z{jZZj5;E!qN(Nni%2<>UCC6wmNj3Q^vn7MUqhR=J{FD$#Q)-a+mS%QkMBKpck=wsW z-7tIZ@uy$jb^OPhoW<+!eU^>1B^k>3Aelj_0j;H2AZ6%<)rNvVLo+#+spw#Eq>B-R zXCC8(W_r4j)!iW!Qg2XDExpbNJe>4-MYxl9UUAuxJfSA_W1Y3EyI;3da#5;_lU)p7 zkynOG*M^lhJJ|=c5%Y4Vz?81WX=zj5htRvg`v@=DBWWS1@NkO%Y@5QVcF9)UiCt~T zWCkZ(eT+INdzFJ3j2<)TBK25;&Owh!b)V=lZ(WKWGw38F9-{Nw`SC%Ja}jNROJBYz zFAca7`L>kar5j-97ydqTo;%#gulC#d3Uq{h%YUEis83x3g!)Vl&}FRfyE4Owk}T#( znu_nFk8al{0r}=ytRSR410^r;brEZEnguT1HY=EY)i%vk_R84d^qw>@o!(BHzvw*B zy_RCWb-eT8uLp0jB?e(0BBWrP4}>5D5+r-PS(xrOO}<#d;({ICfl!%=@vxR3?(X~_^1FVe`6j;m6^>`6YrxcjS^yH5#FA#5Nw>r4xAMYM)>OFC8r({@DrDmQ zN@Mc{;JaHOv62>4;hq{Yl=L`HOK5xoPL2kY)&1}O2n__!Mxt^dT|%lVHs z`gMNmmVBKn=P%)&E6W?ftB#re1x~e8G0< z@Fm8e6xk)9lu`o&mZs333;Ody^WkR)FqNPs`IFCIB=pHRBiR~q0n*~}0Hl$Z5=<6y zas8yGCt*#T(p_#INd!)nG+&z`>DqOzq`x;`VBQ21du037lf8baJL&l1&R6b5^M?QS z<$u*S1HO@IV-$*?}Wp`I1aomws4-=PmSc|{@h8MCr|RA8n;E%ABa9e zeWIOs@3zi3C{~N-l{{ZhDPxuV{K2S6k=1w0nXPu+9#LOACFJngzd|+bAHM~mJ{qaP zyxnZqf0#r$vY4z3t&C~CQ60IZnr0#`; z`1K!EdzTbeR7-kq-IK5Uw5~WPw`@^%)`gdMXYgYSH{7fPf-14SmK>YS*qlc-2A)WL@dO0qnZVIJHebX7I1s?h>o>{2hVitoH zWa~MQHtweH+|kDuW?fo)ZEU+!waLUoGA$AO;y`+*_h z2NWLzy&D>iH{7&1w#VV_^!<^?9=E24NfNDo`R1*sw(K8Glc!`w#5j6Oo2nK{qiK^K;9pfUky}Lype;&E>K*^Ap{f{d2+r{?cw+^EuPSm6JWE z8wYNr#Fzf&Ga=9Y@~Yu={Y!ps``-0Td*^!jK*ysjY1qMq&~>%Lt@Tx#zCGAwPqwt@ z4M;=G?q8ixd#c#ed;N>v*0kQn-@1I^^15%diyYY?D1QqZE;ULdeW6T92<A#^wq+NPWB2XLrbz zZK(M$3>oA_YqI1u({%A5Fr;K!&-eMoA^rO!d^D*v3#`&?lz~^oWj=@5M&J)K%bpA1 znh59Ale5LIW?2Qyv|2qU2xb#gUrIrmHDF0FdW?eekL?@7pyEQpqJm%F-XazUcFv9& z2_*BKjjirRRs^j5nuhA%?Ud-p=k71%EY`(sVhNIb_F`!#o|>UL?y;UT-Bx_Gvaz&^ zy|-A=|Aq;51?&v9N^K%=Q7d3_A(IZ6dj}ZY=TVDo->MRQi(`@=&~+_MNT@he3M9gp z1!9$s>|#;pq-WF$fibsp%BpjI1JNh@R>>QqmPhW9pKxq(cT*2c;x!nKpKCV7%AQJ@ z+WyZEhyJ?qYDJ56#kFQfrg4COce!@|gJ~5NKA{yO)0RK43&mnx9(HD2AD(g1NOZ9~ z)BLaW+`ghd3icmuTnlVi(+&bE_CuI5oPf9oK`hGiq`}bU-&*ko}_MVF)7l>*m zkGpK|@TC2@f4u_>Hv1dH>AgVUHf-jCVOhWVo$m76`e>LYu=dq>D9RR!k>UJpud2$M zMt-}Et22wrm|{D=w8&%o|<-G9`y9G+zr zBt{bHnrh9uqN%k;@6nR$F;cYwj84d|+E~RO4`)bE0SF?QacylR3&M}Y^;%{v^>O_= zZU1B>Ya)zWO*l9IP+Y@RONLsYDL^=h)DU(#DYG1hin?=Rri zX~B!P(Ov#qX>YhRA$rzHFMh_Skx3Gyt6H8@xyqTc9!j-{Yaz*kA~CjMn#mL3{d-=ZF2r7QB&ys(6|M? zS++9(qnrS!N83+_=AmUVdQBdh$D#j=Mstv4HORFCpp1`>BRUX6OA}gNpg*Kt48S9_ z>_*GbXWoQfTR0hgt_5h>06<730Oe-^xcegj@>c-7M`)DayfDx;1p`x(F<_a4f&3j9 zIB^mKi?5;Qo?_rM9|z6`}g*LtpS)e^f>8h`X$QF_m{4z z%zsPtW_pp=T-ZI88F~v)?`fJ6@mY98e6%tL F{0~8dPrv{G literal 0 HcmV?d00001 diff --git a/autotest/gdrivers/ogcapi.py b/autotest/gdrivers/ogcapi.py index f12a239ec7ed..3b32c06fad57 100644 --- a/autotest/gdrivers/ogcapi.py +++ b/autotest/gdrivers/ogcapi.py @@ -346,19 +346,19 @@ def test_ogr_ogcapi_raster(api, collection, tmp_path): ) assert ds is not None + if (api, collection) == ("COVERAGE", "SRTM"): + assert ds.GetRasterBand(1).DataType == gdal.GDT_Float32 options = gdal.TranslateOptions( gdal.ParseCommandLine( f"-outsize 100 100 -oo API={api} -projwin -9.5377 53.5421 -9.0557 53.2953" ) ) - out_path = str(tmp_path / "lough_corrib.png") + out_path = str(tmp_path / "out.tif") gdal.Translate(out_path, ds, options=options) - control_image_path = os.path.join( - BASE_TEST_DATA_PATH, f"expected_map_lough_corrib_{api}.png" - ) + control_image_path = os.path.join(BASE_TEST_DATA_PATH, f"expected_{api}.tif") # When recording also regenerate control images if RECORD: diff --git a/frmts/ogcapi/gdalogcapidataset.cpp b/frmts/ogcapi/gdalogcapidataset.cpp index c6c489af99db..163a3c091078 100644 --- a/frmts/ogcapi/gdalogcapidataset.cpp +++ b/frmts/ogcapi/gdalogcapidataset.cpp @@ -1342,8 +1342,16 @@ bool OGCAPIDataset::InitWithCoverageAPI(GDALOpenInfo *poOpenInfo, if (oField.IsValid()) { l_nBands = oField.Size(); - const auto osDefinition = oField[0].GetString("definition"); - static const std::map oMapTypes = { + // Such as in https://maps.gnosis.earth/ogcapi/collections/NaturalEarth:raster:HYP_HR_SR_OB_DR/coverage/rangetype?f=json + // https://github.com/opengeospatial/coverage-implementation-schema/blob/main/standard/schemas/1.1/json/examples/generalGrid/2D_regular.json + std::string osDataType = + oField[0].GetString("encodingInfo/dataType"); + if (osDataType.empty()) + { + // Older way? + osDataType = oField[0].GetString("definition"); + } + static const std::map oMapTypes = { // https://edc-oapi.dev.hub.eox.at/oapi/collections/S2L2A {"UINT8", GDT_Byte}, {"INT16", GDT_Int16}, @@ -1365,8 +1373,8 @@ bool OGCAPIDataset::InitWithCoverageAPI(GDALOpenInfo *poOpenInfo, // 08-094r1_SWE_Common_Data_Model_2.0_Submission_Package.pdf page // 112 auto oIter = oMapTypes.find( - CPLString(osDefinition) - .replaceAll("http://www.opengis.net/ def/dataType/OGC/0/", + CPLString(osDataType) + .replaceAll("http://www.opengis.net/def/dataType/OGC/0/", "ogcType:")); if (oIter != oMapTypes.end()) { @@ -1374,8 +1382,8 @@ bool OGCAPIDataset::InitWithCoverageAPI(GDALOpenInfo *poOpenInfo, } else { - CPLDebug("OGCAPI", "Unhandled field definition: %s", - osDefinition.c_str()); + CPLDebug("OGCAPI", "Unhandled data type: %s", + osDataType.c_str()); } } } From 056ac5d9cbd243d3886511cf068428bb8dbc1b87 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 10 Jul 2024 14:59:51 +0200 Subject: [PATCH 256/301] gdal_retile: error out with clear message when trying to retile a file with a geotransform with rotation terms Fixes #10333 or with several input files with inconsistent SRS --- autotest/pyscripts/test_gdal_retile.py | 79 +++++++++++++++++++ doc/source/programs/gdal_retile.rst | 1 + .../gdal-utils/osgeo_utils/gdal_retile.py | 41 +++++++++- 3 files changed, 120 insertions(+), 1 deletion(-) diff --git a/autotest/pyscripts/test_gdal_retile.py b/autotest/pyscripts/test_gdal_retile.py index fc7ae087bbc4..76e5a54ef6df 100755 --- a/autotest/pyscripts/test_gdal_retile.py +++ b/autotest/pyscripts/test_gdal_retile.py @@ -28,6 +28,7 @@ # DEALINGS IN THE SOFTWARE. ############################################################################### +import glob import os import pytest @@ -438,3 +439,81 @@ def test_gdal_retile_png(script_path, tmp_path): assert ds.GetRasterBand(1).Checksum() == 4672 assert os.path.exists(out_dir / "byte_1_1.png.aux.xml") + + +############################################################################### +# Test gdal_retile on a input file with a geotransform with rotational terms +# (unsupported) + + +def test_gdal_retile_rotational_geotransform(script_path, tmp_path): + + src_filename = str(tmp_path / "in.tif") + ds = gdal.GetDriverByName("GTiff").Create(src_filename, 2, 2) + ds.SetGeoTransform([2, 0.1, 0.001, 49, -0.01, -0.1]) + ds.Close() + + out_dir = tmp_path / "outretile" + out_dir.mkdir() + + _, err = test_py_scripts.run_py_script( + script_path, + "gdal_retile", + "-ps 1 1 -targetDir " + '"' + str(out_dir) + '"' + " " + src_filename, + return_stderr=True, + ) + assert "has a geotransform matrix with rotational terms" in err + assert len(glob.glob(os.path.join(str(out_dir), "*.tif"))) == 0 + + +############################################################################### +# Test gdal_retile on input files with different projections +# (unsupported) + + +@pytest.mark.parametrize( + "srs1,srs2,expected_err", + [ + (32631, 32632, "has a SRS different from other tiles"), + (32631, None, "has no SRS whether other tiles have one"), + (None, 32631, "has a SRS whether other tiles do not"), + ], +) +def test_gdal_retile_different_srs(script_path, tmp_path, srs1, srs2, expected_err): + + src_filename1 = str(tmp_path / "in1.tif") + ds = gdal.GetDriverByName("GTiff").Create(src_filename1, 2, 2) + ds.SetGeoTransform([2, 0.1, 0, 49, 0, -0.1]) + if srs1: + srs = osr.SpatialReference() + srs.ImportFromEPSG(srs1) + ds.SetSpatialRef(srs) + ds.Close() + + src_filename2 = str(tmp_path / "in2.tif") + ds = gdal.GetDriverByName("GTiff").Create(src_filename2, 2, 2) + ds.SetGeoTransform([2, 0.1, 0, 49, 0, -0.1]) + if srs2: + srs = osr.SpatialReference() + srs.ImportFromEPSG(srs2) + ds.SetSpatialRef(srs) + ds.Close() + + out_dir = tmp_path / "outretile" + out_dir.mkdir() + + _, err = test_py_scripts.run_py_script( + script_path, + "gdal_retile", + "-ps 1 1 -targetDir " + + '"' + + str(out_dir) + + '"' + + " " + + src_filename1 + + " " + + src_filename2, + return_stderr=True, + ) + assert expected_err in err + assert len(glob.glob(os.path.join(str(out_dir), "*.tif"))) == 0 diff --git a/doc/source/programs/gdal_retile.rst b/doc/source/programs/gdal_retile.rst index 7b89aeeebdf0..366dc018a4be 100644 --- a/doc/source/programs/gdal_retile.rst +++ b/doc/source/programs/gdal_retile.rst @@ -33,6 +33,7 @@ Description This utility will retile a set of input tile(s). All the input tile(s) must be georeferenced in the same coordinate system and have a matching number of bands. +The geotransform matrix of input tiles must not contain rotation terms. Optionally pyramid levels are generated. All pyramid levels are generated from the input tiles (not from previous levels). diff --git a/swig/python/gdal-utils/osgeo_utils/gdal_retile.py b/swig/python/gdal-utils/osgeo_utils/gdal_retile.py index 2395cb93bd33..2dc6f5ab3680 100644 --- a/swig/python/gdal-utils/osgeo_utils/gdal_retile.py +++ b/swig/python/gdal-utils/osgeo_utils/gdal_retile.py @@ -337,13 +337,52 @@ def getTileIndexFromFiles(g): ogrTileIndexDS = createTileIndex( g.Verbose, "TileIndex", g.TileIndexFieldName, None, g.TileIndexDriverTyp ) + firstTile = True + globalSRS = None for inputTile in g.Names: fhInputTile = gdal.Open(inputTile) if fhInputTile is None: return None - dec = AffineTransformDecorator(fhInputTile.GetGeoTransform()) + # Check the geotransform has no rotational terms. + gt = fhInputTile.GetGeoTransform() + if gt[2] != 0 or gt[4] != 0: + print( + "File %s has a geotransform matrix with rotational terms, which is not supported. You may need to use gdalwarp before." + % inputTile, + file=sys.stderr, + ) + return None + + # Check SRS consistency among tiles + srs = fhInputTile.GetSpatialRef() + if firstTile: + globalSRS = srs + else: + if globalSRS is not None and srs is None: + print( + "File %s has no SRS whether other tiles have one." % inputTile, + file=sys.stderr, + ) + return None + elif globalSRS is None and srs is not None: + print( + "File %s has a SRS whether other tiles do not." % inputTile, + file=sys.stderr, + ) + return None + elif ( + globalSRS is not None and srs is not None and not globalSRS.IsSame(srs) + ): + print( + "File %s has a SRS different from other tiles." % inputTile, + file=sys.stderr, + ) + return None + + firstTile = False + dec = AffineTransformDecorator(gt) points = dec.pointsFor(fhInputTile.RasterXSize, fhInputTile.RasterYSize) addFeature( From 335503ef9dc33851f66b7851d50310ed36a3bd86 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 11 Jul 2024 12:11:52 +0200 Subject: [PATCH 257/301] Shape: fix recognizing an empty string as a NULL date Fixes #10405 --- autotest/ogr/data/shp/date_empty_string.dbf | Bin 0 -> 75 bytes autotest/ogr/ogr_shape.py | 13 +++++++++++++ ogr/ogrsf_frmts/shape/dbfopen.c | 3 ++- 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 autotest/ogr/data/shp/date_empty_string.dbf diff --git a/autotest/ogr/data/shp/date_empty_string.dbf b/autotest/ogr/data/shp/date_empty_string.dbf new file mode 100644 index 0000000000000000000000000000000000000000..2aaa96f938aa4ae6ce00de5ff437cad9ede7de35 GIT binary patch literal 75 ocmZRsVdrLKU|?`$-~^IrAe@0AC9xzGD(V8FInb2wD!>G!0Gp!&WdHyG literal 0 HcmV?d00001 diff --git a/autotest/ogr/ogr_shape.py b/autotest/ogr/ogr_shape.py index e37b361092ec..1f2e6aea3c7d 100755 --- a/autotest/ogr/ogr_shape.py +++ b/autotest/ogr/ogr_shape.py @@ -6121,3 +6121,16 @@ def test_ogr_shape_logical_field(tmp_vsimem): assert f["int_field"] == -1234 f = lyr.GetNextFeature() assert f["bool_field"] is None + + +############################################################################### +# Test reading a null Date filled with nul characters + + +@gdaltest.enable_exceptions() +def test_ogr_shape_read_date_empty_string(): + + ds = ogr.Open("data/shp/date_empty_string.dbf") + lyr = ds.GetLayer(0) + f = lyr.GetNextFeature() + assert f["date"] is None diff --git a/ogr/ogrsf_frmts/shape/dbfopen.c b/ogr/ogrsf_frmts/shape/dbfopen.c index 4fc70b91d9c6..bbbcea1d7525 100644 --- a/ogr/ogrsf_frmts/shape/dbfopen.c +++ b/ogr/ogrsf_frmts/shape/dbfopen.c @@ -1149,7 +1149,8 @@ static bool DBFIsValueNULL(char chType, const char *pszValue) /* (trimmed by DBFReadStringAttribute) to indicate null */ /* values for dates (#4265). */ /* And others have ' 0': https://lists.osgeo.org/pipermail/gdal-dev/2023-November/058010.html */ - return strncmp(pszValue, "00000000", 8) == 0 || + /* And others just empty string: https://github.com/OSGeo/gdal/issues/10405 */ + return pszValue[0] == 0 || strncmp(pszValue, "00000000", 8) == 0 || strcmp(pszValue, " ") == 0 || strcmp(pszValue, "0") == 0; case 'L': From f38c3e238a0d1ff2f43413264d597dc113b3da55 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 15 Jul 2024 14:27:30 +0200 Subject: [PATCH 258/301] CI: adapt for Conda-Forge libgdal feedstock changes --- ci/travis/osx/before_install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ci/travis/osx/before_install.sh b/ci/travis/osx/before_install.sh index 27e07197e4e7..9669860d9305 100755 --- a/ci/travis/osx/before_install.sh +++ b/ci/travis/osx/before_install.sh @@ -7,6 +7,6 @@ conda install -y compilers automake pkgconfig cmake conda config --set channel_priority strict conda install --yes --quiet proj python=3.12 swig lxml jsonschema numpy -conda install --yes --quiet --only-deps libgdal libgdal-arrow-parquet -# Remove libgdal as above installation of libgdal-arrow-parquet installed it -conda remove --yes libgdal +conda install --yes --quiet libgdal libgdal-arrow-parquet +# Now remove all libgdal* packages, but not their dependencies +conda remove --yes --force $(conda list libgdal | grep libgdal | awk '{print $1}') From 025a581279c02d6b35fc88d3fd962746b507a3fb Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 12 Jul 2024 15:55:20 +0200 Subject: [PATCH 259/301] ogr_oapif.py: avoid 'code 500, message Unexpected GET request for /oapif' type of messages --- autotest/ogr/ogr_oapif.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/autotest/ogr/ogr_oapif.py b/autotest/ogr/ogr_oapif.py index 55ddd1104a30..d58957482445 100755 --- a/autotest/ogr/ogr_oapif.py +++ b/autotest/ogr/ogr_oapif.py @@ -184,6 +184,9 @@ def test_ogr_oapif_empty_layer_and_user_query_parameters(): assert lyr.GetName() == "foo" handler = webserver.SequentialHandler() + handler.add("GET", "/oapif?FOO=BAR", 200, {}, "{}") + handler.add("GET", "/oapif/api?FOO=BAR", 200, {}, "{}") + handler.add("GET", "/oapif/api/?FOO=BAR", 200, {}, "{}") handler.add( "GET", "/oapif/collections/foo/items?limit=20&FOO=BAR", @@ -198,6 +201,15 @@ def test_ogr_oapif_empty_layer_and_user_query_parameters(): ############################################################################### +def _add_dummy_root_and_api_pages(handler): + handler.add("GET", "/oapif", 404, {}, "{}") + handler.add("GET", "/oapif/api", 404, {}, "{}") + handler.add("GET", "/oapif/api/", 404, {}, "{}") + + +############################################################################### + + def test_ogr_oapif_open_by_collection_and_legacy_wfs3_prefix(): handler = webserver.SequentialHandler() @@ -218,6 +230,7 @@ def test_ogr_oapif_open_by_collection_and_legacy_wfs3_prefix(): assert lyr.GetName() == "foo" handler = webserver.SequentialHandler() + _add_dummy_root_and_api_pages(handler) handler.add( "GET", "/oapif/collections/foo/items?limit=20", @@ -247,6 +260,7 @@ def test_ogr_oapif_fc_links_next_geojson(): lyr = ds.GetLayer(0) handler = webserver.SequentialHandler() + _add_dummy_root_and_api_pages(handler) handler.add( "GET", "/oapif/collections/foo/items?limit=20", @@ -331,6 +345,7 @@ def test_ogr_oapif_id_is_integer(): lyr = ds.GetLayer(0) handler = webserver.SequentialHandler() + _add_dummy_root_and_api_pages(handler) handler.add( "GET", "/oapif/collections/foo/items?limit=20", @@ -521,6 +536,7 @@ def test_ogr_oapif_spatial_filter(): assert lyr.GetExtent() == (-10.0, 15.0, 40.0, 50.0) handler = webserver.SequentialHandler() + _add_dummy_root_and_api_pages(handler) handler.add( "GET", "/oapif/collections/foo/items?limit=20", @@ -770,6 +786,7 @@ def test_ogr_oapif_limit_from_numberMatched(): lyr = ds.GetLayer(0) handler = webserver.SequentialHandler() + _add_dummy_root_and_api_pages(handler) handler.add( "GET", "/oapif/collections/foo/items?limit=20", @@ -1112,6 +1129,7 @@ def test_ogr_oapif_schema_from_xml_schema(): """, ) + _add_dummy_root_and_api_pages(handler) handler.add( "GET", "/oapif/collections/foo/items?limit=20", @@ -1161,6 +1179,7 @@ def test_ogr_oapif_schema_from_json_schema(): {"Content-Type": "application/schema+json"}, open("data/oapif/oapif_json_schema_eo.jsonschema", "rt").read(), ) + _add_dummy_root_and_api_pages(handler) handler.add( "GET", "/oapif/collections/foo/items?limit=20", @@ -1219,6 +1238,7 @@ def test_ogr_oapif_stac_catalog(): lyr = ds.GetLayer(0) handler = webserver.SequentialHandler() + _add_dummy_root_and_api_pages(handler) handler.add( "GET", "/oapif/collections/foo/items?limit=20", @@ -1294,6 +1314,7 @@ def test_ogr_oapif_storage_crs_easting_northing(): ) handler = webserver.SequentialHandler() + _add_dummy_root_and_api_pages(handler) handler.add( "GET", "/oapif/collections/foo/items?limit=20", @@ -1392,6 +1413,7 @@ def test_ogr_oapif_storage_crs_latitude_longitude(): assert (minx, miny, maxx, maxy) == pytest.approx((-10, 40, 15, 50), abs=1e-3) handler = webserver.SequentialHandler() + _add_dummy_root_and_api_pages(handler) handler.add( "GET", "/oapif/collections/foo/items?limit=20", @@ -1500,6 +1522,7 @@ def test_ogr_oapif_storage_crs_latitude_longitude_non_compliant_server(): assert supported_srs_list is None handler = webserver.SequentialHandler() + _add_dummy_root_and_api_pages(handler) handler.add( "GET", "/oapif/collections/foo/items?limit=20", @@ -1599,6 +1622,7 @@ def get_collections_handler(): def get_items_handler(): handler = webserver.SequentialHandler() + _add_dummy_root_and_api_pages(handler) handler.add( "GET", "/oapif/collections/foo/items?limit=20", @@ -1973,6 +1997,7 @@ def test_ogr_oapif_initial_request_page_size(): lyr = ds.GetLayer(0) handler = webserver.SequentialHandler() + _add_dummy_root_and_api_pages(handler) handler.add( "GET", "/oapif/collections/foo/items?limit=20", @@ -2009,6 +2034,7 @@ def test_ogr_oapif_initial_request_page_size(): lyr = ds.GetLayer(0) handler = webserver.SequentialHandler() + _add_dummy_root_and_api_pages(handler) handler.add( "GET", "/oapif/collections/foo/items?limit=20", @@ -2044,6 +2070,7 @@ def test_ogr_oapif_initial_request_page_size(): lyr = ds.GetLayer(0) handler = webserver.SequentialHandler() + _add_dummy_root_and_api_pages(handler) handler.add( "GET", "/oapif/collections/foo/items?limit=1000", @@ -2078,6 +2105,7 @@ def test_ogr_oapif_initial_request_page_size(): lyr = ds.GetLayer(0) handler = webserver.SequentialHandler() + _add_dummy_root_and_api_pages(handler) handler.add( "GET", "/oapif/collections/foo/items?limit=30", From 6036a1a3207affe6b569f387ad2d7fcd5ac0d4db Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 12 Jul 2024 16:58:30 +0200 Subject: [PATCH 260/301] OAPIF: fix resolving of relative links Fixes #10410 --- .../data/ogcapi/request_api_f_json.http_data | 6077 ++++++ ...rth_physical_ne_10m_lakes_europe.http_data | 60 +- ...sical_ne_10m_lakes_europe_f_json.http_data | 60 +- ...pengis.net_def_crs_OGC_1.3_CRS84.http_data | 258 - ...net_def_crs_OGC_1.3_CRS84_f_json.http_data | 16188 ++++++++++++++++ ...lakes_europe_items.json_limit_20.http_data | 258 - ...rope_items.json_limit_20_f_json.http_data} | 232 +- .../data/ogcapi/request_f_json.http_data | 107 + autotest/gdrivers/ogcapi.py | 3 - autotest/ogr/ogr_oapif.py | 105 +- ogr/ogrsf_frmts/wfs/ogroapifdriver.cpp | 176 +- 11 files changed, 22850 insertions(+), 674 deletions(-) create mode 100644 autotest/gdrivers/data/ogcapi/request_api_f_json.http_data delete mode 100644 autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_1000_crs_http___www.opengis.net_def_crs_OGC_1.3_CRS84.http_data create mode 100644 autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_1000_crs_http___www.opengis.net_def_crs_OGC_1.3_CRS84_f_json.http_data delete mode 100644 autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_20.http_data rename autotest/gdrivers/data/ogcapi/{request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_1000.http_data => request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_20_f_json.http_data} (52%) create mode 100644 autotest/gdrivers/data/ogcapi/request_f_json.http_data diff --git a/autotest/gdrivers/data/ogcapi/request_api_f_json.http_data b/autotest/gdrivers/data/ogcapi/request_api_f_json.http_data new file mode 100644 index 000000000000..79b57af00089 --- /dev/null +++ b/autotest/gdrivers/data/ogcapi/request_api_f_json.http_data @@ -0,0 +1,6077 @@ +HTTP/1.1 200 OK +Date: Fri, 12 Jul 2024 14:16:47 GMT +Server: Apache/2.4.52 (Ubuntu) +Expires: Sat, 12 Jul 2025 13:56:54 GMT +Access-Control-Allow-Origin: * +Vary: Accept,Accept-Encoding,Prefer +Content-Length: 204806 +Access-Control-Allow-Headers: x-requested-with, Content-Type, origin, authorization, acc$ +Age: 1192 +Keep-Alive: timeout=5, max=100 +Connection: Keep-Alive +Content-Type: application/json + +{ + "openapi" : "3.0.0", + "info" : { + "version" : "1.0", + "title" : "GNOSIS Map Server OGC API", + "description" : "GNOSIS Map Server", + "contact" : { + "name" : "Ecere Corporation", + "email" : "info@ecere.ca" + }, + "license" : { + "name" : "OGC License", + "url" : "http://www.opengeospatial.org/legal/" + } + }, + "paths" : { + "/" : { + "get" : { + "tags" : [ "Landing Page" ], + "summary" : "Retrieve the OGC API landing page for this service.", + "parameters" : [ { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/LandingPage" + }, + "406" : { + "$ref" : "#/components/responses/NotAcceptable" + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/conformance" : { + "get" : { + "tags" : [ "Conformance" ], + "summary" : "Retrieve the set of OGC API conformance classes that are supported by this service.", + "parameters" : [ { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/ConformanceDeclaration" + } + } + } + }, + "/collections" : { + "get" : { + "tags" : [ "Data Collections" ], + "summary" : "Retrieve the list of geospatial data collections available from this service.", + "parameters" : [ { + "$ref" : "#/components/parameters/datetime" + }, { + "$ref" : "#/components/parameters/limit-collections" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/collectionsList" + } + } + } + }, + "/collections/{collectionId}" : { + "get" : { + "tags" : [ "Data Collections" ], + "summary" : "Retrieve the description of a collection available from this service.", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-all" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/Collection" + } + } + } + }, + "/processes" : { + "get" : { + "summary" : "Retrieve the list of available processes", + "description" : "A list of all available processes.", + "operationId" : "listProcesses", + "tags" : [ "Processes" ], + "parameters" : [ { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "Information about the available processes", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/processList" + } + } + } + }, + "default" : { + "description" : "An error occured.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + } + } + } + }, + "/processes/{processId}" : { + "get" : { + "summary" : "Retrieve a process description", + "operationId" : "describeProcess", + "tags" : [ "Processes" ], + "parameters" : [ { + "$ref" : "#/components/parameters/processId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "A process description.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/process" + }, + "example" : { + "id" : "RenderMap", + "title" : "Maps rendering process", + "description" : "RenderMap process", + "keywords" : [ "process", "maps" ], + "inputs" : [ { + "id" : "layers", + "title" : "layers", + "description" : "The layers to render on the map", + "literalDataDomain" : { + "dataType" : { + "name" : "array" + } + } + }, { + "id" : "bgColor", + "title" : "bgColor", + "description" : "The background color of the map", + "literalDataDomain" : { + "dataType" : { + "name" : "string" + }, + "valueDefinition" : { + "defaultValue" : "000000" + } + } + }, { + "id" : "transparent", + "title" : "transparent", + "description" : "Whether the map's background is transparent.", + "literalDataDomain" : { + "dataType" : { + "name" : "bool" + }, + "valueDefinition" : { + "defaultValue" : true + } + } + } ], + "outputs" : [ { + "id" : "result", + "title" : "result", + "description" : "The rendered map" + } ], + "version" : 1.1, + "jobControlOptions" : [ "modular-sync", "modular-deferred" ], + "links" : [ { + "rel" : "canonical", + "href" : "https://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/processes/RenderMap", + "type" : "application/json", + "title" : "Modular execution endpoint" + } ] + } + } + } + }, + "404" : { + "description" : "The process {id} does not exist.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "default" : { + "description" : "An error occured.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + } + } + }, + "post" : { + "summary" : "Submit a processing workflow for execution", + "description" : "Post a workflow to set up deferred execution of it, obtaining a temporary virtual geospatial data resource (collection) with links to resources supporting GET methods for all supported execution/output retrieval mechanisms (equivalent to the modular synchronous execution end-points supported)", + "operationId" : "execDeferred", + "tags" : [ "Processes" ], + "parameters" : [ { + "$ref" : "#/components/parameters/processId" + } ], + "requestBody" : { + "description" : "Mandatory execute request JSON", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/execute" + }, + "examples" : { + "elevationContours" : { + "$ref" : "#/components/examples/elevationContours" + }, + "renderMap" : { + "$ref" : "#/components/examples/renderMap" + }, + "osmere" : { + "$ref" : "#/components/examples/osmere" + }, + "nestedWorkflow" : { + "$ref" : "#/components/examples/nestedWorkflow" + }, + "evis2" : { + "$ref" : "#/components/examples/EVISentinel2" + }, + "evis2-wcps" : { + "$ref" : "#/components/examples/EVISentinel2-WCPS" + } + } + } + } + }, + "responses" : { + "303" : { + "description" : "Successful, see other for GET-accessible resource", + "headers" : { + "Location" : { + "schema" : { + "type" : "string" + }, + "description" : "GET-accessible path for same result, which can also be used as a replacement to the /processes/{id} portion of the synchronous execution paths using GET, without having to re-submit (POST) the workflow." + } + }, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/collection" + } + }, + "text/html" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + } + } + }, + "400" : { + "description" : "Invalid request", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "404" : { + "description" : "The process {id} does not exist.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "410" : { + "description" : "Resource has expired", + "headers" : { + "Cache-Control" : { + "description" : "410 is cachable by default, but deferred execution may come back online.", + "schema" : { + "type" : "string", + "enum" : [ "no-cache" ] + } + } + }, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "default" : { + "description" : "An error occured.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + } + } + } + }, + "/processes/{processId}/execution" : { + "post" : { + "summary" : "Submit a processing workflow for execution", + "description" : "Post an execution request to execute it synchronously (asynchronous support not yet implemented)", + "operationId" : "execSync", + "tags" : [ "Processes" ], + "parameters" : [ { + "$ref" : "#/components/parameters/processId" + } ], + "requestBody" : { + "description" : "Mandatory execute request JSON", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/execute" + }, + "examples" : { + "elevationContours" : { + "$ref" : "#/components/examples/elevationContoursSync" + }, + "renderMap" : { + "$ref" : "#/components/examples/renderMapSync" + }, + "osmere" : { + "$ref" : "#/components/examples/osmere" + }, + "nestedProcess" : { + "$ref" : "#/components/examples/nestedSync" + } + } + } + } + }, + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-process-results" + }, + "400" : { + "description" : "Invalid request", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "404" : { + "description" : "The process {id} does not exist.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "default" : { + "description" : "An error occured.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + } + } + } + }, + "/tileMatrixSets" : { + "get" : { + "tags" : [ "Tiling Schemes" ], + "summary" : "Retrieve the list of available tiling schemes (tile matrix sets)", + "operationId" : "listTileMatrixSets", + "parameters" : [ { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "List of tile matrix sets (tiling schemes).", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "tileMatrixSets" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/tileMatrixSet" + } + } + } + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/tileMatrixSets/{tileMatrixSetId}" : { + "get" : { + "tags" : [ "Tiling Schemes" ], + "summary" : "Retrieve the definition of the specified tiling scheme (tile matrix set)", + "operationId" : "describeTileMatrixSet", + "parameters" : [ { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "tile matrix sets (tiling schemes).", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tileMatrixSet" + } + } + } + }, + "404" : { + "description" : "The requested tile matrix set id was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/items" : { + "get" : { + "summary" : "Retrieve vector features from the specified collection.", + "operationId" : "getFeatures", + "tags" : [ "Vector Features" ], + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-features" + }, { + "$ref" : "#/components/parameters/bbox" + }, { + "$ref" : "#/components/parameters/subset" + }, { + "$ref" : "#/components/parameters/datetime" + }, { + "$ref" : "#/components/parameters/limit-items" + }, { + "$ref" : "#/components/parameters/resultType" + }, { + "$ref" : "#/components/parameters/propertyName" + }, { + "$ref" : "#/components/parameters/filter" + }, { + "$ref" : "#/components/parameters/filter-lang" + }, { + "$ref" : "#/components/parameters/filter-crs" + }, { + "$ref" : "#/components/parameters/f-vector" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-vector" + }, + "406" : { + "$ref" : "#/components/responses/NotAcceptable" + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/items/{featureId}" : { + "get" : { + "summary" : "Retrieve the specified vector feature from the specified collection.", + "operationId" : "getSingleFeature", + "tags" : [ "Vector Features" ], + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-features" + }, { + "$ref" : "#/components/parameters/featureId" + }, { + "$ref" : "#/components/parameters/resultType" + }, { + "$ref" : "#/components/parameters/propertyName" + }, { + "$ref" : "#/components/parameters/f-vector" + } ], + "responses" : { + "200" : { + "description" : "OK response", + "content" : { + "application/geo+json" : { + "schema" : { + "type" : "object" + } + }, + "text/html" : { + "schema" : { + "type" : "string" + } + } + } + }, + "406" : { + "$ref" : "#/components/responses/NotAcceptable" + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/processes/{processId}/items" : { + "post" : { + "summary" : "Submit a workflow for execution and retrieve the results as vector features", + "description" : "Post a workflow to synchronously retrieve items using MOAW extension", + "operationId" : "execSyncFeatures", + "tags" : [ "Vector Features" ], + "parameters" : [ { + "$ref" : "#/components/parameters/processId" + }, { + "$ref" : "#/components/parameters/bbox" + }, { + "$ref" : "#/components/parameters/subset" + }, { + "$ref" : "#/components/parameters/datetime" + }, { + "$ref" : "#/components/parameters/limit-items" + }, { + "$ref" : "#/components/parameters/resultType" + }, { + "$ref" : "#/components/parameters/propertyName" + }, { + "$ref" : "#/components/parameters/filter" + }, { + "$ref" : "#/components/parameters/filter-lang" + }, { + "$ref" : "#/components/parameters/filter-crs" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "requestBody" : { + "description" : "Mandatory execute request JSON", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/execute" + }, + "examples" : { + "osmere" : { + "$ref" : "#/components/examples/osmere" + }, + "elevationContours" : { + "$ref" : "#/components/examples/elevationContours" + } + } + } + } + }, + "responses" : { + "200" : { + "description" : "Successfully executed workflow and retrieved map", + "content" : { + "application/geo+json" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + } + } + }, + "400" : { + "description" : "Invalid request", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "404" : { + "description" : "The process {id} does not exist.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "default" : { + "description" : "An error occured.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + } + } + } + }, + "/processes/{processId}/items/{featureId}" : { + "post" : { + "summary" : "Submit a workflow for execution and retrieve a single vector feature from the results", + "description" : "Post a workflow to synchronously retrieve a single item using MOAW extension", + "operationId" : "execSyncSingleFeature", + "tags" : [ "Vector Features" ], + "parameters" : [ { + "$ref" : "#/components/parameters/processId" + }, { + "$ref" : "#/components/parameters/featureId" + }, { + "$ref" : "#/components/parameters/f-vector" + } ], + "requestBody" : { + "description" : "Mandatory execute request JSON", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/execute" + }, + "examples" : { + "osmere" : { + "$ref" : "#/components/examples/osmere" + }, + "elevationContours" : { + "$ref" : "#/components/examples/elevationContours" + } + } + } + } + }, + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-vector" + }, + "400" : { + "description" : "Invalid request", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "404" : { + "description" : "The process {id} does not exist.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "default" : { + "description" : "An error occured.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + } + } + } + }, + "/tiles" : { + "get" : { + "tags" : [ "Vector Tiles" ], + "summary" : "Retrieve a list of available vector tilesets for the dataset", + "operationId" : "listVectorTileSets", + "parameters" : [ { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "List of available tilesets.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tilesetsList" + } + } + } + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/tiles/{tileMatrixSetId}" : { + "get" : { + "tags" : [ "Vector Tiles" ], + "summary" : "Retrieve the vector tileset metadata for the whole dataset and the specified tiling scheme (tile matrix set)", + "operationId" : "describeVectorTileSet", + "parameters" : [ { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "Description of the tileset.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tileSet" + } + } + } + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}" : { + "get" : { + "tags" : [ "Vector Tiles" ], + "summary" : "Retrieve a vector tile including one or more collections from the dataset.", + "operationId" : "getVectorTile", + "parameters" : [ { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/tileMatrix" + }, { + "$ref" : "#/components/parameters/tileRow" + }, { + "$ref" : "#/components/parameters/tileCol" + }, { + "$ref" : "#/components/parameters/datetime" + }, { + "$ref" : "#/components/parameters/collections" + }, { + "$ref" : "#/components/parameters/f-vectorTile" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-vectorTile" + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/styles/{styleId}/tiles" : { + "get" : { + "tags" : [ "Vector Tiles" ], + "summary" : "Retrieve the list of vector tilesets intended for use with a specified style for the whole dataset ", + "operationId" : "listStyledVectorTilesets", + "parameters" : [ { + "$ref" : "#/components/parameters/styleId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "List of available tilesets.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tilesetsList" + } + } + } + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/styles/{styleId}/tiles/{tileMatrixSetId}" : { + "get" : { + "tags" : [ "Vector Tiles" ], + "summary" : "Retrieve a vector tileset intended for use with a specified style of the whole dataset for the specified tiling scheme (tile matrix set)", + "operationId" : "describeStyledVectorTileset", + "parameters" : [ { + "$ref" : "#/components/parameters/styleId" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "Description of the tileset.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tileSet" + } + } + } + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/styles/{styleId}/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}" : { + "get" : { + "tags" : [ "Vector Tiles" ], + "summary" : "Retrieve vector tiles intended for use with a specified style", + "operationId" : "getStyledVectorTile", + "parameters" : [ { + "$ref" : "#/components/parameters/styleId" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/tileMatrix" + }, { + "$ref" : "#/components/parameters/tileRow" + }, { + "$ref" : "#/components/parameters/tileCol" + }, { + "$ref" : "#/components/parameters/collections" + }, { + "$ref" : "#/components/parameters/datetime" + }, { + "$ref" : "#/components/parameters/f-vectorTile" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-vectorTile" + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/tiles" : { + "get" : { + "tags" : [ "Vector Tiles" ], + "summary" : "Retrieve a list of available vector tilesets for the specified collection.", + "operationId" : "listCollectionVectorTilesets", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-vectorTiles" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "List of available tilesets.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tilesetsList" + } + } + } + }, + "404" : { + "description" : "The requested collection id was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/tiles/{tileMatrixSetId}" : { + "get" : { + "tags" : [ "Vector Tiles" ], + "summary" : "Retrieve the vector tileset metadata for the specified collection and tiling scheme (tile matrix set)", + "operationId" : "describeCollectionVectorTileset", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-vectorTiles" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "Description of the tileset.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tileSet" + } + } + } + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}" : { + "get" : { + "tags" : [ "Vector Tiles" ], + "summary" : "Retrieve a vector tile from a collection.", + "operationId" : "getCollectionVectorTile", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-vectorTiles" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/tileMatrix" + }, { + "$ref" : "#/components/parameters/tileRow" + }, { + "$ref" : "#/components/parameters/tileCol" + }, { + "$ref" : "#/components/parameters/datetime" + }, { + "$ref" : "#/components/parameters/f-vectorTile" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-vectorTile" + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/styles/{styleId}/tiles" : { + "get" : { + "tags" : [ "Vector Tiles" ], + "summary" : "Retrieve a list of vector tilesets for the specified collection intended for use with a specified style", + "operationId" : "listCollectionStyledVectorTilesets", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-vectorTiles" + }, { + "$ref" : "#/components/parameters/styleId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "List of available tilesets.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tilesetsList" + } + } + } + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/styles/{styleId}/tiles/{tileMatrixSetId}" : { + "get" : { + "tags" : [ "Vector Tiles" ], + "summary" : "Retrieve the vector tileset metadata for the specified collection, style and tiling scheme (tile matrix set).", + "operationId" : "describeCollectionStyledVectorTileset", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-all" + }, { + "$ref" : "#/components/parameters/styleId" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "Description of the tileset.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tileSet" + } + } + } + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/styles/{styleId}/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}" : { + "get" : { + "tags" : [ "Vector Tiles" ], + "summary" : "Retrieve vector tiles for a specified collection, intended for use with a specified style", + "operationId" : "getCollectionStyledVectorTile", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-vectorTiles" + }, { + "$ref" : "#/components/parameters/styleId" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/tileMatrix" + }, { + "$ref" : "#/components/parameters/tileRow" + }, { + "$ref" : "#/components/parameters/tileCol" + }, { + "$ref" : "#/components/parameters/transparent" + }, { + "$ref" : "#/components/parameters/bgcolor" + }, { + "$ref" : "#/components/parameters/f-vectorTile" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-vectorTile" + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/processes/{processId}/tiles" : { + "post" : { + "summary" : "Submit a workflow for execution and retrieve a list of the tilesets for the results ", + "description" : "Post a workflow to set up deferred execution of it, obtaining a list of available tilesets for the results with links to resources supporting GET methods for all supportedTiles API execution/output retrieval mechanisms (equivalent to the modular synchronous Tiles API execution end-points supported)", + "operationId" : "execDeferredListVectorTilesets", + "tags" : [ "Vector Tiles" ], + "parameters" : [ { + "$ref" : "#/components/parameters/processId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "requestBody" : { + "description" : "Mandatory execute request JSON", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/execute" + }, + "examples" : { + "osmere" : { + "$ref" : "#/components/examples/osmere" + }, + "elevationContours" : { + "$ref" : "#/components/examples/elevationContours" + }, + "renderMap" : { + "$ref" : "#/components/examples/renderMap" + }, + "nestedWorkflow" : { + "$ref" : "#/components/examples/nestedWorkflow" + }, + "evis2" : { + "$ref" : "#/components/examples/EVISentinel2" + }, + "evis2-wcps" : { + "$ref" : "#/components/examples/EVISentinel2-WCPS" + } + } + } + } + }, + "responses" : { + "303" : { + "description" : "Successful, see other for GET-accessible resource", + "headers" : { + "Location" : { + "schema" : { + "type" : "string" + }, + "description" : "GET-accessible path for same result, which can also be used as a replacement to the /processes/{id} portion of the synchronous execution paths using GET, without having to re-submit (POST) the workflow." + } + }, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tilesetsList" + } + } + } + }, + "400" : { + "description" : "Invalid request", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "404" : { + "description" : "The process {id} does not exist.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "410" : { + "description" : "Resource has expired", + "headers" : { + "Cache-Control" : { + "description" : "410 is cachable by default, but deferred execution may come back online.", + "schema" : { + "type" : "string", + "enum" : [ "no-cache" ] + } + } + }, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "default" : { + "description" : "An error occured.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + } + } + } + }, + "/processes/{processId}/tiles/{tileMatrixSetId}" : { + "post" : { + "summary" : "Submit a workflow for execution and retrieve the tileset metadata of the results for the specified tiling scheme (tile matrix set)", + "description" : "Post a workflow to set up deferred execution of it for the specified supported TileMatrixSet, obtaining the tileset description resource with templated links to retrieve individual tiles via GET method, as well as information such as the tile limits for each tile matrix (equivalent to the capability available thorugh the modular synchronous Tiles API execution)", + "operationId" : "execDeferredDescribeVectorTileset", + "tags" : [ "Vector Tiles" ], + "parameters" : [ { + "$ref" : "#/components/parameters/processId" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "requestBody" : { + "description" : "Mandatory execute request JSON", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/execute" + }, + "examples" : { + "osmere" : { + "$ref" : "#/components/examples/osmere" + }, + "elevationContours" : { + "$ref" : "#/components/examples/elevationContours" + }, + "renderMap" : { + "$ref" : "#/components/examples/renderMap" + }, + "nestedWorkflow" : { + "$ref" : "#/components/examples/nestedWorkflow" + }, + "evis2" : { + "$ref" : "#/components/examples/EVISentinel2" + }, + "evis2-wcps" : { + "$ref" : "#/components/examples/EVISentinel2-WCPS" + } + } + } + } + }, + "responses" : { + "303" : { + "description" : "Successful, see other for GET-accessible resource", + "headers" : { + "Location" : { + "schema" : { + "type" : "string" + }, + "description" : "GET-accessible path for same result, which can also be used as a replacement to the /processes/{id} portion of the synchronous execution paths using GET, without having to re-submit (POST) the workflow." + } + }, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tileSet" + } + } + } + }, + "400" : { + "description" : "Invalid request", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "404" : { + "description" : "The process {id} does not exist.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "410" : { + "description" : "Resource has expired", + "headers" : { + "Cache-Control" : { + "description" : "410 is cachable by default, but deferred execution may come back online.", + "schema" : { + "type" : "string", + "enum" : [ "no-cache" ] + } + } + }, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "default" : { + "description" : "An error occured.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + } + } + } + }, + "/processes/{processId}/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}" : { + "post" : { + "summary" : "Submit a workflow for execution and retrieve a vector tile from the results", + "description" : "Post a workflow to synchronously retrieve vector tiles using MOAW extension", + "operationId" : "execSyncGetVectorTile", + "tags" : [ "Vector Tiles" ], + "parameters" : [ { + "$ref" : "#/components/parameters/processId" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/tileMatrix" + }, { + "$ref" : "#/components/parameters/tileRow" + }, { + "$ref" : "#/components/parameters/tileCol" + }, { + "$ref" : "#/components/parameters/f-vectorTile" + } ], + "requestBody" : { + "description" : "Mandatory execute request JSON", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/execute" + }, + "examples" : { + "osmere" : { + "$ref" : "#/components/examples/osmere" + }, + "elevationContours" : { + "$ref" : "#/components/examples/elevationContours" + }, + "renderMap" : { + "$ref" : "#/components/examples/renderMap" + }, + "nestedWorkflow" : { + "$ref" : "#/components/examples/nestedWorkflow" + }, + "evis2" : { + "$ref" : "#/components/examples/EVISentinel2" + }, + "evis2-wcps" : { + "$ref" : "#/components/examples/EVISentinel2-WCPS" + } + } + } + } + }, + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-vectorTile" + }, + "400" : { + "description" : "Invalid request", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "404" : { + "description" : "The process id does not exist.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "default" : { + "description" : "An error occured.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + } + } + } + }, + "/collections/{collectionId}/coverage" : { + "get" : { + "tags" : [ "Coverages" ], + "operationId" : "getCoverage", + "summary" : "Retrieve coverage data from a collection.", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-coverage" + }, { + "$ref" : "#/components/parameters/subset" + }, { + "$ref" : "#/components/parameters/scaleFactor" + }, { + "$ref" : "#/components/parameters/scaleAxes" + }, { + "$ref" : "#/components/parameters/scaleSize" + }, { + "$ref" : "#/components/parameters/bbox" + }, { + "$ref" : "#/components/parameters/f-coverage" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-coverage" + }, + "406" : { + "$ref" : "#/components/responses/NotAcceptable" + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/coverage/domainset" : { + "get" : { + "tags" : [ "Coverages" ], + "operationId" : "getCoverageDomainSet", + "summary" : "Retrieve the domain set of the coverage for the specified collection.", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-coverage" + }, { + "$ref" : "#/components/parameters/subset" + }, { + "$ref" : "#/components/parameters/scaleFactor" + }, { + "$ref" : "#/components/parameters/scaleAxes" + }, { + "$ref" : "#/components/parameters/scaleSize" + }, { + "$ref" : "#/components/parameters/bbox" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/DomainSet" + }, + "406" : { + "$ref" : "#/components/responses/NotAcceptable" + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/coverage/rangetype" : { + "get" : { + "tags" : [ "Coverages" ], + "operationId" : "getCoverageRangeType", + "summary" : "Retrieve the range type of the coverage for the specified collection.", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-coverage" + }, { + "$ref" : "#/components/parameters/subset" + }, { + "$ref" : "#/components/parameters/scaleFactor" + }, { + "$ref" : "#/components/parameters/scaleAxes" + }, { + "$ref" : "#/components/parameters/scaleSize" + }, { + "$ref" : "#/components/parameters/bbox" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/RangeType" + }, + "406" : { + "$ref" : "#/components/responses/NotAcceptable" + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/processes/{processId}/coverage" : { + "post" : { + "summary" : "Submit a workflow for execution and retrieve the results as a coverage", + "description" : "Post a workflow to synchronously retrieve coverage data using MOAW extension", + "operationId" : "execSyncGetCoverage", + "tags" : [ "Coverages" ], + "parameters" : [ { + "$ref" : "#/components/parameters/processId" + }, { + "$ref" : "#/components/parameters/f-coverage" + } ], + "requestBody" : { + "description" : "Mandatory execute request JSON", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/execute" + }, + "examples" : { + "EVISentinel2" : { + "$ref" : "#/components/examples/EVISentinel2" + }, + "EVISentinel2-WCPS" : { + "$ref" : "#/components/examples/EVISentinel2-WCPS" + } + } + } + } + }, + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-coverage" + }, + "400" : { + "description" : "Invalid request", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "404" : { + "description" : "The process {id} does not exist.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "default" : { + "description" : "An error occured.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + } + } + } + }, + "/collections/{collectionId}/coverage/tiles" : { + "get" : { + "tags" : [ "Coverage Tiles" ], + "operationId" : "listCollectionCoverageTileSets", + "summary" : "Retrieve the list of available coverage tilesets for the specified collection.", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-coverage" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "List of available tilesets.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tilesetsList" + } + } + } + }, + "404" : { + "description" : "The requested collection id was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/coverage/tiles/{tileMatrixSetId}" : { + "get" : { + "tags" : [ "Coverage Tiles" ], + "operationId" : "describeCollectionCoverageTileSet", + "summary" : "Retrieve the coverage tileset metadata for the specified collection and tiling scheme (tile matrix set)", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-coverage" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "Description of the tileset.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tileSet" + } + } + } + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/coverage/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}" : { + "get" : { + "tags" : [ "Coverage Tiles" ], + "operationId" : "getCollectionCoverageTile", + "summary" : "Retrieve a coverage tile", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-coverage" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/tileMatrix" + }, { + "$ref" : "#/components/parameters/tileRow" + }, { + "$ref" : "#/components/parameters/tileCol" + }, { + "$ref" : "#/components/parameters/datetime" + }, { + "$ref" : "#/components/parameters/f-coverageTile" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-coverageTile" + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/processes/{processId}/coverage/tiles" : { + "post" : { + "summary" : "Submit a workflow for execution and retrieve the list of resulting coverage tilesets", + "description" : "Post a workflow to set up deferred execution of it, obtaining a list of available map tilesets for the results with links to resources supporting GET methods for all supported combined Map Tiles API execution/output retrieval mechanisms (equivalent to the modular synchronous Map Tiles API execution end-points supported)", + "tags" : [ "Coverage Tiles" ], + "operationId" : "execDeferredListCoverageTileSets", + "parameters" : [ { + "$ref" : "#/components/parameters/processId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "requestBody" : { + "description" : "Mandatory execute request JSON", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/execute" + }, + "examples" : { + "renderMap" : { + "$ref" : "#/components/examples/renderMap" + }, + "nestedWorkflow" : { + "$ref" : "#/components/examples/nestedWorkflow" + }, + "evis2" : { + "$ref" : "#/components/examples/EVISentinel2" + }, + "evis2-wcps" : { + "$ref" : "#/components/examples/EVISentinel2-WCPS" + } + } + } + } + }, + "responses" : { + "303" : { + "description" : "Successful, see other for GET-accessible resource", + "headers" : { + "Location" : { + "schema" : { + "type" : "string" + }, + "description" : "GET-accessible path for same result, which can also be used as a replacement to the /processes/{id} portion of the synchronous execution paths using GET, without having to re-submit (POST) the workflow." + } + }, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tilesetsList" + } + } + } + }, + "400" : { + "description" : "Invalid request", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "404" : { + "description" : "The process {id} does not exist.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "410" : { + "description" : "Resource has expired", + "headers" : { + "Cache-Control" : { + "description" : "410 is cachable by default, but deferred execution may come back online.", + "schema" : { + "type" : "string", + "enum" : [ "no-cache" ] + } + } + }, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "default" : { + "description" : "An error occured.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + } + } + } + }, + "/processes/{processId}/coverage/tiles/{tileMatrixSetId}" : { + "post" : { + "summary" : "Submit a workflow for deferred execution and retrieve the coverage tileset metadata for the results and the specified tiling scheme (tile matrix set)", + "description" : "Post a workflow to set up deferred execution of it for the specified supported TileMatrixSet, obtaining the tileset description resource with templated links to retrieve individual tiles via GET method, as well as information such as the tile limits for each tile matrix (equivalent to the capability available thorugh the modular synchronous Tiles API execution)", + "tags" : [ "Coverage Tiles" ], + "operationId" : "execDeferredDescribeCoverageTileSet", + "parameters" : [ { + "$ref" : "#/components/parameters/processId" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "requestBody" : { + "description" : "Mandatory execute request JSON", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/execute" + }, + "examples" : { + "renderMap" : { + "$ref" : "#/components/examples/renderMap" + }, + "nestedWorkflow" : { + "$ref" : "#/components/examples/nestedWorkflow" + }, + "evis2" : { + "$ref" : "#/components/examples/EVISentinel2" + }, + "evis2-wcps" : { + "$ref" : "#/components/examples/EVISentinel2-WCPS" + } + } + } + } + }, + "responses" : { + "303" : { + "description" : "Successful, see other for GET-accessible resource", + "headers" : { + "Location" : { + "schema" : { + "type" : "string" + }, + "description" : "GET-accessible path for same result, which can also be used as a replacement to the /processes/{id} portion of the synchronous execution paths using GET, without having to re-submit (POST) the workflow." + } + }, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tileSet" + } + } + } + }, + "400" : { + "description" : "Invalid request", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "404" : { + "description" : "The process {id} does not exist.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "410" : { + "description" : "Resource has expired", + "headers" : { + "Cache-Control" : { + "description" : "410 is cachable by default, but deferred execution may come back online.", + "schema" : { + "type" : "string", + "enum" : [ "no-cache" ] + } + } + }, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "default" : { + "description" : "An error occured.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + } + } + } + }, + "/processes/{processId}/coverage/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}" : { + "post" : { + "summary" : "Submit a workflow for execution and retrieve a single coverage tile of the results.", + "description" : "Post a workflow to synchronously retrieve coverage tiles using MOAW extension", + "tags" : [ "Coverage Tiles" ], + "operationId" : "execSyncGetCoverageTile", + "parameters" : [ { + "$ref" : "#/components/parameters/processId" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/tileMatrix" + }, { + "$ref" : "#/components/parameters/tileRow" + }, { + "$ref" : "#/components/parameters/tileCol" + }, { + "$ref" : "#/components/parameters/f-coverageTile" + } ], + "requestBody" : { + "description" : "Mandatory execute request JSON", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/execute" + }, + "examples" : { + "renderMap" : { + "$ref" : "#/components/examples/renderMap" + }, + "nestedWorkflow" : { + "$ref" : "#/components/examples/nestedWorkflow" + }, + "evis2" : { + "$ref" : "#/components/examples/EVISentinel2" + }, + "evis2-wcps" : { + "$ref" : "#/components/examples/EVISentinel2-WCPS" + } + } + } + } + }, + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-coverageTile" + }, + "400" : { + "description" : "Invalid request", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "404" : { + "description" : "The process id does not exist.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "default" : { + "description" : "An error occured.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + } + } + } + }, + "/map" : { + "get" : { + "tags" : [ "Maps" ], + "summary" : "Retrieve a default map for the whole dataset", + "operationId" : "getMap", + "parameters" : [ { + "$ref" : "#/components/parameters/bbox" + }, { + "$ref" : "#/components/parameters/datetime" + }, { + "$ref" : "#/components/parameters/subset" + }, { + "$ref" : "#/components/parameters/transparent" + }, { + "$ref" : "#/components/parameters/bgcolor" + }, { + "$ref" : "#/components/parameters/f-map" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-map" + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/styles/{styleId}/map" : { + "get" : { + "tags" : [ "Maps" ], + "summary" : "Retrieve a map of the specified style for the whole dataset", + "operationId" : "getStyledMap", + "parameters" : [ { + "$ref" : "#/components/parameters/styleId" + }, { + "$ref" : "#/components/parameters/bbox" + }, { + "$ref" : "#/components/parameters/datetime" + }, { + "$ref" : "#/components/parameters/subset" + }, { + "$ref" : "#/components/parameters/transparent" + }, { + "$ref" : "#/components/parameters/bgcolor" + }, { + "$ref" : "#/components/parameters/f-map" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-map" + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/map" : { + "get" : { + "tags" : [ "Maps" ], + "summary" : "Retrieve the default map for the specified collection", + "operationId" : "getCollectionMap", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-all" + }, { + "$ref" : "#/components/parameters/bbox" + }, { + "$ref" : "#/components/parameters/datetime" + }, { + "$ref" : "#/components/parameters/subset" + }, { + "$ref" : "#/components/parameters/transparent" + }, { + "$ref" : "#/components/parameters/bgcolor" + }, { + "$ref" : "#/components/parameters/f-map" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-map" + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/styles/{styleId}/map" : { + "get" : { + "tags" : [ "Maps" ], + "summary" : "Retrieve a map of the specified collection and style", + "operationId" : "getCollectionStyledMap", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-all" + }, { + "$ref" : "#/components/parameters/styleId" + }, { + "$ref" : "#/components/parameters/bbox" + }, { + "$ref" : "#/components/parameters/datetime" + }, { + "$ref" : "#/components/parameters/subset" + }, { + "$ref" : "#/components/parameters/transparent" + }, { + "$ref" : "#/components/parameters/bgcolor" + }, { + "$ref" : "#/components/parameters/f-map" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-map" + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/processes/{processId}/map" : { + "post" : { + "summary" : "Submit a workflow for execution and retrieve the results as a map", + "description" : "Post a workflow to set up deferred execution of it, obtaining a link to a map resource for the results supporting GET methods for all supported Maps API execution/output retrieval mechanisms (equivalent to the modular synchronous Maps API execution end-points supported)", + "operationId" : "execSyncGetMap", + "tags" : [ "Maps" ], + "parameters" : [ { + "$ref" : "#/components/parameters/processId" + }, { + "$ref" : "#/components/parameters/bbox" + }, { + "$ref" : "#/components/parameters/datetime" + }, { + "$ref" : "#/components/parameters/subset" + }, { + "$ref" : "#/components/parameters/transparent" + }, { + "$ref" : "#/components/parameters/bgcolor" + }, { + "$ref" : "#/components/parameters/f-map" + } ], + "requestBody" : { + "description" : "Mandatory execute request JSON", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/execute" + }, + "examples" : { + "elevationContours" : { + "$ref" : "#/components/examples/elevationContours" + }, + "osmere" : { + "$ref" : "#/components/examples/osmere" + }, + "renderMap" : { + "$ref" : "#/components/examples/renderMap" + }, + "nestedWorkflow" : { + "$ref" : "#/components/examples/nestedWorkflow" + }, + "evis2" : { + "$ref" : "#/components/examples/EVISentinel2" + }, + "evis2-wcps" : { + "$ref" : "#/components/examples/EVISentinel2-WCPS" + } + } + } + } + }, + "responses" : { + "303" : { + "$ref" : "#/components/responses/content-map" + }, + "400" : { + "description" : "Invalid request", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "404" : { + "description" : "The process {id} does not exist.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "410" : { + "description" : "Resource has expired", + "headers" : { + "Cache-Control" : { + "description" : "410 is cachable by default, but deferred execution may come back online.", + "schema" : { + "type" : "string", + "enum" : [ "no-cache" ] + } + } + }, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "default" : { + "description" : "An error occured.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + } + } + } + }, + "/map/tiles" : { + "get" : { + "tags" : [ "Map Tiles" ], + "summary" : "Retrieve the list of all default map tilesets for the whole dataset", + "operationId" : "listMapTileSets", + "parameters" : [ { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "List of available tilesets.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tilesetsList" + } + } + } + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/map/tiles/{tileMatrixSetId}" : { + "get" : { + "tags" : [ "Map Tiles" ], + "summary" : "Retrieve a default map tileset of the whole dataset for the specified tiling scheme (tile matrix set)", + "operationId" : "describeMapTileSet", + "parameters" : [ { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "Description of the tileset.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tileSet" + } + } + } + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/map/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}" : { + "get" : { + "tags" : [ "Map Tiles" ], + "summary" : "Retrieve a default map tile of the whole dataset", + "operationId" : "getMapTile", + "parameters" : [ { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/tileMatrix" + }, { + "$ref" : "#/components/parameters/tileRow" + }, { + "$ref" : "#/components/parameters/tileCol" + }, { + "$ref" : "#/components/parameters/collections" + }, { + "$ref" : "#/components/parameters/transparent" + }, { + "$ref" : "#/components/parameters/bgcolor" + }, { + "$ref" : "#/components/parameters/f-mapTile" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-mapTile" + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/styles/{styleId}/map/tiles" : { + "get" : { + "tags" : [ "Map Tiles" ], + "summary" : "Retrieve the list of styled map tilesets for the whole dataset ", + "operationId" : "listStyledMapTileSets", + "parameters" : [ { + "$ref" : "#/components/parameters/styleId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "List of available tilesets.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tilesetsList" + } + } + } + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/styles/{styleId}/map/tiles/{tileMatrixSetId}" : { + "get" : { + "tags" : [ "Map Tiles" ], + "summary" : "Retrieve a styled map tileset of the whole dataset for the specified tiling scheme (tile matrix set)", + "operationId" : "describeStyledMapTileSet", + "parameters" : [ { + "$ref" : "#/components/parameters/styleId" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "Description of the tileset.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tileSet" + } + } + } + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/styles/{styleId}/map/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}" : { + "get" : { + "tags" : [ "Map Tiles" ], + "summary" : "Retrieve a styled map tiles", + "operationId" : "getStyledMapTile", + "parameters" : [ { + "$ref" : "#/components/parameters/styleId" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/tileMatrix" + }, { + "$ref" : "#/components/parameters/tileRow" + }, { + "$ref" : "#/components/parameters/tileCol" + }, { + "$ref" : "#/components/parameters/collections" + }, { + "$ref" : "#/components/parameters/datetime" + }, { + "$ref" : "#/components/parameters/transparent" + }, { + "$ref" : "#/components/parameters/bgcolor" + }, { + "$ref" : "#/components/parameters/f-mapTile" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-mapTile" + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/map/tiles" : { + "get" : { + "tags" : [ "Map Tiles" ], + "summary" : "Retrieve a list of all map tilesets for specified collection.", + "operationId" : "listCollectionMapTileSets", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-all" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "List of available tilesets.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tilesetsList" + } + } + } + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/map/tiles/{tileMatrixSetId}" : { + "get" : { + "tags" : [ "Map Tiles" ], + "summary" : "Retrieve a map tile set metadata for the specified collection and tiling scheme (tile matrix set)^", + "operationId" : "describeCollectionMapTileSet", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-all" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "Description of the tileset.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tileSet" + } + } + } + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/map/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}" : { + "get" : { + "tags" : [ "Map Tiles" ], + "summary" : "Retrieve a map tile from the specified collection", + "operationId" : "getCollectionMapTile", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-all" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/tileMatrix" + }, { + "$ref" : "#/components/parameters/tileRow" + }, { + "$ref" : "#/components/parameters/tileCol" + }, { + "$ref" : "#/components/parameters/transparent" + }, { + "$ref" : "#/components/parameters/bgcolor" + }, { + "$ref" : "#/components/parameters/f-mapTile" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-mapTile" + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/styles/{styleId}/map/tiles" : { + "get" : { + "tags" : [ "Map Tiles" ], + "summary" : "Retrieve a list of styled map tilesets for the specified collection", + "operationId" : "listCollectionStyledMapTileSets", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-all" + }, { + "$ref" : "#/components/parameters/styleId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "List of available tilesets.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tilesetsList" + } + } + } + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/styles/{styleId}/map/tiles/{tileMatrixSetId}" : { + "get" : { + "tags" : [ "Map Tiles" ], + "summary" : "Retrieve the map tileset metadata for the specified collection, style and tiling scheme (tile matrix set).", + "operationId" : "describeCollectionStyledMapTileSet", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-all" + }, { + "$ref" : "#/components/parameters/styleId" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "Description of the tileset.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tileSet" + } + } + } + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/styles/{styleId}/map/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}" : { + "get" : { + "tags" : [ "Map Tiles" ], + "summary" : "Retrieve a map tile for a specified collection and style", + "operationId" : "getCollectionStyledMapTile", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-all" + }, { + "$ref" : "#/components/parameters/styleId" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/tileMatrix" + }, { + "$ref" : "#/components/parameters/tileRow" + }, { + "$ref" : "#/components/parameters/tileCol" + }, { + "$ref" : "#/components/parameters/transparent" + }, { + "$ref" : "#/components/parameters/bgcolor" + }, { + "$ref" : "#/components/parameters/f-mapTile" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-mapTile" + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/processes/{processId}/map/tiles" : { + "post" : { + "summary" : "Submit a workflow for execution and retrieve the list of resulting map tilesets", + "operationId" : "execDeferredListMapTileSets", + "tags" : [ "Map Tiles" ], + "parameters" : [ { + "$ref" : "#/components/parameters/processId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "requestBody" : { + "description" : "Mandatory execute request JSON", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/execute" + }, + "examples" : { + "elevationContours" : { + "$ref" : "#/components/examples/elevationContours" + }, + "osmere" : { + "$ref" : "#/components/examples/osmere" + }, + "renderMap" : { + "$ref" : "#/components/examples/renderMap" + }, + "nestedWorkflow" : { + "$ref" : "#/components/examples/nestedWorkflow" + }, + "evis2" : { + "$ref" : "#/components/examples/EVISentinel2" + }, + "evis2-wcps" : { + "$ref" : "#/components/examples/EVISentinel2-WCPS" + } + } + } + } + }, + "responses" : { + "303" : { + "description" : "Successful, see other for GET-accessible resource", + "headers" : { + "Location" : { + "schema" : { + "type" : "string" + }, + "description" : "GET-accessible path for same result, which can also be used as a replacement to the /processes/{id} portion of the synchronous execution paths using GET, without having to re-submit (POST) the workflow." + } + }, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tilesetsList" + } + } + } + }, + "400" : { + "description" : "Invalid request", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "404" : { + "description" : "The process {id} does not exist.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "410" : { + "description" : "Resource has expired", + "headers" : { + "Cache-Control" : { + "description" : "410 is cachable by default, but deferred execution may come back online.", + "schema" : { + "type" : "string", + "enum" : [ "no-cache" ] + } + } + }, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "default" : { + "description" : "An error occured.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + } + } + } + }, + "/processes/{processId}/map/tiles/{tileMatrixSetId}" : { + "post" : { + "summary" : "Submit a workflow for execution and retrieve the map tileset metadata for a specified tiling scheme (tile matrix set)", + "description" : "Post a workflow to set up deferred execution of it for the specified supported TileMatrixSet, obtaining the map tileset description resource with templated links to retrieve individual map tiles via GET method, as well as information such as the tile limits for each tile matrix (equivalent to the capability available through the modular synchronous Tiles API execution)", + "operationId" : "execDeferredDescribeMapTileSet", + "tags" : [ "Map Tiles" ], + "parameters" : [ { + "$ref" : "#/components/parameters/processId" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "requestBody" : { + "description" : "Mandatory execute request JSON", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/execute" + }, + "examples" : { + "elevationContours" : { + "$ref" : "#/components/examples/elevationContours" + }, + "osmere" : { + "$ref" : "#/components/examples/osmere" + }, + "renderMap" : { + "$ref" : "#/components/examples/renderMap" + }, + "nestedWorkflow" : { + "$ref" : "#/components/examples/nestedWorkflow" + }, + "evis2" : { + "$ref" : "#/components/examples/EVISentinel2" + }, + "evis2-wcps" : { + "$ref" : "#/components/examples/EVISentinel2-WCPS" + } + } + } + } + }, + "responses" : { + "303" : { + "description" : "Successful, see other for GET-accessible resource", + "headers" : { + "Location" : { + "schema" : { + "type" : "string" + }, + "description" : "GET-accessible path for same result, which can also be used as a replacement to the /processes/{id} portion of the synchronous execution paths using GET, without having to re-submit (POST) the workflow." + } + }, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/tileSet" + } + } + } + }, + "400" : { + "description" : "Invalid request", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "404" : { + "description" : "The process {id} does not exist.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "410" : { + "description" : "Resource has expired", + "headers" : { + "Cache-Control" : { + "description" : "410 is cachable by default, but deferred execution may come back online.", + "schema" : { + "type" : "string", + "enum" : [ "no-cache" ] + } + } + }, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "default" : { + "description" : "An error occured.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + } + } + } + }, + "/processes/{processId}/map/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}" : { + "post" : { + "summary" : "Submit a workflow for execution and retrieve a map tile of the results", + "description" : "Post a workflow to synchronously retrieve map tiles using MOAW extension", + "operationId" : "execSyncGetMapTile", + "tags" : [ "Map Tiles" ], + "parameters" : [ { + "$ref" : "#/components/parameters/processId" + }, { + "$ref" : "#/components/parameters/tileMatrixSetId" + }, { + "$ref" : "#/components/parameters/tileMatrix" + }, { + "$ref" : "#/components/parameters/tileRow" + }, { + "$ref" : "#/components/parameters/tileCol" + }, { + "$ref" : "#/components/parameters/datetime" + }, { + "$ref" : "#/components/parameters/transparent" + }, { + "$ref" : "#/components/parameters/bgcolor" + }, { + "$ref" : "#/components/parameters/f-mapTile" + } ], + "requestBody" : { + "description" : "Mandatory execute request JSON", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/execute" + }, + "examples" : { + "elevationContours" : { + "$ref" : "#/components/examples/elevationContours" + }, + "osmere" : { + "$ref" : "#/components/examples/osmere" + }, + "renderMap" : { + "$ref" : "#/components/examples/renderMap" + }, + "nestedWorkflow" : { + "$ref" : "#/components/examples/nestedWorkflow" + }, + "evis2" : { + "$ref" : "#/components/examples/EVISentinel2" + }, + "evis2-wcps" : { + "$ref" : "#/components/examples/EVISentinel2-WCPS" + } + } + } + } + }, + "responses" : { + "200" : { + "$ref" : "#/components/responses/content-mapTile" + }, + "400" : { + "description" : "Invalid request", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "404" : { + "description" : "The process {id} does not exist.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "default" : { + "description" : "An error occured.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + } + } + } + }, + "/styles" : { + "get" : { + "tags" : [ "Styles" ], + "summary" : "Retrieve information about the available styles", + "operationId" : "listStyles", + "parameters" : [ { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "the set of available styles", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/stylesList" + } + } + } + }, + "400" : { + "description" : "invalid or unknown query parameters" + }, + "406" : { + "description" : "The media types accepted by the client are not \nsupported for this resource" + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/styles/{styleId}" : { + "get" : { + "tags" : [ "Styles" ], + "summary" : "Retrieve a style by id", + "operationId" : "getStyle", + "parameters" : [ { + "$ref" : "#/components/parameters/styleId" + }, { + "$ref" : "#/components/parameters/f-style" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/response-style" + }, + "404" : { + "description" : "style not found" + }, + "406" : { + "description" : "The requested style encoding is not supported \nfor this style" + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/styles" : { + "get" : { + "tags" : [ "Styles" ], + "summary" : "Retrieve a list of styles for the specified collection", + "operationId" : "listCollectionStyles", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-all" + }, { + "$ref" : "#/components/parameters/f-metadata" + } ], + "responses" : { + "200" : { + "description" : "List of styles for the specified collection.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/stylesList" + } + } + } + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + }, + "/collections/{collectionId}/styles/{styleId}" : { + "get" : { + "tags" : [ "Styles" ], + "summary" : "Retrieve the specified style for a particular collection", + "operationId" : "getCollectionStyle", + "parameters" : [ { + "$ref" : "#/components/parameters/collectionId-all" + }, { + "$ref" : "#/components/parameters/styleId" + }, { + "$ref" : "#/components/parameters/f-style" + } ], + "responses" : { + "200" : { + "$ref" : "#/components/responses/response-style" + }, + "404" : { + "description" : "The requested URI was not found", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + } + } + }, + "500" : { + "$ref" : "#/components/responses/ServerError" + } + } + } + } + }, + "components" : { + "examples" : { + "renderMap" : { + "summary" : "A sample RenderMap execution (Workflows)", + "value" : { + "id" : "SampleRenderMapExecution", + "process" : "https://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/processes/RenderMap", + "inputs" : { + "transparent": false, + "bgColor" : "002040", + "layers": [ + { "collection" : "https://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:bathymetry" }, + { "collection" : "https://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/collections/SRTM_ViewFinderPanorama" } + ] + } + } + }, + "renderMapSync" : { + "summary" : "A sample RenderMap execution", + "value" : { + "process" : "https://maps.ecere.com/processes/RenderMap", + "inputs" : { + "background" : "navy", + "transparent" : false, + "layers" : [ + { "href" : "https://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/collections/SRTM_ViewFinderPanorama/coverage?subset=Lat(0:45),Lon(0:45)&scaleFactor=128&f=image/tiff" } + ] + } + } + }, + "elevationContours" : { + "summary" : "Generate contours from elevation data (Workflows)", + "value" : { + "id" : "SampleElevationContoursExecution", + "process" : "https://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/processes/ElevationContours", + "inputs" : { + "data": { "collection" : "https://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/collections/SRTM_ViewFinderPanorama" }, + "distance": 1000 + } + } + }, + "elevationContoursSync" : { + "summary" : "Generate contours from elevation data", + "value" : { + "process" : "https://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/processes/ElevationContours", + "inputs" : { + "data" : { "href" : "https://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/collections/SRTM_ViewFinderPanorama/coverage?subset=Lat(0:45),Lon(0:45)&scaleFactor=128&f=image/tiff" }, + "distance" : 1000, + "minHeight" : -11000, + "maxHeight" : 9000, + "geometryType" : "lines" + } + } + }, + "osmere" : { + "summary" : "Compute a route in Washington D.C.", + "value" : { + "process" : "https://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/processes/OSMERE", + "inputs" : { + "dataset" : "dc", + "preference" : "fastest", + "mode" : "motor", + "waypoints" : { "value" : { + "type" : "MultiPoint", + "coordinates" : [ + [ -77.047712, 38.892346 ], + [ -76.99473, 38.902629 ] + ] + } } + } + } + }, + "nestedSync" : { + "summary" : "Example workflow with nested processing", + "value" : { + "process" : "https://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/processes/RenderMap", + "inputs" : { + "background" : "gray", + "transparent" : false, + "layers" : [ + { "href" : "https://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/collections/osm:dc/map.tif?width=2458" }, + { + "process" : "https://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/processes/OSMERE", + "inputs" : { + "dataset" : "dc", + "preference" : "fastest", + "mode" : "motor", + "waypoints" : { "value" : { + "type" : "MultiPoint", + "coordinates" : [ + [ -77.047712, 38.892346 ], + [ -76.99473, 38.902629 ] + ] + } } + } + } + ] + } + } + }, + "nestedWorkflow" : { + "summary" : "Example workflow with nested processing", + "value" : { + "id" : "SampleNestedWorkflow", + "process" : "https://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/processes/RenderMap", + "inputs" : { + "transparent": false, + "layers": [ + { "collection" : "https://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:bathymetry" }, + { "collection" : "https://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/collections/SRTM_ViewFinderPanorama" }, + { + "process" : "https://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/processes/ElevationContours", + "inputs" : { + "data": { "collection" : "https://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/collections/SRTM_ViewFinderPanorama" }, + "distance": 500 + } + } + ] + } + } + }, + "EVISentinel2" : { + "summary" : "Enhanced Vegetation Index on sentinel-2 using theoretical CPL", + "description" : "This workflow calculates an Enhanced Vegetation Index on sentinel-2 data using a theoretical Coverage Processing Language.", + "value" : { + "id" : "EVISentinel2", + "process" : "http://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/processes/CoverageProcessor", + "inputs" : { + "data": { "collection" : "http://rasdaman.orghttp://127.0.0.1:8080/fakeogcapi/collections/sentinel-2" }, + "code": "double BLUE = data[bands:'B02'], RED = data[bands:'B04'], NIR = data[bands:'B08']; return min[time](2.5 * (NIR - RED) / (1 + NIR + 6*RED + -7.5*BLUE));" + } + } + }, + "EVISentinel2-WCPS" : { + "summary" : "EVI S2 - Attempt at integrating WCPS", + "description" : "This is an attempt at parameterizing WCPS in a way that simple text substitution could enable its use as part of Modular OGC API Workflows.", + "value" : { + "id" : "EVISentinel2-WCPS", + "process" : "http://maps.ecere.comhttp://127.0.0.1:8080/fakeogcapi/processes/wcps", + "inputs" : { + "data": { "collection" : "http://rasdaman.orghttp://127.0.0.1:8080/fakeogcapi/collections/sentinel-2" }, + "code": "for $c in ({data})\n let $blue := $c.b02, $red = $c.b04, $nir = $c.b08\n return\n encode(\n scale(\n extend(\n condense min over $c time({timeRange}) values\n 2.5 * ($nir - $red) / (1 + $nir + 6 * $red + -7.5 * $blue),\n { Lat({latRange}, Long({longRange}) }\n ),\n { Long:\"CRS:1\"(0:{right}), Lat:\"CRS:1\"(0:{bottom}) }\n ),\n {format}\n )\n" + } + } + } + }, + "parameters" : { + "bbox" : { + "name" : "bbox", + "in" : "query", + "description" : "Only features that have a geometry that intersects the bounding box are selected.\nThe bounding box is provided as four or six numbers, depending on whether the\ncoordinate reference system includes a vertical axis (height or depth):\n* Lower left corner, coordinate axis 1\n* Lower left corner, coordinate axis 2\n* Minimum value, coordinate axis 3 (optional)\n* Upper right corner, coordinate axis 1\n* Upper right corner, coordinate axis 2\n* Maximum value, coordinate axis 3 (optional)\nThe coordinate reference system of the values is WGS 84 longitude/latitude\n(http://www.opengis.net/def/crs/OGC/1.3/CRS84) unless a different coordinate\nreference system is specified in the parameter `bbox-crs`.\nFor WGS 84 longitude/latitude the values are in most cases the sequence of\nminimum longitude, minimum latitude, maximum longitude and maximum latitude.\nHowever, in cases where the box spans the antimeridian the first value\n(west-most box edge) is larger than the third value (east-most box edge).\nIf the vertical axis is included, the third and the sixth number are\nthe bottom and the top of the 3-dimensional bounding box.\nIf a feature has multiple spatial geometry properties, it is the decision of the\nserver whether only a single spatial geometry property is used to determine\nthe extent or all relevant geometries.", + "required" : false, + "schema" : { + "type" : "array", + "minItems" : 4, + "maxItems" : 6, + "items" : { + "type" : "number", + "format" : "double" + } + }, + "style" : "form", + "explode" : false + }, + "collectionId-all" : { + "name" : "collectionId", + "in" : "path", + "description" : "Local identifier of a collection", + "required" : true, + "allowEmptyValue" : false, + "schema" : { + "$ref" : "#/components/schemas/all-collection-list" + } + }, + "collectionId-features" : { + "name" : "collectionId", + "in" : "path", + "description" : "Local identifier of a feature collection", + "required" : true, + "allowEmptyValue" : false, + "schema" : { + "$ref" : "#/components/schemas/feature-collection-list" + } + }, + "collectionId-vectorTiles" : { + "name" : "collectionId", + "in" : "path", + "description" : "Local identifier of a vector tile collection", + "required" : true, + "allowEmptyValue" : false, + "schema" : { + "$ref" : "#/components/schemas/vectorTile-collection-list" + } + }, + "collectionId-coverage" : { + "name" : "collectionId", + "in" : "path", + "description" : "Local identifier of a coverage collection", + "required" : true, + "allowEmptyValue" : false, + "schema" : { + "$ref" : "#/components/schemas/coverage-collection-list" + }, + "style" : "simple", + "explode" : false + }, + "datetime" : { + "name" : "datetime", + "in" : "query", + "description" : "Either a date-time or an interval, open or closed. Date and time expressions\nadhere to RFC 3339. Open intervals are expressed using double-dots.\nExamples:\n* A date-time: \"2018-02-12T23:20:50Z\"\n* A closed interval: \"2018-02-12T00:00:00Z/2018-03-18T12:31:12Z\"\n* Open intervals: \"2018-02-12T00:00:00Z/..\" or \"../2018-03-18T12:31:12Z\"\nOnly features that have a temporal property that intersects the value of\n`datetime` are selected.\nIf a feature has multiple temporal properties, it is the decision of the\nserver whether only a single temporal property is used to determine\nthe extent or all relevant temporal properties.", + "required" : false, + "schema" : { + "type" : "string" + }, + "style" : "form", + "explode" : false + }, + "featureId" : { + "name" : "featureId", + "in" : "path", + "description" : "Identifier of a feature", + "required" : true, + "schema" : { + "type" : "string" + } + }, + "f-vector" : { + "name" : "f", + "in" : "query", + "description" : "The format of the vector data response (e.g. json). Accepted values are 'html', 'json' (GeoJSON) or 'mvt' (Mapbox Vector Tiles).", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "html", "json", "mvt" ] + }, + "style" : "form", + "explode" : false + }, + "f-vectorTile" : { + "name" : "f", + "in" : "query", + "description" : "The format of the vector tile response (e.g. json). Accepted values are 'html', 'json' (GeoJSON), 'mvt' (Mapbox Vector Tiles) or 'gmt' (GNOSIS Map Tiles).", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "html", "json", "mvt", "gmt" ] + }, + "style" : "form", + "explode" : false + }, + "f-coverage" : { + "name" : "f", + "in" : "query", + "description" : "The coverage data format of the response (e.g. tiff). Accepted values are 'tiff' (GeoTIFF), 'png' or 'html'.", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "png", "tiff", "html" ] + }, + "style" : "form", + "explode" : false + }, + "f-coverageTile" : { + "name" : "f", + "in" : "query", + "description" : "The format of the coverage tile response (e.g. tiff). Accepted values are 'tiff' (GeoTIFF), 'png', 'gmt' (GNOSIS Map Tiles) or 'html'.", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "png", "tiff", "gmt", "html" ] + }, + "style" : "form", + "explode" : false + }, + "f-map" : { + "name" : "f", + "in" : "query", + "description" : "The format of the map data response (e.g. png). Accepted values are 'png', 'jpg', 'tiff' (GeoTIFF), or 'html'.", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "png", "jpg", "tiff", "gmt", "html" ] + }, + "style" : "form", + "explode" : false + }, + "f-mapTile" : { + "name" : "f", + "in" : "query", + "description" : "The format of the map tile response (e.g. png). Accepted values are 'png', 'jpg', 'tiff' (GeoTIFF), 'gmt' (GNOSIS Map Tiles) or 'html'.", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "png", "jpg", "tiff", "gmt", "html" ] + }, + "style" : "form", + "explode" : false + }, + "f-metadata" : { + "name" : "f", + "in" : "query", + "description" : "The format of the response. If no value is provided, the accept header is used to determine the format. Accepted values are 'json', 'econ' or 'html'.", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "json", "econ", "html" ] + }, + "style" : "form", + "explode" : false + }, + "f-style" : { + "name" : "f", + "in" : "query", + "description" : "The format of the style sheet response. If no value is provided, the accept header is used to determine the format. Accepted values are 'mbstyle' (Mapbox GL Styling), 'sld' (OGC Styled Layer Description/Symbology Encoding 1.0), cmss (GNOSIS Cascading Map Style Sheets) or 'html'.", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "mbstyle", "sld", "cmss", "html" ] + }, + "style" : "form", + "explode" : false + }, + "collections" : { + "name" : "collections", + "in" : "query", + "style" : "form", + "description" : "The collections that should be included in the response. The parameter value is a comma-separated list of collection identifiers. If the parameters is missing, some or all collections will be included. The collection will be rendered in the order specified, with the last one showing on top, unless the priority is overridden by styling rules.", + "required" : false, + "explode" : false, + "schema" : + { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/all-collection-list" + } + } + }, + "filter" : { + "name" : "filter", + "in" : "query", + "description" : "A query filter supported by this service.", + "required" : false, + "schema" : { + "type" : "string" + }, + "style" : "form", + "explode" : true + }, + "filter-lang" : { + "name" : "filter-lang", + "in" : "query", + "description" : "A query filter-lang supported by this service (only CMSS is currently supported).", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "cmss" ] + }, + "style" : "form", + "explode" : true + }, + "filter-crs" : { + "name" : "filter-crs", + "in" : "query", + "required" : false, + "schema" : { + "type" : "string", + "format" : "uri-reference" + }, + "style" : "form", + "explode" : false + }, + "i" : { + "name" : "i", + "in" : "query", + "description" : "Horizontal (x) coordinate within a map or tile.", + "required" : true, + "schema" : { + "type" : "number" + } + }, + "j" : { + "name" : "j", + "in" : "query", + "description" : "Vertical (y) coordinate within a map or tile.", + "required" : true, + "schema" : { + "type" : "number" + } + }, + "limit-collections" : { + "name" : "limit", + "in" : "query", + "description" : "Limits the number of collections returned in the response document. Minimum = 1. Maximum = 10000. Default = 10000.", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1, + "maximum" : 10000 + }, + "style" : "form", + "explode" : false + }, + "limit-items" : { + "name" : "limit", + "in" : "query", + "description" : "Limits the number of features returned in the response document. Minimum = 1. Maximum = 10000. Default = 10.", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1, + "maximum" : 10000 + }, + "style" : "form", + "explode" : false + }, + "processId" : { + "name" : "processId", + "in" : "path", + "description" : "Local identifier of a process", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/processes-list" + } + }, + "propertyName" : { + "name" : "propertyName", + "in" : "query", + "description" : "A list of feature properties to include in the response.", + "required" : false, + "allowEmptyValue" : false, + "schema" : { + "type" : "string" + }, + "style" : "form", + "explode" : true + }, + "resultType" : { + "name" : "resultType", + "in" : "query", + "description" : "The possible values for this parameter are \"results\" and \"hits\". If the value of the resultType parameter is set to \"results\" the server shall generate a complete response document containing resources that satisfy the operation. The root element of the response container shall include a count of the number of resources actually presented in the response document. The root element of the response container shall also include a count of the total number of resources that the operations actually found which will always be equal to or greater than the number of resource presented in the response document. If the value of the resultType attribute is set to \"hits\" the server shall generate an empty response document containing no resource instances and the root element of the response container shall contain the count of the total number of resources that the operation found. The value for the number of resources presented in the response document shall be set to zero.", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "hits", "results" ] + }, + "style" : "form", + "explode" : true + }, + "scaleAxes" : { + "name" : "scaleAxes", + "in" : "query", + "description" : "Scale the resulting coverage along one or more axis by a given factor.", + "required" : false, + "style" : "form", + "explode" : true, + "schema" : { + "type" : "string" + } + }, + "scaleFactor" : { + "name" : "scaleFactor", + "in" : "query", + "description" : "Scale the resulting coverage along all axis by a given factor.", + "required" : false, + "schema" : { + "type" : "number", + "format" : "double", + "minimum" : 0, + "exclusiveMinimum" : true + } + }, + "scaleSize" : { + "name" : "scaleSize", + "in" : "query", + "description" : "Scale the resulting coverage along one or more axis to a given size in data cells/pixels.", + "required" : false, + "schema" : { + "type" : "string" + } + }, + "subset" : { + "name" : "subset", + "in" : "query", + "description" : "Get a subset of the data by slicing or trimming along one or more axis.", + "style" : "form", + "explode" : false, + "required" : false, + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, + "styleId" : { + "name" : "styleId", + "in" : "path", + "description" : "An identifier representing a specific style.", + "required" : true, + "schema" : { + "type" : "string" + } + }, + "tileCol" : { + "name" : "tileCol", + "in" : "path", + "description" : "Column index of the tile on the selected TileMatrix. It cannot exceed the MatrixHeight-1 for the selected TileMatrix. For example, Ireland is fully within the Tile at WebMercatorQuad tileMatrix=5, tileRow=10 and tileCol=15.", + "required" : true, + "schema" : { + "minimum" : 0, + "type" : "integer" + }, + "example" : 170 + }, + "tileMatrix" : { + "name" : "tileMatrix", + "in" : "path", + "description" : "Identifier selecting one of the scales defined in the TileMatrixSet and representing the scaleDenominator the tile. For example,\nIreland is fully within the Tile at WebMercatorQuad tileMatrix=5, tileRow=10 and tileCol=15.", + "required" : true, + "schema" : { + "type" : "string" + }, + "example" : "0" + }, + "tileMatrixSetId" : { + "name" : "tileMatrixSetId", + "in" : "path", + "description" : "Identifier for a supported TileMatrixSet", + "required" : true, + "allowEmptyValue" : false, + "schema" : { + "$ref" : "#/components/schemas/tile-matrix-list" + } + }, + "tileRow" : { + "name" : "tileRow", + "in" : "path", + "description" : "Row index of the tile on the selected TileMatrix. It cannot exceed the MatrixWidth-1 for the selected TileMatrix. For example, Ireland is fully within the Tile at WebMercatorQuad tileMatrix=5, tileRow=10 and tileCol=15.", + "required" : true, + "schema" : { + "minimum" : 0, + "type" : "integer" + }, + "example" : "37" + }, + "transparent" : { + "name" : "transparent", + "in" : "query", + "description" : "Background transparency of map (default=true).", + "required" : false, + "style" : "form", + "explode" : false, + "schema" : { + "type" : "boolean", + "default" : true + } + }, + "bgcolor" : { + "name" : "bgcolor", + "in" : "query", + "description" : "Web color name or hexadecimal 0x[AA]RRGGBB color value for the background color (default to 0x9C9C9C gray). If alpha is not specified, full opacity is assumed.", + "required" : false, + "style" : "form", + "explode" : false, + "schema" : { + "type" : "string", + "default" : "0xFFFFFF" + } + } + }, + "schemas" : { + "additionalParameter" : { + "type" : "object", + "required" : [ "name", "value" ], + "properties" : { + "name" : { + "type" : "string" + }, + "value" : { + "type" : "array", + "items" : { + "oneOf" : [ { + "type" : "string" + }, { + "type" : "number" + }, { + "type" : "integer" + }, { + "type" : "array", + "items" : { } + }, { + "type" : "object" + } ] + } + } + } + }, + "allowedValues" : { + "type" : "array", + "items" : { + "oneOf" : [ { + "type" : "string" + }, { + "$ref" : "#/components/schemas/range" + } ] + } + }, + "anyValue" : { + "type" : "object", + "properties" : { + "anyValue" : { + "type" : "boolean", + "default" : true + } + } + }, + "boundingBoxData" : { + "type" : "object", + "required" : [ "bbox" ], + "properties" : { + "crs" : { + "type" : "string", + "format" : "uri" + }, + "bbox" : { + "type" : "array", + "minItems" : 4, + "maxItems" : 6, + "items" : { + "type" : "number" + } + } + } + }, + "boundingBoxDataType" : { + "type" : "object", + "required" : [ "supportedCRS" ], + "properties" : { + "supportedCRS" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/supportedCRS" + } + } + } + }, + "tiles-boundingBox" : { + "type" : "object", + "required" : [ "lowerLeft", "upperRight" ], + "properties" : { + "lowerLeft" : { + "type" : "array", + "minItems" : 2, + "items" : { + "type" : "number" + } + }, + "upperRight" : { + "type" : "array", + "minItems" : 2, + "items" : { + "type" : "number" + } + } + } + }, + "chainedInput" : { + "type" : "object", + "required" : [ "input" ], + "properties" : { + "input" : { + "type" : "string" + } + } + }, + "collection" : { + "type" : "object", + "required" : [ "id", "links" ], + "properties" : { + "id" : { + "description" : "Identifier of the collection used, for example, in URIs", + "type" : "string", + "example" : "address" + }, + "title" : { + "description" : "tTtle of the collection", + "type" : "string", + "example" : "address" + }, + "description" : { + "description" : "A description of the features in the collection", + "type" : "string", + "example" : "An address." + }, + "links" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/link" + }, + "example" : [ { + "href" : "http://data.example.com/buildings", + "rel" : "item" + }, { + "href" : "http://example.com/concepts/buildings.html", + "rel" : "describedby", + "type" : "text/html" + } ] + }, + "extent" : { + "$ref" : "#/components/schemas/extent" + }, + "itemType" : { + "description" : "Indicator about the type of the items in the collection.", + "type" : "string", + "default" : "feature" + }, + "layerDataType" : { + "description" : "Type of data layer.", + "type" : "string" + }, + "scaleDenominator" : { + "description" : "Scale denominator.", + "type" : "number" + }, + "crs" : { + "description" : "The list of coordinate reference systems supported by this service.", + "type" : "array", + "items" : { + "type" : "string" + }, + "default" : [ "http://www.opengis.net/def/crs/OGC/1.3/CRS84" ], + "example" : [ "http://www.opengis.net/def/crs/OGC/1.3/CRS84", "http://www.opengis.net/def/crs/EPSG/0/4326" ] + } + } + }, + "collections" : { + "type" : "object", + "required" : [ "links", "collections" ], + "properties" : { + "links" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/link" + } + }, + "collections" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/collection" + } + } + } + }, + "collectionInput" : { + "type" : "object", + "required" : [ "collection" ], + "properties" : { + "collection" : { + "type" : "string" + } + } + }, + "complexDataType" : { + "type" : "object", + "required" : [ "formats" ], + "properties" : { + "formats" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/formatDescription" + } + } + } + }, + "confClasses" : { + "type" : "object", + "required" : [ "conformsTo" ], + "properties" : { + "conformsTo" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + }, + "formatDescription" : { + "allOf" : [ { + "$ref" : "#/components/schemas/format" + }, { + "type" : "object", + "properties" : { + "maximumMegabytes" : { + "type" : "integer" + }, + "default" : { + "type" : "boolean", + "default" : false + } + } + } ] + }, + "all-collection-list" : { + "$ref" : "./api/all-collections" + }, + "vectorTile-collection-list" : { + "$ref" : "./api/vectortiles-collections" + }, + "feature-collection-list" : { + "$ref" : "./api/feature-collections" + }, + "coverage-collection-list" : { + "$ref" : "./api/coverage-collections" + }, + "tile-matrix-list": { + "$ref" : "./api/tileMatrixSets" + }, + "dataDescriptionType" : { + "allOf" : [ { + "$ref" : "#/components/schemas/descriptionType" + }, { + "type" : "object", + "required" : [ "id" ] + } ] + }, + "descriptionType" : { + "type" : "object", + "required" : [ "id" ], + "properties" : { + "id" : { + "type" : "string" + }, + "title" : { + "type" : "string" + }, + "description" : { + "type" : "string" + }, + "keywords" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "metadata" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metadata" + } + }, + "additionalParameters" : { + "allOf" : [ { + "$ref" : "#/components/schemas/metadata" + }, { + "type" : "object", + "properties" : { + "parameters" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/additionalParameter" + } + } + } + } ] + } + } + }, + "domainSet-json" : { + "title" : "Coverage Domain Set Schema (JSON)", + "type" : "object", + "properties" : { } + }, + "execute" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string" + }, + "process" : { + "type" : "string" + }, + "inputs" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/input" + } + } + } + }, + "exception" : { + "type" : "object", + "description" : "Information about the exception: an error code plus an optional description.", + "required" : [ "code" ], + "properties" : { + "code" : { + "type" : "string" + }, + "description" : { + "type" : "string" + } + } + }, + "extent" : { + "type" : "object", + "description" : "The extent of the features in the collection. In the Core only spatial and temporal\\nextents are specified. Extensions may add additional members to represent other\\nextents, for example, thermal or pressure ranges.", + "properties" : { + "spatial" : { + "description" : "The spatial extent of the features in the collection.", + "type" : "object", + "properties" : { + "bbox" : { + "description" : "One or more bounding boxes that describe the spatial extent of the dataset.\nIn the Core only a single bounding box is supported. Extensions may support\nadditional areas. If multiple areas are provided, the union of the bounding\nboxes describes the spatial extent.", + "type" : "array", + "minItems" : 1, + "items" : { + "description" : "Each bounding box is provided as four or six numbers, depending on\nwhether the coordinate reference system includes a vertical axis\n(height or depth):\n* Lower left corner, coordinate axis 1\n* Lower left corner, coordinate axis 2\n* Minimum value, coordinate axis 3 (optional)\n* Upper right corner, coordinate axis 1\n* Upper right corner, coordinate axis 2\n* Maximum value, coordinate axis 3 (optional)\nThe coordinate reference system of the values is WGS 84 longitude/latitude\n(http://www.opengis.net/def/crs/OGC/1.3/CRS84) unless a different coordinate\nreference system is specified in `crs`.\nFor WGS 84 longitude/latitude the values are in most cases the sequence of\nminimum longitude, minimum latitude, maximum longitude and maximum latitude.\nHowever, in cases where the box spans the antimeridian the first value\n(west-most box edge) is larger than the third value (east-most box edge).\nIf the vertical axis is included, the third and the sixth number are\nthe bottom and the top of the 3-dimensional bounding box.\nIf a feature has multiple spatial geometry properties, it is the decision of the\nserver whether only a single spatial geometry property is used to determine\nthe extent or all relevant geometries.", + "type" : "array", + "oneOf" : [ { + "minItems" : 4, + "maxItems" : 4 + }, { + "minItems" : 6, + "maxItems" : 6 + } ], + "items" : { + "type" : "number" + }, + "example" : [ -180, -90, 180, 90 ] + } + }, + "crs" : { + "description" : "Coordinate reference system of the coordinates in the spatial\nextent (property `spatial`). In the Core, only WGS84 longitude/latitude\nis supported. Extensions may support additional coordinate reference systems.", + "type" : "string", + "enum" : [ "http://www.opengis.net/def/crs/OGC/1.3/CRS84" ], + "default" : "http://www.opengis.net/def/crs/OGC/1.3/CRS84" + } + } + } + } + }, + "featureCollectionGeoJSON" : { + "type" : "object", + "required" : [ "type", "features" ], + "properties" : { + "type" : { + "type" : "string", + "enum" : [ "FeatureCollection" ] + }, + "features" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/featureGeoJSON" + } + }, + "links" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/link" + } + }, + "timeStamp" : { + "$ref" : "#/components/schemas/timeStamp-response" + }, + "numberMatched" : { + "$ref" : "#/components/schemas/numberMatched" + }, + "numberReturned" : { + "$ref" : "#/components/schemas/numberReturned" + } + } + }, + "featureGeoJSON" : { + "type" : "object", + "required" : [ "type", "geometry", "properties" ], + "properties" : { + "type" : { + "type" : "string", + "enum" : [ "Feature" ] + }, + "geometry" : { + "$ref" : "#/components/schemas/geometryGeoJSON" + }, + "properties" : { + "type" : "object", + "nullable" : true + }, + "id" : { + "oneOf" : [ { + "type" : "string" + }, { + "type" : "integer" + } ] + }, + "links" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/link" + } + } + } + }, + "format" : { + "type" : "object", + "required" : [ "mediaType" ], + "properties" : { + "mimeType" : { + "type" : "string" + }, + "schema" : { + "type" : "string" + }, + "encoding" : { + "type" : "string" + } + } + }, + "geometryGeoJSON" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/pointGeoJSON" + }, { + "$ref" : "#/components/schemas/multipointGeoJSON" + }, { + "$ref" : "#/components/schemas/linestringGeoJSON" + }, { + "$ref" : "#/components/schemas/multilinestringGeoJSON" + }, { + "$ref" : "#/components/schemas/polygonGeoJSON" + }, { + "$ref" : "#/components/schemas/multipolygonGeoJSON" + }, { + "$ref" : "#/components/schemas/geometrycollectionGeoJSON" + } ] + }, + "geometrycollectionGeoJSON" : { + "type" : "object", + "required" : [ "type", "geometries" ], + "properties" : { + "type" : { + "type" : "string", + "enum" : [ "GeometryCollection" ] + }, + "geometries" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/geometryGeoJSON" + } + } + } + }, + "inlineOrRefData" : { + "type" : "object", + "properties" : { + "dataType" : { + "$ref" : "#/components/schemas/nameReferenceType" + }, + "uom" : { + "$ref" : "#/components/schemas/nameReferenceType" + }, + "format" : { + "$ref" : "#/components/schemas/format" + }, + "href" : { + "type" : "string" + }, + "value" : { + "oneOf" : [ { + "type" : "string" + }, { + "type" : "number" + }, { + "type" : "boolean" + }, { + "type" : "object" + } ] + } + }, + "oneOf" : [ { + "required" : [ "href" ] + }, { + "required" : [ "value" ] + } ] + }, + "input" : { + "type" : "object", + "required" : [ "id" ], + "properties" : { + "id" : { + "type" : "string" + } + }, + "anyOf" : [ { + "$ref" : "#/components/schemas/inlineOrRefData" + }, { + "$ref" : "#/components/schemas/boundingBoxData" + }, { + "$ref" : "#/components/schemas/collectionInput" + }, { + "$ref" : "#/components/schemas/processInput" + }, { + "$ref" : "#/components/schemas/chainedInput" + }, { + "$ref" : "#/components/schemas/listInput" + } ] + }, + "inputDescription" : { + "allOf" : [ { + "$ref" : "#/components/schemas/dataDescriptionType" + }, { + "type" : "object", + "properties" : { + "input" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/complexDataType" + }, { + "$ref" : "#/components/schemas/literalDataType" + }, { + "$ref" : "#/components/schemas/boundingBoxDataType" + } ] + }, + "minOccurs" : { + "type" : "integer" + }, + "maxOccurs" : { + "oneOf" : [ { + "type" : "integer" + }, { + "type" : "string", + "enum" : [ "unbounded" ] + } ] + } + } + } ] + }, + "jobControlOptions" : { + "type" : "string", + "enum" : [ "modular-deferred", "modular-sync" ] + }, + "landingPage" : { + "type" : "object", + "required" : [ "links" ], + "properties" : { + "title" : { + "type" : "string", + "example" : "Buildings in Bonn" + }, + "description" : { + "type" : "string", + "example" : "Access to data about buildings in the city of Bonn via a Web API that conforms to the OGC API Features specification." + }, + "links" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/link" + } + } + } + }, + "keyword" : { + "required" : [ "keyword" ], + "type" : "object", + "nullable" : true, + "properties" : { + "keyword" : { + "type" : "string", + "example" : "land cover" + }, + "code" : { + "type" : "string", + "example" : "4612" + }, + "codeSpace" : { + "type" : "string" + } + } + }, + "layers-array" : { + "required" : [ "id", "type" ], + "type" : "object", + "properties" : { + "id" : { + "type" : "string", + "example" : "1" + }, + "type" : { + "type" : "string", + "example" : "fill", + "enum" : [ "fill", "line", "symbol", "circle", "heatmap", "fill-extrusion", "raster", "hillshade", "background" ] + }, + "source" : { + "type" : "string", + "example" : "daraa" + }, + "source-layer" : { + "type" : "string", + "example" : "vegetationsrf" + }, + "layout" : { + "type" : "object" + }, + "paint" : { + "type" : "object", + "properties" : { + "fill-color" : { + "type" : "string", + "example" : "#11083b" + } + } + } + } + }, + "linestringGeoJSON" : { + "type" : "object", + "required" : [ "type", "coordinates" ], + "properties" : { + "type" : { + "type" : "string", + "enum" : [ "LineString" ] + }, + "coordinates" : { + "type" : "array", + "minItems" : 2, + "items" : { + "type" : "array", + "minItems" : 2, + "items" : { + "type" : "number" + } + } + } + } + }, + "link" : { + "type" : "object", + "required" : [ "href" ], + "properties" : { + "href" : { + "type" : "string", + "example" : "http://data.example.com/buildings/123" + }, + "rel" : { + "type" : "string", + "example" : "alternate" + }, + "type" : { + "type" : "string", + "example" : "application/geo+json" + }, + "hreflang" : { + "type" : "string", + "example" : "en" + }, + "title" : { + "type" : "string", + "example" : "Trierer Strasse 70, 53115 Bonn" + }, + "length" : { + "type" : "integer" + } + } + }, + "listInput" : { + "type" : "object", + "required" : [ "list" ], + "properties" : { + "list" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/input" + } + } + } + }, + "literalDataDomain" : { + "type" : "object", + "properties" : { + "valueDefinition" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/allowedValues" + }, { + "$ref" : "#/components/schemas/anyValue" + }, { + "$ref" : "#/components/schemas/valuesReference" + } ] + }, + "defaultValue" : { + "type" : "string" + }, + "dataType" : { + "$ref" : "#/components/schemas/nameReferenceType" + }, + "uom" : { + "$ref" : "#/components/schemas/nameReferenceType" + } + } + }, + "literalDataType" : { + "type" : "object", + "required" : [ "literalDataDomains" ], + "properties" : { + "literalDataDomains" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/literalDataDomain" + } + } + } + }, + "mb-style" : { + "required" : [ "layers", "sources", "version" ], + "type" : "object", + "properties" : { + "version" : { + "type" : "number", + "example" : 8 + }, + "name" : { + "type" : "string", + "example" : "night" + }, + "sources" : { + "type" : "object", + "properties" : { + "daraa" : { + "type" : "object", + "properties" : { + "type" : { + "type" : "string", + "example" : "vector" + }, + "url" : { + "type" : "string", + "example" : "https://services.interactive-instruments.de/vtp/daraa/tiles/default/{z}/{y}/{x}?f=mvt" + } + } + } + } + }, + "sprite" : { + "type" : "string", + "example" : "http://vtp2018.s3-eu-west-1.amazonaws.com/static/mapstorestyle/sprites/sprites" + }, + "glyphs" : { + "type" : "string", + "example" : "http://fonts.openmaptiles.org/{fontstack}/{range}.pbf" + }, + "layers" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/layers-array" + } + } + } + }, + "metadata" : { + "type" : "object", + "properties" : { + "title" : { + "type" : "string" + }, + "role" : { + "type" : "string" + }, + "href" : { + "type" : "string" + } + } + }, + "multilinestringGeoJSON" : { + "type" : "object", + "required" : [ "type", "coordinates" ], + "properties" : { + "type" : { + "type" : "string", + "enum" : [ "MultiLineString" ] + }, + "coordinates" : { + "type" : "array", + "items" : { + "type" : "array", + "minItems" : 2, + "items" : { + "type" : "array", + "minItems" : 2, + "items" : { + "type" : "number" + } + } + } + } + } + }, + "multipointGeoJSON" : { + "type" : "object", + "required" : [ "type", "coordinates" ], + "properties" : { + "type" : { + "type" : "string", + "enum" : [ "MultiPoint" ] + }, + "coordinates" : { + "type" : "array", + "items" : { + "type" : "array", + "minItems" : 2, + "items" : { + "type" : "number" + } + } + } + } + }, + "multipolygonGeoJSON" : { + "type" : "object", + "required" : [ "type", "coordinates" ], + "properties" : { + "type" : { + "type" : "string", + "enum" : [ "MultiPolygon" ] + }, + "coordinates" : { + "type" : "array", + "items" : { + "type" : "array", + "items" : { + "type" : "array", + "minItems" : 4, + "items" : { + "type" : "array", + "minItems" : 2, + "items" : { + "type" : "number" + } + } + } + } + } + } + }, + "numberMatched" : { + "description" : "The number of features of the feature type that match the selection\nparameters like `bbox`.", + "type" : "integer", + "minimum" : 0, + "example" : 127 + }, + "numberReturned" : { + "description" : "The number of features in the feature collection.\nA server may omit this information in a response, if the information\nabout the number of features is not known or difficult to compute.\nIf the value is provided, the value shall be identical to the number\nof items in the \"features\" array.", + "type" : "integer", + "minimum" : 0, + "example" : 10 + }, + "nameReferenceType" : { + "type" : "object", + "required" : [ "name" ], + "properties" : { + "name" : { + "type" : "string" + }, + "reference" : { + "type" : "string", + "format" : "uri" + } + } + }, + "outputDescription" : { + "allOf" : [ { + "$ref" : "#/components/schemas/dataDescriptionType" + }, { + "type" : "object", + "properties" : { + "output" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/complexDataType" + }, { + "$ref" : "#/components/schemas/literalDataType" + }, { + "$ref" : "#/components/schemas/boundingBoxDataType" + } ] + } + } + } ] + }, + "pointGeoJSON" : { + "type" : "object", + "required" : [ "type", "coordinates" ], + "properties" : { + "type" : { + "type" : "string", + "enum" : [ "Point" ] + }, + "coordinates" : { + "type" : "array", + "minItems" : 2, + "items" : { + "type" : "number" + } + } + } + }, + "polygonGeoJSON" : { + "type" : "object", + "required" : [ "type", "coordinates" ], + "properties" : { + "type" : { + "type" : "string", + "enum" : [ "Polygon" ] + }, + "coordinates" : { + "type" : "array", + "items" : { + "type" : "array", + "minItems" : 4, + "items" : { + "type" : "array", + "minItems" : 2, + "items" : { + "type" : "number" + } + } + } + } + } + }, + "process" : { + "allOf" : [ { + "$ref" : "#/components/schemas/processSummary" + }, { + "type" : "object", + "properties" : { + "inputs" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/inputDescription" + } + }, + "outputs" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/outputDescription" + } + }, + "links" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/link" + } + } + } + } ] + }, + "processes-list" : { + "$ref" : "./api/processes-list" + }, + "processInput" : { + "type" : "object", + "required" : [ "process" ], + "properties" : { + "process" : { + "type" : "string" + }, + "inputs" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/input" + } + } + } + }, + "processList" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/processSummary" + } + }, + "processSummary" : { + "allOf" : [ { + "$ref" : "#/components/schemas/descriptionType" + }, { + "type" : "object", + "required" : [ "id", "version" ], + "properties" : { + "id" : { + "type" : "string" + }, + "version" : { + "type" : "string" + }, + "jobControlOptions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/jobControlOptions" + } + }, + "outputTransmission" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/transmissionMode" + } + }, + "links" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/link" + } + } + } + } ] + }, + "range" : { + "type" : "object", + "properties" : { + "minimumValue" : { + "type" : "string" + }, + "maximumValue" : { + "type" : "string" + }, + "spacing" : { + "type" : "string" + }, + "rangeClosure" : { + "type" : "string", + "enum" : [ "closed", "open", "open-closed", "closed-open" ] + } + } + }, + "rangeType-json" : { + "title" : "Coverage Range Type Schema (JSON)", + "type" : "object", + "properties" : { } + }, + "supportedCRS" : { + "type" : "object", + "properties" : { + "crs" : { + "type" : "string" + }, + "default" : { + "type" : "boolean", + "default" : false + } + } + }, + "stylesList" : { + "type" : "object", + "required" : [ "styles" ], + "properties" : { + "styles" : { + "type" : "array", + "nullable" : true, + "items" : { + "$ref" : "#/components/schemas/style" + }, + "example" : [ { + "id" : "night", + "title" : "Topographic night style", + "links" : [ { + "href" : "https://example.com/api/1.0/styles/night?f=mapbox", + "type" : "application/vnd.mapbox.style+json", + "rel" : "stylesheet" + }, { + "href" : "https://example.com/api/1.0/styles/night?f=sld10", + "type" : "application/vnd.ogc.sld+xml;version=1.0", + "rel" : "stylesheet" + }, { + "href" : "https://example.com/api/1.0/styles/night/metadata?f=json", + "type" : "application/json", + "rel" : "describedBy" + } ] + }, { + "id" : "topographic", + "title" : "Regular topographic style", + "links" : [ { + "href" : "https://example.com/api/1.0/styles/topographic?f=mapbox", + "type" : "application/vnd.mapbox.style+json", + "rel" : "stylesheet" + }, { + "href" : "https://example.com/api/1.0/styles/topographic?f=sld10", + "type" : "application/vnd.ogc.sld+xml;version=1.0", + "rel" : "stylesheet" + }, { + "href" : "https://example.com/api/1.0/styles/topographic/metadata?f=json", + "type" : "application/json", + "rel" : "describedBy" + } ] + } ] + } + } + }, + "style" : { + "type" : "object", + "nullable" : true, + "required" : [ "id", "links" ], + "properties" : { + "id" : { + "type" : "string", + "nullable" : true + }, + "title" : { + "type" : "string", + "nullable" : true + }, + "links" : { + "type" : "array", + "nullable" : true, + "minItems" : 1, + "items" : { + "$ref" : "#/components/schemas/link" + } + } + } + }, + "tileMatrixSet" : { + "description" : "A definition of a tile matrix following the 2D Tile Matrix Set standard. For tileset metadata, this property is only required for offline use, as an alternative to tileMatrixSetURI and tileMatrixSetDefinition.", + "required" : [ "identifier" ], + "type" : "object", + "properties" : { + "uri" : { + "type" : "string", + "description" : "URI for a tile matrix set registered with OGC Naming Authority", + "example" : "http://www.opengis.net/def/tilematrixset/OGC/1.0/GNOSISGlobalGrid" + }, + "title" : { + "type" : "string", + "description" : "Title of this tile matrix set, normally used for display to a human", + "example" : "Google Maps Compatible for the World" + }, + "description" : { + "type" : "string", + "description" : "Brief narrative description of this tile matrix set, normally available for display to a human", + "example" : "The GNOSIS Global Grid is based on WGS84 and is (almost) a quad-tree roughly approximating equal area by adjusting the number of tiles per row in polar zones." + }, + "keywords" : { + "type" : "array", + "description" : "Unordered list of one or more commonly used or formalized word(s) or phrase(s) used to describe this dataset", + "items" : { + "$ref" : "#/components/schemas/keyword" + } + }, + "id" : { + "type" : "string", + "description" : "Tile matrix set identifier,", + "example" : "WebMercatorQuad" + }, + "crs" : { + "type" : "string", + "description" : "Reference to one coordinate reference system (CRS)", + "format" : "uri" + }, + "orderedAxes": { + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "wellKnownScaleSet" : { + "type" : "string", + "description" : "Reference to a well-known scale set" + }, + "tileMatrices" : { + "type" : "array", + "description" : "Describes a scale level and its tile matrix", + "items" : { + "$ref" : "#/components/schemas/tileMatrix" + } + } + } + }, + "tileMatrix" : { + "required" : [ "identifier", "matrixHeight", "matrixWidth", "scaleDenominator", "cellSize", "tileHeight", "tileWidth", "pointOfOrigin" ], + "type" : "object", + "properties" : { + "title" : { + "type" : "string", + "description" : "Title of this tile matrix, normally used for display to a human", + "example" : "Google Maps Compatible for the World zoom level 3" + }, + "abstract" : { + "type" : "string", + "description" : "Brief narrative description of this tile matrix, normally available for display to a human", + "example" : "Google Maps Compatible zoom level 3 that is equivalent to a scale of 1:69885283.00358972 and has 19567.87924100512 meters of pixel size in the equator" + }, + "keywords" : { + "type" : "array", + "description" : "keywords about the elements in the collection", + "items" : { + "$ref" : "#/components/schemas/keyword" + } + }, + "identifier" : { + "type" : "string", + "description" : "Identifier selecting one of the scales defined in the TileMatrixSet and representing the scaleDenominator the tile.", + "example" : "15" + }, + "scaleDenominator" : { + "type" : "number", + "description" : "Scale denominator of this tile matrix", + "example" : 4265.4591676995678 + }, + "cellSize": { + "description": "Cell size of this tile matrix", + "type": "number", + "example": 0.0000107288361 + }, + "pointOfOrigin" : { + "type" : "array", + "description" : "Position in CRS coordinates of the corner of origin for this tile matrix.", + "example" : [ 90, -180 ], + "items" : { + "type" : "number", + "format" : "double" + } + }, + "cornerOfOrigin": { + "description": "Corner of the tile matrix used as the origin for numbering tile rows and columns.", + "type": "string", + "enum": ["topLeft", "bottomLeft"], + "default": "topLeft" + }, + "tileWidth" : { + "minimum" : 1, + "type" : "number", + "description" : "Width of each tile of this tile matrix in pixels", + "format" : "integer", + "example" : 256 + }, + "tileHeight" : { + "minimum" : 1, + "type" : "number", + "description" : "Height of each tile of this tile matrix in pixels", + "format" : "integer", + "example" : 256 + }, + "matrixHeight" : { + "minimum" : 1, + "type" : "number", + "description" : "Width of the matrix (number of tiles in width)", + "format" : "integer", + "example" : 65536 + }, + "matrixWidth" : { + "minimum" : 1, + "type" : "number", + "description" : "Height of the matrix (number of tiles in height)", + "format" : "integer", + "example" : 131072 + }, + "variableMatrixWidths": { + "description": "Describes the rows that has variable matrix width", + "type": "array", + "items": { + "description": "Variable Matrix Width data structure", + "type": "object", + "required": ["coalesce", "minTileRow", "maxTileRow"], + "properties": + { + "coalesce" : { + "description": "Coalescence factor", + "type": "number", + "format" : "integer", + "minimum": 2, + "multipleOf" : 1 + }, + "minTileRow": { + "description": "First tile row where the coalescence factor applies on this tilematrix", + "type": "number", + "format" : "integer", + "minimum": 0, + "multipleOf" : 1 + }, + "maxTileRow": { + "description": "Last tile row where the coalescence factor applies on this tilematrix", + "type": "number", + "format" : "integer", + "minimum": 0, + "multipleOf" : 1 + } + } + } + } + } + }, + "tileMatrixSetLimits" : { + "type" : "array", + "minItems" : 1, + "items" : { + "type" : "object", + "required" : [ "tileMatrix", "minTileRow", "maxTileRow", "minTileCol", "maxTileCol" ], + "properties" : { + "tileMatrix" : { + "type" : "string", + "format" : "uri", + "example" : "5" + }, + "minTileRow" : { + "type" : "number", + "format" : "integer", + "minimum" : 0, + "example" : 0 + }, + "maxTileRow" : { + "type" : "number", + "format" : "integer", + "minimum" : 0, + "example" : 1 + }, + "minTileCol" : { + "type" : "number", + "format" : "integer", + "minimum" : 0, + "example" : 3 + }, + "maxTileCol" : { + "type" : "number", + "format" : "integer", + "minimum" : 0, + "example" : 4 + } + } + } + }, + "tiles-links" : + { + "type" : "array", + "example" : [ { + "href" : "http://data.example.com/collections/buildings/map/tiles/WorldMercatorWGS84Quad", + "rel" : "self", + "type" : "application/json" + }, { + "href" : "http://data.example.com/collections/buildings/map/tiles/WorldMercatorWGS84Quad/{tileMatrix}/{tileRow}/{tileCol}", + "templated" : true, + "rel" : "item", + "type" : "image/png" + } ], + "items" : { + "$ref" : "#/components/schemas/link" + } + }, + "tileSet" : { + "description" : "A resource describing a tileset based on the OGC TileSet Metadata Standard", + "anyOf" : + [ + { + "required" : [ "tileMatrixSetDefinition", "links" ], + "properties" : + { + "tileMatrixSetDefinition" : { + "type" : "string", + "example" : "http://data.example.com/tileMatrixSets/WorldMercatorWGS84Quad", + "description" : "Reference to a tile matrix set definition following the 2D Tile Matrix Set Standard. Required for custom Tile Matrix Sets." + }, + "links" : { + "$ref" : "#/components/schemas/tiles-links" + } + } + }, + { + "required" : [ "tileMatrixSet", "mediaType" ], + "properties" : + { + "tileMatrixSet" : { + "$ref" : "#/components/schemas/tileMatrixSet" + }, + "mediaType" : { + "type" : "string", + "description" : "Media type of individual tiles (for offline tilesets only -- the supported media types are specified in links for online tiles)" + }, + "links" : { + "$ref" : "#/components/schemas/tiles-links" + } + } + } + ], + "type" : "object", + "required" : [ "dataType" ], + "properties" : { + "tileMatrixSetURI" : { + "type" : "string", + "format" : "uri", + "description" : "Reference to a Tile Matrix Set on the OGC definitions server (http://www.opengis.net/def/tms/). Required if the tile matrix set is registered on the definition server.", + "example" : "http://www.opengis.net/def/tilematrixset/OGC/1.0/GNOSISGlobalGrid" + }, + "tileMatrixSetLimits" : { + "$ref" : "#/components/schemas/tileMatrixSetLimits" + }, + "title" : { + "type" : "string", + "description" : "A title for this tileset" + }, + "abstract" : { + "type" : "string", + "description" : "Brief narrative description of this tile set" + }, + "dataType": { + "description": "Type of data represented in the tileset", + "type" : "string", + "enum" : [ "imagery", "vector", "coverage" ] + }, + "crs": { + "description": "Coordinate Reference System (CRS)", + "type": "string" + }, + "orderedAxes": { + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "epoch": { + "description": "Epoch of the Coordinate Reference System (CRS)", + "type": "number" + }, + "keywords" : { + "type" : "array", + "description" : "keywords about this tileset", + "items" : { + "$ref" : "#/components/schemas/keyword" + } + }, + "layers" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/layerDescription" + } + }, + "boundingBox" : + { + "$ref" : "#/components/schemas/tiles-boundingBox" + }, + "centerPoint" : + { + "$ref" : "#/components/schemas/tilePoint" + }, + "created" : + { + "$ref" : "#/components/schemas/timeStamp" + }, + "updated" : + { + "$ref" : "#/components/schemas/timeStamp" + }, + "version" : { "type" : "string" }, + "pointOfContact" : { "type" : "string" }, + "accessConstraints" : { + "$ref" : "#/components/schemas/classificationCode" + } + } + }, + "layerDescription" : + { + "type" : "object", + "required" : [ "identifier", "dataType" ], + "properties" : + { + "identifier" : { "type" : "string" }, + "dataType" : + { + "type" : "string", + "enum" : [ "imagery", "vector", "coverage" ] + }, + "geometryType" : + { + "type" : "string", + "enum" : [ "points", "lines", "polygons" ] + }, + "featureType" : { "type" : "string" }, + "propertiesSchema" : + { + "type" : "object", + "required" : [ "type", "properties" ], + "properties" : + { + "type" : + { + "type" : "string", + "enum" : [ "object" ] + }, + "properties" : + { + "type" : "array", + "items" : + { + "type" : "object" + } + } + } + }, + "pointOfContact" : { "type" : "string" }, + "publisher" : { "type" : "string" }, + "theme" : { "type" : "string" }, + "supportedCRS" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/supportedCRS" + } + }, + "style" : + { + "$ref" : "#/components/schemas/layerStyle" + }, + "links" : + { + "$ref" : "#/components/schemas/layers-links" + }, + "created" : + { + "$ref" : "#/components/schemas/timeStamp" + }, + "updated" : + { + "$ref" : "#/components/schemas/timeStamp" + }, + "boundingBox" : + { + "$ref" : "#/components/schemas/tiles-boundingBox" + }, + "geoDataClass" : { "type" : "string" }, + "minTileMatrix" : { "type" : "string" }, + "maxTileMatrix" : { "type" : "string" }, + "maxCellSize" : { "type" : "number" }, + "minCellSize" : { "type" : "number" }, + "minScaleDenominator" : { "type" : "number" }, + "maxScaleDenominator" : { "type" : "number" } + } + }, + "layers-links" : + { + "type" : "array", + "items" : + { + "$ref" : "#/components/schemas/link" + } + }, + "layerStyle" : + { + "type" : "object", + "required" : [ "id" ], + "properties" : + { + "id" : { "type" : "string" }, + "links" : { "type" : "array", "items" : { "$ref" : "#/components/schemas/link" } } + } + }, + + "tilePoint" : + { + "type" : "object", + "required" : [ "coordinates", "tileMatrix" ], + "properties" : + { + "coordinates" : + { + "type" : "array", + "minItems" : 2, + "items" : { "type" : "number" } + }, + "tileMatrix" : { "type" : "string" }, + "scaleDenominator" : { "type" : "number" }, + "cellSize" : { "type" : "number" } + } + }, + "classificationCode" : + { + "type" : "string", + "enum" : [ "unclassified", "confidential", "restricted", "secret", "topSecret" ] + }, + "tilesetsList" : { + "description" : "A list of tilesets available through the Tiles API for one or more data type, style and Tile Matrix Set, as well as potentially links to other related tilesets for the same data (e.g. of different dataType and style) available.", + "type" : "object", + "properties" : { + "links" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/link" + } + }, + "tilesets" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/tileSet" + } + } + } + }, + "timeStamp-response" : { + "description" : "This property indicates the time and date when the response was generated.", + "type" : "string", + "format" : "date-time", + "example" : "2017-08-17T08:05:32Z" + }, + "timeStamp" : { + "type" : "string", + "format" : "date-time", + "example" : "2017-08-17T08:05:32Z" + }, + "transmissionMode" : { + "type" : "string", + "enum" : [ "value", "reference" ] + }, + "valuesReference" : { + "type" : "string", + "format" : "uri" + } + }, + "responses" : { + "LandingPage" : { + "description" : "The landing page provides links to the API definition\n(link relations to\nthe Conformance declaration (path `/conformance`,\nlink relation `conformance`), and the Feature\nCollections (path `/collections`, link relation\n`data`).", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/landingPage" + }, + "example" : { + "title" : "Buildings in Bonn", + "description" : "Access to data about buildings in the city of Bonn via a Web API that conforms to the OGC API Features specification.", + "links" : [ { + "href" : "http://data.example.org/", + "rel" : "self", + "type" : "application/json", + "title" : "this document" + }, { + "href" : "http://data.example.org/api", + "rel" : "service-desc", + "type" : "application/vnd.oai.openapi+json;version=3.0", + "title" : "the API definition" + }, { + "href" : "http://data.example.org/api.html", + "rel" : "service-doc", + "type" : "text/html", + "title" : "the API documentation" + }, { + "href" : "http://data.example.org/conformance", + "rel" : "conformance", + "type" : "application/json", + "title" : "OGC API conformance classes implemented by this service" + }, { + "href" : "http://data.example.org/collections", + "rel" : "data", + "type" : "application/json", + "title" : "Information about the feature collections" + } ] + } + }, + "text/html" : { + "schema" : { + "type" : "string" + } + } + } + }, + "ConformanceDeclaration" : { + "description" : "The URIs of all conformance classes supported by the server.\nTo support \"generic\" clients that want to access multiple\nOGC API Features implementations - and not \"just\" the specified\nAPI / server, the server declares the conformance\nclasses it implements and conforms to.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/confClasses" + }, + "example" : { + "conformsTo" : [ "http://www.opengis.net/spechttp://127.0.0.1:8080/fakeogcapi-features-1/1.0/conf/core", "http://www.opengis.net/spechttp://127.0.0.1:8080/fakeogcapi-features-1/1.0/conf/oas30", "http://www.opengis.net/spechttp://127.0.0.1:8080/fakeogcapi-features-1/1.0/conf/html", "http://www.opengis.net/spechttp://127.0.0.1:8080/fakeogcapi-features-1/1.0/conf/geojson" ] + } + }, + "text/html" : { + "schema" : { + "type" : "string" + } + } + } + }, + "collectionsList" : { + "description" : "The collections of (mostly geospatial) data available from this API. The dataset contains one or more collections. This resource provides information about and access to the collections. The response contains the list of collections. Each collection is accessible via one or more OGC API set of specifications, for which a link to relevant accessible resources, e.g. /collections/{collectionId}/(items, coverage, map, tiles...) is provided, with the corresponding relation type, as well as key information about the collection. This information includes:\n* a local identifier for the collection that is unique for the dataset;\n* a list of coordinate reference systems (CRS) in which data may be returned by the server. The first CRS is the default coordinate reference system (the default is always WGS 84 with axis order longitude/latitude);\n* an optional title and description for the collection;\n* an optional extent that can be used to provide an indication of the spatial and temporal extent of the collection - typically derived from the data;\n* for collections accessible via the Features or Records API, an optional indicator about the type of the items in the collection (the default value, if the indicator is not provided, is 'feature').", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/collections" + }, + "example" : { + "links" : [ { + "href" : "http://data.example.org/collections.json", + "rel" : "self", + "type" : "application/json", + "title" : "this document" + }, { + "href" : "http://data.example.org/collections.html", + "rel" : "alternate", + "type" : "text/html", + "title" : "this document as HTML" + }, { + "href" : "http://schemas.example.org/1.0/buildings.xsd", + "rel" : "describedby", + "type" : "application/xml", + "title" : "GML application schema for Acme Corporation building data" + }, { + "href" : "http://download.example.org/buildings.gpkg", + "rel" : "enclosure", + "type" : "application/geopackage+sqlite3", + "title" : "Bulk download (GeoPackage)", + "length" : 472546 + } ], + "collections" : [ { + "id" : "buildings", + "title" : "Buildings", + "description" : "Buildings in the city of Bonn.", + "extent" : { + "spatial" : { + "bbox" : [ [ 7.01, 50.63, 7.22, 50.78 ] ] + }, + "temporal" : { + "interval" : [ [ "2010-02-15T12:34:56Z", null ] ] + } + }, + "links" : [ { + "href" : "http://data.example.org/collections/buildings/items", + "rel" : "items", + "type" : "application/geo+json", + "title" : "Buildings" + }, { + "href" : "http://data.example.org/collections/buildings/items.html", + "rel" : "items", + "type" : "text/html", + "title" : "Buildings" + }, { + "href" : "https://creativecommons.org/publicdomain/zero/1.0/", + "rel" : "license", + "type" : "text/html", + "title" : "CC0-1.0" + }, { + "href" : "https://creativecommons.org/publicdomain/zero/1.0/rdf", + "rel" : "license", + "type" : "application/rdf+xml", + "title" : "CC0-1.0" + } ] + } ] + } + }, + "text/html" : { + "schema" : { + "type" : "string" + } + } + } + }, + "Collection" : { + "description" : "Information about the collection of (mostly geospatial) data available from this API. The collection is accessible via one or more OGC API set of specifications, for which a link to relevant accessible resources, e.g. /collections/{collectionId}/(items, coverage, map, tiles...) is contained in the response, with the corresponding relation type, as well as key information about the collection. This information includes:\n* a local identifier for the collection that is unique for the dataset;\n* a list of coordinate reference systems (CRS) in which data may be returned by the server. The first CRS is the default coordinate reference system (the default is always WGS 84 with axis order longitude/latitude);\n* an optional title and description for the collection;\n* an optional extent that can be used to provide an indication of the spatial and temporal extent of the collection - typically derived from the data;\n* for collections accessible via the Features or Records API, an optional indicator about the type of the items in the collection (the default value, if the indicator is not provided, is 'feature').", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/collection" + }, + "example" : { + "id" : "buildings", + "title" : "Buildings", + "description" : "Buildings in the city of Bonn.", + "extent" : { + "spatial" : { + "bbox" : [ [ 7.01, 50.63, 7.22, 50.78 ] ] + }, + "temporal" : { + "interval" : [ [ "2010-02-15T12:34:56Z", null ] ] + } + }, + "links" : [ { + "href" : "http://data.example.org/collections/buildings/items", + "rel" : "items", + "type" : "application/geo+json", + "title" : "Buildings" + }, { + "href" : "http://data.example.org/collections/buildings/items.html", + "rel" : "items", + "type" : "text/html", + "title" : "Buildings" + }, { + "href" : "https://creativecommons.org/publicdomain/zero/1.0/", + "rel" : "license", + "type" : "text/html", + "title" : "CC0-1.0" + }, { + "href" : "https://creativecommons.org/publicdomain/zero/1.0/rdf", + "rel" : "license", + "type" : "application/rdf+xml", + "title" : "CC0-1.0" + } ] + } + }, + "text/html" : { + "schema" : { + "type" : "string" + } + } + } + }, + "DomainSet" : { + "description" : "The domain set of a coverage.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/domainSet-json" + } + }, + "text/html" : { + "schema" : { + "type" : "string" + } + } + } + }, + "Features" : { + "description" : "The response is a document consisting of features in the collection.\nThe features included in the response are determined by the server\nbased on the query parameters of the request. To support access to\nlarger collections without overloading the client, the API supports\npaged access with links to the next page, if more features are selected\nthat the page size.\nThe `bbox` and `datetime` parameter can be used to select only a\nsubset of the features in the collection (the features that are in the\nbounding box or time interval). The `bbox` parameter matches all features\nin the collection that are not associated with a location, too. The\n`datetime` parameter matches all features in the collection that are\nnot associated with a time stamp or interval, too.\nThe `limit` parameter may be used to control the subset of the\nselected features that should be returned in the response, the page size.\nEach page may include information about the number of selected and\nreturned features (`numberMatched` and `numberReturned`) as well as\nlinks to support paging (link relation `next`).", + "content" : { + "application/geo+json" : { + "schema" : { + "$ref" : "#/components/schemas/featureCollectionGeoJSON" + }, + "example" : { + "type" : "FeatureCollection", + "links" : [ { + "href" : "http://data.example.com/collections/buildings/items.json", + "rel" : "self", + "type" : "application/geo+json", + "title" : "this document" + }, { + "href" : "http://data.example.com/collections/buildings/items.html", + "rel" : "alternate", + "type" : "text/html", + "title" : "this document as HTML" + }, { + "href" : "http://data.example.com/collections/buildings/items.json&offset=10&limit=2", + "rel" : "next", + "type" : "application/geo+json", + "title" : "next page" + } ], + "timeStamp" : "2018-04-03T14:52:23Z", + "numberMatched" : 123, + "numberReturned" : 2, + "features" : [ { + "type" : "Feature", + "id" : "123", + "geometry" : { + "type" : "Polygon", + "coordinates" : [ "..." ] + }, + "properties" : { + "function" : "residential", + "floors" : "2", + "lastUpdate" : "2015-08-01T12:34:56Z" + } + }, { + "type" : "Feature", + "id" : "132", + "geometry" : { + "type" : "Polygon", + "coordinates" : [ "..." ] + }, + "properties" : { + "function" : "public use", + "floors" : "10", + "lastUpdate" : "2013-12-03T10:15:37Z" + } + } ] + } + }, + "text/html" : { + "schema" : { + "type" : "string" + } + } + } + }, + "Feature" : { + "description" : "fetch the feature with id `featureId` in the feature collection\nwith id `collectionId`", + "content" : { + "application/geo+json" : { + "schema" : { + "$ref" : "#/components/schemas/featureGeoJSON" + }, + "example" : { + "type" : "Feature", + "links" : [ { + "href" : "http://data.example.com/id/building/123", + "rel" : "canonical", + "title" : "canonical URI of the building" + }, { + "href" : "http://data.example.com/collections/buildings/items/123.json", + "rel" : "self", + "type" : "application/geo+json", + "title" : "this document" + }, { + "href" : "http://data.example.com/collections/buildings/items/123.html", + "rel" : "alternate", + "type" : "text/html", + "title" : "this document as HTML" + }, { + "href" : "http://data.example.com/collections/buildings", + "rel" : "collection", + "type" : "application/geo+json", + "title" : "the collection document" + } ], + "id" : "123", + "geometry" : { + "type" : "Polygon", + "coordinates" : [ "..." ] + }, + "properties" : { + "function" : "residential", + "floors" : "2", + "lastUpdate" : "2015-08-01T12:34:56Z" + } + } + }, + "text/html" : { + "schema" : { + "type" : "string" + } + } + } + }, + "content-coverage" : { + "description" : "A coverage returned as a response.", + "content" : { + "image/png" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + }, + "image/jpeg" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + }, + "image/tiff; application=geotiff" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + }, + "text/html" : { + "schema" : { + "type" : "string" + } + } + } + }, + "content-coverageTile" : { + "description" : "A coverage returned as a response.", + "content" : { + "image/png" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + }, + "image/jpeg" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + }, + "image/tiff; application=geotiff" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + }, + "application/vnd.gnosis-map-tile" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + }, + "text/html" : { + "schema" : { + "type" : "string" + } + } + } + }, + "content-process-results" : { + "description" : "Processing results returned as a response.", + "content" : { + "application/geo+json" : { + "schema" : { + "$ref" : "#/components/schemas/featureCollectionGeoJSON" + } + }, + "image/png" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + }, + "image/jpeg" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + }, + "image/tiff; application=geotiff" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + } + } + }, + "content-vector" : { + "description" : "Vector features returned as a response.", + "content" : { + "application/geo+json" : { + "schema" : { + "$ref" : "#/components/schemas/featureCollectionGeoJSON" + } + }, + "application/vnd.mapbox-vector-tile" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + }, + "text/mapml" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + }, + "text/html" : { + "schema" : { + "type" : "string" + } + } + } + }, + "content-vectorTile" : { + "description" : "A vector tile returned as a response.", + "content" : { + "application/geo+json" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + }, + "application/vnd.mapbox-vector-tile" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + }, + "application/vnd.gnosis-map-tile" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + }, + "text/mapml" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + } + } + }, + "content-map" : { + "description" : "A map image returned as a response.", + "content" : { + "image/png" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + }, + "image/jpeg" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + }, + "image/tiff; application=geotiff" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + } + } + }, + "content-mapTile" : { + "description" : "A map image returned as a response.", + "content" : { + "image/png" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + }, + "image/jpeg" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + }, + "image/tiff; application=geotiff" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + }, + "application/vnd.gnosis.map-tile" : { + "schema" : { + "type" : "string", + "format" : "binary" + } + } + } + }, + "RangeType" : { + "description" : "The range type of a coverage.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/rangeType-json" + } + }, + "text/html" : { + "schema" : { + "type" : "string" + } + } + } + }, + "InvalidParameter" : { + "description" : "A query parameter has an invalid value.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + }, + "text/html" : { + "schema" : { + "type" : "string" + } + } + } + }, + "response-style" : + { + "description" : "A cartographic style sheet to be applied to vector features and/or raster coverages", + "content" : { + "application/vnd.gnosis.cmss+eccss" : { + "schema" : { + "type" : "string" + } + }, + "application/vnd.ogc.sld+xml;version=1.0" : { + "schema" : { + "type" : "string" + } + }, + "application/vnd.mapbox.style+json" : { + "schema" : { + "$ref" : "#/components/schemas/mb-style" + } + } + } + }, + "NotFound" : { + "description" : "The requested resource does not exist on the server. For example, a path parameter had an incorrect value." + }, + "NotAcceptable" : { + "description" : "Content negotiation failed. For example, the `Accept` header submitted in the request did not support any of the media types supported by the server for the requested resource." + }, + "ServerError" : { + "description" : "A server error occurred.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/exception" + } + }, + "text/html" : { + "schema" : { + "type" : "string" + } + } + } + } + } + }, + "servers" : [ { + "description" : "GNOSIS Map Server", + "url" : "http://127.0.0.1:8080/fakeogcapi" + } ] +} diff --git a/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe.http_data b/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe.http_data index 29a7bb28a7bf..9b7ab88b7888 100644 --- a/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe.http_data +++ b/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe.http_data @@ -1,15 +1,14 @@ HTTP/1.1 200 OK -Date: Tue, 20 Jun 2023 10:38:08 GMT +Date: Fri, 12 Jul 2024 14:17:02 GMT Server: Apache/2.4.52 (Ubuntu) -Expires: Wed, 12 Jun 2024 14:15:05 GMT +Access-Control-Allow-Headers: x-requested-with, Content-Type, origin, authorization, acc$ +Expires: Sat, 12 Jul 2025 14:17:02 GMT Access-Control-Allow-Origin: * Vary: Accept,Accept-Encoding,Prefer -Content-Length: 11484 -Access-Control-Allow-Headers: x-requested-with, Content-Type, origin, authorization, acc$ -Age: 591783 +Content-Type: application/json +Content-Length: 11200 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive -Content-Type: application/json { "links" : [ @@ -43,52 +42,40 @@ Content-Type: application/json "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/dggs" }, { - "rel" : "queryables", + "rel" : "http://www.opengis.net/def/rel/ogc/1.0/schema", "type" : "application/json", - "title" : "Queryables (as JSON)", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/queryables?f=json" + "title" : "Schema (as JSON)", + "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/schema?f=json" }, { - "rel" : "queryables", + "rel" : "http://www.opengis.net/def/rel/ogc/1.0/schema", "type" : "text/plain", - "title" : "Queryables (as ECON)", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/queryables?f=econ" - }, - { - "rel" : "queryables", - "type" : "text/xml", - "title" : "Queryables (as XSD/WFS schema)", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/queryables?f=xsd" + "title" : "Schema (as ECON)", + "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/schema?f=econ" }, { - "rel" : "queryables", + "rel" : "http://www.opengis.net/def/rel/ogc/1.0/schema", "type" : "text/html", - "title" : "Queryables (as HTML)", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/queryables?f=html" + "title" : "Schema (as HTML)", + "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/schema?f=html" }, { - "rel" : "http://www.opengis.net/def/rel/ogc/0.0/schema-item", + "rel" : "http://www.opengis.net/def/rel/ogc/1.0/queryables", "type" : "application/json", - "title" : "Data attributes (as JSON)", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/schemas/feature?f=json" + "title" : "Queryables (as JSON)", + "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/queryables?f=json" }, { - "rel" : "describedby", + "rel" : "http://www.opengis.net/def/rel/ogc/1.0/queryables", "type" : "text/plain", - "title" : "Data attributes (as ECON)", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/schema?f=econ" - }, - { - "rel" : "describedby", - "type" : "text/xml", - "title" : "Data attributes (as XSD/WFS schema)", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/schema?f=xsd" + "title" : "Queryables (as ECON)", + "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/queryables?f=econ" }, { - "rel" : "describedby", + "rel" : "http://www.opengis.net/def/rel/ogc/1.0/queryables", "type" : "text/html", - "title" : "Data attributes (as HTML)", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/schema?f=html" + "title" : "Queryables (as HTML)", + "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/queryables?f=html" }, { "rel" : "items", @@ -256,6 +243,7 @@ Content-Type: application/json "storageCrs" : "http://www.opengis.net/def/crs/OGC/1.3/CRS84", "id" : "NaturalEarth:physical:ne_10m_lakes_europe", "dataType" : "vector", + "attribution" : "Natural Earth", "minScaleDenominator" : 4367830.1877243574709, "minCellSize" : 0.010986328125, "geometryDimension" : 2 diff --git a/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_f_json.http_data b/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_f_json.http_data index 1c08d6da6531..995f137c297a 100644 --- a/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_f_json.http_data +++ b/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_f_json.http_data @@ -1,15 +1,14 @@ HTTP/1.1 200 OK -Date: Tue, 20 Jun 2023 10:38:13 GMT +Date: Fri, 12 Jul 2024 14:16:47 GMT Server: Apache/2.4.52 (Ubuntu) -Expires: Wed, 12 Jun 2024 14:15:05 GMT +Access-Control-Allow-Headers: x-requested-with, Content-Type, origin, authorization, acc$ +Expires: Sat, 12 Jul 2025 14:16:47 GMT Access-Control-Allow-Origin: * Vary: Accept,Accept-Encoding,Prefer -Content-Length: 11484 -Access-Control-Allow-Headers: x-requested-with, Content-Type, origin, authorization, acc$ -Age: 591787 +Content-Type: application/json +Content-Length: 11200 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive -Content-Type: application/json { "links" : [ @@ -43,52 +42,40 @@ Content-Type: application/json "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/dggs" }, { - "rel" : "queryables", + "rel" : "http://www.opengis.net/def/rel/ogc/1.0/schema", "type" : "application/json", - "title" : "Queryables (as JSON)", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/queryables?f=json" + "title" : "Schema (as JSON)", + "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/schema?f=json" }, { - "rel" : "queryables", + "rel" : "http://www.opengis.net/def/rel/ogc/1.0/schema", "type" : "text/plain", - "title" : "Queryables (as ECON)", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/queryables?f=econ" - }, - { - "rel" : "queryables", - "type" : "text/xml", - "title" : "Queryables (as XSD/WFS schema)", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/queryables?f=xsd" + "title" : "Schema (as ECON)", + "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/schema?f=econ" }, { - "rel" : "queryables", + "rel" : "http://www.opengis.net/def/rel/ogc/1.0/schema", "type" : "text/html", - "title" : "Queryables (as HTML)", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/queryables?f=html" + "title" : "Schema (as HTML)", + "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/schema?f=html" }, { - "rel" : "http://www.opengis.net/def/rel/ogc/0.0/schema-item", + "rel" : "http://www.opengis.net/def/rel/ogc/1.0/queryables", "type" : "application/json", - "title" : "Data attributes (as JSON)", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/schemas/feature?f=json" + "title" : "Queryables (as JSON)", + "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/queryables?f=json" }, { - "rel" : "describedby", + "rel" : "http://www.opengis.net/def/rel/ogc/1.0/queryables", "type" : "text/plain", - "title" : "Data attributes (as ECON)", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/schema?f=econ" - }, - { - "rel" : "describedby", - "type" : "text/xml", - "title" : "Data attributes (as XSD/WFS schema)", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/schema?f=xsd" + "title" : "Queryables (as ECON)", + "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/queryables?f=econ" }, { - "rel" : "describedby", + "rel" : "http://www.opengis.net/def/rel/ogc/1.0/queryables", "type" : "text/html", - "title" : "Data attributes (as HTML)", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/schema?f=html" + "title" : "Queryables (as HTML)", + "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/queryables?f=html" }, { "rel" : "items", @@ -256,6 +243,7 @@ Content-Type: application/json "storageCrs" : "http://www.opengis.net/def/crs/OGC/1.3/CRS84", "id" : "NaturalEarth:physical:ne_10m_lakes_europe", "dataType" : "vector", + "attribution" : "Natural Earth", "minScaleDenominator" : 4367830.1877243574709, "minCellSize" : 0.010986328125, "geometryDimension" : 2 diff --git a/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_1000_crs_http___www.opengis.net_def_crs_OGC_1.3_CRS84.http_data b/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_1000_crs_http___www.opengis.net_def_crs_OGC_1.3_CRS84.http_data deleted file mode 100644 index 492488527f86..000000000000 --- a/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_1000_crs_http___www.opengis.net_def_crs_OGC_1.3_CRS84.http_data +++ /dev/null @@ -1,258 +0,0 @@ -HTTP/1.1 200 OK -Date: Tue, 20 Jun 2023 10:37:55 GMT -Server: Apache/2.4.52 (Ubuntu) -Expires: Wed, 12 Jun 2024 14:15:06 GMT -Access-Control-Allow-Origin: * -Vary: Accept,Accept-Encoding,Prefer -Content-Crs: -Content-Length: 15561 -Access-Control-Allow-Headers: x-requested-with, Content-Type, origin, authorization, acc$ -Age: 591768 -Keep-Alive: timeout=5, max=100 -Connection: Keep-Alive -Content-Type: application/json; charset=utf-8 - -{ - "type" : "FeatureCollection", - "features" : [ { - "type" : "Feature", - "id" : 1, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-4.6543673319905, 58.1553000824025], [-4.6250972807178, 58.1436693142282], [-4.6081017670756, 58.1342702801685], [-4.5893036989562, 58.1245279023988], [-4.5722223493866, 58.1163305713239], [-4.5518792345724, 58.1083907480315], [-4.5339395257279, 58.101137612159], [-4.5218366599524, 58.0922965116279], [-4.4935108038821, 58.0780048297015], [-4.4530820820363, 58.0534128364768], [-4.4285330067753, 58.0354731276323], [-4.4254429133858, 58.0470180598791], [-4.4260437648782, 58.0616530855155], [-4.4324814594397, 58.0646573429775], [-4.4707642830983, 58.0880047152536], [-4.5038969511079, 58.1081761582128], [-4.5227808551547, 58.1120816929134], [-4.5409780717817, 58.1248712461088], [-4.5504200238052, 58.126330456876], [-4.563467084783, 58.126330456876], [-4.5802050906427, 58.14002128731], [-4.6111918604651, 58.154055461454], [-4.6317924830617, 58.1573601446622], [-4.6504188793261, 58.1622527925289], [-4.6814056491485, 58.1725960217909], [-4.7105898644937, 58.182252563633], [-4.7324780260026, 58.1904928126717], [-4.7421774858085, 58.1910936641641], [-4.7303321278154, 58.179591649881], [-4.6950535616188, 58.1656003937008], [-4.6762554934994, 58.1598064685955], [-4.6543673319905, 58.1553000824025] ] - ] - }, - "properties" : { - "feature::id" : 1, - "id" : 98696, - "name" : "Loch Bhanabhaidh", - "pfafstette" : 57, - "lke_type" : "N", - "altitude" : 92, - "objectid" : 52843, - "scalerank" : 11, - "featurecla" : "Lake", - "funkyname" : 0 - } - }, { - "type" : "Feature", - "id" : 2, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-5.3823418329976, 57.6568508514924], [-5.347063266801, 57.6379669474455], [-5.3269776597693, 57.6345764283098], [-5.3370204632851, 57.6465076222304], [-5.392298800586, 57.6738463651346], [-5.4348734206189, 57.6929448590002], [-5.482598196301, 57.7117858450833], [-5.5333272294452, 57.7340173503021], [-5.5455159311481, 57.7360774125618], [-5.5558162424464, 57.7279229994507], [-5.5528119849844, 57.7191248168834], [-5.5443142281633, 57.7050906427394], [-5.5226835744369, 57.690798960813], [-5.5008812488555, 57.6859921488738], [-5.4810531496063, 57.6883526368797], [-5.4579632851126, 57.690798960813], [-5.4488646767991, 57.6829449734481], [-5.4330708661417, 57.6722584004761], [-5.4098951657206, 57.6668078190808], [-5.3823418329976, 57.6568508514924] ] - ] - }, - "properties" : { - "feature::id" : 2, - "id" : 100550, - "name" : "Loch Maree", - "pfafstette" : 1, - "lke_type" : "N", - "altitude" : 39, - "objectid" : 54265, - "scalerank" : 12, - "featurecla" : "Lake", - "funkyname" : 0 - } - }, { - "type" : "Feature", - "id" : 3, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-5.6786474546786, 56.7646722212049], [-5.6926387108588, 56.7644147134225], [-5.7287756363304, 56.7677193966307], [-5.7285181285479, 56.7613675379967], [-5.6886902581945, 56.7580199368248], [-5.6689479948727, 56.7613675379967], [-5.6553000824025, 56.7631700924739], [-5.6409654825124, 56.7664747756821], [-5.625, 56.7784488875664], [-5.6206223676982, 56.7817535707746], [-5.5902364493683, 56.7938993545138], [-5.5324688701703, 56.8212380974181], [-5.471096182018, 56.8537699139352], [-5.4567615821278, 56.8656152719282], [-5.4643151437466, 56.8656152719282], [-5.4819973448086, 56.8574179408533], [-5.5114390679363, 56.8452292391503], [-5.5415674784838, 56.8270320225234], [-5.5850004577916, 56.8078476927303], [-5.625, 56.7896075581395], [-5.6303218275041, 56.7871612342062], [-5.6616519410365, 56.7719682750412], [-5.6786474546786, 56.7646722212049] ] - ] - }, - "properties" : { - "feature::id" : 3, - "line::hidden" : [ - { "contour" : 0, "segments" : [ { "from" : 2, "to" : 3 } ] } - ], - "id" : 103640, - "pfafstette" : 1, - "lke_type" : "N", - "altitude" : 3, - "objectid" : 56386, - "scalerank" : 12, - "featurecla" : "Lake", - "note" : "_untitled_56386", - "funkyname" : 0 - } - }, { - "type" : "Feature", - "id" : 4, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-4.4452710126351, 56.7525693554294], [-4.4300780534701, 56.7802085240798], [-4.4121383446255, 56.7975044634682], [-4.3905076908991, 56.8154441723128], [-4.3622676707563, 56.8394782320088], [-4.348619758286, 56.8604651162791], [-4.3263882530672, 56.8854004532137], [-4.3102510986999, 56.9020955411097], [-4.3239848470976, 56.8987479399377], [-4.3391778062626, 56.8866021561985], [-4.3531690624428, 56.8725679820546], [-4.366816974913, 56.8576754486358], [-4.4026963926021, 56.82458569859], [-4.4400350210584, 56.7929551593115], [-4.4522237227614, 56.7878050036623], [-4.4626098699872, 56.7699082127816], [-4.4541121131661, 56.7458741530855], [-4.4452710126351, 56.7525693554294] ] - ] - }, - "properties" : { - "feature::id" : 4, - "id" : 103920, - "pfafstette" : 943, - "lke_type" : "N", - "altitude" : 358, - "objectid" : 56990, - "scalerank" : 12, - "featurecla" : "Lake", - "note" : "_untitled_56990", - "funkyname" : 0 - } - }, { - "type" : "Feature", - "id" : 5, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-4.2500801135323, 56.6966472486724], [-4.2175482970152, 56.6969047564549], [-4.1923983702619, 56.7048445797473], [-4.2109389305988, 56.7123981413661], [-4.2664747756821, 56.709737227614], [-4.3239848470976, 56.7020978300678], [-4.3674178264054, 56.6999519318806], [-4.4151426020875, 56.6987502288958], [-4.4378891228713, 56.6926129600806], [-4.4206361014466, 56.6908533235671], [-4.3772031221388, 56.68870742538], [-4.3032983885735, 56.6914112570958], [-4.2500801135323, 56.6966472486724] ] - ] - }, - "properties" : { - "feature::id" : 5, - "id" : 104752, - "name" : "Loch Rannoch", - "pfafstette" : 9153, - "lke_type" : "N", - "altitude" : 205, - "objectid" : 57822, - "scalerank" : 12, - "featurecla" : "Lake", - "funkyname" : 0 - } - }, { - "type" : "Feature", - "id" : 6, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-5.3078362479399, 56.222790010987], [-5.2792528840872, 56.2403434581578], [-5.2729010254532, 56.25], [-5.2704117835561, 56.2537767808094], [-5.2627723860099, 56.2677251190258], [-5.2476652627724, 56.2771670710493], [-5.2273221479583, 56.2926604559605], [-5.2175368522249, 56.3121452114997], [-5.1989962918879, 56.3296986586706], [-5.1554774766526, 56.346822926204], [-5.1269799487273, 56.3562219602637], [-5.1032892327413, 56.3635180141], [-5.0719591192089, 56.3704707242263], [-5.0512726606849, 56.3814577229445], [-5.0443199505585, 56.3933030809376], [-5.0625171671855, 56.396908189892], [-5.0859503753891, 56.389054202527], [-5.113675379967, 56.3714149194287], [-5.1461213605567, 56.3571232375023], [-5.1713571232375, 56.3537756363303], [-5.2005413385827, 56.3419302783373], [-5.2238887108588, 56.3254926982238], [-5.237879967039, 56.3045058139535], [-5.2577080662882, 56.2860081715803], [-5.2798537355796, 56.2732186183849], [-5.2841455319539, 56.2589269364585], [-5.2931583043399, 56.25], [-5.2995101629738, 56.2437768952573], [-5.3324711591284, 56.2246354834279], [-5.3595094762864, 56.2136484847098], [-5.3755607947262, 56.2081979033144], [-5.3865477934444, 56.1990992950009], [-5.3595094762864, 56.2015456189343], [-5.3078362479399, 56.222790010987] ] - ] - }, - "properties" : { - "feature::id" : 6, - "id" : 105653, - "name" : "Loch Awe", - "pfafstette" : 15, - "lke_type" : "N", - "altitude" : 124, - "objectid" : 58413, - "scalerank" : 11, - "featurecla" : "Lake", - "funkyname" : 0 - } - }, { - "type" : "Feature", - "id" : 7, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-4.297204037722, 56.4774652078374], [-4.2798651803699, 56.4799115317707], [-4.2528268632119, 56.4881517808094], [-4.2142006958433, 56.4966066196667], [-4.1719694195202, 56.5033018220106], [-4.1322273850943, 56.5233874290423], [-4.1020131386193, 56.5510265976927], [-4.0838159219923, 56.5665199826039], [-4.0543741988647, 56.5728718412379], [-4.0227865775499, 56.5793095357993], [-4.0139454770189, 56.5869060153818], [-4.0299967954587, 56.5877643746567], [-4.0689663065373, 56.5829575627175], [-4.1214978941586, 56.5546746246109], [-4.1662184123787, 56.520941105109], [-4.1993510803882, 56.5096965986083], [-4.2154023988281, 56.505748145944], [-4.2363463651346, 56.5015851034609], [-4.2777192821828, 56.4923577412562], [-4.3011524903864, 56.4835166407251], [-4.297204037722, 56.4774652078374] ] - ] - }, - "properties" : { - "feature::id" : 7, - "id" : 105409, - "pfafstette" : 6551, - "lke_type" : "N", - "altitude" : 126, - "objectid" : 58448, - "scalerank" : 12, - "featurecla" : "Lake", - "note" : "_untitled_58448", - "funkyname" : 0 - } - }, { - "type" : "Feature", - "id" : 8, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-4.5220941677349, 56.06837117744], [-4.5202916132577, 56.0787573246658], [-4.5297335652811, 56.0863108862846], [-4.5428664621864, 56.094250709577], [-4.5553126716719, 56.1036497436367], [-4.569303927852, 56.1103020280168], [-4.5856985900018, 56.1203877494964], [-4.5993465024721, 56.1324476973082], [-4.6193462735763, 56.1360957242263], [-4.6388310291156, 56.1574259522066], [-4.6628650888116, 56.1872539370079], [-4.6805472898737, 56.2030048297015], [-4.6780580479766, 56.2184982146127], [-4.6808047976561, 56.2467811527193], [-4.6817489928585, 56.25], [-4.6895600622597, 56.2762657938107], [-4.6941093664164, 56.2966518265885], [-4.7050963651346, 56.3078534151254], [-4.705697216627, 56.2984543810657], [-4.7011479124702, 56.2796133949826], [-4.7054397088445, 56.2677680369896], [-4.7017487639627, 56.25], [-4.7008045687603, 56.2455365317707], [-4.7008045687603, 56.2194424098151], [-4.7020062717451, 56.2036056811939], [-4.6826073521333, 56.1854513825307], [-4.6701611426479, 56.1720180598791], [-4.6597749954221, 56.1470827229445], [-4.6421786302875, 56.1181560153818], [-4.6364276231459, 56.0926627449185], [-4.6316208112067, 56.072877563633], [-4.6340242171763, 56.063864791247], [-4.6354834279436, 56.0525773667826], [-4.6281873741073, 56.0400882393335], [-4.6096468137704, 56.0239940029299], [-4.5893036989562, 56.017298800586], [-4.590848745651, 56.0281999633767], [-4.5881019959714, 56.0449379692364], [-4.5622653817982, 56.0589721433803], [-4.5375446346823, 56.063864791247], [-4.5220941677349, 56.06837117744] ], - [ [-4.6041533144113, 56.0573841787218], [-4.5959130653726, 56.063864791247], [-4.6011490569493, 56.0556245422084], [-4.6041533144113, 56.0573841787218] ] - ] - }, - "properties" : { - "feature::id" : 8, - "id" : 106243, - "name" : "Loch Lomond North Basin", - "pfafstette" : 15, - "lke_type" : "N", - "altitude" : 9, - "objectid" : 59258, - "scalerank" : 10, - "featurecla" : "Lake", - "funkyname" : 0 - } - }, { - "type" : "Feature", - "id" : 9, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-7.6527879509248, 54.3903217130562], [-7.6636891137154, 54.4100210584142], [-7.6798262680828, 54.4304070911921], [-7.6992251876946, 54.445943394067], [-7.7226583958982, 54.4659431651712], [-7.730211957517, 54.4884750961362], [-7.7236025911005, 54.4951273805164], [-7.735705456876, 54.5012217313679], [-7.7551902124153, 54.5069727385094], [-7.7514992675334, 54.5167151162791], [-7.7399972532503, 54.5252557910639], [-7.7472933070866, 54.5343114814137], [-7.7671214063358, 54.5377449185131], [-7.7822285295734, 54.5395474729903], [-7.7962197857535, 54.5401483244827], [-7.8105543856437, 54.5395474729903], [-7.8369060153818, 54.5413071095037], [-7.8695236678264, 54.5334531221388], [-7.8938152353049, 54.5213073383996], [-7.9211110602454, 54.5167151162791], [-7.9560462827321, 54.51122161692], [-7.974930186779, 54.4961144936825], [-7.9788786394433, 54.4848270692181], [-7.9873763962644, 54.4875738188976], [-8.0011101446622, 54.48817467039], [-8.0110671122505, 54.4802348470976], [-7.9919257004212, 54.4787756363303], [-7.9092657022523, 54.4817369758286], [-7.8366485075994, 54.476329312397], [-7.8211980406519, 54.4702349615455], [-7.8080651437466, 54.4640976927303], [-7.781627678081, 54.4528961041934], [-7.7506409082586, 54.4389906839407], [-7.7260059970701, 54.4231110373558], [-7.7020577733016, 54.417059604468], [-7.6889248763963, 54.4092056171031], [-7.68128547885, 54.3991198956235], [-7.6691826130745, 54.3857294909357], [-7.654247161692, 54.3735837071965], [-7.6527879509248, 54.3903217130562] ] - ] - }, - "properties" : { - "feature::id" : 9, - "id" : 110629, - "name" : "Lower Lough Erne", - "lge_id" : "en", - "pfafstette" : 1151, - "lke_type" : "N", - "altitude" : 40, - "objectid" : 62367, - "scalerank" : 10, - "featurecla" : "Lake", - "funkyname" : 0 - } - }, { - "type" : "Feature", - "id" : 10, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-8.1280614814137, 54.4278749313313], [-8.1031690624428, 54.4169308505768], [-8.0888344625527, 54.4241839864494], [-8.0870319080755, 54.4381752426295], [-8.1194778886651, 54.4549132484893], [-8.1817947720198, 54.4688615867057], [-8.2217084783007, 54.4652564777513], [-8.2064296832082, 54.4549132484893], [-8.1815372642373, 54.4491622413477], [-8.1611083134957, 54.4424670390038], [-8.1280614814137, 54.4278749313313] ] - ] - }, - "properties" : { - "feature::id" : 10, - "id" : 110689, - "name" : "Melvin ( Lough )", - "lge_id" : "en", - "pfafstette" : 1, - "altitude" : 24, - "objectid" : 62564, - "scalerank" : 12, - "featurecla" : "Lake", - "funkyname" : 0 - } - } ], - "numberMatched" : 768, - "numberReturned" : 10, - "links" : [ - { - "rel" : "self", - "type" : "application/geo+json", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/items?limit=10&f=json" - }, - { - "rel" : "alternate", - "type" : "text/html", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/items?limit=10&f=html" - }, - { - "rel" : "next", - "type" : "application/geo+json", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/items?offset=10&limit=10&f=json" - }, - { - "rel" : "collection", - "type" : "application/json", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe" - } - ], - "timeStamp" : "2023-06-13T14:15:06Z" -} diff --git a/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_1000_crs_http___www.opengis.net_def_crs_OGC_1.3_CRS84_f_json.http_data b/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_1000_crs_http___www.opengis.net_def_crs_OGC_1.3_CRS84_f_json.http_data new file mode 100644 index 000000000000..568271b3a224 --- /dev/null +++ b/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_1000_crs_http___www.opengis.net_def_crs_OGC_1.3_CRS84_f_json.http_data @@ -0,0 +1,16188 @@ +HTTP/1.1 200 OK +Date: Fri, 12 Jul 2024 14:16:48 GMT +Server: Apache/2.4.52 (Ubuntu) +Expires: Sat, 12 Jul 2025 14:15:59 GMT +Access-Control-Allow-Origin: * +Vary: Accept,Accept-Encoding,Prefer +Content-Crs: +Content-Length: 1022237 +Access-Control-Allow-Headers: x-requested-with, Content-Type, origin, authorization, acc$ +Age: 48 +Keep-Alive: timeout=5, max=100 +Connection: Keep-Alive +Content-Type: application/json; charset=utf-8 + +{ + "type" : "FeatureCollection", + "features" : [ { + "type" : "Feature", + "id" : 1, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-4.6543673319905, 58.1553000824025], [-4.6250972807178, 58.1436693142282], [-4.6081017670756, 58.1342702801685], [-4.5893036989562, 58.1245279023988], [-4.5722223493866, 58.1163305713239], [-4.5518792345724, 58.1083907480315], [-4.5339395257279, 58.101137612159], [-4.5218366599524, 58.0922965116279], [-4.4935108038821, 58.0780048297015], [-4.4530820820363, 58.0534128364768], [-4.4285330067753, 58.0354731276323], [-4.4254429133858, 58.0470180598791], [-4.4260437648782, 58.0616530855155], [-4.4324814594397, 58.0646573429775], [-4.4707642830983, 58.0880047152536], [-4.5038969511079, 58.1081761582128], [-4.5227808551547, 58.1120816929134], [-4.5409780717817, 58.1248712461088], [-4.5504200238052, 58.126330456876], [-4.563467084783, 58.126330456876], [-4.5802050906427, 58.14002128731], [-4.6111918604651, 58.154055461454], [-4.6317924830617, 58.1573601446622], [-4.6504188793261, 58.1622527925289], [-4.6814056491485, 58.1725960217909], [-4.7105898644937, 58.182252563633], [-4.7324780260026, 58.1904928126717], [-4.7421774858085, 58.1910936641641], [-4.7303321278154, 58.179591649881], [-4.6950535616188, 58.1656003937008], [-4.6762554934994, 58.1598064685955], [-4.6543673319905, 58.1553000824025] ] + ] + }, + "properties" : { + "feature::id" : 1, + "id" : 98696, + "name" : "Loch Bhanabhaidh", + "pfafstette" : 57, + "lke_type" : "N", + "altitude" : 92, + "objectid" : 52843, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 2, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-5.3823418329976, 57.6568508514924], [-5.347063266801, 57.6379669474455], [-5.3269776597693, 57.6345764283098], [-5.3370204632851, 57.6465076222304], [-5.392298800586, 57.6738463651346], [-5.4348734206189, 57.6929448590002], [-5.482598196301, 57.7117858450833], [-5.5333272294452, 57.7340173503021], [-5.5455159311481, 57.7360774125618], [-5.5558162424464, 57.7279229994507], [-5.5528119849844, 57.7191248168834], [-5.5443142281633, 57.7050906427394], [-5.5226835744369, 57.690798960813], [-5.5008812488555, 57.6859921488738], [-5.4810531496063, 57.6883526368797], [-5.4579632851126, 57.690798960813], [-5.4488646767991, 57.6829449734481], [-5.4330708661417, 57.6722584004761], [-5.4098951657206, 57.6668078190808], [-5.3823418329976, 57.6568508514924] ] + ] + }, + "properties" : { + "feature::id" : 2, + "id" : 100550, + "name" : "Loch Maree", + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : 39, + "objectid" : 54265, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 3, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-5.6786474546786, 56.7646722212049], [-5.6926387108588, 56.7644147134225], [-5.7287756363304, 56.7677193966307], [-5.7285181285479, 56.7613675379967], [-5.6886902581945, 56.7580199368248], [-5.6689479948727, 56.7613675379967], [-5.6553000824025, 56.7631700924739], [-5.6409654825124, 56.7664747756821], [-5.625, 56.7784488875664], [-5.6206223676982, 56.7817535707746], [-5.5902364493683, 56.7938993545138], [-5.5324688701703, 56.8212380974181], [-5.471096182018, 56.8537699139352], [-5.4567615821278, 56.8656152719282], [-5.4643151437466, 56.8656152719282], [-5.4819973448086, 56.8574179408533], [-5.5114390679363, 56.8452292391503], [-5.5415674784838, 56.8270320225234], [-5.5850004577916, 56.8078476927303], [-5.625, 56.7896075581395], [-5.6303218275041, 56.7871612342062], [-5.6616519410365, 56.7719682750412], [-5.6786474546786, 56.7646722212049] ] + ] + }, + "properties" : { + "feature::id" : 3, + "line::hidden" : [ + { "contour" : 0, "segments" : [ { "from" : 2, "to" : 3 } ] } + ], + "id" : 103640, + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : 3, + "objectid" : 56386, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_56386", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 4, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-4.4452710126351, 56.7525693554294], [-4.4300780534701, 56.7802085240798], [-4.4121383446255, 56.7975044634682], [-4.3905076908991, 56.8154441723128], [-4.3622676707563, 56.8394782320088], [-4.348619758286, 56.8604651162791], [-4.3263882530672, 56.8854004532137], [-4.3102510986999, 56.9020955411097], [-4.3239848470976, 56.8987479399377], [-4.3391778062626, 56.8866021561985], [-4.3531690624428, 56.8725679820546], [-4.366816974913, 56.8576754486358], [-4.4026963926021, 56.82458569859], [-4.4400350210584, 56.7929551593115], [-4.4522237227614, 56.7878050036623], [-4.4626098699872, 56.7699082127816], [-4.4541121131661, 56.7458741530855], [-4.4452710126351, 56.7525693554294] ] + ] + }, + "properties" : { + "feature::id" : 4, + "id" : 103920, + "pfafstette" : 943, + "lke_type" : "N", + "altitude" : 358, + "objectid" : 56990, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_56990", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 5, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-4.2500801135323, 56.6966472486724], [-4.2175482970152, 56.6969047564549], [-4.1923983702619, 56.7048445797473], [-4.2109389305988, 56.7123981413661], [-4.2664747756821, 56.709737227614], [-4.3239848470976, 56.7020978300678], [-4.3674178264054, 56.6999519318806], [-4.4151426020875, 56.6987502288958], [-4.4378891228713, 56.6926129600806], [-4.4206361014466, 56.6908533235671], [-4.3772031221388, 56.68870742538], [-4.3032983885735, 56.6914112570958], [-4.2500801135323, 56.6966472486724] ] + ] + }, + "properties" : { + "feature::id" : 5, + "id" : 104752, + "name" : "Loch Rannoch", + "pfafstette" : 9153, + "lke_type" : "N", + "altitude" : 205, + "objectid" : 57822, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 6, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-5.3078362479399, 56.222790010987], [-5.2792528840872, 56.2403434581578], [-5.2729010254532, 56.25], [-5.2704117835561, 56.2537767808094], [-5.2627723860099, 56.2677251190258], [-5.2476652627724, 56.2771670710493], [-5.2273221479583, 56.2926604559605], [-5.2175368522249, 56.3121452114997], [-5.1989962918879, 56.3296986586706], [-5.1554774766526, 56.346822926204], [-5.1269799487273, 56.3562219602637], [-5.1032892327413, 56.3635180141], [-5.0719591192089, 56.3704707242263], [-5.0512726606849, 56.3814577229445], [-5.0443199505585, 56.3933030809376], [-5.0625171671855, 56.396908189892], [-5.0859503753891, 56.389054202527], [-5.113675379967, 56.3714149194287], [-5.1461213605567, 56.3571232375023], [-5.1713571232375, 56.3537756363303], [-5.2005413385827, 56.3419302783373], [-5.2238887108588, 56.3254926982238], [-5.237879967039, 56.3045058139535], [-5.2577080662882, 56.2860081715803], [-5.2798537355796, 56.2732186183849], [-5.2841455319539, 56.2589269364585], [-5.2931583043399, 56.25], [-5.2995101629738, 56.2437768952573], [-5.3324711591284, 56.2246354834279], [-5.3595094762864, 56.2136484847098], [-5.3755607947262, 56.2081979033144], [-5.3865477934444, 56.1990992950009], [-5.3595094762864, 56.2015456189343], [-5.3078362479399, 56.222790010987] ] + ] + }, + "properties" : { + "feature::id" : 6, + "id" : 105653, + "name" : "Loch Awe", + "pfafstette" : 15, + "lke_type" : "N", + "altitude" : 124, + "objectid" : 58413, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 7, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-4.297204037722, 56.4774652078374], [-4.2798651803699, 56.4799115317707], [-4.2528268632119, 56.4881517808094], [-4.2142006958433, 56.4966066196667], [-4.1719694195202, 56.5033018220106], [-4.1322273850943, 56.5233874290423], [-4.1020131386193, 56.5510265976927], [-4.0838159219923, 56.5665199826039], [-4.0543741988647, 56.5728718412379], [-4.0227865775499, 56.5793095357993], [-4.0139454770189, 56.5869060153818], [-4.0299967954587, 56.5877643746567], [-4.0689663065373, 56.5829575627175], [-4.1214978941586, 56.5546746246109], [-4.1662184123787, 56.520941105109], [-4.1993510803882, 56.5096965986083], [-4.2154023988281, 56.505748145944], [-4.2363463651346, 56.5015851034609], [-4.2777192821828, 56.4923577412562], [-4.3011524903864, 56.4835166407251], [-4.297204037722, 56.4774652078374] ] + ] + }, + "properties" : { + "feature::id" : 7, + "id" : 105409, + "pfafstette" : 6551, + "lke_type" : "N", + "altitude" : 126, + "objectid" : 58448, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_58448", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 8, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-4.5220941677349, 56.06837117744], [-4.5202916132577, 56.0787573246658], [-4.5297335652811, 56.0863108862846], [-4.5428664621864, 56.094250709577], [-4.5553126716719, 56.1036497436367], [-4.569303927852, 56.1103020280168], [-4.5856985900018, 56.1203877494964], [-4.5993465024721, 56.1324476973082], [-4.6193462735763, 56.1360957242263], [-4.6388310291156, 56.1574259522066], [-4.6628650888116, 56.1872539370079], [-4.6805472898737, 56.2030048297015], [-4.6780580479766, 56.2184982146127], [-4.6808047976561, 56.2467811527193], [-4.6817489928585, 56.25], [-4.6895600622597, 56.2762657938107], [-4.6941093664164, 56.2966518265885], [-4.7050963651346, 56.3078534151254], [-4.705697216627, 56.2984543810657], [-4.7011479124702, 56.2796133949826], [-4.7054397088445, 56.2677680369896], [-4.7017487639627, 56.25], [-4.7008045687603, 56.2455365317707], [-4.7008045687603, 56.2194424098151], [-4.7020062717451, 56.2036056811939], [-4.6826073521333, 56.1854513825307], [-4.6701611426479, 56.1720180598791], [-4.6597749954221, 56.1470827229445], [-4.6421786302875, 56.1181560153818], [-4.6364276231459, 56.0926627449185], [-4.6316208112067, 56.072877563633], [-4.6340242171763, 56.063864791247], [-4.6354834279436, 56.0525773667826], [-4.6281873741073, 56.0400882393335], [-4.6096468137704, 56.0239940029299], [-4.5893036989562, 56.017298800586], [-4.590848745651, 56.0281999633767], [-4.5881019959714, 56.0449379692364], [-4.5622653817982, 56.0589721433803], [-4.5375446346823, 56.063864791247], [-4.5220941677349, 56.06837117744] ], + [ [-4.6041533144113, 56.0573841787218], [-4.5959130653726, 56.063864791247], [-4.6011490569493, 56.0556245422084], [-4.6041533144113, 56.0573841787218] ] + ] + }, + "properties" : { + "feature::id" : 8, + "id" : 106243, + "name" : "Loch Lomond North Basin", + "pfafstette" : 15, + "lke_type" : "N", + "altitude" : 9, + "objectid" : 59258, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 9, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-7.6527879509248, 54.3903217130562], [-7.6636891137154, 54.4100210584142], [-7.6798262680828, 54.4304070911921], [-7.6992251876946, 54.445943394067], [-7.7226583958982, 54.4659431651712], [-7.730211957517, 54.4884750961362], [-7.7236025911005, 54.4951273805164], [-7.735705456876, 54.5012217313679], [-7.7551902124153, 54.5069727385094], [-7.7514992675334, 54.5167151162791], [-7.7399972532503, 54.5252557910639], [-7.7472933070866, 54.5343114814137], [-7.7671214063358, 54.5377449185131], [-7.7822285295734, 54.5395474729903], [-7.7962197857535, 54.5401483244827], [-7.8105543856437, 54.5395474729903], [-7.8369060153818, 54.5413071095037], [-7.8695236678264, 54.5334531221388], [-7.8938152353049, 54.5213073383996], [-7.9211110602454, 54.5167151162791], [-7.9560462827321, 54.51122161692], [-7.974930186779, 54.4961144936825], [-7.9788786394433, 54.4848270692181], [-7.9873763962644, 54.4875738188976], [-8.0011101446622, 54.48817467039], [-8.0110671122505, 54.4802348470976], [-7.9919257004212, 54.4787756363303], [-7.9092657022523, 54.4817369758286], [-7.8366485075994, 54.476329312397], [-7.8211980406519, 54.4702349615455], [-7.8080651437466, 54.4640976927303], [-7.781627678081, 54.4528961041934], [-7.7506409082586, 54.4389906839407], [-7.7260059970701, 54.4231110373558], [-7.7020577733016, 54.417059604468], [-7.6889248763963, 54.4092056171031], [-7.68128547885, 54.3991198956235], [-7.6691826130745, 54.3857294909357], [-7.654247161692, 54.3735837071965], [-7.6527879509248, 54.3903217130562] ] + ] + }, + "properties" : { + "feature::id" : 9, + "id" : 110629, + "name" : "Lower Lough Erne", + "lge_id" : "en", + "pfafstette" : 1151, + "lke_type" : "N", + "altitude" : 40, + "objectid" : 62367, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 10, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-8.1280614814137, 54.4278749313313], [-8.1031690624428, 54.4169308505768], [-8.0888344625527, 54.4241839864494], [-8.0870319080755, 54.4381752426295], [-8.1194778886651, 54.4549132484893], [-8.1817947720198, 54.4688615867057], [-8.2217084783007, 54.4652564777513], [-8.2064296832082, 54.4549132484893], [-8.1815372642373, 54.4491622413477], [-8.1611083134957, 54.4424670390038], [-8.1280614814137, 54.4278749313313] ] + ] + }, + "properties" : { + "feature::id" : 10, + "id" : 110689, + "name" : "Melvin ( Lough )", + "lge_id" : "en", + "pfafstette" : 1, + "altitude" : 24, + "objectid" : 62564, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 11, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-9.4830674327046, 53.570545687603], [-9.4472738509431, 53.5696444103644], [-9.3980040285662, 53.5687431331258], [-9.3548285570408, 53.5687431331258], [-9.3198933345541, 53.5866828419703], [-9.3162882255997, 53.6040216993225], [-9.3107947262406, 53.6103735579564], [-9.2964601263505, 53.6085280855155], [-9.2865031587621, 53.6073263825307], [-9.2958592748581, 53.6176696117927], [-9.3010094305072, 53.6307595907343], [-9.2877048617469, 53.6358668284197], [-9.2940567203809, 53.666038156931], [-9.3210950375389, 53.6963382393335], [-9.3463308002198, 53.6766388939755], [-9.3761158670573, 53.6447079289507], [-9.3934547244095, 53.6292145440396], [-9.4028108405054, 53.6238068806079], [-9.4192913385827, 53.6137211591284], [-9.4524240065922, 53.6040216993225], [-9.4791189800403, 53.5970689891961], [-9.4666727705549, 53.5958243682476], [-9.4307933528658, 53.5982277742172], [-9.4067592931698, 53.58874290423], [-9.4171454403955, 53.5775413156931], [-9.4398919611793, 53.5760391869621], [-9.4676169657572, 53.5762966947445], [-9.4830674327046, 53.570545687603] ] + ] + }, + "properties" : { + "feature::id" : 11, + "id" : 112193, + "name" : "Mask ( Lough )", + "lge_id" : "en", + "pfafstette" : 59, + "lke_type" : "R", + "altitude" : 17, + "objectid" : 63754, + "scalerank" : 10, + "featurecla" : "Reservoir", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 12, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-9.2281347280718, 54.0468921671855], [-9.2238429316975, 54.0580937557224], [-9.2253021424648, 54.0744884178722], [-9.2350874381981, 54.0833295184032], [-9.2463319446988, 54.0891234435085], [-9.2630699505585, 54.1040159769273], [-9.2897649240066, 54.106076039187], [-9.2983485167552, 54.0909689159495], [-9.2983485167552, 54.0742309100897], [-9.2998077275224, 54.0571495605201], [-9.2842714246475, 54.0416132576451], [-9.2673617469328, 54.0291670481597], [-9.2688209577001, 54.0118281908075], [-9.2666750595129, 53.9991673915034], [-9.2435851950192, 53.9993819813221], [-9.2259029939572, 53.9975794268449], [-9.2132851126168, 53.9939743178905], [-9.1906244277605, 53.9997682429958], [-9.1958604193371, 54.0170212644204], [-9.2204094945981, 54.0307120948544], [-9.2311389855338, 54.0365060199597], [-9.2281347280718, 54.0468921671855] ] + ] + }, + "properties" : { + "feature::id" : 12, + "id" : 111227, + "name" : "Conn (Lough)", + "lge_id" : "en", + "pfafstette" : 913, + "lke_type" : "B", + "altitude" : 6, + "objectid" : 64142, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 13, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-9.1654745010072, 53.4271138527742], [-9.1353460904596, 53.4192169474455], [-9.121097326497, 53.4052256912653], [-9.1301959348105, 53.4018780900934], [-9.1386936916316, 53.3967279344442], [-9.1298525911005, 53.3873289003846], [-9.1186080845999, 53.3763419016664], [-9.1292517396081, 53.3669428676067], [-9.1435863394983, 53.3602476652628], [-9.1363761215895, 53.3529086934627], [-9.1274491851309, 53.3423079564182], [-9.1125995696759, 53.3286171259843], [-9.0831578465483, 53.3210635643655], [-9.063329747299, 53.3259132942685], [-9.0526860922908, 53.333509773851], [-9.0457333821645, 53.3423079564182], [-9.0502826863212, 53.3569429820546], [-9.0651323017762, 53.3650973951657], [-9.0810119483611, 53.3842388069951], [-9.0690807544406, 53.4079724409449], [-9.0535444515657, 53.4185731779894], [-9.0714841604102, 53.4219636971251], [-9.0957757278887, 53.4273713605567], [-9.1314834737228, 53.4365128868339], [-9.1489940029299, 53.4375], [-9.1700238051639, 53.4386587850211], [-9.1824700146493, 53.4438518586339], [-9.1888218732833, 53.4526500412012], [-9.2022981138986, 53.4544955136422], [-9.2159460263688, 53.4565555759018], [-9.2208386742355, 53.4717914530306], [-9.2202378227431, 53.4924349935909], [-9.2289930873467, 53.511619323384], [-9.2445293902216, 53.5246663843618], [-9.2542288500275, 53.5338079106391], [-9.2639283098334, 53.5377134453397], [-9.2779195660136, 53.5389580662882], [-9.2897649240066, 53.5389580662882], [-9.3198933345541, 53.5328637154367], [-9.3490775498993, 53.5317049304157], [-9.3837552646036, 53.52831441128], [-9.423239791247, 53.5185720335103], [-9.4469305072331, 53.5152673503021], [-9.4641835286578, 53.5048812030764], [-9.4830674327046, 53.4933362708295], [-9.4994620948544, 53.4985293444424], [-9.5092473905878, 53.5077137886834], [-9.5253845449551, 53.5082288042483], [-9.5149983977294, 53.4948813175243], [-9.4785181285479, 53.486083134957], [-9.4505356161875, 53.4915337163523], [-9.4201496978575, 53.4918341420985], [-9.3891629280352, 53.489087392419], [-9.3733691173778, 53.4842805804798], [-9.3581761582128, 53.4736369254715], [-9.338948910456, 53.469388047061], [-9.3280477476653, 53.4626499267533], [-9.3195499908442, 53.4499032915217], [-9.290365775499, 53.4414055347006], [-9.278520417506, 53.4375], [-9.2672759110053, 53.4337661371544], [-9.2548297015199, 53.4307189617286], [-9.23877838308, 53.4279722120491], [-9.2071049258378, 53.4240666773485], [-9.1654745010072, 53.4271138527742] ] + ] + }, + "properties" : { + "feature::id" : 13, + "id" : 112557, + "name" : "Corrib ( Lough )", + "lge_id" : "en", + "pfafstette" : 13, + "lke_type" : "B", + "altitude" : 5, + "objectid" : 65702, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 14, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-6.5310840505402, 53.1141989791247], [-6.5249896996887, 53.1144994048709], [-6.5085092016114, 53.1193920527376], [-6.4769215802967, 53.1312374107306], [-6.4613852774217, 53.148876693829], [-6.4835309467131, 53.1619237548068], [-6.5057624519319, 53.177760483428], [-6.5045607489471, 53.1883612204725], [-6.4860201886102, 53.1917088216444], [-6.4726297839224, 53.1971594030397], [-6.4933162424465, 53.1969018952573], [-6.5152044039553, 53.1838548342794], [-6.5261914026735, 53.1683614493683], [-6.5465345174877, 53.1558723219191], [-6.5607832814503, 53.1452286669108], [-6.5537447353965, 53.1406364447903], [-6.5458478300678, 53.1458295184032], [-6.5361483702619, 53.15037882256], [-6.520097051822, 53.1604216260758], [-6.5078225141916, 53.1649280122688], [-6.5036165537447, 53.1540697674419], [-6.5167494506501, 53.1400355932979], [-6.5315990661051, 53.1251430598792], [-6.5310840505402, 53.1141989791247] ] + ] + }, + "properties" : { + "feature::id" : 14, + "id" : 114569, + "name" : "Pollaphuca Reservoir", + "lge_id" : "en", + "pfafstette" : 7971, + "lke_type" : "B", + "altitude" : 182, + "objectid" : 67053, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 15, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-9.5356848562534, 52.0244260437649], [-9.5137966947446, 52.0198338216444], [-9.5062431331258, 52.026571941952], [-9.5163717725691, 52.032923800586], [-9.5101915857902, 52.0377735304889], [-9.4892476194836, 52.0423657526094], [-9.4880459164988, 52.0503055759019], [-9.5004921259843, 52.0520652124153], [-9.5153417414393, 52.0529664896539], [-9.52658624794, 52.0663998123054], [-9.5378307544406, 52.0760992721113], [-9.5573155099799, 52.0788460217909], [-9.5846113349204, 52.0788460217909], [-9.5970575444058, 52.0709491164622], [-9.5867572331075, 52.0636101446622], [-9.5719076176525, 52.0539106848563], [-9.5561138069951, 52.0438249633767], [-9.5488177531588, 52.0350267808094], [-9.5356848562534, 52.0244260437649] ] + ] + }, + "properties" : { + "feature::id" : 15, + "id" : 116430, + "name" : "Leane ( Lough )", + "lge_id" : "en", + "pfafstette" : 551, + "lke_type" : "B", + "altitude" : 17, + "objectid" : 67929, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 16, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-2.0954266617836, 47.3628055759019], [-2.083838811573, 47.3615609549533], [-2.0784311481414, 47.3710458249405], [-2.0884739516572, 47.3882988463651], [-2.1040102545321, 47.39683952115], [-2.1249542208387, 47.3947365409266], [-2.1416922266984, 47.3971828648599], [-2.1561984984435, 47.40417849295], [-2.1749965665629, 47.4184701748764], [-2.1878719556858, 47.4303155328694], [-2.1845243545138, 47.4184701748764], [-2.1784300036623, 47.3928910684856], [-2.1668421534518, 47.3667540285662], [-2.138258789599, 47.3570545687603], [-2.1243533693463, 47.3640072788867], [-2.1097612616737, 47.3792860739791], [-2.0920790606116, 47.3843933116645], [-2.0945683025087, 47.3716037584691], [-2.0954266617836, 47.3628055759019] ] + ] + }, + "properties" : { + "feature::id" : 16, + "id" : 131773, + "pfafstette" : 3, + "altitude" : 0, + "objectid" : 80857, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_80857", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 17, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-1.7005813953488, 47.1181731825673], [-1.7072765976927, 47.0974867240432], [-1.6914827870353, 47.0810491439297], [-1.6659036806446, 47.0761994140267], [-1.64830731551, 47.0831521241531], [-1.6388653634865, 47.0928945019227], [-1.642298800586, 47.1114779802234], [-1.6705388207288, 47.1272717908808], [-1.7005813953488, 47.1181731825673] ] + ] + }, + "properties" : { + "feature::id" : 17, + "id" : 132438, + "pfafstette" : 1231, + "lke_type" : "N", + "altitude" : -1, + "objectid" : 82683, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_82683", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 18, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-1.1866387795275, 44.3152009705182], [-1.1759951245193, 44.3221536806446], [-1.1623472120491, 44.3333981871452], [-1.1246223219191, 44.3422392876763], [-1.099429477202, 44.3516812396997], [-1.1121761124336, 44.3580330983336], [-1.1417036714887, 44.3662304294085], [-1.1727333592748, 44.3853718412379], [-1.1936344076176, 44.3923245513642], [-1.1996858405054, 44.36498580846], [-1.1933339818714, 44.3291493087347], [-1.1866387795275, 44.3152009705182] ] + ] + }, + "properties" : { + "feature::id" : 18, + "id" : 136391, + "name" : "tang de Biscarrosse", + "pfafstette" : 51, + "lke_type" : "N", + "altitude" : 18, + "objectid" : 84651, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 19, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-1.1796860694012, 44.4434827641458], [-1.1596004623695, 44.4486329197949], [-1.1511027055484, 44.4567873329061], [-1.1298153955319, 44.473825764512], [-1.0911892281633, 44.4936109457975], [-1.0905454587072, 44.5039112570958], [-1.1155237136056, 44.5176020875298], [-1.1331629967039, 44.5251985671123], [-1.150501854056, 44.5324946209486], [-1.1723470976012, 44.5322371131661], [-1.1935914896539, 44.5167437282549], [-1.1978832860282, 44.4929671763413], [-1.197239516572, 44.4720661279985], [-1.1954369620948, 44.4559289736312], [-1.1796860694012, 44.4434827641458] ] + ] + }, + "properties" : { + "feature::id" : 19, + "id" : 136281, + "name" : "tang de Cazaux", + "pfafstette" : 191, + "lke_type" : "N", + "altitude" : 20, + "objectid" : 84907, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 20, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-5.0605429408533, 42.9805381340414], [-5.0812723173412, 42.9634997024355], [-5.0770663568943, 42.9557744689617], [-5.0524743636697, 42.9529418833547], [-5.0342771470427, 42.9700232329244], [-5.0190412699139, 42.9679631706647], [-5.0093847280718, 42.9687356940121], [-4.9996423503021, 42.9663322880425], [-4.9853506683758, 42.9665468778612], [-4.9798571690167, 42.9708386742355], [-4.9883978438015, 42.9841861609595], [-4.9999427760483, 43.0033704907526], [-5.0077967634133, 43.0149154229995], [-5.0096422358542, 43.0051301272661], [-5.0261227339315, 42.993284769273], [-5.0439766068486, 42.9854307819081], [-5.0605429408533, 42.9805381340414] ] + ] + }, + "properties" : { + "feature::id" : 20, + "id" : 137030, + "pfafstette" : 49793, + "lke_type" : "N", + "altitude" : 1089, + "objectid" : 85068, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_85068", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 21, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-1.0902879509247, 45.1130459164988], [-1.0851377952756, 45.1267367469328], [-1.0823910455961, 45.1485819904779], [-1.0766400384545, 45.1640753753891], [-1.0803309833364, 45.1808133812489], [-1.0906312946347, 45.1993539415858], [-1.0982706921809, 45.2118001510712], [-1.116124565098, 45.2184953534151], [-1.1255665171214, 45.2115426432888], [-1.1277124153086, 45.184461408167], [-1.1368110236221, 45.1626161646219], [-1.1380127266069, 45.1452773072697], [-1.1405019685039, 45.1288397271562], [-1.1411028199963, 45.1197411188427], [-1.1393002655191, 45.0978529573338], [-1.1382702343893, 45.0769089910273], [-1.1268540560337, 45.0708146401758], [-1.110116050174, 45.074119323384], [-1.0970689891961, 45.0948057819081], [-1.0902879509247, 45.1130459164988] ] + ] + }, + "properties" : { + "feature::id" : 21, + "id" : 135612, + "name" : "tang de Carcans", + "pfafstette" : 95, + "lke_type" : "N", + "altitude" : 12, + "objectid" : 85494, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 22, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-6.0178281221388, 41.6413689113715], [-6.0300168238418, 41.6523559100897], [-6.0327206555576, 41.6511112891412], [-6.0223774262955, 41.6380642281633], [-6.0050385689434, 41.6334720060428], [-5.9941374061527, 41.6213262223036], [-5.989244758286, 41.6137297427211], [-5.9849958798755, 41.5985367835561], [-5.9804465757187, 41.5820992034426], [-5.9789444469877, 41.5648461820179], [-5.9825495559421, 41.5501682384179], [-5.9589875938473, 41.5432155282915], [-5.9593309375572, 41.5668204083501], [-5.9589875938473, 41.5778932429958], [-5.9449963376671, 41.5882793902216], [-5.9293312809009, 41.5942020692181], [-5.9140524858085, 41.6046311344076], [-5.9069710217909, 41.6087083409632], [-5.8945248123054, 41.640124290423], [-5.8867137429042, 41.6484932933529], [-5.8730229124702, 41.650467519685], [-5.8585595586889, 41.6568622962827], [-5.8573578557041, 41.6681068027834], [-5.8515639305988, 41.6739007278887], [-5.8437528611976, 41.6836431056583], [-5.8300620307636, 41.6934284013917], [-5.8222509613624, 41.7032136971251], [-5.8125085835927, 41.7032136971251], [-5.8056417093939, 41.7088788683391], [-5.8080880333272, 41.7182779023988], [-5.8364138893975, 41.7170332814503], [-5.8554694652994, 41.7051450054935], [-5.8710916041018, 41.6953597097601], [-5.8847395165721, 41.6856173319905], [-5.9003616553745, 41.6641154321553], [-5.9132370444973, 41.651969648416], [-5.9275287264237, 41.6295235533785], [-5.9277433162424, 41.6211545504486], [-5.9382152993957, 41.6127855475188], [-5.9597601171946, 41.6131718091925], [-5.9764981230544, 41.6150172816334], [-5.9950386833913, 41.6316694515656], [-6.0178281221388, 41.6413689113715] ] + ] + }, + "properties" : { + "feature::id" : 22, + "id" : 138193, + "pfafstette" : 41137, + "lke_type" : "N", + "altitude" : 670, + "objectid" : 85963, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_85963", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 23, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-6.2561515748031, 41.2478111838491], [-6.2385122917048, 41.2398713605567], [-6.2172249816883, 41.230128982787], [-6.19958569859, 41.2210732924373], [-6.174049510163, 41.2180261170115], [-6.1965385231643, 41.2385409036806], [-6.2193708798755, 41.2491416407251], [-6.228126144479, 41.2555793352866], [-6.2387697994873, 41.2631328969053], [-6.2473104742721, 41.269356001648], [-6.2567095083318, 41.2888407571873], [-6.2752500686687, 41.2857935817616], [-6.2950352499542, 41.2906433116645], [-6.3101852911555, 41.2994414942318], [-6.323618613807, 41.2954930415675], [-6.321773141366, 41.2793558872001], [-6.3068806079473, 41.2602573933345], [-6.2956361014466, 41.2414164072514], [-6.284048251236, 41.2252792528841], [-6.2807435680278, 41.2374250366233], [-6.2764946896173, 41.2505150155649], [-6.2561515748031, 41.2478111838491] ] + ] + }, + "properties" : { + "feature::id" : 23, + "id" : 138392, + "pfafstette" : 21151, + "lke_type" : "N", + "altitude" : 707, + "objectid" : 86384, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_86384", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 24, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-4.0397820911921, 42.9854307819081], [-3.9978083226515, 42.9869329106391], [-3.9917568897638, 42.9899800860648], [-3.979868613807, 42.9948727339315], [-3.9592250732467, 42.9975765656473], [-3.947980566746, 43.0000228895807], [-3.935791865043, 43.0015250183117], [-3.9151483244827, 42.9990786943783], [-3.8917151162791, 42.9975765656473], [-3.8710715757187, 43.0075764511994], [-3.8686252517854, 43.0277049761948], [-3.8856636833913, 43.0410095449551], [-3.9178521561985, 43.0453013413294], [-3.9500835469694, 43.0319109366417], [-3.9673794863578, 43.0243144570592], [-3.9802119575169, 43.0285633354697], [-3.9959628502106, 43.0181771882439], [-4.0066494231826, 42.9997224638345], [-4.0230440853324, 42.990623855521], [-4.0473356528108, 42.993284769273], [-4.0558763275957, 43.0026838033327], [-4.0373357672587, 43.0087781541842], [-4.0202973356528, 43.0133703763047], [-4.0291813541476, 43.0185634499176], [-4.0519278749313, 43.0155162744919], [-4.0734726927303, 43.0042717679912], [-4.0781078328145, 42.9918255585058], [-4.0397820911921, 42.9854307819081] ] + ] + }, + "properties" : { + "feature::id" : 24, + "id" : 137132, + "pfafstette" : 995993, + "lke_type" : "N", + "altitude" : 834, + "objectid" : 86670, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_86670", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 25, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-5.2792958020509, 38.9560777559055], [-5.3026431743271, 38.9502838308002], [-5.3309261124336, 38.9462924601721], [-5.3442735991577, 38.9311424189709], [-5.3774491851309, 38.9220008926937], [-5.3910970976012, 38.9207991897088], [-5.404144158579, 38.9235459393884], [-5.4145303058048, 38.92895360282], [-5.4253885506318, 38.93629257462], [-5.4400664942318, 38.9462924601721], [-5.4594654138436, 38.953331006226], [-5.4704524125618, 38.9448332494049], [-5.4753450604285, 38.9338462506867], [-5.4722978850028, 38.925949345358], [-5.4550877815418, 38.9199837483977], [-5.4374914164073, 38.9180524400293], [-5.4166332860282, 38.9138035616188], [-5.4017407526094, 38.9056062305439], [-5.3837581258011, 38.9068079335287], [-5.3735436504303, 38.9077092107673], [-5.3552176799121, 38.9074087850211], [-5.3421706189343, 38.9071083592749], [-5.331526963926, 38.9046620353415], [-5.3254326130745, 38.9177520142831], [-5.3050894982604, 38.9311424189709], [-5.2868493636697, 38.9280952435451], [-5.2683088033327, 38.9259064273943], [-5.251570797473, 38.9271510483428], [-5.2168072468412, 38.9121726789965], [-5.1933311206739, 38.8985247665263], [-5.1634602179088, 38.8812717451016], [-5.1513144341696, 38.8703705823109], [-5.1373231779894, 38.8648770829518], [-5.1172804889214, 38.8487399285845], [-5.0865512268815, 38.8448343938839], [-5.0659076863212, 38.8389975508149], [-5.0720020371727, 38.8201994826955], [-5.0777530443142, 38.8016589223585], [-5.0816585790148, 38.7858221937374], [-5.078954747299, 38.7733330662882], [-5.0780963880242, 38.7559083730086], [-5.0689548617469, 38.7506294634682], [-5.0605429408533, 38.785221342245], [-5.0643197216627, 38.8047060977843], [-5.0516160043948, 38.8128605108954], [-5.0379680919246, 38.8241050173961], [-5.01268941128, 38.8274097006043], [-5.008183025087, 38.8338473951657], [-5.0306291201245, 38.8372379143014], [-5.0410152673503, 38.8457785890863], [-5.0576674372826, 38.8514437603003], [-5.0692123695294, 38.8605852865776], [-5.0783538958066, 38.8639758057132], [-5.0883537813587, 38.865177508698], [-5.1047913614723, 38.8761215894525], [-5.1184392739425, 38.8891686504303], [-5.1266795229811, 38.8836751510712], [-5.1379240294818, 38.8816150888116], [-5.153417414393, 38.8928166773485], [-5.168610373558, 38.9007565006409], [-5.1835029069768, 38.9044045275591], [-5.189811847647, 38.9249193142282], [-5.1905414530306, 38.9511851080388], [-5.1935457104926, 38.9718286485992], [-5.1871080159312, 38.9879228850028], [-5.1850479536715, 39.0025579106391], [-5.1795544543124, 39.0186950650064], [-5.1591684215345, 39.0268494781176], [-5.14856768449, 39.0317421259843], [-5.1613143197217, 39.0356476606849], [-5.1768077046329, 39.0295533098334], [-5.1871080159312, 39.0238023026918], [-5.1962924601721, 39.0177079518403], [-5.1965928859183, 39.0016137154367], [-5.1974941631569, 38.9897683574437], [-5.2114854193371, 38.9688243911372], [-5.2366782640542, 38.951485533785], [-5.2607123237502, 38.95933952115], [-5.2792958020509, 38.9560777559055] ] + ] + }, + "properties" : { + "feature::id" : 25, + "id" : 139988, + "pfafstette" : 61571, + "lke_type" : "N", + "altitude" : 426, + "objectid" : 86994, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_86994", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 26, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-5.4294228392236, 39.0095106207654], [-5.4065904825124, 39.0104548159678], [-5.4017407526094, 39.0204976194836], [-5.3847452389672, 39.0254761032778], [-5.3437585835928, 39.0450037767808], [-5.3280935268266, 39.0586516892511], [-5.3169348562534, 39.0736729765611], [-5.2995959989013, 39.0849174830617], [-5.2822142235854, 39.1039301409998], [-5.2832013367515, 39.1104965894525], [-5.3162910867973, 39.1050889260209], [-5.3264197262406, 39.0929002243179], [-5.34521779436, 39.0715270783739], [-5.3643592061893, 39.0629864035891], [-5.3983502334737, 39.0517848150522], [-5.4189937740341, 39.0413128318989], [-5.4409248535067, 39.0340596960264], [-5.4499805438564, 39.0329009110053], [-5.4907096914485, 39.0274074116462], [-5.5195076451199, 39.0274074116462], [-5.5351297839224, 39.013759499176], [-5.5175763367515, 39.000068668742], [-5.4938427028017, 38.9977081807361], [-5.4774051226882, 38.9973648370262], [-5.4561607306354, 38.9985236220473], [-5.4400664942318, 39.007407640542], [-5.4294228392236, 39.0095106207654] ] + ] + }, + "properties" : { + "feature::id" : 26, + "id" : 139903, + "pfafstette" : 711151, + "lke_type" : "N", + "altitude" : 312, + "objectid" : 87124, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_87124", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 27, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-2.2307040835012, 39.695683025087], [-2.2635363257645, 39.7176999404871], [-2.2741799807727, 39.7173995147409], [-2.2595878731002, 39.6986014466215], [-2.2477425151071, 39.6796746246109], [-2.2346096182018, 39.6672284151254], [-2.2224638344625, 39.6560268265885], [-2.2091163477385, 39.6372287584691], [-2.1978718412379, 39.6204907526094], [-2.1899320179454, 39.6174435771837], [-2.1811338353781, 39.6143964017579], [-2.1738377815418, 39.6052119575169], [-2.1598894433254, 39.6034094030397], [-2.1422072422633, 39.5919932246841], [-2.121563701703, 39.5852121864127], [-2.1103621131661, 39.5902765061344], [-2.1225078969053, 39.6047827778795], [-2.1395034105475, 39.6209199322468], [-2.1477007416224, 39.6261130058597], [-2.1607478026002, 39.6233662561802], [-2.1674859229079, 39.6309198177989], [-2.1768849569676, 39.6379583638528], [-2.1987731184765, 39.651606276323], [-2.2115197537081, 39.6689022157114], [-2.2307040835012, 39.695683025087] ] + ] + }, + "properties" : { + "feature::id" : 27, + "id" : 139752, + "pfafstette" : 9535, + "lke_type" : "N", + "altitude" : 804, + "objectid" : 87151, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_87151", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 28, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-6.2876962781542, 38.7937190990661], [-6.2953356757004, 38.7888693691632], [-6.3026746475005, 38.7804145303058], [-6.2925889260209, 38.7752214566929], [-6.2813444195202, 38.7721742812672], [-6.2734475141915, 38.7642344579747], [-6.2612158945248, 38.7485264832448], [-6.2421174006592, 38.7214023301593], [-6.2211734343527, 38.7168101080388], [-6.2187271104193, 38.7326897546237], [-6.2250789690533, 38.7438913431606], [-6.2266669337118, 38.7520886742355], [-6.2327612845633, 38.7703288088262], [-6.2652501831166, 38.7910152673503], [-6.2876962781542, 38.7937190990661] ] + ] + }, + "properties" : { + "feature::id" : 28, + "id" : 140028, + "pfafstette" : 4511, + "altitude" : 265, + "objectid" : 87622, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_87622", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 29, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-0.387120032961, 39.3253439159495], [-0.3652747894158, 39.3195929088079], [-0.3548886421901, 39.3271464704267], [-0.3403394524812, 39.3311378410548], [-0.3290949459806, 39.3444853277788], [-0.3348888710859, 39.3632833958982], [-0.3469917368614, 39.3648713605567], [-0.3628284654825, 39.3654722120491], [-0.380768174327, 39.3636696575719], [-0.3956607077458, 39.3459445385461], [-0.387120032961, 39.3253439159495] ] + ] + }, + "properties" : { + "feature::id" : 29, + "id" : 140210, + "pfafstette" : 1, + "altitude" : -3, + "objectid" : 87746, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_87746", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 30, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-5.5853008835378, 40.58459989013], [-5.5655586202161, 40.604299235488], [-5.5673611746933, 40.6295349981688], [-5.5696787447354, 40.6447708752976], [-5.5892922541659, 40.6511227339315], [-5.5932407068303, 40.6407365867057], [-5.5834983290606, 40.6301358496612], [-5.5864167505951, 40.6201359641091], [-5.5897643517671, 40.6070459851675], [-5.5965453900385, 40.5960589864494], [-5.6078328145028, 40.5815527147043], [-5.6038843618385, 40.5702652902399], [-5.5989917139718, 40.5751579381066], [-5.5853008835378, 40.58459989013] ] + ] + }, + "properties" : { + "feature::id" : 30, + "id" : 138833, + "pfafstette" : 2773, + "lke_type" : "N", + "altitude" : 917, + "objectid" : 87921, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_87921", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 31, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-6.1327195110786, 40.277607695477], [-6.1381700924739, 40.2642172907892], [-6.1652513275957, 40.2551186824757], [-6.1685560108039, 40.2420287035341], [-6.1594574024904, 40.232543833547], [-6.1485562396997, 40.2331446850394], [-6.1345220655558, 40.2298829197949], [-6.1257238829885, 40.2349901574803], [-6.1135780992492, 40.2371789736312], [-6.0940933437099, 40.2380373329061], [-6.0834926066654, 40.2484234801318], [-6.0867972898736, 40.2587237914301], [-6.10143231551, 40.2563633034243], [-6.105938701703, 40.2745605200513], [-6.115123145944, 40.2967491073063], [-6.1375692409815, 40.287950924739], [-6.1327195110786, 40.277607695477] ] + ] + }, + "properties" : { + "feature::id" : 31, + "id" : 138926, + "pfafstette" : 47133, + "lke_type" : "N", + "altitude" : 372, + "objectid" : 87940, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_87940", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 32, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-5.7287327183666, 36.6537006729537], [-5.7013939754624, 36.6539581807361], [-5.6840551181102, 36.6643014099982], [-5.6993339132027, 36.6679923548801], [-5.7181319813221, 36.6691940578649], [-5.7242263321736, 36.6767476194836], [-5.7327670069584, 36.6767476194836], [-5.7613503708112, 36.6773913889398], [-5.7819509934078, 36.6730995925655], [-5.7749982832814, 36.6597521058414], [-5.751865500824, 36.6576062076543], [-5.7287327183666, 36.6537006729537] ] + ] + }, + "properties" : { + "feature::id" : 32, + "id" : 140902, + "pfafstette" : 415, + "lke_type" : "N", + "altitude" : 85, + "objectid" : 88742, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_88742", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 33, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.0267922541659, 69.399377403406], [29.0097967405237, 69.3890341741439], [29.0085950375389, 69.3725536760667], [29.0281656290057, 69.3710944652994], [29.0544314228163, 69.3786480269181], [29.0728003112983, 69.3872316196667], [29.0880791063908, 69.3926392830983], [29.1033579014832, 69.3947851812855], [29.1248168833547, 69.4011370399194], [29.1510826771654, 69.4087764374657], [29.140954037722, 69.4194200924739], [29.1208684306904, 69.4337117744003], [29.1043879326131, 69.4331109229079], [29.0793238417872, 69.4199780260026], [29.0599249221754, 69.417231276323], [29.0427577366783, 69.4096777147043], [29.0267922541659, 69.399377403406] ] + ] + }, + "properties" : { + "feature::id" : 33, + "id" : 1224, + "name" : "Surnujrvi", + "pfafstette" : 49753, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 957, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 34, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.7238028749313, 69.4196776002564], [27.7341031862296, 69.434269707929], [27.7450901849478, 69.4233256271745], [27.7648324482695, 69.4184758972716], [27.7919566013551, 69.4276174235488], [27.8261193004944, 69.4391623557957], [27.8616553744735, 69.4516085652811], [27.8793375755356, 69.4586041933712], [27.8977064640176, 69.4677886376122], [27.9334142098517, 69.4789902261491], [27.9689502838308, 69.491693943417], [27.9950444057865, 69.5008783876579], [28.0170184032229, 69.5084319492767], [28.0154733565281, 69.5172730498077], [27.998134499176, 69.5169726240615], [27.9734137520601, 69.5099340780077], [27.9421694744552, 69.5087323750229], [27.9165903680645, 69.5045264145761], [27.8989081670024, 69.4929385643655], [27.8846594030397, 69.485342084783], [27.864917139718, 69.4755997070134], [27.8436298297015, 69.4625097280718], [27.8098104742721, 69.453454037722], [27.780454587072, 69.4531106940121], [27.7655191356894, 69.4494626670939], [27.7490386376122, 69.4439691677349], [27.7365065921992, 69.4400636330342], [27.7119575169383, 69.4339692821828], [27.6764214429592, 69.4260723768541], [27.6453488372093, 69.4166304248306], [27.6250915583227, 69.4078322422633], [27.6381386193005, 69.4047850668376], [27.6542757736678, 69.4117377769639], [27.6692112250504, 69.4154287218458], [27.6951336751511, 69.4193771745102], [27.7121291887933, 69.414570362571], [27.7238028749313, 69.4196776002564] ] + ] + }, + "properties" : { + "feature::id" : 34, + "id" : 1381, + "name" : "IIJRVI 7", + "pfafstette" : 937, + "lke_type" : "N", + "altitude" : 193, + "objectid" : 1111, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 35, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.8594236403589, 69.3935405603369], [27.8783075444058, 69.3959868842703], [27.9035433070866, 69.4057721800037], [27.9363326313862, 69.4151712140634], [27.9682635964109, 69.4266303103827], [27.985602453763, 69.4331109229079], [27.9971044680461, 69.4358147546237], [28.0211385277422, 69.4458146401758], [28.0357306354148, 69.4537544634682], [28.0211385277422, 69.4537544634682], [28.00379967039, 69.453454037722], [27.9883492034426, 69.4519089910273], [27.9770188610145, 69.4513081395349], [27.9600233473723, 69.4565012131478], [27.931354147592, 69.453454037722], [27.9086934627358, 69.4479605383629], [27.8870628090093, 69.4409219923091], [27.8637154367332, 69.4239693966307], [27.8556468595495, 69.4096777147043], [27.8561618751144, 69.4002786806446], [27.8594236403589, 69.3935405603369] ] + ] + }, + "properties" : { + "feature::id" : 35, + "id" : 1604, + "name" : "Paudijrvi", + "pfafstette" : 44995, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 1389, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 36, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.2624347646951, 65.2800254074346], [27.2637223036074, 65.266592084783], [27.2624347646951, 65.2596393746567], [27.2658682017945, 65.2529441723128], [27.2748809741806, 65.2450043490203], [27.2907606207654, 65.2456052005127], [27.2967691356894, 65.2598968824391], [27.2932498626625, 65.2714847326497], [27.2883572147958, 65.2811841924556], [27.2997733931514, 65.2899823750229], [27.3120479307819, 65.2948750228896], [27.3022626350485, 65.3039736312031], [27.2795161142648, 65.3082225096136], [27.2685291155466, 65.3164198406885], [27.2594305072331, 65.325861792712], [27.2400315876213, 65.3353466626991], [27.2199459805896, 65.3349604010255], [27.1992595220656, 65.3283081166453], [27.1877575077825, 65.325861792712], [27.1918776323018, 65.3155614814137], [27.2123924189709, 65.3076216581212], [27.226555347006, 65.2991239013001], [27.2402032594763, 65.2900252929866], [27.2624347646951, 65.2800254074346] ] + ] + }, + "properties" : { + "feature::id" : 36, + "id" : 22790, + "name" : "Jongunjrvi", + "pfafstette" : 395, + "lke_type" : "N", + "altitude" : 119, + "objectid" : 2315, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 37, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [26.8269891045596, 68.9765496246109], [26.8089635597876, 68.9780946713056], [26.8007233107489, 68.9792534563267], [26.8166887932613, 68.9883949826039], [26.8329976194836, 68.9980944424098], [26.8444996337667, 69.0048325627174], [26.8594350851492, 69.0175791979491], [26.8953145028383, 69.0343172038088], [26.9466443874748, 69.04981058872], [26.9868156015382, 69.0601109000183], [27.0098196301044, 69.0583083455411], [27.036085423915, 69.0589091970335], [27.0592611243362, 69.0722566837576], [27.0513642190075, 69.0780506088629], [27.0335103460905, 69.076848905878], [27.0340253616554, 69.0889946896173], [27.0196049258378, 69.0908401620582], [26.9912790697674, 69.0762480543857], [26.9797770554843, 69.0726429454312], [26.957459714338, 69.0750034334371], [26.933425654642, 69.0689949185131], [26.9140267350302, 69.0610550952206], [26.8942844717085, 69.0586087712873], [26.8802073796008, 69.0531152719282], [26.8511948361106, 69.0388235900018], [26.8077618568028, 69.0191242446438], [26.7861312030764, 69.007579312397], [26.7610671122505, 68.9911417322835], [26.7473333638528, 68.9695539965208], [26.7718824391137, 68.966506821095], [26.7928264054203, 68.9589103415126], [26.8137703717268, 68.9547043810657], [26.8417528840872, 68.9610562396997], [26.866988646768, 68.9604553882073], [26.8961728621132, 68.9637600714155], [26.939262497711, 68.9701548480132], [26.9675883537814, 68.9768071323933], [26.9607214795825, 68.9844465299396], [26.9418375755356, 68.9814422724776], [26.921236952939, 68.9796397180004], [26.9047564548617, 68.9798543078191], [26.8783189891961, 68.9735024491851], [26.8444996337667, 68.9713994689617], [26.8269891045596, 68.9765496246109] ] + ] + }, + "properties" : { + "feature::id" : 37, + "id" : 4352, + "name" : "Muddusjrvi", + "pfafstette" : 6415, + "lke_type" : "N", + "altitude" : 146, + "objectid" : 2712, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 38, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [26.6499954220839, 68.8862931468596], [26.6405534700604, 68.9005848287859], [26.637291704816, 68.9063358359275], [26.6160043947995, 68.8986964383813], [26.5808116645303, 68.8874519318806], [26.5437305438564, 68.8786537493133], [26.5193531404505, 68.8747482146127], [26.4889672221205, 68.8680530122688], [26.4795252700971, 68.8556068027834], [26.5114562351218, 68.8504137291705], [26.5354902948178, 68.8589114859916], [26.5590093389489, 68.8619586614173], [26.5881935542941, 68.8650058368431], [26.6237296282732, 68.8731602499542], [26.6506821095038, 68.8735465116279], [26.6577206555576, 68.87620742538], [26.6499954220839, 68.8862931468596] ] + ] + }, + "properties" : { + "feature::id" : 38, + "id" : 6188, + "name" : "Paadarjrvi", + "pfafstette" : 6195, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 3450, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 39, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [20.4431995055851, 68.8029893792346], [20.4198521333089, 68.803590230727], [20.4033716352317, 68.7999422038088], [20.3789942318257, 68.8066374061527], [20.3623420618934, 68.8133755264604], [20.334702893243, 68.8151351629738], [20.316334004761, 68.8184827641458], [20.3058620216078, 68.8252208844534], [20.2826863211866, 68.8352207700055], [20.2677508698041, 68.8376670939388], [20.2838880241714, 68.8236329197949], [20.2998535066838, 68.8096845815785], [20.3110121772569, 68.8041910822194], [20.3268059879143, 68.8060365546603], [20.3474066105109, 68.8054357031679], [20.3788225599707, 68.7950495559421], [20.3916979490936, 68.7768523393151], [20.4105818531405, 68.766852453763], [20.4310108038821, 68.7592988921443], [20.4504097234939, 68.7510586431057], [20.4790789232741, 68.7492131706647], [20.5027696392602, 68.7492131706647], [20.5231985900018, 68.7501144479033], [20.5249153085516, 68.7434192455594], [20.5268036989562, 68.7364665354331], [20.5456876030031, 68.7373678126717], [20.5659448818898, 68.7522603460905], [20.558734663981, 68.7653074070683], [20.5328122138803, 68.7711442501373], [20.522168558872, 68.7698996291888], [20.516160043948, 68.7619598058963], [20.5000228895807, 68.7647065555759], [20.4909242812672, 68.7744060153818], [20.4816540010987, 68.7786978117561], [20.4696369712507, 68.7872384865409], [20.4431995055851, 68.8029893792346] ] + ] + }, + "properties" : { + "feature::id" : 39, + "id" : 7516, + "name" : "Rastojaure", + "pfafstette" : 62953, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 5178, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 40, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [24.0922564548617, 67.888450489837], [24.1188655923823, 67.8860041659037], [24.1428996520784, 67.8854033144113], [24.1686504303241, 67.8902530443142], [24.1916544588903, 67.8969911646219], [24.2096800036623, 67.90063919154], [24.2084783006775, 67.9084502609412], [24.1904527559055, 67.9148450375389], [24.169165445889, 67.92334279436], [24.1430713239333, 67.9300809146676], [24.1125137337484, 67.9357890038454], [24.090539736312, 67.9400808002197], [24.0757759567845, 67.9455742995788], [24.0668490203259, 67.9406816517121], [24.0558620216078, 67.9303813404139], [24.0476217725691, 67.9388361792712], [24.0436733199048, 67.9504669474455], [24.0211843069035, 67.9571621497894], [24.0132874015748, 67.9461751510712], [24.0443600073247, 67.92334279436], [24.0586087712873, 67.9088365226149], [24.054316974913, 67.8935577275224], [24.0647889580663, 67.888450489837], [24.0922564548617, 67.888450489837] ] + ] + }, + "properties" : { + "feature::id" : 40, + "id" : 9754, + "pfafstette" : 0, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 5711, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_5711", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 41, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [25.7059718915949, 67.2024068394067], [25.6922381431972, 67.20519650705], [25.6767876762498, 67.2091020417506], [25.6467451016297, 67.2060548663249], [25.6172175425746, 67.1911623329061], [25.6198784563267, 67.181162447354], [25.6500068668742, 67.1750680965025], [25.6867446438381, 67.1662699139352], [25.7181605932979, 67.1558837667094], [25.7363578099249, 67.1601755630837], [25.7529241439297, 67.1668278474638], [25.7925803424281, 67.1544245559421], [25.8196186595862, 67.1525790835012], [25.8077733015931, 67.1610768403223], [25.7944687328328, 67.1713771516206], [25.7893185771837, 67.1854113257645], [25.7697479857169, 67.1939090825856], [25.7473448086431, 67.1942095083318], [25.7228815693096, 67.194509934078], [25.7059718915949, 67.2024068394067] ] + ] + }, + "properties" : { + "feature::id" : 41, + "id" : 11665, + "name" : "UNARINJRVI 1", + "pfafstette" : 2255, + "lke_type" : "N", + "altitude" : 180, + "objectid" : 6734, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 42, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [18.8401277238601, 67.4398290148325], [18.8806422816334, 67.4389277375939], [18.952658624794, 67.4315887657938], [19.0131729536715, 67.4275973951657], [19.0417563175243, 67.4261381843985], [19.0739447903314, 67.4285845083318], [19.0513699414027, 67.433734663981], [19.0168638985534, 67.4376831166453], [18.9887955502655, 67.4413311435635], [18.9639031312946, 67.4404298663249], [18.9579804522981, 67.444077893243], [18.9520577733016, 67.4525756500641], [18.9118865592382, 67.4604725553928], [18.8486254806812, 67.4662664804981], [18.8043341420985, 67.4702149331624], [18.7788408716352, 67.4777684947812], [18.740815555759, 67.4887554934994], [18.6772969694195, 67.4969528245743], [18.6458810199597, 67.5], [18.6457951840322, 67.5], [18.6332631386193, 67.5012446209485], [18.6145509064274, 67.5021458981871], [18.586740065922, 67.5093990340597], [18.5355818531405, 67.527038317158], [18.5007324665812, 67.5410295733382], [18.5209897454679, 67.545578877495], [18.5433070866142, 67.5449780260026], [18.5706029115547, 67.5425317020692], [18.5913752060062, 67.5449351080388], [18.5659677714704, 67.5504286073979], [18.5417620399194, 67.5540766343161], [18.5136078557041, 67.5580680049441], [18.4821919062443, 67.5580680049441], [18.4633080021974, 67.5644627815418], [18.4250251785387, 67.5826599981688], [18.3918925105292, 67.59849672679], [18.3803904962461, 67.6027456052005], [18.3755836843069, 67.5957070591467], [18.3982443691632, 67.5832608496612], [18.4389305987914, 67.5683683162424], [18.4624496429226, 67.5553212552646], [18.4794451565647, 67.5473814319722], [18.4739516572057, 67.5346777147043], [18.4499175975096, 67.5197851812855], [18.477728438015, 67.5127466352316], [18.5402169932247, 67.5030471754258], [18.5508606482329, 67.5], [18.5699162241348, 67.4945065006409], [18.5937786119758, 67.4890130012818], [18.6268254440579, 67.4836053378502], [18.662361518037, 67.4781547564549], [18.7068245284746, 67.471459554111], [18.7523175700421, 67.4620605200513], [18.79540720564, 67.445580021974], [18.8401277238601, 67.4398290148325] ] + ] + }, + "properties" : { + "feature::id" : 42, + "id" : 12223, + "pfafstette" : 631, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 7461, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_7461", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 43, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [17.5685542940853, 67.9136433345541], [17.6040903680645, 67.8802531587621], [17.6167940853324, 67.8750600851492], [17.625206006226, 67.8720129097235], [17.6377380516389, 67.8774634911188], [17.6344762863944, 67.8890513413294], [17.6274377403406, 67.8975920161143], [17.6198841787219, 67.9072485579564], [17.6100988829885, 67.9166905099799], [17.5955067753159, 67.9309821919062], [17.5882965574071, 67.945874725325], [17.5968801501557, 67.9607672587438], [17.5666659036807, 67.9826554202527], [17.504177348471, 67.9960458249405], [17.4604010254532, 68.0042860739791], [17.4418604651163, 68.017333134957], [17.443577183666, 68.0304231138986], [17.4585126350485, 68.0358307773302], [17.4696713056217, 68.0379766755173], [17.4906152719282, 68.03686080846], [17.485808459989, 68.0434701748764], [17.4549075260941, 68.0589635597876], [17.4265816700238, 68.0565172358542], [17.3860671122505, 68.0449723036074], [17.3462392418971, 68.0550151071232], [17.3259819630105, 68.0786629051456], [17.2889008423366, 68.0978472349387], [17.2432361289141, 68.108147546237], [17.2325924739059, 68.1085338079106], [17.2427211133492, 68.1030403085515], [17.2542231276323, 68.0938987822743], [17.2593732832815, 68.0832551272661], [17.262291704816, 68.073255241714], [17.262463376671, 68.0586202160776], [17.2931926387109, 68.0459164988097], [17.3398873832631, 68.0349295000916], [17.3584279436001, 68.0288780672038], [17.3867537996704, 68.0163460217909], [17.4219465299396, 67.9993934261124], [17.4416887932613, 67.9945007782457], [17.4899285845083, 67.9820545687603], [17.5436618751145, 67.9659603323567], [17.5637474821461, 67.9574196575719], [17.5556789049625, 67.947376854056], [17.5685542940853, 67.9136433345541] ] + ] + }, + "properties" : { + "feature::id" : 43, + "id" : 10299, + "pfafstette" : 6591, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 7911, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_7911", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 44, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [24.7121635231643, 66.6699236632485], [24.740746887017, 66.6601812854789], [24.7693302508698, 66.651983954404], [24.7810039370079, 66.6623701016298], [24.7676993682476, 66.671168284197], [24.7507038546054, 66.6829707242263], [24.7373134499176, 66.6994083043399], [24.7283006775316, 66.7133995605201], [24.7224638344626, 66.7188930598791], [24.7036657663432, 66.7279916681927], [24.6883869712507, 66.7413391549167], [24.6753399102728, 66.7349872962827], [24.6565418421535, 66.7209531221388], [24.6565418421535, 66.7055026551914], [24.6722498168834, 66.6891079930416], [24.6765416132576, 66.6820694469877], [24.6877861197583, 66.6713828740158], [24.7121635231643, 66.6699236632485] ] + ] + }, + "properties" : { + "feature::id" : 44, + "id" : 14831, + "name" : "Raanujrvi", + "pfafstette" : 2653, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 8242, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 45, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [18.4845953122139, 67.2030506088629], [18.480732695477, 67.2118487914301], [18.4666556033693, 67.2242950009156], [18.4553252609412, 67.2285867972899], [18.4426215436733, 67.23558242538], [18.4226217725691, 67.2416338582677], [18.3977293535982, 67.2501316150888], [18.3757553561619, 67.2672129646585], [18.3335240798389, 67.2854101812855], [18.3055415674785, 67.2951096410914], [18.2829667185497, 67.3009035661967], [18.2398770829518, 67.3072554248306], [18.2016800952206, 67.3103026002564], [18.1811653085515, 67.3084571278154], [18.1848562534334, 67.3024486128914], [18.2289759201611, 67.2984572422633], [18.2851984526643, 67.289659059696], [18.3130951290972, 67.2768695065007], [18.3295756271745, 67.2705176478667], [18.3371291887933, 67.2619769730819], [18.3593606940121, 67.2458398187145], [18.40245032961, 67.2364407846548], [18.4307761856803, 67.2315910547519], [18.4399606299213, 67.2179002243179], [18.4575569950558, 67.211548365684], [18.4741233290606, 67.2094883034243], [18.4845953122139, 67.2030506088629] ] + ] + }, + "properties" : { + "feature::id" : 45, + "id" : 13810, + "name" : "Sitojaure", + "pfafstette" : 48931, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 8942, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 46, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [24.4440120856986, 66.6522843801502], [24.4418661875114, 66.6470913065373], [24.4941402673503, 66.63829312397], [24.5571438381249, 66.6295378593664], [24.5920790606116, 66.6164478804249], [24.6159414484527, 66.5963193554294], [24.6271859549533, 66.5842164896539], [24.6448681560154, 66.5930146722212], [24.6753399102728, 66.6057613074529], [24.6938804706098, 66.6155036852225], [24.6832368156015, 66.6404390221571], [24.6675288408716, 66.6528852316426], [24.6520783739242, 66.6467908807911], [24.6144822376854, 66.6492372047244], [24.5728518128548, 66.6607821369713], [24.5576588536898, 66.6644301638894], [24.5631523530489, 66.6559324070683], [24.5676158212782, 66.6440441311115], [24.5422083867424, 66.6395377449185], [24.5016938289691, 66.6489367789782], [24.4790331441128, 66.6607821369713], [24.46581441128, 66.6659752105842], [24.4541407251419, 66.6595375160227], [24.4440120856986, 66.6522843801502] ] + ] + }, + "properties" : { + "feature::id" : 46, + "id" : 15655, + "name" : "Iso Vietonen", + "pfafstette" : 2611, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 9216, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 47, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.9551306995056, 66.3559787584692], [27.9119552279802, 66.3681245422084], [27.876762497711, 66.3751201702985], [27.8569343984618, 66.3875663797839], [27.8420847830068, 66.3890255905512], [27.8516125709577, 66.3814720289324], [27.8591661325765, 66.3759785295734], [27.8226000274675, 66.3765793810657], [27.7888665079656, 66.3747768265886], [27.8105829976195, 66.364519433254], [27.8436298297015, 66.3544337117744], [27.8642304522981, 66.3495410639077], [27.8971056125252, 66.3486397866691], [27.9238005859733, 66.3443479902948], [27.9424269822377, 66.3410862250504], [27.9833707196484, 66.3337472532503], [28.0078339589819, 66.3325455502655], [27.9876625160227, 66.3416870765428], [27.9551306995056, 66.3559787584692] ] + ] + }, + "properties" : { + "feature::id" : 47, + "id" : 15286, + "name" : "Murtoselka", + "pfafstette" : 56263, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 9307, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 48, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [18.271893883904, 67.0921076725875], [18.25086408167, 67.0905626258927], [18.1958432521516, 67.0854124702436], [18.1444275315876, 67.0750692409815], [18.1580754440579, 67.0677731871452], [18.1930965024721, 67.0692753158762], [18.2587609869987, 67.0692753158762], [18.3049407159861, 67.0665285661967], [18.3210778703534, 67.0640822422633], [18.3494037264237, 67.0632238829885], [18.3806480040286, 67.0638676524446], [18.4153257187328, 67.0577303836294], [18.4562694561436, 67.0495759705182], [18.4914621864127, 67.0416361472258], [18.5039083958982, 67.03125], [18.5246806903497, 67.014898255814], [18.547513047061, 66.9942547152536], [18.5663969511079, 66.9857140404688], [18.580559879143, 66.9908641961179], [18.5930060886284, 66.9969585469694], [18.6003879783922, 67.0115935726058], [18.5978987364951, 67.0306920664714], [18.5766972624061, 67.0458850256363], [18.5469121955686, 67.0628805392785], [18.5526632027101, 67.072322491302], [18.5644227247757, 67.0769147134225], [18.53832860282, 67.081506935543], [18.4912046786303, 67.0887600714155], [18.4663122596594, 67.0866570911921], [18.4211625618019, 67.081163591833], [18.3659700604285, 67.081506935543], [18.3347257828237, 67.0805627403406], [18.302279802234, 67.0866570911921], [18.271893883904, 67.0921076725875] ] + ] + }, + "properties" : { + "feature::id" : 48, + "id" : 15441, + "name" : "Tjaktjajaure", + "pfafstette" : 4837, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 9318, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 49, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [24.3564594396631, 66.5742166041018], [24.3409231367881, 66.5690235304889], [24.3242709668559, 66.5659763550632], [24.3368888481963, 66.5544314228163], [24.3530260025636, 66.5422427211134], [24.3616095953122, 66.5312986403589], [24.3935405603369, 66.5212558368431], [24.4136261673686, 66.5103975920161], [24.4150853781359, 66.5033590459623], [24.414227018861, 66.5273501876946], [24.4120811206739, 66.5575215162058], [24.4284757828237, 66.5601824299579], [24.4418661875114, 66.5632296053836], [24.4363726881524, 66.5696672999451], [24.4301066654459, 66.5766629280352], [24.4180037996704, 66.5875211728621], [24.4206647134225, 66.6082076313862], [24.4267590642739, 66.636790995239], [24.417231276323, 66.6601812854789], [24.4108794176891, 66.6750738188977], [24.392853872917, 66.6781209943234], [24.3665022431789, 66.6820694469877], [24.3527684947812, 66.6781209943234], [24.3461591283648, 66.6601812854789], [24.3301078099249, 66.6498380562168], [24.3191208112067, 66.6428424281267], [24.3232409357261, 66.6303962186413], [24.3276185680278, 66.6200529893792], [24.3309661691998, 66.6100101858634], [24.3428115271928, 66.6024137062809], [24.353798525911, 66.591555461454], [24.3564594396631, 66.5742166041018] ] + ] + }, + "properties" : { + "feature::id" : 49, + "id" : 15510, + "name" : "Miekojrvi", + "pfafstette" : 231, + "lke_type" : "N", + "altitude" : 77, + "objectid" : 9434, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 50, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [18.7696564273942, 66.7237427897821], [18.7416739150339, 66.724601149057], [18.7270818073613, 66.718592634133], [18.7092279344442, 66.7227985945798], [18.686395577733, 66.7252449185131], [18.6525762223036, 66.7291504532137], [18.6328339589819, 66.7410387291705], [18.6219327961912, 66.7525836614173], [18.5978987364951, 66.761982695477], [18.5374702435451, 66.7671757690899], [18.4903463193554, 66.7686778978209], [18.4714624153085, 66.7705233702619], [18.4379864035891, 66.7689783235671], [18.4040812122322, 66.7689783235671], [18.3751545046695, 66.7680770463285], [18.3557555850577, 66.7644290194104], [18.323824620033, 66.7598797152536], [18.3188461362388, 66.7550299853507], [18.3904332997619, 66.7583775865226], [18.4592737136056, 66.760823910456], [18.4900029756455, 66.7614247619484], [18.5156679179637, 66.7605234847098], [18.5439937740341, 66.7598797152536], [18.5742080205091, 66.7556308368431], [18.5909460263688, 66.7480343572606], [18.5937786119758, 66.7391932567295], [18.5952378227431, 66.7273478987365], [18.6128341878777, 66.7161463101996], [18.6356665445889, 66.7130991347739], [18.6584989013001, 66.7100090413844], [18.6823612891412, 66.7076056354148], [18.7036485991577, 66.7033567570042], [18.7216741439297, 66.6988074528475], [18.7253650888116, 66.689708844534], [18.7221891594946, 66.6677777650614], [18.7407297198315, 66.6525848058964], [18.7659654825124, 66.6541298525911], [18.7875961362388, 66.6574774537631], [18.8120593755722, 66.6583787310017], [18.8240764054202, 66.6641726561069], [18.816780351584, 66.6696232375023], [18.8034757828237, 66.6766617835561], [18.7857935817616, 66.6845157709211], [18.7766091375206, 66.6915543169749], [18.7915445889031, 66.6988074528475], [18.8118877037173, 66.701554202527], [18.8191837575536, 66.6966615546603], [18.8268231550998, 66.689708844534], [18.8549773393151, 66.6860608176158], [18.8757496337667, 66.6933568714521], [18.868196072148, 66.7009533510346], [18.8578957608497, 66.7033567570042], [18.8447628639443, 66.7076056354148], [18.8324883263139, 66.7149016892511], [18.8054500091558, 66.728592519685], [18.777209989013, 66.731940120857], [18.786394433254, 66.7255453442593], [18.7947205182201, 66.720094762864], [18.7696564273942, 66.7237427897821] ] + ] + }, + "properties" : { + "feature::id" : 50, + "id" : 18063, + "pfafstette" : 4459, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 10225, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_10225", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 51, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.3436756088629, 66.8841701382531], [16.3657354422267, 66.8914661920894], [16.3865077366783, 66.8966592657023], [16.4059066562901, 66.9051570225234], [16.3962930324117, 66.911551799121], [16.3740615271928, 66.9145560565831], [16.3414438747482, 66.9161440212415], [16.2928607397913, 66.9173457242263], [16.2661657663432, 66.9200495559421], [16.2059089452481, 66.9246417780626], [16.146338811573, 66.9224958798755], [16.1567249587988, 66.9133543535983], [16.215951748764, 66.9051570225234], [16.2859080296649, 66.8942129417689], [16.3153497527925, 66.884513481963], [16.3436756088629, 66.8841701382531] ] + ] + }, + "properties" : { + "feature::id" : 51, + "id" : 17481, + "name" : "Mavasjaure", + "pfafstette" : 967, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 10411, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 52, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.8761273118477, 66.9638687969237], [15.844024674968, 66.9669159723494], [15.8187030763597, 66.9705210813038], [15.8120078740158, 66.9717657022523], [15.7928664621864, 66.9686756088629], [15.7910639077092, 66.9598345083318], [15.8093469602637, 66.9492337712873], [15.8330376762498, 66.9398347372276], [15.8539816425563, 66.9328820271013], [15.8642819538546, 66.9324957654276], [15.8962129188793, 66.9367875618019], [15.943336843069, 66.9337403863761], [15.9858256271745, 66.9313369804065], [16.010117194653, 66.9389763779528], [16.0017052737594, 66.9516800952207], [15.991748306171, 66.9668730543857], [15.9895165720564, 66.9808213926021], [15.9787870811207, 66.9829672907893], [15.9574997711042, 66.9805209668559], [15.9414484526644, 66.9848127632302], [15.9156976744186, 66.9817655878044], [15.8877151620582, 66.9698343938839], [15.8761273118477, 66.9638687969237] ] + ] + }, + "properties" : { + "feature::id" : 52, + "id" : 16981, + "name" : "Balvatnet", + "lge_id" : "no", + "pfafstette" : 753, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 10764, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 53, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [28.4370135964109, 65.8431520097052], [28.4293741988647, 65.8294611792712], [28.4104044588903, 65.8255556445706], [28.3889454770189, 65.8125085835928], [28.3824219465299, 65.7951697262406], [28.4037950924739, 65.78392521974], [28.4195889031313, 65.7733244826955], [28.4286875114448, 65.767230131844], [28.4493739699689, 65.7678309833364], [28.4734080296649, 65.7684318348288], [28.509287447354, 65.7614791247024], [28.5326348196301, 65.7611357809925], [28.5189010712324, 65.7675305575902], [28.4960687145212, 65.771736518037], [28.4858542391503, 65.7821226652628], [28.4931502929866, 65.7888178676067], [28.5000171671855, 65.7943113669658], [28.5195019227248, 65.8070150842337], [28.5492869895624, 65.8213067661601], [28.5372699597143, 65.8298474409449], [28.5031930965025, 65.8328946163706], [28.4776998260392, 65.8319075032046], [28.460704312397, 65.8337529756455], [28.45752838308, 65.8422936504303], [28.4517773759385, 65.8528943874748], [28.4308334096319, 65.8663277101264], [28.4175288408716, 65.866885643655], [28.4265416132577, 65.8574436916316], [28.4370135964109, 65.8431520097052] ] + ] + }, + "properties" : { + "feature::id" : 53, + "id" : 18861, + "name" : "Kostonjrvi", + "pfafstette" : 8551, + "lke_type" : "N", + "altitude" : 232, + "objectid" : 11258, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 54, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [17.4044360007325, 66.7091077641458], [17.3713891686504, 66.7161463101996], [17.3581704358176, 66.7103523850943], [17.3703591375206, 66.7051593114814], [17.3864962918879, 66.6902667780626], [17.4122470701337, 66.6738291979491], [17.4368819813221, 66.6666189800403], [17.4575684398462, 66.6605246291888], [17.4819458432521, 66.6547307040835], [17.491988646768, 66.6470913065373], [17.5058940670207, 66.633443394067], [17.5337907434536, 66.6203534151254], [17.5608290606116, 66.6127998535067], [17.5742194652994, 66.6018128547885], [17.5813438472807, 66.591212117744], [17.6037470243545, 66.583873145944], [17.6286394433254, 66.5772208615638], [17.6478666910822, 66.565332585607], [17.658252838308, 66.5504400521883], [17.6658063999267, 66.5422427211134], [17.6812568668742, 66.548637497711], [17.6900979674052, 66.5632296053836], [17.6955914667643, 66.5708690029299], [17.7143895348837, 66.5623712461088], [17.7375652353049, 66.5532297198315], [17.7688095129097, 66.5450323887567], [17.7878650888116, 66.5340453900385], [17.7976503845449, 66.521599180553], [17.8135300311298, 66.4994105932979], [17.8390233015931, 66.483874290423], [17.8836579838857, 66.4726727018861], [17.9085504028566, 66.4699259522066], [17.8812545779161, 66.4836597006043], [17.8451176524446, 66.5012131477751], [17.8402250045779, 66.5182515793811], [17.8361907159861, 66.5276506134408], [17.8132725233474, 66.5291956601355], [17.7922427211133, 66.5373500732467], [17.7727579655741, 66.5501825444058], [17.7502689525728, 66.5580365317707], [17.7402261490569, 66.5699677256913], [17.7251190258194, 66.582027673503], [17.709496887017, 66.5902679225417], [17.6916430141, 66.601555347006], [17.6594545412928, 66.6146453259476], [17.6284677714704, 66.6209971845816], [17.6013436183849, 66.6249456372459], [17.5809146676433, 66.6276923869255], [17.5551638893975, 66.6309970701337], [17.534391594946, 66.63829312397], [17.5241771195752, 66.6413832173595], [17.5094991759751, 66.6450312442776], [17.506838262223, 66.6625846914485], [17.5076966214979, 66.6848161966673], [17.4995422083867, 66.69872161692], [17.4773107031679, 66.7040005264604], [17.4512165812122, 66.7000091558323], [17.4305301226881, 66.6985070271013], [17.4044360007325, 66.7091077641458] ] + ] + }, + "properties" : { + "feature::id" : 54, + "id" : 18884, + "name" : "Tjeggelvas", + "pfafstette" : 7993, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 11294, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 55, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.922169703351, 66.2574391137154], [27.9338433894891, 66.2483405054019], [27.9425986540927, 66.2556365592382], [27.9338433894891, 66.2644776597693], [27.9299807727522, 66.2669239837026], [27.9542723402307, 66.2656793627541], [27.9880058597326, 66.2647780855155], [28.0439708844534, 66.2592845861564], [28.0879188793261, 66.2471388024172], [28.0983908624794, 66.2422461545505], [28.1047427211133, 66.2368384911189], [28.1125537905146, 66.2270531953855], [28.125, 66.2185983565281], [28.125, 66.2185554385644], [28.1359869987182, 66.216452458341], [28.1614802691815, 66.2137486266252], [28.173583134957, 66.2173537355796], [28.1843126258927, 66.2243064457059], [28.200964795825, 66.2319458432522], [28.2021664988097, 66.2477396539096], [28.1909219923091, 66.2559369849845], [28.1779607672588, 66.2519456143564], [28.1636261673686, 66.2480400796557], [28.1316952023439, 66.2535335790148], [28.125, 66.2558940670207], [28.1031976744186, 66.2635763825307], [28.0524686412745, 66.2727179088079], [28.0007095770005, 66.2760225920161], [27.9916109686871, 66.2714732878594], [27.9597658395898, 66.2702715848746], [27.9248306171031, 66.2692844717085], [27.922169703351, 66.2574391137154] ] + ] + }, + "properties" : { + "feature::id" : 55, + "id" : 15986, + "pfafstette" : 56275, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 11346, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_11346", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 56, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.7014397546237, 66.9428819126534], [16.6855601080388, 66.9473882988464], [16.6533716352317, 66.9544268449002], [16.6220415216993, 66.9651134178722], [16.6025567661601, 66.9696198040652], [16.5701107855704, 66.9851131889764], [16.524446072148, 67.0106064594397], [16.5053904962461, 67.0297907892328], [16.5022145669291, 67.0403915262773], [16.4469362296283, 67.0431382759568], [16.3830742995788, 67.0397906747848], [16.3715722852957, 67.0252844030398], [16.4050482970152, 67.0079455456876], [16.4582665720564, 67.0021516205823], [16.5004978483794, 67.0030528978209], [16.5350038912287, 66.9951130745285], [16.5464200695843, 66.9808213926021], [16.5117423548801, 66.975327893243], [16.4809272569127, 66.9720661279986], [16.488051638894, 66.9635254532137], [16.5073647225783, 66.9592765748032], [16.5307979307819, 66.9614224729903], [16.5508835378136, 66.9638687969237], [16.5739734023073, 66.9571735945797], [16.5939731734115, 66.9507359000183], [16.6123420618934, 66.942281061161], [16.6655603369346, 66.9324957654276], [16.7280488921443, 66.9324957654276], [16.7624690990661, 66.928590230727], [16.7800654642007, 66.9261439067936], [16.7766320271013, 66.9349420893609], [16.7480486632485, 66.9428819126534], [16.7170618934261, 66.942281061161], [16.7014397546237, 66.9428819126534] ] + ] + }, + "properties" : { + "feature::id" : 56, + "id" : 16459, + "name" : "Peskehaure", + "pfafstette" : 9717, + "lke_type" : "N", + "altitude" : 632, + "objectid" : 11377, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 57, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [20.7283464566929, 69.0400252929866], [20.758389031313, 69.0297249816883], [20.7963285112617, 69.0175791979491], [20.836843069035, 69.00440338308], [20.8747825489837, 68.9826010574986], [20.8904046877861, 68.9629017121406], [20.8686023622047, 68.9550048068119], [20.8674006592199, 68.9492108817067], [20.8691173777697, 68.9356058872001], [20.8871429225417, 68.9273656381615], [20.9161554660319, 68.95131386193], [20.927314136605, 68.97436080846], [20.9168421534518, 68.9916996658121], [20.8995032960996, 69.007579312397], [20.8778726423732, 69.0096393746567], [20.8495467863029, 69.0035879417689], [20.8423365683941, 69.013931171031], [20.8557269730819, 69.0255190212415], [20.8249977110419, 69.0452183665995], [20.7655992492218, 69.057664576085], [20.733839956052, 69.0567632988464], [20.7075741622414, 69.0601109000183], [20.6890336019044, 69.0580079197949], [20.6488623878411, 69.0566345449551], [20.6625961362388, 69.04981058872], [20.7283464566929, 69.0400252929866] ] + ] + }, + "properties" : { + "feature::id" : 57, + "id" : 7003, + "pfafstette" : 9817, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 11904, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_11904", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 58, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.0998386284563, 66.3750772523348], [14.1475634041384, 66.3750772523348], [14.1701382530672, 66.3775235762681], [14.1989791247024, 66.3772231505219], [14.2236140358909, 66.3793261307453], [14.2463605566746, 66.3820728804248], [14.2582059146677, 66.3860642510529], [14.246961408167, 66.393059879143], [14.2168329976195, 66.3924590276506], [14.177348470976, 66.3891114264787], [14.156146996887, 66.3888110007325], [14.0655900933895, 66.3906135552097], [14.0531438839041, 66.3900127037173], [14.0333157846548, 66.3924590276506], [14.0219854422267, 66.40391812397], [14.0095392327413, 66.4149051226882], [13.9950329609962, 66.4140038454496], [13.9965780076909, 66.3954632851126], [14.0098825764512, 66.3747768265886], [14.0168352865776, 66.3623306171031], [14.0229296374291, 66.3598842931698], [14.0433585881707, 66.3704850302143], [14.0998386284563, 66.3750772523348] ] + ] + }, + "properties" : { + "feature::id" : 58, + "id" : 21058, + "name" : "Langvatnet", + "lge_id" : "no", + "pfafstette" : 41, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 12128, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 59, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [28.6162390130013, 65.4760746658121], [28.6208741530855, 65.4620404916682], [28.6433631660868, 65.4562894845267], [28.6711740065922, 65.4562894845267], [28.6851652627724, 65.4601950192272], [28.6980406518953, 65.4611392144296], [28.708598470976, 65.4635855383629], [28.7235339223585, 65.4702378227431], [28.7426753341879, 65.4763321735946], [28.778211408167, 65.4772334508332], [28.8161508881157, 65.4818256729537], [28.7961511170115, 65.4896796603186], [28.7697994872734, 65.490280511811], [28.7328900384545, 65.4939714566929], [28.6735774125618, 65.4893792345724], [28.6347795733382, 65.4833278016847], [28.6162390130013, 65.4760746658121] ] + ] + }, + "properties" : { + "feature::id" : 59, + "id" : 20508, + "name" : "Tyrjrvi", + "pfafstette" : 943, + "lke_type" : "N", + "altitude" : 224, + "objectid" : 12167, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 60, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [18.3405626258927, 66.4361495147409], [18.3271722212049, 66.4258921214064], [18.3220220655558, 66.4164501693829], [18.2806491485076, 66.4173514466215], [18.2289759201611, 66.4240895669291], [18.2158430232558, 66.4322439800403], [18.1921523072697, 66.4388962644204], [18.1557578740157, 66.4407417368614], [18.1319813221022, 66.4437889122871], [18.1003937007874, 66.4492824116462], [18.0429694652994, 66.4620290468779], [18.0058883446255, 66.4763207288043], [17.9848585423915, 66.4812133766709], [17.9660604742721, 66.4751190258195], [17.9875194561436, 66.4689817570042], [18.0197937648782, 66.4644753708112], [18.0703511261674, 66.4504411966673], [18.1192776048343, 66.4352911554661], [18.1313804706098, 66.4240895669291], [18.1533544680461, 66.4188964933162], [18.1882038546054, 66.4128021424648], [18.1918947994873, 66.4031026826589], [18.1855429408533, 66.3900127037173], [18.1982466581212, 66.3878238875664], [18.2355852865775, 66.396064136605], [18.2684604468046, 66.4006563587255], [18.3006489196118, 66.4070082173595], [18.3320648690716, 66.4140038454496], [18.3559272569126, 66.4191969190625], [18.3906049716169, 66.4255487776964], [18.4223642647867, 66.4303126716719], [18.4648530488921, 66.4231024537631], [18.5040800677532, 66.4125017167186], [18.5189296832082, 66.3963645623512], [18.5420195477019, 66.3921156839407], [18.5678561618751, 66.3927165354331], [18.5836499725325, 66.3796265564915], [18.5915468778612, 66.3635323200879], [18.5754097234939, 66.3516869620949], [18.5808173869255, 66.3443479902948], [18.5964395257279, 66.35082860282], [18.5991004394799, 66.3693262451932], [18.6003879783922, 66.3802703259476], [18.5981562442776, 66.3930169611793], [18.5940361197583, 66.4036176982238], [18.5724054660319, 66.413102568211], [18.5371268998352, 66.4319006363304], [18.5119769730818, 66.4364499404871], [18.4863120307636, 66.436793284197], [18.4553252609412, 66.4413425883538], [18.4275144204358, 66.4446901895257], [18.3797896447537, 66.4425872093023], [18.3405626258927, 66.4361495147409] ] + ] + }, + "properties" : { + "feature::id" : 60, + "id" : 19913, + "name" : "Saddajaure", + "pfafstette" : 753, + "lke_type" : "N", + "altitude" : 459, + "objectid" : 12432, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 61, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [17.8283796465849, 66.3696266709394], [17.861083134957, 66.3490260483428], [17.878765336019, 66.3367944286761], [17.8845163431606, 66.3404424555942], [17.8755035707746, 66.3519873878411], [17.8654607672587, 66.3635323200879], [17.8483794176891, 66.3802703259476], [17.8149892418971, 66.3991113120308], [17.7797965116279, 66.4261496291888], [17.7584233656839, 66.4510420481597], [17.7314708844534, 66.4689817570042], [17.7025441768907, 66.4854622550815], [17.6948189434169, 66.4863206143564], [17.6994540835012, 66.4674796282732], [17.7408270005493, 66.4346903039736], [17.7788523164256, 66.4051627449185], [17.7906976744186, 66.3918581761582], [17.8032297198315, 66.3854633995605], [17.8283796465849, 66.3696266709394] ] + ] + }, + "properties" : { + "feature::id" : 61, + "id" : 19929, + "pfafstette" : 81, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 12439, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_12439", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 62, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [17.1980005951291, 66.0222057544406], [17.204695797473, 66.0313043627541], [17.195339681377, 66.0568834691449], [17.1767991210401, 66.0845226377953], [17.1682155282915, 66.1060674555942], [17.159460263688, 66.1343933116645], [17.1496749679546, 66.1666247024355], [17.1435806171031, 66.1854227705549], [17.1210916041018, 66.200916155466], [17.0974008881157, 66.2149074116462], [17.0858130379051, 66.2130619392053], [17.0971433803333, 66.1978689800403], [17.1233233382164, 66.1836202160776], [17.13207860282, 66.167869323384], [17.1357695477019, 66.1535776414576], [17.1384304614539, 66.1392430415675], [17.140919703351, 66.1237067386926], [17.1447823200879, 66.1094579747299], [17.1533659128365, 66.0842222120491], [17.1707047701886, 66.0593297930782], [17.1843526826588, 66.0404888069951], [17.1980005951291, 66.0222057544406] ] + ] + }, + "properties" : { + "feature::id" : 62, + "id" : 21757, + "pfafstette" : 931, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 12799, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_12799", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 63, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.9950215162058, 66.2018603506684], [15.0193130836843, 66.195422656107], [15.0421454403955, 66.2000148782274], [15.0268666453031, 66.2079117835561], [15.0051501556492, 66.2149074116462], [14.9898713605567, 66.2213021882439], [14.9704724409449, 66.2349930186779], [14.9594854422267, 66.2477396539096], [14.9570820362571, 66.2574391137154], [14.948755951291, 66.2727179088079], [14.9384556399927, 66.2702715848746], [14.9147649240066, 66.2559799029482], [14.8791430141, 66.2507868293353], [14.8520188610145, 66.254177348471], [14.8244655282915, 66.2589841604102], [14.8038649056949, 66.2483405054019], [14.8178561618751, 66.2343921671855], [14.8640358908625, 66.2334479719832], [14.8891858176158, 66.2388985533785], [14.9062671671855, 66.2407440258195], [14.9314170939389, 66.2340917414393], [14.9499576542758, 66.2213021882439], [14.9733908624794, 66.2107014511994], [14.9950215162058, 66.2018603506684] ] + ] + }, + "properties" : { + "feature::id" : 63, + "id" : 21944, + "name" : "Kaldvatnet", + "lge_id" : "no", + "pfafstette" : 2191, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 13126, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 64, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.875, 66.6176925013734], [16.8532835103461, 66.6146453259476], [16.875, 66.6088514008423], [16.8766308826222, 66.6084222212049], [16.9177462918879, 66.5951176524446], [16.9448704449734, 66.5875211728621], [16.9554282640542, 66.5818130836843], [16.96581441128, 66.5699677256913], [16.9858141823842, 66.5644742263322], [16.9961144936825, 66.5610837071965], [17.014054202527, 66.5495816929134], [17.0343973173411, 66.538637612159], [17.0515645028383, 66.5309982146127], [17.080319538546, 66.5249038637612], [17.1040102545321, 66.51709279436], [17.1153405969603, 66.5052045184032], [17.1360270554843, 66.4908699185131], [17.1548251236037, 66.482372161692], [17.1734515198681, 66.4748186000733], [17.2095026094122, 66.4574797427211], [17.2396310199597, 66.4453339589819], [17.2733645394616, 66.4343469602637], [17.3104456601355, 66.4194544268449], [17.3356814228163, 66.4100553927852], [17.3487284837942, 66.4128021424648], [17.2992011536349, 66.4395400338766], [17.2512188701703, 66.467179202527], [17.2714761490569, 66.4714280809376], [17.2900167093939, 66.4777799395715], [17.2690727430873, 66.4872648095587], [17.2422919337118, 66.4951187969237], [17.2243522248672, 66.5027581944699], [17.1909620490753, 66.5079512680828], [17.1635803882073, 66.5176507278887], [17.1301043764878, 66.5297965116279], [17.0949974821461, 66.5407835103461], [17.0690750320454, 66.5492812671672], [17.0429809100897, 66.5599249221754], [17.0092473905878, 66.5802680369896], [16.9768014099982, 66.5975210584142], [16.9379177348471, 66.6070059284014], [16.9047850668376, 66.6140015564915], [16.8789484526643, 66.618250434902], [16.875, 66.6176925013734] ] + ] + }, + "properties" : { + "feature::id" : 64, + "line::hidden" : [ + { "contour" : 0, "segments" : [ { "from" : 42, "to" : 43 } ] } + ], + "id" : 19549, + "pfafstette" : 811, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 13319, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_13319", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 65, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.1225851492401, 65.6790766343161], [29.1278211408167, 65.6660295733382], [29.1552028016847, 65.6620382027101], [29.1841295092474, 65.6705359595312], [29.192541430141, 65.6848276414576], [29.2310817615821, 65.6866731138986], [29.268162882256, 65.6832825947629], [29.277347326497, 65.6927674647501], [29.2515107123238, 65.7036686275408], [29.2029275773668, 65.707960423915], [29.1676490111701, 65.6984755539279], [29.1396664988098, 65.6915228438015], [29.1208684306904, 65.6906215665629], [29.1225851492401, 65.6790766343161] ] + ] + }, + "properties" : { + "feature::id" : 65, + "id" : 19310, + "name" : "Irnijrvi", + "pfafstette" : 977, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 13353, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 66, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.0500537905146, 65.583927508698], [29.071512772386, 65.5918244140267], [29.0842164896539, 65.6000217451016], [29.1144307361289, 65.6085195019227], [29.1587220747116, 65.6149142785204], [29.1873054385644, 65.6185193874748], [29.2625835469694, 65.6132833958982], [29.2861025911005, 65.6122104468046], [29.2267899652078, 65.6246566562901], [29.1900521882439, 65.6362445065007], [29.1682498626625, 65.6450426890679], [29.1558036531771, 65.6507507782457], [29.1454175059513, 65.6474460950376], [29.132112937191, 65.6371028657755], [29.0858473722762, 65.628004257462], [29.050311298297, 65.605472326497], [29.0274789415858, 65.5851292116828], [29.0034448818898, 65.5711808734664], [29.0129726698407, 65.5595930232558], [29.0222429500092, 65.5662882255997], [29.0286806445706, 65.5762881111518], [29.0500537905146, 65.583927508698] ] + ] + }, + "properties" : { + "feature::id" : 66, + "id" : 19579, + "name" : "Irnijrvi", + "pfafstette" : 957, + "lke_type" : "N", + "altitude" : 237, + "objectid" : 13382, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 67, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.2606093206373, 66.7568325398279], [14.2533991027285, 66.7674761948361], [14.2500515015565, 66.7747722486724], [14.2624977110419, 66.7754160181286], [14.2744289049625, 66.7780769318806], [14.261982695477, 66.7848150521883], [14.2451588536898, 66.7793215528292], [14.2369186046512, 66.7695791750595], [14.2119403497528, 66.7689783235671], [14.177348470976, 66.7774760803882], [14.1558036531771, 66.7762314594397], [14.1697949093573, 66.7656307223952], [14.1891938289691, 66.7550299853507], [14.1792368613807, 66.7428842016114], [14.1697090734298, 66.7327984801319], [14.1576062076543, 66.7258457700055], [14.1255035707746, 66.7282920939388], [14.1108256271745, 66.7374336202161], [14.1125423457242, 66.7492789782091], [14.101727018861, 66.7577767350302], [14.0867915674785, 66.7562316883355], [14.0803538729171, 66.7440429866325], [14.0740020142831, 66.7243007233108], [14.0859332082036, 66.7072622917048], [14.1370055850577, 66.6969619804065], [14.19872161692, 66.6954598516755], [14.2324551364219, 66.7017687923457], [14.2400086980407, 66.7206526963926], [14.240952893243, 66.7391932567295], [14.2500515015565, 66.7465322285296], [14.2606093206373, 66.7568325398279] ] + ] + }, + "properties" : { + "feature::id" : 67, + "id" : 19152, + "name" : "Storglomvatnet", + "lge_id" : "no", + "pfafstette" : 19, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 13408, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 68, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.0715013275957, 66.0064119437832], [15.0873809741806, 66.019802348471], [15.0737330617103, 66.0338365226149], [15.0566517121406, 66.0413900842337], [15.0436904870903, 66.0425917872185], [15.0017167185497, 66.0480852865776], [14.9462667093939, 66.0574843206373], [14.9126190258195, 66.0587289415858], [14.903177073796, 66.0538362937191], [14.8956235121773, 66.0486432201062], [14.8872115912837, 66.051690395532], [14.8730486632485, 66.0589864493683], [14.8573406885186, 66.0558963559788], [14.8622333363853, 66.0461968961729], [14.8837781541842, 66.0440939159495], [14.8976835744369, 66.0425917872185], [14.9053229719832, 66.0370982878594], [14.9225759934078, 66.0367978621132], [14.9426616004395, 66.0374416315693], [14.9658373008607, 66.0313901986816], [14.9929614539462, 66.0237508011353], [15.0178538729171, 66.0158968137704], [15.0268666453031, 66.0012188701703], [15.0214589818715, 65.9845237822743], [15.0251499267534, 65.9738801272661], [15.0427462918879, 65.9747814045047], [15.054248306171, 65.9906181331258], [15.0715013275957, 66.0064119437832] ] + ] + }, + "properties" : { + "feature::id" : 68, + "id" : 23709, + "pfafstette" : 29555, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 14109, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_14109", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 69, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.4412081120674, 66.0562826176525], [14.4487616736861, 66.04834279436], [14.464641320271, 66.0495874153086], [14.4852419428676, 66.0611752655191], [14.5227522431789, 66.0750806857719], [14.5639534883721, 66.0857672587438], [14.5816356894342, 66.0918186916316], [14.5661852224867, 66.0985138939755], [14.5390610694012, 66.101260643655], [14.5227522431789, 66.0942650155649], [14.5035249954221, 66.0854668329976], [14.4582894616371, 66.0839217863029], [14.4230108954404, 66.0824196575719], [14.3984618201795, 66.0793724821461], [14.3774320179454, 66.07872871269], [14.3537413019594, 66.0798445797473], [14.3582047701886, 66.0717760025636], [14.4016377494964, 66.0675271241531], [14.4297060977843, 66.0648232924373], [14.4412081120674, 66.0562826176525] ] + ] + }, + "properties" : { + "feature::id" : 69, + "id" : 23527, + "name" : "Grasvatnet", + "lge_id" : "no", + "pfafstette" : 71, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 14553, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 70, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.2665949459806, 65.7101063221022], [16.2798136788134, 65.7149560520051], [16.2702858908625, 65.724655511811], [16.2441917689068, 65.7422947949094], [16.2295996612342, 65.7596336522615], [16.2153508972716, 65.7729382210218], [16.1904584783007, 65.7921225508149], [16.1719179179638, 65.8018220106208], [16.1587850210584, 65.8064142327413], [16.1363818439846, 65.8122081578466], [16.1035066837576, 65.8116073063542], [16.0867686778978, 65.8064142327413], [16.0992148873833, 65.8027232878594], [16.1396436092291, 65.7939680232558], [16.1809306903498, 65.7760283144113], [16.2017029848013, 65.7565864768358], [16.2205010529207, 65.7349987410731], [16.2420458707197, 65.7210074848929], [16.2526895257279, 65.7149131340414], [16.2665949459806, 65.7101063221022] ] + ] + }, + "properties" : { + "feature::id" : 70, + "id" : 25309, + "name" : "Overstjuktan", + "pfafstette" : 22935, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 14972, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 71, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.8451290972349, 65.8164141182934], [16.8673606024538, 65.809461408167], [16.875, 65.8089463926021], [16.899205731551, 65.8073155099799], [16.9331967588354, 65.8006632255997], [16.9651277238601, 65.7884745238967], [16.9846124793994, 65.7827235167552], [17.0307922083867, 65.7647838079107], [17.0733668284197, 65.7410930919246], [17.0554271195752, 65.7349987410731], [17.0366290514558, 65.7289043902216], [17.0483885735213, 65.7192049304157], [17.0739676799121, 65.7101063221022], [17.0952549899286, 65.7046128227431], [17.1335378135872, 65.7009218778612], [17.1824642922542, 65.6900207150705], [17.2214338033327, 65.6805358450833], [17.249759659403, 65.6805358450833], [17.2928492950009, 65.6803212552646], [17.3432349844351, 65.6738835607032], [17.3792002380516, 65.6617377769639], [17.4061527192822, 65.6537979536715], [17.431388481963, 65.6507507782457], [17.4460664255631, 65.6523387429042], [17.4305301226881, 65.6635832494049], [17.3873546511628, 65.6760294588903], [17.3481276323018, 65.687273965391], [17.3274411737777, 65.6912224180553], [17.31370742538, 65.6930678904963], [17.3022912470243, 65.6942695934811], [17.2751670939388, 65.6906215665629], [17.2204896081304, 65.6933683162424], [17.1678721845816, 65.7037544634682], [17.1377437740341, 65.7170590322285], [17.1244392052738, 65.7322949093573], [17.1180873466398, 65.7453848882989], [17.0996326222304, 65.7529384499176], [17.0843538271379, 65.76087827321], [17.0764569218092, 65.7684318348288], [17.04126419154, 65.7763287401575], [16.9985178996521, 65.7909208478301], [16.9803206830251, 65.8003198818898], [16.9450421168284, 65.811306880608], [16.892853872917, 65.8161566105109], [16.875, 65.8174441494232], [16.8585195019227, 65.8186029344442], [16.8208375297565, 65.8252552188244], [16.7752586522615, 65.8246972852957], [16.7745719648416, 65.8219076176524], [16.8140564914851, 65.8231093206373], [16.8451290972349, 65.8164141182934] ] + ] + }, + "properties" : { + "feature::id" : 71, + "line::hidden" : [ + { "contour" : 0, "segments" : [ { "from" : 46, "to" : 47 } ] } + ], + "id" : 24942, + "name" : "Storvindeln", + "pfafstette" : 8113, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 15009, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 72, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.4582894616371, 66.1800151071232], [14.4394913935177, 66.1927617423549], [14.3947708752976, 66.2030620536532], [14.3752861197583, 66.2055083775865], [14.3497070133675, 66.2049075260941], [14.3415526002564, 66.1872682429958], [14.3503937007874, 66.167869323384], [14.3222395165721, 66.1596290743454], [14.298377128731, 66.15417849295], [14.3271321644388, 66.1483845678447], [14.3615523713606, 66.1428910684856], [14.3981184764695, 66.1379984206189], [14.4299636055668, 66.1437923457242], [14.4455857443692, 66.1510883995605], [14.4597486724043, 66.1458953259476], [14.4789759201612, 66.1413460217909], [14.5023232924373, 66.1486849935909], [14.4837827321004, 66.1565818989196], [14.449448361106, 66.1684701748764], [14.4582894616371, 66.1800151071232] ] + ] + }, + "properties" : { + "feature::id" : 72, + "id" : 22550, + "name" : "Storakersvatnet", + "lge_id" : "no", + "pfafstette" : 0, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 15389, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 73, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [28.0017396081304, 65.3398530488922], [27.9885208752976, 65.3465482512361], [27.9697228071782, 65.3480932979308], [27.949723036074, 65.3480932979308], [27.9162470243545, 65.3429002243179], [27.8910112616737, 65.3380075764512], [27.8688655923823, 65.3298531633401], [27.855732695477, 65.3158189891961], [27.8403680644571, 65.3045744826955], [27.8287802142465, 65.2957763001282], [27.8436298297015, 65.2918278474638], [27.8618270463285, 65.2939308276872], [27.8874919886468, 65.2988234755539], [27.9141011261674, 65.304316974913], [27.9384785295733, 65.3103684078008], [27.9636284563267, 65.3229004532137], [27.9831990477934, 65.3338016160044], [28.0017396081304, 65.3398530488922] ] + ] + }, + "properties" : { + "feature::id" : 73, + "id" : 22127, + "name" : "Puhosjrvi", + "pfafstette" : 4237, + "lke_type" : "N", + "altitude" : 250, + "objectid" : 15394, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 74, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.8195728804248, 66.1188999267534], [14.8151094121956, 66.130144433254], [14.7897878135873, 66.1310027925289], [14.7688438472807, 66.1298440075078], [14.740260483428, 66.1310457104926], [14.7105612525179, 66.1302731871452], [14.6606905786486, 66.1343503937008], [14.6347681285479, 66.1319469877312], [14.6186309741806, 66.1279985350669], [14.6000904138436, 66.134650819447], [14.5873866965757, 66.1495433528658], [14.5843824391137, 66.165036737777], [14.5745971433803, 66.1726761353232], [14.5636959805896, 66.1599295000916], [14.5590608405054, 66.1398438930599], [14.5476446621498, 66.1364962918879], [14.5378593664164, 66.1319469877312], [14.5421511627907, 66.1191574345358], [14.5673869254715, 66.1112605292071], [14.5908201336752, 66.1128055759019], [14.6089315143747, 66.1167540285662], [14.6298754806812, 66.1097584004761], [14.6573429774767, 66.0963679957883], [14.6838662790698, 66.0909603323567], [14.6951107855704, 66.0872693874748], [14.71287882256, 66.0830205090643], [14.736912882256, 66.0875268952573], [14.7463548342794, 66.0973121909907], [14.7406038271379, 66.1082133537814], [14.7092737136056, 66.1122047244095], [14.68283624794, 66.1179128135873], [14.6940807544406, 66.1249513596411], [14.7244666727706, 66.1225479536715], [14.7502174510163, 66.1128055759019], [14.7846376579381, 66.1018185771837], [14.8105601080388, 66.0930203946164], [14.8159677714704, 66.0821192318257], [14.8308173869255, 66.0741794085332], [14.8430060886285, 66.0671408624794], [14.8521905328695, 66.0693296786303], [14.8646367423549, 66.0775270097052], [14.8691860465116, 66.0836213605567], [14.8554522981139, 66.099758514924], [14.8320190899103, 66.1103592519685], [14.8195728804248, 66.1188999267534] ] + ] + }, + "properties" : { + "feature::id" : 74, + "id" : 22947, + "name" : "Umbukta", + "lge_id" : "no", + "pfafstette" : 29733, + "altitude" : 0, + "objectid" : 15442, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 75, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [26.9721376579381, 64.663294268449], [26.9983176158213, 64.6547965116279], [27.0256134407618, 64.65745742538], [27.0414930873466, 64.6675431468596], [27.0608920069584, 64.6672427211133], [27.0549693279619, 64.6596033235671], [27.0478449459806, 64.6519639260209], [27.0610636788134, 64.6468566883355], [27.0896470426662, 64.6511484847098], [27.1226938747482, 64.6538952343893], [27.14209279436, 64.6623500732467], [27.1403760758103, 64.6751825444058], [27.1181445705915, 64.6745816929134], [27.0752266068486, 64.6802897820912], [27.0426947903314, 64.6870279023988], [27.0388321735946, 64.6875], [27.0307635964109, 64.6884871131661], [27.0293043856437, 64.6875], [27.0159139809559, 64.678487227614], [26.9905065464201, 64.6669422953671], [26.9721376579381, 64.663294268449] ] + ] + }, + "properties" : { + "feature::id" : 75, + "id" : 27852, + "pfafstette" : 185, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 15657, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_15657", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 76, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.8454953305256, 65.5340568348288], [14.8218046145395, 65.5401511856803], [14.8077275224318, 65.5413958066288], [14.7354536714888, 65.5456446850394], [14.7197456967588, 65.5474901574803], [14.7032651986816, 65.5459021928218], [14.7116771195752, 65.5383486312031], [14.7202607123238, 65.5249582265153], [14.7336511170116, 65.516503387658], [14.7730498077275, 65.5213531175609], [14.815710263688, 65.5246578007691], [14.8375125892694, 65.5213101995971], [14.869786898004, 65.5213101995971], [14.9120181743271, 65.5285633354697], [14.9409448818898, 65.5325547060978], [14.9618888481963, 65.5346576863212], [14.9768242995788, 65.5459021928218], [14.9509018494781, 65.5519965436733], [14.9072113623879, 65.5480910089727], [14.8987136055668, 65.5419966581212], [14.8862673960813, 65.532855131844], [14.86377838308, 65.5286491713972], [14.8454953305256, 65.5340568348288] ] + ] + }, + "properties" : { + "feature::id" : 76, + "id" : 27555, + "pfafstette" : 2657, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 15922, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_15922", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 77, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [17.2737078831716, 65.3793804934994], [17.238085973265, 65.3829856024538], [17.2155969602637, 65.3826851767076], [17.2080433986449, 65.3826851767076], [17.1931079472624, 65.3869769730819], [17.1751682384179, 65.3918696209485], [17.150275819447, 65.3961184993591], [17.1235808459989, 65.409165560337], [17.1064136605017, 65.4255602224867], [17.1022935359824, 65.4456029115547], [17.0935382713789, 65.4659460263688], [17.0718217817249, 65.4744867011536], [17.0530237136056, 65.484271996887], [17.0429809100897, 65.4867183208204], [17.0478735579564, 65.4766325993408], [17.0542254165904, 65.4689932017946], [17.0395474729903, 65.4663322880425], [17.0073590001831, 65.4659889443326], [16.9856425105292, 65.4693794634683], [16.9675311298297, 65.4784780717817], [16.9340551181102, 65.4860745513642], [16.9104502380516, 65.4830273759385], [16.9155145577733, 65.4695940532869], [16.9487330617103, 65.4601950192272], [16.986672541659, 65.4529418833547], [17.023238646768, 65.4441007828237], [17.0554271195752, 65.4279636284563], [17.0939674510163, 65.4067621543673], [17.1347395165721, 65.3897237227614], [17.1702755905512, 65.378779642007], [17.2049533052554, 65.3720844396631], [17.2378284654825, 65.3659900888116], [17.2673560245376, 65.3641875343344], [17.2836648507599, 65.3614407846548], [17.2937076542758, 65.3471920206922], [17.3113898553378, 65.3329003387658], [17.3232352133309, 65.3404539003846], [17.3037504577916, 65.3632862570958], [17.2737078831716, 65.3793804934994] ] + ] + }, + "properties" : { + "feature::id" : 77, + "id" : 27429, + "name" : "Storjuktan", + "pfafstette" : 22515, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 15940, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 78, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.3230005951291, 65.5425975096136], [15.3314125160227, 65.5301513001282], [15.3442879051456, 65.5134132942685], [15.3654893792346, 65.4963319446988], [15.3955319538546, 65.4909242812672], [15.4545870719649, 65.4851303561619], [15.5219682750412, 65.484271996887], [15.5451439754624, 65.4873191723128], [15.565572926204, 65.4860745513642], [15.5872035799304, 65.490623855521], [15.6123535066838, 65.4933706052005], [15.6384476286395, 65.4893792345724], [15.6627391961179, 65.4875766800952], [15.7026529023988, 65.4885208752976], [15.7251419154001, 65.4879200238052], [15.738188976378, 65.48877838308], [15.7581887474822, 65.4867183208204], [15.8032526094122, 65.4805810520051], [15.8484023072697, 65.4818256729537], [15.8229948727339, 65.4930272614906], [15.7816219556858, 65.5051730452298], [15.7561286852225, 65.5110098882989], [15.7344980314961, 65.5064176661784], [15.7132965574071, 65.5036709164988], [15.6916659036807, 65.5030700650064], [15.6657434535799, 65.5015250183117], [15.6378467771471, 65.5067180919246], [15.6147569126534, 65.505816814686], [15.592782915217, 65.503971342245], [15.577933299762, 65.5048726194836], [15.5551867789782, 65.5036709164988], [15.5288351492401, 65.5006237410731], [15.4962174967955, 65.4993791201245], [15.4699517029848, 65.5079197949094], [15.4646298754807, 65.5189067936276], [15.4582780168467, 65.5243573750229], [15.4414541750595, 65.5322542803516], [15.4207677165354, 65.5407949551364], [15.4025704999085, 65.5413958066288], [15.4013687969237, 65.5522969694195], [15.3918410089727, 65.5644427531588], [15.3803389946896, 65.5593355154734], [15.3605967313679, 65.5574900430324], [15.3379360465116, 65.5687345495331], [15.3142453305256, 65.5805799075261], [15.2795676158213, 65.6018672175426], [15.2575936183849, 65.6164593252152], [15.24205731551, 65.6256008514924], [15.2284094030397, 65.638690830434], [15.1861781267167, 65.65504257462], [15.148238646768, 65.6599352224867], [15.1606848562534, 65.6443989196118], [15.1745902765061, 65.6264592107673], [15.190641594946, 65.6101074665812], [15.202658624794, 65.5997213193554], [15.2018861014466, 65.5863738326314], [15.2171648965391, 65.5748289003846], [15.232701199414, 65.5757301776232], [15.2336453946164, 65.5866742583776], [15.2509842519685, 65.5936269685039], [15.2868636696576, 65.5885197308185], [15.3090093389489, 65.5793352865776], [15.3105543856437, 65.5656873741073], [15.3154470335104, 65.5532411646219], [15.3230005951291, 65.5425975096136] ], + [ [15.3646310199597, 65.503971342245], [15.3750171671855, 65.507318943417], [15.3742446438381, 65.503971342245], [15.3646310199597, 65.503971342245] ] + ] + }, + "properties" : { + "feature::id" : 78, + "id" : 26794, + "name" : "Ajaure", + "pfafstette" : 25953, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 16377, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 79, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.2859194744552, 65.4204100668376], [15.2611987273393, 65.4316545733382], [15.2220575444058, 65.4386072834646], [15.1910707745834, 65.4410536073979], [15.18162882256, 65.4359034517488], [15.1563930598792, 65.4259035661967], [15.1365649606299, 65.4228563907709], [15.118196072148, 65.4216546877861], [15.0569950558506, 65.4222555392785], [15.0086694286761, 65.4173628914118], [15.0351927302692, 65.4098093297931], [15.0673812030764, 65.4088651345907], [15.0934753250321, 65.4067621543673], [15.1457494048709, 65.4055175334188], [15.1794829243728, 65.4134573567112], [15.1953625709577, 65.4228563907709], [15.2284094030397, 65.4219551135323], [15.2622287584692, 65.4137148644937], [15.2840310840506, 65.4100239196118], [15.2859194744552, 65.4204100668376] ] + ] + }, + "properties" : { + "feature::id" : 79, + "id" : 28304, + "name" : "Gottern", + "pfafstette" : 9915, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 16447, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 80, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [28.0213960355246, 64.5404630562168], [28.0141858176158, 64.5344116233291], [27.9723837209302, 64.5268151437466], [27.9624267533419, 64.5197765976927], [28.012984114631, 64.5083175013734], [28.0353872917048, 64.5095192043582], [28.0475759934078, 64.5183173869255], [28.070580021974, 64.5207637108588], [28.0876613715437, 64.510377563633], [28.0891205823109, 64.4983176158213], [28.1015667917964, 64.4909786440212], [28.125, 64.4892190075078], [28.1345277879509, 64.4885323200879], [28.1594202069218, 64.4954850302142], [28.1390770921077, 64.5052703259476], [28.125, 64.5086608450833], [28.1027684947812, 64.5140255905512], [28.0977041750595, 64.5226091832998], [28.0898931056583, 64.5301627449185], [28.0700650064091, 64.5344116233291], [28.0468893059879, 64.5287035341512], [28.0278337300861, 64.524411737777], [28.0237994414942, 64.5313644479033], [28.0213960355246, 64.5404630562168] ] + ] + }, + "properties" : { + "feature::id" : 80, + "id" : 28064, + "name" : "Lahnajrvi", + "pfafstette" : 5571, + "lke_type" : "N", + "altitude" : 133, + "objectid" : 16489, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 81, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.3524423182567, 65.7219516800952], [15.3366485075994, 65.7243550860648], [15.314674510163, 65.7234538088262], [15.2883228804248, 65.7219516800952], [15.2853186229628, 65.7115655328694], [15.2900395989746, 65.6982609641091], [15.2937305438564, 65.6900207150705], [15.3391377494964, 65.6878748168834], [15.396476149057, 65.6769307361289], [15.4132141549167, 65.6580897500458], [15.4314113715437, 65.6462443920527], [15.4731276323018, 65.638690830434], [15.4973333638528, 65.6301501556492], [15.5132130104377, 65.61731768449], [15.5302943600073, 65.6219528245743], [15.520509064274, 65.6437980681194], [15.5062603003113, 65.6580897500458], [15.4823979124703, 65.6638836751511], [15.4599947353965, 65.6660295733382], [15.4360465116279, 65.6699351080388], [15.3976778520418, 65.6881752426296], [15.371927073796, 65.7089904550449], [15.3524423182567, 65.7219516800952] ] + ] + }, + "properties" : { + "feature::id" : 81, + "id" : 26353, + "pfafstette" : 2739, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 17273, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_17273", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 82, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [18.0454587071965, 64.9319607214796], [18.0678618842703, 64.9265101400842], [18.0724970243545, 64.9167677623146], [18.0690635872551, 64.8942787493133], [18.0706086339498, 64.8671975141916], [18.0693210950375, 64.8480131843985], [18.033184169566, 64.8435067982055], [17.9900086980406, 64.8514466214979], [17.9626270371727, 64.8623907022523], [17.9362754074345, 64.8800299853507], [17.9140439022157, 64.9018752288958], [17.8955033418788, 64.9153085515473], [17.8873489287676, 64.920716214979], [17.876104422267, 64.9253084370994], [17.854731276323, 64.9314027879509], [17.8486369254715, 64.9402009705182], [17.8295813495697, 64.9514025590551], [17.7997962827321, 64.9653938152353], [17.7922427211133, 64.9756941265336], [17.7705262314594, 64.9897712186413], [17.7507839681377, 64.9948784563267], [17.7668352865775, 64.9802863486541], [17.7870067295367, 64.9693851858634], [17.800654642007, 64.9583981871452], [17.8288946621498, 64.9344070454129], [17.8567055026552, 64.9201153634866], [17.8815979216261, 64.9079695797473], [17.900138481963, 64.8952229445157], [17.9189365500824, 64.8796866416407], [17.9724123329061, 64.8529058322652], [18.0195362570958, 64.8410604742721], [18.0499221754257, 64.8368115958616], [18.0715528291522, 64.8274125618019], [18.0955010529207, 64.8116616691082], [18.1231402215711, 64.7945803195385], [18.136015610694, 64.7918764878228], [18.1319813221022, 64.7997304751877], [18.1201359641091, 64.8098161966673], [18.1030546145395, 64.82372161692], [18.0912950924739, 64.8510603598242], [18.1010803882073, 64.8769398919612], [18.0973894433254, 64.890330296649], [18.0821964841604, 64.9143214383813], [18.0900933894891, 64.9304156747849], [18.1013378959897, 64.9362095998901], [18.0852007416224, 64.9386559238235], [18.0615100256363, 64.9402009705182], [18.0258881157297, 64.9520463285113], [17.9991931422816, 64.9583981871452], [17.9779058322651, 64.9617457883172], [17.9554168192639, 64.961445362571], [17.9812534334371, 64.9520463285113], [18.0171328511262, 64.9402009705182], [18.0454587071965, 64.9319607214796] ] + ] + }, + "properties" : { + "feature::id" : 82, + "id" : 31348, + "pfafstette" : 21739, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 17641, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_17641", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 83, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.1682269730819, 65.1775373100165], [16.1062534334371, 65.2036743499359], [16.0762108588171, 65.2084811618751], [16.091918833547, 65.1970220655558], [16.1180129555027, 65.1851767075627], [16.1520898187145, 65.1711425334188], [16.1846216352317, 65.1605417963743], [16.2457368156015, 65.1450054934994], [16.2980967313679, 65.1313575810291], [16.3056502929866, 65.1268511948361], [16.3350920161143, 65.112173251236], [16.3720873008607, 65.0893408945248], [16.3776666361472, 65.0760363257645], [16.364018723677, 65.0678819126534], [16.309598745651, 65.0666372917048], [16.2512303149606, 65.0756929820546], [16.2255653726424, 65.085134934078], [16.2128616553745, 65.0842336568394], [16.2245353415126, 65.0784826496979], [16.2561229628273, 65.0690836156382], [16.2925173960813, 65.0617875618019], [16.3326886101447, 65.0556502929866], [16.3584393883904, 65.0395560565831], [16.3915720563999, 65.0088697125069], [16.4405843709943, 64.9778400247208], [16.4648759384728, 64.9605870032961], [16.4856482329244, 64.941402673503], [16.5307979307819, 64.9137205868888], [16.5810977842886, 64.893334554111], [16.6193806079473, 64.8857380745285], [16.66367194653, 64.887326039187], [16.6894227247757, 64.8945362570958], [16.6782640542025, 64.8994289049625], [16.6621268998352, 64.9064245330526], [16.6296809192456, 64.9210166407252], [16.6054751876946, 64.9219608359275], [16.6176638893976, 64.9067249587988], [16.6095953122139, 64.8997293307087], [16.5829861746933, 64.9030769318806], [16.5745742537997, 64.9116176066655], [16.566677348471, 64.9182698910456], [16.5427291247024, 64.9283556125252], [16.5150041201245, 64.9453082082036], [16.4946610053104, 64.9656942409815], [16.4767212964659, 64.983633949826], [16.448481276323, 64.9987839910273], [16.4201554202527, 65.0140627861198], [16.3986964383813, 65.0352642602088], [16.3867652444607, 65.0562940624428], [16.3962930324117, 65.0690836156382], [16.4038465940304, 65.0833752975646], [16.397065555759, 65.09582150705], [16.3755207379601, 65.1082677165354], [16.3342336568394, 65.1313575810291], [16.2861655374474, 65.1489968641275], [16.2405008240249, 65.1586963239334], [16.2053080937557, 65.1678378502106], [16.1682269730819, 65.1775373100165] ] + ] + }, + "properties" : { + "feature::id" : 83, + "id" : 29884, + "name" : "Vojmsjn", + "pfafstette" : 9591, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 17962, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 84, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [25.9436515748031, 64.3387057086614], [25.9221067570042, 64.3438987822743], [25.8940384087164, 64.3502077229445], [25.8795321369712, 64.3396069859], [25.889918284197, 64.3280191356894], [25.9011627906977, 64.3161737776964], [25.9215059055118, 64.3076760208753], [25.9572994872734, 64.3073755951291], [25.9919772019777, 64.2955302371361], [26.0250240340597, 64.2826548480132], [26.032491759751, 64.2888350347921], [26.004766755173, 64.3052296969419], [25.9850244918513, 64.325916155466], [25.968887337484, 64.3380619392053], [25.9436515748031, 64.3387057086614] ] + ] + }, + "properties" : { + "feature::id" : 84, + "id" : 31643, + "name" : "Uljua syvnne", + "pfafstette" : 6211, + "lke_type" : "N", + "altitude" : 79, + "objectid" : 18607, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 85, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.4011456235122, 64.4587472532503], [27.3946220930233, 64.4487473676982], [27.4111025911005, 64.4344556857718], [27.4274972532503, 64.4265158624794], [27.44457860282, 64.4177176799121], [27.4607157571873, 64.4079753021425], [27.4706727247757, 64.4067306811939], [27.4873248947079, 64.4128679500092], [27.4968526826589, 64.419563152353], [27.4825180827687, 64.432266869621], [27.4700718732833, 64.4477602545321], [27.4784837941769, 64.4593481047427], [27.4764237319172, 64.4696913340048], [27.4633766709394, 64.4756998489288], [27.4424327046328, 64.4763436183849], [27.4089566929134, 64.4830388207288], [27.3885277421718, 64.4815796099615], [27.3954804522981, 64.4742406381615], [27.4135918329976, 64.4685325489837], [27.4159952389672, 64.4602922999451], [27.4011456235122, 64.4587472532503] ] + ] + }, + "properties" : { + "feature::id" : 85, + "id" : 28990, + "name" : "Kivesjrvi", + "pfafstette" : 0, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 19095, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 86, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [20.4136719465299, 64.4581464017579], [20.4359034517488, 64.4420092473906], [20.434701748764, 64.4329106390771], [20.4182212506867, 64.4308076588537], [20.422169703351, 64.4216232146127], [20.4321266709394, 64.3981900064091], [20.4377918421534, 64.37733187603], [20.4604525270097, 64.3742847006043], [20.4763321735946, 64.3793919382897], [20.4804522981139, 64.3851429454312], [20.4841432429958, 64.3951428309833], [20.4902375938473, 64.4136833913203], [20.5021687877678, 64.4283613349203], [20.4878341878777, 64.43810371269], [20.4704953305255, 64.4477602545321], [20.45873580846, 64.4581464017579], [20.4392510529207, 64.4705926112434], [20.4164186962095, 64.4708930369896], [20.4136719465299, 64.4581464017579] ] + ] + }, + "properties" : { + "feature::id" : 86, + "id" : 34007, + "name" : "Stora Bygdetrasket", + "pfafstette" : 33, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 19312, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 87, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.0280797930782, 64.6894742263322], [14.0297965116279, 64.6875], [14.0388092840139, 64.6770280168467], [14.0345174876396, 64.6687877678081], [14.053487227614, 64.6623500732467], [14.0728861472258, 64.6526506134408], [14.0878215986083, 64.6414061069401], [14.1026712140634, 64.6292603232009], [14.0922850668376, 64.6146252975645], [14.0818989196118, 64.6015782365867], [14.0824997711042, 64.5906341558323], [14.089881660868, 64.582994758286], [14.1177783373009, 64.5754411966673], [14.1318554294085, 64.5797329930416], [14.1194092199231, 64.5946255264604], [14.1159757828237, 64.6131660867973], [14.1165766343161, 64.6311057956418], [14.1218126258927, 64.6380585057682], [14.1340013275957, 64.649603438015], [14.1293661875115, 64.6611483702619], [14.1186366965757, 64.6681439983519], [14.1053321278154, 64.6757833958982], [14.0864482237686, 64.6812339772935], [14.0816414118293, 64.6875], [14.0776071232375, 64.6927359915766], [14.0679076634316, 64.704366759751], [14.0512554934994, 64.7176713285113], [14.0344316517122, 64.7323063541476], [14.014431880608, 64.7383577870353], [13.9941746017213, 64.7347526780809], [13.9728872917048, 64.7335080571324], [13.953660043948, 64.7325638619301], [13.9406988188977, 64.7198601446622], [13.9548617469328, 64.7097744231826], [13.9782949551364, 64.7055684627358], [13.9965780076909, 64.7003753891229], [14.0280797930782, 64.6894742263322] ] + ] + }, + "properties" : { + "feature::id" : 87, + "id" : 34223, + "name" : "Storjorm", + "pfafstette" : 2813, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 19654, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 88, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.9489505127266, 63.8289690532869], [27.9723837209302, 63.8192266755173], [27.9895509064274, 63.8176816288225], [28.0064605841421, 63.8100851492401], [28.0274903863761, 63.8000423457242], [28.0505802508698, 63.7918879326131], [28.0651723585424, 63.7900424601721], [28.0427691814686, 63.807080891778], [28.0025979674052, 63.8250206006226], [27.9837998992858, 63.8369088765794], [27.9694652993957, 63.8505997070134], [27.9472337941769, 63.8584536943783], [27.9347875846914, 63.8684964978941], [27.9265473356528, 63.8885391869621], [27.9201954770189, 63.9067364035891], [27.9123844076177, 63.9128307544406], [27.8995090184948, 63.9143758011353], [27.8791659036806, 63.9171225508149], [27.8640587804431, 63.9128307544406], [27.876762497711, 63.9049338491119], [27.8858611060245, 63.8893975462369], [27.8874919886468, 63.8687969236404], [27.8783075444058, 63.8614579518403], [27.8774491851309, 63.8532606207654], [27.8971056125252, 63.8411148370262], [27.9201954770189, 63.8377672358542], [27.9489505127266, 63.8289690532869] ] + ] + }, + "properties" : { + "feature::id" : 88, + "id" : 33144, + "name" : "Laakajrvi", + "pfafstette" : 66975, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 19796, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 89, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [26.259184444241, 63.9995250412012], [26.2834760117195, 63.9909843664164], [26.3142052737594, 63.9930444286761], [26.3303424281267, 64.0058768998352], [26.3276815143747, 64.0191814685955], [26.3090551181102, 64.0289238463651], [26.292231276323, 64.0381082906061], [26.2785833638528, 64.0436017899652], [26.2644204358176, 64.0536016755173], [26.2542917963743, 64.0599535341513], [26.2436481413661, 64.0490094533968], [26.2324036348654, 64.0402112708295], [26.2214166361472, 64.0301684673137], [26.228798525911, 64.0138167231276], [26.2461373832631, 64.0058768998352], [26.259184444241, 63.9995250412012] ] + ] + }, + "properties" : { + "feature::id" : 89, + "id" : 33387, + "name" : "Iso Lamujrvi", + "pfafstette" : 47, + "lke_type" : "N", + "altitude" : 137, + "objectid" : 19890, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 90, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.1691940578649, 64.7471988875664], [14.1807819080755, 64.7274137062809], [14.19872161692, 64.7280145577733], [14.195545687603, 64.7362118888482], [14.1951165079656, 64.7450100714155], [14.2084210767259, 64.7574991988647], [14.2209531221388, 64.7714904550449], [14.2285066837576, 64.7857821369713], [14.2314251052921, 64.8049235488006], [14.2126270371727, 64.8195156564732], [14.1857603918696, 64.8167689067936], [14.1733141823842, 64.8164684810474], [14.1530569034975, 64.8210607031679], [14.1340013275957, 64.8271550540194], [14.1105681193921, 64.837412447354], [14.0788946621498, 64.8350090413844], [14.0722852957334, 64.8180135277422], [14.0706544131112, 64.8088290835012], [14.0704827412562, 64.8012755218825], [14.104731276323, 64.7934215345175], [14.1435291155466, 64.7927777650614], [14.1758034242813, 64.7909752105842], [14.2050734755539, 64.7915760620766], [14.2136570683025, 64.7849237776964], [14.1952881798206, 64.7671986586706], [14.1691940578649, 64.7471988875664] ] + ] + }, + "properties" : { + "feature::id" : 90, + "id" : 33389, + "name" : "Stora Blosjn", + "pfafstette" : 2853, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 19891, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 91, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.9852362204725, 64.5766858176158], [15.0011158670573, 64.5648404596228], [15.009012772386, 64.5614499404871], [15.024549075261, 64.5556560153818], [15.0603426570225, 64.5472011765244], [15.0827458340963, 64.5508062854788], [15.078625709577, 64.5735957242263], [15.0676387108588, 64.5933809055118], [15.042574620033, 64.5972864402124], [14.9980257736678, 64.5952263779527], [14.9664381523531, 64.60436790423], [14.9507301776232, 64.6146252975645], [14.9366530855155, 64.6125652353049], [14.9072113623879, 64.6098184856253], [14.8807738967222, 64.6070717359458], [14.8871257553562, 64.6027799395715], [14.9071255264604, 64.5994752563633], [14.936567249588, 64.5946255264604], [14.9658373008607, 64.5891320271013], [14.9852362204725, 64.5766858176158] ] + ] + }, + "properties" : { + "feature::id" : 91, + "id" : 35066, + "name" : "Storsjouten", + "pfafstette" : 4837, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 20121, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 92, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [11.9670733382165, 64.3040279939572], [11.9902490386376, 64.3082768723677], [12.0205491210401, 64.3147145669291], [12.0478449459806, 64.327418284197], [12.0245834096319, 64.3335126350485], [11.9743693920528, 64.3183196758835], [11.9488761215895, 64.3055301226881], [11.9339406702069, 64.2985774125618], [11.9160009613624, 64.2912813587255], [11.9051856344992, 64.283684879143], [11.9292196941952, 64.2742429271196], [11.9573738784106, 64.2660026780809], [11.9677600256363, 64.2684490020143], [11.9650132759568, 64.2894358862846], [11.9670733382165, 64.3040279939572] ] + ] + }, + "properties" : { + "feature::id" : 92, + "id" : 37992, + "name" : "Bangsjene", + "lge_id" : "no", + "pfafstette" : 59, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 21001, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 93, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [26.289570362571, 63.4524068394067], [26.2989264786669, 63.4453682933528], [26.3069092199231, 63.453866050174], [26.3098276414576, 63.4718057590185], [26.3034757828237, 63.4876854056034], [26.29540720564, 63.5040371497894], [26.2837335195019, 63.5128353323567], [26.2481974455228, 63.5195305347006], [26.2257084325215, 63.5144232970152], [26.2236483702619, 63.4973419474455], [26.2220174876396, 63.4860974409449], [26.2393563449918, 63.473393723677], [26.2698280992492, 63.4630075764512], [26.289570362571, 63.4524068394067] ] + ] + }, + "properties" : { + "feature::id" : 93, + "id" : 37886, + "pfafstette" : 0, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 21196, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_21196", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 94, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.1229056033694, 64.2827406839407], [16.1220472440945, 64.2742429271196], [16.1169829243728, 64.2651443188061], [16.1265965482512, 64.2569040697674], [16.1465963193554, 64.2635563541476], [16.161531770738, 64.2663460217909], [16.173377128731, 64.2538998123054], [16.1841066196667, 64.2417111106025], [16.1970678447171, 64.2317112250504], [16.2289988097418, 64.2176770509064], [16.2496852682659, 64.20338536898], [16.2563804706098, 64.1909391594946], [16.2766377494964, 64.18870742538], [16.2722601171947, 64.2076342473906], [16.2429042299945, 64.2235138939755], [16.2295996612342, 64.2335137795276], [16.2202435451383, 64.2380630836843], [16.1867675334188, 64.2584491164622], [16.1621326222304, 64.2863887108588], [16.1511456235122, 64.2985774125618], [16.1423045229812, 64.3067747436367], [16.1362101721297, 64.3159162699139], [16.1235064548618, 64.3040279939572], [16.1229056033694, 64.2827406839407] ] + ] + }, + "properties" : { + "feature::id" : 94, + "id" : 37201, + "name" : "Bellvikssjn", + "pfafstette" : 443555, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 21470, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 95, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [25.8413351492401, 63.5462684261124], [25.8491462186413, 63.5380710950375], [25.8662275682109, 63.5313758926936], [25.8832230818531, 63.5265690807544], [25.9023644936825, 63.5241227568211], [25.9150682109504, 63.5268695065006], [25.929316974913, 63.5335217908808], [25.9582436824757, 63.531976744186], [25.9819343984618, 63.5323630058597], [25.9968698498444, 63.527470357993], [26.017127128731, 63.5198309604468], [26.0424487273393, 63.5128353323567], [26.0597875846914, 63.5086293719099], [26.0610751236037, 63.5164833592749], [26.047341375206, 63.5271270142831], [26.0354101812855, 63.5371698177989], [26.0232214795825, 63.5468692776048], [26.0114619575169, 63.5572554248306], [25.9844236403589, 63.5678561618751], [25.96287882256, 63.5812465665629], [25.987084554111, 63.5876413431606], [26.010775270097, 63.5949373969969], [26.0278566196667, 63.6031347280718], [26.0361827046328, 63.6101303561619], [26.0369552279802, 63.6231774171397], [26.0424487273393, 63.6347652673503], [26.0278566196667, 63.6509024217176], [26.0129211682842, 63.6648078419703], [25.9990157480315, 63.6788420161143], [25.9844236403589, 63.6821466993225], [25.9868270463285, 63.6718034700604], [25.9844236403589, 63.6660095449551], [25.9828785936642, 63.6593143426112], [25.9797885002747, 63.6480698361106], [25.9682864859916, 63.625623741073], [25.9500892693646, 63.6101303561619], [25.9333512635049, 63.6082848837209], [25.9254543581762, 63.6198298159678], [25.9226217725691, 63.6389712277971], [25.9229651162791, 63.6509024217176], [25.9105189067936, 63.6654086934627], [25.8913774949643, 63.6678550173961], [25.8827939022157, 63.6509024217176], [25.875240340597, 63.6392716535433], [25.85669978026, 63.6337781541842], [25.8466569767442, 63.6250228895806], [25.8293181193921, 63.6289284242813], [25.802623145944, 63.6380699505585], [25.7944687328328, 63.6344219236403], [25.8069149423183, 63.6259241668193], [25.8338674235488, 63.6116324848929], [25.8615924281267, 63.5958386742355], [25.8764420435818, 63.5797015198681], [25.8855406518953, 63.5630064319722], [25.8901757919795, 63.5523627769639], [25.8801329884637, 63.5468692776048], [25.8606482329244, 63.5569120811207], [25.8350691265336, 63.5724054660319], [25.8179019410364, 63.5691007828236], [25.8284597601172, 63.5569549990844], [25.8413351492401, 63.5462684261124] ] + ] + }, + "properties" : { + "feature::id" : 95, + "id" : 36589, + "name" : "Pyhjrvi", + "pfafstette" : 551, + "lke_type" : "N", + "altitude" : 132, + "objectid" : 21626, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 96, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [18.4018494781176, 63.9848900155649], [18.4095747115913, 63.9897397454678], [18.4159265702252, 63.9979370765427], [18.4110339223585, 64.0097824345358], [18.3977293535982, 64.0299109595312], [18.384081441128, 64.0423571690167], [18.3667425837759, 64.0530008240249], [18.3471719923091, 64.0666487364951], [18.3222795733382, 64.0836871681011], [18.2837392418971, 64.1033865134591], [18.2529241439297, 64.1186653085515], [18.2398770829518, 64.1299098150522], [18.229834279436, 64.1301244048709], [18.2363578099249, 64.1201245193188], [18.2717222120491, 64.1013264511994], [18.2973871543673, 64.0827858908625], [18.3031381615089, 64.0669062442776], [18.3329232283465, 64.0499536485991], [18.3711202160776, 64.0338164942318], [18.3836522614906, 64.017421832082], [18.3867423548801, 64.0031301501556], [18.3945534242813, 63.9911989562351], [18.4018494781176, 63.9848900155649] ] + ] + }, + "properties" : { + "feature::id" : 96, + "id" : 38117, + "pfafstette" : 571, + "altitude" : 0, + "objectid" : 22001, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_22001", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 97, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.8603335011903, 64.2231705502655], [15.8989596685589, 64.2058316929134], [15.9175002288958, 64.1970335103461], [15.9290022431789, 64.1931279756455], [15.9482294909357, 64.1863898553378], [15.9752678080938, 64.1736003021425], [15.9968126258927, 64.1678492950009], [16.0017052737594, 64.1717548297015], [15.9872848379418, 64.1827418284197], [15.964881660868, 64.1925271241531], [15.9524354513825, 64.2012823887566], [15.9389592107673, 64.2113251922725], [15.9120067295367, 64.2253593664164], [15.8877151620582, 64.2362176112434], [15.8726080388207, 64.2423119620949], [15.8338960355246, 64.2502517853873], [15.7895188610145, 64.2590499679546], [15.7697765976927, 64.2830840276506], [15.7442833272295, 64.3126115867057], [15.7132965574071, 64.3350147637795], [15.6950993407801, 64.3523536211317], [15.6916659036807, 64.3714521149973], [15.6822239516572, 64.3861300585973], [15.6725244918513, 64.3939840459623], [15.6531255722395, 64.4058723219191], [15.6249713880242, 64.4159151254349], [15.614156061161, 64.4231682613075], [15.5928687511445, 64.4353140450467], [15.5641995513642, 64.43776036898], [15.5705514099982, 64.4289621864127], [15.5962163523164, 64.4171168284197], [15.6320957700055, 64.40037882256], [15.6660009613624, 64.3842845861564], [15.6743270463285, 64.3626968503937], [15.6937259659403, 64.3310663111152], [15.7128673777697, 64.3141137154367], [15.7353563907709, 64.2970752838308], [15.7614505127266, 64.2684490020143], [15.7773301593115, 64.2502517853873], [15.8122653817982, 64.2398656381615], [15.8603335011903, 64.2231705502655] ] + ] + }, + "properties" : { + "feature::id" : 97, + "id" : 36120, + "pfafstette" : 47131, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 22394, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_22394", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 98, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.0605887200147, 64.3632977018861], [16.0864253341879, 64.357804202527], [16.1003307544406, 64.3605509522066], [16.1074551364219, 64.3732975874382], [16.1031633400476, 64.3866450741622], [16.0907171305622, 64.3915377220289], [16.0566402673503, 64.4058723219191], [16.0098596868705, 64.4244558002197], [15.9852247756821, 64.4453997665263], [15.9733794176891, 64.4526529023988], [15.9667700512727, 64.4365157480315], [15.9744094488189, 64.418576039187], [15.9895165720564, 64.410722051822], [16.0202458340963, 64.3906364447903], [16.0605887200147, 64.3632977018861] ] + ] + }, + "properties" : { + "feature::id" : 98, + "id" : 35825, + "name" : "Ormsjn", + "pfafstette" : 44393, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 22402, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 99, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [25.1120731093206, 63.3128805392785], [25.1167082494049, 63.3022368842703], [25.1120731093206, 63.2970438106574], [25.109669703351, 63.2942970609778], [25.1178241164622, 63.2885889718], [25.1269227247757, 63.2806491485076], [25.112673960813, 63.2770011215894], [25.0990260483428, 63.2742972898736], [25.1075238051639, 63.2688037905145], [25.1271802325581, 63.2596622642373], [25.1357638253067, 63.2487181834829], [25.1247768265885, 63.2475164804981], [25.1208283739242, 63.2359715482512], [25.109841375206, 63.2247270417506], [25.091472486724, 63.2247270417506], [25.0981676890679, 63.2180318394067], [25.1144765152902, 63.2043410089727], [25.109669703351, 63.1970878731002], [25.097996017213, 63.1885901162791], [25.1108714063358, 63.1758005630837], [25.13087117744, 63.169062442776], [25.1416006683758, 63.1563587255081], [25.1528451748764, 63.140865340597], [25.1594545412928, 63.1247711041934], [25.1151632027101, 63.1213376670939], [25.0527604834279, 63.1320242400659], [25.0327607123237, 63.1308225370811], [25.0415159769273, 63.1259298892144], [25.0640049899286, 63.1219385185863], [25.1022878135873, 63.1119386330342], [25.1235751236037, 63.1003937007874], [25.1106138985534, 63.0949002014283], [25.109841375206, 63.0815527147043], [25.1306136696576, 63.0648147088445], [25.1545618934261, 63.046875], [25.16160043948, 63.0228838582677], [25.1689823292437, 63.0116822697308], [25.1823727339315, 62.998291865043], [25.1916430141, 62.9870473585424], [25.2051192547153, 62.9779058322651], [25.2193680186779, 62.9688072239516], [25.2312133766709, 62.9782920939388], [25.2257198773118, 62.9949442638711], [25.2148187145212, 63.0067896218641], [25.1991965757187, 63.0159311481414], [25.1828877494964, 63.0235705456876], [25.1816860465116, 63.0329695797473], [25.1932738967222, 63.0371755401941], [25.2107844259293, 63.0420681880608], [25.2011708020509, 63.0569607214796], [25.1838319446988, 63.0779046877861], [25.2234023072697, 63.0837415308551], [25.257908350119, 63.0842994643838], [25.2439170939388, 63.0942993499359], [25.2358485167552, 63.1016383217359], [25.2294108221937, 63.1146853827138], [25.240226149057, 63.1219385185863], [25.2567066471342, 63.1259728071782], [25.2451187969236, 63.1350714154917], [25.2375652353049, 63.1423245513642], [25.218509659403, 63.1560153817982], [25.200484114631, 63.1739550906427], [25.2141320271013, 63.1845558276872], [25.2326725874382, 63.1964011856803], [25.2246040102545, 63.2061864814137], [25.2057201062077, 63.2112937190991], [25.1806560153818, 63.221980292071], [25.1698406885186, 63.2378170206922], [25.1646905328694, 63.2475164804981], [25.1504417689068, 63.255370467863], [25.1440899102728, 63.2648553378502], [25.1360213330892, 63.2712501144479], [25.1519009796741, 63.277902398828], [25.1694115088812, 63.2839967496795], [25.1545618934261, 63.2942970609778], [25.1436607306354, 63.3046832082036], [25.1324162241348, 63.3185886284563], [25.1083821644387, 63.3377729582494], [25.0947342519685, 63.3484595312214], [25.0874381981322, 63.3560130928401], [25.0768803790515, 63.3672575993408], [25.0632324665812, 63.3645108496612], [25.0637474821461, 63.3514637886834], [25.0855498077275, 63.3399188564365], [25.1028886650797, 63.3262280260025], [25.1120731093206, 63.3128805392785] ] + ] + }, + "properties" : { + "feature::id" : 99, + "id" : 42151, + "name" : "Kivijrvi", + "lge_id" : "fi", + "pfafstette" : 9799, + "lke_type" : "N", + "altitude" : 131, + "objectid" : 23002, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 100, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [25.8403051181102, 63.306786188427], [25.8090608405054, 63.31897489013], [25.7756706647134, 63.3383738097418], [25.7558425654642, 63.3530517533419], [25.7385037081121, 63.3663563221022], [25.7309501464933, 63.3694034975279], [25.7181605932979, 63.3572577137887], [25.7065727430873, 63.3454123557956], [25.6850279252884, 63.3454123557956], [25.6577321003479, 63.347858679729], [25.6427966489654, 63.3542534563267], [25.6308654550449, 63.3569572880425], [25.6166166910822, 63.3438673091009], [25.6161875114448, 63.329833134957], [25.6496635231643, 63.3216787218458], [25.6753284654825, 63.3140822422633], [25.6779893792346, 63.3022368842703], [25.696787447354, 63.2936962094854], [25.7077744460721, 63.2815504257462], [25.7150704999084, 63.2666578923274], [25.7288042483062, 63.2676020875297], [25.7399629188793, 63.269404642007], [25.7476023164256, 63.2739110282], [25.7771298754807, 63.2718509659403], [25.8138676524446, 63.2645119941403], [25.8300048068119, 63.2624519318806], [25.8413351492401, 63.2624519318806], [25.8320648690716, 63.2718509659403], [25.8199620032961, 63.2833958981871], [25.8479445156565, 63.2821512772386], [25.8868281908075, 63.2669583180736], [25.9138665079656, 63.2402204266618], [25.9272569126534, 63.2161863669657], [25.929488646768, 63.2049418604651], [25.9315487090276, 63.1921952252335], [25.9350679820546, 63.186100874382], [25.9429648873833, 63.1931394204358], [25.9585011902582, 63.1970878731002], [25.9833936092291, 63.1870021516206], [26.0100027467497, 63.1888476240615], [26.0027066929134, 63.2141263047061], [25.9560977842886, 63.2386324620033], [25.9186733199048, 63.2566150888116], [25.889918284197, 63.2727093252151], [25.8725794268449, 63.2855417963743], [25.8554980772752, 63.2991897088445], [25.8403051181102, 63.306786188427] ] + ] + }, + "properties" : { + "feature::id" : 100, + "id" : 41022, + "name" : "Kolimajrvi 52", + "pfafstette" : 96513, + "lke_type" : "N", + "altitude" : 111, + "objectid" : 23641, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 101, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [28.7073967679912, 62.7730583913203], [28.7204438289691, 62.7682086614173], [28.7311733199048, 62.7737021607764], [28.7426753341879, 62.7852041750595], [28.7527181377037, 62.794302783373], [28.7637051364219, 62.7952898965391], [28.7758080021974, 62.8000967084783], [28.7900567661601, 62.807993613807], [28.8097990294818, 62.8101824299579], [28.7940910547519, 62.8272637795275], [28.7900567661601, 62.8399674967954], [28.82044268449, 62.8377786806446], [28.8298846365135, 62.8493665308551], [28.811773255814, 62.8669628959897], [28.7946919062443, 62.8612118888482], [28.787395852408, 62.8469202069218], [28.7734904321553, 62.8518128547885], [28.7449070683025, 62.8593664164072], [28.7182979307819, 62.8675637474821], [28.7031049716169, 62.876104422267], [28.6870536531771, 62.88794978026], [28.6825043490203, 62.9015976927302], [28.6733199047794, 62.9077349615455], [28.6551226881524, 62.9043444424098], [28.6521184306904, 62.8855034563267], [28.6711740065922, 62.8679070911921], [28.6916887932613, 62.8584651391686], [28.6897145669291, 62.8460189296832], [28.6949505585058, 62.8287229902948], [28.7090276506134, 62.8104399377403], [28.7058517212965, 62.787950924739], [28.7073967679912, 62.7730583913203] ] + ] + }, + "properties" : { + "feature::id" : 101, + "id" : 42825, + "pfafstette" : 0, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 24045, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_24045", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 102, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [23.4592164896539, 63.3846393746566], [23.4626499267533, 63.3879440578648], [23.4683150979674, 63.4003902673503], [23.4814479948727, 63.3979439434169], [23.5017052737594, 63.3961413889397], [23.5153531862296, 63.4055833409632], [23.5300311298297, 63.4080296648965], [23.5473699871818, 63.4101755630837], [23.5424773393151, 63.4191883354697], [23.5357821369713, 63.4314199551364], [23.5241942867607, 63.4420206921809], [23.5036795000916, 63.4432223951657], [23.488744048709, 63.4371280443142], [23.461705731551, 63.4295744826955], [23.4266846731368, 63.4314199551364], [23.4071999175975, 63.4310766114265], [23.4192169474455, 63.421634659403], [23.4467702801685, 63.4110339223585], [23.4549246932796, 63.3973430919245], [23.4592164896539, 63.3846393746566] ] + ] + }, + "properties" : { + "feature::id" : 102, + "id" : 43161, + "pfafstette" : 533, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 24102, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_24102", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 103, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [25.4294943691632, 63.4295744826955], [25.400481825673, 63.4347675563084], [25.3731860007325, 63.4436086568394], [25.351555347006, 63.4490592382347], [25.3415983794177, 63.4432223951657], [25.3555037996704, 63.429316974913], [25.3827996246109, 63.41712827321], [25.4011685130928, 63.4071283876579], [25.4130138710859, 63.4009911188427], [25.4460607031679, 63.3824505585058], [25.4773908167002, 63.3645108496612], [25.4902662058231, 63.3557126670939], [25.4974764237319, 63.3423651803699], [25.5051158212782, 63.3338674235488], [25.5200512726607, 63.3310777559055], [25.536360098883, 63.3292322834646], [25.5498363394983, 63.3310777559055], [25.5458020509064, 63.3393180049441], [25.5321541384362, 63.353867194653], [25.5388493407801, 63.3681159586156], [25.5361025911005, 63.376399125618], [25.533012497711, 63.3842960309467], [25.5290640450467, 63.3958838811573], [25.5114676799121, 63.4049824894708], [25.475588262223, 63.418630401941], [25.4294943691632, 63.4295744826955] ] + ] + }, + "properties" : { + "feature::id" : 103, + "id" : 40363, + "name" : "Alvajrvi", + "pfafstette" : 0, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 24255, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 104, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [24.8555095220656, 63.4949385414759], [24.8670973722761, 63.5052388527742], [24.8637497711042, 63.5162258514924], [24.8695007782457, 63.5198309604468], [24.8821186595862, 63.5264832448269], [24.8761959805896, 63.5368693920527], [24.8670973722761, 63.5448092153452], [24.8481276323018, 63.5539078236587], [24.8217760025636, 63.5624055804797], [24.8034929500092, 63.5672553103827], [24.76795687603, 63.5782423091009], [24.7387726606849, 63.5809461408167], [24.7555106665446, 63.5693582906061], [24.7934501464933, 63.5556674601721], [24.8083855978758, 63.5429637429042], [24.789330021974, 63.5413757782457], [24.7725061801868, 63.5484143242996], [24.765295962278, 63.556354147592], [24.7367984343527, 63.5601738463651], [24.6967988921443, 63.5651523301593], [24.6782583318074, 63.5572554248306], [24.6728506683758, 63.5426203991943], [24.67748580846, 63.5335647088445], [24.6858977293536, 63.5262686550082], [24.692678767625, 63.5189296832082], [24.7158544680461, 63.5140370353415], [24.7512188701703, 63.5037367240432], [24.7752529298663, 63.4979427989379], [24.8023770829518, 63.5003891228713], [24.8354239150339, 63.4955393929683], [24.8555095220656, 63.4949385414759] ] + ] + }, + "properties" : { + "feature::id" : 104, + "id" : 39222, + "name" : "Lestijrvi", + "pfafstette" : 97, + "lke_type" : "N", + "altitude" : 141, + "objectid" : 24507, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 105, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [17.2331933253983, 63.8885391869621], [17.2465837300861, 63.8973373695294], [17.2365409265702, 63.910427348471], [17.2216913111152, 63.9234744094488], [17.2289873649515, 63.9363068806079], [17.2490729719831, 63.9392682201062], [17.2641800952206, 63.9471651254349], [17.2663259934078, 63.9602121864127], [17.2627208844534, 63.9778943874748], [17.2563690258194, 63.9927869208936], [17.2575707288042, 64.0052760483428], [17.2602316425563, 64.0161772111335], [17.2520772294451, 64.0079369620949], [17.2508755264603, 63.9863921442959], [17.2569698773118, 63.9621005768174], [17.2477854330709, 63.9466071919062], [17.2265839589819, 63.9472080433986], [17.1949963376671, 63.9508560703168], [17.1630653726424, 63.9581521241531], [17.1470140542025, 63.9636456235122], [17.1208340963193, 63.964847326497], [17.0998901300128, 63.9660919474455], [17.1079587071965, 63.9587529756455], [17.128902673503, 63.9532594762864], [17.1560268265885, 63.9466071919062], [17.186155237136, 63.932615935726], [17.1955971891595, 63.910084004761], [17.2031507507782, 63.8951914713422], [17.2177428584508, 63.8918438701703], [17.2331933253983, 63.8885391869621] ] + ] + }, + "properties" : { + "feature::id" : 105, + "id" : 39516, + "name" : "Hallbymagasinet", + "pfafstette" : 739, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 24511, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 106, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [11.5689663065373, 63.8273810886284], [11.5978930141, 63.8213725737044], [11.6299956509797, 63.8322737364951], [11.6391800952207, 63.8502134453397], [11.6348882988464, 63.8690973493866], [11.6245021516206, 63.8827452618568], [11.6135151529024, 63.8991828419703], [11.5984080296649, 63.9146762268815], [11.5834725782824, 63.9226160501739], [11.5692238143197, 63.9204272340231], [11.5683654550449, 63.904075489837], [11.5930003662333, 63.8924447216627], [11.6063049349936, 63.8769513367515], [11.5917986632485, 63.8523593435268], [11.5716272202893, 63.8377672358542], [11.5689663065373, 63.8273810886284] ] + ] + }, + "properties" : { + "feature::id" : 106, + "id" : 45476, + "name" : "Leksdalsvatnet", + "lge_id" : "no", + "pfafstette" : 53, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 25444, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 107, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [28.5122058688885, 62.7451187969236], [28.5193302508698, 62.735376419154], [28.5223345083318, 62.726191974913], [28.5254246017213, 62.7149903863761], [28.5523770829519, 62.7076943325398], [28.5721193462736, 62.7131449139352], [28.6035352957334, 62.7161920893609], [28.6478266343161, 62.7047329930416], [28.65452183666, 62.6928876350485], [28.6364962918879, 62.6885958386742], [28.602591100531, 62.6876087255081], [28.581904642007, 62.6822010620765], [28.5989001556492, 62.6739608130379], [28.6186424189709, 62.6618579472624], [28.6298869254715, 62.6460212186413], [28.642333134957, 62.6386822468412], [28.6596719923091, 62.6368367744003], [28.6779550448636, 62.6350771378868], [28.6909162699139, 62.6302703259476], [28.696581441128, 62.6183391320271], [28.711946072148, 62.6080388207288], [28.7432761856803, 62.5986397866691], [28.7590699963377, 62.5867515107123], [28.7730612525179, 62.5797129646585], [28.7849066105109, 62.5678676066654], [28.8056789049625, 62.5529750732466], [28.8235327778795, 62.5560222486724], [28.8034471708478, 62.5670092473906], [28.7958936092291, 62.5837472532503], [28.8310863394983, 62.5934467130562], [28.8640473356528, 62.5879532136971], [28.8891972624062, 62.5846056125252], [28.9308276872368, 62.5736615317707], [28.9763207288043, 62.5566660181285], [29.0017281633401, 62.5454215116279], [29.0219854422267, 62.5390267350302], [29.0372642373192, 62.5420739104559], [29.0239596685589, 62.5466232146127], [29.0043890770921, 62.5529750732466], [28.9809558688885, 62.5639620719648], [28.9517716535433, 62.584305186779], [28.9389821003479, 62.606837117744], [28.9297118201795, 62.6140902536165], [28.905076908991, 62.6183391320271], [28.9004417689068, 62.6369226103278], [28.8967508240249, 62.6533172724776], [28.8754635140084, 62.66125709577], [28.8636181560154, 62.6648622047244], [28.8511719465299, 62.665763481963], [28.8308288317158, 62.6703127861197], [28.799241210401, 62.6684673136788], [28.7745204632851, 62.6712569813221], [28.76001419154, 62.6785530351584], [28.7536623329061, 62.6876087255081], [28.7327183665995, 62.7010420481597], [28.7010449093573, 62.7101406564732], [28.6961522614906, 62.7183809055118], [28.6916887932613, 62.7274365958616], [28.6804442867607, 62.7399257233107], [28.6660238509431, 62.7508698040652], [28.6553801959348, 62.7569641549167], [28.666367194653, 62.7611701153635], [28.6770108496612, 62.7760626487823], [28.6648221479583, 62.7843028978209], [28.632977018861, 62.78245742538], [28.5986426478667, 62.7843028978209], [28.5746085881707, 62.7843028978209], [28.5619907068303, 62.7918564594396], [28.5471410913752, 62.8007404779344], [28.530317249588, 62.7994958569859], [28.5134075718733, 62.7988950054935], [28.5019913935177, 62.8065344030397], [28.4873134499176, 62.8107403634865], [28.4703179362754, 62.8177359915766], [28.4540091100531, 62.8159334370994], [28.4299750503571, 62.8065344030397], [28.4262841054752, 62.7925002288958], [28.4389878227431, 62.7806548709028], [28.4493739699689, 62.7925002288958], [28.4673136788134, 62.801641755173], [28.4852533876579, 62.7961482558139], [28.4807040835012, 62.7906547564548], [28.4770989745468, 62.7831011948361], [28.4748672404322, 62.7651614859916], [28.4758114356345, 62.7506122962827], [28.4876567936276, 62.7548182567295], [28.5013905420253, 62.7569641549167], [28.5122058688885, 62.7451187969236] ] + ] + }, + "properties" : { + "feature::id" : 107, + "id" : 45091, + "name" : "Juojrvi", + "lge_id" : "fi", + "pfafstette" : 6459, + "lke_type" : "N", + "altitude" : 101, + "objectid" : 25537, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 108, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.8544852133309, 63.7255796786303], [16.8736266251602, 63.7262234480864], [16.875, 63.7259230223402], [16.8909654825124, 63.7225325032045], [16.9095918787768, 63.7149789415858], [16.9281324391137, 63.7164810703168], [16.9344842977477, 63.7229187648782], [16.926244048709, 63.7310731779894], [16.9079609961545, 63.7517596365134], [16.8986907159861, 63.7751499267533], [16.8879612250504, 63.7897849523897], [16.8758583592749, 63.8034757828237], [16.875, 63.8042053882073], [16.8654722120491, 63.8122739653909], [16.8596353689801, 63.799741919978], [16.8728541018129, 63.77270360282], [16.8639271653543, 63.7578110694012], [16.820408350119, 63.7584119208936], [16.7800654642007, 63.7669955136422], [16.747791155466, 63.7855360739791], [16.72410043948, 63.7964372367698], [16.721096182018, 63.7833472578282], [16.7338857352133, 63.77270360282], [16.7538855063175, 63.7669955136422], [16.7639283098334, 63.7584119208936], [16.7800654642007, 63.7544634682293], [16.8113097418055, 63.7498712461088], [16.835944652994, 63.7372104468046], [16.8544852133309, 63.7255796786303] ] + ] + }, + "properties" : { + "feature::id" : 108, + "id" : 44843, + "name" : "Betarsjn", + "pfafstette" : 653, + "lke_type" : "N", + "altitude" : 198, + "objectid" : 26571, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 109, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [25.5339566929134, 62.6625017167185], [25.530523255814, 62.6712569813221], [25.5378193096502, 62.6852053195385], [25.5488063083684, 62.7004411966673], [25.5342142006958, 62.7107415079656], [25.5141285936642, 62.7262778108405], [25.4978197674419, 62.7390244460721], [25.4898370261857, 62.750569378319], [25.4961888848196, 62.7682086614173], [25.4894936824757, 62.7822428355612], [25.4670905054019, 62.7873500732466], [25.4427989379235, 62.7910410181285], [25.4180781908075, 62.7858479445157], [25.4072628639443, 62.7706549853507], [25.412327183666, 62.761255951291], [25.4130138710859, 62.7548182567295], [25.3907823658671, 62.7608696896173], [25.3722418055301, 62.7654619117378], [25.3862330617103, 62.7557624519319], [25.3923274125618, 62.7402261490569], [25.3798812030764, 62.72168558872], [25.3913832173595, 62.7073939067936], [25.4068336843069, 62.707994758286], [25.4136147225783, 62.7192392647867], [25.4284643380333, 62.7250331898919], [25.4497516480498, 62.7232306354147], [25.4611678264054, 62.7104410822194], [25.4780775041201, 62.6985957242263], [25.5023690715986, 62.6843469602637], [25.5203087804431, 62.6648622047244], [25.5339566929134, 62.6625017167185] ] + ] + }, + "properties" : { + "feature::id" : 109, + "id" : 51690, + "name" : "Pyhjrvi", + "pfafstette" : 6511, + "lke_type" : "N", + "altitude" : 120, + "objectid" : 26655, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 110, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [24.8081280900934, 62.8669628959897], [24.7907892327413, 62.8782503204541], [24.7881283189892, 62.8809970701337], [24.7917334279436, 62.889795252701], [24.7810039370079, 62.8964904550449], [24.7534506042849, 62.9015976927302], [24.726068943417, 62.9116404962461], [24.7038374381981, 62.9074345357993], [24.6858977293536, 62.9013831029115], [24.6767991210401, 62.9013831029115], [24.6777433162424, 62.8952887520601], [24.686326908991, 62.8840442455594], [24.6965413843618, 62.8703534151254], [24.7226355063175, 62.8600101858634], [24.7430644570591, 62.860911463102], [24.7393735121773, 62.8700100714155], [24.7393735121773, 62.8797524491851], [24.7604033144113, 62.8833575581395], [24.7758537813587, 62.8739585240798], [24.7922484435085, 62.8587655649148], [24.8154241439297, 62.8408258560703], [24.8266686504303, 62.8311263962644], [24.8320763138619, 62.836534059696], [24.8252094396631, 62.8493665308551], [24.8081280900934, 62.8669628959897] ] + ] + }, + "properties" : { + "feature::id" : 110, + "id" : 50785, + "name" : "Pjrvi", + "pfafstette" : 673, + "lke_type" : "N", + "altitude" : 144, + "objectid" : 26905, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 111, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [11.7407239974364, 63.6058385597876], [11.7433849111884, 63.603091810108], [11.7668181193921, 63.5936927760483], [11.7987490844168, 63.5748517899652], [11.8276757919795, 63.5566545733382], [11.8482764145761, 63.5484143242996], [11.8808940670207, 63.5550666086797], [11.9109366416407, 63.5597017487639], [11.9347990294818, 63.5599592565464], [11.9455285204175, 63.5666544588903], [11.9299063816151, 63.5709462552646], [11.8911085423915, 63.5742080205091], [11.8625251785387, 63.5842937419886], [11.849134773851, 63.5945940532869], [11.8254440578649, 63.5976412287127], [11.7984915766343, 63.6009459119209], [11.7687065097968, 63.6067398370262], [11.7407239974364, 63.6058385597876] ] + ] + }, + "properties" : { + "feature::id" : 111, + "id" : 51066, + "name" : "Feren", + "lge_id" : "no", + "pfafstette" : 2751, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 26933, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 112, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.1940864768358, 63.5839933162424], [14.1818977751328, 63.5827486952939], [14.1645589177806, 63.5876413431606], [14.1437007874016, 63.5952378227431], [14.1073921900751, 63.6021905328694], [14.0824997711042, 63.6027913843618], [14.0576073521333, 63.6046368568028], [14.0153760758103, 63.6128771058414], [13.9855910089727, 63.6298726194836], [13.965848745651, 63.6380699505585], [13.9375228895807, 63.6456235121772], [13.9175231184765, 63.6611598150522], [13.8898839498261, 63.6654086934627], [13.851000274675, 63.6617606665446], [13.8420733382165, 63.6545504486358], [13.8597555392785, 63.6496578007691], [13.8847337941769, 63.6475119025819], [13.911428767625, 63.637812442776], [13.932630241714, 63.625623741073], [13.9515141457609, 63.615623855521], [13.9825867515107, 63.6073836064823], [14.0119426387109, 63.5970403772203], [14.0561481413661, 63.588242194653], [14.1066196667277, 63.58339246475], [14.1355463742904, 63.5751951336751], [14.1637005585058, 63.568199505585], [14.2026700695843, 63.5675557361289], [14.2275624885552, 63.5660536073979], [14.2382061435635, 63.5691007828236], [14.2406095495331, 63.5794010941219], [14.2183780443142, 63.5861392144296], [14.1940864768358, 63.5839933162424] ] + ] + }, + "properties" : { + "feature::id" : 112, + "id" : 49448, + "name" : "Landsjn", + "pfafstette" : 6711, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 28491, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 113, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.1859320637246, 63.3451119300494], [14.1260185863395, 63.3572577137887], [14.041298525911, 63.3775579106391], [13.9823292437283, 63.391592084783], [13.9513424739059, 63.3909912332906], [13.9245616645303, 63.3918495925654], [13.8959783006775, 63.3933946392602], [13.886879692364, 63.3863990111701], [13.8987250503571, 63.3788454495514], [13.944818943417, 63.37974672679], [13.9878227430874, 63.3806050860648], [14.0364058780443, 63.365712552646], [14.0933150979674, 63.3506054294085], [14.1145165720564, 63.346013207288], [14.1293661875115, 63.3399188564365], [14.1479925837759, 63.3380733839956], [14.1731425105292, 63.3399188564365], [14.1859320637246, 63.3451119300494] ] + ] + }, + "properties" : { + "feature::id" : 113, + "id" : 54532, + "pfafstette" : 76511, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 29332, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_29332", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 114, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [25.3259762406153, 62.6797547381432], [25.3440017853873, 62.6737033052554], [25.3379074345358, 62.6676089544039], [25.3324139351767, 62.6570082173594], [25.3664907983886, 62.6378238875664], [25.4099237776964, 62.637223036074], [25.4315544314228, 62.6517293078191], [25.418507370445, 62.664261353232], [25.3928424281267, 62.6678664621864], [25.3725851492401, 62.6730595357993], [25.3530145577733, 62.6800551638894], [25.3312122321919, 62.6876087255081], [25.3171351400842, 62.6837031908075], [25.3259762406153, 62.6797547381432] ] + ] + }, + "properties" : { + "feature::id" : 114, + "id" : 54202, + "pfafstette" : 6413, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 29534, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_29534", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 115, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.4890416132577, 63.2952412561802], [12.4858656839407, 63.2830954724409], [12.5032045412928, 63.2700913294268], [12.5184833363853, 63.2533104056034], [12.541401529024, 63.2421946529939], [12.592988921443, 63.2353706967588], [12.6333318073613, 63.2426667505951], [12.6420870719649, 63.2621085881706], [12.6509281724959, 63.2842971754257], [12.6570225233474, 63.2973871543673], [12.6437179545871, 63.3010351812855], [12.6304133858268, 63.3095758560703], [12.6194263871086, 63.3210349523897], [12.602173365684, 63.3288031038271], [12.5662081120674, 63.3250263230178], [12.5376247482146, 63.3171294176891], [12.5136765244461, 63.3046402902399], [12.4890416132577, 63.2952412561802] ] + ] + }, + "properties" : { + "feature::id" : 115, + "id" : 56337, + "pfafstette" : 93373, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 30012, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_30012", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 116, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [24.0236735488006, 62.8083369575169], [24.021270142831, 62.8177359915766], [24.0047896447537, 62.8228861472258], [23.9990386376122, 62.815332585607], [24.0085664255631, 62.8059335515473], [24.0102831441128, 62.7988950054935], [24.0077939022157, 62.7852041750595], [24.0151757919795, 62.7752042895074], [24.0202401117012, 62.7688095129097], [24.0264202984801, 62.7606121818348], [24.0319137978392, 62.7536165537447], [24.0357764145761, 62.7429299807727], [24.036119758286, 62.7262778108405], [24.0224718458158, 62.7183809055118], [24.0112273393151, 62.7159345815785], [24.0185233931514, 62.708338101996], [24.0282228529573, 62.6994540835012], [24.0357764145761, 62.6919005218824], [24.0410124061527, 62.679454312397], [24.0476217725691, 62.664261353232], [24.0692524262955, 62.6590682796191], [24.0927714704267, 62.6499267533419], [24.1142304522981, 62.6369226103278], [24.1254749587988, 62.6229313541476], [24.1294234114631, 62.6058500045779], [24.1430713239333, 62.6006998489288], [24.1525991118843, 62.6058500045779], [24.1473631203076, 62.6183391320271], [24.1379211682842, 62.6362788408716], [24.1251316150888, 62.65357478026], [24.1157754989929, 62.6715144891045], [24.1054751876946, 62.6855486632485], [24.0859904321553, 62.6864499404871], [24.0704541292804, 62.6916430141], [24.0710549807728, 62.7122865546603], [24.0671065281084, 62.7314708844534], [24.0555186778978, 62.7447754532137], [24.0500251785387, 62.7563633034243], [24.0464200695843, 62.7696678721846], [24.04247161692, 62.7843028978209], [24.0290812122322, 62.7876504989928], [24.0204976194836, 62.7952898965391], [24.0236735488006, 62.8083369575169] ] + ] + }, + "properties" : { + "feature::id" : 116, + "id" : 53990, + "name" : "htrinjrvi", + "pfafstette" : 9735, + "lke_type" : "N", + "altitude" : 154, + "objectid" : 30292, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 117, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.2639569218092, 63.3618070179454], [14.2843000366233, 63.359704037722], [14.3327973356528, 63.3626653772203], [14.3776895257279, 63.3639099981688], [14.3976892968321, 63.3648541933712], [14.382839681377, 63.3709056262589], [14.3686767533419, 63.3809913477385], [14.3505653726424, 63.391592084783], [14.3178618842703, 63.4037378685222], [14.2600084691449, 63.4107764145761], [14.2085069126534, 63.4110339223585], [14.1767476194836, 63.4132227385094], [14.146962552646, 63.4152828007691], [14.1355463742904, 63.4174286989562], [14.1183791887933, 63.423480131844], [14.1026712140634, 63.4317203808826], [14.086534059696, 63.4463124885552], [14.0673926478667, 63.453866050174], [14.0920275590551, 63.4301753341879], [14.1859320637246, 63.3954976194836], [14.2597509613624, 63.3739098837209], [14.2639569218092, 63.3618070179454] ] + ] + }, + "properties" : { + "feature::id" : 117, + "id" : 52913, + "name" : "N?ldsjn", + "pfafstette" : 76513, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 30500, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 2 + } + }, { + "type" : "Feature", + "id" : 118, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [28.1186481413661, 62.0089040468779], [28.125, 62.0061143792346], [28.1357294909357, 62.0013504852591], [28.1478323567112, 61.9986037355795], [28.1599352224867, 61.9955994781175], [28.1885185863395, 61.9919514511994], [28.2192478483794, 61.984011627907], [28.2481745559421, 61.9731104651163], [28.2524663523164, 61.9789043902216], [28.228003112983, 61.9892047015199], [28.2013939754624, 62.0004492080205], [28.1813083684307, 62.0080027696392], [28.1530683482879, 62.0205348150522], [28.125, 62.0303630287493], [28.09495742538, 62.0409208478301], [28.055215390954, 62.0466289370079], [28.0680907800769, 62.0338823017762], [28.0989058780443, 62.0189897683574], [28.1186481413661, 62.0089040468779] ] + ] + }, + "properties" : { + "feature::id" : 118, + "id" : 60351, + "name" : "Kolkonjrvi", + "pfafstette" : 59891, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 30826, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 119, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [11.9741118842703, 63.1140845312214], [11.9494769730819, 63.1162304294085], [11.9360865683941, 63.124170252701], [11.9219236403589, 63.1137841054752], [11.9315372642373, 63.0958443966306], [11.954970472441, 63.0927972212049], [11.9853563907709, 63.0900933894891], [12.0093046145395, 63.0831406793627], [12.0133389031313, 63.0685056537264], [12.0014935451383, 63.0509092885918], [11.9917082494049, 63.0393214383812], [11.9807212506867, 63.0350296420069], [11.9676741897089, 63.0311241073063], [11.9829529848013, 63.0259310336935], [11.9984034517488, 63.0207379600806], [11.9907640542025, 63.0110385002747], [11.9553138161509, 63.0082917505951], [11.9063015015565, 63.0101372230361], [11.8796065281084, 63.0070900476103], [11.8528257187328, 63.0052445751694], [11.8321392602088, 63.0021973997436], [11.867160318623, 62.9964463926021], [11.918232695477, 62.9976910135506], [11.9498203167918, 62.9985493728255], [11.9706784471709, 62.990952893243], [11.9682750412013, 62.9815538591833], [11.9607214795825, 62.9703522706464], [11.9841546877861, 62.9699660089727], [12.0226950192273, 62.9736569538546], [12.0559135231643, 62.9712106299212], [12.0804625984252, 62.9739573796008], [12.0755699505585, 62.9873048663248], [12.057630241714, 62.9973905878044], [12.0425231184765, 63.0037853644021], [12.0345403772203, 63.0162315738876], [12.0290468778612, 63.0241284792162], [12.0222658395898, 63.0366176066654], [12.0287893700788, 63.0490638161509], [12.0425231184765, 63.0633554980773], [12.0520509064274, 63.0870462140633], [12.0458707196484, 63.1113377815418], [12.0290468778612, 63.1237839910273], [12.0209783006775, 63.1188913431606], [12.0087895989746, 63.1146853827138], [11.9741118842703, 63.1140845312214] ] + ] + }, + "properties" : { + "feature::id" : 119, + "id" : 60425, + "name" : "Essandsjen", + "lge_id" : "no", + "pfafstette" : 77, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 30943, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 120, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [23.3350119025819, 62.008045687603], [23.3531232832815, 61.9986037355795], [23.3643677897821, 62.0064577229445], [23.3719213514008, 62.0150413156931], [23.3811057956418, 62.0292900796557], [23.3847967405237, 62.0603197674418], [23.3823074986266, 62.0819075032045], [23.3726080388207, 62.0974008881157], [23.3568142281633, 62.1013064228163], [23.3507198773118, 62.0833667139718], [23.3561275407435, 62.0616073063541], [23.3442821827504, 62.0338823017762], [23.3350119025819, 62.008045687603] ] + ] + }, + "properties" : { + "feature::id" : 120, + "id" : 68760, + "name" : "Aurejrvi", + "pfafstette" : 4859, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 31748, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 121, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.8569115088812, 62.9800517304523], [14.8691860465116, 62.9705668604651], [14.8854948727339, 62.9585069126533], [14.9050654642007, 62.9566614402124], [14.9028337300861, 62.966918833547], [14.8950226606849, 62.9794508789599], [14.8730486632485, 63.0031845129097], [14.8533922358542, 63.027175654642], [14.8622333363853, 63.0377763916865], [14.8713319446988, 63.0442140862479], [14.8628341878777, 63.0527547610328], [14.8388859641092, 63.0572611472258], [14.8260964109138, 63.045029527559], [14.81871452115, 63.0313816150888], [14.8047232649698, 63.0234847097601], [14.8169119666728, 63.0013390404688], [14.8400018311665, 62.9861460813038], [14.8569115088812, 62.9800517304523] ] + ] + }, + "properties" : { + "feature::id" : 121, + "id" : 60533, + "name" : "Locknesjn", + "pfafstette" : 72595, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 31921, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 122, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.5317879051456, 62.2259401895257], [27.5002861197583, 62.2362834187877], [27.4971101904413, 62.2207900338766], [27.4862090276506, 62.2192449871818], [27.4713594121956, 62.2141377494964], [27.4578831715803, 62.2131506363303], [27.4356516663615, 62.2177857764146], [27.4187419886468, 62.2089875938473], [27.411360098883, 62.1910478850027], [27.4211453946164, 62.1751682384179], [27.4280981047427, 62.1633228804248], [27.4335916041018, 62.1506620811207], [27.4390851034609, 62.1411772111335], [27.4457803058048, 62.1302760483428], [27.4563381248856, 62.1387308872001], [27.4523896722212, 62.1578293810657], [27.4486987273393, 62.1651683528658], [27.4433768998352, 62.170962277971], [27.4333340963194, 62.1792025270097], [27.4350508148691, 62.1858548113898], [27.4518746566563, 62.1943525682109], [27.4706727247757, 62.2028932429958], [27.480973036074, 62.2067987776964], [27.5105005951291, 62.2013052783373], [27.5566803241165, 62.1888590688518], [27.577624290423, 62.190661623329], [27.5676673228346, 62.1989018723677], [27.5317879051456, 62.2259401895257] ] + ] + }, + "properties" : { + "feature::id" : 122, + "id" : 58044, + "name" : "Lngelmenjrvi", + "pfafstette" : 62713, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 32214, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 123, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [13.4753822559971, 63.1912939479949], [13.4965837300861, 63.1882467725691], [13.5115191814686, 63.1870021516206], [13.5292872184582, 63.1870021516206], [13.5560680278337, 63.1839120582311], [13.5934924922176, 63.1843412378685], [13.6182132393335, 63.1915943737411], [13.6186424189709, 63.2046414347189], [13.6078270921077, 63.2119374885552], [13.5813037905146, 63.2076886101447], [13.5588147775133, 63.2018946850394], [13.5141800952207, 63.1998346227797], [13.451691540011, 63.2080319538546], [13.4213914576085, 63.2216798663248], [13.4035375846915, 63.2284179866325], [13.3840528291522, 63.2329243728255], [13.3603621131661, 63.2426667505951], [13.3418215528292, 63.2429242583776], [13.3409631935543, 63.2335252243179], [13.3211350943051, 63.2271733656839], [13.2749553653177, 63.2213794405786], [13.2242263321736, 63.2174309879143], [13.1902353048892, 63.2143408945248], [13.1880035707746, 63.2055856299212], [13.2041407251419, 63.199448361106], [13.2339257919795, 63.1989333455411], [13.2544405786486, 63.2047272706464], [13.2701485533785, 63.2137400430324], [13.3123798297015, 63.2192335423915], [13.3586453946164, 63.2164867927119], [13.3764992675334, 63.2088473951657], [13.3861987273393, 63.208632805347], [13.4060268265885, 63.2076456921809], [13.4299750503571, 63.2016800952206], [13.4509190166636, 63.1952424006592], [13.4753822559971, 63.1912939479949] ] + ] + }, + "properties" : { + "feature::id" : 123, + "id" : 57818, + "name" : "Hottjen", + "pfafstette" : 7833, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 32318, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 124, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.8587884544955, 63.1755001373375], [15.8342393792346, 63.1764014145761], [15.8098619758286, 63.1748563678813], [15.8171580296649, 63.1654144158579], [15.8538958066288, 63.1606076039187], [15.8918352865776, 63.1581612799853], [15.9262554934994, 63.1515089956052], [15.9787870811207, 63.1372173136788], [16.0229925837759, 63.1347709897455], [16.0207608496612, 63.1478180507233], [15.9724352224867, 63.169062442776], [15.9302039461637, 63.1855000228896], [15.922650384545, 63.1776031175609], [15.892264466215, 63.1748563678813], [15.8587884544955, 63.1755001373375] ] + ] + }, + "properties" : { + "feature::id" : 124, + "id" : 57400, + "pfafstette" : 3111, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 32487, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_32487", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 125, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.6946186595862, 62.1967988921443], [27.680455731551, 62.2065412699139], [27.6700695843252, 62.2143523393151], [27.6463788683391, 62.2296311344076], [27.6081818806079, 62.2405322971983], [27.6059501464933, 62.2283865134591], [27.6305850576817, 62.2110476561069], [27.6539324299579, 62.2049533052554], [27.6770222944516, 62.195339681377], [27.6874084416773, 62.1825072102179], [27.6749622321919, 62.1803613120307], [27.6611426478667, 62.1792025270097], [27.6694687328328, 62.1706618522248], [27.6865500824025, 62.1542242721113], [27.7238887108588, 62.1372287584691], [27.7573647225783, 62.1362845632668], [27.7553904962461, 62.1551684673137], [27.7250904138436, 62.1797604605384], [27.6946186595862, 62.1967988921443] ] + ] + }, + "properties" : { + "feature::id" : 125, + "id" : 57899, + "name" : "Sysmjrvi", + "pfafstette" : 6255, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 32521, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 126, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [13.1330685771837, 62.8628427714704], [13.1235407892328, 62.8567484206189], [13.1110945797473, 62.8483364997253], [13.0959874565098, 62.8428430003662], [13.115987227614, 62.8379503524995], [13.1348711316609, 62.8306542986632], [13.1175322743087, 62.8230578190807], [13.0995925654642, 62.8185514328877], [13.0727259201612, 62.8167059604468], [13.0461167826406, 62.8230578190807], [13.0257736678264, 62.8243024400293], [13.0136708020509, 62.8118562305438], [13.0226835744369, 62.8045172587438], [13.0482626808277, 62.8045172587438], [13.0747001464933, 62.80481768449], [13.098133354697, 62.8057189617286], [13.1306651712141, 62.8002254623695], [13.1749565097968, 62.7954186504303], [13.1989905694928, 62.8012125755356], [13.1847418055301, 62.8130579335286], [13.1743556583044, 62.8249032915217], [13.1782182750412, 62.83520360282], [13.1952996246109, 62.8388945477019], [13.2053424281267, 62.8419417231276], [13.1860293444424, 62.844388047061], [13.1579609961546, 62.8477356482329], [13.1452572788867, 62.8567484206189], [13.1330685771837, 62.8628427714704] ] + ] + }, + "properties" : { + "feature::id" : 126, + "id" : 65193, + "name" : "Storsjn", + "pfafstette" : 955, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 33755, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 127, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.3515725141916, 62.7138316013551], [16.3326886101447, 62.7220718503937], [16.3220449551364, 62.7235310611609], [16.3326886101447, 62.7089389534884], [16.3689113715437, 62.6988532320088], [16.3926020875298, 62.6998403451749], [16.4213571232375, 62.6934455685772], [16.4731161875115, 62.6849478117561], [16.502901254349, 62.6828019135689], [16.551312717451, 62.6806560153818], [16.6016125709577, 62.6696690166636], [16.6176638893976, 62.65357478026], [16.6551741897089, 62.6472229216261], [16.7080491210401, 62.635377563633], [16.735945797473, 62.6207854559604], [16.7469327961912, 62.6174378547885], [16.7538855063175, 62.6217296511628], [16.7420401483245, 62.6290257049991], [16.723928767625, 62.639883949826], [16.7082207928951, 62.6493688198132], [16.6711396722212, 62.6536176982238], [16.6305392785204, 62.6630167322835], [16.6095953122139, 62.6825014878227], [16.5794669016664, 62.7022866691082], [16.5536302874931, 62.7000978529573], [16.5444458432522, 62.6894541979491], [16.5156049716169, 62.6919005218824], [16.4909700604285, 62.6952481230544], [16.4779229994507, 62.6982523805164], [16.4566356894342, 62.7086385277422], [16.4374942776048, 62.7189817570042], [16.4247047244095, 62.71434661692], [16.3945763138619, 62.7067930553012], [16.3652204266618, 62.709840230727], [16.3515725141916, 62.7138316013551] ] + ] + }, + "properties" : { + "feature::id" : 127, + "id" : 65196, + "name" : "Holmsjn", + "pfafstette" : 4193, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 33798, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 128, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.4551135323201, 61.5053046603186], [29.4627529298663, 61.5141457608497], [29.4363154642007, 61.5390810977843], [29.4335687145212, 61.5566345449551], [29.4609503753891, 61.5642739425014], [29.4754566471342, 61.5609263413294], [29.4919371452115, 61.5572783144113], [29.4976023164256, 61.57251419154], [29.4870444973448, 61.5882650842337], [29.4803492950009, 61.5980074620033], [29.4779458890313, 61.6065910547519], [29.4633537813587, 61.6083506912653], [29.4450707288043, 61.6074494140267], [29.431422816334, 61.60290010987], [29.4107363578099, 61.599552508698], [29.3901357352133, 61.5977070362571], [29.3877323292437, 61.5804110968687], [29.3842988921443, 61.5658189891961], [29.3857581029116, 61.5557761856803], [29.3913374381981, 61.5396819492767], [29.3822388298846, 61.5341884499176], [29.3742560886285, 61.5278365912836], [29.3675608862846, 61.5110985854239], [29.358805621681, 61.4940172358542], [29.3660158395898, 61.480369323384], [29.38000709577, 61.4697256683758], [29.3901357352133, 61.4658201336752], [29.3913374381981, 61.4758200192272], [29.398204312397, 61.4837169245559], [29.4187190990661, 61.4770646401758], [29.4381180186779, 61.4846182017945], [29.4475599707013, 61.5025579106391], [29.4551135323201, 61.5053046603186] ], + [ [29.3997493590917, 61.5542740569493], [29.3903932429958, 61.5578791659037], [29.401036898004, 61.5578791659037], [29.3997493590917, 61.5542740569493] ] + ] + }, + "properties" : { + "feature::id" : 128, + "id" : 65108, + "name" : "Simpelejrvi", + "pfafstette" : 426915, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 34175, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 129, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [23.7756077183666, 62.3301879234572], [23.7917448727339, 62.3460246520784], [23.797238372093, 62.3536640496246], [23.8000709577001, 62.3575695843252], [23.7951783098334, 62.362118888482], [23.7805003662333, 62.3493722532503], [23.7607581029116, 62.3320333958982], [23.7411875114448, 62.3216472486724], [23.721960263688, 62.3240935726057], [23.6986987273393, 62.3359389305988], [23.6807590184948, 62.3508314640176], [23.6740638161509, 62.3755092931697], [23.6642785204175, 62.384650819447], [23.6514031312946, 62.3728054614539], [23.6589566929134, 62.3544794909357], [23.6691711682842, 62.3383852545321], [23.6971536806446, 62.3111752655191], [23.7419600347922, 62.2737078831716], [23.7598139077092, 62.278815120857], [23.7556079472624, 62.3016474775682], [23.7598139077092, 62.3086001876945], [23.7656507507782, 62.3168404367332], [23.7756077183666, 62.3301879234572] ] + ] + }, + "properties" : { + "feature::id" : 129, + "id" : 62481, + "name" : "Toisvesi", + "pfafstette" : 9391, + "lke_type" : "N", + "altitude" : 98, + "objectid" : 34331, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 130, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [9.4562866233291, 62.6700552783373], [9.483668284197, 62.6606562442776], [9.4894192913386, 62.6648622047244], [9.4833249404871, 62.6779092657022], [9.4683894891046, 62.6849478117561], [9.4362010162974, 62.6973940212415], [9.4021241530855, 62.7067930553012], [9.365987227614, 62.7086385277422], [9.3404939571507, 62.7116857031679], [9.3142281633401, 62.7165783510346], [9.2492503662333, 62.7210847372276], [9.2133709485442, 62.7159345815785], [9.2456452572789, 62.7110848516755], [9.2974043215528, 62.7086385277422], [9.3198074986266, 62.7061922038088], [9.3343996062992, 62.7031450283831], [9.3741416407251, 62.6988532320088], [9.4033258560703, 62.6922867835561], [9.4209222212049, 62.6812997848379], [9.4562866233291, 62.6700552783373] ] + ] + }, + "properties" : { + "feature::id" : 130, + "id" : 68612, + "name" : "Gjevilvatnet", + "lge_id" : "no", + "pfafstette" : 613, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 35197, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 131, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.1609366416407, 62.4888985533785], [8.1702927577367, 62.5092845861564], [8.177245467863, 62.5409151254349], [8.1821381157297, 62.5560222486724], [8.1781038271379, 62.5761078557041], [8.174241210401, 62.5925454358176], [8.1708936092291, 62.6123306171031], [8.1621383446255, 62.6311286852225], [8.1326107855704, 62.635377563633], [8.1103792803516, 62.6323303882073], [8.1235121772569, 62.6283819355429], [8.1450569950559, 62.6225450924739], [8.1486621040103, 62.6123306171031], [8.1474604010255, 62.6000989974364], [8.1465162058231, 62.5800992263322], [8.1508938381249, 62.5609148965391], [8.153554751877, 62.5462798709028], [8.1495204632851, 62.5307864859916], [8.1456578465483, 62.5156364447903], [8.1456578465483, 62.5003576496979], [8.1609366416407, 62.4888985533785] ] + ] + }, + "properties" : { + "feature::id" : 131, + "id" : 70000, + "name" : "Eikesdalsvatnet", + "lge_id" : "no", + "pfafstette" : 1535, + "lke_type" : "B", + "altitude" : 757, + "objectid" : 35919, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 132, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [13.076931880608, 62.5286835057682], [13.1067169474455, 62.5356362158945], [13.121824070683, 62.5429751876946], [13.1333260849661, 62.5517733702618], [13.1244849844351, 62.5606144707929], [13.1062019318806, 62.5545630379051], [13.0957299487274, 62.5451210858817], [13.0780477476653, 62.5426747619484], [13.0590780076909, 62.5472669840688], [13.0469751419154, 62.5520737960081], [13.0370181743271, 62.5600136193005], [13.0329838857352, 62.5670092473906], [13.0263745193188, 62.5764082814503], [13.0205376762498, 62.5867515107123], [13.013327458341, 62.6000989974364], [12.9959886009888, 62.6131460584142], [12.9831990477935, 62.6043907938106], [12.9975336476836, 62.5825455502655], [13.0108382164439, 62.5597131935543], [13.0141858176158, 62.5441768906794], [13.0336705731551, 62.5344345129097], [13.076931880608, 62.5286835057682] ] + ] + }, + "properties" : { + "feature::id" : 132, + "id" : 70080, + "pfafstette" : 9613, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 36071, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_36071", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 133, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.3853060336935, 62.6232317798938], [16.4165503112983, 62.5970518220106], [16.4313999267534, 62.58580731551], [16.4414427302692, 62.5915583226515], [16.4365500824025, 62.6043907938106], [16.4301982237686, 62.6249914164072], [16.4250480681194, 62.6478237731185], [16.4209279436001, 62.6602699826039], [16.4531164164073, 62.6651626304706], [16.4707127815419, 62.6733599615455], [16.4460778703534, 62.6812997848379], [16.4296832082036, 62.677608839956], [16.4041041018129, 62.6624158807911], [16.3556926387109, 62.6518151437466], [16.3342336568394, 62.6469224958799], [16.3506283189892, 62.6402702114997], [16.3853060336935, 62.6232317798938] ] + ] + }, + "properties" : { + "feature::id" : 133, + "id" : 66517, + "name" : "Leringen", + "pfafstette" : 4153, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 36408, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 134, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [23.2309787584691, 61.7305381340414], [23.243682475737, 61.749636627907], [23.2460858817066, 61.7667179774766], [23.2284895165721, 61.7770612067387], [23.2081464017579, 61.7767607809925], [23.1884041384362, 61.780022546237], [23.1765587804431, 61.7924687557224], [23.1699494140267, 61.8016531999634], [23.1601641182934, 61.8016531999634], [23.1494346273576, 61.7953013413294], [23.1294348562534, 61.7934558688885], [23.1163019593481, 61.8028549029482], [23.0969030397363, 61.8140994094488], [23.080594213514, 61.8168461591284], [23.0589635597876, 61.82225382256], [23.0322685863395, 61.8341850164805], [23.0363887108588, 61.8518242995788], [23.0395646401758, 61.8657726377953], [23.0337277971068, 61.8609658258561], [23.026174235488, 61.8502792528841], [23.016989791247, 61.8399789415858], [22.9999942776048, 61.8359875709577], [22.9832562717451, 61.8311807590185], [23.0020543398645, 61.8229405099799], [23.0302943600073, 61.8138419016664], [23.0508949826039, 61.7986489425014], [23.0455731550998, 61.7907091192089], [23.0306377037173, 61.7824688701703], [23.0153589086248, 61.7627695248123], [23.0157880882622, 61.7515250183117], [23.0386204449734, 61.7530700650064], [23.0577618568028, 61.7715677073796], [23.0854868613807, 61.7867606665446], [23.1028257187328, 61.7779624839773], [23.113984389306, 61.7639283098334], [23.1364734023073, 61.7600227751328], [23.1564731734115, 61.7545292757737], [23.1735545229811, 61.7442289644754], [23.1780179912104, 61.7323836064823], [23.1865157480315, 61.7208386742355], [23.1993911371544, 61.7122979994506], [23.1829964750046, 61.7101521012635], [23.1653142739425, 61.7049590276506], [23.1728678355613, 61.6955599935909], [23.1826531312946, 61.6910536073979], [23.2133823933346, 61.6840150613441], [23.2456567020692, 61.6898089864494], [23.243682475737, 61.7077486952939], [23.2312362662516, 61.7192936275408], [23.2309787584691, 61.7305381340414] ] + ] + }, + "properties" : { + "feature::id" : 134, + "id" : 73834, + "name" : "Kyrsjrvi", + "pfafstette" : 4173, + "lke_type" : "N", + "altitude" : 83, + "objectid" : 37074, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 135, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.8239734023073, 62.4307876304706], [12.8454323841787, 62.425036623329], [12.8675780534701, 62.4167105383629], [12.8884361838491, 62.4089423869255], [12.9072342519685, 62.404350164805], [12.9257748123055, 62.4092428126717], [12.9094659860831, 62.4187276826588], [12.8759899743637, 62.4299292711957], [12.8537584691449, 62.4411737776964], [12.846719923091, 62.4487273393151], [12.8618270463285, 62.45692467039], [12.8916121131661, 62.4679116691082], [12.9184787584692, 62.4746068714521], [12.9269765152903, 62.4803578785937], [12.9045733382165, 62.4885122917048], [12.8807109503754, 62.4840059055118], [12.8627712415309, 62.4779115546603], [12.8403680644571, 62.4752077229445], [12.8236300585973, 62.4615598104743], [12.7988234755539, 62.4559804751877], [12.774446072148, 62.4706584187878], [12.765261627907, 62.4788986678264], [12.7446610053104, 62.4846067570042], [12.7157342977477, 62.4943920527376], [12.7111849935909, 62.5098854376488], [12.7038889397546, 62.5159368705365], [12.692644433254, 62.5074391137154], [12.7062923457242, 62.4879972761399], [12.7414850759934, 62.4706584187878], [12.7552188243911, 62.4618173182567], [12.7331589910273, 62.4511736632485], [12.7193394067021, 62.4390278795092], [12.7311847646951, 62.4332339544039], [12.7446610053104, 62.4301867789782], [12.7534162699139, 62.4323755951291], [12.7838021882439, 62.4375257507782], [12.8239734023073, 62.4307876304706] ] + ] + }, + "properties" : { + "feature::id" : 135, + "id" : 71948, + "name" : "Lossnen", + "pfafstette" : 97733, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 37519, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 136, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.7253937007874, 62.2913471662699], [8.7104582494049, 62.3019479033144], [8.7139775224318, 62.3125486403589], [8.7194710217909, 62.3228918696209], [8.7090848745651, 62.3395869575169], [8.6911451657206, 62.3505739562351], [8.6684844808643, 62.3633635094305], [8.6438495696759, 62.3782560428493], [8.6289141182934, 62.3885563541476], [8.6140645028383, 62.4001442043582], [8.5954381065739, 62.4052943600073], [8.5690864768357, 62.4101440899103], [8.5449665812122, 62.4104874336202], [8.5730349295001, 62.3934490020143], [8.6181846273576, 62.3700157938106], [8.6411028199963, 62.3544794909357], [8.6658235671123, 62.342419543124], [8.6833340963194, 62.3132353277788], [8.7075398278704, 62.2824631477751], [8.7319172312763, 62.26795687603], [8.7705433986449, 62.2560686000732], [8.8070236678264, 62.2545235533785], [8.794405786486, 62.2621629509247], [8.773204312397, 62.2688152353049], [8.7556079472624, 62.2757679454312], [8.7411016755173, 62.2837077687237], [8.7253937007874, 62.2913471662699] ] + ] + }, + "properties" : { + "feature::id" : 136, + "id" : 74206, + "name" : "Aursjen", + "lge_id" : "no", + "pfafstette" : 51, + "lke_type" : "B", + "altitude" : 1018, + "objectid" : 38287, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 137, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.1432944973448, 62.0195906198498], [27.1238097418055, 62.0125949917597], [27.1093034700604, 62.009547816334], [27.102522431789, 62.0189897683574], [27.0839818714521, 62.0296763413294], [27.0564285387292, 62.0417362891412], [27.0400338765794, 62.0493756866874], [27.0287035341513, 62.0463285112617], [27.018059879143, 62.0469293627541], [27.0041544588903, 62.0682595907343], [26.9943691631569, 62.0719076176524], [27.0072445522798, 62.0454272340231], [27.0190899102728, 62.0225948773118], [27.0260426203992, 62.0137966947445], [27.0493041567478, 62.007702343893], [27.0600336476836, 61.9949986266252], [27.0517933986449, 61.9807069446988], [27.0251842611243, 61.9766726561069], [26.9980601080388, 61.9721662699139], [26.9941116553745, 61.9515656473173], [27.0046694744552, 61.9426816288225], [27.0172015198682, 61.9433253982787], [27.0324803149606, 61.9405786485991], [27.0425231184765, 61.9374885552097], [27.0327378227431, 61.9360293444424], [27.0238967222121, 61.9293341420985], [27.042093938839, 61.9195488463651], [27.0627803973631, 61.9244414942318], [27.0588319446988, 61.9332396767991], [27.0541968046145, 61.9393340276506], [27.0678447170848, 61.9374885552097], [27.0822651529024, 61.9405786485991], [27.0882736678264, 61.9456858862846], [27.0996040102545, 61.9445271012635], [27.1162561801868, 61.9429820545688], [27.1440670206922, 61.9368447857535], [27.1785730635415, 61.9225960217909], [27.1975428035158, 61.9213943188061], [27.1806331258011, 61.9390336019044], [27.1594316517121, 61.9572737364951], [27.1606333546969, 61.9786039644754], [27.1680152444607, 61.9998054385643], [27.184324070683, 62.0098482420802], [27.1979719831533, 62.0274875251785], [27.1901609137521, 62.0429809100897], [27.1758263138619, 62.0366290514558], [27.1657835103461, 62.0326805987914], [27.163122596594, 62.0417362891412], [27.1582299487273, 62.0558133812488], [27.1382301776231, 62.0636673686138], [27.1198612891412, 62.0700621452115], [27.1130802508698, 62.0876585103461], [27.0972006042849, 62.1001047198315], [27.0801192547153, 62.0961991851309], [27.0898187145212, 62.0782594762864], [27.1172003753891, 62.0588605566746], [27.1432944973448, 62.0417362891412], [27.1555690349753, 62.0250412012452], [27.1432944973448, 62.0195906198498] ], + [ [27.11170687603, 62.004698086431], [27.1162561801868, 61.9955994781175], [27.1084451107856, 61.9867583775865], [27.1038099707013, 61.9958569859], [27.11170687603, 62.004698086431] ] + ] + }, + "properties" : { + "feature::id" : 137, + "id" : 61213, + "name" : "Kyyvesi", + "pfafstette" : 0, + "lke_type" : "N", + "altitude" : 101, + "objectid" : 38563, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 138, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.4025819446988, 60.7921368568028], [29.4213800128182, 60.7826519868156], [29.4370021516206, 60.7853987364952], [29.4218950283831, 60.8143254440579], [29.3991485075994, 60.8219219236404], [29.3757152993957, 60.8306771882439], [29.3638699414027, 60.8431663156931], [29.3569172312763, 60.8553550173961], [29.3441276780809, 60.8687025041201], [29.3220678447171, 60.8823933345541], [29.2976046053836, 60.8881872596594], [29.2688495696759, 60.8878439159495], [29.2335710034792, 60.8945391182934], [29.2206956143564, 60.9067278199963], [29.2061035066838, 60.905783624794], [29.1919405786486, 60.9162556079473], [29.1843011811024, 60.9259550677532], [29.1747733931514, 60.9217491073064], [29.1788076817433, 60.9150539049625], [29.1582070591467, 60.9180152444607], [29.1425849203443, 60.9278005401941], [29.132112937191, 60.9411480269181], [29.1133148690716, 60.9532079747299], [29.1196667277056, 60.9399463239333], [29.1188942043582, 60.9259550677532], [29.1296236952939, 60.9088308002197], [29.1486792711958, 60.8933374153086], [29.1703099249222, 60.876899835195], [29.1952881798206, 60.8712775819447], [29.2119403497528, 60.8662990981505], [29.2158029664897, 60.8507627952756], [29.2270474729903, 60.8519215802966], [29.2498798297015, 60.8549687557224], [29.2684203900385, 60.8538099707013], [29.2836991851309, 60.8535095449551], [29.2933128090094, 60.8394753708112], [29.2778623420619, 60.8343681331258], [29.2635277421718, 60.8286171259843], [29.2666178355613, 60.8145829518403], [29.2817249587988, 60.807630241714], [29.2929694652994, 60.8088319446988], [29.3076474088995, 60.8124370536532], [29.3188919154001, 60.8200764511994], [29.3279905237136, 60.8274154229995], [29.3423251236037, 60.8240249038638], [29.3408659128365, 60.8139821003479], [29.3574322468412, 60.8067289644754], [29.3788912287127, 60.7988749771104], [29.4025819446988, 60.7921368568028] ] + ] + }, + "properties" : { + "feature::id" : 138, + "id" : 78258, + "pfafstette" : 533131, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 39146, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_39146", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 139, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [21.8580330983336, 61.7271905328694], [21.8666166910822, 61.7320831807361], [21.8959725782824, 61.73109606757], [21.9236975828603, 61.7262463376671], [21.9413797839224, 61.7232849981688], [21.9479891503388, 61.7275338765794], [21.9182040835012, 61.7344865867057], [21.892367469328, 61.7423834920344], [21.877002838308, 61.7472761399011], [21.8620673869255, 61.7532846548251], [21.8427543032412, 61.758477728438], [21.8070465574071, 61.7724689846182], [21.780008240249, 61.7818680186779], [21.7656736403589, 61.779507530672], [21.7474764237319, 61.787361518037], [21.7360602453763, 61.7859023072697], [21.7489356344992, 61.7630699505585], [21.7872184581578, 61.7351303561619], [21.8194927668925, 61.7214395257279], [21.8376899835195, 61.7138001281817], [21.8488486540926, 61.7183923503021], [21.8580330983336, 61.7271905328694] ] + ] + }, + "properties" : { + "feature::id" : 139, + "id" : 77486, + "name" : "Isojrvi Sotamiehenluoto", + "pfafstette" : 53, + "lke_type" : "N", + "altitude" : 35, + "objectid" : 39427, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 140, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.8332951840322, 62.0460280855155], [15.8272008331807, 62.0390753753891], [15.8414495971434, 62.0326805987914], [15.855698361106, 62.0320368293353], [15.8797324208021, 62.0286892281633], [15.9028222852957, 62.0308780443142], [15.8865134590734, 62.0405345861564], [15.8508057132393, 62.0636673686138], [15.8120078740158, 62.0892464750046], [15.7840253616554, 62.1043965162058], [15.7424807727523, 62.1226366507965], [15.7023095586889, 62.1286880836843], [15.7205067753159, 62.1190315418421], [15.7648839498261, 62.1004909815052], [15.7883171580297, 62.0870576588537], [15.795269868156, 62.0782594762864], [15.8165571781725, 62.0645686458524], [15.837501144479, 62.0529807956418], [15.8332951840322, 62.0460280855155] ] + ] + }, + "properties" : { + "feature::id" : 140, + "id" : 76741, + "name" : "Hennan", + "pfafstette" : 4713, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 39672, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 141, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [24.1516549166819, 61.5582225096136], [24.126762497711, 61.5411411600439], [24.1115695385461, 61.5369351995971], [24.0962907434536, 61.533287172679], [24.0820419794909, 61.5317421259842], [24.0681365592382, 61.5241885643655], [24.0805827687237, 61.5047038088262], [24.0907972440945, 61.4913563221022], [24.0810977842886, 61.4886095724226], [24.0750034334371, 61.4834164988097], [24.0953465482512, 61.4715711408167], [24.1218698498444, 61.4749187419887], [24.1308826222304, 61.490712552646], [24.126934169566, 61.5016566334005], [24.124273255814, 61.5126007141549], [24.1385220197766, 61.5244031541842], [24.142127128731, 61.5344888756638], [24.1384361838491, 61.5454329564182], [24.1561183849112, 61.5551753341879], [24.1944870444973, 61.5615271928218], [24.2230704083501, 61.5670206921809], [24.2544005218824, 61.5703682933529], [24.2817821827504, 61.5776643471892], [24.2712243636697, 61.5867200375389], [24.2610098882988, 61.5934581578465], [24.2500228895807, 61.5989516572056], [24.2260746658121, 61.5865054477202], [24.1944870444973, 61.5719133400476], [24.1516549166819, 61.5582225096136] ] + ] + }, + "properties" : { + "feature::id" : 141, + "id" : 76859, + "name" : "Vesijrvi", + "pfafstette" : 642411, + "lke_type" : "N", + "altitude" : 87, + "objectid" : 39860, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 142, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.0947743087347, 62.1064994964292], [14.0904825123604, 62.0968000366233], [14.0949459805896, 62.0888602133309], [14.1053321278154, 62.0801049487273], [14.0962335195019, 62.075813152353], [14.0867915674785, 62.0697188015015], [14.0771779436001, 62.0603197674418], [14.0637017029848, 62.0509207333821], [14.0649892418971, 62.0390753753891], [14.0798388573521, 62.038088262223], [14.089881660868, 62.0478735579564], [14.1011261673686, 62.0597189159494], [14.1260185863395, 62.062465665629], [14.1737433620216, 62.0426804843435], [14.2055884911189, 62.0171013779527], [14.1845586888848, 62.0080027696392], [14.1643014099982, 62.0052560199597], [14.180696072148, 62.0007496337667], [14.2059318348288, 62.0037968091924], [14.2275624885552, 62.0086036211316], [14.2527124153086, 62.0119512223036], [14.270995467863, 62.0137966947445], [14.2782915216993, 62.018388916865], [14.2667036714888, 62.0241828419703], [14.2530557590185, 62.0284317203809], [14.2576050631753, 62.0341827275224], [14.2597509613624, 62.0441826130745], [14.2600084691449, 62.0590751464933], [14.2396653543307, 62.0746972852957], [14.2016400384545, 62.0937528611976], [14.1879921259843, 62.1067999221754], [14.1830994781176, 62.1113921442959], [14.1677348470976, 62.115383514924], [14.156146996887, 62.1155981047427], [14.1606963010438, 62.108044543124], [14.1682498626625, 62.0998472120491], [14.165503112983, 62.0861992995788], [14.1689365500824, 62.0761135780992], [14.1904813678814, 62.0727659769273], [14.2163179820546, 62.0670149697857], [14.2308242537997, 62.0554271195752], [14.2296225508149, 62.0451268082769], [14.2147729353598, 62.0411354376488], [14.1914255630837, 62.051779092657], [14.1703957608497, 62.0654270051272], [14.1601812854789, 62.0742681056583], [14.1461041933712, 62.0849546786303], [14.1312545779161, 62.09435371269], [14.1053321278154, 62.1140959760117], [14.0782938106574, 62.1265851034609], [14.0837873100165, 62.1180444286761], [14.0947743087347, 62.1064994964292] ] + ] + }, + "properties" : { + "feature::id" : 142, + "id" : 78695, + "pfafstette" : 775, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 40469, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_40469", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 143, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [13.2758995605201, 62.1201903268632], [13.2591615546603, 62.126241759751], [13.2560714612708, 62.133237387841], [13.2363291979491, 62.1347824345358], [13.2230246291888, 62.126241759751], [13.2607924372826, 62.1141388939755], [13.3169291338583, 62.1049973676982], [13.3439674510163, 62.0992034425929], [13.3819927668925, 62.0879589360923], [13.4129795367149, 62.0721651254349], [13.4352110419337, 62.0560279710675], [13.4701462644204, 62.0448263825307], [13.4849958798755, 62.0515215848746], [13.4758114356345, 62.0652124153085], [13.4540949459806, 62.0727659769273], [13.4291166910822, 62.0809203900384], [13.3995891320271, 62.0927657480315], [13.3652547610328, 62.1004051455777], [13.3413065372643, 62.1064994964292], [13.315469923091, 62.1143964017579], [13.2758995605201, 62.1201903268632] ] + ] + }, + "properties" : { + "feature::id" : 143, + "id" : 78878, + "name" : "Lofssjn", + "pfafstette" : 9251, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 40484, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 144, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.4714452481231, 62.3067547152536], [12.4628616553745, 62.3186859091741], [12.4546214063358, 62.3232352133309], [12.4399434627358, 62.331732970152], [12.4026048342794, 62.3463250778246], [12.3777124153086, 62.3484709760117], [12.3581418238418, 62.3454667185497], [12.3199448361106, 62.3472263550632], [12.2814045046695, 62.3493722532503], [12.2548812030764, 62.3533207059147], [12.2467267899652, 62.3444796053836], [12.2759110053104, 62.3353809970701], [12.3032068302509, 62.3299733336385], [12.3164255630837, 62.3262823887566], [12.3644078465483, 62.3232352133309], [12.4035490294818, 62.3201880379051], [12.4196861838491, 62.3168404367332], [12.4294714795825, 62.3067547152536], [12.4392567753159, 62.29834279436], [12.4558231093207, 62.2913471662699], [12.4826897546237, 62.2779567615821], [12.5032903772203, 62.2739224729903], [12.487153222853, 62.2894158579015], [12.4714452481231, 62.3067547152536] ] + ] + }, + "properties" : { + "feature::id" : 144, + "id" : 74983, + "name" : "Rogen", + "pfafstette" : 99715, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 40725, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 145, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [26.5123145943966, 61.3877094396631], [26.5075936183849, 61.4022157114082], [26.4991816974913, 61.4169794909357], [26.4831303790515, 61.4165503112983], [26.4688816150888, 61.4183957837392], [26.4442467039004, 61.421442959165], [26.4287104010255, 61.4159494598059], [26.437293993774, 61.4080954724409], [26.4613280534701, 61.4004560748947], [26.4692249587988, 61.3916149743637], [26.4338605566746, 61.3831172175426], [26.3956635689434, 61.3819155145578], [26.3850199139352, 61.3797696163706], [26.4125732466581, 61.378868339132], [26.4521436092291, 61.3812717451016], [26.4767785204175, 61.3840184947812], [26.4919714795825, 61.383718069035], [26.4897397454679, 61.3709714338033], [26.4772935359824, 61.3636324620033], [26.4664782091192, 61.3573235213331], [26.474031770738, 61.3456927531588], [26.4962632759568, 61.3350920161143], [26.5184089452481, 61.3284397317341], [26.528451748764, 61.3362937190991], [26.5348036073979, 61.3536325764512], [26.5360053103827, 61.3703705823109], [26.5256191631569, 61.3709714338033], [26.5168638985534, 61.3688255356162], [26.5148038362937, 61.3773232924373], [26.5123145943966, 61.3877094396631] ] + ] + }, + "properties" : { + "feature::id" : 145, + "id" : 75570, + "name" : "Enonvesi", + "pfafstette" : 2239, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 41001, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 146, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [11.6603815693097, 61.8983044543124], [11.6638150064091, 61.9086476835744], [11.6586648507599, 61.9177462918879], [11.6336865958616, 61.9323813175243], [11.5969488188977, 61.9523810886284], [11.579867469328, 61.9703637154367], [11.5776357352133, 61.9880029985351], [11.5637303149606, 61.9952561344076], [11.5467348013185, 61.9937969236403], [11.5412413019594, 61.9801060932064], [11.5480223402307, 61.960964681377], [11.5671637520601, 61.9454283785021], [11.5865626716719, 61.9381323246658], [11.592056171031, 61.9326388253067], [11.6035581853141, 61.9199351080388], [11.6267338857352, 61.9098493865592], [11.6473345083318, 61.9019953991943], [11.6603815693097, 61.8983044543124] ] + ] + }, + "properties" : { + "feature::id" : 146, + "id" : 81742, + "name" : "Slensjen", + "lge_id" : "no", + "pfafstette" : 97811, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 41194, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 147, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [26.3907709210767, 60.9694738829885], [26.3923159677715, 60.9667271333089], [26.4101698406885, 60.9591306537264], [26.4263069950558, 60.9627786806446], [26.4384956967588, 60.9809758972716], [26.4299121040103, 60.9940658762131], [26.428452893243, 61.0059112342062], [26.4607272019777, 61.0113618156015], [26.4783235671123, 61.001104422267], [26.4905122688152, 60.9913191265336], [26.509911188427, 60.9958684306904], [26.5244174601721, 60.9983147546237], [26.5397820911921, 60.9965122001465], [26.5561767533419, 60.9934650247207], [26.5688804706098, 60.9962117744003], [26.5649320179454, 61.010117194653], [26.5427005127266, 61.031146996887], [26.5175505859733, 61.0469408075444], [26.5053618842703, 61.0439365500824], [26.4880230269181, 61.0453957608497], [26.4725725599707, 61.0447949093573], [26.4631306079473, 61.0353958752976], [26.4408991027284, 61.0293015244461], [26.4168650430324, 61.0329495513642], [26.4060497161692, 61.0335933208204], [26.407251419154, 61.0229496658121], [26.3974661234206, 61.0117051593115], [26.398066974913, 60.9999027192822], [26.4060497161692, 60.9822634361839], [26.3907709210767, 60.9694738829885] ] + ] + }, + "properties" : { + "feature::id" : 147, + "id" : 81926, + "name" : "Pelinginselka", + "pfafstette" : 19, + "lke_type" : "N", + "altitude" : 65, + "objectid" : 41268, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 148, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [24.6051261215895, 61.2253937007874], [24.6051261215895, 61.2478827137887], [24.5920790606116, 61.244492194653], [24.5698475553928, 61.2393849569676], [24.5519078465482, 61.2412304294085], [24.5300196850394, 61.2414450192272], [24.5132816791796, 61.2383978438015], [24.5227236312031, 61.2259516343161], [24.5327664347189, 61.2150933894891], [24.5445259567845, 61.2053080937557], [24.5780019685039, 61.2056514374657], [24.6051261215895, 61.2253937007874] ] + ] + }, + "properties" : { + "feature::id" : 148, + "id" : 81859, + "name" : "Iso Roinevesi", + "pfafstette" : 6459, + "lke_type" : "N", + "altitude" : 84, + "objectid" : 41419, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 149, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.5922564548618, 61.8156873741073], [16.6253891228713, 61.8022540514558], [16.6833283739242, 61.7937562946347], [16.7319115088812, 61.7907091192089], [16.772511902582, 61.7806663156931], [16.7986060245376, 61.774014031313], [16.8012669382897, 61.781009659403], [16.7861598150522, 61.7986060245376], [16.7773187145212, 61.811395577733], [16.7739711133492, 61.8181336980407], [16.7697651529024, 61.82959279436], [16.7532846548251, 61.83693176616], [16.723928767625, 61.8405797930782], [16.6994655282915, 61.8466741439297], [16.6520840963194, 61.8563306857718], [16.6156038271379, 61.8542706235122], [16.6435863394983, 61.8375326176524], [16.6748306171031, 61.8238417872185], [16.6806674601721, 61.8156873741073], [16.6372344808643, 61.8168890770921], [16.5922564548618, 61.8156873741073] ] + ] + }, + "properties" : { + "feature::id" : 149, + "id" : 81646, + "pfafstette" : 171, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 41468, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_41468", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 150, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [6.9004360465116, 61.9450850347921], [6.8522820911921, 61.9390336019044], [6.8630115821278, 61.9362868522249], [6.8845563999268, 61.9387331761582], [6.9069595770006, 61.9405786485991], [6.9438690258195, 61.9438404138436], [6.982666865043, 61.9460721479582], [7.0107352133309, 61.9408790743453], [7.0307349844351, 61.9287332906061], [7.0711637062809, 61.9116948590002], [7.1054980772752, 61.9104502380516], [7.1091031862296, 61.9222955960447], [7.0982878593664, 61.9268878181652], [7.0639534883721, 61.9396344533968], [7.01588536898, 61.9566728850027], [6.9726240615272, 61.9603209119209], [6.9477316425563, 61.9539261353232], [6.9004360465116, 61.9450850347921] ] + ] + }, + "properties" : { + "feature::id" : 150, + "id" : 81864, + "name" : "Strynevatnet", + "lge_id" : "no", + "pfafstette" : 131, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 41472, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 151, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [24.880144433254, 61.2126470655558], [24.8823761673686, 61.2050076680095], [24.8760243087347, 61.1980120399194], [24.8874404870903, 61.1883125801135], [24.9136204449734, 61.1831195065006], [24.9319034975279, 61.1876688106574], [24.9296717634133, 61.1996000045779], [24.9348219190624, 61.2102007416224], [24.9487273393151, 61.2214452481231], [24.943577183666, 61.2305438564366], [24.9284700604285, 61.2424321323933], [24.9081269456144, 61.2521315921992], [24.8821186595862, 61.259341810108], [24.8561962094854, 61.2776677806263], [24.8342222120491, 61.2858221937374], [24.8295870719648, 61.271873855521], [24.8440075077825, 61.2514878227431], [24.8642647866691, 61.2317455594213], [24.880144433254, 61.2126470655558] ] + ] + }, + "properties" : { + "feature::id" : 151, + "id" : 80941, + "name" : "Kuohijrvi", + "pfafstette" : 64793, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 41545, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 152, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [6.208598470976, 61.9144416086797], [6.2334908899469, 61.9116948590002], [6.2820740249039, 61.9199351080388], [6.3675666086797, 61.9368877037173], [6.4295401483245, 61.9487330617103], [6.4532308643106, 61.9484755539278], [6.4746040102545, 61.947273850943], [6.4661062534334, 61.9542265610694], [6.45666430141, 61.9621663843618], [6.4687671671855, 61.96547106757], [6.4940029298663, 61.9691190944882], [6.5109984435085, 61.9770589177806], [6.4982947262406, 61.9803636009888], [6.4646470426662, 61.9846124793994], [6.4426730452298, 61.9852562488555], [6.4189823292437, 61.9782606207654], [6.3879097234939, 61.9727671214063], [6.3691116553745, 61.9624238921443], [6.3293696209486, 61.9533252838308], [6.2797564548618, 61.9468875892694], [6.2516881065739, 61.9362868522249], [6.2290274217176, 61.9274886696576], [6.2031049716169, 61.9277890954038], [6.1733199047794, 61.9296345678447], [6.1396722212049, 61.9250423457242], [6.1225908716352, 61.9180896355979], [6.1506592199231, 61.9147420344259], [6.1788134041384, 61.9147420344259], [6.1912596136239, 61.915900819447], [6.208598470976, 61.9144416086797] ] + ] + }, + "properties" : { + "feature::id" : 152, + "id" : 81344, + "name" : "Hornindalsvatnet", + "lge_id" : "no", + "pfafstette" : 153, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 41820, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 153, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.5994666727706, 61.8688627311848], [16.6164621864128, 61.8679185359824], [16.6360327778795, 61.869163156931], [16.6367194652994, 61.875], [16.6372344808643, 61.879506386193], [16.6402387383263, 61.8861586705731], [16.6539724867241, 61.8828110694012], [16.6749164530306, 61.8773175700421], [16.6836717176341, 61.875], [16.6956029115547, 61.871824070683], [16.7204953305256, 61.8642705090643], [16.7433276872368, 61.85997871269], [16.7822113623879, 61.8512234480864], [16.8122539370079, 61.8545710492584], [16.8042711957517, 61.875], [16.8032411646219, 61.8776179957883], [16.7855589635598, 61.89736025911], [16.7645291613258, 61.9107935817616], [16.7404951016298, 61.9223814319721], [16.6913969511079, 61.9287332906061], [16.6508823933346, 61.9314800402856], [16.6256466306537, 61.9326817432704], [16.5876213147775, 61.9199351080388], [16.5605829976195, 61.9007507782457], [16.5468492492218, 61.8904075489837], [16.5388665079656, 61.8824677256912], [16.563329747299, 61.8773175700421], [16.5764626442044, 61.875], [16.5889088536898, 61.8728111838491], [16.5994666727706, 61.8688627311848] ] + ] + }, + "properties" : { + "feature::id" : 153, + "id" : 80508, + "name" : "Norra Dellen", + "pfafstette" : 33, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 41832, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 154, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [24.4975737044497, 61.1645360282], [24.5114791247024, 61.1582270875298], [24.520234389306, 61.147840940304], [24.5418650430324, 61.1363389260209], [24.5588605566746, 61.1384419062443], [24.5543112525179, 61.1494289049625], [24.5485602453763, 61.1682269730819], [24.5346548251236, 61.1876688106574], [24.5178309833364, 61.1986128914118], [24.5076165079656, 61.2053080937557], [24.4914793535982, 61.1992137429042], [24.471651254349, 61.1931623100165], [24.4604925837759, 61.1849220609778], [24.468990340597, 61.1764672221205], [24.4802348470976, 61.1721754257462], [24.4975737044497, 61.1645360282] ] + ] + }, + "properties" : { + "feature::id" : 154, + "id" : 82594, + "name" : "Hauhonselka", + "pfafstette" : 6457, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 42519, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 155, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [22.5034334370994, 61.6074494140267], [22.5, 61.6040159769273], [22.4887554934994, 61.5928573063541], [22.4316746017213, 61.5937585835928], [22.3935634499176, 61.5892521973997], [22.4264386101447, 61.5755613669658], [22.4626613715437, 61.5727716993225], [22.4836911737777, 61.5727716993225], [22.5, 61.5722566837576], [22.5109869987182, 61.5719133400476], [22.5260941219557, 61.5786085423915], [22.5297850668376, 61.5810119483611], [22.5453213697125, 61.578866050174], [22.5673812030764, 61.5888659357261], [22.5717588353781, 61.6071060703168], [22.5468664164073, 61.6137583546969], [22.5161371543673, 61.6156038271379], [22.5034334370994, 61.6074494140267] ] + ] + }, + "properties" : { + "feature::id" : 155, + "line::hidden" : [ + { "contour" : 0, "segments" : [ { "from" : 8, "to" : 9 } ] } + ], + "id" : 79245, + "name" : "Karhijrvi", + "pfafstette" : 637, + "lke_type" : "N", + "altitude" : 52, + "objectid" : 42682, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 156, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [24.4555999359092, 61.3971084737228], [24.4287332906061, 61.4032028245743], [24.4184329793078, 61.3977093252152], [24.4119094488189, 61.394061298297], [24.4018666453031, 61.3903703534151], [24.3764592107673, 61.3892115683941], [24.3562019318806, 61.4032028245743], [24.34495742538, 61.418095357993], [24.3248718183483, 61.4159494598059], [24.3102797106757, 61.409254257462], [24.3027261490569, 61.4034603323567], [24.2966317982055, 61.4004560748947], [24.2847006042849, 61.3846622642373], [24.2856447994873, 61.3660787859366], [24.2893357443692, 61.3593835835927], [24.3047003753891, 61.353332150705], [24.3229834279436, 61.3560789003845], [24.3518242995788, 61.3566797518769], [24.3935405603369, 61.3576239470793], [24.4101927302692, 61.3652204266618], [24.40504257462, 61.3706710080571], [24.3972315052188, 61.3761215894525], [24.4198921900751, 61.380370467863], [24.4513081395349, 61.37586408167], [24.4865867057316, 61.3673234068852], [24.5139683665995, 61.3706280900934], [24.5021230086065, 61.3800700421168], [24.490020142831, 61.3867652444607], [24.4802348470976, 61.3904561893426], [24.4555999359092, 61.3971084737228] ] + ] + }, + "properties" : { + "feature::id" : 156, + "id" : 79760, + "pfafstette" : 64411, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 42744, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_42744", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 157, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.9296889305988, 61.9909643380333], [15.9435943508515, 61.9889042757737], [15.9545813495697, 61.9962432475737], [15.9652250045779, 61.9922089589819], [15.9819630104377, 61.9803636009888], [16.0068554294085, 61.9758572147958], [16.0239367789782, 61.984998741073], [16.0120055850577, 61.997702458341], [15.9968126258927, 62.007702343893], [15.9807613074529, 62.0180884911188], [15.9518345998901, 62.0274875251785], [15.9368991485076, 62.03358187603], [15.9317489928585, 62.0201485533785], [15.9187019318806, 62.0080027696392], [15.8995605200513, 62.0128954175059], [15.8828225141916, 62.0143975462369], [15.8603335011903, 62.0125949917597], [15.8497756821095, 62.0068439846182], [15.8658270005494, 61.9962432475737], [15.8871143105658, 61.997702458341], [15.9055690349753, 62.0043976606849], [15.9180152444607, 62.0007496337667], [15.9296889305988, 61.9909643380333] ] + ] + }, + "properties" : { + "feature::id" : 157, + "id" : 79271, + "name" : "Storsjn", + "pfafstette" : 435, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 42751, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 158, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [24.7032365867057, 61.3117017258744], [24.7269273026918, 61.2986546648965], [24.7334508331807, 61.3022597738509], [24.7331933253983, 61.3177531587621], [24.7456395348837, 61.3320877586523], [24.7648667826405, 61.3268946850394], [24.7810039370079, 61.3226458066288], [24.7914759201611, 61.3427314136605], [24.7850382255997, 61.3554780488921], [24.7685577275224, 61.3536325764512], [24.7646951107856, 61.3615723997436], [24.7583432521516, 61.3700701565647], [24.743922816334, 61.3618299075261], [24.7277856619667, 61.3496841237869], [24.7124210309467, 61.3548771973997], [24.7011765244461, 61.3536325764512], [24.671648965391, 61.3545767716535], [24.6372287584691, 61.360671122505], [24.6218641274492, 61.3557784746383], [24.617228987365, 61.3438901986816], [24.6276151345907, 61.3359932933529], [24.6428080937557, 61.3317873329061], [24.6557693188061, 61.33080021974], [24.6765416132576, 61.3301993682476], [24.7032365867057, 61.3117017258744] ], + [ [24.6364562351218, 61.3448343938839], [24.6364562351218, 61.3402850897272], [24.6288168375755, 61.3442335423915], [24.6364562351218, 61.3448343938839] ] + ] + }, + "properties" : { + "feature::id" : 158, + "id" : 79686, + "name" : "Kukkiajrvi", + "pfafstette" : 647573, + "lke_type" : "N", + "altitude" : 87, + "objectid" : 43006, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 159, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [6.1654229994507, 61.5211413889398], [6.1405305804798, 61.508909769273], [6.1533201336752, 61.5050042345724], [6.1660238509431, 61.5080514099982], [6.1897145669291, 61.5141457608497], [6.2310874839773, 61.5223430919245], [6.2602716993225, 61.5220426661784], [6.2985545229811, 61.5220426661784], [6.3583821644388, 61.5393815235305], [6.414089681377, 61.5551753341879], [6.4426730452298, 61.5581795916499], [6.468509659403, 61.5523856665446], [6.5070499908442, 61.5444887612159], [6.5491095953122, 61.5374931331258], [6.5949459805896, 61.5293816379784], [6.5873065830434, 61.5375360510895], [6.5430152444607, 61.5472355108954], [6.5152902398828, 61.5515273072697], [6.4849043215528, 61.5554328419703], [6.4673079564182, 61.5645743682476], [6.4302268357444, 61.5694670161143], [6.3794119666728, 61.5673211179271], [6.3534895165721, 61.5566345449551], [6.3255928401392, 61.5415274217176], [6.2982111792712, 61.5335875984252], [6.2687694561436, 61.5350897271562], [6.2374393426112, 61.5381369025819], [6.2073109320637, 61.5323429774767], [6.1654229994507, 61.5211413889398] ] + ] + }, + "properties" : { + "feature::id" : 159, + "id" : 84828, + "name" : "Jlstravatnet", + "lge_id" : "no", + "pfafstette" : 553, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 43335, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 160, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [9.6088170664713, 60.3895234389306], [9.5878731001648, 60.395961133492], [9.5823796008057, 60.3919697628639], [9.598860098883, 60.3831715802966], [9.6125938472807, 60.364244758286], [9.6205765885369, 60.3420990889947], [9.6434089452481, 60.3272065555759], [9.6555118110236, 60.3138590688519], [9.6620353415125, 60.3017132851126], [9.6664988097418, 60.2880224546786], [9.6406621955686, 60.2695248123054], [9.611220472441, 60.2534305759018], [9.6069286760667, 60.2390959760117], [9.6091604101813, 60.2099117606665], [9.6167139718, 60.180126693829], [9.6346536806446, 60.1682384178722], [9.6650395989746, 60.1652341604102], [9.6884728071782, 60.163088262223], [9.7119060153818, 60.1575947628639], [9.7416910822194, 60.1567364035891], [9.7543947994873, 60.1455348150522], [9.7695019227248, 60.1339040468779], [9.7719911646219, 60.1457494048709], [9.7522489013001, 60.1591827275224], [9.738085973265, 60.167594648416], [9.72254967039, 60.1724872962827], [9.6899320179454, 60.1755344717085], [9.6586877403406, 60.1773799441494], [9.635254532137, 60.183130951291], [9.6267567753159, 60.2044611792712], [9.6273576268083, 60.2275510437649], [9.635254532137, 60.2502975645486], [9.6664988097418, 60.2688810428493], [9.6909620490753, 60.2779796511628], [9.6936229628273, 60.2877220289324], [9.6852968778612, 60.2952755905512], [9.6762841054752, 60.3132582173595], [9.6607478026003, 60.3348459531221], [9.644267304523, 60.3466913111152], [9.6423789141183, 60.361583844534], [9.641091375206, 60.3746309055118], [9.6303618842703, 60.3807252563633], [9.6088170664713, 60.3895234389306] ] + ] + }, + "properties" : { + "feature::id" : 160, + "id" : 90716, + "name" : "Krderen", + "lge_id" : "no", + "pfafstette" : 411151, + "lke_type" : "B", + "altitude" : 518, + "objectid" : 43642, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 161, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [11.6534288591833, 60.3530431697491], [11.6664759201612, 60.3454466901666], [11.68870742538, 60.3378931285479], [11.6971193462736, 60.3269061298297], [11.7057029390222, 60.3135586431057], [11.7209817341146, 60.3095672724776], [11.7260460538363, 60.3266057040835], [11.7172907892328, 60.3466913111152], [11.7135998443509, 60.3627855475188], [11.7114539461637, 60.37793558872], [11.6901666361472, 60.3840299395715], [11.6658750686688, 60.3822273850943], [11.6498237502289, 60.3883217359458], [11.6430427119575, 60.4035576130745], [11.6412401574803, 60.4211539782091], [11.6291372917048, 60.4308963559788], [11.6103392235854, 60.4321409769273], [11.6008114356345, 60.4260466260758], [11.6057040835012, 60.4142012680828], [11.6114550906428, 60.3968624107306], [11.6035581853141, 60.3855749862662], [11.5905969602637, 60.3779785066838], [11.5944595770006, 60.3676781953855], [11.6084508331807, 60.3585366691082], [11.6200386833913, 60.3503393380333], [11.6242446438381, 60.3621846960264], [11.6318840413844, 60.3709828785937], [11.6476778520418, 60.3634293169749], [11.6534288591833, 60.3530431697491] ] + ] + }, + "properties" : { + "feature::id" : 161, + "id" : 90502, + "name" : "Storsjen", + "lge_id" : "no", + "pfafstette" : 3413, + "lke_type" : "R", + "altitude" : 252, + "objectid" : 43643, + "scalerank" : 11, + "featurecla" : "Reservoir", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 162, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [11.2030477476653, 61.5338880241714], [11.2401288683391, 61.5032016800952], [11.25, 61.4965923136788], [11.2693130836843, 61.4837169245559], [11.2811584416774, 61.4742320545688], [11.2976389397546, 61.4584811618751], [11.3136902581945, 61.4448332494049], [11.3288832173595, 61.4311424189709], [11.3486254806812, 61.4129022843801], [11.3580674327046, 61.4120010071415], [11.3474237776964, 61.424447216627], [11.3450203717268, 61.4335887429042], [11.3291407251419, 61.4551335607032], [11.3039907983886, 61.4801118156015], [11.2714589818715, 61.5047038088262], [11.25, 61.521098470976], [11.2340345174876, 61.533287172679], [11.2218458157847, 61.5590808688885], [11.2273393151438, 61.5797673274126], [11.2324036348654, 61.5974066105109], [11.2251075810291, 61.6232432246841], [11.2163523164256, 61.6566763184398], [11.2163523164256, 61.6837146355979], [11.2072537081121, 61.6971050402857], [11.1938633034243, 61.689208134957], [11.1913740615272, 61.6703671488738], [11.1880264603553, 61.6591226423732], [11.1875114447903, 61.6439296832082], [11.1968675608863, 61.6198956235122], [11.1997001464933, 61.5959044817799], [11.1956658579015, 61.5639735167552], [11.2030477476653, 61.5338880241714] ] + ] + }, + "properties" : { + "feature::id" : 162, + "line::hidden" : [ + { "contour" : 0, "segments" : [ { "from" : 26, "to" : 27 } ] } + ], + "id" : 84346, + "name" : "Storsjen", + "lge_id" : "no", + "pfafstette" : 6559, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 43764, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 163, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [23.8111437923457, 60.7910209897455], [23.8083970426662, 60.8047118201795], [23.7950924739059, 60.8105057452847], [23.7798136788134, 60.8120078740157], [23.745822651529, 60.8132524949643], [23.7057372733932, 60.8092611243362], [23.703419703351, 60.7953127861198], [23.7277112708295, 60.7822228071782], [23.7468526826589, 60.7761284563267], [23.7598139077092, 60.7713216443875], [23.7766377494964, 60.7773301593115], [23.7971525361655, 60.7840682796191], [23.8111437923457, 60.7910209897455] ] + ] + }, + "properties" : { + "feature::id" : 163, + "id" : 85488, + "name" : "Pyhjrvi", + "pfafstette" : 297, + "lke_type" : "N", + "altitude" : 97, + "objectid" : 43980, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 164, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.7344865867057, 61.2283979582494], [16.7561172404322, 61.220458134957], [16.766331715803, 61.2080119254715], [16.7818680186779, 61.197754532137], [16.8064170939389, 61.1865100256363], [16.823755951291, 61.1843212094854], [16.8144856711225, 61.197411188427], [16.7888207288043, 61.2135054248306], [16.775516160044, 61.2287842199231], [16.778005401941, 61.2363377815418], [16.787361518037, 61.2463376670939], [16.8004085790148, 61.2551358496612], [16.8071037813587, 61.2597280717817], [16.7775762223036, 61.2612302005127], [16.7463319446988, 61.2554791933712], [16.723928767625, 61.2591701382531], [16.6876201702985, 61.2685691723128], [16.6566334004761, 61.267024125618], [16.6372344808643, 61.2542774903864], [16.6101103277788, 61.2463376670939], [16.5886513459074, 61.2405866599524], [16.6007542116829, 61.2305438564366], [16.6243590917415, 61.2289988097418], [16.6780065464201, 61.2311447079289], [16.7344865867057, 61.2283979582494] ] + ] + }, + "properties" : { + "feature::id" : 164, + "id" : 85686, + "name" : "Bergviken", + "pfafstette" : 131, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 43997, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 165, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [6.3063655923824, 61.760323200879], [6.2906576176525, 61.7591214978942], [6.2878250320454, 61.7581773026918], [6.3108290606116, 61.7563747482146], [6.3510861106025, 61.7420830662882], [6.3800128181652, 61.7220403772203], [6.3784677714704, 61.7101950192272], [6.3745193188061, 61.6947016343161], [6.3867080205091, 61.6779636284563], [6.4077378227431, 61.6663757782457], [6.4238749771104, 61.6579209393884], [6.4340894524812, 61.6414833592749], [6.4438747482146, 61.6302388527742], [6.447479857169, 61.6414833592749], [6.4369220380883, 61.6612685405603], [6.4164930873466, 61.6739722578282], [6.4043043856437, 61.6894656427394], [6.4061069401209, 61.7062036485992], [6.4065361197583, 61.7289930873466], [6.3940899102729, 61.7475765656473], [6.3771802325581, 61.7530700650064], [6.3413008148691, 61.760323200879], [6.3063655923824, 61.760323200879] ] + ] + }, + "properties" : { + "feature::id" : 165, + "id" : 83861, + "name" : "Breimsvatnet", + "lge_id" : "no", + "pfafstette" : 171, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 44405, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 166, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.3977522431789, 61.5041029573338], [16.4074517029848, 61.5098968824391], [16.3928595953122, 61.5356476606849], [16.3743190349753, 61.5600250640908], [16.3755207379601, 61.5703253753891], [16.3859068851859, 61.5800677531588], [16.3911428767625, 61.5868058734664], [16.3764649331624, 61.5946598608313], [16.3536325764512, 61.6041447308185], [16.3420447262406, 61.6262904001099], [16.3330319538546, 61.6557750412012], [16.3210149240066, 61.6621268998352], [16.2971525361656, 61.6557750412012], [16.2697708752976, 61.6600239196118], [16.2441917689068, 61.6634144387475], [16.2135483427944, 61.6670195477019], [16.1940635872551, 61.675173960813], [16.1821323933346, 61.6764185817616], [16.1713170664714, 61.6776202847464], [16.1655660593298, 61.6767619254715], [16.1755230269182, 61.6651740752609], [16.2029046877861, 61.6566763184398], [16.2380115821278, 61.6542299945065], [16.2871097326497, 61.6481785616187], [16.3220449551364, 61.6335435359824], [16.3247058688885, 61.6041447308185], [16.3354353598242, 61.577020577733], [16.3530317249588, 61.5627718137704], [16.3703705823109, 61.5515273072697], [16.3773232924373, 61.5298966535433], [16.3804133858268, 61.5071501327596], [16.3977522431789, 61.5041029573338] ] + ] + }, + "properties" : { + "feature::id" : 166, + "id" : 83672, + "name" : "Orsjn", + "pfafstette" : 3355, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 44418, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 167, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [13.0506660867973, 60.9007622230361], [13.0455159311482, 60.9144530534701], [13.0365889946896, 60.9168564594397], [13.0241427852042, 60.919302783373], [13.0153875206006, 60.9241525132759], [13.0023404596228, 60.9308477156198], [12.9825123603736, 60.9375858359275], [12.964572651529, 60.94518231551], [12.9382210217909, 60.9572851812855], [12.9141869620949, 60.9554397088445], [12.9260323200879, 60.9429934993591], [12.9415686229628, 60.9299464383813], [12.9580491210401, 60.917800654642], [12.9798514466215, 60.9083157846548], [13.0020829518403, 60.9016635002747], [13.0290354330709, 60.8940670206922], [13.0488635323201, 60.8901614859916], [13.0506660867973, 60.9007622230361] ] + ] + }, + "properties" : { + "feature::id" : 167, + "id" : 87507, + "name" : "Tisjn", + "pfafstette" : 95491, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 44759, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 168, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.0740020142831, 60.8624364814137], [14.0937442776048, 60.860376419154], [14.0820705914668, 60.8752689525728], [14.0612982970152, 60.893423251236], [14.0522855246292, 60.902607695477], [14.0297965116279, 60.9214486815602], [13.999067249588, 60.940332585607], [13.9606985900018, 60.949345357993], [13.9350336476836, 60.9448389718], [13.9421580296649, 60.9348390862479], [13.9580376762498, 60.9293455868888], [13.97168558872, 60.9217491073064], [13.9749473539645, 60.9105475187694], [13.978037447354, 60.8977150476103], [13.9855910089727, 60.8840242171763], [13.9922003753891, 60.8703763047061], [14.0038740615272, 60.8743247573704], [14.0176078099249, 60.881577893243], [14.0305690349753, 60.87672816334], [14.0482512360374, 60.8694321095037], [14.0740020142831, 60.8624364814137] ] + ] + }, + "properties" : { + "feature::id" : 168, + "id" : 87355, + "name" : "Venjansjn", + "pfafstette" : 631, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 44850, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 169, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.3539873649515, 60.9642808093756], [15.3677211133492, 60.9798171122505], [15.3755321827504, 60.9828642876762], [15.3834290880791, 60.9868127403406], [15.4077206555576, 60.9898169978026], [15.4338147775133, 60.9852247756821], [15.4572479857169, 60.9858256271745], [15.4823979124703, 60.9876710996155], [15.4964750045779, 60.988915720564], [15.4589647042666, 60.9987868522249], [15.4036005310383, 61.0132072880425], [15.3715837300861, 61.0111043078191], [15.3552749038638, 60.9958684306904], [15.3371635231643, 60.9813192409815], [15.3028291521699, 60.9733794176891], [15.2839452481231, 60.9664267075627], [15.2908121223219, 60.9621778291522], [15.3077218000366, 60.9539804980773], [15.3326142190075, 60.9484869987182], [15.3539873649515, 60.9642808093756] ] + ] + }, + "properties" : { + "feature::id" : 169, + "id" : 86959, + "name" : "Ljugaren", + "pfafstette" : 2643, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 45191, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 170, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.588674235488, 61.0590865912836], [14.5974295000916, 61.0886141503388], [14.6121074436916, 61.1077126442044], [14.6135666544589, 61.1180558734664], [14.5941677348471, 61.1308454266618], [14.5655843709943, 61.1378410547519], [14.5394044131112, 61.1368968595495], [14.5300482970152, 61.1286566105109], [14.5107352133309, 61.1244506500641], [14.4895337392419, 61.1183992171763], [14.4970873008607, 61.1068113669658], [14.5058425654642, 61.0968114814137], [14.5002632301776, 61.0804597372276], [14.4953705823109, 61.0664255630837], [14.5135677989379, 61.0594728529573], [14.5291041018129, 61.0512326039187], [14.5364001556492, 61.0423485854239], [14.5570007782458, 61.0381426249771], [14.5776872367698, 61.0421339956052], [14.588674235488, 61.0590865912836] ] + ] + }, + "properties" : { + "feature::id" : 170, + "id" : 86669, + "name" : "Orsasjn", + "pfafstette" : 4195, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 45265, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 171, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [24.1392087071965, 60.3877208844534], [24.1485648232924, 60.3922701886101], [24.157148416041, 60.3965619849844], [24.1662470243545, 60.3898238646768], [24.1638436183849, 60.3715837300861], [24.1538008148691, 60.3609829930416], [24.1491656747848, 60.3527856619667], [24.1528566196667, 60.3417986632485], [24.1643586339498, 60.3487513733748], [24.1728563907709, 60.3646310199597], [24.1799807727522, 60.3746309055118], [24.2118259018495, 60.3755751007142], [24.2410101171947, 60.3701245193188], [24.2576622871269, 60.3637297427211], [24.2773187145212, 60.3558328373924], [24.2913958066288, 60.3542448727339], [24.3011811023622, 60.364244758286], [24.2937992125984, 60.3770772294452], [24.287361518037, 60.3877208844534], [24.2853872917048, 60.3977207700055], [24.2939708844534, 60.40832150705], [24.305215390954, 60.4196089315144], [24.2925975096136, 60.4168621818348], [24.2764603552463, 60.4095661279985], [24.2683059421351, 60.4010683711774], [24.2773187145212, 60.38561790423], [24.28418558872, 60.373429202527], [24.2709668558872, 60.3691374061527], [24.2624690990661, 60.3755751007142], [24.2453877494964, 60.3823132210218], [24.2162893700787, 60.3883217359458], [24.1799807727522, 60.3962615592382], [24.1482214795825, 60.403815120857], [24.126762497711, 60.4095661279985], [24.1123420618934, 60.4093086202161], [24.1220415216993, 60.3952744460721], [24.1392087071965, 60.3877208844534] ] + ] + }, + "properties" : { + "feature::id" : 171, + "id" : 86867, + "name" : "Hiidenvesi syvnne 90", + "pfafstette" : 51, + "lke_type" : "N", + "altitude" : 32, + "objectid" : 45414, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 172, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.8347429500092, 60.6928676066654], [16.8633263138619, 60.6965585515473], [16.8694206647134, 60.704455456876], [16.8724249221754, 60.7141119987182], [16.875, 60.7184467130562], [16.8812660227065, 60.729004532137], [16.8845277879509, 60.7408928080938], [16.8925963651346, 60.7491330571324], [16.8842702801685, 60.7618367744003], [16.875, 60.7623517899652], [16.8608370719649, 60.7630813953488], [16.847790010987, 60.7539827870353], [16.8420390038455, 60.7451416865043], [16.8342279344443, 60.729004532137], [16.8222967405237, 60.7159574711591], [16.8101938747482, 60.7098631203076], [16.8132839681377, 60.6980177623146], [16.8347429500092, 60.6928676066654] ] + ] + }, + "properties" : { + "feature::id" : 172, + "id" : 87877, + "name" : "Ojaren", + "pfafstette" : 61, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 45485, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 173, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.68042139718, 61.090073361106], [15.692610098883, 61.0755241713972], [15.7090047610328, 61.0682281175609], [15.7284036806446, 61.0618762589269], [15.738017304523, 61.0709748672404], [15.7320946255265, 61.0782709210767], [15.7229101812855, 61.0843652719282], [15.7035112616737, 61.1013178676067], [15.6919234114631, 61.1353947308185], [15.6873741073064, 61.1621755401941], [15.6855715528292, 61.1731196209485], [15.6737261948361, 61.1846216352316], [15.6451428309833, 61.1901151345907], [15.6193920527376, 61.195909059696], [15.6023107031679, 61.1953082082036], [15.583770142831, 61.1961665674785], [15.5600794268449, 61.1980120399194], [15.5478907251419, 61.2032051135323], [15.5594785753525, 61.211445362571], [15.5855726973082, 61.211445362571], [15.6008514924007, 61.2129045733382], [15.6023107031679, 61.2208443966307], [15.5950146493316, 61.2220460996154], [15.5782766434719, 61.2226469511079], [15.5529550448636, 61.2226469511079], [15.5400796557407, 61.2129045733382], [15.5326977659769, 61.2083981871452], [15.5170756271745, 61.2147071278154], [15.5078053470061, 61.2129045733382], [15.4868613806995, 61.2047072422633], [15.4526128456327, 61.2071535661967], [15.4311538637612, 61.2165526002564], [15.4163042483062, 61.2223465253617], [15.4086648507599, 61.2162950924739], [15.4152742171764, 61.2108015931148], [15.429694652994, 61.2020463285113], [15.4417975187695, 61.1980120399194], [15.4554454312397, 61.2016600668376], [15.4872905603369, 61.1922610327779], [15.5223116187512, 61.1849220609778], [15.5529550448636, 61.1788277101264], [15.5947571415492, 61.1715745742538], [15.617160318623, 61.1621326222304], [15.6101217725691, 61.1494289049625], [15.6064308276872, 61.1405878044314], [15.623340505402, 61.1347509613624], [15.6379326130745, 61.1274978254898], [15.6460011902582, 61.1223047518769], [15.6647992583776, 61.1135494872734], [15.68042139718, 61.090073361106] ] + ] + }, + "properties" : { + "feature::id" : 173, + "id" : 86144, + "name" : "Lake Dalkarlsaspen", + "pfafstette" : 275, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 45857, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 174, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.3186172404322, 61.3867652444607], [8.3252266068486, 61.382215940304], [8.3525224317891, 61.37586408167], [8.3820499908442, 61.3648770829518], [8.4152684947812, 61.3566797518769], [8.443508514924, 61.3542334279436], [8.4602465207837, 61.351486678264], [8.4881431972166, 61.349984549533], [8.5124347646951, 61.3511862525179], [8.5586144936825, 61.3504137291705], [8.6152662058231, 61.3411863669658], [8.6574974821461, 61.3375383400476], [8.6936344076177, 61.3365941448453], [8.7131191631569, 61.3375383400476], [8.7362090276506, 61.3390404687786], [8.7456509796741, 61.3320448406885], [8.7562087987548, 61.3220449551364], [8.7787836476836, 61.3204999084417], [8.7868522248672, 61.3301993682476], [8.7726892968321, 61.3344911646219], [8.7538912287127, 61.3387400430324], [8.7286554660319, 61.3478386513459], [8.6921751968504, 61.353332150705], [8.6564674510163, 61.3573235213331], [8.6179271195752, 61.3615723997436], [8.5656530397363, 61.3648770829518], [8.5230784197034, 61.365177508698], [8.468057590185, 61.3660787859366], [8.4082299487273, 61.3706280900934], [8.3902902398828, 61.3754778199963], [8.3750114447903, 61.3809713193554], [8.3437671671855, 61.3883102911555], [8.3186172404322, 61.3867652444607] ] + ] + }, + "properties" : { + "feature::id" : 174, + "id" : 85816, + "name" : "Bygdin", + "lge_id" : "no", + "pfafstette" : 24951, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 45864, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 175, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.836808734664, 61.3420447262406], [8.8247058688885, 61.3411863669658], [8.8351778520418, 61.3289976652628], [8.8625595129097, 61.3192982054569], [8.8793833546969, 61.3147059833364], [8.900069813221, 61.3059078007691], [8.9226446621498, 61.3038477385094], [8.9495971433803, 61.3080536989562], [8.9930301226882, 61.3159076863212], [9.0219568302509, 61.3369374885552], [9.0400682109504, 61.3496841237869], [9.0495959989013, 61.3551776231459], [9.0355189067936, 61.3600702710126], [9.0039312854789, 61.3542334279436], [8.9773221479583, 61.342645577733], [8.9653051181102, 61.3305856299213], [8.9526872367698, 61.3250921305622], [8.9406702069218, 61.3208003341879], [8.9230738417872, 61.3198990569493], [8.8957780168467, 61.3293410089727], [8.8747482146127, 61.3384396172862], [8.8562076542758, 61.339984663981], [8.836808734664, 61.3420447262406] ] + ] + }, + "properties" : { + "feature::id" : 175, + "id" : 86002, + "name" : "Vinstri", + "lge_id" : "no", + "pfafstette" : 2493531, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 45873, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 176, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [11.8263882530672, 61.2451359641091], [11.8558299761948, 61.2123037218458], [11.8687053653177, 61.1947073567112], [11.8962586980407, 61.1740208981871], [11.9358290606116, 61.1518752288958], [11.9631248855521, 61.1299441494232], [11.9798628914118, 61.1171975141915], [11.9831246566563, 61.1274978254898], [11.9345415216993, 61.1669823521333], [11.8893059879143, 61.1992137429042], [11.8859583867424, 61.2192993499359], [11.8679328419703, 61.2469385185863], [11.8467313678814, 61.2645778016847], [11.8282766434719, 61.2785690578649], [11.8069034975279, 61.295907915217], [11.7944572880425, 61.3080536989562], [11.7742000091558, 61.309255401941], [11.7560886284563, 61.3047060977843], [11.7556594488189, 61.2926032320088], [11.7621829793078, 61.2794703351035], [11.7841569767442, 61.271873855521], [11.8263882530672, 61.2451359641091] ] + ] + }, + "properties" : { + "feature::id" : 176, + "id" : 86160, + "name" : "Ossjen", + "lge_id" : "no", + "pfafstette" : 6417, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 45905, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 177, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.9287561801868, 61.2083981871452], [14.9135632210218, 61.2056514374657], [14.9557944973448, 61.197411188427], [14.9962232191906, 61.1955657159861], [15.0098711316609, 61.1943210950375], [15.030557590185, 61.1892138573521], [15.0515015564915, 61.1852654046878], [15.0734755539279, 61.1822611472258], [15.0837758652262, 61.1895142830983], [15.0713296557407, 61.2062522889581], [15.0500423457242, 61.2189989241897], [15.0327034883721, 61.2268529115547], [15.0227465207838, 61.2214452481231], [15.0002575077825, 61.2089990386376], [14.9612879967039, 61.2041063907709], [14.9287561801868, 61.2083981871452] ] + ] + }, + "properties" : { + "feature::id" : 177, + "id" : 86228, + "name" : "Skattungen", + "pfafstette" : 427133, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 46038, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 178, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.2714933162425, 61.3317873329061], [8.2676306995056, 61.3487399285845], [8.2584462552646, 61.3603706967588], [8.2428241164622, 61.3625595129097], [8.2231676890679, 61.3579243728255], [8.2329529848013, 61.3487399285845], [8.2429099523897, 61.3360791292804], [8.2284895165721, 61.3281393059879], [8.2143265885369, 61.3205428264054], [8.1933826222304, 61.3138476240615], [8.1613658212782, 61.3016589223585], [8.1711511170115, 61.2888693691632], [8.1994769730819, 61.2834617057315], [8.2060863394983, 61.2663803561619], [8.2173308459989, 61.2490844167735], [8.2368156015382, 61.2460801593115], [8.2434249679546, 61.2579255173045], [8.2344121955686, 61.2736764099982], [8.2307212506867, 61.2883543535982], [8.2521802325581, 61.3028606253433], [8.2674590276506, 61.3189548617469], [8.2714933162425, 61.3317873329061] ] + ] + }, + "properties" : { + "feature::id" : 178, + "id" : 85939, + "name" : "Tyin", + "lge_id" : "no", + "pfafstette" : 759, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 46142, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 179, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.8708855978759, 60.3664764924007], [8.8781816517121, 60.3603392235854], [8.8802417139718, 60.3536440212415], [8.8833318073613, 60.3457900338766], [8.8992114539462, 60.3323996291888], [8.9051341329427, 60.3396527650613], [8.893889626442, 60.3539444469877], [8.888224455228, 60.3624851217726], [8.8823017762315, 60.3703820271013], [8.8774091283648, 60.3831715802966], [8.8814434169566, 60.4044159723494], [8.8827309558689, 60.4236003021425], [8.8637612158945, 60.4381065738876], [8.8237616736861, 60.44604639718], [8.7908865134591, 60.4539862204724], [8.7754360465116, 60.454887497711], [8.7688266800952, 60.4429992217543], [8.7815303973631, 60.4357460858817], [8.8235041659037, 60.4284929500092], [8.8617011536349, 60.4211539782091], [8.8726023164256, 60.417162607581], [8.8620444973448, 60.4120124519319], [8.8525167093939, 60.3961757233108], [8.86084279436, 60.373429202527], [8.8708855978759, 60.3664764924007] ] + ] + }, + "properties" : { + "feature::id" : 179, + "id" : 90336, + "name" : "Tunhovdfjorden", + "lge_id" : "no", + "pfafstette" : 5111, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 46220, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 180, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [10.0573956235122, 60.5527404550449], [10.0155076908991, 60.5602940166636], [9.9853792803516, 60.5645858130379], [9.9816883354697, 60.5566459897455], [9.9953362479399, 60.5472469556858], [10.0200569950559, 60.5436418467314], [10.0428893517671, 60.5405946713056], [10.0483828511262, 60.5257021378868], [10.037395852408, 60.5060027925288], [10.0291556033694, 60.4816253891229], [10.0391984068852, 60.4630848287859], [10.0580823109321, 60.4521407480315], [10.0678676066655, 60.4351452343893], [10.061429912104, 60.4205531267167], [10.0540480223402, 60.4035146951108], [10.0595415216993, 60.3862187557224], [10.0732752700971, 60.3789227018861], [10.0814296832082, 60.3852745605201], [10.0750778245743, 60.3977207700055], [10.0832322376854, 60.4202527009705], [10.0979101812855, 60.4417975187695], [10.085978987365, 60.4500377678081], [10.0658933803333, 60.4582780168467], [10.0577389672221, 60.4684924922175], [10.0632324665812, 60.4833850256363], [10.0687259659403, 60.5013676524446], [10.079627128731, 60.5229553882073], [10.0834897454679, 60.5435989287676], [10.0573956235122, 60.5527404550449] ] + ] + }, + "properties" : { + "feature::id" : 180, + "id" : 89936, + "name" : "Sperillen", + "lge_id" : "no", + "pfafstette" : 73133, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 46249, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 181, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.614156061161, 60.5083632805347], [15.610808459989, 60.5001230314961], [15.6047141091375, 60.4874193142282], [15.6162161234206, 60.4840717130562], [15.6341558322652, 60.4865180369896], [15.6490912836477, 60.48377128731], [15.6604216260758, 60.4913248489288], [15.6581898919612, 60.5102087529756], [15.656387337484, 60.526002563633], [15.6667734847098, 60.5284488875664], [15.6824814594397, 60.5199082127815], [15.7029104101813, 60.5327406839407], [15.7223951657206, 60.5512812442776], [15.734841375206, 60.543040995239], [15.7508926936459, 60.5508949826039], [15.7657423091009, 60.57458569859], [15.7581887474822, 60.5894782320088], [15.737845632668, 60.5940704541293], [15.701451199414, 60.5931262589269], [15.674584554111, 60.5900790835012], [15.6557864859916, 60.58192467039], [15.6405935268266, 60.5686201016297], [15.6387051364219, 60.5531267167186], [15.6241988646768, 60.5476332173595], [15.610808459989, 60.5384487731185], [15.6084050540194, 60.523341649881], [15.5915812122322, 60.5147580571324], [15.5594785753525, 60.51415720564], [15.5451439754624, 60.5105091787218], [15.5594785753525, 60.4965179225417], [15.5762165812122, 60.4929128135873], [15.5861735488006, 60.4983633949826], [15.5962163523164, 60.5041573200879], [15.6045424372826, 60.5105091787218], [15.614156061161, 60.5083632805347] ] + ] + }, + "properties" : { + "feature::id" : 181, + "id" : 89145, + "name" : "Runn", + "pfafstette" : 2311, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 46693, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 182, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [11.0613326313862, 60.3880213101996], [11.074723036074, 60.4102098974547], [11.0735213330892, 60.4293942272478], [11.0659677714704, 60.4242011536349], [11.050688976378, 60.4044159723494], [11.0312900567662, 60.3883217359458], [11.0185863394983, 60.379781061161], [11.0136936916316, 60.3666910822194], [11.0239081670024, 60.3527856619667], [11.0409895165721, 60.344545412928], [11.0597875846915, 60.3381506363303], [11.0735213330892, 60.3178075215162], [11.0820190899103, 60.302314136605], [11.0900018311665, 60.2956618522249], [11.1020188610145, 60.2883228804248], [11.1148942501373, 60.2952755905512], [11.1177268357444, 60.3166058185314], [11.122791155466, 60.3299533052554], [11.1236495147409, 60.335704312397], [11.1048514466215, 60.3436441356894], [11.0781564731734, 60.3517985488006], [11.0568691631569, 60.3646310199597], [11.0500881248856, 60.3783218503937], [11.0613326313862, 60.3880213101996] ] + ] + }, + "properties" : { + "feature::id" : 182, + "id" : 90560, + "name" : "Hurdalsjen", + "lge_id" : "no", + "pfafstette" : 214333, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 46998, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 183, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [17.3183425654642, 60.1427022294452], [17.3269261582128, 60.1445477018861], [17.3362822743087, 60.1460498306171], [17.3567112250504, 60.1563930598791], [17.3842645577733, 60.167594648416], [17.4052943600073, 60.1770795184032], [17.391818119392, 60.1904270051273], [17.3732775590551, 60.199826039187], [17.3604021699322, 60.2016715116279], [17.337569813221, 60.1937746062992], [17.3132782457425, 60.1865214704267], [17.2900167093939, 60.1831738692547], [17.2781713514008, 60.1737319172313], [17.2678710401025, 60.164933734664], [17.2598024629189, 60.1569939113715], [17.2706177897821, 60.1481957288042], [17.2949093572606, 60.1472944515656], [17.3088147775133, 60.1451485533785], [17.3183425654642, 60.1427022294452] ] + ] + }, + "properties" : { + "feature::id" : 183, + "id" : 90737, + "name" : "Tamnaren", + "pfafstette" : 751, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 47101, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 184, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [10.188467084783, 60.80896069859], [10.1611712598425, 60.8092611243362], [10.1409998168834, 60.8062997848379], [10.1683814777513, 60.7998620902765], [10.2011708020509, 60.7974157663432], [10.218509659403, 60.7865146035525], [10.2275224317891, 60.7664289965208], [10.2367927119575, 60.74853220564], [10.2505264603553, 60.7354851446621], [10.2774789415858, 60.7169445843252], [10.3173926478667, 60.6873741073064], [10.339881660868, 60.6557864859916], [10.3339589818715, 60.6247567982055], [10.3130150155649, 60.6068600073247], [10.2985087438198, 60.5965596960264], [10.294474455228, 60.5591352316426], [10.3015130012818, 60.5266034151254], [10.3339589818715, 60.5208953259476], [10.3737868522249, 60.512655076909], [10.3882072880425, 60.4922690441311], [10.3933574436916, 60.4733851400842], [10.3930999359092, 60.4512394707929], [10.3825421168284, 60.4284929500092], [10.3761902581945, 60.4126133034243], [10.369924235488, 60.4013687969236], [10.3589372367698, 60.391626419154], [10.3576496978575, 60.3676352774217], [10.3537870811207, 60.3478930141], [10.3454609961546, 60.3336442501373], [10.351555347006, 60.3138590688519], [10.3613406427394, 60.2952755905512], [10.3747310474272, 60.27978220564], [10.3882072880425, 60.2609841375206], [10.4059753250321, 60.2528297244095], [10.4212541201245, 60.2634304614539], [10.412327183666, 60.275275819447], [10.4062328328145, 60.2873786852225], [10.4018552005127, 60.2956189342611], [10.3865764054203, 60.3069063587255], [10.3816837575536, 60.3269061298297], [10.3920699047794, 60.3457900338766], [10.4064045046695, 60.3575924739059], [10.4136147225783, 60.368922816334], [10.4176490111701, 60.3801244048709], [10.4258034242813, 60.3995233244827], [10.4377346182018, 60.4211539782091], [10.4585927485809, 60.4305530122688], [10.4706956143563, 60.4375486403589], [10.4555884911188, 60.4411537493133], [10.4446014924007, 60.4542437282549], [10.4529275773668, 60.4733851400842], [10.4504383354697, 60.4888785249954], [10.4200524171397, 60.5120113074529], [10.382112937191, 60.5299080983336], [10.3431434261124, 60.5332556995056], [10.318851858634, 60.5405946713056], [10.3225428035158, 60.5539421580297], [10.3310405603369, 60.5782337255081], [10.3403108405054, 60.60497161692], [10.3559329793078, 60.6192632988464], [10.3625423457242, 60.6502929866325], [10.3492377769639, 60.6928676066654], [10.3276071232375, 60.7165583226515], [10.2995387749496, 60.7263436183849], [10.2722429500092, 60.7387898278703], [10.2595392327413, 60.7518368888482], [10.2476938747482, 60.762223036074], [10.2395394616371, 60.7813215299396], [10.2334451107856, 60.8010208752976], [10.2097543947995, 60.8098619758286], [10.188467084783, 60.80896069859] ] + ] + }, + "properties" : { + "feature::id" : 184, + "id" : 88501, + "name" : "Randsfjorden", + "lge_id" : "no", + "pfafstette" : 6137, + "lke_type" : "B", + "altitude" : 134, + "objectid" : 47310, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 185, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [7.8400819446988, 60.6928676066654], [7.8672060977843, 60.6706790194104], [7.8930427119575, 60.6658292895074], [7.9128708112067, 60.6706790194104], [7.9279779344442, 60.6773742217543], [7.9114116004395, 60.6818806079473], [7.8848024629189, 60.694112227614], [7.8449745925655, 60.7165583226515], [7.7804259750961, 60.7292620399194], [7.7544176890679, 60.7241977201978], [7.7775933894891, 60.7187042208387], [7.80248580846, 60.7129102957334], [7.8237731184765, 60.707459714338], [7.8400819446988, 60.6928676066654] ] + ] + }, + "properties" : { + "feature::id" : 185, + "id" : 88898, + "name" : "Strandavatnet", + "lge_id" : "no", + "pfafstette" : 4857, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 47349, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 186, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.0857443691632, 60.7375452069218], [8.0705514099982, 60.7509356116096], [8.0708089177806, 60.762223036074], [8.0666887932613, 60.7728237731185], [8.0497791155466, 60.7797764832448], [8.0377620856986, 60.7846691311115], [8.0216249313313, 60.7938106573888], [8.0134705182201, 60.8038534609046], [8.0161314319722, 60.81629967039], [7.9985350668376, 60.8229519547702], [7.977762772386, 60.8189605841421], [7.959565555759, 60.8166000961362], [7.9375057223952, 60.8181022248672], [7.9267762314594, 60.8129520692181], [7.9462609869987, 60.8095615500824], [7.9760460538363, 60.8022654962461], [7.977762772386, 60.7885746658121], [7.9675482970152, 60.7782743545138], [7.9741576634316, 60.7710212186413], [7.9951016297382, 60.7548840642739], [8.0140713697125, 60.7473305026552], [8.0273759384728, 60.7561286852225], [8.0429980772752, 60.7557853415125], [8.0544142556308, 60.7424378547885], [8.0771607764146, 60.7275453213697], [8.1130401941037, 60.7235968687054], [8.122825489837, 60.7314508560703], [8.1157011078557, 60.7448841787218], [8.1066883354697, 60.759390450467], [8.0903795092474, 60.7587895989745], [8.0913237044497, 60.7448841787218], [8.0997356253433, 60.736343503937], [8.0857443691632, 60.7375452069218] ], + [ [8.0256592199231, 60.77123580846], [8.0189640175792, 60.774068394067], [8.0248866965757, 60.7782743545138], [8.0256592199231, 60.77123580846] ] + ] + }, + "properties" : { + "feature::id" : 186, + "id" : 88394, + "name" : "Djupsvatnet", + "lge_id" : "no", + "pfafstette" : 482511, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 47442, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 187, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.1950993407801, 59.7791870765428], [8.1930392785204, 59.7831355292071], [8.1569023530489, 59.7926203991943], [8.13501419154, 59.8059249679546], [8.1194778886651, 59.8266114264787], [8.1034265702252, 59.8460961820179], [8.1146710767259, 59.8546368568028], [8.1358725508149, 59.8558385597876], [8.162567524263, 59.8539930873466], [8.1875457791613, 59.853091810108], [8.1988761215895, 59.8454524125618], [8.2335538362937, 59.8308603048892], [8.2926947903314, 59.8249376258927], [8.2998191723128, 59.8318045000916], [8.2495193188061, 59.8399589132027], [8.2180175334188, 59.851589681377], [8.2096914484527, 59.8546368568028], [8.1917517396081, 59.85609606757], [8.1705502655191, 59.870130241714], [8.1465162058231, 59.8837781541842], [8.1279756454862, 59.8822760254532], [8.1150144204358, 59.8795292757737], [8.0944996337667, 59.8776838033327], [8.0598219190624, 59.8889283098334], [8.0398221479583, 59.9107735533785], [8.05956441128, 59.9268677897821], [8.0702939022157, 59.9451937603003], [8.0422255539279, 59.96193176616], [8.0134705182201, 59.9658373008606], [8.026517579198, 59.9572966260758], [8.0551009430507, 59.9451937603003], [8.0434272569127, 59.928713262223], [8.020509064274, 59.9107735533785], [8.007977018861, 59.8980698361106], [8.0014534883721, 59.8858811344076], [8.0167322834646, 59.866782640542], [8.0340711408167, 59.8439932017945], [8.0662596136239, 59.8242080205091], [8.110980131844, 59.806525819447], [8.13501419154, 59.7910324345358], [8.1538122596594, 59.7843801501556], [8.174584554111, 59.7807750412012], [8.1950993407801, 59.7791870765428] ] + ] + }, + "properties" : { + "feature::id" : 187, + "id" : 92671, + "name" : "Msvatn", + "lge_id" : "no", + "pfafstette" : 91177, + "lke_type" : "B", + "altitude" : 1394, + "objectid" : 47810, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 188, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.2009361838491, 60.0524886696576], [8.1985327778795, 60.0463943188061], [8.2280603369346, 60.0502998535067], [8.2635964109138, 60.0563942043582], [8.2775876670939, 60.0597418055301], [8.2949265244461, 60.0694841832998], [8.3162138344626, 60.0740334874565], [8.319818943417, 60.0554929271196], [8.3110636788134, 60.0369952847464], [8.2945831807361, 60.0241628135873], [8.2829953305256, 60.0047638939755], [8.298617469328, 60.0014162928035], [8.3449688701703, 60.0029184215345], [8.3726938747482, 60.0032617652445], [8.3525224317891, 60.0072102179088], [8.3362136055668, 60.0169096777147], [8.3310634499176, 60.0339481093206], [8.3328660043948, 60.0478535295733], [8.3429088079106, 60.0627460629921], [8.3388745193188, 60.0746343389489], [8.3206773026918, 60.0806857718367], [8.3021367423549, 60.0874238921443], [8.2949265244461, 60.0855784197033], [8.2766434718916, 60.0780248580846], [8.2502918421535, 60.0725313587255], [8.2344121955686, 60.0627460629921], [8.2194767441861, 60.0566946301044], [8.2009361838491, 60.0524886696576] ] + ] + }, + "properties" : { + "feature::id" : 188, + "id" : 92360, + "name" : "Gystvatnet", + "lge_id" : "no", + "pfafstette" : 857, + "lke_type" : "B", + "altitude" : 1137, + "objectid" : 47917, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 189, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.977070362571, 59.9157091192089], [15.991748306171, 59.9114602407984], [16.010288866508, 59.8995290468779], [16.0235934352683, 59.9050225462369], [16.0050528749313, 59.926052348471], [15.9950100714155, 59.939399835195], [16.0086579838857, 59.9454941860465], [16.0141514832448, 59.9561378410547], [16.0056537264237, 59.9691849020326], [15.9731219099066, 59.9688844762864], [15.9299464383813, 59.9688844762864], [15.9050540194104, 59.9688844762864], [15.8950112158945, 59.9625326176524], [15.9095174876396, 59.9578116416407], [15.934495742538, 59.9627901254349], [15.9460835927486, 59.9572966260758], [15.928487227614, 59.953090665629], [15.9093458157847, 59.9515456189343], [15.9268563449918, 59.9445929088079], [15.946512772386, 59.9348076130745], [15.9560405603369, 59.9229622550815], [15.977070362571, 59.9157091192089] ] + ] + }, + "properties" : { + "feature::id" : 189, + "id" : 92385, + "pfafstette" : 8391, + "lke_type" : "N", + "altitude" : 80, + "objectid" : 47982, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_47982", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 190, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [13.0364173228347, 60.1190115134591], [13.0365889946896, 60.0935182429958], [13.046374290423, 60.0819303927852], [13.0665457333822, 60.0655786485992], [13.0847429500092, 60.0502998535067], [13.097790010987, 60.036394433254], [13.1030260025636, 60.0141629280352], [13.1086911737777, 59.9901717863029], [13.1153863761216, 59.9668244140267], [13.1202790239883, 59.9512881111518], [13.1330685771837, 59.9323612891412], [13.1406221388024, 59.9077692959165], [13.1412229902948, 59.8762245925655], [13.1440555759019, 59.8572977705548], [13.1475748489288, 59.8688856207654], [13.1530683482879, 59.8822760254532], [13.1616519410365, 59.9050225462369], [13.1579609961546, 59.9327475508149], [13.1512657938107, 59.9490992950009], [13.146029802234, 59.9606871452115], [13.1420813495697, 59.9739917139718], [13.1382187328328, 59.9886696575719], [13.1379612250504, 59.9956223676982], [13.1428538729171, 60.0078110694012], [13.1353003112983, 60.0221027513276], [13.1126396264421, 60.0424458661417], [13.097790010987, 60.0576388253067], [13.0773610602454, 60.080471182018], [13.0478335011903, 60.1196552829152], [13.0364173228347, 60.1190115134591] ] + ] + }, + "properties" : { + "feature::id" : 190, + "id" : 91892, + "name" : "Ovre Fryken", + "pfafstette" : 6531, + "lke_type" : "N", + "altitude" : 65, + "objectid" : 48307, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 191, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.2570728804248, 60.1114579518403], [8.280076908991, 60.1023164255631], [8.2833386742355, 60.1035181285479], [8.277244323384, 60.1205565601538], [8.2595621223219, 60.1348482420802], [8.2419657571873, 60.1436893426112], [8.2341546877861, 60.1561355520967], [8.2119231825673, 60.1704272340231], [8.1797347097601, 60.1877660913752], [8.1657434535799, 60.193474180553], [8.1708936092291, 60.1788820728804], [8.1950993407801, 60.1622299029482], [8.2082322376854, 60.1533888024171], [8.2054854880059, 60.1412430186779], [8.2215368064457, 60.1245050128182], [8.2570728804248, 60.1114579518403] ] + ] + }, + "properties" : { + "feature::id" : 191, + "id" : 91742, + "name" : "Mr", + "lge_id" : "no", + "pfafstette" : 8613, + "lke_type" : "B", + "altitude" : 0, + "objectid" : 48315, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 192, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [18.5350668375755, 59.8436498580846], [18.571547106757, 59.8391005539279], [18.6031347280718, 59.8363538042483], [18.6362673960813, 59.8433923503021], [18.6462243636696, 59.8585423915034], [18.6311172404322, 59.8658384453397], [18.5978987364951, 59.8661388710859], [18.5591008972716, 59.868284769273], [18.5362685405603, 59.8633921214063], [18.5241656747848, 59.8621904184215], [18.5048525911005, 59.8676839177806], [18.4848528199963, 59.8658384453397], [18.4824494140267, 59.8570831807361], [18.4991874198865, 59.8481991622414], [18.5350668375755, 59.8436498580846] ] + ] + }, + "properties" : { + "feature::id" : 192, + "id" : 92164, + "name" : "Erken", + "pfafstette" : 51, + "lke_type" : "N", + "altitude" : 15, + "objectid" : 48359, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 193, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.9885666544589, 59.8512463376671], [8.9675368522249, 59.866782640542], [8.942644433254, 59.8925763367515], [8.9112284837942, 59.9239064502838], [8.8918295641824, 59.9403011124336], [8.8662504577916, 59.9652364493682], [8.8307143838125, 59.9937768952573], [8.81543558872, 59.9956223676982], [8.7893414667643, 59.9962232191906], [8.7659940944882, 59.9937768952573], [8.776380241714, 59.9862233336385], [8.8061653085516, 59.9764380379051], [8.8261650796557, 59.9645926799121], [8.8178389946896, 59.9509447674419], [8.8093412378685, 59.9397002609412], [8.8270234389306, 59.942747436367], [8.8538042483062, 59.9375543627541], [8.8767224409449, 59.9223614035891], [8.8969797198315, 59.9056663156931], [8.9243613806995, 59.8815893380333], [8.945305347006, 59.8612891411829], [8.9538889397546, 59.8488429316975], [8.9826439754624, 59.8384997024354], [9.0051329884637, 59.82605349295], [8.9990386376122, 59.8181136696576], [9.0069355429409, 59.7938221021791], [9.0215276506134, 59.7524491851309], [9.0307979307819, 59.744251854056], [9.0380939846182, 59.7688867652445], [9.0295103918696, 59.786826474089], [9.0271069859, 59.8090150613441], [9.0307979307819, 59.8342508240249], [9.0124290423, 59.8439502838308], [8.9885666544589, 59.8512463376671] ] + ] + }, + "properties" : { + "feature::id" : 193, + "id" : 92886, + "name" : "Tinnsj", + "lge_id" : "no", + "pfafstette" : 739, + "lke_type" : "B", + "altitude" : 192, + "objectid" : 48692, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 194, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [28.7168387200147, 58.9634453396814], [28.7502288958066, 58.9500978529573], [28.769026963926, 58.9497545092474], [28.7985545229811, 58.952501258927], [28.8261936916316, 58.9564067936276], [28.8361506592199, 58.9661920893609], [28.8337472532503, 58.9816854742721], [28.8220735671123, 58.9947754532137], [28.7861083134957, 59.0035307178173], [28.7432761856803, 59.0047753387658], [28.7247356253434, 58.9953763047061], [28.7098860098883, 58.9895823796008], [28.696581441128, 58.9819429820546], [28.7168387200147, 58.9634453396814] ] + ] + }, + "properties" : { + "feature::id" : 194, + "id" : 91356, + "pfafstette" : 2773, + "lke_type" : "N", + "altitude" : 66, + "objectid" : 48832, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_48832", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 195, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.1433459989013, 60.1904270051273], [15.1369941402674, 60.2022723631203], [15.1174235488006, 60.2105126121589], [15.0988829884637, 60.2074654367332], [15.0884110053104, 60.2038174098151], [15.0713296557407, 60.2099117606665], [15.0476389397546, 60.21901036898], [15.0345918787768, 60.233044543124], [15.0266091375206, 60.2418427256913], [15.0174246932796, 60.2290531724959], [14.9988841329427, 60.2196112204724], [14.9828328145028, 60.2147185726057], [14.9884979857169, 60.2047186870536], [14.9956223676982, 60.1977659769273], [15.0017167185497, 60.1898261536349], [15.0181113806995, 60.190813266801], [15.0436904870903, 60.193474180553], [15.0725313587255, 60.1883669428676], [15.1072090734298, 60.1670796328511], [15.1530454587072, 60.1545905054019], [15.1789679088079, 60.1639895394616], [15.1657491759751, 60.1724872962827], [15.1469511078557, 60.1788820728804], [15.1433459989013, 60.1904270051273] ] + ] + }, + "properties" : { + "feature::id" : 195, + "id" : 91117, + "pfafstette" : 8775, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 48916, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_48916", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 196, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [13.4199322468413, 59.6263562076543], [13.4208764420436, 59.6451542757737], [13.4101469511079, 59.664295687603], [13.3925505859733, 59.664295687603], [13.3791601812855, 59.6630939846182], [13.3752975645486, 59.677986518037], [13.3837953213697, 59.6828791659037], [13.39744323384, 59.677986518037], [13.4011341787219, 59.6892310245376], [13.4005333272295, 59.7087586980406], [13.3993316242447, 59.7208186458524], [13.4008766709394, 59.7284580433986], [13.3877437740341, 59.7410759247391], [13.3574436916316, 59.7475565372642], [13.3437957791613, 59.744251854056], [13.3566711682842, 59.7308614493682], [13.3652547610328, 59.6974712735763], [13.3549544497345, 59.6743384911188], [13.33667139718, 59.6785873695294], [13.3172724775682, 59.677986518037], [13.315641594946, 59.6713342336568], [13.3369289049625, 59.6646390313129], [13.3615638161509, 59.6551541613258], [13.3722933070866, 59.6379011399011], [13.3964990386376, 59.6242103094671], [13.4199322468413, 59.6263562076543] ] + ] + }, + "properties" : { + "feature::id" : 196, + "id" : 94047, + "name" : "Visten", + "pfafstette" : 93431, + "lke_type" : "N", + "altitude" : 107, + "objectid" : 49113, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 197, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [7.9990500824025, 59.6791882210218], [8.0136421900751, 59.6728792803516], [8.026174235488, 59.6728792803516], [8.0369037264237, 59.6737805575902], [8.0371612342062, 59.6831795916499], [8.0256592199231, 59.6968275041201], [8.0297793444424, 59.7035656244278], [8.0273759384728, 59.7144667872185], [8.0097795733382, 59.7245095907343], [7.9799945065006, 59.7226641182934], [7.9401666361472, 59.7199173686138], [7.9169909357261, 59.7177714704267], [7.8975920161143, 59.7181577321003], [7.8739013001282, 59.7281576176524], [7.8522706464018, 59.7466981779894], [7.8279790789233, 59.7530500366233], [7.8243739699689, 59.7421488738326], [7.8602533876579, 59.7206040560337], [7.9213685680278, 59.7065698818898], [7.9587930324117, 59.7044669016664], [7.9675482970152, 59.6928790514558], [7.9838571232375, 59.6850250640908], [7.9990500824025, 59.6791882210218] ] + ] + }, + "properties" : { + "feature::id" : 197, + "id" : 94002, + "name" : "Totak", + "lge_id" : "no", + "pfafstette" : 2773, + "lke_type" : "B", + "altitude" : 702, + "objectid" : 49241, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 198, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.484148965391, 59.7497453534151], [12.477797106757, 59.7609898599158], [12.456595632668, 59.7625349066105], [12.4300723310749, 59.7637366095953], [12.4045790606116, 59.7670842107673], [12.3798583134957, 59.7734360694012], [12.3740214704267, 59.7648953946164], [12.3850084691449, 59.7530500366233], [12.396510483428, 59.7554963605567], [12.4099008881157, 59.7588439617286], [12.423377128731, 59.7436510025636], [12.4411451657206, 59.7324494140267], [12.453591375206, 59.7457969007508], [12.4613166086797, 59.7539942318257], [12.4674109595312, 59.742749725325], [12.4692135140084, 59.7300030900934], [12.4705010529207, 59.7206040560337], [12.4741061618751, 59.7114196117927], [12.4898999725325, 59.7096170573155], [12.498826908991, 59.7071707333822], [12.50535043948, 59.7008188747482], [12.5232901483245, 59.7050677531588], [12.5349638344626, 59.7165697674419], [12.5286119758286, 59.7229645440396], [12.5096422358543, 59.7196169428676], [12.4992560886285, 59.7254537859366], [12.4929042299945, 59.7360974409449], [12.484148965391, 59.7497453534151] ] + ] + }, + "properties" : { + "feature::id" : 198, + "id" : 94031, + "name" : "Bergsjn", + "pfafstette" : 4593, + "lke_type" : "N", + "altitude" : 113, + "objectid" : 49340, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 199, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.7195740249039, 59.5847257828237], [14.7297885002747, 59.5752838308002], [14.743093069035, 59.5703911829335], [14.7515049899286, 59.579489791247], [14.7512474821461, 59.5907772157114], [14.7524491851309, 59.6002191677348], [14.7539083958982, 59.6105623969969], [14.743093069035, 59.6090173503021], [14.7285009613624, 59.6062706006226], [14.7212049075261, 59.603523850943], [14.7124496429226, 59.6029229994506], [14.703866050174, 59.6117640999817], [14.6874713880242, 59.6223648370262], [14.6740809833364, 59.6354548159678], [14.68283624794, 59.6354548159678], [14.6977716993225, 59.6275579106391], [14.7090162058231, 59.643094213514], [14.6957974729903, 59.6569996337667], [14.6700466947446, 59.6573429774767], [14.6488452206556, 59.6591455319538], [14.6321072147958, 59.6524932475737], [14.6321072147958, 59.6442959164988], [14.6400041201245, 59.6324505585058], [14.6484160410181, 59.6230086064823], [14.676484389306, 59.6132662287127], [14.7078145028383, 59.596184879143], [14.7195740249039, 59.5847257828237] ] + ] + }, + "properties" : { + "feature::id" : 199, + "id" : 94298, + "pfafstette" : 8783, + "lke_type" : "N", + "altitude" : 189, + "objectid" : 49348, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_49348", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 200, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [13.1853426570225, 59.7491445019227], [13.1771024079839, 59.7646378868339], [13.1701496978575, 59.7832213651346], [13.1646561984985, 59.8032211362388], [13.1591626991394, 59.8218046145395], [13.1464589818715, 59.8281135552097], [13.1318668741989, 59.814208134957], [13.130836843069, 59.7940796099615], [13.1260300311298, 59.7807750412012], [13.1267167185497, 59.7658825077824], [13.1420813495697, 59.75060371269], [13.1549567386926, 59.7360974409449], [13.1752998535067, 59.7181577321003], [13.1967588353781, 59.7032651986815], [13.2320374015748, 59.6816345449551], [13.2637108588171, 59.6606476606849], [13.2800196850394, 59.6455834554111], [13.30628547885, 59.62206441128], [13.3176158212782, 59.5953265198682], [13.3083455411097, 59.5731379326131], [13.3083455411097, 59.5621938518586], [13.3181308368431, 59.5442541430141], [13.3297186870537, 59.5345546832082], [13.3393323109321, 59.5627517853873], [13.3372722486724, 59.5974295000916], [13.3256843984618, 59.6139099981688], [13.3172724775682, 59.6275579106391], [13.30628547885, 59.6500469236404], [13.2785604742721, 59.6746818348288], [13.2546122505036, 59.6934799029482], [13.2371017212965, 59.7032651986815], [13.2197628639443, 59.7089732878594], [13.2114367789782, 59.7260117194653], [13.1987330617103, 59.7403034013917], [13.1853426570225, 59.7491445019227] ] + ] + }, + "properties" : { + "feature::id" : 200, + "id" : 93648, + "name" : "Mellan Fryken", + "pfafstette" : 633, + "lke_type" : "N", + "altitude" : 65, + "objectid" : 49454, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 201, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.3430118110236, 59.7300030900934], [14.3381191631569, 59.7406038271379], [14.3339990386376, 59.762449070683], [14.3275613440762, 59.78832860282], [14.3171751968504, 59.7913757782457], [14.3210378135873, 59.7795304202527], [14.31992194653, 59.7709897454679], [14.310565830434, 59.7740369208936], [14.2938278245743, 59.7746806903498], [14.2836991851309, 59.7606465162058], [14.2755447720198, 59.7509041384362], [14.2521973997437, 59.7545950833181], [14.2424121040103, 59.7494020097052], [14.256317524263, 59.7342519685039], [14.2732272019777, 59.730904367332], [14.2849008881157, 59.7315052188244], [14.2946861838491, 59.7175568806079], [14.3019822376854, 59.7063123741073], [14.3175185405603, 59.702020577733], [14.3271321644388, 59.7023210034792], [14.3427543032412, 59.7060119483611], [14.3585481138986, 59.7105612525179], [14.3505653726424, 59.7196169428676], [14.3430118110236, 59.7300030900934] ] + ] + }, + "properties" : { + "feature::id" : 201, + "id" : 93674, + "name" : "Yngen", + "pfafstette" : 86451, + "lke_type" : "N", + "altitude" : 203, + "objectid" : 49558, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 202, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.5054133858268, 59.6922781999634], [14.534597601172, 59.6664415857901], [14.5488463651346, 59.6545962277971], [14.5491038729171, 59.6822783144113], [14.5485888573521, 59.703866050174], [14.5412928035159, 59.7089732878594], [14.5388035616188, 59.6965270783739], [14.5333100622597, 59.6895743682476], [14.5224947353965, 59.7016772340231], [14.5208638527742, 59.7242520829518], [14.5196621497894, 59.7418484480864], [14.5002632301776, 59.7479427989379], [14.4817226698407, 59.7412046786303], [14.4792334279436, 59.7242520829518], [14.4725382255997, 59.7160118339132], [14.4560577275224, 59.7245095907343], [14.4370021516206, 59.7272563404138], [14.4403497527925, 59.7187585835927], [14.4606928676067, 59.7096170573155], [14.4713365226149, 59.69017521974], [14.4846410913752, 59.6771281587621], [14.4939113715437, 59.6849392281633], [14.5054133858268, 59.6922781999634] ] + ] + }, + "properties" : { + "feature::id" : 202, + "id" : 93907, + "name" : "Torrvarpen", + "pfafstette" : 8793, + "lke_type" : "N", + "altitude" : 178, + "objectid" : 49609, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 203, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [9.9937053653177, 59.6087169245559], [10.0246921351401, 59.6004766755173], [10.0246921351401, 59.60704312397], [10.0112158945248, 59.6184163843618], [10.0024606299213, 59.6333089177806], [9.9926753341879, 59.6451542757737], [9.9759373283282, 59.6555404229995], [9.943405511811, 59.673480131844], [9.9055518677898, 59.6895743682476], [9.8745650979674, 59.7028789370079], [9.8620330525545, 59.7111191860465], [9.852934444241, 59.7163122596594], [9.8359389305988, 59.7229645440396], [9.8191150888116, 59.7196169428676], [9.8149091283648, 59.7102179088079], [9.8290720563999, 59.7047673274126], [9.8601446621498, 59.6905185634499], [9.8939640175792, 59.6707333821644], [9.9169680461454, 59.6585875984252], [9.9319034975279, 59.6497464978942], [9.9434913477385, 59.6424504440579], [9.9550791979491, 59.633909769273], [9.9689846182018, 59.6236094579747], [9.9937053653177, 59.6087169245559] ] + ] + }, + "properties" : { + "feature::id" : 203, + "id" : 94354, + "name" : "Fiskumvatnet-Eikeren", + "lge_id" : "no", + "pfafstette" : 1417, + "lke_type" : "B", + "altitude" : 21, + "objectid" : 49824, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 204, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.6163134041384, 59.5570007782457], [14.6239528016847, 59.547601744186], [14.6384590734298, 59.549447216627], [14.6355406518953, 59.5661852224867], [14.6226652627724, 59.5834811618751], [14.6159700604285, 59.5865712552646], [14.6093606940121, 59.5886313175243], [14.6061847646951, 59.6045109641091], [14.6137383263139, 59.6163563221022], [14.6269570591467, 59.6282016800952], [14.6235236220473, 59.6433088033327], [14.6122791155466, 59.6451542757737], [14.6057555850577, 59.647600599707], [14.5933093755723, 59.6545962277971], [14.5829232283465, 59.6485447949093], [14.5829232283465, 59.6336522614906], [14.5913351492401, 59.617558025087], [14.5904767899652, 59.5992320545688], [14.5849832906061, 59.5806914942318], [14.5947685863395, 59.5740392098517], [14.609875709577, 59.5685886284563], [14.6163134041384, 59.5570007782457] ] + ] + }, + "properties" : { + "feature::id" : 204, + "id" : 94356, + "name" : "Halvarsnoren", + "pfafstette" : 87575, + "lke_type" : "N", + "altitude" : 234, + "objectid" : 49826, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 205, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.6147912470244, 59.603523850943], [12.607838536898, 59.6145108496612], [12.6010574986266, 59.631248855521], [12.6047484435085, 59.6439096548251], [12.6075810291156, 59.6557550128182], [12.5868945705915, 59.6630939846182], [12.5634613623879, 59.6588021882439], [12.5604571049259, 59.6421071003479], [12.5359080296649, 59.6463559787585], [12.4968526826589, 59.6706475462369], [12.4816597234939, 59.6785873695294], [12.4783979582494, 59.6710338079106], [12.4595140542025, 59.6676862067387], [12.4370250412013, 59.6765273072697], [12.4303298388574, 59.6828791659037], [12.4262955502655, 59.6767848150522], [12.4443210950376, 59.6664415857901], [12.4894707928951, 59.6439096548251], [12.5287836476836, 59.6227081807361], [12.5397706464018, 59.6126653772203], [12.5510151529024, 59.5983736952939], [12.574963376671, 59.5804339864494], [12.5905855154734, 59.5627517853873], [12.5981390770921, 59.5570007782457], [12.6098985991577, 59.5500480681194], [12.634876854056, 59.5415073933346], [12.6665503112983, 59.5306062305439], [12.6895543398645, 59.5193617240432], [12.7050906427394, 59.5129669474455], [12.7085240798389, 59.4992761170115], [12.7129017121406, 59.4895766572056], [12.7394250137338, 59.4788900842337], [12.7677508698041, 59.4576456921809], [12.7719568302509, 59.4448990569493], [12.7692959164988, 59.4354141869621], [12.7785661966673, 59.4226675517304], [12.7901540468779, 59.4105217679912], [12.8092954587072, 59.3962300860648], [12.8280935268266, 59.3807367011536], [12.8352179088079, 59.3707368156015], [12.8476641182934, 59.3734406473173], [12.8486083134957, 59.3850284975279], [12.8425139626442, 59.396530511811], [12.8242309100897, 59.4099209164988], [12.795647546237, 59.4366588079106], [12.7793387200147, 59.4600920161143], [12.7713559787585, 59.47047816334], [12.7585664255631, 59.4794909357261], [12.7452618568028, 59.4880316105109], [12.7360774125618, 59.4929242583776], [12.729038866508, 59.5047696163706], [12.7248329060612, 59.5187608725508], [12.7212277971068, 59.5278594808643], [12.7309272569127, 59.5388035616187], [12.7375366233291, 59.547601744186], [12.7250904138436, 59.5563999267533], [12.7163351492401, 59.567644433254], [12.7060348379418, 59.5837386696576], [12.6840608405054, 59.5847257828237], [12.6680095220656, 59.5813781816517], [12.6489539461637, 59.5853266343161], [12.6279241439297, 59.587172106757], [12.6195980589636, 59.5959702893243], [12.6147912470244, 59.603523850943] ] + ] + }, + "properties" : { + "feature::id" : 205, + "id" : 94519, + "name" : "Glafsfjorden", + "pfafstette" : 45111, + "lke_type" : "N", + "altitude" : 47, + "objectid" : 49951, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 206, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.8691231001648, 59.4409076863212], [12.8779642006959, 59.4309078007691], [12.8944446987731, 59.4263155786486], [12.9096376579381, 59.4394055575902], [12.931525819447, 59.4615512268815], [12.958907480315, 59.4728386513459], [12.9777913843619, 59.4846840093389], [12.9786497436367, 59.5047696163706], [12.9652593389489, 59.5351555347006], [12.9560748947079, 59.5624942776048], [12.955559879143, 59.5861849935909], [12.9479204815968, 59.6108628227431], [12.9341867331991, 59.6260557819081], [12.9394227247757, 59.635755241714], [12.9443153726424, 59.6424504440579], [12.934358405054, 59.6588021882439], [12.9199379692364, 59.6664415857901], [12.9050025178539, 59.6685874839773], [12.8935863394983, 59.670132530672], [12.9013974088995, 59.6600468091925], [12.9153886650797, 59.6454976194836], [12.9145303058048, 59.6333089177806], [12.9162470243545, 59.6150687831899], [12.9135861106025, 59.5935239653909], [12.8815693096503, 59.5910776414576], [12.8509258835378, 59.6059701748764], [12.8444881889764, 59.6227081807361], [12.8352179088079, 59.6251115867057], [12.8190807544406, 59.6233090322285], [12.8111838491119, 59.6135237364951], [12.8152181377037, 59.59901746475], [12.8276643471892, 59.5889746612342], [12.8476641182934, 59.576485533785], [12.8644021241531, 59.5649406015382], [12.8750457791613, 59.5618934261124], [12.891955456876, 59.5637388985534], [12.9044016663615, 59.5549407159861], [12.9190796099616, 59.5418936550082], [12.9346159128365, 59.5284603323567], [12.9327275224318, 59.5178166773485], [12.9331567020692, 59.509876854056], [12.9396802325582, 59.4941259613624], [12.9350450924739, 59.4734395028383], [12.9153886650797, 59.4603924418605], [12.8959897454679, 59.4603924418605], [12.8780500366233, 59.4543410089727], [12.8691231001648, 59.4409076863212] ] + ] + }, + "properties" : { + "feature::id" : 206, + "id" : 94531, + "name" : "Varmeln", + "pfafstette" : 62153, + "lke_type" : "N", + "altitude" : 76, + "objectid" : 49983, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 207, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [6.6891079930416, 59.5880304660319], [6.6706532686321, 59.5800906427394], [6.6578637154367, 59.565798960813], [6.6492801226882, 59.5536960950375], [6.641125709577, 59.546099615455], [6.6206967588354, 59.5470008926936], [6.601555347006, 59.5433528657755], [6.5928000824025, 59.5327092107673], [6.6058471433803, 59.5263573521333], [6.6213834462553, 59.5318079335287], [6.6449883263139, 59.5403056903497], [6.6686790423, 59.5506489196118], [6.6778634865409, 59.567644433254], [6.6927989379235, 59.5758846822926], [6.7140004120125, 59.5831378181652], [6.7370902765061, 59.5925797701886], [6.7626693828969, 59.5950260941219], [6.7885918329976, 59.6010775270097], [6.7970037538912, 59.6233090322285], [6.7915102545321, 59.6461413889398], [6.780008240249, 59.6469997482146], [6.777003982787, 59.6394032686321], [6.7764031312946, 59.6263562076543], [6.7680770463285, 59.6126653772203], [6.7544291338583, 59.6093177760483], [6.7316826130745, 59.6047255539278], [6.7113394982604, 59.5937385552097], [6.6891079930416, 59.5880304660319] ] + ] + }, + "properties" : { + "feature::id" : 207, + "id" : 94554, + "name" : "Suldalsvatnet", + "lge_id" : "no", + "pfafstette" : 193, + "lke_type" : "B", + "altitude" : 68, + "objectid" : 50057, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 208, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [7.5708146401758, 59.8272981138985], [7.5783682017945, 59.8351521012635], [7.5881534975279, 59.8357100347922], [7.599827183666, 59.8363108862846], [7.6089257919795, 59.8466970335103], [7.5969087621315, 59.8600445202344], [7.5778531862296, 59.8749370536532], [7.5668661875115, 59.8801301272661], [7.5575100714155, 59.8776838033327], [7.5352785661967, 59.8749370536532], [7.5018025544772, 59.8798297015199], [7.4897855246292, 59.8905162744919], [7.4826611426479, 59.8989281953855], [7.4709874565098, 59.9117606665446], [7.4612021607764, 59.9229622550815], [7.4614596685589, 59.9087134911188], [7.4718458157847, 59.8913746337667], [7.4721891594946, 59.8846365134591], [7.4714166361472, 59.8703877494964], [7.5010300311298, 59.8582848837209], [7.5444630104377, 59.8484995879875], [7.5642052737594, 59.8339503982787], [7.5708146401758, 59.8272981138985] ] + ] + }, + "properties" : { + "feature::id" : 208, + "id" : 93151, + "name" : "Songevatnet", + "lge_id" : "no", + "pfafstette" : 2919, + "lke_type" : "B", + "altitude" : 965, + "objectid" : 50335, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 209, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.2011479124703, 59.2138716581212], [12.193851858634, 59.2257170161143], [12.1897317341146, 59.2415966626991], [12.1750537905146, 59.2430558734664], [12.1646676432888, 59.2445580021974], [12.1585732924373, 59.2585492583776], [12.1547106757004, 59.2670470151987], [12.1498180278337, 59.2761456235122], [12.1548823475554, 59.2864888527742], [12.1582299487274, 59.2971325077825], [12.1510197308185, 59.3071753112983], [12.1479296374291, 59.3144713651346], [12.1498180278337, 59.3445997756821], [12.1379726698407, 59.3785908029665], [12.1184020783739, 59.3910799304157], [12.1091317982055, 59.3822817478484], [12.1159986724043, 59.3688913431606], [12.1269856711225, 59.3588914576085], [12.1220930232558, 59.3512520600623], [12.1169428676067, 59.3418101080388], [12.1164278520418, 59.3159734938656], [12.1067283922359, 59.2989779802234], [12.1008057132393, 59.2904802234023], [12.1079300952207, 59.2777335881707], [12.1105910089727, 59.2667465894525], [12.1187454220839, 59.2549012314594], [12.133080021974, 59.2412104010254], [12.1287882255997, 59.2299658945248], [12.1296465848746, 59.2199660089727], [12.1493888481963, 59.215416704816], [12.1680152444607, 59.215073361106], [12.1771138527742, 59.2069189479949], [12.1904184215345, 59.1986786989562], [12.2114482237686, 59.186532915217], [12.2214051913569, 59.1679923548801], [12.2309329793078, 59.1634430507233], [12.238744048709, 59.1752884087164], [12.226898690716, 59.1926272660685], [12.2157400201428, 59.2077773072697], [12.2011479124703, 59.2138716581212] ] + ] + }, + "properties" : { + "feature::id" : 209, + "id" : 96112, + "name" : "Vastra Silen", + "pfafstette" : 241, + "lke_type" : "N", + "altitude" : 140, + "objectid" : 50689, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 210, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.2129932704633, 59.3187202435451], [12.2282720655558, 59.3227116141732], [12.2433791887933, 59.3397071278154], [12.2621772569127, 59.346445248123], [12.275310153818, 59.3594923091009], [12.2698166544589, 59.3701359641091], [12.2580571323933, 59.3752432017945], [12.2475851492401, 59.379835423915], [12.2346239241897, 59.382839681377], [12.2158258560703, 59.3737410730635], [12.2042380058597, 59.3436555804798], [12.2129932704633, 59.3187202435451] ] + ] + }, + "properties" : { + "feature::id" : 210, + "id" : 96125, + "name" : "J?rnsjn", + "pfafstette" : 24281, + "lke_type" : "N", + "altitude" : 138, + "objectid" : 50729, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 2 + } + }, { + "type" : "Feature", + "id" : 211, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [9.353798525911, 59.3056731825673], [9.3396355978759, 59.3081195065006], [9.3186057956418, 59.3123683849112], [9.2991210401026, 59.322411188427], [9.2839280809376, 59.3345569721663], [9.2741427852042, 59.3436555804798], [9.2653875206006, 59.352797106757], [9.2580914667643, 59.36498580846], [9.2619540835012, 59.3850284975279], [9.2583489745468, 59.3974747070134], [9.2434135231643, 59.3938266800952], [9.2373191723128, 59.3837838765794], [9.2321690166636, 59.3752432017945], [9.2118259018495, 59.3792345724226], [9.1896802325581, 59.3862302005127], [9.1872768265885, 59.3756294634682], [9.2019547701886, 59.3630974180553], [9.2197228071782, 59.3491061618751], [9.2364608130379, 59.3342136284563], [9.2495078740158, 59.3342136284563], [9.256803927852, 59.3291063907709], [9.2688209577001, 59.3193210950375], [9.2792929408533, 59.3107804202527], [9.2768895348837, 59.2965316562901], [9.2876190258195, 59.2874759659403], [9.3303653177074, 59.2856304934994], [9.3689056491485, 59.2777335881707], [9.3857294909357, 59.2688495696759], [9.3975748489288, 59.2552016572056], [9.4137120032961, 59.235116050174], [9.4345701336752, 59.2312105154734], [9.4541407251419, 59.2285066837576], [9.471651254349, 59.2136141503388], [9.4944836110603, 59.19837827321], [9.5280454587072, 59.194043558872], [9.5267579197949, 59.1980778474638], [9.4961144936825, 59.2129703808826], [9.4792906518953, 59.2281633400476], [9.4538832173595, 59.2418112525178], [9.4252998535067, 59.26648908167], [9.4137120032961, 59.2773902444607], [9.3955147866691, 59.2840854468046], [9.3698498443509, 59.2989779802234], [9.353798525911, 59.3056731825673] ] + ] + }, + "properties" : { + "feature::id" : 211, + "id" : 96134, + "name" : "Nordsj", + "lge_id" : "no", + "pfafstette" : 173, + "lke_type" : "B", + "altitude" : 17, + "objectid" : 50752, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 212, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [10.8586740065922, 59.4336545504486], [10.850862937191, 59.4281610510895], [10.8352407983886, 59.4117663889398], [10.8239962918879, 59.3886765244461], [10.8474295000916, 59.3728827137887], [10.8729227705548, 59.3740414988097], [10.8817638710859, 59.3719385185863], [10.8876865500824, 59.3676896401758], [10.8945534242813, 59.3874748214613], [10.908458844534, 59.3847280717817], [10.9235659677715, 59.3670887886834], [10.9179866324849, 59.3850284975279], [10.9088021882439, 59.4111226194836], [10.9030511811024, 59.4257147271562], [10.8982443691632, 59.4397059833364], [10.8917208386742, 59.45580021974], [10.8838239333455, 59.4537401574803], [10.875240340597, 59.4394484755539], [10.8586740065922, 59.4336545504486] ] + ] + }, + "properties" : { + "feature::id" : 212, + "id" : 95776, + "name" : "Vannsj", + "lge_id" : "no", + "pfafstette" : 33, + "lke_type" : "B", + "altitude" : 33, + "objectid" : 50834, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 213, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.4426501556492, 59.3934833363853], [8.468057590185, 59.3874748214613], [8.4761261673686, 59.3874748214613], [8.461705731551, 59.3928824848929], [8.4475428035158, 59.3989768357444], [8.4033373008607, 59.4029682063725], [8.3569859000183, 59.4041699093573], [8.322479857169, 59.4108221937374], [8.2853987364952, 59.4151139901117], [8.2365580937557, 59.4239550906427], [8.1852282091192, 59.4318090780077], [8.1338124885552, 59.4370021516206], [8.0811950650064, 59.4488475096136], [8.0432555850577, 59.4545985167552], [8.0181056583043, 59.4497058688885], [8.0289209851676, 59.4439548617469], [8.0578476927303, 59.4448990569493], [8.0823967679912, 59.4427531587621], [8.1022248672404, 59.4375600851492], [8.1191345449551, 59.4317661600439], [8.1477179088079, 59.4248134499176], [8.1921809192456, 59.4154144158579], [8.2417082494049, 59.4074745925655], [8.3078877494964, 59.4001356207654], [8.3882301776232, 59.3944275315876], [8.4426501556492, 59.3934833363853] ] + ] + }, + "properties" : { + "feature::id" : 213, + "id" : 95789, + "name" : "Bandak", + "lge_id" : "no", + "pfafstette" : 2333, + "lke_type" : "B", + "altitude" : 74, + "objectid" : 50850, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 214, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [6.9720232100348, 59.3862302005127], [6.967817249588, 59.3853289232741], [6.9626670939388, 59.3843847280718], [6.9456715802967, 59.398375984252], [6.9340837300861, 59.4181182475737], [6.9183757553562, 59.4275601995971], [6.8991485075993, 59.4366588079106], [6.882839681377, 59.4409076863212], [6.870822651529, 59.4351995971434], [6.8776036898004, 59.4309078007691], [6.8796637520601, 59.4242125984252], [6.859148965391, 59.4174744781176], [6.83494323384, 59.4129680919246], [6.8353724134774, 59.3992772614906], [6.8508228804248, 59.3919812076543], [6.8644707928951, 59.3874748214613], [6.8611231917231, 59.3774320179454], [6.8715093389489, 59.3707368156015], [6.8933116645303, 59.3621961408167], [6.9028394524812, 59.3549430049441], [6.9101355063175, 59.340951748764], [6.9161440212415, 59.3208661417323], [6.9326245193188, 59.3126688106574], [6.9571735945798, 59.3233124656656], [6.9733107489471, 59.3612948635781], [6.9720232100348, 59.3862302005127] ] + ] + }, + "properties" : { + "feature::id" : 214, + "id" : 95744, + "name" : "Blsj", + "lge_id" : "no", + "pfafstette" : 53, + "lke_type" : "B", + "altitude" : 1121, + "objectid" : 51118, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 215, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [6.8647283006775, 59.16099672679], [6.8447285295733, 59.1515976927303], [6.8426684673137, 59.1461041933712], [6.8563163797839, 59.1497093023256], [6.8836980406519, 59.1455033418788], [6.898204312397, 59.1485505173045], [6.9106505218824, 59.1643014099982], [6.94043558872, 59.1737862799853], [6.9601778520418, 59.1789793535982], [6.9806926387109, 59.186532915217], [7.004040010987, 59.199880401941], [7.0307349844351, 59.215073361106], [7.04661463102, 59.2244723951657], [7.0305633125801, 59.2260603598242], [7.0144261582128, 59.2209102041751], [6.9997482146127, 59.2196655832265], [6.9870444973448, 59.2138716581212], [6.9818085057682, 59.202884659403], [6.964469648416, 59.2020263001282], [6.9462724317891, 59.2095798617469], [6.9346845815785, 59.2093652719282], [6.9308219648416, 59.1962752929866], [6.9265301684673, 59.1877346182018], [6.9164873649515, 59.180181056583], [6.9079896081304, 59.1761467679912], [6.8940841878777, 59.179193943417], [6.8814663065373, 59.1703957608497], [6.8647283006775, 59.16099672679] ], + [ [6.961465390954, 59.1843870170298], [6.9508217359458, 59.1877346182018], [6.9617228987365, 59.1929276918147], [6.9724523896722, 59.1895800906427], [6.961465390954, 59.1843870170298] ] + ] + }, + "properties" : { + "feature::id" : 215, + "id" : 96874, + "name" : "Svartevatnet", + "lge_id" : "no", + "pfafstette" : 793, + "lke_type" : "B", + "altitude" : 1227, + "objectid" : 51224, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 216, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.8535410181286, 59.0525001144479], [16.8611804156748, 59.050654642007], [16.875, 59.0494100210584], [16.881008514924, 59.0488520875298], [16.8925963651346, 59.0497962827321], [16.9030683482879, 59.0543455868889], [16.9183471433803, 59.0439594396631], [16.9211797289874, 59.0269639260209], [16.9131969877312, 59.0169640404688], [16.8955147866691, 59.0166206967588], [16.8828110694012, 59.0145177165354], [16.875, 59.013916865043], [16.8633263138619, 59.012929751877], [16.8149148507599, 59.0294102499542], [16.7851297839224, 59.0431010803882], [16.7648725050357, 59.0549464383813], [16.7384350393701, 59.0621995742538], [16.7234995879876, 59.0567489928585], [16.7180060886285, 59.0509550677532], [16.7369758286028, 59.0406547564549], [16.7524262955503, 59.0351612570958], [16.7731127540744, 59.0294102499542], [16.7955159311482, 59.0278222852957], [16.8079621406336, 59.0282085469694], [16.8186057956418, 59.0205691494232], [16.8332837392419, 59.0151614859916], [16.8532835103461, 59.0102688381249], [16.8556869163157, 59.0010843938839], [16.8559444240982, 58.980698361106], [16.871824070683, 58.9676513001282], [16.875, 58.970526803699], [16.8879612250504, 58.9822863257645], [16.9045275590551, 58.9984663980956], [16.9283899468962, 59.0062774674968], [16.9460721479582, 59.0127151620582], [16.9602350759934, 59.0172215482512], [16.9738829884636, 59.0241742583776], [16.9872733931514, 59.0312128044314], [17.0044405786486, 59.0235734068852], [17.0222086156382, 59.016921122505], [17.0531953854605, 59.0153760758103], [17.0874439205274, 59.0059770417506], [17.1062419886468, 58.991384934078], [17.1159414484527, 58.9923291292804], [17.1074436916316, 59.0053761902582], [17.095855841421, 59.0133160135506], [17.0770577733016, 59.0245605200513], [17.0593755722395, 59.0370067295367], [17.0490752609412, 59.0415560336935], [17.0390324574254, 59.0485945797473], [17.0278737868522, 59.0546460126351], [17.0044405786486, 59.0588519730819], [17.0014363211866, 59.0625], [16.9952561344076, 59.0700535616188], [16.983668284197, 59.0779933849112], [16.9726812854788, 59.0755470609778], [16.9683036531771, 59.0667917963743], [16.9661577549899, 59.0625], [16.9640118568028, 59.0582511215895], [16.9724237776964, 59.0564056491485], [16.9903634865409, 59.0582511215895], [17.0119941402673, 59.0531009659403], [17.0227236312031, 59.0418564594397], [17.0083031953855, 59.0363629600806], [16.9700203717268, 59.0445602911555], [16.9440979216261, 59.0551610282], [16.9313942043582, 59.0615987227614], [16.9216089086248, 59.0625], [16.9083043398645, 59.0637446209485], [16.8913946621498, 59.0664913706281], [16.875, 59.07018231551], [16.8712232191906, 59.0710406747848], [16.8538843618385, 59.0813839040469], [16.8422965116279, 59.0901391686504], [16.8371463559788, 59.0758904046878], [16.8461591283648, 59.0625], [16.848133354697, 59.0594528245743], [16.8535410181286, 59.0525001144479] ] + ] + }, + "properties" : { + "feature::id" : 216, + "id" : 96996, + "name" : "Baven", + "pfafstette" : 435, + "lke_type" : "N", + "altitude" : 31, + "objectid" : 51231, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 217, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.9270222944516, 59.3138705136422], [8.9161211316609, 59.3172610327779], [8.8726023164256, 59.3139134316059], [8.8313152353049, 59.3211665674785], [8.8170664713423, 59.3333123512177], [8.8082253708112, 59.3324110739791], [8.7714875938473, 59.3248145943966], [8.7280546145395, 59.3166601812855], [8.7213594121956, 59.3065744598059], [8.743161737777, 59.3078190807544], [8.7729468046145, 59.3130121543673], [8.8090837300861, 59.3078190807544], [8.8449631477751, 59.3032268586339], [8.8772374565098, 59.3075186550082], [8.9070225233474, 59.3108662561802], [8.9270222944516, 59.3138705136422] ] + ] + }, + "properties" : { + "feature::id" : 217, + "id" : 96462, + "name" : "Flvatn", + "lge_id" : "no", + "pfafstette" : 2155, + "lke_type" : "B", + "altitude" : 605, + "objectid" : 51287, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 218, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.4890015564915, 59.0305690349753], [8.5059112342062, 59.0454615683941], [8.5115764054203, 59.0625], [8.5121772569127, 59.0643454724409], [8.5236792711958, 59.0779933849112], [8.5364688243911, 59.1029287218458], [8.5216192089361, 59.1257181605933], [8.5112330617103, 59.1464475370811], [8.5066837575536, 59.1673485854239], [8.5075421168284, 59.1832282320088], [8.5138939754624, 59.199880401941], [8.503937007874, 59.2105240569493], [8.4930358450833, 59.2220689891961], [8.5027353048892, 59.2397511902582], [8.5192158029665, 59.2609955823109], [8.5210183574437, 59.2780340139169], [8.522477568211, 59.2858880012818], [8.5309753250321, 59.2971325077825], [8.5124347646951, 59.3199648644937], [8.4822205182201, 59.3279046877861], [8.4742377769639, 59.3126258926936], [8.4871131660868, 59.3047719053287], [8.4924349935909, 59.2962741485076], [8.479731276323, 59.2907806491485], [8.4693451290972, 59.2887205868888], [8.4761261673686, 59.2752872642373], [8.4790445889031, 59.2630556445706], [8.4626499267533, 59.2582488326314], [8.45286463102, 59.2415108267717], [8.4553538729171, 59.2226698406885], [8.4629074345358, 59.1917259888299], [8.4704609961546, 59.1606963010438], [8.46754257462, 59.1503959897455], [8.4687442776048, 59.1397094167735], [8.4741519410364, 59.1333146401758], [8.4872848379418, 59.1123706738693], [8.5031644845266, 59.0910833638528], [8.4906324391137, 59.0822851812855], [8.4716626991394, 59.0706973310749], [8.468057590185, 59.0625], [8.4644524812305, 59.0543455868889], [8.4732935817616, 59.0370067295367], [8.4890015564915, 59.0305690349753] ] + ] + }, + "properties" : { + "feature::id" : 218, + "id" : 96502, + "name" : "Nisser", + "lge_id" : "no", + "pfafstette" : 7731, + "lke_type" : "B", + "altitude" : 246, + "objectid" : 51381, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 219, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.3644078465483, 59.2482489470793], [12.344579747299, 59.2406095495331], [12.341575489837, 59.2327126442044], [12.3488715436733, 59.2267041292803], [12.3397729353598, 59.2230131843985], [12.3220048983703, 59.2184638802417], [12.3027776506135, 59.2172192592932], [12.2939365500824, 59.2455021973997], [12.2907606207654, 59.2652444607215], [12.2756534975279, 59.2618968595495], [12.2698166544589, 59.2521973997436], [12.2780569034975, 59.2403091237869], [12.2826062076543, 59.2303092382347], [12.2747093023256, 59.2157171305622], [12.2612330617103, 59.2117257599341], [12.2522202893243, 59.2050734755539], [12.2446667277056, 59.1953310977843], [12.2438942043582, 59.1874341924556], [12.2546236952939, 59.1879921259842], [12.2731642556308, 59.1928847738509], [12.290503112983, 59.1944727385094], [12.3120479307819, 59.1889792391503], [12.3276700695843, 59.171339956052], [12.3366828419703, 59.1524560520051], [12.3486140358909, 59.1597950238052], [12.3474123329061, 59.1934856253433], [12.3570259567845, 59.2086785845083], [12.3731631111518, 59.2147729353598], [12.3820042116829, 59.216918833547], [12.3895577733016, 59.250137337484], [12.3771115638162, 59.2822399743637], [12.3716180644571, 59.2667465894525], [12.3759956967588, 59.2521973997436], [12.3644078465483, 59.2482489470793] ] + ] + }, + "properties" : { + "feature::id" : 219, + "id" : 96719, + "name" : "Ostra Silen", + "pfafstette" : 2421, + "lke_type" : "N", + "altitude" : 108, + "objectid" : 51523, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 220, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [13.7180404229995, 59.5020228666911], [13.726967359458, 59.4859286302875], [13.7406152719282, 59.4840831578465], [13.7512589269365, 59.5008211637063], [13.7479113257645, 59.5184604468046], [13.7248214612708, 59.5245547976561], [13.7111735488006, 59.5276019730819], [13.7032766434719, 59.5354130424831], [13.6879978483794, 59.5512926890679], [13.6655088353781, 59.5563999267533], [13.6420756271745, 59.5512926890679], [13.6260243087347, 59.5318079335287], [13.6296294176891, 59.5078167917964], [13.647998306171, 59.507215940304], [13.6472257828237, 59.5192758881157], [13.6445648690716, 59.5329667185497], [13.6619037264237, 59.5370010071416], [13.6822468412379, 59.5288036760667], [13.6980406518953, 59.5211642785204], [13.7123752517854, 59.5160141228713], [13.7180404229995, 59.5020228666911] ] + ] + }, + "properties" : { + "feature::id" : 220, + "id" : 95055, + "pfafstette" : 93215, + "lke_type" : "N", + "altitude" : 73, + "objectid" : 51626, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_51626", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 221, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.5090413843619, 59.519061298297], [12.5029470335104, 59.5245547976561], [12.48998580846, 59.5287607581029], [12.4743636696576, 59.5323658670573], [12.4558231093207, 59.5293616095953], [12.4280122688152, 59.5227093252152], [12.4135918329976, 59.5348551089544], [12.4020898187145, 59.5424086705732], [12.3889569218092, 59.5296620353415], [12.3896436092291, 59.5135677989379], [12.4099008881157, 59.5041687648782], [12.4269822376854, 59.4962289415858], [12.4433768998352, 59.492022981139], [12.4613166086797, 59.4823235213331], [12.4737628181652, 59.4697914759202], [12.4870673869255, 59.4627958478301], [12.496337667094, 59.4679460034792], [12.507839681377, 59.481336408167], [12.5249210309467, 59.4849844350852], [12.5254360465116, 59.5023232924373], [12.5090413843619, 59.519061298297] ] + ] + }, + "properties" : { + "feature::id" : 221, + "id" : 95301, + "name" : "Stora Gla", + "pfafstette" : 4525, + "lke_type" : "N", + "altitude" : 147, + "objectid" : 51685, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 222, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.3387200146493, 59.3731831395349], [14.3545138253067, 59.3716380928401], [14.3661875114448, 59.3722389443325], [14.380178767625, 59.3737839910273], [14.389191540011, 59.3846422358542], [14.3999210309467, 59.3986764099982], [14.4128822559971, 59.4050282686321], [14.4205216535433, 59.4215087667094], [14.4126247482146, 59.4424527330159], [14.3981184764695, 59.4330107809925], [14.386015610694, 59.4135689434169], [14.3691917689068, 59.3992772614906], [14.3573464109138, 59.3938266800952], [14.3573464109138, 59.401380241714], [14.3730543856437, 59.4093200650064], [14.3846422358543, 59.4168736266252], [14.36498580846, 59.4202212277971], [14.3372608038821, 59.4166161188427], [14.3250721021791, 59.4187190990661], [14.3114241897089, 59.4223671259843], [14.2989779802234, 59.4342124839773], [14.2964887383263, 59.4564439891961], [14.3108233382165, 59.4658859412196], [14.3256729536715, 59.4795767716535], [14.3034414484527, 59.505370467863], [14.277347326497, 59.5086751510712], [14.2646436092291, 59.4780317249588], [14.2479056033694, 59.4570448406885], [14.2385494872734, 59.4658430232558], [14.22876419154, 59.4661863669658], [14.2233565281084, 59.4515513413294], [14.2339143471892, 59.4448990569493], [14.249793993774, 59.4294056720381], [14.2607809924922, 59.4178607397912], [14.2795790606116, 59.4275601995971], [14.2944286760667, 59.4269593481047], [14.2917677623146, 59.4123672404322], [14.3093641274492, 59.4041699093573], [14.3296214063358, 59.3913803561619], [14.3387200146493, 59.3731831395349] ], + [ [14.2810382713789, 59.4904779344442], [14.2764889672221, 59.4956280900934], [14.2834416773485, 59.4949843206372], [14.2810382713789, 59.4904779344442] ] + ] + }, + "properties" : { + "feature::id" : 222, + "id" : 95219, + "name" : "Ullvettern", + "pfafstette" : 86333, + "lke_type" : "N", + "altitude" : 138, + "objectid" : 51844, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 223, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [5.5644856711225, 59.4685897729354], [5.579764466215, 59.481336408167], [5.5922106757004, 59.4731390770921], [5.6015667917964, 59.4594911646219], [5.6140130012818, 59.4603924418605], [5.6177039461637, 59.4825381111518], [5.6235407892327, 59.4986752655191], [5.625, 59.5000486403589], [5.6296351400842, 59.5043833546969], [5.6252575077825, 59.5105206235122], [5.625, 59.5104777055484], [5.5991633858268, 59.5089755768174], [5.5715242171763, 59.5050271241531], [5.561738921443, 59.4919371452115], [5.5480910089727, 59.4816368339132], [5.5304946438381, 59.4670447262406], [5.5141858176158, 59.4554997939938], [5.48912172679, 59.4633966993225], [5.4699803149606, 59.4691906244278], [5.4639718000366, 59.4612937190991], [5.4819115088812, 59.4464011856803], [5.5104948727339, 59.4381609366416], [5.5292929408533, 59.4412081120674], [5.5419966581212, 59.4506929820546], [5.5535845083318, 59.4573452664347], [5.5644856711225, 59.4685897729354] ] + ] + }, + "properties" : { + "feature::id" : 223, + "line::hidden" : [ + { "contour" : 0, "segments" : [ { "from" : 9, "to" : 10 } ] } + ], + "id" : 95220, + "pfafstette" : 1, + "altitude" : 0, + "objectid" : 51845, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_51845", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 224, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [9.2278772202893, 59.0497533647684], [9.2124267533419, 59.0540022431789], [9.1962895989746, 59.0373071552829], [9.2116542299945, 59.0123289003845], [9.2274480406519, 59.0007839681377], [9.2136284563267, 58.996234663981], [9.1999805438564, 58.9910845083318], [9.2249587987548, 58.9889386101447], [9.2615249038638, 58.9883377586523], [9.2647008331807, 58.9996251831167], [9.2480486632485, 59.0072216626992], [9.2280488921443, 59.0086808734664], [9.2192077916133, 59.0229725553928], [9.2258171580297, 59.033959554111], [9.2553447170848, 59.0373071552829], [9.2945717359458, 59.0312557223952], [9.3137131477751, 59.0200112158945], [9.3313095129097, 59.0133160135506], [9.3489058780443, 59.0081229399377], [9.3620387749496, 59.0023290148325], [9.3696781724959, 59.005075764512], [9.3584336659952, 59.0153760758103], [9.3486483702619, 59.0263630745285], [9.3343996062992, 59.0312128044314], [9.3162023896722, 59.0388092840139], [9.3073612891412, 59.0482083180736], [9.293370032961, 59.0437019318806], [9.256803927852, 59.0412556079473], [9.2278772202893, 59.0497533647684] ] + ] + }, + "properties" : { + "feature::id" : 224, + "id" : 98261, + "name" : "Tokke", + "lge_id" : "no", + "pfafstette" : 15, + "lke_type" : "B", + "altitude" : 140, + "objectid" : 51940, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 225, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.672169703351, 58.8202710126351], [16.6557750412013, 58.8245198910456], [16.6353460904596, 58.8372665262772], [16.6283933803333, 58.8552491530855], [16.6228998809742, 58.867695362571], [16.6059902032595, 58.8788969511079], [16.5986083134957, 58.8901414576085], [16.599895852408, 58.9013859641091], [16.5682223951657, 58.9102270646402], [16.5271928218275, 58.9105274903864], [16.5034162699139, 58.9126733885735], [16.4836740065922, 58.9181668879326], [16.4736312030764, 58.9117291933712], [16.4919142556308, 58.8972229216261], [16.524446072148, 58.8801415720564], [16.5435874839773, 58.8713433894891], [16.563329747299, 58.86584989013], [16.5779218549716, 58.8555495788317], [16.5595529664897, 58.8498414896539], [16.5621280443142, 58.8366656747849], [16.5858187603003, 58.823618613807], [16.6031576176525, 58.8172238372093], [16.6317409815052, 58.811773255814], [16.6621268998352, 58.8074814594397], [16.6892510529207, 58.8044342840139], [16.7041006683758, 58.796580296649], [16.7259888298846, 58.7929322697308], [16.7408384453397, 58.7974815738876], [16.7253879783922, 58.8023742217543], [16.7089933162425, 58.8074814594397], [16.6909677714704, 58.8142195797473], [16.672169703351, 58.8202710126351] ] + ] + }, + "properties" : { + "feature::id" : 225, + "id" : 98237, + "name" : "Yngaren", + "pfafstette" : 535, + "lke_type" : "N", + "altitude" : 21, + "objectid" : 52119, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 226, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.8535410181286, 58.8603563907709], [16.8654722120491, 58.8579959027651], [16.8744849844351, 58.8694979170482], [16.8712232191906, 58.8791973768541], [16.8524251510712, 58.8758497756821], [16.8289919428676, 58.8731888619301], [16.8030694927669, 58.8788969511079], [16.7726835744369, 58.8834891732284], [16.745130241714, 58.8807424235488], [16.7350874381981, 58.8731888619301], [16.7251304706098, 58.8707425379967], [16.7129417689068, 58.8697983427944], [16.73877838308, 58.85851091833], [16.7676192547153, 58.8424166819264], [16.7714818714521, 58.8315584370994], [16.7867606665446, 58.8297129646585], [16.8007519227248, 58.83580731551], [16.7787779252884, 58.8531032548984], [16.7696793169749, 58.8682962140634], [16.7968034700604, 58.8674378547885], [16.8119964292254, 58.8652490386376], [16.8301936458524, 58.8661503158762], [16.8535410181286, 58.8603563907709] ] + ] + }, + "properties" : { + "feature::id" : 226, + "id" : 98363, + "pfafstette" : 33, + "lke_type" : "N", + "altitude" : 33, + "objectid" : 52141, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_52141", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 227, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.9822205182201, 58.9364070225234], [15.9995593755723, 58.9312139489105], [16.0195591466764, 58.9270079884637], [16.0317478483794, 58.92662172679], [16.0500309009339, 58.9260208752976], [16.0633354696942, 58.9278663477385], [16.040331441128, 58.9400550494415], [16.0007610785571, 58.952501258927], [15.9877140175792, 58.9634024217176], [15.9699459805896, 58.9670504486358], [15.9148393151438, 58.9804837712873], [15.8886593572606, 58.9804837712873], [15.8867709668559, 58.953660043948], [15.87707150705, 58.9321152261491], [15.8901185680278, 58.9258062854789], [15.9172427211134, 58.9275659219923], [15.9342382347556, 58.9306130974181], [15.9238520875298, 58.935806171031], [15.9025647775133, 58.9342182063725], [15.888916865043, 58.9352053195386], [15.9083157846548, 58.9424584554111], [15.9405900933895, 58.9433597326497], [15.9635941219557, 58.9406129829702], [15.9822205182201, 58.9364070225234] ] + ] + }, + "properties" : { + "feature::id" : 227, + "id" : 97839, + "name" : "Tisnaren", + "pfafstette" : 911, + "lke_type" : "N", + "altitude" : 46, + "objectid" : 52268, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 228, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.5430095220656, 59.0661480269181], [14.5479021699323, 59.0625], [14.5643826680095, 59.0503542162608], [14.5803481505219, 59.0403543307087], [14.600862937191, 59.0409551822011], [14.6145108496612, 59.046148255814], [14.6272145669291, 59.0582511215895], [14.630905511811, 59.0625], [14.6457551272661, 59.0795384316059], [14.6414633308918, 59.0931863440762], [14.6262703717268, 59.0819847555393], [14.6182017945431, 59.0719848699872], [14.5986312030764, 59.0722852957334], [14.5780305804798, 59.0755470609778], [14.5682452847464, 59.0798388573521], [14.5517647866691, 59.0861907159861], [14.5366576634316, 59.0831864585241], [14.5430095220656, 59.0661480269181] ] + ] + }, + "properties" : { + "feature::id" : 228, + "id" : 97539, + "name" : "Toften", + "pfafstette" : 9797, + "lke_type" : "N", + "altitude" : 76, + "objectid" : 52288, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 229, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [7.7857478026003, 58.7464521149973], [7.7917563175243, 58.7303578785937], [7.7876361930049, 58.7157228529573], [7.7787950924739, 58.7056800494415], [7.7805118110236, 58.69224672679], [7.7920996612342, 58.6844356573888], [7.8010265976927, 58.6777404550449], [7.8088376670939, 58.6801867789782], [7.811498580846, 58.6928904962461], [7.8168204083501, 58.7047787722029], [7.8261765244461, 58.7193708798755], [7.8218847280718, 58.7333621360557], [7.8313266800952, 58.7464521149973], [7.8501247482146, 58.7591558322652], [7.8529573338217, 58.7728466626992], [7.8412836476836, 58.7825890404688], [7.8243739699689, 58.7953356757004], [7.8045458707197, 58.8035759247391], [7.7939880516389, 58.8209147820912], [7.7866061618751, 58.8424595998901], [7.7729582494049, 58.852159059696], [7.7619712506867, 58.8610430781908], [7.7468641274492, 58.8674378547885], [7.7307269730819, 58.8746480726973], [7.7246326222304, 58.8886822468412], [7.7325295275591, 58.9023301593115], [7.7402547610328, 58.9184673136788], [7.7302119575169, 58.9376087255082], [7.7121864127449, 58.9500978529573], [7.7024011170115, 58.9570505630837], [7.6997402032595, 58.9458060565831], [7.7082379600806, 58.9323727339315], [7.7104696941952, 58.9109137520601], [7.705834554111, 58.8862359229079], [7.7125297564549, 58.8743905649149], [7.7341604101813, 58.8637898278704], [7.7556193920527, 58.8543049578832], [7.7651471800037, 58.8397128502106], [7.7702973356528, 58.8139191540011], [7.7870353415126, 58.796580296649], [7.8030866599524, 58.7852928721846], [7.8200821735946, 58.7746492171763], [7.8359618201795, 58.7692415537447], [7.808322651529, 58.7579541292804], [7.7857478026003, 58.7464521149973] ] + ] + }, + "properties" : { + "feature::id" : 229, + "id" : 98864, + "name" : "Byglandsfjorden", + "lge_id" : "no", + "pfafstette" : 31335, + "lke_type" : "B", + "altitude" : 204, + "objectid" : 52797, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 230, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.2550128181652, 59.0357621085882], [8.2662573246658, 59.0402684947812], [8.2631672312763, 59.0485087438198], [8.2582745834096, 59.0588519730819], [8.2577595678447, 59.0625], [8.2559570133675, 59.0740878502106], [8.2529527559055, 59.0834868842703], [8.2307212506867, 59.089538317158], [8.1933826222304, 59.1026712140634], [8.1665159769273, 59.113915720564], [8.153211408167, 59.1208684306903], [8.1379326130745, 59.1303103827138], [8.1237696850394, 59.1391514832448], [8.1013665079656, 59.1500097280718], [8.0846285021058, 59.1658464566929], [8.0872894158579, 59.1825415445889], [8.0783624793994, 59.19837827321], [8.0614528016847, 59.2059318348288], [8.0561309741806, 59.1940864768357], [8.0497791155466, 59.1837861655374], [8.0422255539279, 59.1758892602087], [8.0462598425197, 59.1671339956052], [8.0529550448636, 59.156146996887], [8.062396996887, 59.1437007874016], [8.0724398004029, 59.1336579838857], [8.0841993224684, 59.1248168833547], [8.1115809833364, 59.119924235488], [8.132009934078, 59.1096239241897], [8.1523530488922, 59.0896241530855], [8.1845415216993, 59.0749462094854], [8.2058288317158, 59.0655471754257], [8.210978987365, 59.0625], [8.2237685405603, 59.0549464383813], [8.238017304523, 59.0451611426479], [8.2550128181652, 59.0357621085882] ] + ] + }, + "properties" : { + "feature::id" : 230, + "id" : 97225, + "name" : "Fyresvatnet", + "lge_id" : "no", + "pfafstette" : 6191, + "lke_type" : "B", + "altitude" : 278, + "objectid" : 52902, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 231, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [7.1262703717268, 59.0631008514924], [7.1266995513642, 59.0625], [7.1319355429409, 59.0551610282], [7.1566562900568, 59.0531009659403], [7.1769994048709, 59.0598390862479], [7.182664576085, 59.0625], [7.1879005676616, 59.0649463239333], [7.1976000274675, 59.0728861472258], [7.2039518861015, 59.0792380058597], [7.2145955411097, 59.0886370399194], [7.2018918238418, 59.0944309650247], [7.200690120857, 59.1114693966306], [7.2033510346091, 59.1339584096319], [7.1882439113716, 59.13794978026], [7.1790594671306, 59.140954037722], [7.1630081486907, 59.1433145257279], [7.1556262589269, 59.1385077137887], [7.149274400293, 59.1230572468412], [7.142922541659, 59.1016841008973], [7.137257370445, 59.0867915674785], [7.1295321369713, 59.0765341741439], [7.1262703717268, 59.0631008514924] ] + ] + }, + "properties" : { + "feature::id" : 231, + "line::hidden" : [ + { "contour" : 0, "segments" : [ { "from" : 0, "to" : 1 } ] } + ], + "id" : 97509, + "name" : "Rosskreppfjorden", + "lge_id" : "no", + "pfafstette" : 7913, + "lke_type" : "B", + "altitude" : 923, + "objectid" : 52950, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 232, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.4484927211134, 59.0518992629555], [15.4221410913752, 59.0370067295367], [15.3984503753891, 59.0299681834829], [15.4093515381798, 59.0233158991027], [15.4351023164256, 59.0218137703717], [15.4944149423183, 59.0218137703717], [15.5409380150156, 59.0278222852957], [15.5363887108588, 59.0418564594397], [15.5384487731185, 59.0500537905146], [15.5485774125618, 59.0582511215895], [15.5474615455045, 59.0625], [15.5457448269548, 59.0692381203076], [15.5317535707746, 59.0743882759568], [15.5183631660868, 59.0667917963743], [15.5126121589453, 59.0625], [15.5043719099066, 59.0564056491485], [15.4739859915766, 59.0585944652994], [15.4484927211134, 59.0518992629555] ] + ] + }, + "properties" : { + "feature::id" : 232, + "id" : 97457, + "name" : "Sottern", + "pfafstette" : 677, + "lke_type" : "N", + "altitude" : 73, + "objectid" : 53119, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 233, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [9.9547358542392, 59.1339154916682], [9.9365386376122, 59.1433145257279], [9.9172255539279, 59.1534002472075], [9.9067535707746, 59.1734858542392], [9.8865821278154, 59.2035713468229], [9.8576554202527, 59.2224123329061], [9.8452092107673, 59.2209102041751], [9.8601446621498, 59.2123266114265], [9.8821186595862, 59.2001808276872], [9.8926764786669, 59.171339956052], [9.904350164805, 59.1449024903864], [9.91919978026, 59.1403102682659], [9.937396996887, 59.1363618156015], [9.94958569859, 59.1248168833547], [9.9645211499725, 59.1129286073979], [9.9897569126534, 59.0886370399194], [10.0106150430324, 59.0670922221205], [10.0194561435635, 59.0749462094854], [10.0131042849295, 59.0953322422633], [9.9999713880242, 59.1084222212049], [9.9905294360007, 59.1200100714155], [9.9747356253433, 59.1284649102728], [9.9547358542392, 59.1339154916682] ] + ] + }, + "properties" : { + "feature::id" : 233, + "id" : 97215, + "name" : "Farris", + "lge_id" : "no", + "pfafstette" : 1, + "lke_type" : "B", + "altitude" : 25, + "objectid" : 53243, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 234, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [6.6672198315327, 58.4476572514192], [6.677520142831, 58.4464126304706], [6.6851595403772, 58.4682578740158], [6.6860178996521, 58.4950816013551], [6.6909105475188, 58.5159826496979], [6.7037859366416, 58.5357678309833], [6.7131420527376, 58.5740935726058], [6.7133995605201, 58.6105309238235], [6.7140862479399, 58.6475691265336], [6.7082494048709, 58.6704014832448], [6.698893288775, 58.6628479216261], [6.6994941402674, 58.6281702069218], [6.6980349295001, 58.5963250778246], [6.6965757187328, 58.5750377678081], [6.6937431331258, 58.5492011536349], [6.6900521882439, 58.5343086202161], [6.6843011811024, 58.5221199185131], [6.6778634865409, 58.5001888390405], [6.6703099249222, 58.47254967039], [6.6672198315327, 58.4476572514192] ] + ] + }, + "properties" : { + "feature::id" : 234, + "id" : 100335, + "name" : "Sirdalsvatnet", + "lge_id" : "no", + "pfafstette" : 313, + "lke_type" : "B", + "altitude" : 392, + "objectid" : 54185, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 235, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.5473871543673, 58.8372665262772], [14.5415503112983, 58.8528028291522], [14.525413156931, 58.8488972944516], [14.5196621497894, 58.8376527879509], [14.5214647042666, 58.8239190395532], [14.5135677989379, 58.8175242629555], [14.5049842061894, 58.8260649377404], [14.4919371452115, 58.8315584370994], [14.4770875297565, 58.8379102957334], [14.4636112891412, 58.8473093297931], [14.4189766068486, 58.8357643975462], [14.3715951748764, 58.823618613807], [14.3588914576085, 58.811773255814], [14.362153222853, 58.7905288637612], [14.3730543856437, 58.7801427165354], [14.3849855795642, 58.772202893243], [14.4001785387292, 58.7686407022523], [14.4211225050357, 58.7692415537447], [14.4409506042849, 58.7622030076909], [14.4519376030031, 58.7528039736312], [14.4460149240066, 58.7342634132943], [14.4387188701703, 58.7120319080755], [14.4519376030031, 58.7066242446438], [14.4670447262406, 58.7038774949643], [14.4800917872185, 58.6965385231643], [14.4941688793261, 58.7108302050907], [14.4990615271928, 58.7427611701154], [14.513224455228, 58.7658939525728], [14.5300482970152, 58.782889466215], [14.5351984526644, 58.8044342840139], [14.5415503112983, 58.8196272431789], [14.5473871543673, 58.8372665262772] ] + ] + }, + "properties" : { + "feature::id" : 235, + "id" : 99062, + "name" : "Unden", + "pfafstette" : 82271, + "lke_type" : "N", + "altitude" : 118, + "objectid" : 54529, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 236, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.7585435359824, 58.3531089772936], [14.7675563083684, 58.3448687282549], [14.7776849478118, 58.33667139718], [14.7938221021791, 58.3403194240982], [14.8083283739242, 58.3421648965391], [14.8472978850028, 58.3458129234572], [14.8750228895807, 58.3598041796374], [14.8681560153818, 58.3737954358176], [14.8481562442776, 58.3843961728621], [14.8232638253067, 58.3777009705182], [14.8044657571873, 58.3652547610328], [14.7922770554844, 58.3698040651895], [14.7715905969603, 58.3740958615638], [14.7512474821461, 58.3631517808094], [14.7585435359824, 58.3531089772936] ] + ] + }, + "properties" : { + "feature::id" : 236, + "id" : 101189, + "name" : "Takern", + "pfafstette" : 633, + "lke_type" : "N", + "altitude" : 93, + "objectid" : 55224, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 237, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.4287390130013, 58.2403634865409], [16.4487387841055, 58.2315653039736], [16.4602407983886, 58.2342691356894], [16.4417002380517, 58.2454707242263], [16.4183528657755, 58.2591615546603], [16.3958638527742, 58.2716077641458], [16.3813575810291, 58.2801484389306], [16.3726023164256, 58.2886891137154], [16.3515725141916, 58.2917362891412], [16.3356928676067, 58.2889895394617], [16.3208432521516, 58.2913929454312], [16.3035043947995, 58.2956418238418], [16.2968950283831, 58.2874874107306], [16.2859080296649, 58.2789467359458], [16.2439342611243, 58.2822943371178], [16.218612662516, 58.2789467359458], [16.248826908991, 58.2713502563633], [16.2900281541842, 58.2637966947446], [16.3156930965025, 58.2577023438931], [16.3305427119575, 58.264054202527], [16.379383354697, 58.256715230727], [16.4287390130013, 58.2403634865409] ] + ] + }, + "properties" : { + "feature::id" : 237, + "id" : 101293, + "name" : "Yxningen", + "pfafstette" : 53, + "lke_type" : "N", + "altitude" : 64, + "objectid" : 55231, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 238, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [6.5003547885003, 58.3172724775682], [6.5087667093939, 58.316972051822], [6.5338308002197, 58.3221651254349], [6.5515130012818, 58.3269719373741], [6.5664484526644, 58.3327658624794], [6.5766629280352, 58.3394181468596], [6.5833581303791, 58.3497184581579], [6.6086797289874, 58.3619500778246], [6.6225851492401, 58.3843961728621], [6.6211259384728, 58.4105332127816], [6.6135723768541, 58.4284729216261], [6.6037870811207, 58.4427646035525], [6.5903108405054, 58.4491593801502], [6.565675929317, 58.4555541567479], [6.5550322743087, 58.4504040010987], [6.5666201245193, 58.4345672724776], [6.5876499267533, 58.4044817798938], [6.5905683482879, 58.3740958615638], [6.5699677256913, 58.3564565784655], [6.54713536898, 58.3364138893975], [6.5193245284746, 58.324826039187], [6.5003547885003, 58.3172724775682] ] + ] + }, + "properties" : { + "feature::id" : 238, + "id" : 101088, + "name" : "Lundevatnet", + "lge_id" : "no", + "pfafstette" : 17, + "lke_type" : "R", + "altitude" : 210, + "objectid" : 55956, + "scalerank" : 12, + "featurecla" : "Reservoir", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 239, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [22.1760552096686, 57.1279298663249], [22.1872997161692, 57.131577893243], [22.1966558322651, 57.1549681834829], [22.203866050174, 57.1744529390222], [22.209359549533, 57.185997871269], [22.2058402765061, 57.201190830434], [22.1984583867423, 57.2123924189709], [22.2046385735213, 57.2227356482329], [22.2111621040102, 57.2303321278154], [22.2009476286394, 57.2349243499359], [22.1813770371727, 57.2419628959898], [22.16747161692, 57.2354822834646], [22.1570854696942, 57.219388047061], [22.134081441128, 57.2175854925838], [22.1124507874016, 57.2060405603369], [22.1106482329244, 57.1829077778795], [22.1262703717268, 57.1759121497894], [22.1479868613807, 57.1762554934994], [22.1514202984801, 57.1638092840139], [22.158115500824, 57.1507622230361], [22.1709050540194, 57.1379297518769], [22.1760552096686, 57.1279298663249] ], + [ [22.1702183665995, 57.1801610282], [22.1526220014649, 57.1777576222304], [22.1538237044497, 57.1862982970152], [22.1720209210767, 57.1932510071416], [22.1789736312031, 57.1893454724409], [22.1702183665995, 57.1801610282] ] + ] + }, + "properties" : { + "feature::id" : 239, + "id" : 103571, + "name" : "Lake Usmas", + "pfafstette" : 397, + "lke_type" : "N", + "altitude" : 21, + "objectid" : 56172, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 240, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [13.2858565281084, 57.6826445477019], [13.2932384178722, 57.6710137795276], [13.2843973173412, 57.6567650155649], [13.2785604742721, 57.6379669474455], [13.3019936824757, 57.6373231779894], [13.321821781725, 57.6518723676982], [13.3268861014466, 57.6707991897089], [13.3342679912104, 57.6883526368797], [13.3552119575169, 57.7005842565464], [13.3815635872551, 57.7038460217909], [13.3977007416224, 57.7242320545688], [13.39744323384, 57.7495107352133], [13.3977007416224, 57.7610127494964], [13.4054259750961, 57.7886948361106], [13.4042242721113, 57.8099392281633], [13.3892888207288, 57.795647546237], [13.3752975645486, 57.7650041201245], [13.3747825489837, 57.7473648370262], [13.3744392052738, 57.7352190532869], [13.348860098883, 57.7120862708295], [13.3296328511262, 57.6944469877312], [13.3271436092291, 57.6871938518586], [13.3108347830068, 57.6905414530306], [13.2920367148874, 57.6947903314411], [13.2858565281084, 57.6826445477019] ] + ] + }, + "properties" : { + "feature::id" : 240, + "id" : 103361, + "name" : "Asunden", + "pfafstette" : 931, + "lke_type" : "N", + "altitude" : 165, + "objectid" : 56203, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 241, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [23.0983622505036, 57.2960395303058], [23.0832551272661, 57.2884001327596], [23.0769032686321, 57.2823486998718], [23.0740706830251, 57.2701599981688], [23.0738990111701, 57.2625635185863], [23.0979330708661, 57.2613618156015], [23.1242847006043, 57.2522202893243], [23.1248855520967, 57.229731276323], [23.1254864035891, 57.2151391686504], [23.1462586980407, 57.2120919932247], [23.1632542116828, 57.2151391686504], [23.1522672129647, 57.2221777147043], [23.1421385735213, 57.2336368110236], [23.1454861746933, 57.249773965391], [23.1369884178722, 57.2686149514741], [23.1327824574254, 57.2929923548801], [23.1130401941036, 57.3157817936275], [23.0890061344076, 57.3190864768357], [23.0969030397363, 57.3087432475737], [23.0983622505036, 57.2960395303058] ] + ] + }, + "properties" : { + "feature::id" : 241, + "id" : 102901, + "name" : "Engures Ezers", + "pfafstette" : 3, + "lke_type" : "N", + "altitude" : -1, + "objectid" : 56627, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 242, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.2151048342794, 57.538225599707], [15.2267785204175, 57.5327750183117], [15.2385380424831, 57.5376247482146], [15.2177657480315, 57.5518735121773], [15.1916716260758, 57.5680106665446], [15.1749336202161, 57.5738045916499], [15.1486678264054, 57.5838473951657], [15.1302989379235, 57.5938901986816], [15.1208569859, 57.5868516526277], [15.1035181285479, 57.5889975508149], [15.0835183574437, 57.5889975508149], [15.0925311298297, 57.5768088491119], [15.1220586888848, 57.5595129097235], [15.1387108588171, 57.5525172816334], [15.1608565281084, 57.5561653085516], [15.1965642739425, 57.5486117469328], [15.2151048342794, 57.538225599707] ] + ] + }, + "properties" : { + "feature::id" : 242, + "id" : 103985, + "name" : "Solgen", + "pfafstette" : 935, + "lke_type" : "N", + "altitude" : 195, + "objectid" : 56763, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 243, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [23.6671111060245, 56.9134688015016], [23.6454804522981, 56.9049710446805], [23.6531198498444, 56.8939840459623], [23.6774972532503, 56.8945848974547], [23.6985270554843, 56.8991771195752], [23.7231619666728, 56.9019238692547], [23.7410158395898, 56.9098636925472], [23.7589555484344, 56.9134688015016], [23.8069378318989, 56.9271167139718], [23.8373237502289, 56.9453997665263], [23.8229891503388, 56.9481465162058], [23.794405786486, 56.941107970152], [23.7726034609046, 56.9356573887566], [23.7483118934261, 56.9314514283098], [23.7087415308552, 56.9247562259659], [23.6859091741439, 56.9192627266069], [23.6671111060245, 56.9134688015016] ] + ] + }, + "properties" : { + "feature::id" : 243, + "id" : 103989, + "name" : "Babites Ezers", + "pfafstette" : 121, + "lke_type" : "N", + "altitude" : -2, + "objectid" : 56767, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 244, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.4637200146493, 57.9990357764146], [12.4802005127266, 58.0065893380333], [12.4929042299945, 58.0202801684673], [12.4907583318074, 58.026674945065], [12.4886982695477, 58.0349151941037], [12.4977968778612, 58.0434129509248], [12.5069813221022, 58.0518677897821], [12.5434615912837, 58.0655586202161], [12.5727316425563, 58.0753439159495], [12.5588262223036, 58.0798932201062], [12.5376247482146, 58.0765456189343], [12.5177966489654, 58.0743997207471], [12.5029470335104, 58.0832408212782], [12.4865523713606, 58.0789919428676], [12.4692135140084, 58.046374290423], [12.4631191631569, 58.017833844534], [12.4607157571873, 58.0051301272661], [12.4637200146493, 57.9990357764146] ] + ] + }, + "properties" : { + "feature::id" : 244, + "id" : 102423, + "name" : "Anten", + "pfafstette" : 14217, + "lke_type" : "N", + "altitude" : 67, + "objectid" : 57227, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 245, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.3743648141366, 57.8519559146677], [12.3756523530489, 57.8574494140267], [12.3835492583776, 57.8723419474455], [12.4062957791613, 57.8747024354514], [12.4251796832082, 57.8804963605567], [12.4518746566563, 57.8901958203626], [12.4692135140084, 57.8992944286761], [12.4780546145395, 57.9050883537814], [12.4823464109138, 57.9163757782458], [12.4826897546237, 57.9312683116645], [12.4947926203992, 57.9345729948727], [12.5068096502472, 57.9409248535067], [12.5038912287127, 57.9494655282915], [12.4829472624062, 57.9479633995605], [12.4621749679546, 57.9394656427394], [12.441574345358, 57.9327275224318], [12.4343641274492, 57.9494655282915], [12.4364241897089, 57.971096182018], [12.4245788317158, 57.9719116233291], [12.4170252700971, 57.9613108862846], [12.4106734114631, 57.9528131294635], [12.4014031312946, 57.9415257049991], [12.3896436092291, 57.9294657571873], [12.3808883446255, 57.9224272111335], [12.3676696117927, 57.9150882393335], [12.3427771928218, 57.907491759751], [12.3308459989013, 57.8917408670573], [12.3236357809925, 57.870753982787], [12.3227774217176, 57.8586081990478], [12.3381420527376, 57.8619558002197], [12.3566826130745, 57.8622562259659], [12.3743648141366, 57.8519559146677] ] + ] + }, + "properties" : { + "feature::id" : 245, + "id" : 102775, + "name" : "Mjrn", + "pfafstette" : 1417, + "lke_type" : "N", + "altitude" : 58, + "objectid" : 57311, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 246, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.3449002014283, 57.2002466352317], [14.3508228804248, 57.2029933849112], [14.3566597234939, 57.2093452435451], [14.3652433162425, 57.2169417231276], [14.3758869712507, 57.2224352224867], [14.3874748214613, 57.2221347967405], [14.3947708752976, 57.2358256271745], [14.3898782274309, 57.2646664988098], [14.3791487364952, 57.2807607352133], [14.3715951748764, 57.2880997070134], [14.3679042299945, 57.3060394158579], [14.3537413019594, 57.3190864768357], [14.3339990386376, 57.3135929774767], [14.3212094854422, 57.3032926661784], [14.3123683849112, 57.2923485854239], [14.3236128914118, 57.2807607352133], [14.3364024446072, 57.2683145257279], [14.3330548434353, 57.2558683162425], [14.3299647500458, 57.243422106757], [14.3345140542025, 57.2309758972716], [14.3394067020692, 57.2172850668376], [14.3449002014283, 57.2002466352317] ] + ] + }, + "properties" : { + "feature::id" : 246, + "id" : 105174, + "name" : "Rusken", + "pfafstette" : 671, + "lke_type" : "N", + "altitude" : 181, + "objectid" : 57701, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 247, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.2016629280352, 57.4549647500458], [12.2132507782458, 57.4500721021791], [12.2273278703534, 57.4470249267533], [12.2461259384728, 57.4561664530306], [12.2793444424098, 57.4668101080388], [12.3169405786486, 57.4717027559055], [12.3549658945248, 57.4783979582494], [12.3950512726607, 57.4920887886834], [12.4072399743637, 57.5029899514741], [12.4194286760667, 57.5136336064823], [12.4358233382165, 57.5312728895807], [12.4272397454679, 57.5421740523714], [12.4123901300128, 57.5345346548251], [12.3994289049625, 57.5230755585058], [12.3796866416407, 57.5106293490203], [12.3251808276872, 57.4920887886834], [12.2652673503022, 57.4832047701886], [12.2397740798389, 57.4771962552646], [12.2184867698224, 57.468956006226], [12.1981436550083, 57.4637629326131], [12.1892167185497, 57.4565097967405], [12.2016629280352, 57.4549647500458] ] + ] + }, + "properties" : { + "feature::id" : 247, + "id" : 104502, + "name" : "Lygnern", + "pfafstette" : 531, + "lke_type" : "N", + "altitude" : 73, + "objectid" : 57932, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 248, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [25.4865752609412, 56.5865626716719], [25.5281198498444, 56.5802108130379], [25.5612525178539, 56.5780649148508], [25.5752437740341, 56.5777644891046], [25.6057155282915, 56.5841163477385], [25.6291487364951, 56.5899102728438], [25.6491485075993, 56.5942020692181], [25.6603930141, 56.6048457242263], [25.6445133675151, 56.6051032320088], [25.6169600347922, 56.5969488188976], [25.5920676158213, 56.5887514878227], [25.5622825489837, 56.5853180507233], [25.5437419886468, 56.5871635231643], [25.5221113349203, 56.5874639489105], [25.4955880333272, 56.59021069859], [25.4961888848196, 56.6042448727339], [25.4821976286394, 56.6230429408533], [25.4536142647867, 56.6406822239517], [25.4333569859, 56.6503816837576], [25.3929282640542, 56.6436864814137], [25.3573921900751, 56.6299956509797], [25.3472635506318, 56.6242875618019], [25.3299246932796, 56.614588101996], [25.2812557223952, 56.6039444469877], [25.2526723585424, 56.5954466901666], [25.2700112158945, 56.5860047381432], [25.300139626442, 56.59021069859], [25.3318130836843, 56.6045023805164], [25.3593664164073, 56.6209828785937], [25.3774777971068, 56.6306823383996], [25.4044302783373, 56.6379354742721], [25.4463182109504, 56.6318411234206], [25.4767899652078, 56.6185365546603], [25.4905237136056, 56.6108971571141], [25.484601034609, 56.5987513733748], [25.4865752609412, 56.5865626716719] ] + ] + }, + "properties" : { + "feature::id" : 248, + "id" : 104512, + "name" : "Pljavinjas", + "pfafstette" : 1791, + "lke_type" : "N", + "altitude" : 72, + "objectid" : 57968, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 249, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.0774354513825, 55.8635237364951], [29.0824997711042, 55.888759499176], [29.0864482237686, 55.9100468091925], [29.0949459805896, 55.9255401941036], [29.0837873100165, 55.9507330388207], [29.065847601172, 55.9528789370079], [29.0637017029848, 55.9337375251785], [29.0627575077825, 55.9224930186779], [29.0544314228163, 55.9112485121773], [29.0541739150339, 55.8939096548251], [29.050311298297, 55.8875148782274], [29.038122596594, 55.8817209531221], [29.0405260025636, 55.8698755951291], [29.0581223676982, 55.861377838308], [29.0774354513825, 55.8635237364951] ] + ] + }, + "properties" : { + "feature::id" : 249, + "id" : 105234, + "pfafstette" : 4653, + "lke_type" : "N", + "altitude" : 143, + "objectid" : 58190, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_58190", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 250, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.994163156931, 57.1814056491485], [14.987811298297, 57.164968069035], [14.9774251510712, 57.1558694607215], [14.9890130012818, 57.1361271973998], [14.9990558047977, 57.1179299807728], [15.0074677256913, 57.1121360556675], [15.0199139351767, 57.0944967725691], [15.0303000824025, 57.0793038134041], [15.0409437374107, 57.0735098882989], [15.0505573612892, 57.0741107397913], [15.0433471433803, 57.0859560977843], [15.0248065830434, 57.1199900430324], [15.0214589818715, 57.1626075810291], [15.0159654825124, 57.1887446209486], [14.9931331258011, 57.205697216627], [14.9684982146127, 57.2084439663065], [14.9490992950009, 57.2105898644937], [14.9406873741073, 57.2084868842703], [14.9648931056583, 57.199345357993], [14.994163156931, 57.1814056491485] ] + ] + }, + "properties" : { + "feature::id" : 250, + "id" : 105596, + "name" : "?rken", + "pfafstette" : 7991, + "lke_type" : "N", + "altitude" : 185, + "objectid" : 58231, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 2 + } + }, { + "type" : "Feature", + "id" : 251, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [13.1625103003113, 57.21788591833], [13.1524674967955, 57.2288299990844], [13.1579609961546, 57.2440229582494], [13.1606219099066, 57.2552674647501], [13.1473173411463, 57.2555678904963], [13.130836843069, 57.2370273301593], [13.1354719831533, 57.2211906015382], [13.1457722944516, 57.2075426890679], [13.1369311939205, 57.1893454724409], [13.1260300311298, 57.1781009659403], [13.1038843618385, 57.1626075810291], [13.0749576542758, 57.1519210080571], [13.070408350119, 57.1461270829518], [13.0610522340231, 57.133423365684], [13.0503227430874, 57.1218355154734], [13.0740134590734, 57.1273290148325], [13.0957299487274, 57.1403760758103], [13.1122962827321, 57.1519210080571], [13.1359869987182, 57.1683585881707], [13.1542700512727, 57.1799464383813], [13.1667162607581, 57.1905471754257], [13.1743556583044, 57.2038517441861], [13.1801925013734, 57.2139374656656], [13.1865443600073, 57.2209330937557], [13.2013939754624, 57.2305896355979], [13.1989905694928, 57.2409757828237], [13.1831109229079, 57.2407182750412], [13.1755573612892, 57.2260832494049], [13.1625103003113, 57.21788591833] ] + ] + }, + "properties" : { + "feature::id" : 251, + "id" : 105627, + "pfafstette" : 413, + "lke_type" : "N", + "altitude" : 160, + "objectid" : 58340, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_58340", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 252, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.0740249038638, 56.209099180553], [27.0619220380883, 56.2099575398279], [27.045441540011, 56.2136484847098], [27.0327378227431, 56.2148501876946], [27.0171156839407, 56.2124038637612], [27.0019227247757, 56.2078974775682], [26.9917082494049, 56.2033052554477], [26.9801203991943, 56.1930049441494], [26.9838113440762, 56.1823612891412], [27.0144547701886, 56.1762669382897], [27.0417505951291, 56.1781124107306], [27.0536817890496, 56.1765673640359], [27.0727373649515, 56.1710738646768], [27.0980589635598, 56.1723184856253], [27.1096468137704, 56.1796145394616], [27.1053550173961, 56.1902581944699], [27.1041533144113, 56.2005585057682], [27.105698361106, 56.2078974775682], [27.094024674968, 56.2097429500092], [27.0807201062077, 56.210944652994], [27.0740249038638, 56.209099180553] ], + [ [27.0573727339315, 56.1996572285296], [27.0642396081304, 56.1896573429775], [27.0558276872368, 56.1836059100897], [27.0488749771104, 56.1936057956418], [27.0573727339315, 56.1996572285296] ] + ] + }, + "properties" : { + "feature::id" : 252, + "id" : 105383, + "pfafstette" : 32933, + "lke_type" : "N", + "altitude" : 146, + "objectid" : 58356, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_58356", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 253, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [28.0928115271928, 56.0577275224318], [28.0712667093939, 56.049186847647], [28.0566746017213, 56.0394873878411], [28.0697216626991, 56.0297879280352], [28.1050002288958, 56.0269124244644], [28.125, 56.0239940029299], [28.146029802234, 56.0209468275041], [28.1872310474272, 56.0215476789965], [28.2140976927303, 56.0342943142282], [28.2207928950742, 56.052019433254], [28.2119517945431, 56.0680707516938], [28.1894627815419, 56.0823624336202], [28.1574459805896, 56.0906026826589], [28.1262017029848, 56.0890576359641], [28.125, 56.088070522798], [28.1074036348654, 56.0741651025453], [28.0928115271928, 56.0577275224318] ], + [ [28.1322960538363, 56.0443800357077], [28.125, 56.0456246566563], [28.1162447353964, 56.0471267853873], [28.1074036348654, 56.0553241164622], [28.112811298297, 56.0656673457242], [28.125, 56.0663969511079], [28.1274892418971, 56.0665257049991], [28.1382187328328, 56.0534786440212], [28.1322960538363, 56.0443800357077] ] + ] + }, + "properties" : { + "feature::id" : 253, + "id" : 105298, + "pfafstette" : 78939, + "lke_type" : "N", + "altitude" : 126, + "objectid" : 58423, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_58423", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 254, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.7743373466398, 57.0145406061161], [14.7770840963194, 56.9914507416224], [14.7810325489837, 56.9844551135323], [14.7721914484527, 56.9850559650247], [14.7597452389672, 56.9893048434353], [14.7438655923824, 56.995356276323], [14.7302176799121, 56.9999484984435], [14.7140805255448, 57.0026952481231], [14.7014626442044, 57.0124376258927], [14.6914198406885, 57.0181886330342], [14.6842954587072, 57.0145406061161], [14.6891881065739, 57.0008497756821], [14.703866050174, 56.9859572422633], [14.7090162058231, 56.9692621543673], [14.7151105566746, 56.9589189251053], [14.7375995696759, 56.9535112616737], [14.7542517396081, 56.9404212827321], [14.7548525911005, 56.9251854056034], [14.7472990294818, 56.9175889260209], [14.74292139718, 56.9105932979308], [14.7545092473906, 56.9047993728255], [14.7675563083684, 56.91540010987], [14.7751957059147, 56.9291338582677], [14.7804316974913, 56.9394770875298], [14.7909895165721, 56.9458718641275], [14.8122768265885, 56.9382324665812], [14.8336499725325, 56.9321810336935], [14.8454953305256, 56.9415800677532], [14.8391434718916, 56.9494769730819], [14.8317615821278, 56.956472601172], [14.8242080205091, 56.9665583226515], [14.8235213330892, 56.9804637429042], [14.8442077916133, 56.9947554248306], [14.8594865867057, 57.0029956738693], [14.8464395257279, 57.0029956738693], [14.8174269822377, 57.0035965253617], [14.8053241164622, 57.0124376258927], [14.8059249679546, 57.0242829838857], [14.7922770554844, 57.033081166453], [14.7743373466398, 57.0145406061161] ] + ] + }, + "properties" : { + "feature::id" : 254, + "id" : 106374, + "name" : "Helgasjn", + "pfafstette" : 719, + "lke_type" : "N", + "altitude" : 161, + "objectid" : 59410, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 255, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.1737319172313, 56.7528697811756], [15.163088262223, 56.7580628547885], [15.154075489837, 56.7711099157663], [15.1430884911189, 56.7887062809009], [15.1281530397363, 56.7929551593115], [15.1211144936825, 56.7819681605933], [15.1101274949643, 56.7725691265336], [15.0964795824941, 56.7622688152353], [15.084977568211, 56.7568611518037], [15.0806857718367, 56.7695219511079], [15.0725313587255, 56.7802085240798], [15.0586259384728, 56.7911526048343], [15.0505573612892, 56.7996074436916], [15.0460080571324, 56.7844144845266], [15.0554500091558, 56.7586207883172], [15.0715013275957, 56.744629532137], [15.0913294268449, 56.7263893975462], [15.1122733931514, 56.7102522431789], [15.1208569859, 56.717591214979], [15.1408567570042, 56.7270760849661], [15.169440120857, 56.7395222944516], [15.1737319172313, 56.7528697811756] ] + ] + }, + "properties" : { + "feature::id" : 255, + "id" : 107098, + "name" : "Rottnen", + "pfafstette" : 91, + "lke_type" : "N", + "altitude" : 148, + "objectid" : 59648, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 256, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.0710206464018, 55.7097057544406], [27.0776300128182, 55.7154567615821], [27.0859560977843, 55.7188043627541], [27.0959989013001, 55.7321947674419], [27.0992606665446, 55.7568296786303], [27.0964280809376, 55.7729668329976], [27.0627803973631, 55.7838679957883], [27.0278451748764, 55.7826662928035], [27.02089246475, 55.764726583959], [27.030248580846, 55.7507353277788], [27.0396905328694, 55.742194652994], [27.0520509064274, 55.7329672907892], [27.0347978850027, 55.7230961591284], [27.0019227247757, 55.7124095861564], [26.9983176158213, 55.6933110922908], [27.0095621223219, 55.6836116324849], [27.0223516755173, 55.6887188701703], [27.0290468778612, 55.6887188701703], [27.0376304706098, 55.6832253708112], [27.0529951016297, 55.6756718091925], [27.0654413111152, 55.6762726606849], [27.0621795458707, 55.6853712689984], [27.0588319446988, 55.6966586934627], [27.0710206464018, 55.7097057544406] ] + ] + }, + "properties" : { + "feature::id" : 256, + "id" : 107009, + "pfafstette" : 36211, + "lke_type" : "N", + "altitude" : 131, + "objectid" : 59717, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_59717", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 257, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.3954804522981, 55.6282903772203], [27.378141594946, 55.6367881340414], [27.3564251052921, 55.6318954861747], [27.3548800585973, 55.6179471479582], [27.3420905054019, 55.6097498168834], [27.3169405786486, 55.6030546145395], [27.3008034242813, 55.5969173457242], [27.2820053561619, 55.5948572834646], [27.2771127082952, 55.5857157571873], [27.2973699871818, 55.580265175792], [27.3226057498627, 55.5850719877312], [27.3412321461271, 55.5860161829335], [27.3525624885552, 55.5889775224318], [27.3630344717085, 55.5944710217909], [27.3886994140267, 55.5889775224318], [27.4147935359824, 55.5938701702985], [27.4208878868339, 55.6061017899652], [27.4062957791613, 55.6067026414576], [27.3983130379051, 55.6127969923091], [27.3954804522981, 55.6282903772203] ] + ] + }, + "properties" : { + "feature::id" : 257, + "id" : 107365, + "pfafstette" : 3745, + "lke_type" : "N", + "altitude" : 137, + "objectid" : 59743, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_59743", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 258, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.0649892418971, 56.98351091833], [14.0517705090643, 56.9778028291522], [14.0600965940304, 56.9616656747848], [14.0764054202527, 56.9600777101264], [14.0879932704633, 56.9677171076726], [14.1044737685406, 56.9762148644937], [14.1084222212049, 56.9914507416224], [14.1053321278154, 57.0163431605933], [14.1183791887933, 57.0449265244461], [14.1339154916682, 57.0720077595679], [14.1345163431606, 57.0917500228896], [14.1300528749313, 57.1050975096136], [14.1214692821828, 57.1179299807728], [14.1104822834646, 57.1063421305622], [14.1029287218458, 57.0914495971434], [14.0995811206739, 57.0838531175609], [14.0959760117195, 57.0731665445889], [14.0843881615089, 57.0586173548801], [14.0776071232375, 57.034926638894], [14.0810405603369, 57.0203345312214], [14.0871349111884, 57.006042849295], [14.0820705914668, 56.9878027147043], [14.0649892418971, 56.98351091833] ] + ] + }, + "properties" : { + "feature::id" : 258, + "id" : 106112, + "name" : "Flaren", + "pfafstette" : 6213, + "lke_type" : "N", + "altitude" : 150, + "objectid" : 59924, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 259, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [13.9782949551364, 57.0449265244461], [13.9709989013001, 57.0275876670939], [13.9673079564183, 57.0096479582494], [13.9725439479949, 56.9975450924739], [13.980698361106, 56.9896481871452], [13.9950329609962, 56.9917511673686], [14.0026723585424, 57.0090900247208], [14.0127151620582, 57.0358279161326], [14.0248180278337, 57.0492183208204], [14.0352041750595, 57.0589177806263], [14.0433585881707, 57.0810634499176], [14.0430152444607, 57.0959989013001], [14.0437019318806, 57.1099901574803], [14.050311298297, 57.1230372184582], [14.0576073521333, 57.143423251236], [14.0525430324117, 57.1662126899835], [14.0364058780443, 57.1565132301776], [14.0193245284746, 57.1367280488922], [14.0078225141916, 57.1209342382348], [14.0026723585424, 57.1096897317341], [13.9970930232558, 57.0966426707563], [14.0026723585424, 57.0805055163889], [14.0031873741073, 57.0708060565831], [13.9785524629189, 57.0641108542392], [13.9597543947995, 57.0573727339315], [13.9673079564183, 57.0513213010438], [13.9782949551364, 57.0449265244461] ] + ] + }, + "properties" : { + "feature::id" : 259, + "id" : 105903, + "name" : "Vidstern", + "pfafstette" : 6311, + "lke_type" : "N", + "altitude" : 143, + "objectid" : 60206, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 260, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.8242080205091, 56.416092519685], [14.8383709485442, 56.4015004120125], [14.8630058597327, 56.4035604742721], [14.8889283098334, 56.4136461957517], [14.9016320271013, 56.4261353232009], [14.9016320271013, 56.4337318027834], [14.887984114631, 56.4416716260758], [14.8706452572789, 56.4513710858817], [14.8530488921443, 56.4513710858817], [14.8366542299945, 56.4437316883355], [14.8244655282915, 56.4385386147226], [14.8181136696576, 56.4333455411097], [14.8242080205091, 56.416092519685] ] + ] + }, + "properties" : { + "feature::id" : 260, + "id" : 108512, + "name" : "Mien", + "pfafstette" : 55, + "lke_type" : "N", + "altitude" : 93, + "objectid" : 60426, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 261, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [26.2815876213148, 55.5055020829518], [26.2673388573521, 55.4933133812489], [26.2917162607581, 55.4777770783739], [26.3205571323933, 55.4781633400476], [26.3211579838857, 55.4893649285845], [26.3415869346274, 55.4929700375389], [26.3786680553012, 55.4845151986816], [26.4038179820546, 55.4887640770921], [26.3992686778978, 55.5109955823109], [26.3823590001831, 55.5130556445706], [26.3691402673503, 55.5069612937191], [26.3518014099982, 55.5082059146676], [26.334462552646, 55.5097080433986], [26.3199562809009, 55.5100084691448], [26.2996131660868, 55.5078625709577], [26.2815876213148, 55.5055020829518] ] + ] + }, + "properties" : { + "feature::id" : 261, + "id" : 108384, + "name" : "Dysnai", + "lge_id" : "lt", + "pfafstette" : 68733, + "lke_type" : "B", + "altitude" : 141, + "objectid" : 60547, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 262, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.2844717084783, 56.2373821186596], [14.2993213239334, 56.2419314228163], [14.3046431514375, 56.25], [14.3099649789416, 56.2580685771837], [14.3187202435451, 56.2644204358176], [14.3323681560154, 56.2653217130562], [14.3467027559055, 56.2842056171031], [14.361809879143, 56.2969522523347], [14.3723676982238, 56.3021453259476], [14.383183025087, 56.3051925013734], [14.3959725782824, 56.3099993133126], [14.3952858908625, 56.3184970701337], [14.3834405328695, 56.3157932384179], [14.3628399102729, 56.3178962186413], [14.3412092565464, 56.3190979216261], [14.3291063907709, 56.2987548068119], [14.3166601812855, 56.280214246475], [14.3032697765977, 56.2826176524446], [14.2895360282, 56.2768666453031], [14.2782915216993, 56.2546351400842], [14.2757164438748, 56.25], [14.2691929133858, 56.2382833958982], [14.2630985625343, 56.22729639718], [14.2724546786303, 56.2242492217543], [14.2789782091192, 56.2315881935543], [14.2844717084783, 56.2373821186596] ] + ] + }, + "properties" : { + "feature::id" : 262, + "id" : 109005, + "name" : "Immeln", + "pfafstette" : 79, + "lke_type" : "N", + "altitude" : 99, + "objectid" : 60929, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 263, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.2390473356528, 56.3288832173595], [8.2624805438564, 56.3130464887383], [8.283252838308, 56.3011582127815], [8.3020509064274, 56.310600164805], [8.3071152261491, 56.3225313587255], [8.2932098058964, 56.3312866233291], [8.2764718000366, 56.3443766022706], [8.2667723402307, 56.3604708386742], [8.2336396722212, 56.3762217313679], [8.2047129646585, 56.3923588857352], [8.1943268174327, 56.4041613257645], [8.1853140450467, 56.4272941082219], [8.1749278978209, 56.4421866416407], [8.1600782823659, 56.4440321140817], [8.1494346273576, 56.4446329655741], [8.1433402765061, 56.4242469327962], [8.1491771195752, 56.3874662378685], [8.1508938381249, 56.3629171626076], [8.1469453854605, 56.3476812854789], [8.1667734847098, 56.3413294268449], [8.1853140450467, 56.3382822514192], [8.1977602545321, 56.3333896035525], [8.2173308459989, 56.3315441311115], [8.2390473356528, 56.3288832173595] ] + ] + }, + "properties" : { + "feature::id" : 263, + "id" : 108806, + "pfafstette" : 1, + "altitude" : -2, + "objectid" : 60948, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_60948", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 264, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.1910822193738, 56.6577206555576], [14.2053309833364, 56.6534288591833], [14.213914576085, 56.6497808322652], [14.22876419154, 56.6601669794909], [14.2357169016664, 56.6805530122688], [14.22876419154, 56.6902524720747], [14.2281633400476, 56.697891869621], [14.2250732466581, 56.7090934581579], [14.2102236312031, 56.7081492629555], [14.2016400384545, 56.7099518174327], [14.1951165079656, 56.717591214979], [14.165503112983, 56.7109389305988], [14.1359755539279, 56.6948446941952], [14.1269627815419, 56.6787075398279], [14.1272202893243, 56.6659179866325], [14.1272202893243, 56.6491799807728], [14.1300528749313, 56.62793558872], [14.1306537264237, 56.6121417780626], [14.1251602270647, 56.5917986632485], [14.1333146401758, 56.576863211866], [14.1423274125618, 56.5793095357993], [14.1518552005127, 56.5905969602637], [14.1625846914485, 56.6063478529573], [14.1728850027468, 56.6197382576451], [14.1818977751328, 56.6288368659586], [14.1752884087164, 56.6340299395715], [14.174344213514, 56.6467765748032], [14.1910822193738, 56.6577206555576] ] + ] + }, + "properties" : { + "feature::id" : 264, + "id" : 107501, + "name" : "Mckeln", + "pfafstette" : 0, + "lke_type" : "N", + "altitude" : 134, + "objectid" : 61491, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 265, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.0952263779528, 55.6170029527559], [27.0735098882988, 55.6179471479582], [27.0657846548251, 55.6249427760483], [27.036428767625, 55.6434404184215], [26.9937683116645, 55.6455863166087], [26.9680175334188, 55.6355005951291], [26.963639901117, 55.6240414988097], [26.9783178447171, 55.6194492766892], [26.9990043032412, 55.6121961408167], [27.0195190899103, 55.6036554660319], [27.0327378227431, 55.5963164942318], [27.0460423915034, 55.5926684673137], [27.0764283098334, 55.5912092565464], [27.094024674968, 55.5924109595312], [27.1008057132393, 55.596616919978], [27.11170687603, 55.6027112708295], [27.0952263779528, 55.6170029527559] ] + ] + }, + "properties" : { + "feature::id" : 265, + "id" : 107518, + "pfafstette" : 363, + "lke_type" : "N", + "altitude" : 127, + "objectid" : 61538, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_61538", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 266, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [26.6424418604651, 55.6464875938473], [26.6172060977843, 55.6561870536532], [26.5880218824391, 55.6626247482146], [26.5704255173045, 55.6635260254532], [26.5588376670939, 55.6473888710859], [26.5408979582494, 55.6379898370262], [26.5244174601721, 55.634341810108], [26.50707860282, 55.6306937831899], [26.4919714795825, 55.6240414988097], [26.510254532137, 55.6145566288226], [26.5408979582494, 55.6155008240249], [26.561326908991, 55.619148850943], [26.5964338033327, 55.6158012497711], [26.6196095037539, 55.5948572834646], [26.6272489013001, 55.5778188518586], [26.6406393059879, 55.5848573979125], [26.6645875297565, 55.5967027559055], [26.6588365226149, 55.6100073246658], [26.6455319538546, 55.6270886742355], [26.6424418604651, 55.6464875938473] ] + ] + }, + "properties" : { + "feature::id" : 266, + "id" : 107655, + "name" : "Drkiai", + "lge_id" : "lt", + "pfafstette" : 68239, + "lke_type" : "B", + "altitude" : 142, + "objectid" : 61579, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 267, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [13.5351240615272, 55.8978151895257], [13.5188152353049, 55.883909769273], [13.5060256821095, 55.8762703717268], [13.5127208844534, 55.8604765610694], [13.536669108222, 55.8516783785021], [13.5737502288958, 55.8547255539278], [13.5920332814503, 55.8707768723677], [13.5892865317708, 55.8847681285479], [13.5737502288958, 55.8893603506684], [13.5661966672771, 55.9030940990661], [13.5476561069401, 55.9115489379235], [13.5351240615272, 55.8978151895257] ] + ] + }, + "properties" : { + "feature::id" : 267, + "id" : 110241, + "name" : "V?stra Ringsjn", + "pfafstette" : 959, + "lke_type" : "N", + "altitude" : 53, + "objectid" : 61610, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 2 + } + }, { + "type" : "Feature", + "id" : 268, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.1758892602088, 56.0242944286761], [14.1646447537081, 56.0175992263322], [14.1718549716169, 56.0039083958982], [14.1922839223586, 55.9829644295916], [14.2148587712873, 55.9674710446805], [14.2206097784289, 55.9616771195752], [14.222927348471, 55.9547244094488], [14.2299658945248, 55.9596170573155], [14.2369186046512, 55.9662693416957], [14.2479056033694, 55.9729216260758], [14.2552874931331, 55.9878141594946], [14.2521973997437, 56.0024491851309], [14.2373477842886, 56.0060542940853], [14.2255024262956, 56.0072559970701], [14.2056743270463, 56.016955456876], [14.1758892602088, 56.0242944286761] ] + ] + }, + "properties" : { + "feature::id" : 268, + "id" : 109964, + "name" : "Hammarsjn", + "pfafstette" : 311, + "lke_type" : "N", + "altitude" : -2, + "objectid" : 61831, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 269, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.1490226149057, 54.5058139534884], [29.1545161142648, 54.5039684810474], [29.1667906518953, 54.5139683665995], [29.1758034242813, 54.5228523850943], [29.1836144936825, 54.5291613257645], [29.192369758286, 54.5373586568394], [29.1839578373924, 54.553452893243], [29.1760609320637, 54.5705771607764], [29.1764042757737, 54.5875297564549], [29.1667906518953, 54.5993751144479], [29.1481642556308, 54.5997184581578], [29.1284219923091, 54.5824225187695], [29.1252460629921, 54.5656845129097], [29.1335721479583, 54.5538391549167], [29.1547736220473, 54.5425517304523], [29.1669623237502, 54.5313072239517], [29.1535719190625, 54.51856058872], [29.1490226149057, 54.5058139534884] ] + ] + }, + "properties" : { + "feature::id" : 269, + "id" : 109982, + "pfafstette" : 74627, + "lke_type" : "N", + "altitude" : 164, + "objectid" : 61891, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_61891", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 270, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.0832951840322, 55.9784151254349], [12.0643254440579, 55.9577715848746], [12.0784025361655, 55.9489304843435], [12.0974581120674, 55.9486300585973], [12.1130802508698, 55.9525785112617], [12.1357409357261, 55.9573853232009], [12.1506763871086, 55.9665697674419], [12.163465940304, 55.9677714704267], [12.1799464383813, 55.9729216260758], [12.1710195019227, 55.9878141594946], [12.1501613715437, 56.0012474821461], [12.1273290148325, 56.0085006180187], [12.1050975096136, 56.0161400155649], [12.0881878318989, 56.0248952801685], [12.0717073338217, 56.016955456876], [12.0549693279619, 56.0042946575719], [12.0410639077092, 55.9954106390771], [12.0467290789233, 55.983908624794], [12.0600336476836, 55.9802176799121], [12.0695614356345, 55.9900029756455], [12.0883595037539, 55.9966552600256], [12.0832951840322, 55.9784151254349] ] + ] + }, + "properties" : { + "feature::id" : 270, + "id" : 110074, + "name" : "ARRESOE", + "lge_id" : "da", + "pfafstette" : 3, + "lke_type" : "N", + "altitude" : 20, + "objectid" : 61912, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 271, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [26.5001258926936, 54.7796734801318], [26.5244174601721, 54.7644805209669], [26.5414988097418, 54.7647809467131], [26.5437305438564, 54.7741799807727], [26.5336877403406, 54.7832785890862], [26.5247608038821, 54.7927205411097], [26.4934306903498, 54.8158104056034], [26.4566929133858, 54.839243613807], [26.443817524263, 54.8470976011719], [26.4301696117927, 54.8549945065006], [26.4150624885552, 54.8629343297931], [26.4099123329061, 54.8561962094854], [26.4290537447354, 54.8388573521333], [26.4576371085882, 54.8170121085882], [26.4789244186047, 54.7984715482512], [26.5001258926936, 54.7796734801318] ] + ] + }, + "properties" : { + "feature::id" : 271, + "id" : 110308, + "pfafstette" : 65841, + "lke_type" : "N", + "altitude" : 145, + "objectid" : 62429, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_62429", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 272, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [21.4546042391503, 55.3388945477019], [21.4425013733748, 55.3461906015382], [21.4355486632485, 55.3498386284563], [21.4255058597326, 55.3568342565464], [21.4097120490753, 55.3571346822926], [21.3951199414027, 55.3598814319722], [21.3826737319172, 55.3529287218458], [21.3867080205091, 55.3361907159861], [21.3896264420436, 55.324345357993], [21.3942615821278, 55.3146029802234], [21.4160639077092, 55.3182510071415], [21.4401838033327, 55.3236586705732], [21.4587243636696, 55.3164055347006], [21.4643895348837, 55.3000537905146], [21.4526300128182, 55.2921139672221], [21.4431022248672, 55.2880796786303], [21.4577801684673, 55.2717279344442], [21.4817283922358, 55.258080021974], [21.4912561801868, 55.2613417872185], [21.477522431789, 55.2717279344442], [21.4736598150522, 55.2796677577367], [21.4869643838125, 55.2874788271379], [21.4788099707013, 55.3029722120491], [21.4702263779527, 55.3176501556491], [21.4647328785937, 55.3267916819264], [21.4546042391503, 55.3388945477019] ] + ] + }, + "properties" : { + "feature::id" : 272, + "id" : 110452, + "pfafstette" : 1411, + "altitude" : 5, + "objectid" : 62577, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_62577", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 273, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.5123660959531, 56.1431342702802], [14.5086751510712, 56.1452801684673], [14.4938255356162, 56.1415892235854], [14.4809501464933, 56.1509882576451], [14.4667872184582, 56.1601727018861], [14.452795962278, 56.1556663156931], [14.4326245193188, 56.1568680186779], [14.4056720380883, 56.1689708844534], [14.3895348837209, 56.1753656610511], [14.3830971891595, 56.1683271149973], [14.382839681377, 56.1509882576451], [14.3762303149606, 56.1346365134591], [14.3701359641092, 56.1106024537631], [14.3715951748764, 56.0814182384179], [14.3819813221022, 56.0653240020143], [14.4164873649515, 56.0640793810657], [14.452795962278, 56.0722767121406], [14.4637829609962, 56.0857100347922], [14.4641263047061, 56.1018042711958], [14.4667872184582, 56.1185422770555], [14.4792334279436, 56.1279413111152], [14.4999198864677, 56.1324476973082], [14.5123660959531, 56.1431342702802] ] + ] + }, + "properties" : { + "feature::id" : 273, + "id" : 109522, + "name" : "Ivsjn", + "pfafstette" : 13, + "lke_type" : "N", + "altitude" : 9, + "objectid" : 62650, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 274, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [23.6847933070866, 54.2772328785937], [23.7011879692364, 54.2698939067936], [23.7194710217909, 54.2729410822194], [23.7370673869255, 54.2833272294452], [23.7170676158213, 54.3096788591833], [23.67955731551, 54.3359017350302], [23.6674544497345, 54.3377042895074], [23.6589566929134, 54.3313095129097], [23.6632484892877, 54.306717519685], [23.6847933070866, 54.2772328785937] ] + ] + }, + "properties" : { + "feature::id" : 274, + "id" : 112520, + "name" : "Dusia", + "lge_id" : "lt", + "pfafstette" : 2693, + "lke_type" : "B", + "altitude" : 106, + "objectid" : 63790, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 275, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.360116050174, 53.9641034151254], [27.3852659769273, 53.9601978804248], [27.4014031312946, 53.9687385552097], [27.4187419886468, 53.9857340688519], [27.4346216352316, 53.9930301226882], [27.4509304614539, 53.9927296969419], [27.4603724134774, 54.0000257507782], [27.4443210950375, 54.0068497070134], [27.4044073887566, 54.0116136009888], [27.3734206189343, 54.0048754806812], [27.356940120857, 53.9963348058964], [27.3383995605201, 53.9824293856437], [27.329386788134, 53.9620433528658], [27.3350519593481, 53.9535455960447], [27.3408029664897, 53.9620433528658], [27.360116050174, 53.9641034151254] ] + ] + }, + "properties" : { + "feature::id" : 275, + "id" : 112137, + "pfafstette" : 84955, + "lke_type" : "N", + "altitude" : 207, + "objectid" : 63958, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_63958", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 276, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.1640667917964, 54.476329312397], [27.1616633858268, 54.4854279207105], [27.1755688060795, 54.4924235488006], [27.2178000824025, 54.5012217313679], [27.2585721479582, 54.5161142647867], [27.2788294268449, 54.532251419154], [27.2771127082952, 54.5443972028932], [27.2646664988097, 54.5419937969236], [27.244924235488, 54.5258995605201], [27.2129074345358, 54.5164146905329], [27.1838090551181, 54.5155134132943], [27.1571999175975, 54.5091615546603], [27.1396893883904, 54.5055135277422], [27.1223505310383, 54.5024663523164], [27.0986598150522, 54.4990758331807], [27.0900762223036, 54.5146121360557], [27.0912779252884, 54.5304059467131], [27.0815784654825, 54.5224661234206], [27.0688747482146, 54.5115220426662], [27.0400338765794, 54.509719488189], [27.0178023713606, 54.5100199139352], [26.9962575535616, 54.5115220426662], [26.9723951657206, 54.5061143792346], [26.9885323200879, 54.4951273805164], [27.0099054660319, 54.4887755218824], [27.0324803149606, 54.4838828740157], [27.0683597326497, 54.4817369758286], [27.108874290423, 54.4838828740157], [27.1367709668559, 54.4738829884636], [27.1467279344442, 54.4562866233291], [27.1657835103461, 54.4374027192822], [27.1800322743087, 54.4313512863944], [27.1736804156748, 54.4428962186413], [27.1665560336935, 54.4616942867607], [27.1640667917964, 54.476329312397] ] + ] + }, + "properties" : { + "feature::id" : 276, + "id" : 110788, + "pfafstette" : 6933, + "lke_type" : "N", + "altitude" : 153, + "objectid" : 64244, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_64244", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 277, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [17.0730234847098, 54.6462415308552], [17.1001476377953, 54.6404476057499], [17.1425505859733, 54.6431943554294], [17.1670138253067, 54.6535805026552], [17.156284334371, 54.6601469511078], [17.1450398278703, 54.6717777192822], [17.1132805347006, 54.6805329838857], [17.0758560703168, 54.6751253204541], [17.068817524263, 54.6671854971617], [17.0660707745834, 54.6564989241897], [17.0730234847098, 54.6462415308552] ] + ] + }, + "properties" : { + "feature::id" : 277, + "id" : 113031, + "name" : "Jezioro Gardno", + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : -2, + "objectid" : 64977, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 278, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [13.4901460355246, 54.4351280672038], [13.4768414667643, 54.4287762085699], [13.5061973539645, 54.4193342565464], [13.539330021974, 54.4214372367698], [13.5500595129097, 54.4320808917781], [13.5564113715437, 54.4414799258378], [13.5494586614173, 54.4466729994506], [13.5466260758103, 54.4606213376671], [13.5394158579015, 54.4773593435268], [13.5116908533236, 54.479505241714], [13.4892876762498, 54.4764580662882], [13.4780431697491, 54.462466810108], [13.4892876762498, 54.450621452115], [13.5046523072697, 54.4433253982787], [13.4901460355246, 54.4351280672038] ] + ] + }, + "properties" : { + "feature::id" : 278, + "id" : 113930, + "pfafstette" : 0, + "lke_type" : "N", + "altitude" : -3, + "objectid" : 65498, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_65498", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 279, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [17.4636627906977, 54.713708569859], [17.4882977018861, 54.7195024949643], [17.501001419154, 54.7337512589269], [17.5171385735213, 54.7358542391503], [17.531043993774, 54.7404893792346], [17.5329323841787, 54.7562402719282], [17.5052932155283, 54.7620341970335], [17.4623752517854, 54.7580428264054], [17.4429763321736, 54.7549956509797], [17.4186847646951, 54.7528926707563], [17.3718183482879, 54.7443949139352], [17.3426341329427, 54.7398885277422], [17.3200592840139, 54.7395022660685], [17.2959393883904, 54.7337512589269], [17.2916475920161, 54.7240088811573], [17.3107890038454, 54.7179574482695], [17.3354239150339, 54.7066700238052], [17.3547369987182, 54.6933225370811], [17.3806594488189, 54.68482478026], [17.4022042666178, 54.6839664209852], [17.41954312397, 54.6894170023805], [17.4374828328145, 54.7024640633584], [17.4636627906977, 54.713708569859] ] + ] + }, + "properties" : { + "feature::id" : 279, + "id" : 112741, + "name" : "Jezioro ebsko", + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : -4, + "objectid" : 65811, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 280, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [26.969991759751, 52.829524125618], [26.9772878135873, 52.8210692867607], [26.9949700146493, 52.8170779161326], [27.0186607306354, 52.8241164621864], [27.042093938839, 52.8310691723128], [27.0466432429958, 52.8374210309467], [27.0333386742355, 52.8426570225234], [27.0178023713606, 52.8532577595679], [27.0038111151804, 52.8617555163889], [26.9885323200879, 52.8602533876579], [26.9772878135873, 52.8593091924556], [26.9611506592199, 52.8593091924556], [26.9475027467497, 52.8520560565831], [26.9587472532503, 52.8380648004029], [26.969991759751, 52.829524125618] ] + ] + }, + "properties" : { + "feature::id" : 280, + "id" : 115370, + "pfafstette" : 446513, + "lke_type" : "N", + "altitude" : 148, + "objectid" : 65994, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_65994", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 281, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.514191540011, 52.7527009705182], [27.541229857169, 52.7678080937557], [27.5703282365867, 52.7845460996155], [27.5911005310383, 52.7955330983336], [27.6098985991577, 52.8079793078191], [27.6229456601355, 52.8155757874016], [27.6345335103461, 52.8271636376122], [27.6383961270829, 52.8441162332906], [27.6286966672771, 52.8386227339315], [27.6053492950009, 52.8231293490203], [27.589812992126, 52.8104256317524], [27.5743625251785, 52.8003399102729], [27.5558219648416, 52.7900395989746], [27.5480967313679, 52.7827006271745], [27.5332471159128, 52.776606276323], [27.5190841878777, 52.7717994643838], [27.5009728071782, 52.7672072422633], [27.483633949826, 52.7566065052188], [27.4852648324483, 52.7474220609779], [27.4985694012086, 52.745061572972], [27.514191540011, 52.7527009705182] ] + ] + }, + "properties" : { + "feature::id" : 281, + "id" : 115171, + "pfafstette" : 444113, + "lke_type" : "N", + "altitude" : 141, + "objectid" : 66144, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_66144", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 282, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.8092954587072, 53.7788265656473], [12.8357329243728, 53.7796849249222], [12.8613120307636, 53.7902856619667], [12.8737582402491, 53.8039764924007], [12.8880928401392, 53.8122167414393], [12.9054316974913, 53.8210578419703], [12.9145303058048, 53.8407571873283], [12.9033716352317, 53.8547484435085], [12.8808826222304, 53.8511004165904], [12.8595094762864, 53.8407571873283], [12.8344453854606, 53.8288689113715], [12.8224283556125, 53.8164227018861], [12.8120422083868, 53.7976246337667], [12.8092954587072, 53.7788265656473] ] + ] + }, + "properties" : { + "feature::id" : 282, + "id" : 115808, + "name" : "Kummerower See", + "pfafstette" : 433, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 66713, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 283, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [10.7317226698407, 53.9068508514924], [10.732666865043, 53.9056491485076], [10.7543833546969, 53.8977522431789], [10.7769582036257, 53.8900270097052], [10.817644433254, 53.8916578923274], [10.8459702893243, 53.9026448910456], [10.8590173503021, 53.9105417963743], [10.8706052005127, 53.9181382759568], [10.884253112983, 53.9189966352316], [10.8977293535982, 53.9059495742538], [10.9150682109504, 53.8986106024538], [10.9387589269365, 53.9041041018128], [10.9396172862113, 53.9138893975462], [10.9094030397363, 53.9217433849112], [10.8876007141549, 53.9296402902399], [10.8945534242813, 53.9400264374657], [10.899446072148, 53.9494254715254], [10.8757553561619, 53.9463353781359], [10.8532663431606, 53.9266360327779], [10.8352407983886, 53.90625], [10.7963571232375, 53.8971513916865], [10.7615077366783, 53.9026448910456], [10.7317226698407, 53.9068508514924] ] + ] + }, + "properties" : { + "feature::id" : 283, + "id" : 115637, + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 66850, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_66850", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 284, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [10.4145589177806, 54.3070179454312], [10.4506958432522, 54.2988206143563], [10.4843435268266, 54.2994643838125], [10.4883778154184, 54.3188633034243], [10.4799658945248, 54.3243568027834], [10.4723264969786, 54.323755951291], [10.4355887200147, 54.3286056811939], [10.3962758652262, 54.3300648919612], [10.3862330617103, 54.3222109045962], [10.3929282640542, 54.310065120857], [10.4145589177806, 54.3070179454312] ] + ] + }, + "properties" : { + "feature::id" : 284, + "id" : 114495, + "name" : "Selenter See", + "pfafstette" : 3, + "lke_type" : "N", + "altitude" : 34, + "objectid" : 67195, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 285, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [24.9570534242813, 52.580127838308], [24.9746497894159, 52.5762223036074], [24.9749931331258, 52.6007284609046], [24.9719030397363, 52.6094837255082], [24.9622035799304, 52.6250200283831], [24.93422106757, 52.6365220426662], [24.9150796557407, 52.6380670893609], [24.8992858450833, 52.6359211911738], [24.8886421900751, 52.6425734755539], [24.8804019410364, 52.651414576085], [24.8588571232375, 52.6483674006592], [24.8203167917964, 52.646564846182], [24.7949093572606, 52.6344619804065], [24.8035787859366, 52.6237754074345], [24.8217760025636, 52.6176810565831], [24.8332780168467, 52.6158355841421], [24.8515610694012, 52.6182819080755], [24.889328877495, 52.612187557224], [24.9139637886834, 52.6073807452848], [24.9355944424098, 52.593818668742], [24.9570534242813, 52.580127838308] ] + ] + }, + "properties" : { + "feature::id" : 285, + "id" : 116859, + "pfafstette" : 4649533, + "lke_type" : "N", + "altitude" : 144, + "objectid" : 67543, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_67543", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 286, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.5518735121773, 53.5028211408167], [12.5859503753891, 53.4918341420985], [12.6014866782641, 53.4878427714704], [12.6139328877495, 53.4930358450833], [12.617194652994, 53.5100742766892], [12.6047484435085, 53.526812282549], [12.5825169382897, 53.5313615867057], [12.5647489013001, 53.5246663843618], [12.5419165445889, 53.5136793856437], [12.5518735121773, 53.5028211408167] ] + ] + }, + "properties" : { + "feature::id" : 286, + "id" : 116919, + "name" : "Klpinsee", + "pfafstette" : 18799, + "lke_type" : "N", + "altitude" : 60, + "objectid" : 67552, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 287, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.296683299762, 53.4104187648782], [12.3084428218275, 53.4024789415858], [12.3103312122322, 53.4067278199963], [12.3029493224684, 53.4240666773485], [12.305696072148, 53.4359120353415], [12.3063827595679, 53.4375], [12.3107603918696, 53.4477573933345], [12.3291292803516, 53.4635512039919], [12.3476698406885, 53.4750961362388], [12.3610602453763, 53.4854822834646], [12.3707597051822, 53.4993877037173], [12.3562534334371, 53.5064691677348], [12.3381420527376, 53.5064691677348], [12.332734389306, 53.516125709577], [12.3251808276872, 53.5280139855338], [12.3066402673503, 53.5346662699139], [12.2990867057316, 53.5228209119209], [12.2919623237502, 53.5048812030764], [12.2854387932613, 53.49058952115], [12.2829495513642, 53.4754823979125], [12.2826062076543, 53.4568989196118], [12.2802028016847, 53.4402038317158], [12.278486083135, 53.4375], [12.2736792711958, 53.42981768449], [12.2844087621315, 53.4188736037356], [12.296683299762, 53.4104187648782] ], + [ [12.3251808276872, 53.504280351584], [12.3329918970885, 53.4969413797839], [12.326897546237, 53.4948813175243], [12.3251808276872, 53.504280351584] ] + ] + }, + "properties" : { + "feature::id" : 287, + "id" : 116922, + "name" : "Plauer See", + "pfafstette" : 187395, + "lke_type" : "N", + "altitude" : 62, + "objectid" : 67555, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 288, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [10.9088021882439, 53.5988286257096], [10.9145531953855, 53.5805884911188], [10.9186733199048, 53.5656959577001], [10.9292311389855, 53.5593440990661], [10.9370422083867, 53.5696444103644], [10.9419348562534, 53.5781421671855], [10.9512909723494, 53.5927342748581], [10.9455399652078, 53.6100731322102], [10.9382439113716, 53.6203734435085], [10.9461408167002, 53.6371114493682], [10.9546385735213, 53.6550511582128], [10.9482867148874, 53.6729908670573], [10.9414198406885, 53.6657377311848], [10.93249290423, 53.6426049487273], [10.9121497894159, 53.6371114493682], [10.8887165812122, 53.6429053744735], [10.8778154184215, 53.6341071919062], [10.8986735488006, 53.6213605566746], [10.9130939846182, 53.6161674830617], [10.9088021882439, 53.5988286257096] ] + ] + }, + "properties" : { + "feature::id" : 288, + "id" : 116443, + "name" : "Lassahner See", + "pfafstette" : 1627, + "lke_type" : "N", + "altitude" : 48, + "objectid" : 67935, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 289, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.8719327961912, 53.2317083638528], [14.8968252151621, 53.2197771699322], [14.9133057132393, 53.2252277513276], [14.9086705731551, 53.2441545733382], [14.9025762223036, 53.2693474180553], [14.9019753708112, 53.2906347280718], [14.9048079564183, 53.3033384453397], [14.9135632210218, 53.3206773026918], [14.92455021974, 53.3429088079106], [14.9230051730452, 53.3569000640908], [14.9048079564183, 53.3496040102545], [14.8828339589819, 53.3216644158579], [14.8725336476836, 53.2949265244461], [14.8677268357444, 53.2839395257279], [14.8603449459806, 53.2614934306904], [14.8719327961912, 53.2317083638528] ] + ] + }, + "properties" : { + "feature::id" : 289, + "id" : 117270, + "name" : "Miedwie", + "lge_id" : "pl", + "pfafstette" : 12219, + "lke_type" : "B", + "altitude" : 9, + "objectid" : 68382, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 290, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [26.28004257462, 52.2790583226515], [26.3002140175792, 52.2863972944516], [26.3118018677898, 52.2924916453031], [26.3251064365501, 52.3101309284014], [26.3381534975279, 52.3271693600073], [26.3120593755722, 52.3316757462003], [26.283218503937, 52.329229422267], [26.2655363028749, 52.3250234618202], [26.2524892418971, 52.3201308139535], [26.2583260849661, 52.3067833272295], [26.2624462094854, 52.2918907938107], [26.2670813495697, 52.2800454358176], [26.28004257462, 52.2790583226515] ] + ] + }, + "properties" : { + "feature::id" : 290, + "id" : 117304, + "pfafstette" : 464215, + "lke_type" : "N", + "altitude" : 133, + "objectid" : 68493, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_68493", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 291, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [23.8613578099249, 52.902484663981], [23.8747482146127, 52.9163900842337], [23.851830021974, 52.9364756912653], [23.8148347372276, 52.941368339132], [23.7859080296649, 52.9471622642373], [23.7786119758286, 52.958063427028], [23.7722601171947, 52.9638573521333], [23.7677966489654, 52.9538145486175], [23.7589555484344, 52.942870467863], [23.7524320179454, 52.9374628044314], [23.7644490477934, 52.9337718595495], [23.7829896081304, 52.9298234068852], [23.7939766068486, 52.9188793261308], [23.8254783922359, 52.9066906244278], [23.8613578099249, 52.902484663981] ] + ] + }, + "properties" : { + "feature::id" : 291, + "id" : 116178, + "pfafstette" : 69915, + "lke_type" : "N", + "altitude" : 139, + "objectid" : 68565, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_68565", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 292, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [25.9117206097784, 52.6806846273576], [25.9382439113715, 52.6702984801319], [25.9657972440945, 52.6687534334371], [25.9909471708478, 52.6766503387658], [25.9980715528292, 52.6912853644021], [25.983736952939, 52.7037315738876], [25.950690120857, 52.7109847097601], [25.9166132576451, 52.7100834325215], [25.9009052829152, 52.6985385002747], [25.9117206097784, 52.6806846273576] ] + ] + }, + "properties" : { + "feature::id" : 292, + "id" : 116148, + "pfafstette" : 8673, + "lke_type" : "N", + "altitude" : 148, + "objectid" : 68809, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_68809", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 293, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.1768105658304, 53.6246223219191], [16.1630768174327, 53.6346651254349], [16.1539782091192, 53.6438066517121], [16.1451371085882, 53.641660753525], [16.1502872642373, 53.6255665171214], [16.1447937648782, 53.6121761124336], [16.1292574620033, 53.6048800585973], [16.1335492583776, 53.597927348471], [16.1508881157297, 53.6011891137154], [16.1639351767076, 53.602433734664], [16.1618751144479, 53.5930347006043], [16.1635918329976, 53.5851377952756], [16.1788706280901, 53.5851377952756], [16.1919176890679, 53.5817901941036], [16.2116599523897, 53.5723911600439], [16.2287413019594, 53.5748374839773], [16.2175826313862, 53.5857815647317], [16.2080548434353, 53.5988286257096], [16.2011021333089, 53.6094293627541], [16.1892567753159, 53.6164679088079], [16.1768105658304, 53.6246223219191] ] + ] + }, + "properties" : { + "feature::id" : 293, + "id" : 115995, + "name" : "Drawsko", + "lge_id" : "pl", + "pfafstette" : 4295, + "lke_type" : "B", + "altitude" : 126, + "objectid" : 68865, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 294, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.952383949826, 52.3963531175609], [27.9895509064274, 52.3867394936825], [28.0248294726241, 52.3854948727339], [28.0390782365867, 52.3961385277422], [28.0359881431972, 52.4048937923457], [28.0248294726241, 52.4158807910639], [28.0119540835012, 52.4256231688336], [27.9868041567478, 52.4295716214979], [27.9630276048343, 52.4365243316243], [27.9295515931148, 52.4346788591833], [27.8947022065556, 52.4238206143564], [27.89830731551, 52.4122327641458], [27.922341375206, 52.4042929408533], [27.952383949826, 52.3963531175609] ] + ] + }, + "properties" : { + "feature::id" : 294, + "id" : 116092, + "pfafstette" : 4433, + "lke_type" : "N", + "altitude" : 131, + "objectid" : 68911, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_68911", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 295, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [19.6064708844534, 52.5702996246109], [19.5911920893609, 52.5751493545138], [19.5347120490753, 52.5878959897455], [19.5197765976927, 52.5912435909174], [19.4821804614539, 52.6067369758286], [19.4275029756455, 52.6295264145761], [19.3474180553012, 52.6423588857352], [19.2757450558506, 52.6490111701154], [19.242955731551, 52.6569080754441], [19.2043295641824, 52.6651483244827], [19.1550597418055, 52.6711568394067], [19.1350599707013, 52.6674658945248], [19.1800379967039, 52.6554059467131], [19.2463891686504, 52.6374662378685], [19.2739425013734, 52.6277667780626], [19.3167746291888, 52.6262217313679], [19.3635552096686, 52.6247196026369], [19.3977179088079, 52.6198269547702], [19.4255287493133, 52.6109858542392], [19.4714509705182, 52.5958358130379], [19.5128238875664, 52.5836041933712], [19.5434673136788, 52.5718017533419], [19.5772866691082, 52.5633039965208], [19.6076725874382, 52.5620593755722], [19.6350542483062, 52.5575100714155], [19.65745742538, 52.551759064274], [19.6850965940304, 52.5423600302143], [19.7082722944516, 52.5326176524446], [19.7286154092657, 52.5295275590551], [19.7183150979674, 52.536566105109], [19.687671671855, 52.549913591833], [19.6456120673869, 52.5624027192822], [19.6064708844534, 52.5702996246109] ] + ] + }, + "properties" : { + "feature::id" : 295, + "id" : 118742, + "pfafstette" : 1773, + "lke_type" : "N", + "altitude" : 53, + "objectid" : 68979, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_68979", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 296, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [5.5049155374474, 52.9457030534701], [5.4836282274309, 52.9283641961179], [5.4821690166636, 52.9216260758103], [5.479765610694, 52.9107249130196], [5.4846582585607, 52.9003816837576], [5.4959027650613, 52.9061326908991], [5.4956452572789, 52.9159179866325], [5.5062030763596, 52.9271195751694], [5.5344430965025, 52.9365186092291], [5.5578763047061, 52.9438575810291], [5.5830262314594, 52.9499090139169], [5.6088628456327, 52.9593509659403], [5.6177039461637, 52.9708529802234], [5.5995067295367, 52.973256386193], [5.5715242171763, 52.967247871269], [5.5422541659037, 52.9593509659403], [5.5049155374474, 52.9457030534701] ] + ] + }, + "properties" : { + "feature::id" : 296, + "id" : 118636, + "name" : "Heegermeer en Fluessen", + "lge_id" : "nl", + "pfafstette" : 0, + "lke_type" : "P", + "altitude" : -2, + "objectid" : 69074, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 297, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [5.7527238600989, 52.8982787035342], [5.7478312122322, 52.888793833547], [5.7573590001831, 52.8821415491668], [5.7631100073247, 52.8821415491668], [5.7904058322652, 52.884287447354], [5.8302337026186, 52.8893946850394], [5.8438816150888, 52.9030855154734], [5.8381306079473, 52.917677623146], [5.8027662058231, 52.9216260758103], [5.7678309833364, 52.911325764512], [5.7527238600989, 52.8982787035342] ] + ] + }, + "properties" : { + "feature::id" : 297, + "id" : 118875, + "name" : "Tjeukemeer", + "lge_id" : "nl", + "pfafstette" : 0, + "lke_type" : "P", + "altitude" : -2, + "objectid" : 69732, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 298, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [18.3469144845266, 52.5997413477385], [18.3489745467863, 52.6070803195386], [18.3593606940121, 52.6133892602088], [18.3621074436916, 52.6052348470976], [18.3647683574437, 52.5888831029116], [18.3703476927303, 52.5666515976927], [18.3794463010438, 52.5447634361839], [18.3784162699139, 52.5326176524446], [18.3706052005127, 52.5173817753159], [18.375240340597, 52.5055793352866], [18.3852831441128, 52.5161800723311], [18.3900041201245, 52.5383257416224], [18.3833089177806, 52.5505573612892], [18.3806480040286, 52.5587117744003], [18.3789312854788, 52.5678962186413], [18.3754978483794, 52.5781106940121], [18.3708627082952, 52.5887972669841], [18.3703476927303, 52.604333569859], [18.3700043490203, 52.6179814823292], [18.3633091466764, 52.6377666636147], [18.3581589910273, 52.6548050952207], [18.3437385552097, 52.6654058322652], [18.3295756271745, 52.6751052920711], [18.3337815876213, 52.6669508789599], [18.3420218366599, 52.6554059467131], [18.3486312030764, 52.6429597372276], [18.3481161875114, 52.6213290835012], [18.3365283373009, 52.6039902261491], [18.3286314319722, 52.5927886376122], [18.3344682750412, 52.5693554294085], [18.350862937191, 52.551415720564], [18.3614207562717, 52.556265450467], [18.3551547335653, 52.5645056995056], [18.3434810474272, 52.5690979216261], [18.3459702893243, 52.5858359274858], [18.3469144845266, 52.5997413477385] ] + ] + }, + "properties" : { + "feature::id" : 298, + "id" : 118958, + "name" : "Gopo", + "lge_id" : "pl", + "pfafstette" : 495, + "lke_type" : "B", + "altitude" : 75, + "objectid" : 69999, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 299, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [9.2927691814686, 52.4590562625893], [9.31457150705, 52.4560090871635], [9.3380047152536, 52.4572107901483], [9.3535410181286, 52.4642493362022], [9.3701073521333, 52.4748500732467], [9.3816952023439, 52.4906868018678], [9.3729399377403, 52.5049355658304], [9.3368030122688, 52.502832585607], [9.293370032961, 52.4882404779345], [9.2804946438381, 52.4706011948361], [9.2927691814686, 52.4590562625893] ] + ] + }, + "properties" : { + "feature::id" : 299, + "id" : 120351, + "name" : "Steinhuder Meer", + "pfafstette" : 7329, + "lke_type" : "N", + "altitude" : 38, + "objectid" : 70601, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 300, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [23.8501133034243, 51.4922003753891], [23.8717439571507, 51.4997539370079], [23.8874519318806, 51.5082946117927], [23.888052783373, 51.5250326176525], [23.8704564182384, 51.532285753525], [23.8552634590734, 51.5280797930782], [23.8417872184582, 51.5253330433987], [23.8144913935177, 51.5205262314594], [23.7932040835012, 51.5034448818898], [23.8011868247574, 51.4882948406885], [23.8254783922359, 51.4840030443142], [23.8501133034243, 51.4922003753891] ] + ] + }, + "properties" : { + "feature::id" : 300, + "id" : 120807, + "pfafstette" : 894, + "lke_type" : "N", + "altitude" : 157, + "objectid" : 71425, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_71425", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 301, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [19.9520463285113, 51.4693680186779], [19.9282697765977, 51.4501836888848], [19.9069824665812, 51.4298834920344], [19.8723047518769, 51.4113858496612], [19.8542792071049, 51.3970941677348], [19.8656953854605, 51.3940469923091], [19.8763390404688, 51.4058923503022], [19.8843217817249, 51.4113429316975], [19.9149652078374, 51.4222440944882], [19.9526471800037, 51.445977728438], [19.9870673869255, 51.4642607809925], [19.9882690899103, 51.4757627952756], [19.9520463285113, 51.4693680186779] ] + ] + }, + "properties" : { + "feature::id" : 301, + "id" : 122107, + "pfafstette" : 42535, + "lke_type" : "N", + "altitude" : 159, + "objectid" : 72033, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_72033", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 302, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [18.6447651529024, 51.7459742950009], [18.6574688701703, 51.7438283968138], [18.6736060245376, 51.7593646996887], [18.6799578831716, 51.7857592473906], [18.6823612891412, 51.8024972532503], [18.695236678264, 51.8033985304889], [18.7062236769822, 51.8110379280352], [18.7149789415858, 51.8231837117744], [18.7213308002197, 51.8444710217909], [18.7036485991577, 51.8669600347922], [18.6778978209119, 51.8630545000916], [18.6711167826405, 51.84996452115], [18.6660524629189, 51.8268317386926], [18.6525762223036, 51.8036989562351], [18.6478552462919, 51.7861455090643], [18.6447651529024, 51.7624118751145], [18.6447651529024, 51.7459742950009] ] + ] + }, + "properties" : { + "feature::id" : 302, + "id" : 121385, + "pfafstette" : 9539, + "lke_type" : "N", + "altitude" : 112, + "objectid" : 73364, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_73364", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 303, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [26.5645886742355, 50.2904115546603], [26.6013264511994, 50.2794245559421], [26.6145451840322, 50.2769782320088], [26.610081715803, 50.2959050540194], [26.622098745651, 50.3095958844534], [26.6291372917048, 50.3150893838125], [26.6147168558872, 50.3216558322651], [26.579867469328, 50.3222566837576], [26.5498248947079, 50.3147031221388], [26.5451897546237, 50.3007977018861], [26.5645886742355, 50.2904115546603] ] + ] + }, + "properties" : { + "feature::id" : 303, + "id" : 123280, + "pfafstette" : 49721, + "altitude" : 195, + "objectid" : 75036, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_75036", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 304, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.1648164255631, 48.7183694607215], [29.1527135597876, 48.7275539049624], [29.128937007874, 48.7403005401941], [29.1073921900751, 48.7422747665263], [29.089881660868, 48.7520171442959], [29.0820705914668, 48.7637337483977], [29.1073921900751, 48.7735190441311], [29.1191517121406, 48.7813301135323], [29.1171774858085, 48.7949780260026], [29.0974352224867, 48.7988835607032], [29.0879074345358, 48.7793558872001], [29.0703110694012, 48.7774245788317], [29.056663156931, 48.7754503524995], [29.0546889305988, 48.7637337483977], [29.0742595220656, 48.7422747665263], [29.089881660868, 48.7305152444607], [29.1073921900751, 48.7266097097601], [29.1269627815419, 48.7187986403589], [29.1406106940121, 48.7148931056583], [29.1445591466764, 48.7031765015565], [29.1582070591467, 48.6973396584875], [29.1738291979491, 48.7012451931881], [29.1960607031679, 48.7163093984618], [29.1860178996521, 48.7277684947812], [29.1855887200147, 48.7329615683941], [29.1731425105292, 48.7263092840139], [29.1648164255631, 48.7183694607215] ] + ] + }, + "properties" : { + "feature::id" : 304, + "id" : 126352, + "pfafstette" : 91311, + "altitude" : 208, + "objectid" : 76059, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_76059", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 305, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [19.5252700970518, 49.3992200375389], [19.5505058597326, 49.3855721250687], [19.5691322559971, 49.3877180232558], [19.5879303241165, 49.3928252609412], [19.5957413935177, 49.4107649697857], [19.6079300952206, 49.4402496108771], [19.6162561801868, 49.4545412928035], [19.5881878318989, 49.4423955090643], [19.5671580296649, 49.419563152353], [19.5513642190075, 49.4141125709577], [19.5340253616554, 49.4229965894525], [19.5237250503571, 49.4311510025636], [19.5099913019593, 49.4278034013917], [19.4942833272294, 49.4183614493682], [19.4879314685955, 49.4107649697857], [19.5015793810657, 49.4087049075261], [19.5252700970518, 49.3992200375389] ] + ] + }, + "properties" : { + "feature::id" : 305, + "id" : 127640, + "pfafstette" : 92953, + "lke_type" : "N", + "altitude" : 619, + "objectid" : 76987, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_76987", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 306, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [22.4331338124885, 49.3752718137704], [22.4288420161143, 49.3587913156931], [22.43922816334, 49.3508944103644], [22.4479834279436, 49.3603792803516], [22.4589704266618, 49.3694349707013], [22.4741633858268, 49.3709800173961], [22.481974455228, 49.3697783144113], [22.4993133125801, 49.359134659403], [22.5, 49.3582763001282], [22.5133045687603, 49.3423966535433], [22.5161371543673, 49.3317529985351], [22.5230898644937, 49.3430404229994], [22.5166521699322, 49.3581475462369], [22.5060943508515, 49.3679328419703], [22.5, 49.3717525407434], [22.4987982970152, 49.3725250640908], [22.4896138527742, 49.3758726652628], [22.4775109869987, 49.3797781999634], [22.4665239882805, 49.3883188747482], [22.4531335835927, 49.4019667872185], [22.4389706555576, 49.4007650842336], [22.4382839681377, 49.3901643471891], [22.4331338124885, 49.3752718137704] ] + ] + }, + "properties" : { + "feature::id" : 306, + "id" : 127294, + "pfafstette" : 499791, + "lke_type" : "N", + "altitude" : 492, + "objectid" : 77223, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_77223", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 307, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.193336843069, 48.5879417689068], [27.1582299487273, 48.5918473036074], [27.1445820362571, 48.5879417689068], [27.1305907800769, 48.5866113120308], [27.1198612891412, 48.6015038454495], [27.1056125251785, 48.6161388710859], [27.0874153085515, 48.6161388710859], [27.099861518037, 48.6063964933162], [27.1126510712324, 48.5930060886284], [27.1157411646219, 48.5812036485991], [27.1132519227248, 48.5723196301044], [27.0957413935177, 48.5742938564365], [27.0488749771104, 48.576225164805], [27.00587117744, 48.5879417689068], [26.9784895165721, 48.595752838308], [26.9609789873649, 48.5918473036074], [26.9505928401392, 48.5811178126717], [26.9725668375755, 48.5705170756272], [27.0038969511079, 48.5586717176341], [27.039089681377, 48.5488864219007], [27.0801192547153, 48.5488864219007], [27.121062992126, 48.5469551135323], [27.1426078099249, 48.5566974913019], [27.1584874565098, 48.5738646767991], [27.1992595220656, 48.5625772523347], [27.2559112342062, 48.5606030260026], [27.2715333730086, 48.5821049258377], [27.2733359274858, 48.5927056628822], [27.2685291155466, 48.6045510208753], [27.2707608496612, 48.6124908441677], [27.2900739333455, 48.6063964933162], [27.3280992492218, 48.5918473036074], [27.3515324574254, 48.5977270646402], [27.36912882256, 48.6113749771104], [27.3925620307636, 48.609443668742], [27.4199436916316, 48.6016325993408], [27.4495570866142, 48.5879417689068], [27.4531621955686, 48.6074694424098], [27.4316173777696, 48.623134499176], [27.3759956967588, 48.6416750595129], [27.3482706921809, 48.6286709164988], [27.3287859366416, 48.6267825260941], [27.3250949917598, 48.6419325672954], [27.326897546237, 48.6504732420802], [27.3181422816334, 48.6412887978392], [27.3214040468779, 48.621289026735], [27.3144513367515, 48.6172547381432], [27.2988291979491, 48.6250658075444], [27.280975325032, 48.6347652673503], [27.2553962186413, 48.6286279985351], [27.2394307361289, 48.6343360877129], [27.2314479948727, 48.639829587072], [27.2339372367698, 48.6306880607947], [27.2258686595862, 48.6157955273759], [27.2299887841055, 48.5966970335103], [27.2244952847464, 48.5796586019044], [27.193336843069, 48.5879417689068] ] + ] + }, + "properties" : { + "feature::id" : 307, + "id" : 127365, + "pfafstette" : 3571, + "lke_type" : "N", + "altitude" : 238, + "objectid" : 77442, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_77442", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 308, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.1777776506135, 49.4649274400293], [14.1855887200147, 49.4434255401941], [14.2038717725691, 49.4375886971251], [14.2012108588171, 49.4610219053287], [14.192541430141, 49.4764294543124], [14.1952881798206, 49.5000772523347], [14.1972624061527, 49.5196049258377], [14.1897946804615, 49.5366433574437], [14.1894513367515, 49.5490895669291], [14.1914255630837, 49.5684455685772], [14.1952881798206, 49.580162172679], [14.1961465390954, 49.6017069904779], [14.1839578373924, 49.60436790423], [14.165159769273, 49.5797759110053], [14.1673915033877, 49.5570293902216], [14.1709966123421, 49.5427377082952], [14.1718549716169, 49.5287035341512], [14.1732283464567, 49.5214503982787], [14.1786360098883, 49.5050128181652], [14.1722841512544, 49.485013047061], [14.1777776506135, 49.4649274400293] ] + ] + }, + "properties" : { + "feature::id" : 308, + "id" : 127943, + "pfafstette" : 93911, + "lke_type" : "N", + "altitude" : 398, + "objectid" : 77728, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_77728", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 309, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.5046179728987, 48.8773375984252], [16.5065921992309, 48.8764792391503], [16.5312271104193, 48.882874015748], [16.554660318623, 48.8887537767808], [16.57251419154, 48.8896979719831], [16.5835011902582, 48.8903417414393], [16.5986083134957, 48.8912859366416], [16.6328568485625, 48.8906850851492], [16.6621268998352, 48.8887537767808], [16.6804099523897, 48.8849340780077], [16.6949162241348, 48.8776809421351], [16.7101950192273, 48.8688827595678], [16.7180060886285, 48.8658355841421], [16.7262463376671, 48.8716295092474], [16.7132851126167, 48.8964790102545], [16.6876201702985, 48.9095689891961], [16.669165445889, 48.9138178676067], [16.6398953946164, 48.9168650430324], [16.58787882256, 48.9132170161143], [16.5481367881341, 48.9065218137704], [16.5319996337667, 48.9013716581212], [16.5137165812122, 48.8926593114814], [16.5046179728987, 48.8773375984252] ] + ] + }, + "properties" : { + "feature::id" : 309, + "id" : 129343, + "pfafstette" : 96571, + "lke_type" : "N", + "altitude" : 168, + "objectid" : 78502, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_78502", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 310, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.1662756363304, 47.3615609549533], [29.1523702160776, 47.3789856482329], [29.1486792711958, 47.3870971433803], [29.1393231550998, 47.395337392419], [29.1237868522249, 47.3913460217909], [29.1133148690716, 47.3985133217359], [29.1012978392236, 47.4111312030764], [29.0901391686504, 47.4373111609595], [29.0815555759019, 47.4345214933162], [29.0722852957334, 47.423877838308], [29.0754612250504, 47.4025905282915], [29.1115981505219, 47.3804448590002], [29.1406106940121, 47.3652948177989], [29.1465333730086, 47.3516469053287], [29.1327996246109, 47.3418616095953], [29.1116839864494, 47.3561532915217], [29.0873924189709, 47.3719471021791], [29.0703110694012, 47.3640072788867], [29.0703110694012, 47.3388144341696], [29.0821564273943, 47.3129778199963], [29.0937442776048, 47.2969265015565], [29.1154607672587, 47.2852098974547], [29.1122848379418, 47.3053813404138], [29.0962335195019, 47.3230206235122], [29.1035295733382, 47.3340505401941], [29.1269627815419, 47.3184284013917], [29.1523702160776, 47.3242652444607], [29.1758034242813, 47.3438358359275], [29.1662756363304, 47.3615609549533] ] + ] + }, + "properties" : { + "feature::id" : 310, + "id" : 129179, + "pfafstette" : 311, + "lke_type" : "N", + "altitude" : 104, + "objectid" : 78997, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_78997", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 311, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.0947743087347, 48.7062236769822], [14.0843881615089, 48.721116210401], [14.098894433254, 48.7408584737228], [14.1145165720564, 48.7560943508515], [14.1044737685406, 48.7581973310749], [14.0788946621498, 48.7554934993591], [14.0531438839041, 48.7587981825673], [14.0349466672771, 48.7593990340597], [14.0239596685589, 48.7716306537264], [14.0092817249588, 48.7858794176891], [13.9878227430874, 48.7888836751511], [13.9734881431972, 48.7829180781908], [13.9832734389306, 48.7612445065006], [14.0096250686688, 48.7575535616187], [14.0372642373192, 48.7383692318257], [14.0425002288958, 48.7158373008606], [14.0402684947812, 48.7171677577367], [14.0396676432888, 48.707768723677], [14.0512554934994, 48.6992280488921], [14.0719419520235, 48.6867818394067], [14.0823280992492, 48.678884934078], [14.1251602270647, 48.6629194515656], [14.1682498626625, 48.6387566379784], [14.1943439846182, 48.6363532320088], [14.2181205365318, 48.637812442776], [14.2340001831167, 48.6477694103644], [14.2029275773668, 48.6535204175059], [14.1818977751328, 48.6633915491668], [14.1673915033877, 48.6721897317341], [14.1371772569127, 48.6904298663248], [14.12327183666, 48.6930478621132], [14.1121131660868, 48.7024468961729], [14.0947743087347, 48.7062236769822] ] + ] + }, + "properties" : { + "feature::id" : 311, + "id" : 130010, + "pfafstette" : 997171, + "lke_type" : "N", + "altitude" : 730, + "objectid" : 79150, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_79150", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 312, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [19.4951416865043, 49.0925282686321], [19.5018368888482, 49.0937728895807], [19.5176306995056, 49.1004680919245], [19.5377163065373, 49.0968200650064], [19.5590894524812, 49.0928286943783], [19.5801192547152, 49.0989230452298], [19.5760849661234, 49.106562442776], [19.5526517579198, 49.11291430141], [19.5397763687969, 49.1253605108954], [19.5371154550449, 49.1339011856803], [19.5261284563267, 49.1311544360007], [19.5185748947079, 49.1339011856803], [19.5061286852225, 49.1339011856803], [19.4890473356528, 49.1278068348288], [19.484841375206, 49.1138155786486], [19.4951416865043, 49.0925282686321] ] + ] + }, + "properties" : { + "feature::id" : 312, + "id" : 128336, + "pfafstette" : 928537, + "lke_type" : "N", + "altitude" : 555, + "objectid" : 79561, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_79561", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 313, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [22.0459279436001, 48.81811080846], [22.0069584325215, 48.8105572468412], [21.9933105200513, 48.8056645989745], [21.9653280076909, 48.7989693966306], [21.9543410089727, 48.7822313907709], [21.980005951291, 48.7737336339498], [22.0234389305988, 48.7822313907709], [22.0453270921077, 48.7897849523897], [22.0622367698224, 48.7971239241897], [22.0818073612891, 48.8123168833547], [22.0459279436001, 48.81811080846] ] + ] + }, + "properties" : { + "feature::id" : 313, + "id" : 128473, + "pfafstette" : 686445, + "lke_type" : "N", + "altitude" : 109, + "objectid" : 79643, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_79643", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 314, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.2563404138436, 47.8862330617103], [27.2626922724776, 47.9083787310016], [27.2612330617103, 47.9123701016297], [27.2490443600073, 47.893786623329], [27.2381431972166, 47.8816408395898], [27.2253536440212, 47.8880785341512], [27.2224352224867, 47.9011255951291], [27.2111907159861, 47.9148164255631], [27.1875, 47.9180352728438], [27.1894742263322, 47.9375629463468], [27.1875, 47.9492795504486], [27.1730795641824, 47.9649875251785], [27.181663156931, 47.9727127586523], [27.1758263138619, 47.9883348974547], [27.1618350576817, 47.9975622596594], [27.1432086614173, 47.9871331944699], [27.1464704266618, 47.9707814502838], [27.1406335835927, 47.9570906198498], [27.1492171763413, 47.9329707242263], [27.154281496063, 47.912155511811], [27.1715345174876, 47.9027564777513], [27.1865558047977, 47.8944303927852], [27.1943668741989, 47.8682933528658], [27.2050963651346, 47.847048960813], [27.2323921900751, 47.8574780260026], [27.2487868522249, 47.8661045367149], [27.2563404138436, 47.8862330617103] ] + ] + }, + "properties" : { + "feature::id" : 314, + "id" : 128755, + "pfafstette" : 18735, + "lke_type" : "N", + "altitude" : 82, + "objectid" : 79875, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_79875", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 315, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [26.0692295367149, 46.9719516800952], [26.0801306995056, 46.9601063221022], [26.1005596502472, 46.9467159174144], [26.1216752884087, 46.9543553149606], [26.1145509064274, 46.9643552005127], [26.095752838308, 46.974655511811], [26.08373580846, 46.9913935176708], [26.0859675425746, 47.0090328007691], [26.074723036074, 47.0248266114265], [26.0622768265885, 47.0345689891961], [26.0437362662516, 47.0506632255997], [26.0296591741439, 47.054955021974], [25.9894879600806, 47.0592039003845], [26.0039083958982, 47.0430238280535], [26.035152673503, 47.0313072239517], [26.05369323384, 47.0214790102545], [26.0605601080388, 47.0059427073796], [26.0610751236037, 46.9886467679912], [26.0692295367149, 46.9719516800952] ] + ] + }, + "properties" : { + "feature::id" : 315, + "id" : 131552, + "pfafstette" : 28531, + "lke_type" : "N", + "altitude" : 617, + "objectid" : 80189, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_80189", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 316, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [4.3044142556308, 48.2773444652994], [4.2996074436916, 48.2664862204724], [4.3107661142648, 48.2557996475005], [4.3347143380333, 48.2628381935543], [4.358147546237, 48.2764861060245], [4.3657011078557, 48.2867434993591], [4.3703362479399, 48.2946833226515], [4.3725679820546, 48.300777673503], [4.3481905786486, 48.307129532137], [4.3193497070134, 48.2946833226515], [4.3044142556308, 48.2773444652994] ] + ] + }, + "properties" : { + "feature::id" : 316, + "id" : 131155, + "name" : "Etang de la Morge des Champs", + "pfafstette" : 8824, + "lke_type" : "N", + "altitude" : 250, + "objectid" : 80303, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 317, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.4206303790515, 47.8931857718366], [12.4002872642373, 47.884945522798], [12.3878410547519, 47.8901385964109], [12.3672404321553, 47.8931857718366], [12.3578843160593, 47.8831858862846], [12.3701588536898, 47.8573063541476], [12.381317524263, 47.8412550357077], [12.4109309192456, 47.8424567386925], [12.4376258926937, 47.8460618476469], [12.4517029848013, 47.8479073200879], [12.4688701702985, 47.8479073200879], [12.4768529115547, 47.8576926158213], [12.4980543856437, 47.8661474546786], [12.5202858908625, 47.871598036074], [12.5275819446988, 47.8858897180004], [12.5306720380883, 47.9023702160776], [12.5136765244461, 47.9117692501373], [12.4968526826589, 47.9272626350485], [12.47496452115, 47.9406101217726], [12.4506729536715, 47.9364041613258], [12.4379692364036, 47.9232712644204], [12.4311881981322, 47.9083787310016], [12.4206303790515, 47.8931857718366] ], + [ [12.4029481779894, 47.8749885552097], [12.4118751144479, 47.8658470289324], [12.402347326497, 47.8615981505219], [12.3896436092291, 47.8618985762681], [12.3893002655191, 47.871598036074], [12.4029481779894, 47.8749885552097] ] + ] + }, + "properties" : { + "feature::id" : 317, + "id" : 132037, + "name" : "CHIEMSEE", + "pfafstette" : 986393, + "lke_type" : "N", + "altitude" : 518, + "objectid" : 80711, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 318, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [13.4953820271013, 47.8148175700421], [13.4934936366966, 47.8125], [13.4865409265702, 47.8038305713239], [13.4968412378685, 47.7980366462186], [13.5083432521516, 47.8016846731368], [13.5280855154734, 47.8071781724959], [13.5325489837026, 47.8125], [13.5463685680278, 47.8291092519685], [13.5582139260209, 47.86524617744], [13.5703167917964, 47.894129967039], [13.5827630012818, 47.9321552829152], [13.5873981413661, 47.9579489791247], [13.5743510803882, 47.9527559055118], [13.5554671763413, 47.9448160822194], [13.5442226698407, 47.9360608176158], [13.5388150064091, 47.9235716901666], [13.5322056399927, 47.9035290010987], [13.527312992126, 47.8821987731185], [13.5257679454313, 47.8731860007325], [13.527312992126, 47.8573063541476], [13.5156393059879, 47.8321135094305], [13.4953820271013, 47.8148175700421] ] + ] + }, + "properties" : { + "feature::id" : 318, + "id" : 131954, + "name" : "Attersee", + "pfafstette" : 9786713, + "lke_type" : "N", + "altitude" : 467, + "objectid" : 80726, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 319, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [11.2976389397546, 47.8606539553195], [11.2919737685406, 47.8479073200879], [11.3063942043582, 47.8339160639077], [11.3274240065922, 47.8290663340047], [11.3366942867607, 47.8379074345358], [11.3372951382531, 47.8606539553195], [11.3340333730086, 47.9071770280168], [11.3386685130929, 47.9512966947445], [11.3519730818532, 47.9758886879692], [11.3592691356894, 47.9974335057682], [11.3491404962461, 48.0050299853507], [11.3333466855887, 47.9907383034243], [11.3149777971068, 47.964901689251], [11.2990981505219, 47.9409105475188], [11.2851927302692, 47.9203099249222], [11.2731757004212, 47.90297106757], [11.2803000824025, 47.8913832173594], [11.2956647134225, 47.8761473402307], [11.2976389397546, 47.8606539553195] ] + ] + }, + "properties" : { + "feature::id" : 319, + "id" : 131959, + "name" : "Starnberger See", + "pfafstette" : 992465, + "lke_type" : "N", + "altitude" : 584, + "objectid" : 80764, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 320, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [13.7834473997436, 47.8558471433803], [13.7877391961179, 47.8342164896539], [13.7977819996338, 47.8238732603919], [13.8093698498444, 47.842714246475], [13.8132324665812, 47.8588514008423], [13.8163225599707, 47.8731860007325], [13.8103140450467, 47.8929711820179], [13.8068806079473, 47.9111254806812], [13.8044772019777, 47.9232712644204], [13.7825890404688, 47.9168764878227], [13.7716020417506, 47.9013831029115], [13.7779539003846, 47.8779928126717], [13.7834473997436, 47.8558471433803] ] + ] + }, + "properties" : { + "feature::id" : 320, + "id" : 131995, + "name" : "Traunsee", + "pfafstette" : 9787135, + "lke_type" : "N", + "altitude" : 420, + "objectid" : 80916, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 321, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [20.5966741439297, 47.5688547198315], [20.6062019318806, 47.5633183025087], [20.6348711316609, 47.5704856024538], [20.6496349111884, 47.5831464017579], [20.6617377769639, 47.5983393609229], [20.6766732283464, 47.6113864219008], [20.6885185863395, 47.6244764008423], [20.6880035707746, 47.6333175013734], [20.6836259384728, 47.6457637108588], [20.6620811206739, 47.6455062030764], [20.6419955136422, 47.6369655282915], [20.6304076634316, 47.6299699002014], [20.6140130012818, 47.6061933482879], [20.5966741439297, 47.5688547198315] ] + ] + }, + "properties" : { + "feature::id" : 321, + "id" : 131679, + "name" : "Middle of Poroszl basin", + "pfafstette" : 6591, + "lke_type" : "N", + "altitude" : 84, + "objectid" : 80952, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 322, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [11.1160959531221, 47.9555026551913], [11.1306022248672, 47.9500091558323], [11.1372974272111, 47.9497087300861], [11.1446793169749, 47.9500091558323], [11.1511170115364, 47.9655025407434], [11.1608164713423, 47.989279092657], [11.1704300952207, 48.0041716260758], [11.15918558872, 48.0101801409998], [11.1426192547153, 48.01683242538], [11.1330914667643, 48.0403085515473], [11.1342931697491, 48.0643426112433], [11.137984114631, 48.0782480314961], [11.1239928584508, 48.0816814685955], [11.105108954404, 48.06923525911], [11.0978129005677, 48.0454587071965], [11.0973837209302, 48.0090213559787], [11.1042505951291, 47.9786354376488], [11.1087998992859, 47.9655883766709], [11.1160959531221, 47.9555026551913] ] + ] + }, + "properties" : { + "feature::id" : 322, + "id" : 131823, + "name" : "Ammersee", + "pfafstette" : 9924939, + "lke_type" : "N", + "altitude" : 533, + "objectid" : 81005, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 323, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.7688209577001, 47.8044314228163], [16.7758595037539, 47.8125], [16.8000652353049, 47.8403537584691], [16.8149148507599, 47.8524995422084], [16.823755951291, 47.8609543810657], [16.8393780900934, 47.880439136605], [16.8495925654642, 47.9077778795092], [16.8510517762315, 47.9293226973082], [16.8371463559788, 47.9366616691082], [16.8071037813587, 47.9317690212415], [16.772511902582, 47.9220695614356], [16.7469327961912, 47.9022843801501], [16.7335423915034, 47.883786737777], [16.7286497436367, 47.8664478804248], [16.72410043948, 47.8366628135872], [16.7135426203992, 47.8175214017579], [16.711568394067, 47.8125], [16.7021264420436, 47.7886376121589], [16.7031564731734, 47.7643031267167], [16.7110533785021, 47.7570929088079], [16.7074482695477, 47.7500543627541], [16.6949162241348, 47.7433591604102], [16.6904527559055, 47.7251190258195], [16.7010964109138, 47.7129732420802], [16.7067615821278, 47.7248186000732], [16.7049590276506, 47.7418141137154], [16.717748580846, 47.7381660867973], [16.7295081029116, 47.7154195660136], [16.7443577183666, 47.6904413111152], [16.7676192547153, 47.6840894524812], [16.7806663156931, 47.6819435542941], [16.793713376671, 47.6737033052555], [16.8004085790148, 47.6783384453397], [16.8061595861564, 47.6883812488555], [16.8007519227248, 47.7041750595129], [16.7818680186779, 47.7181663156931], [16.7618682475737, 47.7120290468779], [16.7411817890496, 47.7114281953855], [16.7372333363853, 47.7387669382897], [16.7460744369163, 47.7697966260758], [16.7524262955503, 47.780783624794], [16.7688209577001, 47.8044314228163] ] + ] + }, + "properties" : { + "feature::id" : 323, + "id" : 131705, + "name" : "Neusiedler See", + "lge_id" : "de", + "pfafstette" : 9422653, + "lke_type" : "B", + "altitude" : 115, + "objectid" : 81020, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 324, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [4.8305884911188, 48.5843366599524], [4.8132496337667, 48.5831349569676], [4.8100737044497, 48.5797873557956], [4.7942798937923, 48.5861821323933], [4.7880138710859, 48.5996154550449], [4.7892155740707, 48.6086282274309], [4.7612330617103, 48.6159671992309], [4.723894433254, 48.6159671992309], [4.7047530214246, 48.6049802005127], [4.70286463102, 48.595581166453], [4.7059547244094, 48.5810748947079], [4.7129074345358, 48.5663969511078], [4.738744048709, 48.565195248123], [4.7646664988097, 48.565195248123], [4.7803744735396, 48.5560966398095], [4.7907606207654, 48.5560966398095], [4.8061252517854, 48.564036463102], [4.8190006409083, 48.5700878959897], [4.8256958432522, 48.5728346456693], [4.8408029664897, 48.5764397546237], [4.8305884911188, 48.5843366599524] ] + ] + }, + "properties" : { + "feature::id" : 324, + "id" : 130371, + "name" : "tang de Bonnevais", + "pfafstette" : 896623, + "lke_type" : "N", + "altitude" : 300, + "objectid" : 81340, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 325, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [9.1644444698773, 47.1281730681194], [9.2060748947079, 47.1224220609778], [9.247791155466, 47.1218212094854], [9.2800654642007, 47.1239241897089], [9.3021252975646, 47.1306193920527], [9.2321690166636, 47.13941757462], [9.1503673777696, 47.1446106482329], [9.1313976377953, 47.1406192776048], [9.1379211682842, 47.1326794543124], [9.1644444698773, 47.1281730681194] ] + ] + }, + "properties" : { + "feature::id" : 325, + "id" : 133316, + "name" : "Walensee", + "lge_id" : "de", + "pfafstette" : 829153, + "lke_type" : "N", + "altitude" : 418, + "objectid" : 81473, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 326, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.4793879326131, 47.0941391228713], [8.507112937191, 47.0755556445706], [8.5240226149057, 47.0740964338033], [8.5268552005127, 47.0886456235122], [8.5137223036074, 47.1087741485076], [8.4995593755722, 47.1254263184398], [8.5011902581945, 47.1372716764329], [8.510288866508, 47.1610053103827], [8.4924349935909, 47.1850822880425], [8.4620490752609, 47.1868419245559], [8.4589589818715, 47.1561555804798], [8.4761261673686, 47.1232804202527], [8.4756969877312, 47.1120788317158], [8.4793879326131, 47.0941391228713] ] + ] + }, + "properties" : { + "feature::id" : 326, + "id" : 133210, + "name" : "ZUGER SEE", + "pfafstette" : 8421, + "lke_type" : "N", + "altitude" : 411, + "objectid" : 81474, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 327, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [7.0913351492401, 47.0694612937191], [7.07665720564, 47.059804751877], [7.0915926570225, 47.0552554477202], [7.1061847646951, 47.0506632255997], [7.1225794268449, 47.0473156244278], [7.1533086888848, 47.0551696117927], [7.1870422083867, 47.0774011170115], [7.2043810657389, 47.0980446575719], [7.2140805255448, 47.1145251556492], [7.2282434535799, 47.1302760483428], [7.2331361014466, 47.1388167231276], [7.2258400476103, 47.1406192776048], [7.1976000274675, 47.1232804202527], [7.1450684398462, 47.0956412516023], [7.1119357718367, 47.0786028199963], [7.0913351492401, 47.0694612937191] ] + ] + }, + "properties" : { + "feature::id" : 327, + "id" : 133254, + "name" : "BIELER SEE", + "pfafstette" : 85953, + "lke_type" : "N", + "altitude" : 425, + "objectid" : 81526, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 328, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [28.6232775590551, 45.346219213514], [28.6338353781359, 45.3330863166087], [28.6096296465849, 45.3254469190624], [28.5876556491485, 45.3199534197034], [28.5839647042666, 45.3017562030764], [28.6023335927486, 45.2801684673137], [28.635981276323, 45.268923960813], [28.6599295000916, 45.267421832082], [28.6816459897455, 45.2652759338949], [28.7116885643655, 45.2680656015382], [28.7324608588171, 45.2777650613441], [28.72997161692, 45.2920567432705], [28.7259373283282, 45.3057475737045], [28.7365809833364, 45.3075501281817], [28.7472246383446, 45.3111552371361], [28.7405294360007, 45.3242452160776], [28.7250789690533, 45.3327858908625], [28.7122894158579, 45.3403394524812], [28.6857661142648, 45.3501247482146], [28.6712598425197, 45.3611117469328], [28.6706589910273, 45.3805106665446], [28.6627620856986, 45.399308734664], [28.6669680461454, 45.4148021195752], [28.669714795825, 45.4245874153086], [28.6645646401758, 45.4425271241531], [28.6535776414576, 45.4716684215345], [28.6530626258927, 45.5060027925288], [28.6521184306904, 45.5303372779711], [28.6448223768541, 45.5412813587255], [28.6406164164073, 45.5613669657572], [28.6371829793078, 45.5816671626076], [28.6341787218458, 45.603297816334], [28.6231917231276, 45.6214521149973], [28.621131660868, 45.6339841604102], [28.6162390130013, 45.6528251464933], [28.6098871543673, 45.6692627266069], [28.6067970609779, 45.6795630379051], [28.5947800311298, 45.6823097875847], [28.5873981413661, 45.6691768906794], [28.5849947353965, 45.6400355932979], [28.5968400933895, 45.6105938701703], [28.6110888573521, 45.5862593847281], [28.6162390130013, 45.5649291567479], [28.6162390130013, 45.5553155328694], [28.5995010071416, 45.5398221479583], [28.5885140084234, 45.4932990752609], [28.5930633125801, 45.4516686504303], [28.5946083592749, 45.4163900842337], [28.5958100622597, 45.3740729719832], [28.6031919520234, 45.3549744781176], [28.6232775590551, 45.346219213514] ] + ] + }, + "properties" : { + "feature::id" : 328, + "id" : 133066, + "name" : "Yalpug and Kugurlui", + "pfafstette" : 16113, + "lke_type" : "N", + "altitude" : -1, + "objectid" : 81564, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 329, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.0360625343344, 45.4443296786303], [29.0451611426479, 45.465574070683], [29.0430152444607, 45.4707671442959], [29.0254188793261, 45.4641148599158], [29.0073074986266, 45.4635140084234], [28.9956338124886, 45.4847584004761], [28.9897969694195, 45.5005522111335], [28.9891102819996, 45.5118396355979], [28.9819859000183, 45.5284918055301], [28.9711705731551, 45.5452298113899], [28.9740031587621, 45.5683625938473], [28.9722006042849, 45.5890061344076], [28.9601835744369, 45.5923537355796], [28.9540892235854, 45.5659162699139], [28.963016160044, 45.5349295000916], [28.9675654642007, 45.5163460217909], [28.968509659403, 45.5023976835744], [28.9756340413844, 45.4904664896539], [28.9703122138803, 45.4762177256913], [28.9575226606849, 45.4716684215345], [28.953831715803, 45.462913156931], [28.9526300128182, 45.4333426799121], [28.968509659403, 45.4102957333822], [28.9940029298663, 45.4075489837026], [29.0034448818898, 45.4029567615821], [29.0165777787951, 45.4005962735763], [29.0303115271928, 45.4148450375389], [29.0360625343344, 45.4443296786303] ] + ] + }, + "properties" : { + "feature::id" : 329, + "id" : 133092, + "pfafstette" : 143, + "altitude" : -1, + "objectid" : 81636, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_81636", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 330, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.7614447903314, 47.242420687603], [8.7231619666728, 47.2461116324849], [8.7006729536715, 47.2567123695294], [8.6526048342794, 47.2746520783739], [8.5981848562534, 47.3038362937191], [8.5742366324849, 47.3369689617286], [8.5522626350485, 47.361947216627], [8.537155511811, 47.3607455136422], [8.5471124793994, 47.3376127311848], [8.5580994781176, 47.3187288271379], [8.5656530397363, 47.307183894891], [8.5780992492218, 47.2919909357261], [8.5903737868522, 47.2764975508149], [8.6103735579564, 47.2655105520967], [8.6367251876946, 47.2594591192089], [8.6658235671123, 47.2461116324849], [8.6907159860831, 47.2299744781176], [8.7084840230727, 47.2178286943783], [8.730973036074, 47.212034769273], [8.7688266800952, 47.215382370445], [8.8052211133492, 47.2095884453397], [8.8337186412745, 47.2020348837209], [8.8523450375389, 47.2056829106391], [8.873031496063, 47.2135798159678], [8.8984389305988, 47.2147815189526], [8.9221296465849, 47.2175282686321], [8.9370650979674, 47.2281719236404], [8.9067650155649, 47.2293736266252], [8.869855566746, 47.2275281541842], [8.855005951291, 47.2278714978942], [8.8325169382897, 47.2275281541842], [8.8176673228347, 47.2373134499176], [8.806422816334, 47.2458112067387], [8.791229857169, 47.2451674372826], [8.7614447903314, 47.242420687603] ] + ] + }, + "properties" : { + "feature::id" : 330, + "id" : 132978, + "name" : "ZUERICH SEE", + "pfafstette" : 8231, + "lke_type" : "N", + "altitude" : 454, + "objectid" : 81867, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 331, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.1341729994507, 45.5291355749863], [29.1213834462553, 45.5023976835744], [29.1304820545688, 45.4923977980223], [29.1526277238601, 45.49145360282], [29.171168284197, 45.4953591375206], [29.1660181285479, 45.5120971433803], [29.1627563633034, 45.5320969144845], [29.1672198315327, 45.5452298113899], [29.1755459164988, 45.5553155328694], [29.186532915217, 45.5704226561069], [29.2006958432522, 45.5896069859], [29.2206956143564, 45.6120530809376], [29.2295367148874, 45.6348854376488], [29.222927348471, 45.645872436367], [29.2202664347189, 45.6585761536349], [29.2186355520967, 45.6805072331075], [29.1958031953855, 45.6963010437649], [29.1818977751328, 45.6920092473906], [29.1812969236404, 45.6634688015016], [29.1873054385644, 45.6285335790148], [29.1972624061527, 45.6075466947446], [29.1870479307819, 45.594113372093], [29.1697090734298, 45.577418284197], [29.1599237776964, 45.5686201016297], [29.1521127082952, 45.5586202160776], [29.1341729994507, 45.5291355749863] ] + ] + }, + "properties" : { + "feature::id" : 331, + "id" : 132918, + "pfafstette" : 12313, + "lke_type" : "N", + "altitude" : 7, + "objectid" : 82033, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_82033", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 332, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.1759121497894, 46.2003296099615], [27.1820065006409, 46.2144067020692], [27.1584874565098, 46.2388270234389], [27.1453545596045, 46.2540199826039], [27.1367709668559, 46.271530511811], [27.1250114447903, 46.2754789644754], [27.1084451107856, 46.2907577595678], [27.0937671671855, 46.3056073750229], [27.0741965757187, 46.304749015748], [27.0820076451199, 46.2871955685772], [27.0996040102545, 46.2695992034426], [27.1172003753891, 46.2500715299396], [27.1562557223952, 46.2110161829335], [27.1759121497894, 46.2003296099615] ] + ] + }, + "properties" : { + "feature::id" : 332, + "id" : 132586, + "pfafstette" : 27331, + "lke_type" : "N", + "altitude" : 108, + "objectid" : 82042, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_82042", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 333, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [28.1335835927486, 45.8339818714521], [28.1406221388024, 45.816471342245], [28.1496349111884, 45.7941969190624], [28.1784757828237, 45.8275870948544], [28.1845701336752, 45.8631660867973], [28.17040720564, 45.8695179454312], [28.1576176524446, 45.8674578831716], [28.1455147866691, 45.8656124107306], [28.134184444241, 45.8494752563633], [28.1335835927486, 45.8339818714521] ] + ] + }, + "properties" : { + "feature::id" : 333, + "id" : 132929, + "pfafstette" : 181315, + "lke_type" : "N", + "altitude" : 3, + "objectid" : 82075, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_82075", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 334, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [28.3481734114631, 45.3658327229445], [28.3718641274492, 45.3503393380333], [28.3898038362937, 45.3431291201245], [28.418473036074, 45.3439874793994], [28.4387303149606, 45.3494809787585], [28.4441379783922, 45.3705107809925], [28.4418204083501, 45.4227419428676], [28.4372711041934, 45.4574196575719], [28.4317776048343, 45.4838142052738], [28.4262841054752, 45.5160455960447], [28.4195889031313, 45.5178910684856], [28.4122070133675, 45.4947582860282], [28.4162413019594, 45.4641148599158], [28.4195889031313, 45.4431279756455], [28.4111769822377, 45.4202956189343], [28.382250274675, 45.4190939159495], [28.3459416773485, 45.4345873008606], [28.3198475553928, 45.4300809146676], [28.3095472440945, 45.4102957333822], [28.3207917505951, 45.3868625251785], [28.3481734114631, 45.3658327229445] ] + ] + }, + "properties" : { + "feature::id" : 334, + "id" : 133395, + "pfafstette" : 1781, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 82335, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_82335", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 335, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [6.8533121223219, 46.8652576222304], [6.8867022981139, 46.8914375801135], [6.913053927852, 46.9084330937557], [6.9545985167552, 46.9303641732283], [7.0016366050174, 46.9588617011536], [7.0350267808094, 46.9801490111701], [7.043438701703, 47.0023375984252], [7.0219797198315, 47.0111786989562], [6.9988040194104, 47.015384659403], [6.9848985991577, 47.0196764557773], [6.964812992126, 47.0114791247024], [6.9185474272111, 46.9947411188427], [6.88000709577, 46.9825524171397], [6.8730543856437, 46.9664581807361], [6.8557155282915, 46.9482609641091], [6.8229262039919, 46.9339692821828], [6.7924544497345, 46.9126819721663], [6.7717679912104, 46.8974460950375], [6.7590642739425, 46.8837981825673], [6.7341718549716, 46.8643992629555], [6.7088502563633, 46.8501075810291], [6.6894513367515, 46.8364167505951], [6.6674773393151, 46.8266743728255], [6.6472200604285, 46.8172753387658], [6.6435291155466, 46.8017819538546], [6.6596662699139, 46.7941425563084], [6.692369758286, 46.8048291292804], [6.7304809100897, 46.8151294405787], [6.7496223219191, 46.8129835423915], [6.7851583958982, 46.8297215482512], [6.8244712506867, 46.850965940304], [6.8533121223219, 46.8652576222304] ] + ] + }, + "properties" : { + "feature::id" : 335, + "id" : 133544, + "name" : "Neuchatel", + "lge_id" : "fr", + "pfafstette" : 8619, + "lke_type" : "N", + "altitude" : 422, + "objectid" : 82396, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 336, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [7.0510780992492, 46.9403211408167], [7.0410352957334, 46.9211368110236], [7.0566574345358, 46.9129823979125], [7.073652948178, 46.915729147592], [7.1086740065922, 46.9351709851676], [7.1295321369713, 46.9582608496612], [7.1167425837759, 46.9652564777513], [7.088845907343, 46.9585612754074], [7.0510780992492, 46.9403211408167] ] + ] + }, + "properties" : { + "feature::id" : 336, + "id" : 133658, + "name" : "MURTENSEE", + "pfafstette" : 86231, + "lke_type" : "N", + "altitude" : 423, + "objectid" : 82405, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 337, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.3369174601721, 45.3023570545688], [29.358977293536, 45.2926575947629], [29.3635265976927, 45.2811555804798], [29.359148965391, 45.2741170344259], [29.3661016755173, 45.2719711362388], [29.3873031496063, 45.2777650613441], [29.4028394524812, 45.29480349295], [29.3946850393701, 45.3121423503021], [29.3788912287127, 45.3196959119209], [29.3715951748764, 45.3303395669291], [29.3657583318074, 45.3382793902216], [29.3527112708295, 45.335532640542], [29.3386341787219, 45.3275928172496], [29.328419703351, 45.3133011353232], [29.3369174601721, 45.3023570545688] ] + ] + }, + "properties" : { + "feature::id" : 337, + "id" : 133421, + "pfafstette" : 0, + "lke_type" : "N", + "altitude" : -1, + "objectid" : 82409, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_82409", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 338, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [28.0959874565098, 45.4635140084234], [28.1023393151437, 45.4862605292071], [28.0986483702619, 45.5126979948727], [28.067404092657, 45.5139426158213], [28.0429408533236, 45.495959989013], [28.0491210401025, 45.4741147454679], [28.0717817249588, 45.4680203946164], [28.0959874565098, 45.4635140084234] ] + ] + }, + "properties" : { + "feature::id" : 338, + "id" : 133554, + "name" : "Lacul Brates", + "pfafstette" : 0, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 82416, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 339, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.3859984435085, 47.0576159357261], [8.3532949551364, 47.0488177531588], [8.3383595037539, 47.059461408167], [8.3307201062077, 47.0580021973997], [8.3322651529024, 47.0470151986816], [8.3392178630288, 47.0275304431423], [8.3351835744369, 47.0114791247024], [8.3240249038638, 47.0145263001282], [8.3127803973631, 47.0181314090826], [8.3113211865959, 47.0090328007691], [8.3149262955503, 46.9943977751328], [8.2975874381981, 46.9777456052005], [8.2829953305256, 46.9646556262589], [8.2942398370262, 46.9616084508332], [8.3215356619667, 46.9707070591467], [8.3383595037539, 46.9843978895807], [8.3437671671855, 46.9904922404322], [8.3599043215528, 47.0017367469328], [8.4146676432888, 47.0097624061527], [8.4389592107673, 46.9998912744919], [8.42213536898, 46.9898913889398], [8.446512772386, 46.9816940578649], [8.4724352224867, 46.9759001327596], [8.4936366965757, 46.9716083363853], [8.5316620124519, 46.9764580662882], [8.5699448361106, 46.9889471937374], [8.5912321461271, 46.9950415445889], [8.5948372550815, 46.9837541201245], [8.5872836934627, 46.954956166453], [8.5878845449551, 46.9327246612342], [8.5948372550815, 46.915729147592], [8.600588262223, 46.8998924189709], [8.6167254165904, 46.90504257462], [8.6246223219191, 46.9215230726973], [8.6170687603003, 46.9351709851676], [8.6167254165904, 46.9470163431606], [8.6155237136056, 46.9780460309467], [8.5991290514558, 47.0059856253433], [8.5805884911188, 47.0090328007691], [8.5623054385644, 47.0029384499176], [8.537327183666, 46.9998912744919], [8.5075421168284, 47.0008783876579], [8.4875423457242, 47.01087827321], [8.4653108405054, 47.0300196850394], [8.4236804156748, 47.0385174418605], [8.413122596594, 47.0494615226149], [8.4304614539462, 47.0677016572056], [8.4210195019227, 47.0743539415858], [8.3859984435085, 47.0576159357261] ] + ] + }, + "properties" : { + "feature::id" : 339, + "id" : 133448, + "name" : "Vierwaldstttersee", + "lge_id" : "de", + "pfafstette" : 8451, + "lke_type" : "N", + "altitude" : 434, + "objectid" : 82510, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 340, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [9.1416121131661, 45.8950112158945], [9.1291659036807, 45.8823504165904], [9.1191231001648, 45.8774577687237], [9.1069343984618, 45.8723076130745], [9.0924281267167, 45.8607197628639], [9.084702893243, 45.8540674784838], [9.0732867148874, 45.842179202527], [9.0675357077458, 45.8266858176158], [9.0759476286395, 45.8227802829152], [9.0829861746933, 45.8288746337667], [9.0893380333272, 45.8378874061527], [9.106076039187, 45.8540245605201], [9.127105841421, 45.8665136879692], [9.1474489562351, 45.870719648416], [9.1560325489837, 45.8990455044864], [9.1540583226515, 45.9333369575169], [9.1681354147592, 45.9494741118843], [9.1982638253067, 45.9568130836843], [9.2231562442776, 45.9680146722212], [9.2468469602637, 45.9850101858634], [9.2647008331807, 45.9847526780809], [9.269335973265, 45.9765124290423], [9.2819538546054, 45.9473282136971], [9.3096788591833, 45.9056977888665], [9.335429637429, 45.8911056811939], [9.3562019318806, 45.8813633034243], [9.365987227614, 45.8695179454312], [9.3814376945614, 45.858874290423], [9.396373145944, 45.8397328785937], [9.4004074345358, 45.8196901895257], [9.4128536440212, 45.8193468458158], [9.408218503937, 45.8415783510346], [9.3923388573521, 45.8570717359458], [9.383841100531, 45.8705050585973], [9.363154642007, 45.8941528566197], [9.3413523164256, 45.9035518906794], [9.3310520051273, 45.9111483702619], [9.3203225141915, 45.9208907480315], [9.3137131477751, 45.9357832814503], [9.3078763047061, 45.9537229902948], [9.3029836568394, 45.9674138207288], [9.2942283922359, 45.9971988875664], [9.2849581120674, 46.0257822514192], [9.2937133766709, 46.0398164255631], [9.3076187969236, 46.0534643380333], [9.3131122962827, 46.0671551684673], [9.3061595861564, 46.0786142647867], [9.3054728987365, 46.0871549395715], [9.3162023896722, 46.1038929454312], [9.3170607489471, 46.123291865043], [9.3286485991577, 46.1342788637612], [9.3556869163157, 46.1424761948361], [9.3730257736678, 46.1485705456876], [9.3798926478667, 46.1619180324116], [9.3701073521333, 46.1750080113532], [9.3489058780443, 46.1722612616737], [9.3392064182384, 46.1625618018678], [9.3243568027834, 46.1579695797473], [9.3076187969236, 46.1516177211134], [9.2988635323201, 46.1442787493133], [9.2853872917048, 46.1342788637612], [9.2792929408533, 46.1026483244827], [9.2707951840322, 46.0735070271013], [9.256803927852, 46.0582282320088], [9.2446152261491, 46.0469837255081], [9.2364608130379, 46.0285290010987], [9.2373191723128, 46.0063404138436], [9.2309673136788, 45.9953534151254], [9.2144009796741, 45.9892590642739], [9.2009247390588, 45.9823063541476], [9.1847875846915, 45.976555347006], [9.1516549166819, 45.9655683482879], [9.1311401300128, 45.9337232191906], [9.1383503479216, 45.9081441127999], [9.1416121131661, 45.8950112158945] ] + ] + }, + "properties" : { + "feature::id" : 340, + "id" : 135053, + "name" : "Lago di Como", + "pfafstette" : 4535, + "lke_type" : "N", + "altitude" : 198, + "objectid" : 82985, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 341, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [28.7739196117927, 44.9063100851493], [28.7944343984618, 44.9002586522615], [28.8032325810291, 44.8990569492767], [28.7961511170115, 44.9206446850394], [28.7761513459074, 44.9446358267717], [28.7566236724043, 44.9507301776232], [28.7380401941037, 44.9424899285845], [28.7357226240615, 44.9267819538546], [28.7485550952207, 44.9142499084417], [28.7739196117927, 44.9063100851493] ] + ] + }, + "properties" : { + "feature::id" : 341, + "id" : 134404, + "name" : "Lacul Babadag", + "pfafstette" : 79, + "lke_type" : "N", + "altitude" : -2, + "objectid" : 83314, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 342, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [14.059495742538, 46.6236724043216], [14.0655900933895, 46.6184793307087], [14.0974352224867, 46.6254749587988], [14.1420699047794, 46.6284792162608], [14.1734858542392, 46.6199814594397], [14.195545687603, 46.6169342840139], [14.2290216993225, 46.6196381157297], [14.2521973997437, 46.6260328923274], [14.2430129555027, 46.6339727156199], [14.2140862479399, 46.6306251144479], [14.177348470976, 46.6339297976561], [14.1437007874016, 46.6442730269181], [14.0959760117195, 46.6375778245743], [14.059495742538, 46.6236724043216] ] + ] + }, + "properties" : { + "feature::id" : 342, + "id" : 134216, + "name" : "Wrther See", + "pfafstette" : 882231, + "lke_type" : "N", + "altitude" : 437, + "objectid" : 83462, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 343, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.1672627494964, 44.882318943417], [29.1648164255631, 44.8665680507233], [29.1736146081304, 44.8565252472075], [29.1953310977843, 44.8586282274309], [29.2116828419703, 44.8692718824391], [29.2241290514558, 44.8801730452298], [29.2335280855155, 44.8939067936276], [29.2219402353049, 44.9039495971434], [29.201897546237, 44.9048079564183], [29.1818977751328, 44.8975977385094], [29.1672627494964, 44.882318943417] ] + ] + }, + "properties" : { + "feature::id" : 343, + "id" : 134336, + "name" : "Lacul Dranov", + "pfafstette" : 41, + "lke_type" : "N", + "altitude" : -3, + "objectid" : 83467, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 344, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [28.5649520463285, 44.3692776048343], [28.5794583180736, 44.3677325581395], [28.584737227614, 44.3653720701337], [28.5967971754258, 44.3571318210951], [28.6071833226515, 44.3474323612892], [28.6128055759019, 44.337947491302], [28.6311315464201, 44.3458443966307], [28.6353804248306, 44.3665737731185], [28.6092433849112, 44.3817238143197], [28.5822909036807, 44.387517739425], [28.574222326497, 44.3923245513642], [28.5645657846548, 44.4002643746567], [28.5551667505951, 44.3881185909174], [28.5649520463285, 44.3692776048343] ] + ] + }, + "properties" : { + "feature::id" : 344, + "id" : 135277, + "name" : "Lacul Tasaul", + "pfafstette" : 311, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 83685, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 345, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [6.2180404229995, 45.8020509064274], [6.2279973905878, 45.8084886009888], [6.2322891869621, 45.8221365134591], [6.2207013367515, 45.8397328785937], [6.2007015656473, 45.8513207288042], [6.1887703717268, 45.8631660867973], [6.1729765610694, 45.8941528566197], [6.1472257828237, 45.913637612159], [6.139328877495, 45.9056977888665], [6.144994048709, 45.8805049441494], [6.151174235488, 45.8586597006043], [6.1654229994507, 45.8537670527376], [6.1843069034975, 45.8449259522066], [6.2004440578649, 45.8370290468779], [6.2110877128731, 45.8193897637795], [6.2180404229995, 45.8020509064274] ] + ] + }, + "properties" : { + "feature::id" : 345, + "id" : 135366, + "name" : "Lac d' Annecy", + "pfafstette" : 64431, + "lke_type" : "N", + "altitude" : 447, + "objectid" : 83715, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 346, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [8.9750904138436, 45.9384871131661], [8.9655626258927, 45.9527787950925], [8.9714853048892, 45.9749673823476], [9.0071072147958, 46.0032932384179], [9.039295687603, 46.0169840688519], [9.0683940670207, 46.0178424281267], [9.1106253433437, 46.0263831029116], [9.1218698498444, 46.0412756363303], [9.1045309924922, 46.0394301638894], [9.066677348471, 46.0333787310016], [9.0216134865409, 46.0233359274858], [8.9897683574437, 46.0108897180004], [8.9741462186413, 46.0111901437466], [8.960498306171, 46.0123918467314], [8.9532880882622, 45.998100164805], [8.95165720564, 45.9749673823476], [8.9392109961546, 45.9531221388024], [8.9249622321919, 45.9364270509064], [8.9088250778246, 45.9364270509064], [8.9027307269731, 45.9500749633767], [8.903074070683, 45.9665125434902], [8.906421671855, 45.9874994277605], [8.9033315784655, 45.9993447857535], [8.8945763138619, 45.9911045367149], [8.8896836659952, 45.9817055026552], [8.8859927211134, 45.9743665308552], [8.8926879234572, 45.9419205502655], [8.9015290239883, 45.9127363349203], [8.9279664896539, 45.9279292940853], [8.9602407983886, 45.938830456876], [8.9714853048892, 45.9239379234572], [8.9773221479583, 45.9142384636513], [8.9830731550998, 45.9215345174876], [8.9750904138436, 45.9384871131661] ] + ] + }, + "properties" : { + "feature::id" : 346, + "id" : 135281, + "name" : "Lago di Lugano - Ceresio", + "pfafstette" : 64393, + "lke_type" : "N", + "altitude" : 615, + "objectid" : 83770, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 347, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [7.9131283189892, 46.7172335652811], [7.8940727430874, 46.7062894845266], [7.9045447262406, 46.6983496612342], [7.9441150888116, 46.7093366599524], [7.9704667185497, 46.7214824436916], [7.9854021699323, 46.7275338765794], [8.0106379326131, 46.7397654962461], [8.0377620856986, 46.7467182063725], [8.0483199047793, 46.7555163889398], [8.0305518677898, 46.7649583409632], [8.0054877769639, 46.7652587667094], [7.98411463102, 46.758306056583], [7.9490077366783, 46.7373191723128], [7.9131283189892, 46.7172335652811] ] + ] + }, + "properties" : { + "feature::id" : 347, + "id" : 134116, + "name" : "BRIENZER SEE", + "pfafstette" : 89711, + "lke_type" : "N", + "altitude" : 563, + "objectid" : 84060, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 348, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [7.7036028199963, 46.6868476469511], [7.7344179179637, 46.6722555392785], [7.7769067020692, 46.6643586339498], [7.796133949826, 46.6692083638528], [7.8085801593115, 46.6704100668376], [7.8223139077092, 46.6740580937557], [7.8163912287127, 46.6865472212049], [7.7775933894891, 46.6913969511079], [7.7393105658304, 46.7032423091009], [7.7072937648782, 46.7211820179454], [7.6833455411097, 46.7305810520051], [7.6657491759751, 46.7430272614906], [7.645062717451, 46.7525121314778], [7.633217359458, 46.7428126716719], [7.6372516480498, 46.7285209897455], [7.6444618659586, 46.722426638894], [7.6564788958066, 46.7108387886834], [7.6860064548618, 46.6975342199231], [7.7036028199963, 46.6868476469511] ] + ] + }, + "properties" : { + "feature::id" : 348, + "id" : 134120, + "name" : "THUNER SEE", + "pfafstette" : 89393, + "lke_type" : "N", + "altitude" : 558, + "objectid" : 84079, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 349, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.2594076176525, 45.0865655328694], [29.2730555301227, 45.0942049304157], [29.2830983336385, 45.1018014099982], [29.3000938472807, 45.1105995925655], [29.2859309192456, 45.1273375984252], [29.2500515015565, 45.1293976606849], [29.2322834645669, 45.1248912744919], [29.2226698406885, 45.1199986266252], [29.2339143471892, 45.1014580662882], [29.2594076176525, 45.0865655328694] ] + ] + }, + "properties" : { + "feature::id" : 349, + "id" : 133924, + "name" : "Lacul Isacov", + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : -1, + "objectid" : 84113, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 350, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.1002477797107, 44.6087598425197], [12.11938919154, 44.5808202481231], [12.1290457333822, 44.5591895943966], [12.1777576222304, 44.5642109961546], [12.2053538729171, 44.573481276323], [12.2237656793628, 44.5836957516938], [12.2442804660319, 44.60669978026], [12.2354822834646, 44.6388453351035], [12.2275424601721, 44.662621887017], [12.2117915674785, 44.6765702252335], [12.1926501556492, 44.6896602041751], [12.1808047976561, 44.6972137657938], [12.175311298297, 44.6810766114265], [12.1665131157297, 44.6634373283282], [12.1324362525179, 44.6604759888299], [12.103037447354, 44.6440384087164], [12.1002477797107, 44.6087598425197] ] + ] + }, + "properties" : { + "feature::id" : 350, + "id" : 136553, + "pfafstette" : 1, + "altitude" : -3, + "objectid" : 84417, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_84417", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 351, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [23.5285719190624, 43.8839183528658], [23.5749662378685, 43.8714721433803], [23.594751419154, 43.8668370032961], [23.6126911279985, 43.8680387062809], [23.6269828099249, 43.8799699002014], [23.6120902765061, 43.8911714887383], [23.5796013779528, 43.8953774491851], [23.5547089589819, 43.900570522798], [23.5190441311115, 43.8947765976927], [23.5285719190624, 43.8839183528658] ] + ] + }, + "properties" : { + "feature::id" : 351, + "id" : 136504, + "name" : "Balta Bistre?", + "pfafstette" : 357215, + "lke_type" : "N", + "altitude" : 24, + "objectid" : 84539, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 2 + } + }, { + "type" : "Feature", + "id" : 352, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [6.3073956235122, 44.4757141549167], [6.3410862250504, 44.469319378319], [6.3554637429042, 44.4716798663249], [6.3361935771837, 44.4744266160044], [6.3164083958982, 44.4786325764512], [6.3119020097052, 44.4917654733565], [6.3228890084234, 44.5066580067753], [6.3514723722761, 44.5215505401941], [6.3828024858085, 44.530091214979], [6.3989396401758, 44.5346834370994], [6.4143042711958, 44.5388893975462], [6.4252912699139, 44.5424945065007], [6.4143042711958, 44.5461425334188], [6.4009997024355, 44.5434816196667], [6.3652490386376, 44.5346834370994], [6.3220306491485, 44.5221513916865], [6.3076102133309, 44.5084176432888], [6.2888121452115, 44.496357695477], [6.2734475141915, 44.4853706967588], [6.2831040560337, 44.4802205411097], [6.3073956235122, 44.4757141549167] ] + ] + }, + "properties" : { + "feature::id" : 352, + "id" : 136657, + "pfafstette" : 2797, + "lke_type" : "N", + "altitude" : 865, + "objectid" : 84606, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_84606", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 353, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [26.6694372596594, 43.0389494826955], [26.6837289415858, 43.0361598150522], [26.6986214750046, 43.0416533144113], [26.7165611838491, 43.0471468137704], [26.7502517853873, 43.046202618568], [26.768320248123, 43.0522540514558], [26.7779767899652, 43.0662882255997], [26.7959164988097, 43.0838845907343], [26.7993070179454, 43.0979187648782], [26.7879766755173, 43.0960732924373], [26.7822256683757, 43.0885197308185], [26.7707665720564, 43.0729834279436], [26.7590499679546, 43.0577475508149], [26.74145360282, 43.0580908945248], [26.7143723676982, 43.0562883400476], [26.6867761170115, 43.0468034700604], [26.6694372596594, 43.0389494826955] ] + ] + }, + "properties" : { + "feature::id" : 353, + "id" : 136759, + "pfafstette" : 6557, + "lke_type" : "N", + "altitude" : 257, + "objectid" : 85211, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_85211", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 354, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.5925254074345, 43.8817295367149], [15.6190487090277, 43.8643906793628], [15.6379326130745, 43.8653777925288], [15.6150144204358, 43.8884247390588], [15.5798646081304, 43.9170081029116], [15.558233954404, 43.9388533464567], [15.5333415354331, 43.9464927440029], [15.5139426158213, 43.9385958386742], [15.5244145989745, 43.9191540010987], [15.5617961453946, 43.899411737777], [15.5925254074345, 43.8817295367149] ] + ] + }, + "properties" : { + "feature::id" : 354, + "id" : 137065, + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : -4, + "objectid" : 85221, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_85221", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 355, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [10.0082116370628, 45.6692627266069], [10.028211408167, 45.6659151254349], [10.0669234114631, 45.6765158624794], [10.0993693920527, 45.6975027467497], [10.1103563907709, 45.71814628731], [10.1020303058048, 45.7342405237136], [10.091815830434, 45.7473305026552], [10.0803138161509, 45.7658710629921], [10.0713868796924, 45.7844116233291], [10.0783395898187, 45.7923514466215], [10.0947342519685, 45.7996904184215], [10.0969659860831, 45.8187889122871], [10.0805713239334, 45.8276300128182], [10.0707860282, 45.8145829518403], [10.0519879600806, 45.7920081029116], [10.0371383446255, 45.771064136605], [10.0456361014466, 45.7531673457242], [10.0500995696759, 45.7282320087896], [10.0519879600806, 45.7050992263322], [10.0500995696759, 45.6944555713239], [10.0264088536898, 45.6905071186596], [9.9896710767259, 45.6850565372642], [9.9712163523164, 45.6746703900385], [9.9773107031679, 45.671408624794], [9.9930186778978, 45.6735116050174], [10.0082116370628, 45.6692627266069] ] + ] + }, + "properties" : { + "feature::id" : 355, + "id" : 135588, + "name" : "Lago d' Iseo", + "pfafstette" : 295511, + "lke_type" : "N", + "altitude" : 186, + "objectid" : 85416, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 356, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.615349180553, 44.1538294268449], [27.6214864493682, 44.1407394479033], [27.6220873008606, 44.1370914209852], [27.6375806857718, 44.1406965299396], [27.6584388161509, 44.1534431651712], [27.6615289095404, 44.1750738188977], [27.6390398965391, 44.1896230086065], [27.6162075398279, 44.1936143792346], [27.6111003021425, 44.1756746703901], [27.615349180553, 44.1538294268449] ] + ] + }, + "properties" : { + "feature::id" : 356, + "id" : 135791, + "name" : "Lacul Oltina", + "pfafstette" : 312515, + "lke_type" : "N", + "altitude" : 7, + "objectid" : 85442, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 357, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [5.8586453946164, 45.6808076588537], [5.8691173777696, 45.6616233290606], [5.8861128914118, 45.6582757278887], [5.8948681560154, 45.6786617606665], [5.8910055392785, 45.7054425700421], [5.8889454770189, 45.7169445843252], [5.8869712506867, 45.7254852591101], [5.8809627357627, 45.7364722578282], [5.8864562351218, 45.7460858817066], [5.88207860282, 45.7583175013734], [5.8716066196667, 45.7732100347922], [5.8618213239334, 45.7944544268449], [5.8432807635964, 45.811793284197], [5.8256843984618, 45.8114499404871], [5.8222509613624, 45.8023942501373], [5.8310920618934, 45.7820082173595], [5.845684169566, 45.7509785295733], [5.8595895898187, 45.7181892052738], [5.8606196209486, 45.6993482191906], [5.8586453946164, 45.6808076588537] ] + ] + }, + "properties" : { + "feature::id" : 357, + "id" : 135513, + "name" : "Lac du Bourget", + "pfafstette" : 63831, + "lke_type" : "N", + "altitude" : 230, + "objectid" : 85503, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 358, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [26.8952715848746, 44.2625835469694], [26.8903789370079, 44.2550299853507], [26.8952715848746, 44.2355452298114], [26.9208077733016, 44.2258457700055], [26.9288334325215, 44.2483777009705], [26.9140696529939, 44.276016869621], [26.895872436367, 44.2942140862479], [26.8762160089727, 44.2987633904047], [26.8642848150522, 44.3003084370994], [26.8572891869621, 44.298720472441], [26.8469459577, 44.2880768174327], [26.8469459577, 44.2768752288958], [26.8737696850394, 44.2677766205823], [26.8952715848746, 44.2625835469694] ] + ] + }, + "properties" : { + "feature::id" : 358, + "id" : 135806, + "pfafstette" : 31851, + "lke_type" : "N", + "altitude" : 13, + "objectid" : 85506, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_85506", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 359, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [24.1538008148691, 41.6565618705365], [24.1589509705182, 41.6632141549167], [24.1557750412012, 41.6787075398279], [24.1342731413661, 41.6857460858817], [24.1091232146127, 41.6948446941952], [24.092041865043, 41.7127844030397], [24.0622567982055, 41.7323120765428], [24.0339309421351, 41.7349729902948], [24.0378364768357, 41.7225267808094], [24.068007805347, 41.706732970152], [24.1038872230361, 41.6854456601355], [24.1355177623146, 41.6668621818348], [24.1538008148691, 41.6565618705365] ] + ] + }, + "properties" : { + "feature::id" : 359, + "id" : 138345, + "pfafstette" : 49115, + "lke_type" : "N", + "altitude" : 1195, + "objectid" : 85709, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_85709", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 360, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [25.5786342931697, 41.6450169382897], [25.5998786852225, 41.6370771149972], [25.605973036074, 41.6399097006043], [25.6010803882073, 41.6499095861564], [25.587432475737, 41.6526134178722], [25.5786342931697, 41.6590081944699], [25.5708232237685, 41.6693085057682], [25.5603083226515, 41.6668621818348], [25.5417677623146, 41.6544159723494], [25.5139140038454, 41.6453173640359], [25.4880344717085, 41.6450169382897], [25.4743865592382, 41.6377208844534], [25.469923091009, 41.6260901162791], [25.4662750640908, 41.6258326084966], [25.4540005264603, 41.6292231276323], [25.4306960721479, 41.6371629509247], [25.4162756363303, 41.6338153497528], [25.439708844534, 41.6240300540194], [25.4662750640908, 41.6258326084966], [25.4694939113715, 41.624931331258], [25.469923091009, 41.6260901162791], [25.4758457700055, 41.6264763779527], [25.5019828099249, 41.6359183299762], [25.5247722486724, 41.6411114035891], [25.5466604101813, 41.6471628364768], [25.5786342931697, 41.6450169382897] ] + ] + }, + "properties" : { + "feature::id" : 360, + "id" : 138264, + "pfafstette" : 6315, + "lke_type" : "N", + "altitude" : 219, + "objectid" : 85711, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_85711", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 361, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [11.910893723677, 42.5540623283282], [11.9190910547519, 42.5465087667094], [11.9488761215895, 42.542903657755], [11.9841546877861, 42.5483542391503], [11.9951416865043, 42.5701994826955], [11.995356276323, 42.5911863669658], [11.9941545733382, 42.6112719739974], [11.9924378547885, 42.6332030534701], [11.9826954770189, 42.6489110282], [11.9506786760667, 42.659597601172], [11.9111512314595, 42.6568508514924], [11.8796494460722, 42.6380098654093], [11.8627826863212, 42.6085252243179], [11.873168833547, 42.5850920161143], [11.8877180232558, 42.5708003341879], [11.8989196117927, 42.5617017258744], [11.910893723677, 42.5540623283282] ] + ] + }, + "properties" : { + "feature::id" : 361, + "id" : 138374, + "name" : "Lago di Bolsena", + "lge_id" : "it", + "pfafstette" : 55, + "lke_type" : "N", + "altitude" : 305, + "objectid" : 85790, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 362, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.3675608862846, 41.0326205136422], [29.4077321003479, 41.0298737639626], [29.4311653085516, 41.0298737639626], [29.4191911966673, 41.0350239196118], [29.3964875938473, 41.0368693920527], [29.3821100759934, 41.0459250824025], [29.3861014466215, 41.0523198590002], [29.3925820591467, 41.0666115409266], [29.3803933574437, 41.0821049258378], [29.363655351584, 41.0775127037173], [29.3569601492401, 41.0544657571873], [29.3463164942318, 41.0271270142831], [29.345458134957, 41.0109898599158], [29.3497499313313, 40.9874278978209], [29.3542563175243, 40.9851961637063], [29.3547284151254, 41.0058826222304], [29.3506082906061, 41.0207751556491], [29.3675608862846, 41.0326205136422] ] + ] + }, + "properties" : { + "feature::id" : 362, + "id" : 138210, + "pfafstette" : 5, + "lke_type" : "N", + "altitude" : 86, + "objectid" : 85810, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_85810", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 363, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [24.1667620399194, 41.9796912195569], [24.1571054980773, 41.9677600256363], [24.1679637429042, 41.9547129646585], [24.1936286852225, 41.9581464017579], [24.2111821323933, 41.9705926112434], [24.2085212186413, 41.9820517075627], [24.2026414576085, 42.0021373145944], [24.1950878959897, 42.0176306995056], [24.1887360373558, 42.0112359229079], [24.1832425379967, 41.9927382805347], [24.1667620399194, 41.9796912195569] ] + ] + }, + "properties" : { + "feature::id" : 363, + "id" : 138163, + "name" : "Batak", + "pfafstette" : 982273, + "lke_type" : "N", + "altitude" : 1108, + "objectid" : 85883, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 364, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [20.2792958020509, 42.1504617972899], [20.2832013367515, 42.1231230543856], [20.2986088857352, 42.1027370216078], [20.318351149057, 42.0938100851492], [20.3300677531588, 42.0840677073796], [20.3496383446255, 42.0840677073796], [20.3671917917964, 42.0742824116462], [20.3691660181286, 42.060634499176], [20.3630287493133, 42.0279739287676], [20.3626854056034, 42.0106350714155], [20.3750028611976, 42.0196049258378], [20.3886936916316, 42.0449694424098], [20.4004102957334, 42.066471342245], [20.4080926112434, 42.0841535433071], [20.4211396722212, 42.1050975096136], [20.4034574711591, 42.103037447354], [20.3785650521883, 42.1027370216078], [20.3613549487273, 42.1035953808826], [20.3437585835928, 42.1035953808826], [20.3320419794909, 42.1133377586523], [20.3125143059879, 42.1211488280535], [20.3086087712873, 42.1309341237869], [20.3144456143564, 42.1465562625893], [20.3027290102545, 42.1660839360923], [20.2851755630837, 42.1817060748947], [20.2750469236404, 42.1875], [20.2714847326497, 42.1895171442959], [20.2597681285479, 42.1934226789965], [20.2539312854789, 42.1973282136971], [20.2207127815419, 42.2051392830983], [20.1992108817067, 42.2149245788317], [20.1777518998352, 42.2227356482329], [20.1502844030397, 42.2153966764329], [20.1835887429042, 42.2012337483977], [20.2231161875115, 42.1875], [20.2285238509431, 42.1856116095953], [20.2630728117561, 42.1638951199414], [20.2792958020509, 42.1504617972899] ] + ] + }, + "properties" : { + "feature::id" : 364, + "id" : 138325, + "pfafstette" : 31115, + "lke_type" : "N", + "altitude" : 324, + "objectid" : 85904, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_85904", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 365, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [28.6198870399194, 41.3298274125618], [28.6350370811207, 41.3188404138436], [28.6535776414576, 41.3173812030764], [28.6447794588903, 41.3225313587255], [28.6296294176891, 41.3307716077641], [28.6123334783007, 41.3429173915034], [28.5974409448819, 41.3541189800403], [28.5895011215895, 41.3626596548251], [28.5786428767625, 41.3736037355796], [28.5581280900934, 41.3833031953855], [28.5323773118477, 41.3915434444241], [28.5025922450101, 41.40124290423], [28.477571072148, 41.4067364035891], [28.4673136788134, 41.4070368293353], [28.4764552050906, 41.3961356665446], [28.5025922450101, 41.3887966947445], [28.522978277788, 41.3812431331258], [28.545166865043, 41.3708569859], [28.5539650476103, 41.3633034242813], [28.5527633446255, 41.3539043902216], [28.5488578099249, 41.3410719190624], [28.5548234068852, 41.330127838308], [28.574222326497, 41.3332179316975], [28.6004881203076, 41.3365655328694], [28.6198870399194, 41.3298274125618] ] + ] + }, + "properties" : { + "feature::id" : 365, + "id" : 138091, + "name" : "Durusu Golu", + "pfafstette" : 3, + "lke_type" : "N", + "altitude" : 4, + "objectid" : 85933, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 366, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.0749690990661, 43.1042706235122], [12.1050975096136, 43.0926398553379], [12.1332946117927, 43.0926398553379], [12.1614058780443, 43.0987771241531], [12.1814056491485, 43.1081761582128], [12.1743241851309, 43.1209657114082], [12.1628650888116, 43.1401500412013], [12.1722641228713, 43.1589481093206], [12.1859120353415, 43.1690338308002], [12.1820065006409, 43.1811796145395], [12.1559123786852, 43.1893340276506], [12.1175437190991, 43.1966729994507], [12.0769004074345, 43.2009218778612], [12.0373729628273, 43.1939262497711], [12.0236821323933, 43.173239791247], [12.0427377082952, 43.1452572788867], [12.0527375938473, 43.1297638939755], [12.0549264099982, 43.119163156931], [12.0749690990661, 43.1042706235122] ] + ] + }, + "properties" : { + "feature::id" : 366, + "id" : 138015, + "name" : "Trasimeno", + "lge_id" : "it", + "pfafstette" : 0, + "lke_type" : "Y", + "altitude" : 259, + "objectid" : 86014, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 367, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [18.4851103277788, 42.7556050860648], [18.4970844396631, 42.7468498214613], [18.4995307635964, 42.7474506729537], [18.4885437648782, 42.7574505585058], [18.476569652994, 42.772943943417], [18.4675568806079, 42.8122138802417], [18.4487588124885, 42.8447456967588], [18.4336087712873, 42.8541447308185], [18.4226217725691, 42.8550030900934], [18.4045533098334, 42.8580502655191], [18.3933088033327, 42.8559472852957], [18.4077292391503, 42.8398530488922], [18.4182441402673, 42.824359663981], [18.4331366736861, 42.8125143059879], [18.4569132255997, 42.8015273072697], [18.4642521973997, 42.7814846182018], [18.4697456967588, 42.7650041201245], [18.4851103277788, 42.7556050860648] ] + ] + }, + "properties" : { + "feature::id" : 367, + "id" : 138018, + "pfafstette" : 4595, + "lke_type" : "N", + "altitude" : 383, + "objectid" : 86017, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_86017", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 368, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [23.5954810245376, 42.4489991530855], [23.6096439525728, 42.4404155603369], [23.6152662058231, 42.4402009705182], [23.6230772752243, 42.4510592153452], [23.6240214704267, 42.4632479170482], [23.6099872962827, 42.4714452481231], [23.5965539736312, 42.4799859229079], [23.564708844534, 42.5058225370811], [23.5349237776964, 42.5164661920894], [23.5376276094122, 42.5070242400659], [23.5471124793994, 42.4915308551547], [23.5564256775316, 42.4702006271745], [23.5753095815785, 42.4553080937557], [23.5954810245376, 42.4489991530855] ] + ] + }, + "properties" : { + "feature::id" : 368, + "id" : 137870, + "name" : "Iskar", + "pfafstette" : 352777, + "lke_type" : "N", + "altitude" : 818, + "objectid" : 86146, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 369, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [25.1184249679546, 41.0312042208387], [25.1516005539279, 41.0227064640176], [25.1697977705548, 41.0205605658304], [25.1765358908625, 41.033650544772], [25.1658922358542, 41.052191105109], [25.1401414576085, 41.0676844900201], [25.1306136696576, 41.0831778749313], [25.1275664942318, 41.1001733885735], [25.1077813129463, 41.1060102316425], [25.0941334004761, 41.0923623191723], [25.0825455502655, 41.0752809696026], [25.0804425700421, 41.0546374290423], [25.0896270142831, 41.0375989974364], [25.1184249679546, 41.0312042208387] ] + ] + }, + "properties" : { + "feature::id" : 369, + "id" : 138600, + "name" : "Limni Vistonis", + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : -2, + "objectid" : 86352, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 370, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [12.2044955136422, 42.0999902719282], [12.2275424601721, 42.0917929408533], [12.2458684306904, 42.0939817570042], [12.2656536119758, 42.1006340413844], [12.2832070591467, 42.1246251831166], [12.2762543490203, 42.1505047152536], [12.2641514832448, 42.1613629600806], [12.2558683162425, 42.1665560336935], [12.2363406427394, 42.1662556079473], [12.2090018998352, 42.1638092840139], [12.1856974455228, 42.1493030122688], [12.1760409036807, 42.1304191082219], [12.1856974455228, 42.1137240203259], [12.2044955136422, 42.0999902719282] ] + ] + }, + "properties" : { + "feature::id" : 370, + "id" : 138620, + "name" : "Lago di Bracciano", + "pfafstette" : 553, + "lke_type" : "N", + "altitude" : 161, + "objectid" : 86427, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 371, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.6079014832448, 40.3933574436916], [29.6311201016297, 40.3952029161326], [29.6517636421901, 40.3988509430507], [29.6694458432522, 40.4022414621864], [29.6897031221388, 40.4079495513642], [29.7104754165904, 40.4328848882988], [29.7100891549167, 40.4544726240615], [29.6909477430874, 40.4575197994873], [29.6718921671855, 40.4663179820546], [29.6509052829152, 40.4873048663248], [29.6245107352133, 40.4994506500641], [29.5939960629921, 40.4940429866325], [29.5542111106025, 40.4900516160044], [29.5232243407801, 40.4921975141915], [29.4997482146127, 40.4955021973997], [29.4846410913752, 40.4994506500641], [29.4460578419703, 40.5058454266618], [29.4003931285479, 40.5121972852957], [29.381852568211, 40.5040428721846], [29.359148965391, 40.4933992171763], [29.3414238463651, 40.4797513047061], [29.3369174601721, 40.4572193737411], [29.3493636696576, 40.434687442776], [29.3696209485442, 40.4219408075444], [29.3957579884637, 40.4258892602087], [29.4211654229995, 40.4283355841421], [29.4405643426112, 40.4146876716718], [29.483181880608, 40.3991942867607], [29.5183316929134, 40.395803767625], [29.5348121909907, 40.394301638894], [29.5715499679546, 40.3906106940121], [29.6079014832448, 40.3933574436916] ] + ] + }, + "properties" : { + "feature::id" : 371, + "id" : 138504, + "name" : "Iznik Gl", + "pfafstette" : 171, + "lke_type" : "N", + "altitude" : 83, + "objectid" : 86450, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 372, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [19.6230372184582, 42.0313215299396], [19.63441047885, 42.027415995239], [19.6489167505951, 42.0243688198132], [19.6504188793261, 42.033252838308], [19.6523501876946, 42.0428664621864], [19.648444652994, 42.052780511811], [19.6445391182933, 42.0625658075444], [19.6675002288958, 42.0720935954953], [19.6523501876946, 42.0796471571141], [19.6364705411097, 42.0826943325398], [19.6186595861564, 42.0702481230544], [19.6172003753891, 42.0488749771104], [19.6230372184582, 42.0313215299396] ] + ] + }, + "properties" : { + "feature::id" : 372, + "id" : 138436, + "pfafstette" : 13, + "lke_type" : "N", + "altitude" : 164, + "objectid" : 86505, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_86505", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 373, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [23.212309444241, 41.1726618293353], [23.2281461728621, 41.1617606665446], [23.2492618110236, 41.1569967725691], [23.2372018632119, 41.1736060245376], [23.219991759751, 41.2003439159495], [23.2008074299579, 41.2236912882256], [23.1853140450467, 41.2414164072514], [23.1662584691448, 41.2609869987182], [23.1324391137154, 41.2705577046328], [23.1144994048709, 41.2632616507966], [23.1175465802967, 41.250171671855], [23.115143174327, 41.2356224821461], [23.1084050540194, 41.2179831990478], [23.1287910867973, 41.2036915171214], [23.1610224775682, 41.1985413614723], [23.1873741073064, 41.1887989837026], [23.212309444241, 41.1726618293353] ] + ] + }, + "properties" : { + "feature::id" : 373, + "id" : 138657, + "name" : "Limni Kerkinis", + "pfafstette" : 471, + "lke_type" : "N", + "altitude" : 30, + "objectid" : 86539, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 374, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [4.5835097738509, 43.5146951107856], [4.6011061389855, 43.5187293993774], [4.6241530855155, 43.5320339681377], [4.6387022752243, 43.5473127632302], [4.6325650064091, 43.5655099798572], [4.613552348471, 43.5791578923274], [4.5888745193188, 43.5828488372093], [4.5625228895807, 43.584908899469], [4.5372442089361, 43.5846513916865], [4.5117080205091, 43.581904642007], [4.492180347006, 43.5764969785754], [4.4870731093206, 43.5591581212232], [4.5078024858084, 43.5442655878044], [4.5307635964109, 43.536325764512], [4.507716649881, 43.5314331166453], [4.4682750412012, 43.5287722028933], [4.4448418329976, 43.5293730543857], [4.4329964750046, 43.5250812580114], [4.4393483336385, 43.5150813724593], [4.4448418329976, 43.5013905420253], [4.4428676066654, 43.4828499816883], [4.4514082814503, 43.4792019547702], [4.4721805759018, 43.4834508331807], [4.4917082494049, 43.4810045092474], [4.4999055804798, 43.4846954541293], [4.5141543444424, 43.490746887017], [4.5259997024354, 43.4952961911738], [4.518059879143, 43.4995021516206], [4.5080599935909, 43.5071415491668], [4.5178452893243, 43.5162830754441], [4.5478449459806, 43.5138796694745], [4.5705485488006, 43.5140942592932], [4.5835097738509, 43.5146951107856] ] + ] + }, + "properties" : { + "feature::id" : 374, + "id" : 137402, + "pfafstette" : 0, + "altitude" : 1, + "objectid" : 86572, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_86572", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 375, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [4.2320545687603, 43.4792019547702], [4.2566036440212, 43.478901529024], [4.2944572880425, 43.478901529024], [4.3138562076543, 43.4828499816883], [4.3166458752976, 43.4989871360557], [4.3154441723128, 43.5229353598242], [4.2937276826588, 43.5283859412196], [4.2779767899652, 43.5132359000183], [4.2687923457242, 43.5062402719282], [4.2508526368797, 43.5132359000183], [4.2460887429042, 43.5253387657938], [4.2438999267533, 43.5469265015565], [4.2265610694012, 43.564866210401], [4.2010677989379, 43.5734498031496], [4.1889649331624, 43.5658104056034], [4.197376854056, 43.5479136147226], [4.2162178401392, 43.543664736312], [4.229264901117, 43.5320339681377], [4.2235138939755, 43.5214332310932], [4.2168186916316, 43.507441974913], [4.2208529802234, 43.487742629555], [4.2320545687603, 43.4792019547702] ] + ] + }, + "properties" : { + "feature::id" : 375, + "id" : 137390, + "pfafstette" : 1, + "altitude" : 0, + "objectid" : 86580, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_86580", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 376, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.3520474729903, 42.4905866599524], [27.3657383034243, 42.4881832539828], [27.3738068806079, 42.494492194653], [27.3864676799121, 42.4999856940121], [27.4147935359824, 42.4902862342062], [27.4429906381615, 42.4945780305805], [27.4475399423182, 42.5140627861198], [27.4311452801685, 42.5216163477385], [27.4132055713239, 42.5222171992309], [27.4004160181285, 42.5240626716719], [27.3745364859916, 42.5206292345724], [27.3491290514558, 42.5039770646402], [27.3520474729903, 42.4905866599524] ] + ] + }, + "properties" : { + "feature::id" : 376, + "id" : 137128, + "pfafstette" : 211, + "lke_type" : "N", + "altitude" : -2, + "objectid" : 86649, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_86649", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 377, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.8958695751694, 43.7258514924007], [15.9040669062443, 43.7267098516755], [15.8971141961179, 43.7370530809376], [15.8897752243179, 43.7437912012452], [15.8706338124886, 43.7583833089178], [15.8527799395715, 43.7847778566197], [15.8689170939388, 43.7948206601355], [15.8871143105658, 43.7972669840689], [15.8906335835928, 43.814262497711], [15.8767281633401, 43.8346056125252], [15.857200489837, 43.8398416041018], [15.8569429820546, 43.8185542940853], [15.8548829197949, 43.7996703900385], [15.8464280809376, 43.7884688015016], [15.8479302096686, 43.7711299441494], [15.8596468137704, 43.7598854376488], [15.8781873741073, 43.7416453030581], [15.8958695751694, 43.7258514924007] ] + ] + }, + "properties" : { + "feature::id" : 377, + "id" : 137130, + "pfafstette" : 131, + "altitude" : 7, + "objectid" : 86651, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_86651", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 378, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [25.8776866645303, 42.5890404687786], [25.8923646081304, 42.5908859412196], [25.9154115546603, 42.5975811435635], [25.931162447354, 42.6048771973998], [25.9112485121772, 42.609340665629], [25.8905191356894, 42.6184821919063], [25.8764849615455, 42.6313575810291], [25.8852831441128, 42.6434604468046], [25.8715923136788, 42.6480097509614], [25.8594036119758, 42.6513573521333], [25.84936080846, 42.6559495742538], [25.8312923457242, 42.6410141228713], [25.8506054294085, 42.6270657846548], [25.8576868934261, 42.6164650476103], [25.8679442867607, 42.6036325764512], [25.8776866645303, 42.5890404687786] ] + ] + }, + "properties" : { + "feature::id" : 378, + "id" : 137221, + "name" : "Jrebchevo", + "pfafstette" : 49133, + "lke_type" : "N", + "altitude" : 269, + "objectid" : 86688, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 379, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [6.1533201336752, 43.74499290423], [6.1750795412928, 43.7401002563633], [6.179714681377, 43.7388985533785], [6.1770108496612, 43.7540915125435], [6.1867961453946, 43.7677823429775], [6.2082551272661, 43.7860224775682], [6.2204867469328, 43.8078677211134], [6.1992423548801, 43.800915010987], [6.1772683574437, 43.7821169428676], [6.1584702893243, 43.7686836202161], [6.1429339864494, 43.7531902353049], [6.1533201336752, 43.74499290423] ] + ] + }, + "properties" : { + "feature::id" : 379, + "id" : 137230, + "name" : "Sainte-Croix", + "pfafstette" : 223391, + "lke_type" : "N", + "altitude" : 470, + "objectid" : 86695, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 380, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [3.5288008148691, 43.3454695797473], [3.5449379692364, 43.3469717084783], [3.5585858817066, 43.356370742538], [3.5886284563267, 43.3798468687054], [3.6148942501373, 43.3958981871452], [3.6254949871818, 43.4010483427944], [3.6506449139352, 43.4196318210951], [3.6765244460721, 43.4320780305805], [3.6914169794909, 43.4351252060062], [3.6928761902582, 43.4484297747665], [3.6838634178722, 43.4600176249771], [3.6746789736312, 43.4712621314778], [3.6652799395715, 43.4795023805164], [3.6573401162791, 43.4716054751877], [3.6448939067936, 43.4643094213514], [3.6191431285479, 43.456369598059], [3.5996154550449, 43.442678767625], [3.5734784151254, 43.4235373557957], [3.5504314685955, 43.4043530260026], [3.5418907938106, 43.3955548434353], [3.5290583226515, 43.3804477201978], [3.5257536394433, 43.3621217496796], [3.5257536394433, 43.3512635048526], [3.5288008148691, 43.3454695797473] ] + ] + }, + "properties" : { + "feature::id" : 380, + "id" : 137495, + "pfafstette" : 1, + "altitude" : -2, + "objectid" : 86758, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_86758", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 381, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.3186143792346, 42.3909311481414], [27.3347086156382, 42.388484824208], [27.3593864447903, 42.3930770463285], [27.3822188015015, 42.3978838582677], [27.3913603277788, 42.4063816150888], [27.3955233702618, 42.421875], [27.4077120719648, 42.4270680736129], [27.4211453946164, 42.417368613807], [27.4333770142831, 42.4091283647684], [27.4348362250503, 42.4179694652994], [27.4317890496246, 42.4331195065006], [27.4393426112434, 42.4419606070317], [27.4411880836843, 42.4547072422633], [27.425050929317, 42.4547072422633], [27.3999010025636, 42.4456086339498], [27.3769828099249, 42.4422610327779], [27.359772706464, 42.4273684993591], [27.3356957288042, 42.4140210126351], [27.3166401529024, 42.402175654642], [27.3186143792346, 42.3909311481414] ] + ] + }, + "properties" : { + "feature::id" : 381, + "id" : 137159, + "name" : "Mandra", + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : 2, + "objectid" : 86773, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 382, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [17.0013504852591, 43.6489425013734], [17.0271012635048, 43.6419039553195], [17.0480881477751, 43.6404018265885], [17.0678733290606, 43.6446507049991], [17.0761994140267, 43.6662813587255], [17.0797186870536, 43.6875257507783], [17.1009630791064, 43.6899291567479], [17.1162418741989, 43.6917746291888], [17.0903623420619, 43.6942209531221], [17.0572725920161, 43.6960664255631], [17.0202773072697, 43.702761627907], [16.984011627907, 43.7088130607947], [16.9730246291888, 43.7054654596228], [16.9730246291888, 43.6887274537631], [16.9738829884636, 43.6717748580846], [16.9787756363303, 43.6601440899103], [17.0013504852591, 43.6489425013734] ] + ] + }, + "properties" : { + "feature::id" : 382, + "id" : 137172, + "pfafstette" : 5991, + "lke_type" : "N", + "altitude" : 701, + "objectid" : 86834, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_86834", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 383, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [20.8708770142831, 39.6587735762681], [20.8916063907709, 39.6456835973265], [20.9102757049991, 39.6546534517488], [20.9231081761582, 39.6687734618202], [20.9145675013734, 39.6788591832998], [20.8945248123054, 39.6861123191723], [20.869889901117, 39.69250709577], [20.8474438060795, 39.6973139077092], [20.8422936504303, 39.6909191311115], [20.8537527467497, 39.6831080617103], [20.8616925700421, 39.6748678126717], [20.8708770142831, 39.6587735762681] ] + ] + }, + "properties" : { + "feature::id" : 383, + "id" : 139935, + "name" : "Limni Ioanninon", + "pfafstette" : 637, + "lke_type" : "N", + "altitude" : 464, + "objectid" : 86888, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 384, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.9582637108588, 38.6177554477202], [27.9743579472624, 38.6074122184582], [27.9970615500824, 38.6074122184582], [28.02684661692, 38.6092576908991], [28.0496789736312, 38.60376419154], [28.0725113303424, 38.617455021974], [28.0849575398279, 38.64148908167], [28.0668890770921, 38.6530340139169], [28.0402799395715, 38.6602871497894], [28.0286920893609, 38.6533344396631], [28.0025550494415, 38.6484417917964], [27.954229422267, 38.6484417917964], [27.93568886193, 38.6371972852957], [27.9448303882073, 38.6274549075261], [27.9582637108588, 38.6177554477202] ] + ] + }, + "properties" : { + "feature::id" : 384, + "id" : 139893, + "name" : "Marmara Golu", + "pfafstette" : 5623, + "lke_type" : "N", + "altitude" : 74, + "objectid" : 87099, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 385, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [28.421133949826, 38.7359515198682], [28.4125932750412, 38.7347498168834], [28.401606276323, 38.7253507828237], [28.3918638985534, 38.7143637841055], [28.3818640130013, 38.7025184261124], [28.3725508148691, 38.70191757462], [28.3636667963743, 38.7040634728072], [28.3567140862479, 38.6925185405603], [28.347186298297, 38.6694286760667], [28.3354696941952, 38.6387423319905], [28.3469287905146, 38.6311029344442], [28.3755121543673, 38.6520898187145], [28.4028508972716, 38.6785272843802], [28.4260265976927, 38.6949648644937], [28.4345672724776, 38.7000721021791], [28.4256832539828, 38.7061664530306], [28.4375286119758, 38.7247499313313], [28.4466701382531, 38.7411445934811], [28.4305329838857, 38.7365952893243], [28.421133949826, 38.7359515198682] ] + ] + }, + "properties" : { + "feature::id" : 385, + "id" : 139762, + "pfafstette" : 77, + "lke_type" : "N", + "altitude" : 232, + "objectid" : 87159, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_87159", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 386, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [21.9194487044497, 40.1836602728438], [21.9447273850943, 40.207994758286], [21.9626670939389, 40.2186384132943], [21.9692335423915, 40.2222864402124], [21.9763150064091, 40.2304837712873], [22.0036537493133, 40.2435308322652], [22.0397906747848, 40.2660627632302], [22.0595758560703, 40.2888092840139], [22.064468503937, 40.2958907480315], [22.0556703213697, 40.2991954312397], [22.0422369987182, 40.2940023576268], [22.0276019730819, 40.2867492217543], [22.0127094396631, 40.2736163248489], [21.9961001876946, 40.266921122505], [21.980005951291, 40.2569212369529], [21.9567873329061, 40.2447754532137], [21.9284614768358, 40.2271361701154], [21.9048136788134, 40.2043467313679], [21.886015610694, 40.1861065967771], [21.8745135964109, 40.1696690166636], [21.860479422267, 40.1551627449185], [21.8500932750412, 40.139883949826], [21.8640416132577, 40.1386822468412], [21.8941700238052, 40.1566219556858], [21.9194487044497, 40.1836602728438] ] + ] + }, + "properties" : { + "feature::id" : 386, + "id" : 139435, + "pfafstette" : 155193, + "lke_type" : "N", + "altitude" : 277, + "objectid" : 87310, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_87310", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 387, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [21.2702715848746, 40.5043432979308], [21.2915159769273, 40.4946438381249], [21.3097131935543, 40.4979485213331], [21.3207001922725, 40.5085492583776], [21.3164083958982, 40.5207379600806], [21.3170092473906, 40.5301369941403], [21.3255928401392, 40.5438278245743], [21.3188547198315, 40.5575186550082], [21.2905288637612, 40.5599220609778], [21.2666235579564, 40.5511667963743], [21.2647780855155, 40.5364888527742], [21.2802714704267, 40.5270898187145], [21.2900567661601, 40.5192358313496], [21.2817306811939, 40.5189354056034], [21.2678252609412, 40.5262314594397], [21.2582974729903, 40.5207379600806], [21.2702715848746, 40.5043432979308] ] + ] + }, + "properties" : { + "feature::id" : 387, + "id" : 139347, + "name" : "Limni Kastorias", + "pfafstette" : 631, + "lke_type" : "N", + "altitude" : 623, + "objectid" : 87350, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 388, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [21.6057183894891, 38.8910141228713], [21.57752128731, 38.9028594808643], [21.5446890450467, 38.9250480681194], [21.5332299487273, 38.9350479536715], [21.5163631889764, 38.9344471021791], [21.5051186824757, 38.9435886284563], [21.5127151620582, 38.9648330205091], [21.5182086614173, 38.9891245879876], [21.5033161279985, 38.9891245879876], [21.4829300952207, 38.9895108496612], [21.4651191402674, 38.9998111609595], [21.4419005218824, 39.0141028428859], [21.4139609274858, 39.0301541613258], [21.3986821323933, 39.025948200879], [21.4096691311115, 39.0095106207654], [21.4314285387292, 38.9964635597876], [21.4571793169749, 38.990712552646], [21.474861518037, 38.9682235396448], [21.4848614035891, 38.9423869254715], [21.4949042071049, 38.9274943920527], [21.4881660867973, 38.9201554202527], [21.4765782365867, 38.9168936550082], [21.488552348471, 38.9074087850211], [21.504904092657, 38.8949196575719], [21.5143031267167, 38.8903703534151], [21.5349037493133, 38.8885677989379], [21.5516417551731, 38.8873231779894], [21.5810834783007, 38.8897695019227], [21.6057183894891, 38.8910141228713] ] + ] + }, + "properties" : { + "feature::id" : 388, + "id" : 140312, + "name" : "Lake Kremaston, centre", + "pfafstette" : 573, + "lke_type" : "N", + "altitude" : 295, + "objectid" : 87533, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 389, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [21.3608714063358, 38.7560371268998], [21.3686824757371, 38.7502432017945], [21.3700129326131, 38.7751356207654], [21.3850342199231, 38.7955216535433], [21.4002700970518, 38.7904144158579], [21.41125709577, 38.7928607397913], [21.4173514466215, 38.8010151529024], [21.4039610419337, 38.8050065235305], [21.3772231505219, 38.8174527330159], [21.3561933482879, 38.8338473951657], [21.3420304202527, 38.8424309879143], [21.3300992263322, 38.8375383400476], [21.3413008148691, 38.8247058688885], [21.3532749267534, 38.812259659403], [21.3545195477019, 38.783719213514], [21.3608714063358, 38.7560371268998] ] + ] + }, + "properties" : { + "feature::id" : 389, + "id" : 140402, + "pfafstette" : 39, + "lke_type" : "N", + "altitude" : 142, + "objectid" : 87725, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_87725", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 390, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [21.77417139718, 39.3098076130745], [21.7690641594946, 39.3168461591284], [21.7582917505951, 39.3232409357261], [21.748291865043, 39.3298932201062], [21.7331847418055, 39.33693176616], [21.7221977430874, 39.3499788271379], [21.7121549395715, 39.3512234480864], [21.7099661234206, 39.3393780900934], [21.7227985945798, 39.3289919428676], [21.7361031633401, 39.3053012268815], [21.7458455411097, 39.2830697216627], [21.7541716260758, 39.2869752563633], [21.7668753433437, 39.2931125251785], [21.7735705456876, 39.2979622550815], [21.77417139718, 39.3098076130745] ] + ] + }, + "properties" : { + "feature::id" : 390, + "id" : 140112, + "name" : "Tehniti Limni Tavropou (Plastira)", + "pfafstette" : 69773, + "lke_type" : "N", + "altitude" : 786, + "objectid" : 87741, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 391, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [16.0959531221388, 41.3657497482146], [16.1193863303424, 41.3730028840872], [16.0981419382897, 41.3808568714521], [16.0708031953855, 41.3898267258744], [16.0573698727339, 41.389225874382], [16.0543226973082, 41.3998266114265], [16.014795252701, 41.4226589681377], [15.9600748489288, 41.4390965482512], [15.9488732603919, 41.4330451153635], [15.9558259705182, 41.4184100897272], [15.9719202069218, 41.4062643059879], [15.9892590642739, 41.4008137245926], [16.0068554294085, 41.3928739013001], [16.0217479628273, 41.3859211911738], [16.026640610694, 41.3810285433071], [16.0382284609046, 41.3722732787035], [16.0547089589819, 41.3731316379784], [16.0655672038088, 41.3747196026369], [16.0959531221388, 41.3657497482146] ] + ] + }, + "properties" : { + "feature::id" : 391, + "id" : 138961, + "pfafstette" : 1, + "altitude" : -2, + "objectid" : 87806, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_87806", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 392, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [23.5318766022706, 40.6395778016847], [23.5500738188976, 40.6402215711408], [23.5659105475188, 40.6472171992309], [23.5820477018861, 40.6590625572239], [23.5881420527376, 40.6733542391503], [23.5632496337667, 40.6845558276872], [23.5400310153818, 40.6927531587621], [23.5200312442776, 40.6973453808826], [23.4944092199231, 40.6991479353598], [23.4717056171031, 40.699791704816], [23.4431222532503, 40.7009934078008], [23.4096891594946, 40.7009934078008], [23.3801186824757, 40.7003925563084], [23.3601189113715, 40.6912939479949], [23.3540245605201, 40.6770022660685], [23.3683162424464, 40.6730538134041], [23.4020926799121, 40.6678607397912], [23.4367703946164, 40.6733542391503], [23.4607186183849, 40.6815086522615], [23.4762120032961, 40.6751567936275], [23.4931645989745, 40.6712083409632], [23.5133360419337, 40.6666161188427], [23.5243230406519, 40.6508223081853], [23.5318766022706, 40.6395778016847] ] + ] + }, + "properties" : { + "feature::id" : 392, + "id" : 138965, + "name" : "Limni Vilvi", + "pfafstette" : 15, + "lke_type" : "N", + "altitude" : 30, + "objectid" : 87808, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 393, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [23.1506363303424, 40.6745559421351], [23.1618808368431, 40.6654144158579], [23.1859148965391, 40.6660152673503], [23.2044983748398, 40.6772597738509], [23.206300929317, 40.6937402719282], [23.1859148965391, 40.7049418604651], [23.1628679500092, 40.7092336568394], [23.1367309100897, 40.7137400430324], [23.1087913156931, 40.7128387657938], [23.0975468091925, 40.7015513413294], [23.0975468091925, 40.6870021516206], [23.1144994048709, 40.6790623283281], [23.138190120857, 40.6776031175609], [23.1506363303424, 40.6745559421351] ] + ] + }, + "properties" : { + "feature::id" : 393, + "id" : 138996, + "name" : "Limni Korinia", + "pfafstette" : 951, + "lke_type" : "N", + "altitude" : 64, + "objectid" : 87819, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 394, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.7243693920527, 41.8506369025819], [15.7492618110236, 41.8463880241714], [15.7702916132576, 41.8460875984252], [15.7871154550449, 41.8488343481047], [15.8032526094122, 41.8600359366416], [15.8053126716719, 41.8780185634499], [15.8037247070134, 41.8941127998535], [15.7969007507782, 41.9081040560337], [15.7658710629921, 41.9093057590185], [15.712309444241, 41.9065590093389], [15.6831252288958, 41.900207150705], [15.6845844396631, 41.8810657388757], [15.6977602545321, 41.8594350851492], [15.7243693920527, 41.8506369025819] ] + ] + }, + "properties" : { + "feature::id" : 394, + "id" : 138705, + "pfafstette" : 0, + "lke_type" : "N", + "altitude" : -4, + "objectid" : 87829, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_87829", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 395, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [22.7124010025636, 41.2168244140267], [22.7248472120491, 41.1942924830617], [22.740726858634, 41.1821466993225], [22.7564777513276, 41.1897002609412], [22.7746749679546, 41.2100862937191], [22.7790526002564, 41.2337770097052], [22.7699110739791, 41.2484120353415], [22.7531730681194, 41.2544634682293], [22.7324436916316, 41.2535621909907], [22.7166927989379, 41.2386696575719], [22.7124010025636, 41.2168244140267] ] + ] + }, + "properties" : { + "feature::id" : 395, + "id" : 138714, + "name" : "Doirani Lake - Doirani Community", + "pfafstette" : 14779, + "lke_type" : "N", + "altitude" : 148, + "objectid" : 87862, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 396, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [15.3242452160776, 41.8892201519868], [15.3132582173595, 41.880679477202], [15.3308116645303, 41.8688341192089], [15.3579358176158, 41.8627826863212], [15.3828282365867, 41.8712804431423], [15.4113686824757, 41.8740701107856], [15.4506815372642, 41.8701216581212], [15.488277673503, 41.8734692592932], [15.5129555026552, 41.8855721250687], [15.5335990432155, 41.8965591237868], [15.5421397180004, 41.9038551776231], [15.5195219511079, 41.9059581578465], [15.4976767075627, 41.9026105566746], [15.4821833226515, 41.8986191860465], [15.4214114859916, 41.8919669016664], [15.3564766068486, 41.891366050174], [15.3242452160776, 41.8892201519868] ] + ] + }, + "properties" : { + "feature::id" : 396, + "id" : 138715, + "pfafstette" : 0, + "lke_type" : "N", + "altitude" : -3, + "objectid" : 87863, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_87863", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 397, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.8606253433437, 40.1864070225233], [27.8469345129097, 40.1770079884636], [27.8720844396631, 40.1593257874016], [27.9116118842703, 40.1495834096319], [27.9338433894891, 40.1617291933712], [27.9487359229079, 40.167608954404], [27.9795081029115, 40.1593687053653], [28.0168467313679, 40.155076908991], [28.038691974913, 40.1511284563267], [28.0566316837575, 40.1486821323933], [28.06457150705, 40.1575232329244], [28.0609234801318, 40.1696690166636], [28.0560308322651, 40.1931022248672], [28.0593355154733, 40.2149903863761], [28.0564170939388, 40.2286382988464], [28.0402799395715, 40.2383377586523], [28.0290783510346, 40.2435308322652], [28.0137995559421, 40.2517710813038], [27.9916968046145, 40.2502689525728], [27.9656026826588, 40.2490243316242], [27.9338433894891, 40.2481230543856], [27.9184787584691, 40.2368356299213], [27.9095518220106, 40.2274365958616], [27.8857323521333, 40.2119002929866], [27.8708398187145, 40.1952052050906], [27.8606253433437, 40.1864070225233] ] + ] + }, + "properties" : { + "feature::id" : 397, + "id" : 138838, + "name" : "Kus Gl", + "lge_id" : "tr", + "pfafstette" : 4211, + "lke_type" : "N", + "altitude" : 15, + "objectid" : 87935, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 398, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [28.4636227339315, 40.1988532320088], [28.4843950283831, 40.19129967039], [28.4943949139352, 40.1842611243362], [28.5086865958616, 40.177608839956], [28.5376133034243, 40.177608839956], [28.5584714338033, 40.1742183208204], [28.5600593984618, 40.1645617789782], [28.5694584325215, 40.1478237731185], [28.5967971754258, 40.1329312396997], [28.6259813907709, 40.1301844900201], [28.6545647546237, 40.1329312396997], [28.6770108496612, 40.1425877815418], [28.6884699459806, 40.1547764832448], [28.7019032686321, 40.1629738143197], [28.7194996337667, 40.1772654962461], [28.7122894158579, 40.1939605841421], [28.6946072147958, 40.1900550494415], [28.6839635597876, 40.1888533464567], [28.6711740065922, 40.1921580296649], [28.651517579198, 40.1936172404321], [28.6290285661967, 40.2043467313679], [28.613277673503, 40.2028446026369], [28.5925482970152, 40.2100977385094], [28.5505316105109, 40.2228872917048], [28.5205319538546, 40.2212993270463], [28.5062402719282, 40.2201405420253], [28.4792448727339, 40.2247327641458], [28.4624210309467, 40.2210847372276], [28.4591163477385, 40.209840230727], [28.4636227339315, 40.1988532320088] ] + ] + }, + "properties" : { + "feature::id" : 398, + "id" : 138776, + "name" : "Ulubat Golu", + "pfafstette" : 715, + "lke_type" : "N", + "altitude" : 40, + "objectid" : 87968, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 399, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [21.757476309284, 40.7188901986816], [21.7731842840139, 40.7247270417506], [21.7927548754807, 40.7347269273027], [21.8142138573521, 40.7472160547519], [21.8185056537264, 40.7699625755356], [21.8246000045779, 40.7830096365135], [21.8343423823476, 40.7903486083135], [21.8286342931698, 40.7970008926936], [21.8133554980773, 40.8057990752609], [21.796875, 40.8149406015382], [21.7854159036807, 40.8110350668376], [21.7705233702619, 40.7855417963743], [21.7568325398279, 40.7472160547519], [21.7504806811939, 40.7255854010254], [21.757476309284, 40.7188901986816] ] + ] + }, + "properties" : { + "feature::id" : 399, + "id" : 139095, + "name" : "Limni Vegoritis", + "pfafstette" : 579, + "lke_type" : "N", + "altitude" : 509, + "objectid" : 88012, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 400, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [21.4741319126534, 37.8728283510346], [21.4769215802967, 37.8895234389306], [21.4841317982055, 37.9056605932979], [21.5066208112068, 37.9058751831166], [21.5255047152536, 37.9093086202161], [21.5082087758652, 37.9183213926021], [21.4829300952207, 37.9287075398279], [21.4677800540194, 37.932698910456], [21.4492394936825, 37.9242011536349], [21.4510420481597, 37.9052743316242], [21.459840230727, 37.8889225874382], [21.4653337300861, 37.8776780809376], [21.4741319126534, 37.8728283510346] ] + ] + }, + "properties" : { + "feature::id" : 400, + "id" : 140750, + "name" : "Dam", + "pfafstette" : 193, + "lke_type" : "N", + "altitude" : 102, + "objectid" : 88767, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 401, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [21.5918129692364, 38.5314474226332], [21.6045166865043, 38.5226063221022], [21.6257610785571, 38.5183145257279], [21.650138481963, 38.5280998214613], [21.63794978026, 38.5578848882989], [21.6115981505219, 38.5821764557773], [21.6021991164622, 38.5931634544955], [21.5830147866691, 38.605609663981], [21.5601824299579, 38.607111792712], [21.5440881935543, 38.6080559879143], [21.5191957745834, 38.6092576908991], [21.4949042071049, 38.6017041292804], [21.4775653497528, 38.5974123329061], [21.462672816334, 38.5852236312031], [21.4504411966673, 38.5654384499176], [21.455333844534, 38.5529922404322], [21.4714280809376, 38.5523913889398], [21.4848614035891, 38.5606316379784], [21.5261484847098, 38.5599878685222], [21.5717702801685, 38.5453957608497], [21.5918129692364, 38.5314474226332] ] + ] + }, + "properties" : { + "feature::id" : 401, + "id" : 140485, + "name" : "Limni Trikhonis", + "pfafstette" : 253, + "lke_type" : "N", + "altitude" : 11, + "objectid" : 89436, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 402, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [27.3938066517121, 37.5439479948727], [27.3836780122688, 37.5366090230727], [27.3789141182933, 37.5241628135873], [27.3799012314594, 37.5147637795276], [27.3852659769273, 37.503175929317], [27.3913603277788, 37.4950215162058], [27.4062528611976, 37.4895280168467], [27.4353083226515, 37.4833907480315], [27.4611878547885, 37.48497871269], [27.4829043444424, 37.4852362204724], [27.5102430873466, 37.4873821186596], [27.5253931285479, 37.4904292940853], [27.5251785387292, 37.5047209760117], [27.5038053927852, 37.5180684627358], [27.4844064731734, 37.5235619620949], [27.4734194744552, 37.5280683482879], [27.4597286440212, 37.5348064685955], [27.4436344076176, 37.5333472578282], [27.4196861838491, 37.5280683482879], [27.420544543124, 37.540900819447], [27.4350508148691, 37.559098036074], [27.4229908670573, 37.5627460629921], [27.4062528611976, 37.5517590642739], [27.3938066517121, 37.5439479948727] ] + ] + }, + "properties" : { + "feature::id" : 402, + "id" : 140552, + "name" : "Bafa Golu", + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 89464, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 403, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [22.2177714704267, 38.4879715253617], [22.2207328099249, 38.5013619300494], [22.2163122596594, 38.5189153772203], [22.2119346273576, 38.5329495513642], [22.2070419794909, 38.5444944836111], [22.2028789370079, 38.5563827595678], [22.2077715848746, 38.5745799761948], [22.2074282411646, 38.5824768815235], [22.1992309100897, 38.5745799761948], [22.1784586156382, 38.5587861655375], [22.1506477751328, 38.5423485854239], [22.1538237044497, 38.5287006729537], [22.1727505264604, 38.5362542345724], [22.1863984389306, 38.5447949093573], [22.2025355932979, 38.5287006729537], [22.2119346273576, 38.5025636330342], [22.2177714704267, 38.4879715253617] ] + ] + }, + "properties" : { + "feature::id" : 403, + "id" : 140454, + "pfafstette" : 575, + "lke_type" : "N", + "altitude" : 552, + "objectid" : 89559, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_89559", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 404, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [28.6325907571873, 36.8667025270097], [28.6398868110236, 36.8688913431606], [28.6460240798389, 36.8913803561619], [28.6576119300494, 36.9056291201245], [28.6788563221022, 36.9101784242813], [28.6958089177806, 36.9226246337667], [28.7050791979491, 36.935757530672], [28.7159374427761, 36.9415514557773], [28.7292420115364, 36.9470449551364], [28.704092084783, 36.9603495238967], [28.668212667094, 36.9667443004944], [28.6572256683758, 36.9518517670756], [28.6437923457242, 36.9385042803516], [28.62413591833, 36.9232684032229], [28.6092433849112, 36.913225599707], [28.5959388161509, 36.9062728895807], [28.5976555347006, 36.8858868568028], [28.6201445477019, 36.8749427760483], [28.6325907571873, 36.8667025270097] ] + ] + }, + "properties" : { + "feature::id" : 404, + "id" : 140695, + "name" : "Kyceiz Golu", + "pfafstette" : 15, + "lke_type" : "N", + "altitude" : -2, + "objectid" : 89586, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 405, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [23.239519433254, 38.4253542162608], [23.2470729948727, 38.4007622230361], [23.2595192043582, 38.3977150476103], [23.2826090688519, 38.4003759613624], [23.3084886009888, 38.3985734068852], [23.3054414255631, 38.4146676432888], [23.2866433574437, 38.4275001144479], [23.2674590276506, 38.4338519730819], [23.2489184673137, 38.4393454724409], [23.239519433254, 38.4253542162608] ] + ] + }, + "properties" : { + "feature::id" : 405, + "id" : 140463, + "name" : "Iliki Limni", + "pfafstette" : 15, + "lke_type" : "N", + "altitude" : 173, + "objectid" : 89592, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 406, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.3999725325032, 69.219250709577], [32.4343069034975, 69.2103237731185], [32.4792849295001, 69.2022981138986], [32.5185977842886, 69.2141005539279], [32.5134476286394, 69.2349157663432], [32.4967954587072, 69.2355595357993], [32.4810016480498, 69.2293364310566], [32.4756798205457, 69.2397654962461], [32.5129326130745, 69.2471903039736], [32.5505287493133, 69.2510529207105], [32.564262497711, 69.2575764511994], [32.5755928401392, 69.2682630241714], [32.594648416041, 69.2887778108405], [32.6198841787218, 69.3000652353049], [32.6336179271196, 69.3104943004944], [32.6567936275407, 69.3197216626991], [32.6998832631386, 69.3310090871635], [32.7414278520418, 69.3387343206373], [32.7646035524629, 69.3479187648782], [32.7325009155832, 69.3654722120491], [32.6911279985351, 69.3642705090643], [32.6775659219923, 69.3538843618385], [32.6459783006775, 69.3497213193554], [32.6209142098517, 69.3360734068852], [32.6037470243545, 69.3200220884453], [32.5805713239333, 69.3045716214979], [32.5529321552829, 69.295043833547], [32.5268380333272, 69.3045716214979], [32.5149926753342, 69.3021252975646], [32.5247779710676, 69.2923829197949], [32.5268380333272, 69.2750869804065], [32.5007439113715, 69.2629411966673], [32.47997161692, 69.2599369392053], [32.4446072147958, 69.255816814686], [32.407011078557, 69.2516108542392], [32.3901872367698, 69.2438856207654], [32.3779985350668, 69.2322977705548], [32.3999725325032, 69.219250709577] ] + ] + }, + "properties" : { + "feature::id" : 406, + "id" : 282, + "pfafstette" : 13, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 161, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_161", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 407, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.1800494414942, 69.1535003891229], [33.1621955685772, 69.1407537538912], [33.1659723493866, 69.1258612204724], [33.2027101263505, 69.1250028611976], [33.2432246841238, 69.1293804934994], [33.2603918696209, 69.1392087071965], [33.2535249954221, 69.1535003891229], [33.2463147775133, 69.1776202847464], [33.2705205090643, 69.1853026002564], [33.2926661783556, 69.1850450924739], [33.2859709760117, 69.1992938564365], [33.2633102911555, 69.2055169611793], [33.247859824208, 69.2013539186962], [33.2131821095037, 69.1975342199231], [33.1608221937374, 69.1823841787218], [33.1312946346823, 69.1677491530855], [33.1177325581395, 69.1552600256363], [33.1264878227431, 69.1413116874199], [33.1438266800952, 69.151139901117], [33.1714658487456, 69.1618693920527], [33.2161005310383, 69.1597234938656], [33.2339544039553, 69.1478352179088], [33.2138687969236, 69.1395520509064], [33.1951565647317, 69.146976858634], [33.1800494414942, 69.1535003891229] ] + ] + }, + "properties" : { + "feature::id" : 407, + "id" : 413, + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 282, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_282", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 408, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.0754898370262, 69.0750034334371], [34.0942020692181, 69.0794669016664], [34.1063907709211, 69.0961190715986], [34.1287081120674, 69.1005825398279], [34.1578923274125, 69.1050460080571], [34.1951451199414, 69.1082648553379], [34.2294794909357, 69.1244020097052], [34.2243293352866, 69.1493802646036], [34.2087071964841, 69.1442730269181], [34.1934284013917, 69.1341443874748], [34.1769479033144, 69.146976858634], [34.1602957333822, 69.1344877311848], [34.1448452664347, 69.1171917917964], [34.1254463468229, 69.1238011582128], [34.1075924739059, 69.1139729445157], [34.0930003662333, 69.1047455823109], [34.0770348837209, 69.094059009339], [34.0754898370262, 69.0750034334371] ] + ] + }, + "properties" : { + "feature::id" : 408, + "id" : 311, + "pfafstette" : 73, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 300, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_300", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 409, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.0308322651529, 68.6364676799121], [36.0158968137704, 68.6239785524629], [36.0215619849844, 68.6144936824757], [36.0402742171763, 68.6189142327413], [36.0668833546969, 68.6189142327413], [36.0957242263322, 68.6097297885003], [36.1159815052188, 68.6189142327413], [36.1431056583043, 68.6272832356711], [36.1588994689617, 68.6150516160044], [36.1657663431606, 68.6040646172862], [36.1837918879326, 68.6135924052371], [36.2076542757737, 68.6222189159495], [36.2337483977293, 68.6272832356711], [36.2507439113715, 68.6338067661601], [36.2656793627541, 68.6435491439297], [36.2816448452664, 68.6534631935543], [36.2974386559238, 68.6632055713239], [36.3223310748947, 68.6727333592749], [36.3422450100714, 68.6780981047427], [36.3599272111335, 68.6923897866691], [36.3592405237136, 68.7170676158213], [36.3333180736129, 68.7208873145944], [36.3044772019776, 68.7105011673686], [36.2788980955869, 68.6974541063908], [36.2625892693646, 68.6816602957334], [36.2442203808826, 68.688226744186], [36.2277398828053, 68.6857804202527], [36.2318600073246, 68.6730337850211], [36.2382118659586, 68.6584416773485], [36.2165812122322, 68.6495576588537], [36.1913454495513, 68.6397294451566], [36.1740065921992, 68.629643723677], [36.1716031862296, 68.6474546786303], [36.1537493133126, 68.6611455090643], [36.1219900201428, 68.6513602133309], [36.0941791796374, 68.6471542528841], [36.0730635414759, 68.6424761948361], [36.0570980589635, 68.6385706601355], [36.0308322651529, 68.6364676799121] ] + ] + }, + "properties" : { + "feature::id" : 409, + "id" : 497, + "pfafstette" : 557, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 479, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_479", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 410, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.029973905878, 68.7062952069218], [36.0500595129097, 68.6986128914118], [36.0828488372093, 68.6905443142282], [36.1180415674785, 68.6997716764329], [36.1317753158762, 68.7108015931148], [36.145337392419, 68.7221319355429], [36.1419039553195, 68.7470672724776], [36.1219900201428, 68.761358954404], [36.1077412561802, 68.7550929316975], [36.0955525544772, 68.7506294634682], [36.0813037905145, 68.7464664209852], [36.0562396996887, 68.7369386330342], [36.0311756088628, 68.7274108450833], [36.018128547885, 68.721788591833], [36.0107466581212, 68.7155654870903], [36.029973905878, 68.7062952069218] ] + ] + }, + "properties" : { + "feature::id" : 410, + "id" : 509, + "pfafstette" : 971, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 489, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_489", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 411, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.4034059696026, 69.121097326497], [32.4355086064823, 69.1098099020326], [32.4701863211866, 69.1198956235122], [32.4959370994323, 69.1359898599158], [32.5316448452664, 69.1484360694012], [32.5529321552829, 69.1647878135872], [32.5441768906794, 69.1754743865592], [32.5242629555026, 69.1734143242996], [32.5000572239517, 69.1692512818165], [32.467611243362, 69.1660324345358], [32.449757370445, 69.1490369208936], [32.4320751693829, 69.1320843252152], [32.4092428126717, 69.1291659036807], [32.4034059696026, 69.121097326497] ] + ] + }, + "properties" : { + "feature::id" : 411, + "id" : 735, + "pfafstette" : 31, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 513, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_513", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 412, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.0674441494232, 69.178178218275], [32.0811778978209, 69.1630281770738], [32.0942249587988, 69.1588651345907], [32.1314777513276, 69.1630281770738], [32.1683872001465, 69.1668907938107], [32.1704472624061, 69.1880064319722], [32.1519067020692, 69.2019547701886], [32.1431514374657, 69.2188644479033], [32.1177440029299, 69.2331561298297], [32.0737960080571, 69.2165468778612], [32.0911348654093, 69.20105349295], [32.1258125801135, 69.1897660684856], [32.1101904413111, 69.1811395577733], [32.0901048342794, 69.1874055804798], [32.0720792895074, 69.1927703259476], [32.0571438381249, 69.1874055804798], [32.0674441494232, 69.178178218275] ] + ] + }, + "properties" : { + "feature::id" : 412, + "id" : 709, + "pfafstette" : 141, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 535, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_535", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 413, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.2245238967222, 69.1250028611976], [32.2626350485259, 69.1383074299579], [32.3012612158945, 69.1525991118843], [32.3180850576817, 69.158822216627], [32.3450375389123, 69.1692512818165], [32.3728483794177, 69.1680924967955], [32.3961957516938, 69.1612685405603], [32.4109595312214, 69.1713113440762], [32.4004875480681, 69.1906673457242], [32.3785135506318, 69.1924699002014], [32.3639214429592, 69.1808391320271], [32.334737227614, 69.1784786440212], [32.3077847463834, 69.1819979170482], [32.2758537813587, 69.1832425379967], [32.238085973265, 69.1725559650247], [32.2111334920344, 69.1567621543673], [32.1870994323384, 69.1460755813954], [32.171648965391, 69.1335435359824], [32.1486449368248, 69.1306251144479], [32.1338811572972, 69.1267195797473], [32.1213491118843, 69.121097326497], [32.1091604101813, 69.1092090505402], [32.116885643655, 69.0949602865776], [32.135254532137, 69.099724180553], [32.1599752792529, 69.1005825398279], [32.1819492766893, 69.10290010987], [32.1973997436367, 69.1115695385461], [32.2119918513093, 69.119251854056], [32.2245238967222, 69.1250028611976] ] + ] + }, + "properties" : { + "feature::id" : 413, + "id" : 728, + "pfafstette" : 91, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 553, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_553", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 414, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.939743178905, 69.426415720564], [29.9148507599341, 69.4139265931148], [29.9220609778429, 69.4002786806446], [29.9500434902033, 69.4092056171031], [29.9867812671672, 69.4205359595312], [30.0212873100165, 69.424913591833], [30.0386261673686, 69.4347418055301], [30.0762223036074, 69.4392052737594], [30.1141617835561, 69.4627243178905], [30.1100416590368, 69.4891617835561], [30.0834325215162, 69.4779172770555], [30.0437763230178, 69.4680890633584], [30.0166521699322, 69.4576599981688], [29.9883263138619, 69.441608679729], [29.9625755356162, 69.4323813175243], [29.939743178905, 69.426415720564] ] + ] + }, + "properties" : { + "feature::id" : 414, + "id" : 635, + "pfafstette" : 1931, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 586, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_586", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 415, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.0148553378502, 68.4905036852225], [36.9830960446805, 68.4830359595312], [36.9575169382897, 68.4732935817616], [36.9231825672954, 68.4702034883721], [36.9049853506684, 68.4607615363487], [36.8929683208204, 68.4562980681194], [36.8758011353232, 68.4455685771837], [36.877174510163, 68.4304185359824], [36.8974317890496, 68.4381866874199], [36.9159723493865, 68.4426501556492], [36.9468732832814, 68.4354828557041], [36.9722807178172, 68.4405471754257], [37.0023232924373, 68.4432510071415], [37.0418078190807, 68.4503324711591], [37.0713353781359, 68.4580577046329], [37.0972578282366, 68.4628215986083], [37.1091031862296, 68.479731276323], [37.0915926570225, 68.4996881294635], [37.0558849111884, 68.4988297701886], [37.0148553378502, 68.4905036852225] ] + ] + }, + "properties" : { + "feature::id" : 415, + "id" : 861, + "pfafstette" : 245, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 669, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_669", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 416, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.538294268449, 68.5196020646402], [36.5509979857169, 68.5190441311115], [36.5757187328328, 68.5285719190625], [36.6042162607581, 68.5389580662882], [36.6222418055301, 68.5449236632485], [36.6273919611793, 68.5327349615455], [36.6337438198132, 68.5196020646402], [36.6509110053104, 68.5281856573888], [36.6907388756638, 68.5377134453397], [36.7430987914301, 68.5445803195385], [36.7916819263871, 68.5517476194836], [36.8188060794726, 68.5573698727339], [36.7693645852408, 68.5689577229445], [36.7190647317341, 68.5629921259843], [36.701382530672, 68.5520051272661], [36.6879921259842, 68.5639792391503], [36.6663614722578, 68.5784855108954], [36.6387223036074, 68.5743653863761], [36.6253318989196, 68.5689577229445], [36.6042162607581, 68.5657388756638], [36.5843023255814, 68.5517476194836], [36.5537447353964, 68.534494598059], [36.538294268449, 68.5196020646402] ] + ] + }, + "properties" : { + "feature::id" : 416, + "id" : 807, + "pfafstette" : 5133, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 733, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_733", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 417, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.5668261307453, 68.8347915903681], [33.5846800036623, 68.8448343938839], [33.6066540010987, 68.8446198040652], [33.6365249038638, 68.8297272706464], [33.6552371360557, 68.8407142693646], [33.6700009155832, 68.8505424830617], [33.6847646951108, 68.8605852865776], [33.6928332722945, 68.8862502288958], [33.6821896172862, 68.9004989928585], [33.6741210401025, 68.9111855658304], [33.6675975096136, 68.9233313495697], [33.6480269181469, 68.909082585607], [33.6294863578099, 68.8978380791064], [33.6085423915034, 68.9028594808643], [33.5960103460905, 68.8891686504303], [33.5800448635781, 68.8746194607215], [33.5589292254166, 68.8553063770372], [33.5668261307453, 68.8347915903681] ] + ] + }, + "properties" : { + "feature::id" : 417, + "id" : 1190, + "pfafstette" : 255, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 911, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_911", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 418, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.7338514008423, 68.6944498489288], [34.7163408716352, 68.6846216352316], [34.7204609961545, 68.6768964017579], [34.7374565097967, 68.6805015107123], [34.7674990844168, 68.6857804202527], [34.7968549716169, 68.696252403406], [34.8236357809925, 68.7045784883721], [34.844408075444, 68.711445362571], [34.8406312946347, 68.7289558917781], [34.8358244826955, 68.7456080617103], [34.8250091558322, 68.7535908029665], [34.8076702984801, 68.7497711041934], [34.7826062076543, 68.7453076359641], [34.7534219923091, 68.7289558917781], [34.7456967588354, 68.7048359961545], [34.7338514008423, 68.6944498489288] ] + ] + }, + "properties" : { + "feature::id" : 418, + "id" : 1246, + "pfafstette" : 265, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 930, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_930", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 419, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.2317112250503, 68.7711442501373], [34.2220976011719, 68.7663803561619], [34.2425265519136, 68.7547495879875], [34.2756592199231, 68.7515307407068], [34.2923113898553, 68.7628181651712], [34.3163454495513, 68.7726034609046], [34.3412378685222, 68.7773673548801], [34.336602728438, 68.7880968458158], [34.330765885369, 68.8121309055118], [34.3252723860099, 68.8332465436733], [34.3024400292987, 68.8305856299213], [34.2859595312214, 68.8198990569493], [34.2708524079839, 68.8157360144662], [34.2566036440212, 68.811272546237], [34.2426982237685, 68.8050494414942], [34.2301661783556, 68.7996846960264], [34.239951474089, 68.7905431697491], [34.2454449734481, 68.7774102728438], [34.2317112250503, 68.7711442501373] ] + ] + }, + "properties" : { + "feature::id" : 419, + "id" : 1210, + "pfafstette" : 71, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 945, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_945", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 420, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.7257484892877, 68.1554002243179], [37.736048800586, 68.1477179088079], [37.7499542208387, 68.1429540148324], [37.7684947811756, 68.1599066105109], [37.8031724958799, 68.1663872230361], [37.8428286943783, 68.1747562259659], [37.8400819446988, 68.1934684581578], [37.8342451016297, 68.2116227568211], [37.8342451016297, 68.2294337117744], [37.8213697125069, 68.2380602224867], [37.8050608862846, 68.2490472212049], [37.80214246475, 68.2642401803699], [37.7988806995056, 68.2773301593115], [37.7676364219007, 68.2874158807911], [37.7381088628456, 68.2796906473173], [37.7085813037905, 68.2696049258378], [37.681457150705, 68.2642401803699], [37.6921008057132, 68.25621452115], [37.7005127266068, 68.2437683116645], [37.7066929133858, 68.2327383949826], [37.7123580845999, 68.2216655603369], [37.7006843984618, 68.1866445019227], [37.7046328511262, 68.1562585835927], [37.7257484892877, 68.1554002243179] ] + ] + }, + "properties" : { + "feature::id" : 420, + "id" : 1331, + "pfafstette" : 81, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 1051, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_1051", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 421, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.4102728438015, 68.9396830937557], [32.4334485442227, 68.9367646722212], [32.4540491668193, 68.9435886284563], [32.4665812122322, 68.9492108817067], [32.4873535066838, 68.9539747756821], [32.5060657388757, 68.9682664576085], [32.5028039736312, 68.9804551593115], [32.4926753341879, 68.9962060520051], [32.4665812122322, 69.0090385231643], [32.437396996887, 68.9935451382531], [32.4106161875114, 68.9777942455594], [32.3874404870903, 68.9718286485992], [32.3970541109687, 68.9620433528658], [32.4051226881524, 68.9506700924739], [32.4102728438015, 68.9396830937557] ] + ] + }, + "properties" : { + "feature::id" : 421, + "id" : 1465, + "pfafstette" : 3281, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 1265, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_1265", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 422, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.2953785936642, 68.4059982146127], [36.2788980955869, 68.4036806445706], [36.2797564548617, 68.3825650064091], [36.2953785936642, 68.3786594717085], [36.3096273576268, 68.3852688381249], [36.3364081670024, 68.3935520051273], [36.3679957883171, 68.4010197308185], [36.4013001281816, 68.4045390038454], [36.4253341878777, 68.4156118384911], [36.4382095770005, 68.4208907480315], [36.4531450283831, 68.4310193874748], [36.4697971983153, 68.4417917963743], [36.4828442592932, 68.4470707059147], [36.4603552462919, 68.4553967908808], [36.4229307819081, 68.4539375801135], [36.4059352682659, 68.4432510071415], [36.3913431605933, 68.4364270509064], [36.3654207104926, 68.4283584737228], [36.3398416041018, 68.4215345174876], [36.3259361838491, 68.4099037493133], [36.3110007324666, 68.3974146218641], [36.2953785936642, 68.4059982146127] ] + ] + }, + "properties" : { + "feature::id" : 422, + "id" : 1478, + "pfafstette" : 573, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 1276, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_1276", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 423, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [38.4934650247207, 68.0617532274309], [38.4787012451932, 68.0483628227431], [38.4538088262223, 68.0394358862846], [38.4364699688702, 68.0209811618751], [38.4505470609778, 68.0061744643838], [38.4821346822926, 67.9999513596411], [38.5020486174693, 68.0050156793627], [38.5241942867607, 68.0070757416224], [38.5374130195935, 67.9948870399194], [38.5420481596777, 67.9829987639626], [38.5595586888848, 67.9865609549533], [38.5868545138253, 67.9845008926936], [38.61878547885, 68.0037710584142], [38.6399011170115, 68.0299080983336], [38.6560382713789, 68.0373758240249], [38.6641068485625, 68.0570322514192], [38.64917139718, 68.0676759064274], [38.6062534334371, 68.0724398004029], [38.5549235488006, 68.0665171214063], [38.5144089910273, 68.0659162699139], [38.4934650247207, 68.0617532274309] ] + ] + }, + "properties" : { + "feature::id" : 423, + "id" : 1610, + "pfafstette" : 235, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 1397, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_1397", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 424, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.8605223402307, 68.2226097555393], [36.8804362754074, 68.2389614997253], [36.8979468046145, 68.2609784151254], [36.9200924739059, 68.257716649881], [36.9405214246475, 68.2559140954038], [36.955628547885, 68.268059879143], [36.9563152353049, 68.2865146035525], [36.9389763779527, 68.2996475004578], [36.9077321003479, 68.2966432429958], [36.8812946346823, 68.2942398370262], [36.8627540743453, 68.3085315189526], [36.8277330159311, 68.3231236266252], [36.7971754257462, 68.3141966901666], [36.7870467863029, 68.3005487776964], [36.7789782091192, 68.2883171580297], [36.7944286760666, 68.2687036485992], [36.8280763596411, 68.2425666086797], [36.8605223402307, 68.2226097555393] ] + ] + }, + "properties" : { + "feature::id" : 424, + "id" : 1771, + "pfafstette" : 279, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 1511, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_1511", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 425, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.7115111701154, 68.3085315189526], [36.6907388756638, 68.3043255585058], [36.6752884087163, 68.3005487776964], [36.6620696758835, 68.2951840322285], [36.6464475370811, 68.2841970335103], [36.6222418055301, 68.2805919245559], [36.5990661051089, 68.2648410318623], [36.5717702801685, 68.2508497756821], [36.5509979857169, 68.2467296511628], [36.5542597509613, 68.2276740752609], [36.586877403406, 68.2113223310749], [36.6131431972166, 68.2136828190808], [36.6033579014832, 68.2249702435451], [36.5978644021241, 68.2365580937557], [36.610739791247, 68.2384035661967], [36.641297381432, 68.2312791842153], [36.6675631752426, 68.2344980314961], [36.6632713788683, 68.2472446667277], [36.6574345357993, 68.2639397546237], [36.6716832997619, 68.2788322880425], [36.7070477018861, 68.283252838308], [36.7334851675517, 68.2888750915583], [36.731768449002, 68.3014071369712], [36.7115111701154, 68.3085315189526] ] + ] + }, + "properties" : { + "feature::id" : 425, + "id" : 1938, + "pfafstette" : 295, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 1669, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_1669", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 426, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.4103987364951, 68.266901094122], [36.4038752060062, 68.2808923503021], [36.4212140633583, 68.2918793490203], [36.435291155466, 68.3061710309467], [36.4263642190075, 68.3207631386193], [36.4085103460904, 68.3144541979491], [36.3637039919428, 68.3129949871818], [36.3197559970701, 68.3115357764146], [36.3055072331075, 68.3073298159678], [36.2861083134957, 68.2966432429958], [36.2703145028383, 68.283596182018], [36.2534906610511, 68.2616221845816], [36.2332333821644, 68.2425666086797], [36.2194996337667, 68.2386610739791], [36.2066242446438, 68.2332963285113], [36.1959805896356, 68.2276740752609], [36.1796717634133, 68.213983244827], [36.1740065921992, 68.1928676066655], [36.1745216077641, 68.1598636925472], [36.1782983885735, 68.1408939525728], [36.1968389489104, 68.1512371818348], [36.2124610877129, 68.1610224775682], [36.2251648049808, 68.1663872230361], [36.2370101629738, 68.1708936092291], [36.2488555209668, 68.1756575032045], [36.2629326130745, 68.1818806079473], [36.277868064457, 68.1964297976561], [36.3079106390771, 68.2163866507966], [36.338639901117, 68.2311933482879], [36.3659357260575, 68.2407211362388], [36.3987250503571, 68.244025819447], [36.4169222669841, 68.25587117744], [36.4103987364951, 68.266901094122] ] + ] + }, + "properties" : { + "feature::id" : 426, + "id" : 2122, + "pfafstette" : 715, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 1796, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_1796", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 427, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.5969945980589, 68.0198223768541], [37.6103850027467, 67.9990500824025], [37.6381958432521, 68.0005092931697], [37.6526162790698, 68.0046294176891], [37.6637749496429, 68.0114962918879], [37.6804271195752, 68.0195219511079], [37.7013710858817, 68.0385775270097], [37.6938175242629, 68.0608519501923], [37.6747619483611, 68.0590923136788], [37.6380241713972, 68.0454014832448], [37.5969945980589, 68.0198223768541] ] + ] + }, + "properties" : { + "feature::id" : 427, + "id" : 2444, + "pfafstette" : 931, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 1852, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_1852", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 428, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.3542963742904, 68.2395623512177], [33.3391892510529, 68.2285753524995], [33.3218503937008, 68.1970306491485], [33.3100050357077, 68.1610224775682], [33.3062282548984, 68.1414089681377], [33.3282022523347, 68.1256580754441], [33.3515496246109, 68.1298211179271], [33.374725325032, 68.133683734664], [33.4035661966673, 68.1464732878594], [33.4128364768357, 68.1800780534701], [33.4279436000732, 68.2095197765977], [33.4224501007142, 68.2285324345358], [33.3937809009339, 68.2380602224867], [33.3721502472075, 68.2443262451932], [33.3542963742904, 68.2395623512177] ] + ] + }, + "properties" : { + "feature::id" : 428, + "id" : 5529, + "pfafstette" : 29733, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 2003, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_2003", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 429, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.2509613623878, 68.230334989013], [32.2415194103644, 68.2205067753159], [32.2578282365867, 68.2113223310749], [32.2796305621681, 68.2205067753159], [32.3110465116279, 68.2365580937557], [32.3381706647134, 68.2535536073979], [32.3675265519136, 68.2705062030764], [32.3996291887933, 68.283252838308], [32.4336202160776, 68.2915789232741], [32.4643494781176, 68.2972440944882], [32.4483839956052, 68.3063856207654], [32.4190281084051, 68.3088319446988], [32.4052943600073, 68.3144541979491], [32.3776551913569, 68.322823200879], [32.3496726789965, 68.3169005218824], [32.3318188060795, 68.3014071369712], [32.3146516205823, 68.2749267533419], [32.2899308734664, 68.2564720289324], [32.2658968137704, 68.2452275224318], [32.2509613623878, 68.230334989013] ] + ] + }, + "properties" : { + "feature::id" : 429, + "id" : 5977, + "pfafstette" : 9511, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 2022, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_2022", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 430, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.0890633583593, 68.1512371818348], [33.1058872001465, 68.1550997985717], [33.1288912287127, 68.165228438015], [33.1541269913935, 68.1747562259659], [33.1721525361655, 68.1857432246841], [33.187259659403, 68.2029962461088], [33.1658006775316, 68.2131248855521], [33.139363211866, 68.2036400155649], [33.1055438564366, 68.1993911371544], [33.0595357993042, 68.192266755173], [33.0415102545321, 68.1744558002197], [33.0576474088995, 68.1649280122688], [33.0742995788317, 68.1590053332723], [33.0890633583593, 68.1512371818348] ] + ] + }, + "properties" : { + "feature::id" : 430, + "id" : 5998, + "pfafstette" : 2963, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 2149, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_2149", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 431, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.9261124336202, 67.8971199185131], [35.9379577916132, 67.896476149057], [35.9544382896905, 67.9071627220289], [35.981905786486, 67.9163900842337], [36.0062831898919, 67.9262182979308], [36.0021630653726, 67.9449734480864], [35.9655969602637, 67.9613251922725], [35.9316059329793, 67.9690075077825], [35.9015633583593, 67.9710675700421], [35.8813060794726, 67.9788357214796], [35.8612204724409, 67.9868184627358], [35.836499725325, 67.982440830434], [35.8555553012269, 67.9710675700421], [35.8723791430141, 67.9597801455777], [35.861048800586, 67.9577200833181], [35.8261994140267, 67.966904527559], [35.788088262223, 67.9619260437649], [35.8030237136056, 67.952398255814], [35.8241393517671, 67.9404241439297], [35.8258560703168, 67.9229136147226], [35.8469717084783, 67.9211539782091], [35.8773576268083, 67.9240723997436], [35.8986449368247, 67.9169909357261], [35.915297106757, 67.9288362937191], [35.9319492766892, 67.9434284013917], [35.9298892144296, 67.9193085057682], [35.9261124336202, 67.8971199185131] ] + ] + }, + "properties" : { + "feature::id" : 431, + "id" : 4768, + "pfafstette" : 971, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 2312, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_2312", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 432, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.4419863578099, 67.8111552371361], [36.4749473539645, 67.8120135964109], [36.5156335835927, 67.8269061298297], [36.5465345174876, 67.8366914255631], [36.5618133125801, 67.8474209164988], [36.544474455228, 67.8685365546603], [36.5013848196301, 67.8670773438931], [36.4608702618568, 67.8515839589819], [36.4440464200696, 67.8405969602637], [36.4376945614356, 67.8242452160776], [36.4419863578099, 67.8111552371361] ] + ] + }, + "properties" : { + "feature::id" : 432, + "id" : 4825, + "pfafstette" : 9931, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 2438, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_2438", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 433, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.7544291338583, 67.9288362937191], [36.7724546786303, 67.9202527009705], [36.8176043764878, 67.9288362937191], [36.8515954037722, 67.9431279756455], [36.8500503570774, 67.9547158258561], [36.8521104193371, 67.9651448910456], [36.8824963376671, 67.9687070820363], [36.9116805530123, 67.9787498855521], [36.8934833363853, 67.9936424189709], [36.8598356528108, 67.9907239974364], [36.8390633583593, 67.9865609549533], [36.8244712506867, 67.97643231551], [36.7825833180736, 67.96840665629], [36.7400086980406, 67.9654453167918], [36.7688495696759, 67.9550162516023], [36.7947720197766, 67.9418833546969], [36.7703946163706, 67.9345014649332], [36.7544291338583, 67.9288362937191] ] + ] + }, + "properties" : { + "feature::id" : 433, + "id" : 3586, + "pfafstette" : 833, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 2659, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_2659", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 434, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.4780832265153, 68.098619758286], [32.5028039736312, 68.0941992080205], [32.5295847830068, 68.0932550128182], [32.5580823109321, 68.1027828007691], [32.5776529023988, 68.1182761856803], [32.5996268998352, 68.1251430598791], [32.6116439296832, 68.1307223951657], [32.6044337117744, 68.1425677531588], [32.5690693096502, 68.1520955411097], [32.5488120307636, 68.1702927577367], [32.5414301409998, 68.1854427989379], [32.5228895806629, 68.1732111792712], [32.4967954587072, 68.1636833913203], [32.4748214612708, 68.1607649697858], [32.4852934444241, 68.1509367560886], [32.4913019593481, 68.1378038591833], [32.473963101996, 68.1241559467131], [32.4605726973082, 68.1104651162791], [32.4780832265153, 68.098619758286] ] + ] + }, + "properties" : { + "feature::id" : 434, + "id" : 6535, + "pfafstette" : 9419, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 3292, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_3292", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 435, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.6928332722945, 67.9892647866691], [33.7118888481963, 67.9767327412562], [33.7338628456327, 67.967247871269], [33.75, 67.9630419108222], [33.7637337483977, 67.9594797198315], [33.798239791247, 67.9707671442959], [33.8262223036074, 67.9787498855521], [33.8440761765244, 67.9835137795275], [33.8394410364402, 67.9978054614539], [33.8169520234389, 68.0044148278704], [33.7978964475371, 68.0126979948727], [33.7937763230177, 68.0290497390588], [33.7851927302692, 68.0451010574986], [33.7639054202527, 68.055229696942], [33.75, 68.0524400292987], [33.7429614539462, 68.0510237364951], [33.7153222852957, 68.0466461041934], [33.6918032411646, 68.0362170390038], [33.6682841970335, 68.0260883995605], [33.6456235121773, 68.0228266343161], [33.6399583409632, 68.0052731871452], [33.6504303241165, 67.9910244231826], [33.665022431789, 67.9951874656656], [33.677211133492, 68.0008526368797], [33.6928332722945, 67.9892647866691] ] + ] + }, + "properties" : { + "feature::id" : 435, + "id" : 6410, + "pfafstette" : 8553, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 3340, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_3340", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 436, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.6564502838308, 68.0172043810657], [32.6729307819081, 68.0269896767991], [32.6888962644204, 68.0371183162424], [32.7070934810474, 68.0489636742355], [32.7163637612159, 68.0668604651163], [32.6925013733748, 68.0748432063725], [32.6538752060062, 68.0680192501373], [32.6361930049441, 68.0629978483794], [32.6047770554843, 68.0694784609046], [32.570614356345, 68.0644570591467], [32.576794543124, 68.0516245879876], [32.5991118842703, 68.0448006317524], [32.6154207104926, 68.0484057407068], [32.6324162241348, 68.0463456784472], [32.6466649880974, 68.0290497390588], [32.6564502838308, 68.0172043810657] ] + ] + }, + "properties" : { + "feature::id" : 436, + "id" : 6784, + "pfafstette" : 921, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 3528, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_3528", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 437, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.7802256912653, 67.9826554202527], [32.7973928767625, 67.9746297610328], [32.8284654825124, 67.9731705502655], [32.8615981505219, 67.9713679957883], [32.8883789598975, 67.9702092107673], [32.9017693645852, 67.9996509338949], [32.8993659586156, 68.0288351492401], [32.8803103827138, 68.0249296145395], [32.8600531038271, 68.0299080983336], [32.8574780260026, 68.0810663111152], [32.8569630104376, 68.1280614814137], [32.8296671854972, 68.136344648416], [32.8087232191906, 68.1497779710676], [32.7927577366783, 68.1616233290606], [32.7735304889214, 68.1461728621132], [32.7465780076909, 68.1361300585973], [32.721857260575, 68.1307223951657], [32.7421145394616, 68.1152290102545], [32.7616851309284, 68.1030832265153], [32.7654619117378, 68.0914953763047], [32.7737021607764, 68.0745427806263], [32.764088536898, 68.0614528016847], [32.7414278520418, 68.0540279939571], [32.7222006042849, 68.0382771012635], [32.7182521516206, 68.0219682750412], [32.7311275407435, 68.0120971433803], [32.7506981322102, 67.9998655237136], [32.7709554110969, 67.9886639351767], [32.7802256912653, 67.9826554202527] ] + ] + }, + "properties" : { + "feature::id" : 437, + "id" : 6508, + "pfafstette" : 915, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 3605, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_3605", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 438, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.4563037905146, 68.9177520142831], [30.4829129280352, 68.9069796053836], [30.520337392419, 68.9221725645486], [30.5457448269548, 68.9492108817067], [30.5277192821828, 68.9537601858634], [30.501796832082, 68.9539747756821], [30.4822262406153, 68.960841649881], [30.4552737593847, 68.9542752014283], [30.4411966672771, 68.9364213285113], [30.4563037905146, 68.9177520142831] ] + ] + }, + "properties" : { + "feature::id" : 438, + "id" : 2979, + "pfafstette" : 823, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 3633, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_3633", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 439, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.2981482329244, 68.1646705044864], [34.3105086064823, 68.1581040560337], [34.3341993224684, 68.1563015015565], [34.3616668192639, 68.1669880745285], [34.38501419154, 68.1765158624794], [34.4131683757553, 68.1905071186596], [34.4313655923823, 68.2014941173778], [34.4438976377953, 68.2071592885918], [34.4674166819264, 68.2110219053287], [34.4921374290423, 68.2146270142831], [34.5127380516389, 68.2237685405603], [34.5429522981139, 68.2220518220106], [34.5510208752976, 68.2003353323567], [34.536085423915, 68.1845844396631], [34.5259567844717, 68.1785759247391], [34.5608061710309, 68.1809793307087], [34.6129944149423, 68.1990907114082], [34.6493888481963, 68.2083180736129], [34.675311298297, 68.2146270142831], [34.6887017029848, 68.2467296511628], [34.7043238417872, 68.2722658395898], [34.7159975279253, 68.2802914988097], [34.6971136238784, 68.2889609274858], [34.6725645486175, 68.2865146035525], [34.6490455044863, 68.2826519868156], [34.6320499908442, 68.2909780717817], [34.645097051822, 68.3001625160227], [34.6590024720747, 68.3070293902216], [34.6492171763413, 68.3156988188976], [34.6384018494781, 68.3290463056217], [34.6320499908442, 68.3469430965025], [34.6181445705915, 68.3403337300861], [34.5929088079106, 68.3293467313679], [34.5678447170848, 68.3245828373924], [34.5779733565281, 68.3159134087164], [34.6001190258194, 68.3063856207654], [34.6013207288042, 68.2808923503021], [34.5637245925654, 68.2645406061161], [34.5173731917231, 68.2612359229079], [34.4826954770188, 68.2659998168833], [34.4620948544223, 68.2800339910273], [34.4418375755356, 68.2853558185314], [34.3984045962278, 68.2755276048343], [34.3779756454862, 68.2589183528658], [34.378834004761, 68.2419657571873], [34.3628685222487, 68.2249702435451], [34.3475897271562, 68.2133823933346], [34.3238990111701, 68.2095197765977], [34.2957448269548, 68.2015370353415], [34.282011078557, 68.191107970152], [34.2808093755722, 68.1779750732467], [34.2981482329244, 68.1646705044864] ] + ] + }, + "properties" : { + "feature::id" : 439, + "id" : 3566, + "name" : "Chudozero", + "lge_id" : "ru", + "pfafstette" : 431, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 3784, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 440, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.743613806995, 68.0951004852591], [36.767819538546, 68.0923966535433], [36.7841283647683, 68.0974180553012], [36.798377128731, 68.1015810977843], [36.816231001648, 68.1075466947445], [36.8399217176341, 68.1111088857352], [36.8658441677348, 68.1218383766709], [36.8804362754074, 68.1574602865776], [36.8787195568577, 68.1806789049625], [36.8605223402307, 68.1711511170115], [36.8394067020692, 68.1613658212782], [36.8255012818165, 68.1550997985717], [36.8129692364036, 68.1482758423366], [36.7899652078374, 68.138190120857], [36.7647294451566, 68.1313661646219], [36.7453305255448, 68.1295206921809], [36.7365752609412, 68.1111088857352], [36.743613806995, 68.0951004852591] ] + ] + }, + "properties" : { + "feature::id" : 440, + "id" : 2519, + "pfafstette" : 283, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 3926, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_3926", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 441, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.677348470976, 68.0093933116645], [36.7082494048709, 67.9996509338949], [36.7372619483611, 68.0023118476469], [36.7789782091192, 68.0120971433803], [36.8061023622047, 68.0236849935909], [36.798548800586, 68.0371183162424], [36.786188427028, 68.043040995239], [36.7662744918513, 68.0510237364951], [36.7492789782091, 68.0584914621864], [36.7400086980406, 68.0638562076543], [36.7178630287493, 68.0486632484893], [36.6903955319538, 68.0456589910273], [36.6615546603186, 68.0543284197033], [36.6464475370811, 68.0414959485442], [36.65331441128, 68.0329123557956], [36.6598379417689, 68.0219253570775], [36.677348470976, 68.0093933116645] ] + ] + }, + "properties" : { + "feature::id" : 441, + "id" : 3419, + "pfafstette" : 87, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 4028, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_4028", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 442, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.3743705365318, 68.3819641549167], [34.3560016480498, 68.3626081532686], [34.3654436000732, 68.3478014557773], [34.3901643471891, 68.346857260575], [34.4025247207471, 68.3522220060428], [34.4174601721296, 68.36205021974], [34.4303355612525, 68.3676724729903], [34.4595197765977, 68.3587884544955], [34.4864722578282, 68.3596468137704], [34.4792620399194, 68.3742818394067], [34.4480177623146, 68.3932515793811], [34.4243270463285, 68.3953116416407], [34.4004646584874, 68.3914919428676], [34.3743705365318, 68.3819641549167] ] + ] + }, + "properties" : { + "feature::id" : 442, + "id" : 3448, + "pfafstette" : 485, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 4119, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_4119", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 443, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.9917597509614, 68.9602837163523], [29.9766526277239, 68.9522151391687], [29.9907297198315, 68.9477516709394], [30.0036051089544, 68.9489962918879], [30.0236907159861, 68.9498546511628], [30.0803424281267, 68.963502563633], [30.1266938289691, 68.9855623969969], [30.1442043581762, 68.9944464154917], [30.1781953854605, 69.0045321369713], [30.2257484892877, 69.0138024171397], [30.2518426112434, 69.0250469236404], [30.2444607214796, 69.0449179408533], [30.2140748031496, 69.0401540468779], [30.1747619483611, 69.0304116691082], [30.1469511078557, 69.0188238188976], [30.1174235488006, 68.9997682429958], [30.0772523347372, 68.9843606940121], [30.0458363852774, 68.9739316288226], [30.0199139351767, 68.9682664576085], [29.9917597509614, 68.9602837163523] ] + ] + }, + "properties" : { + "feature::id" : 443, + "id" : 2603, + "pfafstette" : 855, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 4147, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_4147", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 444, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.1086110602454, 66.9593624107306], [35.14088536898, 66.9608216214979], [35.1827733015931, 66.9688901986816], [35.2053481505219, 66.9786325764512], [35.2261204449734, 66.9926238326314], [35.2386524903864, 67.004211682842], [35.2201977659769, 67.0157995330526], [35.1931594488189, 67.0110356390771], [35.1738463651346, 67.0066150888116], [35.1467222120491, 66.9985894295917], [35.1247482146127, 66.9873020051273], [35.1117011536349, 66.9771733656839], [35.1086110602454, 66.9593624107306] ] + ] + }, + "properties" : { + "feature::id" : 444, + "id" : 8885, + "pfafstette" : 95, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 4355, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_4355", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 445, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.6735087438198, 66.9884607901483], [34.6639809558689, 66.9815939159495], [34.6755688060795, 66.9667443004944], [34.6954827412562, 66.9599203442593], [34.7109332082036, 66.9771733656839], [34.7380573612891, 66.9914650476103], [34.760288866508, 66.9985465116279], [34.7753959897455, 67.0095335103461], [34.799172541659, 67.0205205090643], [34.8072411188427, 67.0434816196667], [34.7906747848379, 67.057129532137], [34.7780569034975, 67.0687173823476], [34.7710183574437, 67.0850691265336], [34.7412332906061, 67.0942964887383], [34.7134224501007, 67.0854124702436], [34.7026071232375, 67.0788460217909], [34.6836373832631, 67.0865712552646], [34.6684444240981, 67.0776443188061], [34.6517064182384, 67.0618934261124], [34.6365992950009, 67.0436962094855], [34.6288740615272, 67.0220226377953], [34.6541956601355, 67.0086751510713], [34.6836373832631, 66.9956280900934], [34.6735087438198, 66.9884607901483] ] + ] + }, + "properties" : { + "feature::id" : 445, + "id" : 8856, + "pfafstette" : 431, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 4406, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_4406", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 446, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [38.2896905328694, 66.4182098058964], [38.2671156839407, 66.4196690166636], [38.2507210217909, 66.4191540010987], [38.2563861930049, 66.4467931697491], [38.2549269822377, 66.4717285066838], [38.2443691631569, 66.4785953808826], [38.2364722578282, 66.4874793993774], [38.2272878135872, 66.5038311435635], [38.2128673777696, 66.5249896996887], [38.1948418329976, 66.5270497619484], [38.1767304522981, 66.5065349752793], [38.1689193828969, 66.4877798251236], [38.1749278978209, 66.4720718503937], [38.1788763504852, 66.4565355475188], [38.1817947720198, 66.4414284242813], [38.1865157480315, 66.4297976561069], [38.1853140450467, 66.4027593389489], [38.189434169566, 66.3748197445523], [38.1977602545321, 66.361171832082], [38.22582860282, 66.346322216627], [38.2569870444973, 66.3382536394433], [38.2762142922542, 66.3310434215345], [38.3015358908625, 66.3349489562351], [38.325655786486, 66.3394124244644], [38.3634235945797, 66.3525453213697], [38.3723505310383, 66.3757210217909], [38.353037447354, 66.3855063175243], [38.3501190258194, 66.4018580617103], [38.3342393792346, 66.4194544268449], [38.3066860465116, 66.4167505951291], [38.2896905328694, 66.4182098058964] ] + ] + }, + "properties" : { + "feature::id" : 446, + "id" : 8857, + "pfafstette" : 27, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 4440, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_4440", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 447, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.4545641823842, 67.3381563587255], [32.4682979307819, 67.3253238875664], [32.4825466947446, 67.3208175013734], [32.5137051364219, 67.3253238875664], [32.5437477110419, 67.3309461408167], [32.5622882713789, 67.3461390999817], [32.5550780534701, 67.3580273759385], [32.5446919062443, 67.3666538866508], [32.5357649697858, 67.3725765656473], [32.5117309100897, 67.3797009476287], [32.49533624794, 67.3758812488555], [32.4712163523164, 67.3645509064274], [32.4463239333456, 67.3523622047244], [32.4545641823842, 67.3381563587255] ] + ] + }, + "properties" : { + "feature::id" : 447, + "id" : 8941, + "pfafstette" : 119, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 4481, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_4481", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 448, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.95372871269, 66.3506998489288], [37.9751018586339, 66.3477385094305], [37.9968183482879, 66.3614722578282], [38.0198223768541, 66.381042849295], [38.0417963742904, 66.3858067432705], [38.0589635597876, 66.3953345312214], [38.0732123237502, 66.4003988509431], [38.0699505585058, 66.3786823612891], [38.0693497070134, 66.3614722578282], [38.0958730086065, 66.3652490386376], [38.1187053653177, 66.379540720564], [38.131838262223, 66.3885105749863], [38.1454861746933, 66.3950341054752], [38.1285764969786, 66.4086820179454], [38.0852293535982, 66.4196690166636], [38.0722681285479, 66.4467931697491], [38.0898644936825, 66.4845180598792], [38.0937271104193, 66.5032302920711], [38.0708089177806, 66.5047753387658], [38.0467748580846, 66.4967067615821], [38.0349295000916, 66.4741319126534], [38.0198223768541, 66.4563209577001], [38.001968503937, 66.4431880607947], [37.9870330525545, 66.414604696942], [37.9721834370994, 66.3964933162425], [37.9543295641824, 66.3742188930599], [37.95372871269, 66.3506998489288] ] + ] + }, + "properties" : { + "feature::id" : 448, + "id" : 9014, + "pfafstette" : 93, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 4736, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_4736", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 449, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.6137669382897, 67.2890582082036], [34.5866427852042, 67.2751098699872], [34.5990889946896, 67.2539942318257], [34.62672816334, 67.2509899743637], [34.6567707379601, 67.2619769730819], [34.6799464383812, 67.2721056125252], [34.6921351400842, 67.2754102957334], [34.6987445065006, 67.2875989974364], [34.6689594396631, 67.3029636284563], [34.6386593572606, 67.297684718916], [34.6137669382897, 67.2890582082036] ] + ] + }, + "properties" : { + "feature::id" : 449, + "id" : 7789, + "pfafstette" : 2973, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 4850, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_4850", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 450, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.0653955319539, 67.6740752609412], [31.0417048159678, 67.6931308368431], [31.0314045046695, 67.699654367332], [31.034322926204, 67.7154052600256], [31.0090871635232, 67.7284523210035], [30.9697743087347, 67.7370788317158], [30.955353872917, 67.7302119575169], [30.9766411829335, 67.6990535158396], [31.0010185863395, 67.6743756866874], [31.0248809741806, 67.6624874107306], [31.0578419703351, 67.6484961545505], [31.0808459989013, 67.6452773072697], [31.0805026551914, 67.6556634544955], [31.0653955319539, 67.6740752609412] ] + ] + }, + "properties" : { + "feature::id" : 450, + "id" : 7992, + "pfafstette" : 27211, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 4876, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_4876", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 451, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.5131157297198, 67.633045687603], [31.5737158945248, 67.6250200283831], [31.590539736312, 67.62853930141], [31.554316974913, 67.6321444103644], [31.5405832265153, 67.6399125618019], [31.5570637245926, 67.6562643059879], [31.5112273393151, 67.669611792712], [31.4628158762131, 67.6746761124336], [31.4269364585241, 67.6815429866325], [31.3896836659952, 67.6823584279436], [31.4116576634316, 67.6740752609412], [31.4348333638528, 67.6684530076909], [31.4595541109687, 67.6591827275224], [31.4815281084051, 67.6469940258194], [31.5131157297198, 67.633045687603] ] + ] + }, + "properties" : { + "feature::id" : 451, + "id" : 7971, + "lge_id" : "ru", + "pfafstette" : 255, + "lke_type" : "N", + "altitude" : 127, + "objectid" : 4898, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_4898", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 452, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.0883652261491, 67.3663534609046], [34.1186653085515, 67.347598310749], [34.1582356711225, 67.338070522798], [34.1884499175975, 67.3315469923091], [34.2233851400842, 67.3555810520051], [34.2201233748398, 67.3824047793445], [34.2040720563999, 67.3764821003479], [34.1946301043765, 67.3731774171397], [34.1772912470243, 67.3806022248673], [34.1576348196301, 67.3714177806263], [34.1445019227248, 67.3609887154368], [34.1305965024721, 67.3797867835561], [34.1145451840322, 67.3919325672954], [34.1014122871269, 67.3912887978392], [34.1109400750778, 67.400516160044], [34.1264763779527, 67.4272540514558], [34.1453602819996, 67.4537344350852], [34.1638150064091, 67.4632622230361], [34.1899091283648, 67.4739917139718], [34.2207242263322, 67.4936052234023], [34.21840665629, 67.5], [34.2184924922175, 67.5], [34.2143723676982, 67.5115020142831], [34.1829564182384, 67.5054934993591], [34.1642441860465, 67.5], [34.155488921443, 67.4974249221754], [34.1445019227248, 67.4926610282], [34.1299956509797, 67.4810731779894], [34.1091375206006, 67.4769530534701], [34.0972921626076, 67.4715453900385], [34.0801249771104, 67.4632622230361], [34.0637303149606, 67.4472109045962], [34.0547175425746, 67.4382839681377], [34.0351469511078, 67.4112456509797], [34.0437305438564, 67.3752374793994], [34.0698246658121, 67.3788425883538], [34.0851034609046, 67.3839069080755], [34.0883652261491, 67.3663534609046] ] + ] + }, + "properties" : { + "feature::id" : 452, + "id" : 7478, + "pfafstette" : 393, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 5072, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_5072", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 453, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.2375480681194, 67.2375995696759], [34.261152948178, 67.2364407846548], [34.2846719923091, 67.2414621864128], [34.3107661142648, 67.2449814594397], [34.3401220014649, 67.2492303378502], [34.3789198406885, 67.2509899743637], [34.4177176799121, 67.2551530168467], [34.4267304522981, 67.2729639718001], [34.418061023622, 67.2863972944516], [34.4138550631752, 67.2967405237136], [34.3992629555026, 67.3181995055851], [34.3577183665995, 67.3351521012635], [34.3294783464567, 67.344079037722], [34.321753112983, 67.3607312076543], [34.3089635597876, 67.3719757141549], [34.2926547335653, 67.3621904184215], [34.2783201336751, 67.3524051226882], [34.2557452847464, 67.3425339910273], [34.2372905603369, 67.3184999313313], [34.2607237685406, 67.2935216764329], [34.2905088353781, 67.2709468275041], [34.269822376854, 67.2628782503205], [34.2406381615089, 67.2527496108771], [34.2375480681194, 67.2375995696759] ] + ] + }, + "properties" : { + "feature::id" : 453, + "id" : 7756, + "pfafstette" : 351, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 5327, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_5327", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 454, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.29419978026, 66.8707368156016], [34.321581441128, 66.8499216031862], [34.3601217725691, 66.8600073246658], [34.3857867148874, 66.8707368156016], [34.4067306811939, 66.8796637520601], [34.4008938381249, 66.8974747070134], [34.3999496429225, 66.9204358176158], [34.3947994872734, 66.9394484755539], [34.379177348471, 66.9358433665995], [34.3618384911188, 66.9248134499176], [34.3276757919795, 66.921251258927], [34.3044142556308, 66.9165302829152], [34.3139420435818, 66.9078608542392], [34.3220106207654, 66.8980755585058], [34.3081052005127, 66.8903932429958], [34.29419978026, 66.8707368156016] ] + ] + }, + "properties" : { + "feature::id" : 454, + "id" : 9487, + "pfafstette" : 25, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 5532, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_5532", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 455, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.4782835103461, 66.4190681651712], [37.4948498443508, 66.4015576359641], [37.4828328145028, 66.39623580846], [37.4780260025636, 66.3846479582494], [37.5051501556491, 66.367695362571], [37.5401712140633, 66.3716008972716], [37.5600851492401, 66.3941757462004], [37.5630035707746, 66.4253771058414], [37.5370811206739, 66.4455485488006], [37.5077252334737, 66.4604410822194], [37.4774251510712, 66.4743894204358], [37.4533910913752, 66.4824150796557], [37.4331338124885, 66.4919428676067], [37.4221468137704, 66.5038311435635], [37.4152799395715, 66.5136593572606], [37.4069538546054, 66.5222858679729], [37.4024903863761, 66.5377363349204], [37.3991427852042, 66.562671671855], [37.384979857169, 66.5822851812855], [37.3558814777513, 66.5752037172679], [37.336396722212, 66.5636158670573], [37.3198303882073, 66.5490237593847], [37.3034357260575, 66.5347749954221], [37.2900453213697, 66.5211270829519], [37.3047232649698, 66.5038311435635], [37.3204312396997, 66.4928012268815], [37.3287573246658, 66.484217634133], [37.3466970335103, 66.4699688701703], [37.3843790056766, 66.4547759110053], [37.4179408533236, 66.4464069080755], [37.4412023896722, 66.439969213514], [37.4592279344442, 66.4345615500824], [37.4782835103461, 66.4190681651712] ] + ] + }, + "properties" : { + "feature::id" : 455, + "id" : 9150, + "pfafstette" : 33, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 5573, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_5573", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 456, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.151969648416, 66.8626682384179], [34.1724844350851, 66.8730543856437], [34.1904241439297, 66.8846422358543], [34.2082780168467, 66.8903074070683], [34.1990077366783, 66.9028394524812], [34.1608965848746, 66.9171311344076], [34.1204678630287, 66.9191911966673], [34.0981505218824, 66.9152856619667], [34.0788374381981, 66.9084617057316], [34.0820133675151, 66.8933116645303], [34.0958329518403, 66.8825821735946], [34.1115409265702, 66.8781616233291], [34.1296523072697, 66.8721960263688], [34.151969648416, 66.8626682384179] ] + ] + }, + "properties" : { + "feature::id" : 456, + "id" : 9584, + "pfafstette" : 13, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 5782, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_5782", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 457, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.6854742721113, 67.3717182063725], [31.6628135872551, 67.3830056308369], [31.6557750412013, 67.3835635643655], [31.6714830159312, 67.3725765656473], [31.6858176158213, 67.3613320591467], [31.7006672312763, 67.3497442089361], [31.717576908991, 67.3402164209852], [31.7336282274309, 67.3297873557957], [31.7566322559971, 67.3160536073979], [31.7839280809376, 67.3139506271745], [31.8254726698407, 67.3111609595312], [31.8943130836843, 67.2943800357078], [31.9345701336752, 67.2943800357078], [31.9470163431606, 67.3015044176891], [31.9616942867607, 67.3104313541476], [31.9333684306904, 67.3257959851676], [31.8633263138619, 67.3386713742904], [31.8222967405237, 67.3354525270097], [31.8076187969237, 67.3288431605933], [31.7737994414942, 67.3309461408167], [31.7197228071782, 67.3493579472624], [31.6854742721113, 67.3717182063725] ] + ] + }, + "properties" : { + "feature::id" : 457, + "id" : 9288, + "pfafstette" : 2255, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 5854, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_5854", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 458, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.1574402581945, 67.4272969694195], [36.1909162699139, 67.4121040102545], [36.2067959164988, 67.4181125251785], [36.2139202984801, 67.4356230543857], [36.2360659677715, 67.4409877998535], [36.2576107855704, 67.4508160135506], [36.2432761856803, 67.4638630745285], [36.2194996337667, 67.4739917139718], [36.1942638710859, 67.4817169474455], [36.1787275682109, 67.4703866050174], [36.1540926570225, 67.4629617972899], [36.1312603003113, 67.4519747985717], [36.1574402581945, 67.4272969694195] ] + ] + }, + "properties" : { + "feature::id" : 458, + "id" : 6970, + "pfafstette" : 481, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 5890, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_5890", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 459, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [39.8610030214246, 66.6586791567479], [39.8776551913569, 66.6622842657023], [39.9104445156565, 66.6664902261491], [39.9448647225783, 66.6560611609595], [39.9605726973082, 66.6554603094671], [39.9787699139352, 66.6596662699139], [39.9914736312031, 66.6697519913935], [39.9558517212965, 66.6860608176158], [39.9113028749313, 66.6953310977843], [39.8767109961545, 66.7056743270463], [39.8443508514924, 66.7033567570042], [39.8452092107673, 66.6792797793444], [39.8610030214246, 66.6586791567479] ] + ] + }, + "properties" : { + "feature::id" : 459, + "id" : 7252, + "pfafstette" : 57, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 5924, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_5924", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 460, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.4283270005493, 67.1885443371178], [37.4618888481963, 67.179316974913], [37.4800002288958, 67.1873855520967], [37.4913305713239, 67.2161835057682], [37.4913305713239, 67.2372991439297], [37.4794852133309, 67.2433076588537], [37.4608588170665, 67.2560542940854], [37.4291853598242, 67.2646378868339], [37.4236060245376, 67.2495307635964], [37.4221468137704, 67.2153251464933], [37.4283270005493, 67.1885443371178] ] + ] + }, + "properties" : { + "feature::id" : 460, + "id" : 6992, + "pfafstette" : 4111, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 5982, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_5982", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 461, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.2000034334371, 67.2319343984618], [37.203351034609, 67.2135225920161], [37.2172564548617, 67.2064411279986], [37.2448956235122, 67.1977716993225], [37.2770840963193, 67.2012909723494], [37.2949379692364, 67.2057973585424], [37.3109034517487, 67.2164839315144], [37.2873844076176, 67.2414621864128], [37.2443806079473, 67.258114356345], [37.2276426020875, 67.2545092473906], [37.2172564548617, 67.2488869941403], [37.2000034334371, 67.2319343984618] ] + ] + }, + "properties" : { + "feature::id" : 461, + "id" : 7074, + "pfafstette" : 41651, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 6253, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_6253", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 462, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.5986712598425, 66.1087283693463], [33.6039930873466, 66.1328053470061], [33.5605601080388, 66.1390284517488], [33.5088010437649, 66.1491570911921], [33.5015049899286, 66.1598007462003], [33.4868270463285, 66.1667105383629], [33.4675139626442, 66.1777404550449], [33.5015049899286, 66.1824614310566], [33.5439937740341, 66.1809163843618], [33.5749805438564, 66.1785988143197], [33.622791155466, 66.1755945568577], [33.64450764512, 66.1860236220473], [33.6542929408533, 66.196409769273], [33.668198361106, 66.202418284197], [33.6491427852042, 66.2109589589819], [33.6081990477935, 66.213619872734], [33.5834783006775, 66.2210875984252], [33.5571266709394, 66.2285124061527], [33.5142087071965, 66.2309158121223], [33.4919772019777, 66.228297816334], [33.4613337758652, 66.2243922816334], [33.4250251785387, 66.2210875984252], [33.40245032961, 66.2157657709211], [33.3639958340963, 66.2187700283831], [33.3343824391137, 66.2148644936825], [33.3037390130013, 66.2113023026918], [33.2407354422267, 66.2107014511994], [33.1850279252884, 66.1955514099982], [33.1511227339315, 66.1868819813221], [33.1279470335104, 66.1773541933712], [33.1348139077092, 66.1637062809009], [33.1533544680462, 66.1682126670939], [33.1750709577001, 66.1720752838308], [33.1922381431972, 66.1527192821828], [33.2121520783739, 66.1366679637429], [33.2343835835928, 66.1417322834646], [33.2531816517121, 66.1452515564915], [33.2659712049075, 66.1398868110236], [33.2898335927486, 66.1316036440212], [33.3269147134225, 66.1298440075078], [33.3459702893243, 66.1247796877861], [33.37206441128, 66.1152518998352], [33.3950684398462, 66.1071833226515], [33.4404756454862, 66.0992005813954], [33.4853678355613, 66.1030202801685], [33.4954964750046, 66.1039644753708], [33.5249381981322, 66.089071941952], [33.5695728804248, 66.0840076222304], [33.5986712598425, 66.1087283693463] ] + ] + }, + "properties" : { + "feature::id" : 462, + "id" : 12015, + "name" : "Loukhskoe ozereo", + "lge_id" : "ru", + "pfafstette" : 31, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 6443, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 463, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.7463319446988, 66.5588519730819], [31.7713960355246, 66.5507833958982], [31.8040995238967, 66.5478649743637], [31.8189491393518, 66.5710406747848], [31.8410948086431, 66.5930146722212], [31.865987227614, 66.5944738829885], [31.8755150155649, 66.6049458661417], [31.8956006225966, 66.6103106116096], [31.9184329793078, 66.6159757828237], [31.9051284105475, 66.6249027192822], [31.878175929317, 66.6212976103278], [31.853798525911, 66.6165337163523], [31.8124256088629, 66.6194950558506], [31.7862456509797, 66.6275207150705], [31.7690784654825, 66.632284609046], [31.7268471891595, 66.6355034563267], [31.6794657571873, 66.6331858862846], [31.6433288317158, 66.6284219923091], [31.6170630379052, 66.6188942043582], [31.6040159769273, 66.6013836751511], [31.6247882713789, 66.5939588674236], [31.6429854880059, 66.588036188427], [31.6586934627358, 66.5764054202527], [31.7110533785021, 66.5671351400842], [31.7463319446988, 66.5588519730819] ] + ] + }, + "properties" : { + "feature::id" : 463, + "id" : 11327, + "pfafstette" : 3435, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 6549, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_6549", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 464, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.9023931056583, 66.5573927623146], [30.8859984435085, 66.5675214017579], [30.8580159311482, 66.5873924189709], [30.8586167826406, 66.6034437374107], [30.8758698040652, 66.6058471433804], [30.9294314228163, 66.6046025224318], [30.9808471433803, 66.60790720564], [31.0060829060612, 66.5971777147043], [31.0320053561619, 66.582027673503], [31.0497733931514, 66.588036188427], [31.0771550540194, 66.5906971021791], [31.1179271195752, 66.6034437374107], [31.1324333913203, 66.6272202893243], [31.1047083867424, 66.6255035707746], [31.0635071415492, 66.6188942043582], [31.0444515656473, 66.624258949826], [31.0248809741806, 66.6304820545688], [30.9978426570225, 66.6281215665629], [30.9594739974364, 66.6272202893243], [30.9128650888116, 66.6251173091009], [30.8926078099249, 66.6239156061161], [30.8672003753891, 66.6331858862846], [30.8319218091925, 66.6385506317524], [30.8056560153818, 66.6480355017396], [30.7634247390588, 66.6599237776964], [30.7296053836294, 66.6545590322285], [30.7331246566563, 66.6462329472624], [30.746858405054, 66.6275207150705], [30.7447983427944, 66.6081647134225], [30.7417082494049, 66.6004823979125], [30.7578454037722, 66.5971777147043], [30.789089681377, 66.5980789919429], [30.8330376762498, 66.5859332082036], [30.8752689525728, 66.5659763550632], [30.9023931056583, 66.5573927623146] ] + ] + }, + "properties" : { + "feature::id" : 464, + "id" : 11667, + "pfafstette" : 253, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 6736, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_6736", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 465, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.8331006225966, 66.3026317295367], [32.8813404138436, 66.2933614493683], [32.9166189800403, 66.2933614493683], [32.9389363211866, 66.3046917917964], [32.9645154275774, 66.3129749587988], [32.9922404321553, 66.3210006180187], [33.0251155923824, 66.3248203167918], [33.0557590184948, 66.3287258514924], [33.1212518311665, 66.3289833592749], [33.187774674968, 66.3305284059696], [33.2028817982055, 66.3364510849661], [33.2161005310383, 66.3465797244095], [33.2332677165354, 66.3623306171031], [33.2502632301776, 66.384047106757], [33.232666865043, 66.4057635964109], [33.2070019227248, 66.4037035341513], [33.1952424006592, 66.3970941677349], [33.1773885277422, 66.3908710629921], [33.1462300860648, 66.3867080205091], [33.1015954037722, 66.3896693600073], [33.0798789141183, 66.3792832127816], [33.0644284471709, 66.3691545733382], [33.0388493407801, 66.3584250824025], [33.0129268906794, 66.3500989974364], [32.9873477842886, 66.341815830434], [32.9686355520967, 66.3252065784655], [32.9489791247024, 66.3254640862479], [32.8882072880425, 66.3364510849661], [32.8342164896539, 66.3334897454679], [32.8179076634316, 66.3156787905146], [32.8331006225966, 66.3026317295367] ] + ] + }, + "properties" : { + "feature::id" : 465, + "id" : 11383, + "pfafstette" : 15, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 6737, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_6737", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 466, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.9567901941037, 66.4446901895257], [32.9694939113716, 66.4428876350485], [32.9953305255448, 66.4488532320088], [33.0272614905695, 66.4407846548251], [33.0421111060245, 66.4401838033327], [33.066574345358, 66.4512566379784], [33.0870891320271, 66.4601406564732], [33.1108656839407, 66.4625440624428], [33.1355005951291, 66.473531061161], [33.0698361106025, 66.4922432933529], [33.0010815326863, 66.4979513825307], [32.9773049807728, 66.4979513825307], [32.9371337667094, 66.4931874885552], [32.936532915217, 66.4800975096136], [32.9497516480498, 66.4625440624428], [32.9567901941037, 66.4446901895257] ] + ] + }, + "properties" : { + "feature::id" : 466, + "id" : 11204, + "pfafstette" : 3, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 7173, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_7173", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 467, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.0780992492218, 66.7098373695294], [31.1074551364219, 66.7232706921809], [31.0439365500824, 66.7280345861564], [30.9719202069218, 66.7134424784838], [30.9667700512727, 66.70606058872], [30.9511479124703, 66.6988503708112], [30.9216203534151, 66.6911680553012], [30.8877151620582, 66.6846445248123], [30.8617927119575, 66.6765759476286], [30.8484881431972, 66.6676060932064], [30.8804191082219, 66.6673485854239], [30.9192169474455, 66.6787218458158], [30.9441952023439, 66.6813398416041], [30.9653108405054, 66.6891079930416], [30.976898690716, 66.7027559055118], [31.022477568211, 66.7075197994873], [31.0780992492218, 66.7098373695294] ] + ] + }, + "properties" : { + "feature::id" : 467, + "id" : 11231, + "pfafstette" : 2611, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 7264, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_7264", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 468, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.7781026826589, 66.3852058917781], [30.8024800860648, 66.3867080205091], [30.8098619758286, 66.3902702114997], [30.8241107397913, 66.3973945934811], [30.8290892235854, 66.4185102316426], [30.8029951016297, 66.4387245925655], [30.7896905328694, 66.4536171259843], [30.8191322559971, 66.4622436366966], [30.8672003753891, 66.4732306354148], [30.8955262314594, 66.4800545916499], [30.9207619941403, 66.4776511856803], [30.9478003112983, 66.4848614035891], [30.9582722944516, 66.4987668238418], [30.9930358450833, 66.5133160135506], [31.0387863944333, 66.5377363349204], [31.0253959897455, 66.5564485671123], [30.9984435085149, 66.5567489928585], [30.9684009338949, 66.5546889305988], [30.9294314228163, 66.5546889305988], [30.9008480589636, 66.5546889305988], [30.8744105932979, 66.542800654642], [30.8801616004395, 66.5243459302326], [30.8642819538546, 66.515762337484], [30.8120078740158, 66.5026723585424], [30.7911497436367, 66.4818142281634], [30.7807635964109, 66.4637457654276], [30.75587117744, 66.4565355475188], [30.7206784471709, 66.4550763367515], [30.6879749587988, 66.4455485488006], [30.6838548342794, 66.4354199093573], [30.6716661325765, 66.4164501693829], [30.6797347097601, 66.4006563587255], [30.7084897454679, 66.394733679729], [30.7344121955686, 66.3932744689617], [30.7587895989746, 66.3914719144845], [30.7781026826589, 66.3852058917781] ] + ] + }, + "properties" : { + "feature::id" : 468, + "id" : 12082, + "name" : "Susijarvi and Rugozero and Siikajarvi", + "pfafstette" : 239, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 7503, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 469, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.2292219831533, 65.9930644570592], [34.2117114539462, 66.0055106665446], [34.1728277787951, 66.0102745605201], [34.1455319538546, 66.0037939479949], [34.1287939479949, 65.992764031313], [34.091541155466, 65.9784723493866], [34.0517991210401, 65.965382370445], [34.0446747390588, 65.9582579884637], [34.0651895257279, 65.9487302005127], [34.0999530763596, 65.9567987776964], [34.1348024629189, 65.9650819446988], [34.1561756088628, 65.9689874793994], [34.1774629188793, 65.9665411554661], [34.2013253067204, 65.9707900338766], [34.2180633125801, 65.9817770325948], [34.2292219831533, 65.9930644570592] ] + ] + }, + "properties" : { + "feature::id" : 469, + "id" : 12556, + "pfafstette" : 73, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 7541, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_7541", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 470, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.9534654825124, 66.4404842290789], [30.9683150979674, 66.4301409998169], [30.9897740798389, 66.4235745513642], [31.0227350759934, 66.4348619758286], [31.0568977751328, 66.4446901895257], [31.0910604742721, 66.4473940212415], [31.1103735579564, 66.4631449139352], [31.1020474729903, 66.4771361701154], [31.0858244826955, 66.4744323383996], [31.0539793535983, 66.4714280809376], [31.0132072880425, 66.4788958066288], [30.9963834462553, 66.4728872917048], [30.9775853781359, 66.4622436366966], [30.9526071232375, 66.4536171259843], [30.9534654825124, 66.4404842290789] ] + ] + }, + "properties" : { + "feature::id" : 470, + "id" : 12401, + "pfafstette" : 242255, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 7542, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_7542", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 471, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.861844213514, 66.0120771149973], [33.8748912744918, 66.0108754120125], [33.9045905054019, 66.0150384544955], [33.9343755722395, 66.0058540102545], [33.9489676799121, 66.0052531587621], [33.9790102545321, 66.0094162012452], [34.0045035249954, 66.0150813724593], [34.0238166086797, 66.0251670939389], [34.0348036073979, 66.0388150064091], [34.019095632668, 66.0534071140817], [33.9780660593298, 66.0572697308185], [33.955491210401, 66.0676129600806], [33.9861346365135, 66.0750806857719], [34.0107695477019, 66.0786857947262], [33.9801261215894, 66.0893723676982], [33.9421866416407, 66.0866685359824], [33.9326588536898, 66.0858101767076], [33.9028737868522, 66.0953379646585], [33.8794405786486, 66.0866685359824], [33.8847624061527, 66.0640936870537], [33.88622161692, 66.047184009339], [33.8737754074345, 66.0403600531038], [33.8615867057315, 66.0302314136605], [33.861844213514, 66.0120771149973] ] + ] + }, + "properties" : { + "feature::id" : 471, + "id" : 12363, + "pfafstette" : 53, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 7719, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_7719", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 472, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.6262474821461, 66.9709502609412], [31.6580926112434, 66.9620233244827], [31.672341375206, 66.9616799807728], [31.7060748947079, 66.9655855154734], [31.7277055484344, 66.9724094717085], [31.7190361197583, 66.9867011536349], [31.6968046145395, 66.9929242583776], [31.6810108038821, 66.9982890038455], [31.660496017213, 67.0045121085882], [31.6352602545321, 67.0006924098151], [31.6132862570958, 66.9964864493683], [31.5858187603003, 66.9929242583776], [31.5688232466581, 66.9807355566746], [31.5805827687237, 66.973654092657], [31.6262474821461, 66.9709502609412] ] + ] + }, + "properties" : { + "feature::id" : 472, + "id" : 10074, + "pfafstette" : 23273, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 7722, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_7722", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 473, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.7473619758286, 66.099758514924], [31.723928767625, 66.0928916407252], [31.7312248214613, 66.0866685359824], [31.7551730452298, 66.0846084737228], [31.7651300128182, 66.0709176432888], [31.7413534609046, 66.0664541750595], [31.7220403772203, 66.0667975187695], [31.7425551638894, 66.0596302188244], [31.7717393792346, 66.0519049853507], [31.7832413935177, 66.0534071140817], [31.8139706555576, 66.0593297930782], [31.8653863761216, 66.0608748397729], [31.8877037172679, 66.0715184947812], [31.8564594396631, 66.0744798342795], [31.8249576542758, 66.0744798342795], [31.7961167826406, 66.089071941952], [31.7473619758286, 66.099758514924] ] + ] + }, + "properties" : { + "feature::id" : 473, + "id" : 13929, + "pfafstette" : 91, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 8844, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_8844", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 474, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.4419463010438, 65.9511765244461], [32.4804866324849, 65.94250709577], [32.4958512635049, 65.9428075215162], [32.519026963926, 65.9466701382531], [32.5610865683941, 65.9439663065373], [32.5920733382165, 65.9550391411829], [32.6086396722212, 65.9710904596228], [32.5864081670024, 65.9787727751328], [32.5483828511262, 65.9754680919246], [32.5343057590185, 65.9763693691632], [32.5221170573155, 65.9754680919246], [32.5053790514558, 65.9597171992309], [32.4860659677715, 65.9576571369713], [32.4448647225783, 65.9636227339315], [32.4114745467863, 65.9588588399561], [32.4419463010438, 65.9511765244461] ] + ] + }, + "properties" : { + "feature::id" : 474, + "id" : 13977, + "pfafstette" : 93, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 8957, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_8957", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 475, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.0097624061527, 66.0088153497528], [32.0249553653177, 66.0129354742721], [32.0493327687237, 66.0168410089727], [32.0713067661601, 66.0218624107306], [32.0952549899286, 66.0201456921809], [32.1201474088995, 66.0287722028933], [32.1184306903498, 66.052849180553], [32.0961133492035, 66.0605744140267], [32.0805770463285, 66.0564113715437], [32.0625515015565, 66.0531066883355], [32.0374874107306, 66.0444801776231], [32.0198910455961, 66.0334502609412], [32.0068439846182, 66.0210040514558], [32.0097624061527, 66.0088153497528] ] + ] + }, + "properties" : { + "feature::id" : 475, + "id" : 13834, + "pfafstette" : 69, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 9034, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_9034", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 476, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.1145051272661, 66.1131489196118], [30.0915869346274, 66.1102304980773], [30.0808574436916, 66.1286852224867], [30.0586259384728, 66.1429339864494], [30.0225748489288, 66.1384276002564], [30.0112445065006, 66.1170115363487], [30.0808574436916, 66.0914324299579], [30.1499553653177, 66.0840505401941], [30.1697834645669, 66.0828917551731], [30.1750194561436, 66.1009602179088], [30.1427451474089, 66.1197582860282], [30.1145051272661, 66.1131489196118] ] + ] + }, + "properties" : { + "feature::id" : 476, + "id" : 15222, + "pfafstette" : 6973, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 9210, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_9210", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 477, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.0871864127449, 66.1140072788867], [32.0981734114631, 66.1197582860282], [32.0842679912104, 66.1239213285113], [32.0276162790698, 66.1220758560703], [31.9839257919795, 66.1185565830434], [31.9672736220473, 66.130144433254], [31.9192055026552, 66.1485562396997], [31.8701073521333, 66.1458953259476], [31.8516526277239, 66.1355091787219], [31.8276185680278, 66.1253805392785], [31.8005802508698, 66.1170544543124], [31.7576622871269, 66.1146510483428], [31.7181777604834, 66.113449345358], [31.8127689525728, 66.093578328145], [31.9319092199231, 66.0792866462187], [31.9958569859, 66.0762823887567], [32.0439251052921, 66.0780849432338], [32.0580021973998, 66.0834496887017], [32.0719934535799, 66.0995010071416], [32.0871864127449, 66.1140072788867] ] + ] + }, + "properties" : { + "feature::id" : 477, + "id" : 13470, + "pfafstette" : 7513, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 9581, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_9581", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 478, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.3525796557407, 65.9868413523164], [33.3198761673686, 65.9844379463468], [33.2983313495697, 65.9802319859], [33.272237227614, 65.9671849249222], [33.2731814228163, 65.9431079472624], [33.2963571232375, 65.9339235030214], [33.3498329060612, 65.9309192455594], [33.3952401117012, 65.9323784563267], [33.4165274217176, 65.930318394067], [33.438501419154, 65.9288591832998], [33.4487158945248, 65.9249965665629], [33.4445957700055, 65.9170138253067], [33.4330937557224, 65.9104044588903], [33.4457974729903, 65.8964132027101], [33.4776426020875, 65.889589246475], [33.490088811573, 65.8845249267534], [33.5118911371544, 65.8764563495697], [33.53832860282, 65.8797610327779], [33.5615043032412, 65.8836665674785], [33.5845083318074, 65.8979582494049], [33.5712895989746, 65.9175288408716], [33.5530065464201, 65.9264557773302], [33.5273416041018, 65.9339235030214], [33.5068268174327, 65.9392882484893], [33.4851103277788, 65.9496314777513], [33.4518059879143, 65.9642235854239], [33.4248535066838, 65.9728500961362], [33.4089738600989, 65.9785152673503], [33.3965276506134, 65.9838370948544], [33.3525796557407, 65.9868413523164] ] + ] + }, + "properties" : { + "feature::id" : 478, + "id" : 13235, + "pfafstette" : 4913, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 9583, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_9583", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 479, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.7356882896905, 66.1494145989746], [31.7258171580297, 66.137826748764], [31.7392933986449, 66.1229342153452], [31.7624690990661, 66.127140175792], [31.7859023072697, 66.1310027925289], [31.8090780076909, 66.1334491164622], [31.8180907800769, 66.14649617744], [31.8281335835928, 66.1512600714155], [31.8407514649332, 66.1628479216261], [31.8208375297565, 66.1773541933712], [31.7914816425563, 66.1732340688519], [31.769335973265, 66.167869323384], [31.7489928584508, 66.1583415354331], [31.7356882896905, 66.1494145989746] ] + ] + }, + "properties" : { + "feature::id" : 479, + "id" : 13410, + "pfafstette" : 483, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 9818, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_9818", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 480, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.6900979674052, 66.0531066883355], [32.6850336476836, 66.0386004165904], [32.7084668558872, 66.0233645394616], [32.7254623695294, 66.0317335423915], [32.7319859000183, 66.0450381111518], [32.7477797106757, 66.05602510987], [32.7617709668559, 66.0652953900385], [32.7725004577916, 66.074222326497], [32.7852041750595, 66.0843509659403], [32.7983370719649, 66.0950375389123], [32.8159334370994, 66.1116897088445], [32.8503536440212, 66.1212174967955], [32.8747310474272, 66.1310027925289], [32.8535295733382, 66.1396722212049], [32.8280363028749, 66.1346079014833], [32.8170493041568, 66.1288998123054], [32.8018563449918, 66.1191574345358], [32.7900109869987, 66.1090287950925], [32.7751613715437, 66.0992434993591], [32.761084279436, 66.0938787538912], [32.7228014557773, 66.1030202801685], [32.6877803973631, 66.0995010071416], [32.7075226606849, 66.0891148599158], [32.7257198773119, 66.0769261582128], [32.7118144570592, 66.0707030534701], [32.700827458341, 66.0649949642923], [32.6900979674052, 66.0531066883355] ] + ] + }, + "properties" : { + "feature::id" : 480, + "id" : 12829, + "pfafstette" : 2311, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 9995, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_9995", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 481, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.9675196850394, 65.3160335790148], [32.9793650430324, 65.3229004532137], [32.9945580021974, 65.3247030076909], [33.0173045229811, 65.3222566837576], [33.0614241897089, 65.3229004532137], [33.0952435451383, 65.3274068394067], [33.081595632668, 65.3350891549167], [33.0580765885369, 65.3449173686138], [33.0447720197766, 65.3580502655191], [33.0394501922725, 65.368093069035], [33.0325833180736, 65.3856465162058], [33.0139569218092, 65.396633514924], [32.9980772752243, 65.4022986861381], [32.9646012635049, 65.4094230681194], [32.9282068302509, 65.4162470243545], [32.9052886376122, 65.4124273255814], [32.8835721479583, 65.4044445843252], [32.861083134957, 65.398135643655], [32.8440017853873, 65.3814834737228], [32.830697216627, 65.3728140450467], [32.8173926478667, 65.3618270463285], [32.8402250045779, 65.3491233290606], [32.8737868522249, 65.3419131111518], [32.912155511811, 65.3342307956418], [32.94872161692, 65.3371492171764], [32.9588502563633, 65.3294669016664], [32.9675196850394, 65.3160335790148] ] + ] + }, + "properties" : { + "feature::id" : 481, + "id" : 17865, + "pfafstette" : 433, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 10328, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_10328", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 482, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.4047678996521, 65.3131151574803], [33.4348104742721, 65.3062912012452], [33.4480292071049, 65.3041882210218], [33.478071781725, 65.3083512635049], [33.5097452389672, 65.3119134544955], [33.5220197765977, 65.3276643471892], [33.4712049075261, 65.3446169428676], [33.4075146493316, 65.3386084279436], [33.3830514099982, 65.3279647729354], [33.3745536531771, 65.3207974729903], [33.4047678996521, 65.3131151574803] ] + ] + }, + "properties" : { + "feature::id" : 482, + "id" : 17792, + "pfafstette" : 593, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 10340, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_10340", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 483, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.472446667277, 64.7413191265336], [37.4931331258011, 64.7359543810657], [37.4860945797473, 64.7324351080388], [37.4743350576817, 64.7247527925289], [37.5356219099066, 64.7122207471159], [37.60583569859, 64.7244523667826], [37.5913294268449, 64.7431645989746], [37.5684112342062, 64.7508469144845], [37.5434329793078, 64.7651385964109], [37.5134762406153, 64.7668982329244], [37.4973390862479, 64.7624776826589], [37.4848928767625, 64.758615065922], [37.463777238601, 64.7550099569676], [37.4497001464933, 64.7502460629921], [37.472446667277, 64.7413191265336] ] + ] + }, + "properties" : { + "feature::id" : 483, + "id" : 16993, + "pfafstette" : 97, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 10792, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_10792", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 484, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.3908624793994, 65.2578368201795], [33.3769570591467, 65.2423005173045], [33.3956692913386, 65.221184879143], [33.4336087712873, 65.2117429271196], [33.4624496429225, 65.2162063953488], [33.4818485625343, 65.2313135185863], [33.5002174510163, 65.2477081807361], [33.5281999633767, 65.2506695202344], [33.5499164530306, 65.253072926204], [33.565710263688, 65.2578368201795], [33.5799590276506, 65.2700255218825], [33.5735213330892, 65.2839309421351], [33.5576416865043, 65.2791670481597], [33.5431354147592, 65.2756477751328], [33.5205605658304, 65.2670212644204], [33.483908624794, 65.2557338399561], [33.4318920527376, 65.2586522614906], [33.3908624793994, 65.2578368201795] ] + ] + }, + "properties" : { + "feature::id" : 484, + "id" : 18194, + "pfafstette" : 911, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 11018, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_11018", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 485, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.9717256454862, 65.1992108817067], [32.9998798297015, 65.1903268632119], [33.0126693828969, 65.1893826680095], [33.0349008881157, 65.2004555026552], [33.0657159860831, 65.2054339864494], [33.0813381248856, 65.2101978804248], [33.0649434627358, 65.2236312030764], [33.0463170664714, 65.2357769868156], [33.027003982787, 65.2432447125069], [33.0112101721297, 65.2598968824391], [33.0261456235122, 65.272943943417], [33.0412527467497, 65.2874931331258], [33.0236563816151, 65.3059049395715], [32.9980772752243, 65.3026860922908], [32.9767041292804, 65.3041882210218], [32.9529275773668, 65.2964629875481], [32.9279493224684, 65.2812700283831], [32.9070911920894, 65.2771069859], [32.9246017212965, 65.2688238188977], [32.9383354696942, 65.2396825215162], [32.9421122505036, 65.2081378181652], [32.9717256454862, 65.1992108817067] ] + ] + }, + "properties" : { + "feature::id" : 485, + "id" : 18669, + "pfafstette" : 417, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 11264, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_11264", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 486, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [38.7382690899103, 64.2992640999817], [38.72496452115, 64.2766892510529], [38.7356081761582, 64.2623975691265], [38.7787836476836, 64.2581916086797], [38.8177531587621, 64.2781484618202], [38.788053927852, 64.3049292711958], [38.7382690899103, 64.2992640999817] ] + ] + }, + "properties" : { + "feature::id" : 486, + "id" : 18883, + "pfafstette" : 93, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 11293, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_11293", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 487, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [57.7949608588171, 58.8569229536715], [57.8023427485809, 58.8557212506867], [57.8205399652078, 58.8682962140634], [57.8696381157297, 58.879540720564], [57.9126419154001, 58.9027164209852], [57.9360751236037, 58.9190681651712], [57.952727293536, 58.9319006363303], [57.9668043856437, 58.9431022248673], [58.0051730452298, 58.9627586522615], [58.0277478941586, 58.9847326496979], [58.0316105108955, 59.0017281633401], [58.0239711133492, 59.0130155878044], [58.012984114631, 58.9961059100897], [58.0038855063175, 58.9704838857352], [57.9597658395898, 58.9565355475188], [57.9061183849112, 58.9414284242813], [57.8860327778795, 58.9173085286578], [57.8669772019777, 58.8937894845266], [57.8195957700055, 58.878038591833], [57.7949608588171, 58.8569229536715] ] + ] + }, + "properties" : { + "feature::id" : 487, + "id" : 16425, + "pfafstette" : 27457399, + "altitude" : 200, + "objectid" : 11345, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_11345", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 488, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.5626659494598, 66.0613898553379], [29.5962277971068, 66.0646945385461], [29.6009487731185, 66.0754669474455], [29.6237811298297, 66.0754669474455], [29.6469568302509, 66.0771407480315], [29.6717634132943, 66.0807458569859], [29.7071278154184, 66.074222326497], [29.7231791338583, 66.0756815372643], [29.6934799029482, 66.0849518174327], [29.6379440578649, 66.0858101767076], [29.5668719099066, 66.0861106024538], [29.5091901666362, 66.0934924922176], [29.498031496063, 66.0911749221754], [29.5156278611976, 66.0795870719648], [29.5358851400842, 66.0700592840139], [29.5626659494598, 66.0613898553379] ] + ] + }, + "properties" : { + "feature::id" : 488, + "id" : 15989, + "name" : "Suininki", + "pfafstette" : 7891, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 11347, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 489, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.0620250412013, 65.5524257233108], [33.0400510437649, 65.5533699185131], [33.0230555301227, 65.5473614035891], [32.9978197674419, 65.5295504486358], [33.0025407434536, 65.5119540835012], [33.0239138893976, 65.5063747482146], [33.0403085515473, 65.5055163889398], [33.0682052279802, 65.5087352362205], [33.0887200146493, 65.4971473860099], [33.1125824024904, 65.4855595357993], [33.13035043948, 65.4796368568028], [33.1438266800952, 65.4775338765794], [33.175585973265, 65.4798514466215], [33.1936973539645, 65.4748729628273], [33.20580021974, 65.4695082173595], [33.2256283189892, 65.4620404916682], [33.2413362937191, 65.4539719144845], [33.2541258469145, 65.4591220701337], [33.2674304156748, 65.4650447491302], [33.2942112250504, 65.4754738143197], [33.3142109961546, 65.5061172404322], [33.2948120765428, 65.5351727018861], [33.2573017762315, 65.5381340413844], [33.2055427119575, 65.5349151941037], [33.1611655374474, 65.5438421305622], [33.1189342611243, 65.5512669382897], [33.0804797656107, 65.5498077275224], [33.0620250412013, 65.5524257233108] ] + ] + }, + "properties" : { + "feature::id" : 489, + "id" : 16438, + "pfafstette" : 223, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 11391, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_11391", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 490, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.0371326222304, 65.5881334691449], [33.0692352591101, 65.5881334691449], [33.0984194744552, 65.5925969373741], [33.1155008240249, 65.5988200421168], [33.1264878227431, 65.6005796786303], [33.1464875938473, 65.6012234480864], [33.1647706464018, 65.6214807269731], [33.1622814045047, 65.6374462094855], [33.1348997436367, 65.6303647454679], [33.0846857260575, 65.6216953167918], [33.0371326222304, 65.6071890450467], [33.0371326222304, 65.5881334691449] ] + ] + }, + "properties" : { + "feature::id" : 490, + "id" : 15945, + "pfafstette" : 231, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 11614, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_11614", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 491, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.8965333730086, 65.540537447354], [32.9270051272661, 65.5337134911189], [32.9362754074346, 65.5277908121223], [32.9597086156382, 65.5373186000733], [32.984772706464, 65.5456446850394], [33.0046866416407, 65.5777473219191], [32.9915537447354, 65.6146138527742], [32.9704381065739, 65.6231545275591], [32.9497516480498, 65.6294205502655], [32.9157606207654, 65.6261587850211], [32.9006534975279, 65.6154722120491], [32.870267579198, 65.6112662516023], [32.8339589818715, 65.6029830845999], [32.8135300311298, 65.5928973631203], [32.8027147042666, 65.5872321919063], [32.8155900933895, 65.5783052554477], [32.8223711316609, 65.5670178309833], [32.8251178813404, 65.5571896172862], [32.8491519410365, 65.5607947262406], [32.8654607672588, 65.5536703442593], [32.8965333730086, 65.540537447354] ] + ] + }, + "properties" : { + "feature::id" : 491, + "id" : 16177, + "pfafstette" : 237, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 11678, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_11678", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 492, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [42.036428767625, 63.1252002838308], [42.0646687877678, 63.0987628181652], [42.0980589635598, 63.0936555804798], [42.1128227430873, 63.1064451336751], [42.099861518037, 63.1218956006226], [42.0820076451199, 63.1334834508332], [42.063467084783, 63.1462300860648], [42.0611495147409, 63.1582041979491], [42.0475016022706, 63.1751138756638], [42.0183173869255, 63.1668307086614], [42.015398965391, 63.1499210309467], [42.036428767625, 63.1252002838308] ] + ] + }, + "properties" : { + "feature::id" : 492, + "id" : 20977, + "pfafstette" : 3757, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 11905, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_11905", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 493, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.7300002288958, 64.7493877037173], [33.743819813221, 64.7434650247208], [33.75, 64.7414478804249], [33.7636479124702, 64.7369414942318], [33.7803000824025, 64.7303321278154], [33.7900853781359, 64.7226498123055], [33.8103426570225, 64.7330359595312], [33.8308574436916, 64.7431645989746], [33.8486254806812, 64.7444092199231], [33.8463079106391, 64.7577567066471], [33.8058791887933, 64.7687437053653], [33.7835618476469, 64.7592159174144], [33.7722315052188, 64.7487868522249], [33.75, 64.7568983473723], [33.7444206647134, 64.7589154916682], [33.7429614539462, 64.7758680873467], [33.7400430324117, 64.7847950238052], [33.7247642373192, 64.7966403817982], [33.701588536898, 64.8148375984252], [33.6696575718733, 64.8231207654276], [33.6597006042849, 64.8326485533785], [33.6762669382897, 64.8386141503388], [33.7048503021425, 64.8368115958616], [33.725965940304, 64.8418759155832], [33.7493991485076, 64.8454810245376], [33.75, 64.8458672862113], [33.7746349111884, 64.8629915537447], [33.75, 64.8811029344442], [33.7475965940304, 64.8828625709577], [33.7094854422267, 64.8784420206922], [33.6860522340231, 64.8748798297015], [33.6673400018312, 64.8704163614723], [33.6578122138803, 64.8534637657938], [33.641160043948, 64.8448372550815], [33.6340356619667, 64.8394725096136], [33.6248512177257, 64.8353523850943], [33.6120616645303, 64.8308889168651], [33.6001304706098, 64.8302880653726], [33.5712895989746, 64.8394725096136], [33.5507748123054, 64.8291292803516], [33.5302600256363, 64.8248804019411], [33.5056251144479, 64.8287430186779], [33.5097452389672, 64.8148375984252], [33.5300025178539, 64.8059106619667], [33.5461396722212, 64.7987004440579], [33.5754097234939, 64.7904172770555], [33.6120616645303, 64.7776706418239], [33.6403875206006, 64.7654390221571], [33.6554946438381, 64.7597738509431], [33.6664816425563, 64.7532503204541], [33.6825329609962, 64.7460830205091], [33.7021893883904, 64.7455680049442], [33.7300002288958, 64.7493877037173] ] + ] + }, + "properties" : { + "feature::id" : 493, + "id" : 20211, + "pfafstette" : 215, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 12323, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_12323", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 494, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.0137108588171, 65.1445333958982], [32.0356848562534, 65.1439325444058], [32.0652124153086, 65.1492972898737], [32.0800620307636, 65.1602842885918], [32.1040102545321, 65.1685674555942], [32.1283876579381, 65.1772368842703], [32.1135380424831, 65.1864213285113], [32.0923365683941, 65.2052193966307], [32.0600622596594, 65.223030351584], [32.0276162790698, 65.2179660318623], [32.0047839223585, 65.2084382439114], [31.9804923548801, 65.1995113074529], [31.9929385643655, 65.1900264374657], [32.0149125618019, 65.1786960950375], [32.0137108588171, 65.157580456876], [32.0137108588171, 65.1445333958982] ] + ] + }, + "properties" : { + "feature::id" : 494, + "id" : 19776, + "pfafstette" : 58373, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 12486, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_12486", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 495, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.3691459897455, 64.5852694103644], [33.3950684398462, 64.5766858176158], [33.426484389306, 64.5870290468779], [33.4414198406885, 64.6013207288042], [33.4714624153086, 64.6040245605201], [33.4946381157297, 64.607543833547], [33.4871703900385, 64.6182733244827], [33.4767842428127, 64.6319641549167], [33.4726641182934, 64.6459554110969], [33.4423640358909, 64.6530797930782], [33.4221067570042, 64.6658264283098], [33.3937809009339, 64.6780580479766], [33.3454552737594, 64.6694315372642], [33.3156702069218, 64.6611483702619], [33.3028806537264, 64.6441528566197], [33.3194469877312, 64.6248397729354], [33.3579014832448, 64.6179728987365], [33.3933517212965, 64.6040245605201], [33.40245032961, 64.5915783510346], [33.3852831441128, 64.5909345815785], [33.3691459897455, 64.5852694103644] ] + ] + }, + "properties" : { + "feature::id" : 495, + "id" : 21834, + "pfafstette" : 291, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 12933, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_12933", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 496, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.4980200512727, 65.559893449002], [30.5140713697125, 65.5616530855155], [30.5136421900751, 65.552726149057], [30.4834279436001, 65.5459021928218], [30.4626556491485, 65.5280912378685], [30.4794794909357, 65.5107952984801], [30.5042002380516, 65.5007524949643], [30.5280626258927, 65.4909242812672], [30.5598219190625, 65.500967084783], [30.5841993224684, 65.5102802829152], [30.5996497894159, 65.5227264924007], [30.5844568302509, 65.5393786623329], [30.5669463010438, 65.552726149057], [30.5664312854789, 65.5714383812489], [30.5517533418788, 65.5815670206922], [30.529350164805, 65.5762451931881], [30.5018826680095, 65.569077893243], [30.4892647866691, 65.5619535112617], [30.4980200512727, 65.559893449002] ] + ] + }, + "properties" : { + "feature::id" : 496, + "id" : 19058, + "name" : "Pistojrvi and Ohtajrvi", + "lge_id" : "fi", + "pfafstette" : 977, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 13171, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 497, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.295510208753, 65.2780082631386], [32.3070980589636, 65.2717851583959], [32.3400590551181, 65.26942467039], [32.3810886284563, 65.2667208386742], [32.4079552737594, 65.2714847326497], [32.4281267167186, 65.2818708798755], [32.4444355429409, 65.2913986678264], [32.4328476927303, 65.3002826863212], [32.41919978026, 65.3071495605201], [32.3928481505219, 65.3133726652628], [32.3633205914668, 65.3184799029482], [32.3246944240982, 65.3261622184582], [32.2766263047061, 65.3139735167552], [32.2804030855155, 65.2895531953855], [32.295510208753, 65.2780082631386] ] + ] + }, + "properties" : { + "feature::id" : 497, + "id" : 19172, + "pfafstette" : 4255, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 13470, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_13470", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 498, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.6080388207288, 65.2574505585058], [32.594648416041, 65.2521287310017], [32.6064937740341, 65.2370216077642], [32.6316437007874, 65.2334164988098], [32.658252838308, 65.2381803927852], [32.6945614356345, 65.2497682429958], [32.7153337300861, 65.2658624793994], [32.6850336476836, 65.2738881386193], [32.6362788408716, 65.2675791979491], [32.6080388207288, 65.2574505585058] ] + ] + }, + "properties" : { + "feature::id" : 498, + "id" : 19182, + "pfafstette" : 42511, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 13509, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_13509", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 499, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.7064296832082, 65.476933025087], [30.7238543764878, 65.463242194653], [30.7441116553745, 65.4614396401758], [30.756386193005, 65.4698086431057], [30.7766434718916, 65.4837569813221], [30.8010208752976, 65.4899800860648], [30.8188747482146, 65.4896796603186], [30.8387886833913, 65.4920830662882], [30.8580159311482, 65.5045721937374], [30.8301192547153, 65.5177050906428], [30.8029951016297, 65.5220827229445], [30.7790468778612, 65.5316105108955], [30.7368156015382, 65.5327692959165], [30.7143265885369, 65.5235848516755], [30.7307212506867, 65.5101944469877], [30.7519227247757, 65.498306171031], [30.7242835561253, 65.4962031908076], [30.7033395898187, 65.4914822147958], [30.7064296832082, 65.476933025087] ] + ] + }, + "properties" : { + "feature::id" : 499, + "id" : 19205, + "lge_id" : "fi", + "pfafstette" : 9815, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 13564, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_13564", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 500, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.7754417689068, 64.6943239562351], [30.7820511353232, 64.6875], [30.7880596502472, 64.6812768952573], [30.8276300128182, 64.6771138527742], [30.8762131477751, 64.681663156931], [30.8857409357261, 64.6875], [30.8945820362571, 64.6928647454679], [30.8762131477751, 64.7101606848563], [30.8503765336019, 64.7107615363487], [30.8265141457609, 64.7101606848563], [30.7870296191174, 64.7158258560703], [30.7679740432155, 64.7077572788867], [30.7754417689068, 64.6943239562351] ] + ] + }, + "properties" : { + "feature::id" : 500, + "id" : 24211, + "pfafstette" : 78935, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 13925, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_13925", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 501, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.2268071323933, 63.8770800906427], [35.2413134041384, 63.8809856253433], [35.2550471525362, 63.8799985121773], [35.2748752517854, 63.8740758331807], [35.2873214612708, 63.881543558872], [35.2692959164988, 63.8951914713422], [35.2603689800403, 63.9305558734664], [35.2945316791796, 63.9520148553378], [35.3192524262955, 63.9574225187694], [35.3078362479399, 63.9663065372642], [35.2976217725691, 63.9727871497894], [35.2734160410181, 64.0058768998352], [35.2276654916682, 64.0367349157663], [35.2053481505219, 64.0390524858084], [35.1821724501007, 64.0355332127815], [35.1593400933895, 64.0322285295733], [35.1477522431789, 64.0280654870903], [35.1354777055484, 64.0242887062809], [35.1154779344442, 64.0242887062809], [35.0945339681377, 64.0254045733382], [35.0674098150522, 64.0164776368797], [35.0367663889397, 64.0129583638528], [35.0275819446988, 64.0060914896539], [35.032217084783, 63.987379257462], [35.0471525361655, 63.9763922587438], [35.0524743636696, 63.9668644707929], [35.074448361106, 63.9549761948361], [35.1086110602454, 63.9564354056034], [35.1238898553378, 63.9490535158396], [35.1429454312397, 63.9363068806079], [35.1509281724959, 63.9272941082219], [35.1553916407251, 63.9121011490569], [35.1753055759018, 63.9038179820546], [35.1908418787768, 63.90858187603], [35.2128158762131, 63.9112427897821], [35.2235453671489, 63.8934318348288], [35.2268071323933, 63.8770800906427] ] + ] + }, + "properties" : { + "feature::id" : 501, + "id" : 24344, + "name" : "Sumozero", + "lge_id" : "ru", + "pfafstette" : 191, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 13943, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 502, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.2087930324116, 64.0123145943966], [34.2355738417872, 64.0019713651346], [34.2687923457242, 64.0111558093756], [34.2944572880425, 64.0212415308552], [34.3226114722578, 64.0468635552097], [34.3607226240615, 64.0709405328694], [34.3953145028383, 64.0723997436367], [34.3864734023073, 64.0810691723128], [34.3841558322651, 64.1149314457059], [34.3853575352499, 64.1470340825856], [34.3808940670207, 64.1729136147226], [34.3632977018861, 64.2020119941403], [34.3547141091375, 64.214243613807], [34.3729113257645, 64.2317541430141], [34.3526540468779, 64.2424407159861], [34.3268174327046, 64.2347584004761], [34.3057017945431, 64.2270760849661], [34.2818394067021, 64.2187070820363], [34.2687923457242, 64.2103380791064], [34.2572044955136, 64.2038574665812], [34.2658739241897, 64.1951880379051], [34.2748008606482, 64.184201039187], [34.2604662607581, 64.1767762314594], [34.2453591375206, 64.1660896584875], [34.255144433254, 64.1526992537997], [34.2632130104376, 64.1396092748581], [34.2503376213148, 64.0944166590368], [34.2329129280351, 64.0381941265336], [34.2170332814503, 64.0183231093206], [34.2087930324116, 64.0123145943966] ] + ] + }, + "properties" : { + "feature::id" : 502, + "id" : 23983, + "name" : "Belomorkanal", + "lge_id" : "ru", + "pfafstette" : 151, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 14152, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 503, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [60.0349352224867, 56.8379761032778], [60.012360373558, 56.8219677028017], [60.0178538729171, 56.8138562076543], [60.0315017853873, 56.8144141411829], [60.0546774858085, 56.8066459897455], [60.0782823658671, 56.7971182017945], [60.102659769273, 56.7980623969969], [60.1237754074346, 56.7817535707746], [60.1430884911189, 56.7534277147043], [60.1743327687237, 56.7510243087347], [60.1908991027285, 56.7703803103827], [60.1799121040103, 56.7813673091009], [60.1618865592383, 56.7974186275408], [60.1490970060429, 56.8164742034426], [60.1136467679912, 56.8375898416041], [60.0690979216261, 56.8391778062626], [60.0349352224867, 56.8379761032778] ] + ] + }, + "properties" : { + "feature::id" : 503, + "id" : 23497, + "pfafstette" : 26991, + "altitude" : 298, + "objectid" : 14465, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_14465", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 504, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.9961030488922, 64.4125246062992], [32.9961030488922, 64.4009367560886], [33.0004806811939, 64.3815807544406], [32.9900086980407, 64.3542420115363], [32.9797083867424, 64.3304654596228], [33.0166178355613, 64.3129549304157], [33.0580765885369, 64.3114098837209], [33.0489779802234, 64.320079312397], [33.0415102545321, 64.3331263733748], [33.0340425288409, 64.3438987822743], [33.0259739516572, 64.3536411600439], [33.0524972532503, 64.3614093114814], [33.093784334371, 64.3584050540194], [33.1071747390588, 64.3483193325398], [33.081595632668, 64.3417958020509], [33.0625400567662, 64.3361306308368], [33.0831406793628, 64.3269032686321], [33.0991061618751, 64.3165171214063], [33.081938976378, 64.303727568211], [33.0914667643289, 64.2888350347921], [33.1167025270097, 64.2852728438015], [33.1411657663432, 64.2975044634682], [33.1637406152719, 64.3081910364402], [33.1455433986449, 64.3251436321187], [33.130178767625, 64.3417958020509], [33.1606505218824, 64.342954587072], [33.2053710401026, 64.3411949505585], [33.2585893151438, 64.3391348882989], [33.302279802234, 64.3513235900018], [33.2713788683391, 64.3857437969236], [33.2226240615272, 64.412224180553], [33.1913797839224, 64.4205502655191], [33.1640839589819, 64.4104645440395], [33.1398782274309, 64.4057006500641], [33.0947285295733, 64.4149280122688], [33.066402673503, 64.4229965894525], [33.0439136605017, 64.4285759247391], [33.0120685314045, 64.4247562259659], [32.9961030488922, 64.4125246062992] ] + ] + }, + "properties" : { + "feature::id" : 504, + "id" : 23944, + "name" : "Berezovoe and Tungudskoe", + "lge_id" : "ru", + "pfafstette" : 2771, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 14506, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 505, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.9752449185131, 64.6572428355612], [32.94872161692, 64.6518780900934], [32.9597086156382, 64.6426507278887], [32.9868327687237, 64.6331658579015], [33.0004806811939, 64.6197754532137], [33.0215963193554, 64.6108485167552], [33.0489779802234, 64.6176724729903], [33.0747287584692, 64.6281015381798], [33.096788591833, 64.6343246429225], [33.0775613440762, 64.6483158991027], [33.048377128731, 64.6622213193554], [33.0207379600806, 64.6685302600256], [33.0004806811939, 64.6620067295367], [32.9752449185131, 64.6572428355612] ] + ] + }, + "properties" : { + "feature::id" : 505, + "id" : 22319, + "pfafstette" : 29633, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 15341, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_15341", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 506, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.9569504211683, 64.5020085607032], [33.9336888848196, 64.4969442409815], [33.91626419154, 64.4862576680095], [33.88622161692, 64.4878027147043], [33.8638184398462, 64.4886610739791], [33.873689571507, 64.4808929225417], [33.9026162790698, 64.4684467130562], [33.9360064548617, 64.4503353323567], [33.9682807635964, 64.4405071186596], [33.9899972532503, 64.4273742217543], [34.0065635872551, 64.4113658212781], [34.0376361930049, 64.4050997985717], [34.0598676982238, 64.4089624153085], [34.0801249771104, 64.4128679500092], [34.1166052462919, 64.4226103277788], [34.1365191814686, 64.4449705868888], [34.1284506042849, 64.4568588628456], [34.1178069492767, 64.4633823933345], [34.1059615912836, 64.4749702435451], [34.0755756729537, 64.4821375434902], [34.0591810108039, 64.4883606482329], [34.0417563175243, 64.4934249679546], [34.0269067020692, 64.507716649881], [34.0256191631569, 64.5249267533419], [34.001241759751, 64.5288322880425], [33.9780660593298, 64.515398965391], [33.9569504211683, 64.5020085607032] ] + ] + }, + "properties" : { + "feature::id" : 506, + "id" : 22136, + "pfafstette" : 14591, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 15427, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_15427", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 507, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.2211648507599, 64.54393941128], [33.2577309558689, 64.5350553927852], [33.2864859915766, 64.5389609274858], [33.3153268632119, 64.5490037310016], [33.3422793444424, 64.5520079884636], [33.3554980772752, 64.5641966901666], [33.3359274858085, 64.5733811344076], [33.3132668009522, 64.5793467313679], [33.2647695019227, 64.587672816334], [33.214812992126, 64.5841106253433], [33.2309501464933, 64.576986243362], [33.2463147775133, 64.5665142602088], [33.2241691082219, 64.5626087255081], [33.202624290423, 64.5573298159678], [33.2211648507599, 64.54393941128] ] + ] + }, + "properties" : { + "feature::id" : 507, + "id" : 22607, + "pfafstette" : 2953, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 15484, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_15484", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 508, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.0910604742721, 64.8790428721846], [31.0944080754441, 64.8564680232558], [31.100588262223, 64.8394725096136], [31.1125194561436, 64.8477985945798], [31.11878547885, 64.8707167872185], [31.1366393517671, 64.8819612937191], [31.1628193096503, 64.8730343572606], [31.1892567753159, 64.8769398919612], [31.1815315418422, 64.8894290194104], [31.1604159036807, 64.9046219785754], [31.1218755722395, 64.9093858725508], [31.0835069126534, 64.893334554111], [31.0910604742721, 64.8790428721846] ] + ] + }, + "properties" : { + "feature::id" : 508, + "id" : 22397, + "pfafstette" : 78173, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 15496, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_15496", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 509, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.6677691814686, 64.4737685405603], [33.6762669382897, 64.4619231825673], [33.6976400842337, 64.4606785616187], [33.7196999175975, 64.4693479902948], [33.731974455228, 64.4731676890679], [33.75, 64.4685325489837], [33.7562660227065, 64.4669445843252], [33.7812442776048, 64.4764294543124], [33.7759224501007, 64.4892619254715], [33.75, 64.5018368888482], [33.7464807269731, 64.5035536073979], [33.7033910913752, 64.5174590276506], [33.6738635323201, 64.5242829838857], [33.653348745651, 64.5261284563267], [33.638155786486, 64.5151414576085], [33.6265679362754, 64.5109784151254], [33.6094007507783, 64.501708134957], [33.6186710309467, 64.4872018632119], [33.6388424739059, 64.491021561985], [33.6551513001282, 64.4907211362388], [33.6677691814686, 64.4737685405603] ] + ] + }, + "properties" : { + "feature::id" : 509, + "id" : 22608, + "pfafstette" : 2655, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 15509, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_15509", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 510, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [38.6465104834279, 62.8730572468412], [38.6774114173228, 62.8694950558506], [38.7109732649698, 62.8789799258377], [38.7243636696576, 62.8888081395349], [38.7353506683757, 62.8965333730086], [38.748998580846, 62.9045590322285], [38.7617022981139, 62.909322926204], [38.7558654550448, 62.9194515656473], [38.7568096502472, 62.9414255630837], [38.7538053927852, 62.9625412012452], [38.7362090276506, 62.9718114814137], [38.7344064731734, 62.98610316334], [38.7175826313862, 62.9982489470793], [38.6889992675334, 62.9917254165903], [38.6696861838491, 62.9759745238967], [38.6664244186046, 62.9643437557224], [38.6835916041018, 62.9569189479949], [38.6899434627358, 62.9417259888299], [38.676553058048, 62.9289793535982], [38.6548365683941, 62.9024560520051], [38.6465104834279, 62.8730572468412] ] + ] + }, + "properties" : { + "feature::id" : 510, + "id" : 27309, + "pfafstette" : 69971, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 15601, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_15601", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 511, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.0046866416407, 63.828625709577], [33.0349008881157, 63.8160936641641], [33.0498363394983, 63.8208575581395], [33.0614241897089, 63.8319303927852], [33.0864024446072, 63.8257072880425], [33.1098356528109, 63.8306857718366], [33.1021962552646, 63.8381534975279], [33.0843423823476, 63.8488400704999], [33.048377128731, 63.8601274949643], [33.0171328511262, 63.8720157709211], [33.0376476377953, 63.8806422816334], [33.0617675334188, 63.8928309833364], [33.0325833180736, 63.9058780443142], [32.9874336202161, 63.8969940258194], [32.9737857077458, 63.8809427073796], [32.9841718549716, 63.8711144936825], [33.0010815326863, 63.8592691356894], [33.0224546786303, 63.8488829884636], [33.0400510437649, 63.8437757507782], [33.0143861014466, 63.8429173915034], [32.97876419154, 63.8520589177806], [32.966575489837, 63.8503421992309], [32.9746440670207, 63.8405139855338], [32.9853735579564, 63.8339904550449], [33.0046866416407, 63.828625709577] ] + ] + }, + "properties" : { + "feature::id" : 511, + "id" : 27882, + "pfafstette" : 24911, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 15746, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_15746", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 512, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.943645852408, 63.7682401345907], [33.9269078465482, 63.7638195843252], [33.9569504211683, 63.7507296053836], [33.9949757370445, 63.7482832814503], [34.0175505859733, 63.7518883904047], [34.0354044588903, 63.7563518586339], [34.0264775224318, 63.76502128731], [34.015919703351, 63.7715448177989], [33.9897397454679, 63.7888407571873], [33.9643323109321, 63.8069092199231], [33.9453625709577, 63.8137331761582], [33.9130024262955, 63.8199991988647], [33.8999553653177, 63.8196987731185], [33.9289679088079, 63.7998277559055], [33.9596113349203, 63.7766091375206], [33.943645852408, 63.7682401345907] ] + ] + }, + "properties" : { + "feature::id" : 512, + "id" : 27503, + "pfafstette" : 2253, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 15834, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_15834", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 513, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.8451290972349, 64.0878931285479], [31.8276185680278, 64.0982792757737], [31.7991210401026, 64.1166910822194], [31.7756878318989, 64.1309827641458], [31.7497653817982, 64.1419697628639], [31.7277055484344, 64.138450489837], [31.7321690166636, 64.1193949139352], [31.7485636788134, 64.1032577595678], [31.7773187145212, 64.0893523393151], [31.8022969694195, 64.085532640542], [31.8240134590734, 64.084373855521], [31.8451290972349, 64.0878931285479] ] + ] + }, + "properties" : { + "feature::id" : 513, + "id" : 27520, + "pfafstette" : 6659, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 15866, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_15866", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 514, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.8134785295733, 64.4663008148691], [29.8328774491851, 64.4482323521333], [29.8356241988647, 64.4324385414759], [29.8461820179454, 64.4175889260209], [29.8629200238052, 64.4271167139718], [29.8831773026918, 64.448790285662], [29.9086705731551, 64.4627815418422], [29.903348745651, 64.4776740752609], [29.8834348104743, 64.4740689663065], [29.8643792345724, 64.4690046465849], [29.8469545412928, 64.4779745010071], [29.8260964109138, 64.491021561985], [29.8047232649698, 64.4853563907709], [29.8134785295733, 64.4663008148691] ] + ] + }, + "properties" : { + "feature::id" : 514, + "id" : 27005, + "name" : "nttijrvi", + "pfafstette" : 49593, + "lke_type" : "N", + "altitude" : 183, + "objectid" : 16029, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 515, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.1478724134774, 64.1556605932979], [32.1638378959898, 64.1470340825856], [32.1876144479033, 64.1322273850943], [32.2378284654825, 64.1181502929866], [32.2503605108955, 64.132441974913], [32.2199745925655, 64.1535576130745], [32.2046099615455, 64.162484549533], [32.1936229628273, 64.1693085057682], [32.1849535341513, 64.1800809146676], [32.1679580205091, 64.1951880379051], [32.1424647500458, 64.1984927211133], [32.1383446255265, 64.1877632301776], [32.137915445889, 64.1690939159495], [32.1478724134774, 64.1556605932979] ] + ] + }, + "properties" : { + "feature::id" : 515, + "id" : 26851, + "pfafstette" : 6621, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 16202, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_16202", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 516, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.721822926204, 63.6237782686321], [35.7346124793994, 63.6166538866508], [35.7663717725691, 63.6160530351584], [35.8019936824757, 63.6389283098333], [35.8019936824757, 63.6618035845083], [35.7797621772569, 63.6681125251785], [35.7495479307819, 63.65918558872], [35.7316082219374, 63.6540783510346], [35.7033682017945, 63.6621040102545], [35.6874885552097, 63.6513745193188], [35.7021664988097, 63.6321043535982], [35.721822926204, 63.6237782686321] ] + ] + }, + "properties" : { + "feature::id" : 516, + "id" : 26572, + "pfafstette" : 95, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 16296, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_16296", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 517, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.8225084691448, 63.4674281267167], [35.827658624794, 63.4727070362571], [35.82165010987, 63.4857970151987], [35.839503982787, 63.4875566517121], [35.8661989562351, 63.4790159769273], [35.8806193920527, 63.4786297152536], [35.8722074711591, 63.4872991439297], [35.8734091741439, 63.5235648232924], [35.8740100256363, 63.5613326313862], [35.8579587071965, 63.5556674601721], [35.8369289049625, 63.5446804614539], [35.7973585423915, 63.5467405237136], [35.7473161966673, 63.535152673503], [35.7514363211866, 63.5161400155649], [35.7922083867423, 63.5063547198315], [35.7952126442043, 63.4923634636513], [35.8015645028383, 63.4816768906793], [35.8115214704267, 63.4751104422267], [35.8225084691448, 63.4674281267167] ] + ] + }, + "properties" : { + "feature::id" : 517, + "id" : 27141, + "pfafstette" : 9955, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 16380, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_16380", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 518, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.4749816883355, 63.8934318348288], [33.4799601721297, 63.8770800906427], [33.502105841421, 63.8711574116462], [33.520303058048, 63.8767796648965], [33.5112044497345, 63.8892687923457], [33.5058826222304, 63.904418833547], [33.5190155191357, 63.9094831532686], [33.526139901117, 63.8987965802966], [33.5451954770189, 63.8895263001282], [33.5677703259476, 63.8909855108954], [33.559701748764, 63.904418833547], [33.5528348745651, 63.9279378776781], [33.5677703259476, 63.9412853644021], [33.5826199414027, 63.9522723631203], [33.5742080205091, 63.9654052600256], [33.5654527559055, 63.9713279390222], [33.5481138985534, 63.9787527467497], [33.5062259659403, 63.97669268449], [33.4613337758652, 63.9727871497894], [33.4316345449551, 63.9609417917964], [33.417643288775, 63.9406845129097], [33.4179866324849, 63.9311567249588], [33.4221067570042, 63.920770577733], [33.4468275041201, 63.90858187603], [33.4749816883355, 63.8934318348288] ] + ] + }, + "properties" : { + "feature::id" : 518, + "id" : 26928, + "pfafstette" : 2415, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 16418, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_16418", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 519, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.2656278611976, 63.5955382484893], [33.2906919520235, 63.5806886330342], [33.3181594488189, 63.5788431605933], [33.3433093755722, 63.5836070545688], [33.3709485442227, 63.5744655282915], [33.4012486266252, 63.5720192043582], [33.4255401941037, 63.5883709485442], [33.4095747115913, 63.6039072514191], [33.3827939022157, 63.6166538866508], [33.332494048709, 63.6306022248672], [33.284425929317, 63.6436922038088], [33.2665720563999, 63.654679202527], [33.2519799487274, 63.6511170115363], [33.2275167093939, 63.6513745193188], [33.1906930965025, 63.6654086934627], [33.178246887017, 63.6826187969236], [33.169405786486, 63.6936057956418], [33.1614230452298, 63.7058374153085], [33.1452858908625, 63.7224895852408], [33.1098356528109, 63.7445065006409], [33.0834840230727, 63.7644204358176], [33.0744712506867, 63.776866645303], [33.0678618842703, 63.7911583272294], [33.0412527467497, 63.7973814319721], [33.0067467039004, 63.8048062396997], [32.9808242537997, 63.8066517121406], [32.9808242537997, 63.7899995422084], [32.9882919794909, 63.7730040285662], [32.9945580021974, 63.7649783693463], [33.0048583134957, 63.7539913706281], [33.015158624794, 63.7430043719099], [33.020995467863, 63.7310731779894], [33.0336991851309, 63.7203436870536], [33.063741759751, 63.7084983290606], [33.0878616553745, 63.6963096273576], [33.0908659128365, 63.680558734664], [33.0935268265885, 63.6540783510346], [33.1140416132577, 63.6401300128182], [33.1223676982238, 63.6281988188976], [33.1294920802051, 63.6175551638894], [33.142367469328, 63.6228769913935], [33.1566162332906, 63.6231774171397], [33.1872596594031, 63.6145509064274], [33.2225382255997, 63.6055810520051], [33.2502632301776, 63.6003021424647], [33.2656278611976, 63.5955382484893] ] + ] + }, + "properties" : { + "feature::id" : 519, + "id" : 28534, + "pfafstette" : 24931, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 16686, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_16686", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 520, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.9864264786669, 64.0468635552097], [30.9456544131112, 64.0581080617103], [30.9213628456327, 64.0614127449185], [30.8926078099249, 64.0628719556858], [30.8744105932979, 64.0730005951291], [30.8574150796557, 64.0848888710859], [30.8342393792346, 64.1042448727339], [30.8062568668742, 64.1140301684673], [30.7920081029116, 64.1021848104743], [30.8149262955503, 64.0899531908075], [30.8369002929866, 64.0777644891046], [30.8532949551364, 64.0682367011536], [30.8930369895624, 64.058494323384], [30.9138092840139, 64.043301364219], [30.8859984435085, 64.0391383217359], [30.8702904687786, 64.0323143655008], [30.9065132301776, 64.0233874290423], [30.9657400201428, 64.0195248123054], [31.0085721479583, 64.0150184261124], [31.0183574436916, 64.0067352591101], [30.9997310474272, 63.999567959165], [30.988744048709, 63.9835166407251], [31.0233359274858, 63.9597400888116], [31.0563827595679, 63.9484526643472], [31.0788717725691, 63.9472509613624], [31.0976698406885, 63.9588817295367], [31.0864253341879, 63.9692249587987], [31.082734389306, 63.9802119575169], [31.110116050174, 63.9905981047427], [31.1393861014466, 64.0064348333638], [31.1262532045413, 64.0216277925288], [31.0932922083867, 64.0260054248306], [31.0572411188427, 64.0311555804798], [31.0286577549899, 64.0275504715254], [31.0192158029665, 64.0319710217909], [30.9864264786669, 64.0468635552097] ] + ] + }, + "properties" : { + "feature::id" : 520, + "id" : 28577, + "name" : "Rovkulskoe", + "lge_id" : "ru", + "pfafstette" : 99757, + "lke_type" : "N", + "altitude" : 183, + "objectid" : 16770, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 521, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.2241462186413, 63.7426610281999], [35.2371932796191, 63.7308585881707], [35.2553904962461, 63.7245496475004], [35.264918284197, 63.73497871269], [35.2846605475188, 63.7385409036806], [35.3066345449551, 63.7445065006409], [35.3019994048709, 63.7572102179088], [35.2976217725691, 63.7664804980773], [35.3546168284197, 63.7715018998352], [35.4092943142282, 63.7634762406153], [35.4316116553745, 63.7521888161509], [35.4548731917231, 63.7385409036806], [35.4849157663431, 63.7296139672221], [35.5153875206006, 63.7331761582128], [35.5393357443692, 63.7356224821461], [35.56422816334, 63.7504291796374], [35.5578763047061, 63.7691843297931], [35.5445717359458, 63.7748065830434], [35.5298079564182, 63.7917591787218], [35.4914392968321, 63.8069092199231], [35.4604525270097, 63.8146344533968], [35.4206246566563, 63.8224026048343], [35.3747882713789, 63.8205571323933], [35.343543993774, 63.8188404138436], [35.3078362479399, 63.8214584096319], [35.2785661966673, 63.8167374336202], [35.262257370445, 63.80274617744], [35.2383091466764, 63.7947634361838], [35.2165926570225, 63.7911583272294], [35.2032880882622, 63.7851498123054], [35.1886959805896, 63.7691843297931], [35.204489791247, 63.7507296053836], [35.2241462186413, 63.7426610281999] ] + ] + }, + "properties" : { + "feature::id" : 521, + "id" : 25811, + "name" : "Piilojarvi and Karasjarvi", + "pfafstette" : 595, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 17389, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 522, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.1889992675334, 64.3961728621132], [31.2104582494049, 64.3899497573705], [31.2297713330892, 64.388190120857], [31.264191540011, 64.3848854376488], [31.3010151529024, 64.3845850119026], [31.3260792437283, 64.3857437969236], [31.3468515381798, 64.3971170573155], [31.3315727430874, 64.412224180553], [31.3149205731551, 64.4020955411097], [31.2910581853141, 64.3938123741073], [31.243161737777, 64.3979754165904], [31.2145783739242, 64.401880951291], [31.1428195385461, 64.4217519685039], [31.0727774217176, 64.43810371269], [31.0447949093573, 64.4428676066654], [31.0124347646951, 64.4420092473906], [31.0245376304706, 64.4283613349203], [31.0593011811024, 64.4169880745285], [31.0916613257645, 64.4149280122688], [31.1119186046512, 64.4116233290606], [31.152347326497, 64.4039410135506], [31.1889992675334, 64.3961728621132] ] + ] + }, + "properties" : { + "feature::id" : 522, + "id" : 26168, + "pfafstette" : 62555, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 17616, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_17616", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 523, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.1260128639443, 62.8263625022889], [37.1500469236404, 62.8290663340047], [37.1723642647867, 62.8465768632119], [37.1902181377037, 62.8649886696576], [37.1726217725691, 62.8912544634682], [37.1200901849478, 62.9146876716718], [37.0814640175792, 62.9137434764695], [37.0624084416773, 62.9027564777513], [37.0661852224867, 62.8900098425197], [37.0969144845266, 62.8792803515839], [37.1263562076543, 62.8688942043582], [37.1254978483794, 62.8459330937557], [37.1260128639443, 62.8263625022889] ] + ] + }, + "properties" : { + "feature::id" : 523, + "id" : 30158, + "pfafstette" : 9767, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 17871, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_17871", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 524, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.2038889397546, 63.2045985167552], [35.1698979124702, 63.1968303653177], [35.1342760025636, 63.1846416636147], [35.1195980589636, 63.1715087667094], [35.1328167917964, 63.152539026735], [35.1510140084234, 63.1433116645303], [35.1623443508515, 63.1379469190624], [35.1765072788866, 63.141852453763], [35.1958203625709, 63.1433116645303], [35.2229445156565, 63.1578608542391], [35.2326439754624, 63.1864013001282], [35.2216569767442, 63.1979891503387], [35.2038889397546, 63.2045985167552] ] + ] + }, + "properties" : { + "feature::id" : 524, + "id" : 30598, + "pfafstette" : 6833, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 17878, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_17878", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 525, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.3132553561619, 63.3865277650613], [34.3244998626625, 63.3776437465666], [34.3503364768357, 63.3853689800403], [34.3735121772569, 63.3909912332906], [34.3857867148874, 63.3927079518403], [34.4104216260758, 63.3837810153818], [34.4347131935543, 63.3867852728438], [34.4465585515473, 63.3906478895806], [34.457631386193, 63.3948538500275], [34.4706784471708, 63.4013773805164], [34.4856138985534, 63.4121068714521], [34.4861289141183, 63.4272569126533], [34.4438976377953, 63.4367847006043], [34.4046706189343, 63.4350250640908], [34.373168833547, 63.4210338079106], [34.336946072148, 63.4079867469328], [34.3220106207654, 63.4032228529573], [34.3132553561619, 63.3865277650613] ] + ] + }, + "properties" : { + "feature::id" : 525, + "id" : 29686, + "pfafstette" : 625, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 18007, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_18007", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 526, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.5266434718916, 63.3821072147958], [34.5111071690167, 63.3618070179454], [34.5191757462003, 63.3427943600073], [34.5489608130379, 63.340176364219], [34.5750549349936, 63.3454552737594], [34.6012348928768, 63.3475582539828], [34.6335950375389, 63.3383738097418], [34.6589166361472, 63.332665720564], [34.6738520875297, 63.3436956372459], [34.693336843069, 63.3514637886834], [34.7157400201428, 63.3558843389489], [34.7144524812305, 63.3689743178905], [34.6643242995788, 63.3788025315876], [34.6166853598242, 63.3769570591467], [34.6032949551364, 63.3775579106391], [34.5668146859549, 63.3850256363303], [34.5266434718916, 63.3821072147958] ] + ] + }, + "properties" : { + "feature::id" : 526, + "id" : 29911, + "pfafstette" : 643, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 18012, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_18012", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 527, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.2196198040652, 63.518800929317], [33.196444103644, 63.5175992263322], [33.1753284654825, 63.5137366095953], [33.1479468046145, 63.5194017808094], [33.1342988921443, 63.5158825077824], [33.1098356528109, 63.5125778245742], [33.0866599523897, 63.5232643975462], [33.0698361106025, 63.5283287172679], [33.0477762772386, 63.5342943142282], [33.0207379600806, 63.5432212506867], [33.0160169840689, 63.5604313541476], [33.0346433803333, 63.5892293078191], [33.0278623420619, 63.6070831807361], [33.0112101721297, 63.6041218412379], [32.9912104010255, 63.5928344167735], [32.9611678264054, 63.5886713742904], [32.9419405786486, 63.5806886330342], [32.9246017212965, 63.5595729948727], [32.8735293444424, 63.5509035661967], [32.8373065830434, 63.5589721433803], [32.8257187328328, 63.5643368888482], [32.8095815784655, 63.5548091008973], [32.7888092840139, 63.5446804614539], [32.7668352865776, 63.5399165674785], [32.7807407068303, 63.5283287172679], [32.7977362204725, 63.5140370353415], [32.7888092840139, 63.5060542940853], [32.7771355978759, 63.4982861426478], [32.7828866050174, 63.4854965894525], [32.8069206647134, 63.4887583546969], [32.8408258560703, 63.4976852911555], [32.8894948269548, 63.4949814594397], [32.9276059787585, 63.4765696529939], [32.942884773851, 63.4560548663248], [32.9710389580663, 63.4477716993225], [33.0090642739425, 63.429316974913], [33.036360098883, 63.4109051684673], [33.0498363394983, 63.4144244414942], [33.0712953213697, 63.4183299761948], [33.100136193005, 63.4103043169749], [33.1158441677349, 63.4162699139352], [33.1203934718916, 63.4346817203809], [33.1348139077092, 63.4548960813038], [33.1401357352133, 63.4742520829518], [33.132839681377, 63.4912046786303], [33.1455433986449, 63.5001316150888], [33.1514660776415, 63.4881575032045], [33.1560153817982, 63.4718057590185], [33.1854571049258, 63.4647242950009], [33.217988921443, 63.4679431422816], [33.232666865043, 63.4792734847098], [33.2454564182384, 63.4846382301776], [33.2564434169566, 63.4885437648782], [33.2488040194104, 63.5048955090643], [33.2196198040652, 63.518800929317] ] + ] + }, + "properties" : { + "feature::id" : 527, + "id" : 30215, + "name" : "Maslozero", + "lge_id" : "ru", + "pfafstette" : 42373, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 18090, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 528, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.7849466672771, 63.3309490020143], [32.8125, 63.3220220655557], [32.8318989196118, 63.3157560428493], [32.8433150979674, 63.323481276323], [32.8342164896539, 63.3321077870353], [32.8149892418971, 63.3421505905512], [32.7983370719649, 63.3541247024354], [32.7905260025636, 63.3639099981688], [32.8101824299579, 63.3751974226332], [32.848894433254, 63.3668713376671], [32.8657182750412, 63.3484595312214], [32.8714692821828, 63.3357128959897], [32.9021127082952, 63.3240821278154], [32.9387646493316, 63.332665720564], [32.9579918970885, 63.3665709119209], [32.9458031953855, 63.3945534242812], [32.9226274949643, 63.3948538500275], [32.8990226149057, 63.3879869758286], [32.8708684306904, 63.3924504440579], [32.8604822834646, 63.4061412744918], [32.8532720655558, 63.4165274217176], [32.8462335195019, 63.4269564869071], [32.8410833638528, 63.4421494460721], [32.818851858634, 63.4489734023073], [32.7795390038455, 63.4620633812488], [32.7429728987365, 63.4691877632302], [32.724861518037, 63.4469133400476], [32.7397969694195, 63.4287161234206], [32.7629726698407, 63.4180295504486], [32.7412561801868, 63.4109051684673], [32.7143895348837, 63.4079867469328], [32.7236598150522, 63.3993173182567], [32.7300116736861, 63.3873861243362], [32.73705021974, 63.3740386376121], [32.7453763047061, 63.3645108496612], [32.7519856711225, 63.3555839132027], [32.7658910913752, 63.3424939342611], [32.7849466672771, 63.3309490020143] ] + ] + }, + "properties" : { + "feature::id" : 528, + "id" : 31737, + "pfafstette" : 47173, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 18443, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_18443", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 529, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.6616633858268, 63.0356304934993], [34.684495742538, 63.025501854056], [34.7068130836843, 63.0207379600806], [34.7317055026552, 63.0190641594946], [34.748100164805, 63.0219825810291], [34.7683574436916, 63.0329695797473], [34.7953957608497, 63.0371326222304], [34.8159105475188, 63.0302657480315], [34.8312751785387, 63.0323687282549], [34.8312751785387, 63.0445574299579], [34.8010609320637, 63.0499221754257], [34.7795161142648, 63.0559306903497], [34.7490443600073, 63.0633554980773], [34.7091306537264, 63.0722824345358], [34.6923926478667, 63.0776471800037], [34.6695602911555, 63.06957860282], [34.6513630745285, 63.0508663706281], [34.6616633858268, 63.0356304934993] ] + ] + }, + "properties" : { + "feature::id" : 529, + "id" : 32334, + "pfafstette" : 48875, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 18714, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_18714", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 530, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [60.0051501556492, 55.8251979948727], [60.0129612250504, 55.7967004669474], [60.0381111518037, 55.7755848287859], [60.0827458340963, 55.7684604468046], [60.1246337667094, 55.7818508514924], [60.1113291979491, 55.791936572972], [60.0746772569127, 55.7851126167369], [60.0554500091559, 55.7972584004761], [60.0349352224867, 55.8127517853873], [60.0236048800586, 55.8222795733382], [60.0167380058597, 55.8329661463102], [60.0051501556492, 55.8251979948727] ] + ] + }, + "properties" : { + "feature::id" : 530, + "id" : 29359, + "pfafstette" : 248919, + "altitude" : 370, + "objectid" : 18795, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_18795", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 531, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [38.9096834370994, 62.6551627449185], [38.9399835195019, 62.6563215299396], [38.9495113074528, 62.6601412287127], [38.9684810474272, 62.680956441128], [38.9589532594763, 62.7065355475188], [38.9287390130013, 62.7062351217726], [38.9111426478667, 62.6911279985351], [38.8674521607764, 62.6852053195385], [38.8310577275224, 62.6949476973082], [38.8082253708112, 62.7011708020509], [38.7708009064274, 62.6931880607947], [38.7353506683757, 62.6806560153818], [38.7121749679546, 62.6715144891045], [38.7365523713605, 62.6625446346823], [38.7593847280718, 62.6399697857535], [38.7659082585607, 62.6179957883171], [38.7914873649515, 62.6251201702985], [38.8221307910639, 62.6288969511078], [38.8611003021425, 62.6194549990844], [38.8876236037356, 62.6262789553195], [38.900413156931, 62.6357638253067], [38.9138035616187, 62.6414289965208], [38.900413156931, 62.6491971479582], [38.881872596594, 62.6541756317524], [38.9096834370994, 62.6551627449185] ] + ] + }, + "properties" : { + "feature::id" : 531, + "id" : 28869, + "pfafstette" : 69633, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 19232, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_19232", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 532, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.265124290423, 63.2310359824208], [32.2480429408533, 63.2262720884453], [32.2124210309467, 63.2277742171763], [32.186498580846, 63.2227098974547], [32.189674510163, 63.20545687603], [32.195339681377, 63.1834828785937], [32.1986014466215, 63.1646848104743], [32.2034082585607, 63.1530969602637], [32.2087300860648, 63.1427108130379], [32.2251247482146, 63.1409511765244], [32.2378284654825, 63.1545990889947], [32.261948361106, 63.1626247482146], [32.2792872184582, 63.172410043948], [32.2851240615272, 63.2092765748031], [32.2798022340231, 63.2348556811939], [32.265124290423, 63.2310359824208] ] + ] + }, + "properties" : { + "feature::id" : 532, + "id" : 33818, + "pfafstette" : 49219, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 19423, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_19423", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 533, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.6831338124886, 62.8929711820179], [33.7094854422267, 62.8997951382531], [33.7303435726058, 62.9084645669291], [33.7421889305988, 62.9197519913935], [33.6804728987365, 62.9465328007691], [33.622791155466, 62.9556743270463], [33.6388424739059, 62.9473911600439], [33.6539495971434, 62.937863372093], [33.6415033876579, 62.9289793535982], [33.6287138344626, 62.9223699871818], [33.6391858176158, 62.9158893746566], [33.656009659403, 62.9045590322285], [33.6831338124886, 62.8929711820179] ] + ] + }, + "properties" : { + "feature::id" : 533, + "id" : 34319, + "pfafstette" : 0, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 19433, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_19433", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 534, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.8430461453946, 62.869752563633], [33.8578957608497, 62.8587655649148], [33.8817581486907, 62.862070248123], [33.8760929774766, 62.871598036074], [33.8693119392053, 62.8822846090459], [33.8808997894158, 62.883443394067], [33.9067364035891, 62.8765765198681], [33.9297404321553, 62.8817266755173], [33.9144616370628, 62.8953745879875], [33.898410318623, 62.913829312397], [33.8784105475188, 62.9313398416041], [33.8469087621315, 62.9372625206006], [33.8353209119209, 62.92567467039], [33.8225313587255, 62.9143872459256], [33.8103426570225, 62.9057607352133], [33.7970380882622, 62.8959325215162], [33.7905145577733, 62.8885506317524], [33.8083684306903, 62.8846450970518], [33.834462552646, 62.8819841832997], [33.8430461453946, 62.869752563633] ] + ] + }, + "properties" : { + "feature::id" : 534, + "id" : 34216, + "pfafstette" : 44833, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 19629, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_19629", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 535, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.4885552096686, 63.1688907709211], [32.5096708478301, 63.1623672404321], [32.5239196117927, 63.1563587255081], [32.537567524263, 63.1671311344076], [32.5620307635964, 63.1751138756638], [32.5869231825673, 63.1894055575902], [32.6076954770189, 63.2051993682476], [32.6303561618751, 63.2135254532137], [32.6264935451383, 63.2321947674418], [32.604176203992, 63.2413792116828], [32.5881248855521, 63.2307355566746], [32.567610098883, 63.2209502609412], [32.5461511170115, 63.2110791292803], [32.5212586980407, 63.196787447354], [32.4912161234206, 63.1882467725691], [32.4765381798206, 63.1763155786486], [32.4885552096686, 63.1688907709211] ] + ] + }, + "properties" : { + "feature::id" : 535, + "id" : 33441, + "pfafstette" : 47733, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 20033, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_20033", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 536, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.7699139351767, 62.9807384178722], [33.7746349111884, 62.980094648416], [33.8022740798389, 62.9780345861564], [33.8323166544589, 62.9824980543856], [33.8433036531771, 62.9869615226149], [33.8621017212965, 63.0115964338033], [33.8489688243911, 63.0422398599158], [33.822273850943, 63.0356304934993], [33.8020165720564, 63.0255876899835], [33.7791842153452, 63.0211242217542], [33.7690555759018, 62.9988068806079], [33.7699139351767, 62.9807384178722] ] + ] + }, + "properties" : { + "feature::id" : 536, + "id" : 33460, + "pfafstette" : 4471, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 20069, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_20069", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 537, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.7258171580297, 63.1851995971434], [31.7428985075994, 63.1920235533785], [31.7580914667643, 63.2063152353049], [31.7756878318989, 63.2158430232558], [31.7636708020509, 63.2224094717085], [31.7446152261491, 63.2164438747482], [31.7116542299945, 63.2113795550265], [31.663500274675, 63.2241261902582], [31.6303676066655, 63.2346410913752], [31.6386936916316, 63.2120233244827], [31.6806674601721, 63.1870021516206], [31.7051306995056, 63.1864013001282], [31.7258171580297, 63.1851995971434] ] + ] + }, + "properties" : { + "feature::id" : 537, + "id" : 34577, + "pfafstette" : 49933, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 20223, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_20223", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 538, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.4882748123054, 62.6825014878227], [34.4995193188061, 62.6709136376122], [34.5105063175243, 62.6711282274309], [34.4956567020692, 62.6943468458158], [34.4697342519685, 62.7134024217176], [34.4620090184948, 62.7252906976744], [34.4819229536715, 62.7264494826955], [34.4948841787218, 62.7146041247024], [34.5061286852225, 62.709496887017], [34.5206349569676, 62.7142607809925], [34.512223036074, 62.7228872917048], [34.5034677714704, 62.7330588491119], [34.4858714063358, 62.7431874885552], [34.4626957059147, 62.7407411646219], [34.442781770738, 62.736878547885], [34.4184902032595, 62.7220718503937], [34.421408624794, 62.7032737822743], [34.4443268174327, 62.7041750595129], [34.4526529023988, 62.6979519547702], [34.4700775956784, 62.6878662332906], [34.4882748123054, 62.6825014878227] ] + ] + }, + "properties" : { + "feature::id" : 538, + "id" : 34973, + "pfafstette" : 487233, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 20242, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_20242", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 539, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [39.8758526368797, 61.6615260483428], [39.907011078557, 61.6448309604468], [39.9409162699139, 61.6448309604468], [39.940401254349, 61.6698092153452], [39.9206589910273, 61.6936286852225], [39.9119037264237, 61.7055169611793], [39.8793719099066, 61.7078774491851], [39.8523335927486, 61.6977488097418], [39.8512177256913, 61.6790794955136], [39.8758526368797, 61.6615260483428] ] + ] + }, + "properties" : { + "feature::id" : 539, + "id" : 34978, + "pfafstette" : 94911, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 20303, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_20303", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 540, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.4779973905878, 63.00146779436], [32.4894135689434, 63.0000085835927], [32.5030614814137, 63.0149011170115], [32.5276963926021, 63.0288065372642], [32.5542196941952, 63.0556302646035], [32.5510437648782, 63.0847286440212], [32.5417734847098, 63.0957585607032], [32.5334473997437, 63.1049859229079], [32.5187694561436, 63.0903938152353], [32.4943920527376, 63.0766600668376], [32.4726755630837, 63.0716815830434], [32.4807441402674, 63.0618533693463], [32.4822033510346, 63.0306520097052], [32.4779973905878, 63.00146779436] ] + ] + }, + "properties" : { + "feature::id" : 540, + "id" : 34611, + "pfafstette" : 47793, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 20308, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_20308", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 541, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.1191917689068, 62.8248174555942], [33.108633949826, 62.8183797610328], [33.1247711041934, 62.7990237593847], [33.1489768357444, 62.7937019318806], [33.1809078007691, 62.8076073521333], [33.2131821095038, 62.8216415262772], [33.2080319538546, 62.8311693142282], [33.2063152353049, 62.8638298846365], [33.2245982878594, 62.8902673503021], [33.2385037081121, 62.898636353232], [33.230005951291, 62.9164473081853], [33.1895772294452, 62.9337432475737], [33.1580754440579, 62.9530134132943], [33.1403074070683, 62.9569189479949], [33.1191917689068, 62.9307389901117], [33.1235694012086, 62.9075203717268], [33.1318096502472, 62.8921128227431], [33.1355005951291, 62.8772202893243], [33.1426249771104, 62.8665337163523], [33.1348997436367, 62.8403537584691], [33.1191917689068, 62.8248174555942] ] + ] + }, + "properties" : { + "feature::id" : 541, + "id" : 34984, + "pfafstette" : 499615, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 20321, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_20321", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 542, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.1861323475554, 62.6819006363303], [34.1903383080022, 62.6931880607947], [34.212913156931, 62.7073939067936], [34.2352304980773, 62.7115998672404], [34.2319687328328, 62.7202263779527], [34.2253593664164, 62.7348184856253], [34.2036428767625, 62.7529298663248], [34.1790079655741, 62.7508698040652], [34.1547163980956, 62.7404836568394], [34.1284506042849, 62.7255911234206], [34.1447594305072, 62.7077801684673], [34.1758320362571, 62.694647271562], [34.1861323475554, 62.6819006363303] ] + ] + }, + "properties" : { + "feature::id" : 542, + "id" : 35253, + "pfafstette" : 4929251, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 20393, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_20393", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 543, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.9626270371727, 62.8709971845816], [32.9831418238418, 62.8795807773301], [33.0019398919612, 62.9003959897455], [33.0033991027285, 62.9155460309467], [32.997304751877, 62.9366616691082], [32.9924121040103, 62.9539146905329], [32.9651162790698, 62.9628416269914], [32.9360178996521, 62.9723694149423], [32.9162756363304, 62.9934850531038], [32.888464795825, 63.0109955823109], [32.8683791887933, 63.0082917505951], [32.8561904870903, 63.0020686458524], [32.8440017853873, 62.9869615226149], [32.8379074345358, 62.9660604742721], [32.8420275590551, 62.9488503708112], [32.8625423457242, 62.9352024583409], [32.8696667277056, 62.9244300494415], [32.882112937191, 62.9140868201794], [32.9011685130928, 62.9015976927302], [32.8847738509431, 62.8873489287676], [32.8532720655558, 62.8843446713056], [32.8364482237685, 62.8632290331441], [32.8497527925289, 62.8406541842153], [32.894301638894, 62.8218990340597], [32.9279493224684, 62.8144742263322], [32.9529275773668, 62.8224998855521], [32.9746440670207, 62.82752128731], [32.9657171305622, 62.839709989013], [32.9567901941037, 62.8506969877312], [32.9484641091375, 62.8602247756821], [32.9431422816334, 62.8703534151254], [32.9626270371727, 62.8709971845816] ] + ] + }, + "properties" : { + "feature::id" : 543, + "id" : 34917, + "name" : "Yangozero", + "pfafstette" : 4675, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 20492, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 544, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.7626636605017, 63.4019782320088], [29.7356253433437, 63.4197891869621], [29.7073853232009, 63.4498317615821], [29.6694458432522, 63.4691019273027], [29.642922541659, 63.4673422907892], [29.6625789690533, 63.456355292071], [29.6877288958066, 63.4412481688335], [29.6860121772569, 63.4278577641458], [29.6836087712873, 63.4135660822194], [29.7053252609412, 63.3984589589819], [29.7321919062443, 63.3847681285479], [29.7561401300128, 63.3740386376121], [29.7736506592199, 63.3844247848379], [29.7626636605017, 63.4019782320088] ] + ] + }, + "properties" : { + "feature::id" : 544, + "id" : 34933, + "name" : "Viekinjrvi", + "pfafstette" : 9221311, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 20547, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 545, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.0932693188061, 63.257215940304], [33.0700936183849, 63.2479456601355], [33.0489779802234, 63.2441259613624], [33.0266606390771, 63.239018723677], [33.0432269730819, 63.2245124519319], [33.0593641274492, 63.20545687603], [33.0649434627358, 63.1893197216627], [33.0709519776598, 63.1706504074345], [33.0732695477019, 63.1451571369712], [33.1223676982238, 63.1302646035525], [33.1684615912837, 63.13734606757], [33.184598745651, 63.1477751327596], [33.1987616736861, 63.1718950283831], [33.2085469694195, 63.2122808322651], [33.2251991393518, 63.2286325764512], [33.2367869895624, 63.2339973219191], [33.2192764603553, 63.2485465116279], [33.2053710401026, 63.2696621497894], [33.2005642281634, 63.2860138939755], [33.1858004486358, 63.2836963239333], [33.1599638344626, 63.2791899377403], [33.1367022981139, 63.2741256180187], [33.1259728071782, 63.2702630012818], [33.11498580846, 63.2672587438198], [33.0932693188061, 63.257215940304] ] + ] + }, + "properties" : { + "feature::id" : 545, + "id" : 32554, + "name" : "Seletskoe ozero", + "lge_id" : "ru", + "pfafstette" : 4571, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 20612, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 546, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.5082860282, 63.1709508331807], [33.4894879600806, 63.1548995147409], [33.4905179912104, 63.1364877082952], [33.5198738784106, 63.1234406473173], [33.5400453213697, 63.1288053927852], [33.5591008972716, 63.1329255173045], [33.5808173869255, 63.1439125160227], [33.5776414576085, 63.1587621314777], [33.571547106757, 63.1667448727339], [33.5639935451383, 63.176573086431], [33.5490580937557, 63.1751138756638], [33.5302600256363, 63.17541430141], [33.5082860282, 63.1709508331807] ] + ] + }, + "properties" : { + "feature::id" : 546, + "id" : 32838, + "pfafstette" : 4523, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 20626, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_20626", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 547, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.5256363303424, 63.3068291063908], [32.4926753341879, 63.2984601034609], [32.5203145028383, 63.2777307269731], [32.5658075444058, 63.2791899377403], [32.5871806903498, 63.28893231551], [32.6100988829885, 63.2936962094854], [32.6010861106025, 63.313138047061], [32.5703568485625, 63.3273868110236], [32.5488120307636, 63.3163568943417], [32.5256363303424, 63.3068291063908] ] + ] + }, + "properties" : { + "feature::id" : 547, + "id" : 32877, + "pfafstette" : 477131, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 20648, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_20648", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 548, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.3825993407801, 62.7933585881706], [35.3965047610328, 62.7933585881706], [35.4271481871452, 62.7978649743637], [35.4517830983336, 62.8076073521333], [35.4639718000366, 62.8153755035708], [35.4741004394799, 62.8243024400293], [35.4604525270097, 62.8444738829885], [35.4462037630471, 62.8606110373558], [35.4286932338399, 62.8730572468412], [35.3995090184948, 62.8876493545138], [35.3540159769273, 62.9019410364402], [35.3032011078557, 62.9022414621864], [35.2844030397363, 62.8870485030214], [35.2770211499725, 62.8632719511078], [35.2854330708661, 62.8490231871452], [35.3002826863212, 62.8391091375206], [35.3276643471891, 62.8258045687603], [35.3456898919612, 62.8130150155649], [35.362084554111, 62.8020280168467], [35.3825993407801, 62.7933585881706] ] + ] + }, + "properties" : { + "feature::id" : 548, + "id" : 32704, + "pfafstette" : 48475, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 20688, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_20688", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 549, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.1586991851309, 46.6682641686504], [31.1728621131661, 46.6516119987182], [31.1937202435452, 46.6602814273943], [31.2055656015382, 46.6870193188061], [31.2058231093206, 46.7173623191723], [31.1892567753159, 46.7328127861198], [31.1847933070866, 46.7500228895807], [31.1907159860831, 46.7777049761948], [31.1803298388574, 46.7990781221388], [31.1768105658304, 46.8184341237869], [31.1780122688152, 46.8407085469694], [31.143162882256, 46.8600645486175], [31.1135494872734, 46.8959868842703], [31.1090001831167, 46.9260294588903], [31.0974123329061, 46.9162870811207], [31.0777559055118, 46.9108794176891], [31.046511627907, 46.9400636330342], [31.0265976927303, 46.9798485854239], [31.0198166544589, 47.006371887017], [31.0132072880425, 47.0286463101996], [31.0043661875115, 47.0387749496429], [31.0005035707746, 47.0030672038088], [31.0005035707746, 46.9601921580297], [31.0005035707746, 46.92808952115], [31.0158682017946, 46.9102785661967], [31.0574986266252, 46.8969310794726], [31.0846227797107, 46.8668885048526], [31.0905454587072, 46.8481333546969], [31.1167254165904, 46.8427686092291], [31.1320900476103, 46.8303223997436], [31.1425620307636, 46.7994643838125], [31.1473688427028, 46.7741857031679], [31.1428195385461, 46.7369329106391], [31.152347326497, 46.6959462552646], [31.1586991851309, 46.6682641686504] ] + ] + }, + "properties" : { + "feature::id" : 549, + "id" : 129392, + "name" : "Tiligul Liman", + "lge_id" : "uk", + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 20719, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 550, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.5149297289874, 63.6217182063724], [30.5030843709943, 63.6344648416041], [30.4870330525545, 63.6442930553012], [30.4724409448819, 63.6457522660685], [30.4885780992492, 63.6285421626076], [30.5063461362388, 63.6112891411829], [30.4968183482879, 63.6145079884636], [30.4690933437099, 63.6198727339315], [30.4399091283648, 63.624636627907], [30.4224844350852, 63.6091861609595], [30.4278920985168, 63.5830062030763], [30.4487502288958, 63.5714183528658], [30.4840287950925, 63.5506460584142], [30.52917849295, 63.5402169932247], [30.577933299762, 63.5289295687603], [30.6124393426112, 63.51528165629], [30.6405935268266, 63.506612227614], [30.6683185314045, 63.5057538683391], [30.6801638893976, 63.5191013550632], [30.683597326497, 63.535152673503], [30.6660009613624, 63.5469980314961], [30.6570740249039, 63.5580708661417], [30.6436836202161, 63.5788431605933], [30.6187053653177, 63.5892293078191], [30.5759590734298, 63.6012034197033], [30.5322685863395, 63.6133921214063], [30.5149297289874, 63.6217182063724] ] + ] + }, + "properties" : { + "feature::id" : 550, + "id" : 32673, + "name" : "Tuulos and Koroppi", + "lge_id" : "fi", + "pfafstette" : 0, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 20932, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 551, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.0563255356162, 62.0494615226149], [36.0827630012818, 62.0349123329061], [36.117784059696, 62.04860316334], [36.1308311206739, 62.0595901620582], [36.1550368522249, 62.0518649285845], [36.178212552646, 62.0548262680827], [36.1897145669291, 62.0584313770372], [36.2016457608497, 62.0634956967588], [36.1987273393151, 62.0777444607215], [36.163362937191, 62.0961991851309], [36.1101446621498, 62.0946541384362], [36.0780420252701, 62.0703196529939], [36.0634499175975, 62.0610493728255], [36.0563255356162, 62.0494615226149] ] + ] + }, + "properties" : { + "feature::id" : 551, + "id" : 37759, + "pfafstette" : 47457, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 21039, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_21039", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 552, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.5603026002564, 62.4443497070134], [33.5692295367149, 62.4321180873466], [33.5787573246658, 62.4249937053653], [33.592748580846, 62.4356802783373], [33.6106024537631, 62.4360236220472], [33.6320614356345, 62.4371824070683], [33.6271687877678, 62.457096342245], [33.622791155466, 62.4809158121223], [33.6275979674052, 62.4990271928218], [33.6302588811573, 62.5213016160044], [33.6287138344626, 62.5412584691448], [33.6123191723128, 62.5210011902582], [33.5936069401209, 62.5043919382897], [33.5909460263688, 62.5201428309833], [33.5849375114448, 62.5319881889764], [33.5651094121956, 62.5139197262406], [33.5591008972716, 62.4909586156382], [33.5555816242447, 62.467782915217], [33.5603026002564, 62.4443497070134] ] + ] + }, + "properties" : { + "feature::id" : 552, + "id" : 37831, + "pfafstette" : 4971, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 21054, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_21054", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 553, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.6367480772752, 61.9475313587255], [36.6455033418788, 61.9346988875664], [36.6633572147958, 61.9228535295733], [36.6883354696942, 61.9365443600073], [36.7036142647867, 61.9528961041934], [36.7202664347189, 61.9677028016847], [36.7187213880242, 61.9888184398462], [36.6887646493316, 61.9992904229994], [36.6604387932613, 61.9909643380333], [36.6457608496612, 61.98049235488], [36.6318554294085, 61.9653423136788], [36.6367480772752, 61.9475313587255] ] + ] + }, + "properties" : { + "feature::id" : 553, + "id" : 37868, + "pfafstette" : 462265, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 21154, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_21154", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 554, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [38.1184478575352, 61.6950878959897], [38.144026963926, 61.6861609595312], [38.1726103277788, 61.6780923823476], [38.2017087071965, 61.6867618110236], [38.2095197765977, 61.7085212186413], [38.1921809192456, 61.728091810108], [38.1757862570958, 61.7459027650613], [38.1611083134957, 61.7634132942685], [38.1364734023073, 61.7822542803516], [38.1130401941036, 61.7956017670756], [38.0910661966673, 61.7914387245926], [38.0724398004028, 61.7807521516206], [38.0529550448636, 61.7795504486358], [38.0378479216261, 61.7602802829152], [38.0399079838857, 61.7355595357993], [38.0575043490203, 61.7212678538729], [38.0821392602087, 61.7091220701337], [38.0991347738509, 61.7031135552097], [38.1184478575352, 61.6950878959897] ] + ] + }, + "properties" : { + "feature::id" : 554, + "id" : 37163, + "pfafstette" : 84735, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 21796, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_21796", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 555, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.7583260849661, 62.4681262589269], [33.75, 62.4610877128731], [33.7348928767625, 62.448255241714], [33.7263092840139, 62.4208306628822], [33.7348928767625, 62.4122470701337], [33.7433906335836, 62.4014746612342], [33.7491416407251, 62.393491919978], [33.75, 62.3928481505219], [33.7574677256913, 62.3872258972716], [33.7657938106574, 62.3810027925288], [33.7725748489288, 62.3702303836294], [33.8451062076543, 62.3480417963743], [33.9161783556125, 62.3316900521882], [33.922101034609, 62.323878982787], [33.9417574620033, 62.3289862204724], [33.9587529756455, 62.3346084737227], [33.9685382713789, 62.3402307269731], [33.9531736403589, 62.3492005813953], [33.9257919794909, 62.3560245376305], [33.910255676616, 62.3785993865592], [33.8960069126534, 62.39649617744], [33.8891400384545, 62.4131054294085], [33.8838182109504, 62.43422106757], [33.8505138710859, 62.4526328740157], [33.8142052737594, 62.4755939846182], [33.7907720655557, 62.4761519181468], [33.7583260849661, 62.4681262589269] ] + ] + }, + "properties" : { + "feature::id" : 555, + "line::hidden" : [ + { "contour" : 0, "segments" : [ { "from" : 24, "to" : 25 } ] } + ], + "id" : 38166, + "pfafstette" : 495733, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 22138, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_22138", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 556, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.1634602179088, 62.4752077229445], [35.1756489196118, 62.4675254074345], [35.1955628547885, 62.4642207242263], [35.2062923457242, 62.4767098516755], [35.204833134957, 62.4951216581212], [35.1775373100165, 62.5031902353049], [35.1580525544772, 62.5147780855155], [35.1411428767625, 62.5311298297015], [35.1162504577916, 62.5225462369529], [35.1376236037356, 62.4934049395715], [35.1634602179088, 62.4752077229445] ] + ] + }, + "properties" : { + "feature::id" : 556, + "id" : 35624, + "pfafstette" : 4854433, + "altitude" : 0, + "objectid" : 22381, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_22381", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 557, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.6320728804248, 62.9289793535982], [32.6579953305256, 62.9155460309467], [32.6772225782824, 62.9045590322285], [32.6855486632485, 62.9152885231642], [32.6965356619667, 62.9253742446438], [32.7124153085516, 62.9369620948544], [32.7065784654825, 62.9530134132943], [32.6919005218825, 62.9625412012452], [32.6662355795642, 62.959236518037], [32.6274377403406, 62.9524125618019], [32.6094980314961, 62.9497087300861], [32.613017304523, 62.9381208798755], [32.6320728804248, 62.9289793535982] ] + ] + }, + "properties" : { + "feature::id" : 557, + "id" : 35441, + "pfafstette" : 48451, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 22440, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_22440", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 558, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.9159437374107, 63.0038712003296], [31.9256431972166, 62.9854164759202], [31.9252998535067, 62.9676055209668], [31.9370593755722, 62.9595798617469], [31.9574883263139, 62.9470907342977], [31.9753421992309, 62.9432281175609], [31.9952561344076, 62.9488503708112], [32.0107924372826, 62.9432281175609], [32.0192901941037, 62.9488503708112], [32.023238646768, 62.9661463101996], [32.0077881798206, 62.9788929454312], [31.9670161142648, 62.9910816471342], [31.9260723768541, 63.0121972852957], [31.8757725233474, 63.0392356024538], [31.8364596685589, 63.0559306903497], [31.8144856711225, 63.0487633904047], [31.7897649240066, 63.0397935359824], [31.7914816425563, 63.0490638161509], [31.7850439479949, 63.0621537950925], [31.7645291613258, 63.0612954358176], [31.7800654642007, 63.0434844808643], [31.8034986724043, 63.0276477522432], [31.8171465848746, 63.0207379600806], [31.8388630745285, 63.0246434947812], [31.878175929317, 63.0244289049624], [31.9061584416774, 63.0145148553378], [31.9159437374107, 63.0038712003296] ] + ] + }, + "properties" : { + "feature::id" : 558, + "id" : 35667, + "pfafstette" : 4943, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 22473, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_22473", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 559, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.5465574070683, 62.6034036806446], [34.5688747482146, 62.5903566196667], [34.5796042391503, 62.5846485304889], [34.5917929408533, 62.5953351034609], [34.6018357443692, 62.6006998489288], [34.6166853598242, 62.5935754669474], [34.6353975920161, 62.6096267853873], [34.6386593572606, 62.6319012085698], [34.6187454220839, 62.6390255905512], [34.5949688701703, 62.6479525270097], [34.5802909265702, 62.6431886330342], [34.5559993590917, 62.6328024858085], [34.5344545412928, 62.6221588308002], [34.5465574070683, 62.6034036806446] ] + ] + }, + "properties" : { + "feature::id" : 559, + "id" : 35492, + "pfafstette" : 492643, + "altitude" : 0, + "objectid" : 22537, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_22537", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 560, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.0641823841787, 62.9396230086065], [32.0500194561436, 62.9277347326497], [32.0574013459074, 62.9144301638894], [32.0646115638162, 62.9129280351584], [32.0829804522981, 62.9072199459806], [32.1008343252152, 62.8941728850027], [32.1097612616737, 62.8852459485442], [32.1325936183849, 62.88794978026], [32.1489024446072, 62.898636353232], [32.1650395989746, 62.9152885231642], [32.1572285295734, 62.9322411188427], [32.1294176890679, 62.9295802050906], [32.1091604101813, 62.9235716901666], [32.1056411371544, 62.9407817936275], [32.0996326222304, 62.9545155420253], [32.0815212415309, 62.9470907342977], [32.0641823841787, 62.9396230086065] ] + ] + }, + "properties" : { + "feature::id" : 560, + "id" : 36228, + "pfafstette" : 49415, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 22660, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_22660", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 561, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.095684169566, 62.3952515564915], [32.1189457059147, 62.3988137474821], [32.1430656015382, 62.4104015976927], [32.1679580205091, 62.4232340688518], [32.1543101080388, 62.4455514099982], [32.137915445889, 62.4645640679363], [32.1306193920528, 62.4752077229445], [32.1079587071965, 62.4725897271562], [32.0846971708478, 62.4689846182018], [32.0671866416407, 62.4493281908075], [32.0739676799121, 62.4246932796191], [32.0823796008057, 62.4116462186413], [32.095684169566, 62.3952515564915] ] + ] + }, + "properties" : { + "feature::id" : 561, + "id" : 42407, + "pfafstette" : 449913, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 22930, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_22930", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 562, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [56.8072468412379, 55.7164438747482], [56.7956589910273, 55.7206069172313], [56.8042425837759, 55.7042122550815], [56.8031267167186, 55.687259659403], [56.7902513275957, 55.6667448727339], [56.7863887108588, 55.6456292345724], [56.7612387841055, 55.6403074070683], [56.7263035616188, 55.6281187053653], [56.6782354422267, 55.6132261719465], [56.6409826496979, 55.5998786852225], [56.637463376671, 55.5760592153452], [56.6288797839224, 55.565072216627], [56.6154893792346, 55.5579907526094], [56.6149743636697, 55.5389351767076], [56.5967771470427, 55.5356304934994], [56.5705971891595, 55.5487204724409], [56.5512841054752, 55.5427977934444], [56.5432155282915, 55.5157594762864], [56.5590093389489, 55.4958026231459], [56.5634728071782, 55.4830559879143], [56.5354044588903, 55.4743865592382], [56.5049327046329, 55.4640004120125], [56.5108553836294, 55.4431851995971], [56.5266491942868, 55.4384213056217], [56.5200398278704, 55.4491078785937], [56.5156621955686, 55.4601377952756], [56.5454472624062, 55.4687643059879], [56.5784082585607, 55.4779916681926], [56.5705971891595, 55.4985493728255], [56.555661737777, 55.5219825810291], [56.564331166453, 55.5332700054935], [56.5911119758286, 55.527347326497], [56.6323132210218, 55.5246434947812], [56.6540297106757, 55.5359738372093], [56.6742869895624, 55.5469608359275], [56.7053595953122, 55.5552869208936], [56.7040720563999, 55.5701794543124], [56.673514466215, 55.581423960813], [56.6492228987365, 55.5897071278154], [56.6811538637612, 55.6037842199231], [56.7372905603369, 55.6227968778612], [56.7710240798389, 55.6349426616004], [56.7954014832448, 55.6400069813221], [56.803727568211, 55.6640839589819], [56.8208947537081, 55.6893197216627], [56.8269032686321, 55.7018517670756], [56.8072468412379, 55.7164438747482] ] + ] + }, + "properties" : { + "feature::id" : 562, + "id" : 41963, + "pfafstette" : 24571, + "altitude" : 134, + "objectid" : 22993, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_22993", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 563, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.389918284197, 62.3075701565647], [33.4154973905878, 62.2948235213331], [33.420647546237, 62.2831927531588], [33.438501419154, 62.2730641137154], [33.4657972440945, 62.2813901986815], [33.4689731734115, 62.3167975187694], [33.4503467771471, 62.3434924922175], [33.4345529664897, 62.3402736449368], [33.4134373283282, 62.3343509659403], [33.3879440578649, 62.3319046420069], [33.368888481963, 62.3275270097052], [33.354038866508, 62.3191580067753], [33.360219053287, 62.3113898553378], [33.389918284197, 62.3075701565647] ] + ] + }, + "properties" : { + "feature::id" : 563, + "id" : 41069, + "pfafstette" : 49825, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 23395, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_23395", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 564, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.1750938472807, 62.695806056583], [31.1467679912104, 62.7032737822743], [31.1241931422816, 62.7032737822743], [31.0997299029482, 62.71400327321], [31.0693439846182, 62.7228872917048], [31.049172541659, 62.7086385277422], [31.0614470792895, 62.6831023393151], [31.0800734755539, 62.6836602728438], [31.1013607855704, 62.6842182063724], [31.1446220930233, 62.6690681651712], [31.1687419886468, 62.6613858496612], [31.1803298388574, 62.6488538042483], [31.1962953213697, 62.6444332539828], [31.1904584783007, 62.6547764832448], [31.1910593297931, 62.6667076771653], [31.1960378135873, 62.679454312397], [31.1750938472807, 62.695806056583] ] + ] + }, + "properties" : { + "feature::id" : 564, + "id" : 40352, + "name" : "Karpanjrvi", + "pfafstette" : 837, + "lke_type" : "N", + "altitude" : 145, + "objectid" : 24226, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 565, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [53.1281473173411, 56.8723963101996], [53.1411085423915, 56.8572033510346], [53.1716661325764, 56.8515810977843], [53.1925242629555, 56.857804202527], [53.1738120307636, 56.8676324162241], [53.1511513459073, 56.8851429454312], [53.1247997161692, 56.9107649697858], [53.0918387200146, 56.9306789049625], [53.0800791979491, 56.9333398187145], [53.0872894158579, 56.9098636925472], [53.113812717451, 56.8860442226699], [53.1281473173411, 56.8723963101996] ] + ] + }, + "properties" : { + "feature::id" : 565, + "id" : 46587, + "pfafstette" : 2389111, + "altitude" : 94, + "objectid" : 24835, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_24835", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 566, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [54.5265862479399, 56.260514901117], [54.574482695477, 56.2566093664164], [54.6374862662516, 56.2607294909357], [54.6659837941769, 56.2702572788867], [54.6870135964109, 56.2801713285113], [54.7034082585607, 56.2926175379967], [54.6901036898004, 56.3000423457242], [54.6609194744552, 56.2926175379967], [54.6252975645486, 56.2893128547885], [54.5991176066654, 56.2860940075078], [54.5825512726607, 56.2780683482879], [54.5631523530489, 56.2797850668376], [54.5375732466581, 56.2741628135873], [54.5265862479399, 56.260514901117] ] + ] + }, + "properties" : { + "feature::id" : 566, + "id" : 46714, + "pfafstette" : 252353, + "altitude" : 76, + "objectid" : 24849, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_24849", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 567, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.5692524262956, 62.2929780488921], [31.5513985533785, 62.2954243728255], [31.554316974913, 62.2840511124336], [31.5650464658488, 62.2676993682476], [31.5635872550815, 62.2406610510895], [31.5791235579564, 62.2314336888848], [31.6095953122139, 62.2320774583409], [31.6233290606116, 62.2439657342977], [31.6315693096503, 62.2757679454312], [31.6423846365135, 62.3182567295367], [31.6408395898187, 62.3467971754257], [31.6095953122139, 62.3292437282549], [31.5890805255448, 62.3039650476103], [31.5876213147775, 62.2902742171763], [31.5692524262956, 62.2929780488921] ] + ] + }, + "properties" : { + "feature::id" : 567, + "id" : 46175, + "pfafstette" : 424773, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 24922, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_24922", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 568, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.7980910089727, 62.3325054934994], [31.8125114447903, 62.324222326497], [31.8428115271928, 62.3194584325215], [31.865987227614, 62.3411749221754], [31.8489917139718, 62.36645360282], [31.8088204999084, 62.3700157938106], [31.7773187145212, 62.3592433849112], [31.7653875206006, 62.3432779023988], [31.78418558872, 62.3370547976561], [31.7980910089727, 62.3325054934994] ] + ] + }, + "properties" : { + "feature::id" : 568, + "id" : 44935, + "pfafstette" : 449853, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 26216, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_26216", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 569, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.1636776689251, 62.5201428309833], [31.1511456235122, 62.5240054477202], [31.136982695477, 62.5210011902582], [31.1233347830068, 62.5064949185131], [31.1413603277788, 62.4793707654276], [31.1610167551731, 62.4624610877129], [31.1690853323567, 62.4538774949643], [31.2096857260575, 62.4455514099982], [31.2272820911921, 62.4556371314777], [31.2199002014283, 62.4809158121223], [31.1986987273393, 62.5025893838125], [31.1636776689251, 62.5201428309833] ] + ] + }, + "properties" : { + "feature::id" : 569, + "id" : 44103, + "name" : "Viiksinselka", + "pfafstette" : 8417, + "lke_type" : "N", + "altitude" : 145, + "objectid" : 26281, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 570, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.1883755264604, 61.7688209577001], [33.1747276139901, 61.7563747482146], [33.1770451840322, 61.734615340597], [33.2046843526827, 61.7206670023805], [33.2309501464933, 61.7242291933712], [33.2424521607764, 61.748306171031], [33.2221948818898, 61.7694218091925], [33.1883755264604, 61.7688209577001] ] + ] + }, + "properties" : { + "feature::id" : 570, + "id" : 51713, + "pfafstette" : 44593, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 26712, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_26712", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 571, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.7231562442776, 62.0500623741073], [31.6999805438564, 62.0527232878594], [31.6896802325581, 62.0429809100897], [31.6702813129464, 62.0373157388757], [31.6672770554844, 62.0233244826955], [31.7011822468412, 62.0036680553012], [31.7375766800952, 62.01087827321], [31.7460744369163, 62.0334531221388], [31.7231562442776, 62.0500623741073] ] + ] + }, + "properties" : { + "feature::id" : 571, + "id" : 50806, + "pfafstette" : 424593, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 26930, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_26930", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 572, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.0580765885369, 61.7525121314778], [33.0956727247757, 61.7501087255081], [33.094127678081, 61.7792500228896], [33.0608233382165, 61.8065887657938], [33.0391068485625, 61.8167174052371], [33.0085492583776, 61.8253439159495], [32.9692364035891, 61.8330262314594], [32.9270051272661, 61.8383909769273], [32.8859755539279, 61.8321678721846], [32.8711259384728, 61.8166744872734], [32.8842588353781, 61.802382805347], [32.8967050448636, 61.7913958066288], [32.9118980040286, 61.7845718503937], [32.9377346182018, 61.7774903863761], [32.9671763413294, 61.7661171259843], [32.9891503387658, 61.7643574894708], [33.0129268906794, 61.7652587667094], [33.0580765885369, 61.7525121314778] ] + ] + }, + "properties" : { + "feature::id" : 572, + "id" : 51341, + "name" : "Shotozero", + "pfafstette" : 44571, + "lke_type" : "N", + "altitude" : 64, + "objectid" : 27047, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 573, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.4853335011902, 61.2892556308368], [36.5251613715437, 61.2791699093573], [36.5466203534151, 61.2886976973082], [36.5584657114082, 61.3056502929866], [36.5700535616187, 61.3130751007142], [36.5637017029848, 61.3255213101996], [36.550311298297, 61.3192982054569], [36.5100542483062, 61.3171952252335], [36.4667929408533, 61.3086116324849], [36.4853335011902, 61.2892556308368] ] + ] + }, + "properties" : { + "feature::id" : 573, + "id" : 49290, + "pfafstette" : 45813, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 28292, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_28292", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 574, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.9530477476653, 62.33606768449], [29.9826611426479, 62.3218618384911], [30.0012017029848, 62.3159391594946], [29.981802783373, 62.3064113715437], [30.012188701703, 62.2900596273576], [30.0496131660868, 62.3096302188244], [30.0373386284563, 62.3396727934444], [30.0071243819813, 62.3563249633767], [29.9806869163157, 62.3664106848562], [29.9747642373192, 62.3753805392785], [29.9625755356162, 62.3839641320271], [29.9416315693097, 62.3952515564915], [29.9248077275224, 62.4092428126717], [29.9057521516206, 62.3973545367149], [29.906009659403, 62.3768397500458], [29.927726149057, 62.3687711728621], [29.9390564914851, 62.3601875801135], [29.945580021974, 62.3473980269181], [29.9530477476653, 62.33606768449] ] + ] + }, + "properties" : { + "feature::id" : 574, + "id" : 49310, + "name" : "Suuri Onkamojrvi", + "pfafstette" : 77453, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 28352, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 575, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [59.1812969236404, 53.5808030809376], [59.1999233199048, 53.5712752929866], [59.2400945339682, 53.5816614402124], [59.2685920618934, 53.6063821873283], [59.2793215528292, 53.6280557590185], [59.2790640450467, 53.6604588216444], [59.2764031312946, 53.6878834004761], [59.2654161325765, 53.7152221433803], [59.2485064548618, 53.7268099935909], [59.2336568394067, 53.7360373557956], [59.2183780443142, 53.7405008240249], [59.2092794360007, 53.7297284151254], [59.2090219282183, 53.7146212918879], [59.2223264969786, 53.7009304614539], [59.2246440670207, 53.6851795687603], [59.2318542849295, 53.6566391228713], [59.2386353232009, 53.6292574620033], [59.2307384178722, 53.6093864447903], [59.1922839223586, 53.6069830388207], [59.171168284197, 53.6233777009705], [59.1661898004029, 53.6305020829518], [59.1559753250321, 53.6227339315144], [59.1390656473174, 53.6105881477751], [59.1245593755723, 53.6021762268815], [59.1293661875115, 53.5791721983153], [59.1812969236404, 53.5808030809376] ] + ] + }, + "properties" : { + "feature::id" : 575, + "id" : 55687, + "pfafstette" : 993359, + "altitude" : 391, + "objectid" : 29058, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_29058", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 576, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.8171351400842, 61.5559049395715], [32.8318989196118, 61.575861792712], [32.8161909448819, 61.5827286669108], [32.8041739150339, 61.5827286669108], [32.7646893883904, 61.5832436824757], [32.7037458798755, 61.5901105566746], [32.6722440944882, 61.5933723219191], [32.652072651529, 61.5958186458524], [32.6396264420436, 61.5940160913752], [32.6262360373558, 61.5809261124336], [32.6132748123054, 61.5687374107306], [32.5973093297931, 61.5625143059879], [32.5848631203076, 61.5526860922908], [32.6157640542025, 61.5485230498077], [32.6719007507783, 61.5527290102545], [32.7087243636697, 61.5488234755539], [32.7182521516206, 61.5401540468779], [32.7355910089727, 61.5336305163889], [32.7662344350852, 61.5386948361106], [32.7888092840139, 61.5434587300861], [32.8171351400842, 61.5559049395715] ] + ] + }, + "properties" : { + "feature::id" : 576, + "id" : 56448, + "pfafstette" : 444373, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 30231, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_30231", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 577, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [38.1484904321553, 59.9766097097601], [38.1641125709577, 59.9903005401941], [38.1581898919612, 60.0000858359275], [38.1579323841787, 60.009356116096], [38.1855715528291, 60.0248065830434], [38.183253982787, 60.0408579014832], [38.1787046786303, 60.0491839864494], [38.1981035982421, 60.0562654504669], [38.2312362662516, 60.0711579838857], [38.2293478758469, 60.0943766022706], [38.19544268449, 60.0928315555759], [38.1755287493133, 60.0848488143197], [38.1638550631752, 60.0750635185863], [38.1540697674418, 60.0699562809009], [38.1266881065739, 60.0783252838308], [38.0939846182018, 60.0767802371361], [38.0798216901666, 60.0628748168834], [38.0664312854788, 60.0536045367149], [38.0566459897455, 60.048239791247], [38.065229582494, 60.039055347006], [38.0783624793994, 60.0426175379967], [38.0890061344076, 60.0378536440212], [38.1103792803516, 60.0212443920527], [38.1184478575352, 59.9962232191906], [38.0726114722578, 59.9641205823109], [38.0644570591467, 59.9356230543856], [38.0762165812122, 59.912189846182], [38.1152719282183, 59.8999153085515], [38.1478037447354, 59.8835635643655], [38.1799063816151, 59.8766966901666], [38.1962152078374, 59.8700444057865], [38.2208501190258, 59.8614608130379], [38.244025819447, 59.8528343023256], [38.250034334371, 59.845752838308], [38.252695248123, 59.8288002426295], [38.2446266709394, 59.814208134957], [38.2578454037722, 59.8145085607032], [38.2793043856436, 59.8360104605384], [38.2729525270097, 59.8540789232741], [38.2578454037722, 59.8770400338766], [38.2251419154001, 59.8900012589269], [38.2143265885369, 59.8977694103644], [38.1972452389672, 59.9024045504486], [38.1777604834279, 59.9024045504486], [38.1484904321553, 59.9063100851492], [38.117160318623, 59.9160953808826], [38.1035124061527, 59.9278119849844], [38.0951863211866, 59.9430049441494], [38.0981905786486, 59.9618030122688], [38.1484904321553, 59.9766097097601] ] + ] + }, + "properties" : { + "feature::id" : 577, + "id" : 65134, + "name" : "Sheksinskoe Reservoir river part 2", + "pfafstette" : 66275171, + "lke_type" : "N", + "altitude" : 126, + "objectid" : 34210, + "scalerank" : 10, + "featurecla" : "Reservoir", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 578, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [59.0217279344443, 53.3718355154734], [59.0176078099249, 53.3524795138253], [59.0113417872185, 53.3322651529024], [59.0373500732467, 53.3128233153269], [59.0605257736678, 53.3203768769456], [59.0493671030947, 53.3388316013551], [59.0478220563999, 53.3584021928218], [59.0399251510712, 53.3801186824757], [59.0332299487274, 53.3967279344442], [59.0315990661051, 53.4157835103461], [59.0225004577916, 53.4375], [59.0216420985168, 53.4396458981871], [59.0194103644021, 53.4375], [58.9973505310383, 53.4160839360923], [59.0066208112068, 53.3971141961179], [59.0217279344443, 53.3718355154734] ] + ] + }, + "properties" : { + "feature::id" : 578, + "id" : 61606, + "pfafstette" : 99135, + "altitude" : 344, + "objectid" : 34618, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_34618", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 579, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [38.4141526277238, 59.6538237044497], [38.4259979857169, 59.6451971937374], [38.4195602911555, 59.6279870902765], [38.4204186504303, 59.6136954083501], [38.4230795641824, 59.59167849295], [38.431148141366, 59.5622796877861], [38.4492595220655, 59.5497476423732], [38.4570705914668, 59.5325375389123], [38.4726927302692, 59.5078597097601], [38.4550963651346, 59.4805209668559], [38.443336843069, 59.4414656198498], [38.4394742263322, 59.404384499176], [38.4511479124702, 59.3691917689068], [38.46754257462, 59.3279046877861], [38.4502037172679, 59.3011667963743], [38.440675929317, 59.2827120719648], [38.4299464383812, 59.2713817295367], [38.4526071232375, 59.2520686458524], [38.4965551181102, 59.2482489470793], [38.5185291155466, 59.267819538546], [38.5085721479582, 59.3169176890679], [38.4863406427394, 59.3750715299396], [38.476555347006, 59.410221342245], [38.4770703625709, 59.4426244048709], [38.4968126258927, 59.4694481322102], [38.5105463742904, 59.4902204266618], [38.5162115455045, 59.5065292528841], [38.503937007874, 59.5235247665263], [38.4902032594763, 59.5371726789965], [38.4820488463651, 59.5594041842153], [38.4745811206739, 59.5742967176341], [38.4927783373008, 59.5792752014283], [38.5096880150156, 59.5864425013734], [38.5277135597876, 59.5948115043032], [38.5406747848379, 59.6054551593115], [38.5519192913386, 59.6138241622413], [38.5682281175609, 59.6191459897455], [38.582391045596, 59.6218498214613], [38.6008457700055, 59.6574288134041], [38.6240214704266, 59.6733942959165], [38.64882805347, 59.6874284700604], [38.6728621131661, 59.6924498718183], [38.6974970243545, 59.6817632988464], [38.7109732649698, 59.6856259155832], [38.7082265152902, 59.7067415537447], [38.6931193920527, 59.7106470884453], [38.6674544497345, 59.7049819172313], [38.6434203900384, 59.6978146172862], [38.6237639626442, 59.6948961957517], [38.6080559879143, 59.7121062992126], [38.5890004120124, 59.7189302554477], [38.5666830708661, 59.7168701931881], [38.5783567570042, 59.7406467451016], [38.5985281999634, 59.7706893197217], [38.5869403497528, 59.7858393609229], [38.5726057498627, 59.7786720609778], [38.5536360098883, 59.7673846365134], [38.5224775682109, 59.7796162561802], [38.498100164805, 59.7790154046878], [38.4826496978575, 59.7454106390771], [38.4597315052188, 59.7218486769822], [38.4287447353964, 59.7115054477202], [38.4013630745285, 59.708200764512], [38.3791315693096, 59.7183294039553], [38.3713204999084, 59.7415051043765], [38.3628227430873, 59.7632645119941], [38.3437671671855, 59.7500886971251], [38.340505401941, 59.7365266205823], [38.3544966581212, 59.700518449002], [38.3823074986266, 59.6737805575902], [38.3990455044863, 59.6618064457059], [38.4141526277238, 59.6538237044497] ] + ] + }, + "properties" : { + "feature::id" : 579, + "id" : 69582, + "name" : "Sheksinskoe Reservoir river part 1", + "lge_id" : "ru", + "pfafstette" : 662591, + "lke_type" : "N", + "altitude" : 111, + "objectid" : 36288, + "scalerank" : 10, + "featurecla" : "Reservoir", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 580, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [42.5543627540743, 58.8016446163706], [42.5552211133492, 58.7743058734664], [42.5704140725142, 58.7612158945248], [42.5957356711225, 58.7552502975646], [42.6441471342245, 58.7594133400476], [42.6848333638528, 58.7743058734664], [42.6920435817616, 58.7897563404138], [42.6783956692913, 58.8051638893976], [42.6474947353964, 58.8146916773485], [42.6135037081121, 58.8213010437649], [42.5783968137704, 58.8224598287859], [42.5543627540743, 58.8016446163706] ] + ] + }, + "properties" : { + "feature::id" : 580, + "id" : 69826, + "pfafstette" : 64859, + "lke_type" : "N", + "altitude" : 148, + "objectid" : 36298, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_36298", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 581, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.0172587438198, 60.0271670710493], [36.9909929500091, 60.0193989196118], [36.9551135323201, 60.0009871131661], [36.9383755264603, 59.9793135414759], [36.9673022340231, 59.9713308002197], [37.0106493774034, 59.9742492217543], [37.0334817341146, 59.9665669062443], [37.0620650979674, 59.9644639260209], [37.1057555850577, 59.9721891594946], [37.1369998626625, 59.9754509247391], [37.1479868613807, 59.9813736037356], [37.1235236220472, 59.9918455868888], [37.079318119392, 59.9935193874748], [37.0594900201428, 60.0001287538912], [37.0346834370994, 59.999828328145], [36.9984606757004, 59.9914593252152], [36.9901345907343, 60.0003862616737], [37.006872596594, 60.0096565418422], [37.0231814228163, 60.0167380058597], [37.0172587438198, 60.0271670710493] ] + ] + }, + "properties" : { + "feature::id" : 581, + "id" : 70975, + "pfafstette" : 66242955, + "lke_type" : "N", + "altitude" : 140, + "objectid" : 38880, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_38880", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 582, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.7500400567662, 59.7890582082036], [37.7643746566563, 59.7952813129463], [37.7949322468412, 59.7946804614539], [37.8317558597326, 59.7887148644937], [37.823515610694, 59.8036073979125], [37.8019707928951, 59.8237788408716], [37.7899537630471, 59.8309461408167], [37.7646321644387, 59.84107478026], [37.7575936183849, 59.8609887154367], [37.7678080937557, 59.8728769913935], [37.7437740340597, 59.8800013733748], [37.7102121864127, 59.892833844534], [37.693645852408, 59.8948939067936], [37.6896973997436, 59.8704735854239], [37.7156198498443, 59.8475983107489], [37.7393105658304, 59.8300877815418], [37.7437740340597, 59.8116330571324], [37.7426581670024, 59.7982426524446], [37.7500400567662, 59.7890582082036] ] + ] + }, + "properties" : { + "feature::id" : 582, + "id" : 70532, + "pfafstette" : 6627835, + "lke_type" : "N", + "altitude" : 133, + "objectid" : 39059, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_39059", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 583, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [42.1687019318806, 58.4186876258927], [42.1545390038454, 58.4044388619301], [42.1701611426479, 58.388087117744], [42.1918776323018, 58.3806193920528], [42.214881660868, 58.3859841375206], [42.245095907343, 58.3961127769639], [42.2900739333455, 58.3936664530306], [42.3444939113715, 58.3967136284563], [42.3896436092291, 58.4080439708845], [42.4142785204175, 58.4279149880974], [42.3944504211683, 58.4508331807361], [42.356940120857, 58.4540949459806], [42.3259533510346, 58.4406616233291], [42.2647523347372, 58.4329793078191], [42.2097315052188, 58.4350822880425], [42.1916201245193, 58.4282154138436], [42.1687019318806, 58.4186876258927] ] + ] + }, + "properties" : { + "feature::id" : 583, + "id" : 77326, + "pfafstette" : 6464211, + "lke_type" : "N", + "altitude" : 98, + "objectid" : 39196, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_39196", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 584, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.0369094488189, 60.8212781541842], [29.9860945797473, 60.8379732420802], [29.9716741439297, 60.8367286211317], [29.9812019318806, 60.8212781541842], [29.997339086248, 60.8026088399561], [30.0225748489288, 60.7865146035525], [30.057595907343, 60.7755276048343], [30.0681537264237, 60.7618367744003], [30.0751922724776, 60.7546265564915], [30.0924452939022, 60.7632959851676], [30.0895268723677, 60.7844116233291], [30.0778531862296, 60.8043255585058], [30.0369094488189, 60.8212781541842] ] + ] + }, + "properties" : { + "feature::id" : 584, + "id" : 78054, + "pfafstette" : 4228173, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 39294, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_39294", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 585, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.2700398278704, 60.8626081532686], [30.2518426112434, 60.8569429820546], [30.2712415308552, 60.8373294726241], [30.2815418421535, 60.8189176661784], [30.2182807635964, 60.8283596182018], [30.1483244826955, 60.8420504486358], [30.1369941402674, 60.8212781541842], [30.1533029664897, 60.7975016022706], [30.1905557590185, 60.7879738143197], [30.2283235671123, 60.7883171580297], [30.2503834004761, 60.7850553927852], [30.2836877403406, 60.774068394067], [30.3160478850028, 60.7736821323933], [30.3299533052555, 60.7865146035525], [30.3398244369163, 60.7898192867607], [30.3535581853141, 60.7904201382531], [30.3502105841421, 60.8082310932064], [30.3425711865959, 60.8242824116462], [30.3398244369163, 60.836170687603], [30.3100393700788, 60.8515782365867], [30.2700398278704, 60.8626081532686] ] + ] + }, + "properties" : { + "feature::id" : 585, + "id" : 77130, + "name" : "Pyukhayarvi", + "lge_id" : "ru", + "pfafstette" : 422859, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 39417, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 586, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [54.55662882256, 54.3440132301776], [54.5316505676616, 54.3323824620033], [54.5343114814136, 54.3172753387658], [54.5652124153085, 54.3077475508149], [54.5987742629555, 54.3009235945797], [54.6201474088995, 54.3009235945797], [54.6225508148691, 54.3193354010254], [54.5952549899286, 54.340451039187], [54.55662882256, 54.3440132301776] ] + ] + }, + "properties" : { + "feature::id" : 586, + "id" : 78584, + "pfafstette" : 242291, + "altitude" : 202, + "objectid" : 40277, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_40277", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 587, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [54.0325146493316, 54.5107924372825], [54.038952343893, 54.4947411188427], [54.0826428309833, 54.4959857397912], [54.1216123420619, 54.5061143792346], [54.099895852408, 54.5197622917048], [54.054488646768, 54.5256849707013], [54.0325146493316, 54.5107924372825] ] + ] + }, + "properties" : { + "feature::id" : 587, + "id" : 78851, + "pfafstette" : 2366461, + "altitude" : 164, + "objectid" : 40395, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_40395", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 588, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.2370788317158, 59.0243030122688], [30.2446323933346, 59.0481224821461], [30.2458340963194, 59.0625], [30.2464349478118, 59.0706973310749], [30.2617137429042, 59.0781221388024], [30.2682372733932, 59.0831864585241], [30.2524434627358, 59.0947743087347], [30.2266068485625, 59.0864911417323], [30.2060920618934, 59.0718990340597], [30.1882381889764, 59.0695385460538], [30.1795687603003, 59.0630150155649], [30.1798262680828, 59.0625], [30.1902124153086, 59.0379509247391], [30.1961350943051, 59.0079512680828], [30.1798262680828, 58.9958054843435], [30.1700409723494, 58.9851189113716], [30.1971651254349, 58.9693680186779], [30.2274652078374, 58.976191974913], [30.2280660593298, 59.0000114447903], [30.2370788317158, 59.0243030122688] ] + ] + }, + "properties" : { + "feature::id" : 588, + "id" : 89919, + "pfafstette" : 9233, + "lke_type" : "N", + "altitude" : 73, + "objectid" : 46197, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_46197", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 589, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [39.375, 57.1823927623146], [39.3639271653543, 57.1726074665812], [39.3454724409449, 57.1444103644021], [39.3532835103461, 57.1220930232558], [39.375, 57.1219213514008], [39.4270165720564, 57.1215350897272], [39.4846124793994, 57.1489167505951], [39.4871017212965, 57.1774142785204], [39.4917368613807, 57.1990878502106], [39.4888184398462, 57.2131220243545], [39.4721662699139, 57.2127786806446], [39.4289907983886, 57.1952681514375], [39.3787767808094, 57.1857403634865], [39.375, 57.1823927623146] ] + ] + }, + "properties" : { + "feature::id" : 589, + "line::hidden" : [ + { "contour" : 0, "segments" : [ { "from" : 3, "to" : 5 }, { "from" : 9, "to" : 10 } ] } + ], + "id" : 90265, + "pfafstette" : 65673, + "lke_type" : "N", + "altitude" : 90, + "objectid" : 46370, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_46370", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 590, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.1098985991577, 58.3764563495697], [35.1276666361472, 58.3797610327779], [35.12620742538, 58.3990741164622], [35.1177096685589, 58.4160267121406], [35.1346193462736, 58.4276145623512], [35.1657777879509, 58.438344053287], [35.1972795733382, 58.4484297747665], [35.2282663431606, 58.4481293490203], [35.2434593023256, 58.4537516022706], [35.2297255539278, 58.466541155466], [35.210498306171, 58.4626356207654], [35.1750480681194, 58.4555541567479], [35.1257782457425, 58.4452109274858], [35.0923022340231, 58.4216918833547], [35.0964223585424, 58.4035805026552], [35.1075810291155, 58.3907480314961], [35.1098985991577, 58.3764563495697] ] + ] + }, + "properties" : { + "feature::id" : 590, + "id" : 88439, + "pfafstette" : 667461, + "lke_type" : "N", + "altitude" : 171, + "objectid" : 47574, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_47574", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 591, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.2944572880425, 57.8591232146127], [34.306560153818, 57.8663334325215], [34.2978907251419, 57.8746595174876], [34.2956589910273, 57.8811830479766], [34.3178904962461, 57.9055175334188], [34.3176329884636, 57.9260323200879], [34.3027833730086, 57.931697491302], [34.2754017121406, 57.9400664942318], [34.2432132393334, 57.9575770234389], [34.2242434993591, 57.9783922358542], [34.1865615271928, 57.9863749771104], [34.1663042483062, 57.9807098058964], [34.1852739882805, 57.9680060886285], [34.1992652444607, 57.9519118522249], [34.2170332814503, 57.9397231505219], [34.2381489196118, 57.9326416865043], [34.2628696667277, 57.9201096410914], [34.2826977659769, 57.9005390496246], [34.2727407983886, 57.8796380012818], [34.2748008606482, 57.8648313037905], [34.2944572880425, 57.8591232146127] ] + ] + }, + "properties" : { + "feature::id" : 591, + "id" : 91887, + "pfafstette" : 262379, + "lke_type" : "N", + "altitude" : 156, + "objectid" : 48303, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_48303", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 592, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.3217645577733, 58.0140570637246], [33.2956704358176, 58.0220827229445], [33.2554133858268, 58.022340230727], [33.2175597418055, 58.0265461911738], [33.2424521607764, 58.0165033876579], [33.2618510803882, 57.9995078740158], [33.2695763138619, 57.9789930873467], [33.2942112250504, 57.9665039598975], [33.3088891686504, 57.9691219556858], [33.3263138619301, 57.9777913843619], [33.3422793444424, 57.9896796603186], [33.3217645577733, 58.0140570637246] ] + ] + }, + "properties" : { + "feature::id" : 592, + "id" : 92712, + "pfafstette" : 246853, + "lke_type" : "N", + "altitude" : 196, + "objectid" : 48566, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_48566", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 593, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.8893975462369, 58.1424676112434], [33.949482695477, 58.1353861472258], [33.9602121864127, 58.1413517441861], [33.9394398919612, 58.1567592931698], [33.9295687603003, 58.1677462918879], [33.9469934535799, 58.1776174235488], [33.955491210401, 58.1852997390588], [33.940298251236, 58.1814800402857], [33.91626419154, 58.1784757828237], [33.8989253341879, 58.1787762085699], [33.8790113990112, 58.1799349935909], [33.8520589177806, 58.1811796145395], [33.8356642556308, 58.1666304248306], [33.8384110053104, 58.1508366141732], [33.8893975462369, 58.1424676112434] ] + ] + }, + "properties" : { + "feature::id" : 593, + "id" : 91236, + "pfafstette" : 26411, + "lke_type" : "N", + "altitude" : 152, + "objectid" : 48816, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_48816", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 594, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.5212129188793, 57.0284460263688], [36.5446461270829, 57.0156993911372], [36.5673926478667, 57.0064720289324], [36.5994094488189, 57.0281885185863], [36.6089372367698, 57.0644541979491], [36.5959760117195, 57.0858273438931], [36.5759762406153, 57.0834239379235], [36.5546030946713, 57.0667717679912], [36.5233588170665, 57.0599478117561], [36.4902261490569, 57.0650121314778], [36.474861518037, 57.0537247070134], [36.4814708844534, 57.0433385597876], [36.4980372184581, 57.0356562442776], [36.5212129188793, 57.0284460263688] ] + ] + }, + "properties" : { + "feature::id" : 594, + "id" : 94230, + "pfafstette" : 675677, + "lke_type" : "N", + "altitude" : 135, + "objectid" : 49142, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_49142", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 595, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.4110339223585, 57.6593830113532], [33.4197033510346, 57.6724300723311], [33.4173857809925, 57.6882238829885], [33.4200466947446, 57.7013138619301], [33.4003902673503, 57.70899617744], [33.3512921168284, 57.7024726469511], [33.3177302691815, 57.6870221800037], [33.3237387841055, 57.6760351812855], [33.3370433528658, 57.6757347555393], [33.3503479216261, 57.6700695843252], [33.3468286485992, 57.6447909036807], [33.3569572880425, 57.629040010987], [33.3884590734298, 57.6361643929683], [33.3966993224684, 57.6489968641275], [33.4110339223585, 57.6593830113532] ] + ] + }, + "properties" : { + "feature::id" : 595, + "id" : 94247, + "pfafstette" : 29479, + "lke_type" : "N", + "altitude" : 195, + "objectid" : 49185, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_49185", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 596, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [32.9698372550815, 57.6801982237685], [32.9663179820546, 57.6632027101264], [32.972927348471, 57.6418724821461], [32.9858885735213, 57.6350056079473], [33.0224546786303, 57.6543186916316], [33.0336991851309, 57.6780952435451], [33.02451474089, 57.6953053470061], [33.0400510437649, 57.7072365409266], [33.0570465574071, 57.7003696667277], [33.0706944698773, 57.6935457104926], [33.0915526002564, 57.6846187740341], [33.1052005127266, 57.6813999267534], [33.0972177714704, 57.6947044955136], [33.0869174601721, 57.7092966031862], [33.078591375206, 57.7208844533968], [33.0813381248856, 57.7331160730635], [33.0923251236037, 57.7473648370262], [33.0842565464201, 57.7592960309467], [33.0573040651895, 57.7601543902216], [33.0234847097601, 57.7578368201795], [33.0051158212782, 57.7545321369713], [33.0055450009156, 57.7346182017946], [32.9949013459074, 57.7129017121406], [32.9802234023073, 57.6947044955136], [32.9698372550815, 57.6801982237685] ] + ] + }, + "properties" : { + "feature::id" : 596, + "id" : 94278, + "pfafstette" : 2462275, + "altitude" : 223, + "objectid" : 49306, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_49306", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 597, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.5206349569676, 57.5463800128182], [34.5173731917231, 57.5529035433071], [34.5108496612342, 57.5681394204358], [34.5081887474821, 57.5877100119026], [34.5049269822377, 57.6099844350852], [34.4663008148691, 57.6287395852408], [34.4170309924922, 57.6248769685039], [34.3928252609412, 57.6085252243179], [34.3806365592382, 57.6011004165904], [34.3627826863212, 57.5945339681377], [34.3789198406885, 57.577624290423], [34.4147992583776, 57.5681394204358], [34.4282754989928, 57.5618304797656], [34.4141984068852, 57.5463800128182], [34.3678470060428, 57.541401529024], [34.3347143380333, 57.5404144158579], [34.3589200695843, 57.5288265656473], [34.3876751052921, 57.5252643746567], [34.4112799853507, 57.5255218824391], [34.4359148965391, 57.5184404184215], [34.463639901117, 57.5219596914485], [34.496858405054, 57.5288265656473], [34.5160856528108, 57.5362513733749], [34.5206349569676, 57.5463800128182] ] + ] + }, + "properties" : { + "feature::id" : 597, + "id" : 93662, + "pfafstette" : 2973, + "lke_type" : "N", + "altitude" : 159, + "objectid" : 49495, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_49495", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 598, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [38.7392991210401, 56.7554877769639], [38.7685691723128, 56.7365180369896], [38.7980967313679, 56.7349729902948], [38.8287401574803, 56.7438999267534], [38.8381821095037, 56.7686206738693], [38.824448361106, 56.7935989287676], [38.7914873649515, 56.8087060520051], [38.7477968778612, 56.8117103094671], [38.7223036073979, 56.790036737777], [38.7392991210401, 56.7554877769639] ] + ] + }, + "properties" : { + "feature::id" : 598, + "id" : 93159, + "pfafstette" : 674957, + "lke_type" : "N", + "altitude" : 134, + "objectid" : 50382, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_50382", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 599, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.0564457059147, 57.4349220609778], [33.0361025911005, 57.4241925700421], [33.0166178355613, 57.4132055713239], [33.0010815326863, 57.4027765061344], [32.9824551364219, 57.3875835469694], [32.9892361746933, 57.3700730177623], [33.0124977110419, 57.3825621452115], [33.0400510437649, 57.4016177211134], [33.066574345358, 57.4072399743637], [33.0802222578282, 57.4188278245743], [33.0908659128365, 57.4376258926936], [33.0908659128365, 57.4577544176891], [33.0816814685955, 57.4726469511079], [33.075415445889, 57.4960801593115], [33.0373901300128, 57.5151357352133], [33.0033991027285, 57.5282686321187], [32.9888928309833, 57.5371955685772], [32.9785066837576, 57.5240626716719], [32.987776963926, 57.5083117789782], [32.994300494415, 57.499170252701], [33.0200512726607, 57.4830330983336], [33.060565830434, 57.4634625068669], [33.0634842519685, 57.447411188427], [33.0564457059147, 57.4349220609778] ] + ] + }, + "properties" : { + "feature::id" : 599, + "id" : 95542, + "pfafstette" : 694811, + "lke_type" : "N", + "altitude" : 206, + "objectid" : 50839, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_50839", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 600, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.7253193096502, 56.045839246475], [37.738538042483, 56.0354101812855], [37.757250274675, 56.0285862250504], [37.7876361930049, 56.0247236083135], [37.8038591832997, 56.0291870765428], [37.7880653726424, 56.0475988829885], [37.7590528291522, 56.0645943966307], [37.7464349478117, 56.0675128181652], [37.7266068485625, 56.0681136696576], [37.7033453122139, 56.0806457150705], [37.6853197674419, 56.0898301593115], [37.6546763413294, 56.1014609274858], [37.6338182109504, 56.1055810520051], [37.6430884911188, 56.0925339910273], [37.6830880333272, 56.0749376258927], [37.7126155923823, 56.0569120811207], [37.7253193096502, 56.045839246475] ] + ] + }, + "properties" : { + "feature::id" : 600, + "id" : 98283, + "pfafstette" : 7299253, + "lke_type" : "N", + "altitude" : 157, + "objectid" : 51945, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_51945", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 601, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.108633949826, 57.0433385597876], [33.1384190166636, 57.0242829838857], [33.172581715803, 57.0269868156015], [33.1912081120674, 57.0406347280718], [33.1887188701703, 57.0570293902216], [33.1651998260392, 57.0638533464567], [33.1404790789233, 57.0736815601538], [33.1054580205091, 57.0873294726241], [33.075930461454, 57.0796042391503], [33.0864024446072, 57.0644541979491], [33.108633949826, 57.0433385597876] ] + ] + }, + "properties" : { + "feature::id" : 601, + "id" : 97959, + "pfafstette" : 69434, + "lke_type" : "N", + "altitude" : 217, + "objectid" : 52214, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_52214", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 602, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.2126670939388, 56.8908081166453], [33.2347269273027, 56.8842845861564], [33.2546408624794, 56.8935119483611], [33.2231390770921, 56.9190910547519], [33.1819378318989, 56.949949070683], [33.1470884453397, 56.951794543124], [33.0881191631569, 56.949949070683], [33.0272614905695, 56.9541121131661], [32.9802234023073, 56.9308934947812], [32.9584210767259, 56.9161297152536], [32.9562751785387, 56.9166018128548], [32.9507816791796, 56.9273742217543], [32.9443439846182, 56.9389620719648], [32.9261467679912, 56.9514082814503], [32.8937866233291, 56.9677600256363], [32.8634007049991, 56.9654424555942], [32.8434867698224, 56.9574167963743], [32.8144742263322, 56.9445843252152], [32.7828866050174, 56.933597326497], [32.7596250686688, 56.9410650521882], [32.7361060245376, 56.9467302234023], [32.7141320271013, 56.9656999633767], [32.6838319446988, 56.9921803470061], [32.6684673136788, 56.9966438152353], [32.6855486632485, 56.9992618110236], [32.7109560977843, 57.0242829838857], [32.7222006042849, 57.0463428172496], [32.7239173228347, 57.0573298159678], [32.7178229719832, 57.069475599707], [32.7011708020509, 57.0796042391503], [32.6817718824391, 57.0917929408533], [32.6579953305256, 57.1048829197949], [32.6374805438564, 57.1140673640359], [32.6288969511079, 57.1298182567295], [32.6238326313862, 57.150933894891], [32.6204850302143, 57.1777576222304], [32.612845632668, 57.2029933849112], [32.60082860282, 57.21754257462], [32.588983244827, 57.2347526780809], [32.576794543124, 57.2279287218458], [32.5871806903498, 57.2053109549533], [32.5883823933346, 57.176813427028], [32.5881248855521, 57.1530797930782], [32.6024594854422, 57.1307624519319], [32.6316437007874, 57.104539576085], [32.6635746658121, 57.0905912378685], [32.6745616645303, 57.0733811344076], [32.6676947903314, 57.0540251327596], [32.6650338765794, 57.0398192867607], [32.6675231184765, 57.0225233473723], [32.655248580846, 57.0076308139535], [32.643403222853, 56.9945837529757], [32.6594545412928, 56.9782320087896], [32.6806560153818, 56.9618802646036], [32.6958489745468, 56.9360436504303], [32.7222006042849, 56.9223528199963], [32.7421145394616, 56.9196919062443], [32.7414278520418, 56.9104216260758], [32.7439170939388, 56.8946707333822], [32.7607409357261, 56.8911085423915], [32.7619426387109, 56.9054002243179], [32.7733588170665, 56.9193056445706], [32.8128433437099, 56.9267733702619], [32.8503536440212, 56.9434255401941], [32.888464795825, 56.9553138161509], [32.918507370445, 56.9404212827321], [32.9379921259843, 56.9205502655191], [32.9562751785387, 56.9166018128548], [32.9570477018861, 56.9151855200513], [32.9584210767259, 56.9161297152536], [32.972584004761, 56.9130825398279], [33.0067467039004, 56.9285759247391], [33.066746017213, 56.9363011582128], [33.1210801593115, 56.9324385414759], [33.1467451016297, 56.9250137337484], [33.1684615912837, 56.9101641182934], [33.1883755264604, 56.9017951153635], [33.2126670939388, 56.8908081166453] ] + ] + }, + "properties" : { + "feature::id" : 602, + "id" : 97579, + "pfafstette" : 69715, + "lke_type" : "N", + "altitude" : 249, + "objectid" : 52460, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_52460", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 603, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [40.143231550998, 55.2067930553012], [40.1738749771104, 55.207994758286], [40.1896687877678, 55.2330588491119], [40.170441540011, 55.25941047885], [40.1476950192272, 55.2570929088079], [40.1303561618751, 55.2425008011353], [40.1416006683758, 55.2309129509247], [40.1476950192272, 55.2177800540194], [40.143231550998, 55.2067930553012] ] + ] + }, + "properties" : { + "feature::id" : 603, + "id" : 99617, + "pfafstette" : 9251, + "lke_type" : "N", + "altitude" : 109, + "objectid" : 53644, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_53644", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 604, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.0070671580297, 55.8894891045596], [35.0209725782824, 55.8760986998718], [35.0466375206006, 55.8730515244461], [35.0715299395715, 55.8704335286578], [35.0957356711225, 55.8909912332906], [35.0998557956418, 55.9123643792346], [35.0498134499176, 55.9105189067936], [35.0070671580297, 55.8894891045596] ] + ] + }, + "properties" : { + "feature::id" : 604, + "id" : 101565, + "pfafstette" : 68675, + "lke_type" : "N", + "altitude" : 209, + "objectid" : 55120, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_55120", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 605, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.4909357260575, 56.1148084142099], [34.4929099523897, 56.1127483519502], [34.5156564731734, 56.124636627907], [34.5171156839407, 56.1020617789782], [34.5024377403406, 56.0726200558506], [34.4917940853323, 56.0538219877312], [34.4632965574071, 56.0271270142831], [34.4481035982421, 56.009273141366], [34.4582322376854, 55.9854965894525], [34.49119323384, 55.9664410135506], [34.5165148324483, 55.950690120857], [34.533424510163, 55.9299178264054], [34.5382313221022, 55.9162699139352], [34.5263859641091, 55.9019782320088], [34.5347120490753, 55.8858839956052], [34.5691322559971, 55.8734377861198], [34.6152261490569, 55.8719356573888], [34.6475862937191, 55.8820213788683], [34.6765130012818, 55.882579312397], [34.6914484526643, 55.8701331029116], [34.6910192730269, 55.8564422724776], [34.6924784837942, 55.8367858450833], [34.6970277879509, 55.821979147592], [34.7097315052188, 55.8267430415675], [34.7346239241897, 55.8267430415675], [34.7626922724776, 55.832665720564], [34.7685291155466, 55.8510775270097], [34.7465551181102, 55.8629658029665], [34.7233794176891, 55.8778154184215], [34.6975428035158, 55.8921071003479], [34.6591741439297, 55.8942529985351], [34.6377151620582, 55.8837810153818], [34.6194321095037, 55.8751974226332], [34.5815784654825, 55.8766995513642], [34.5426947903314, 55.893094213514], [34.5414930873466, 55.9079009110053], [34.5480166178356, 55.9218921671855], [34.5432098058963, 55.9403039736312], [34.533424510163, 55.9486300585973], [34.5197765976927, 55.9608187603003], [34.5038969511078, 55.9745095907343], [34.4825238051639, 55.9754108679729], [34.4658716352316, 55.9866982924373], [34.4587472532503, 56.0113761215895], [34.4751419154001, 56.029487502289], [34.4939399835195, 56.0461396722212], [34.5078454037722, 56.0624914164073], [34.5137680827687, 56.072877563633], [34.5179740432155, 56.0919331395349], [34.5366004394799, 56.1201731596777], [34.5417505951291, 56.1364819859], [34.5396905328694, 56.1475119025819], [34.5283601904413, 56.1555375618019], [34.509047106757, 56.1522757965574], [34.5084462552646, 56.1371686733199], [34.5019227247757, 56.1249370536532], [34.4909357260575, 56.1148084142099] ] + ] + }, + "properties" : { + "feature::id" : 605, + "id" : 101167, + "pfafstette" : 6815, + "lke_type" : "N", + "altitude" : 188, + "objectid" : 55141, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_55141", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 606, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [45.3678927852042, 52.9873763962644], [45.3712403863761, 53.0031702069218], [45.3895234389306, 53.0275476103278], [45.4218835835928, 53.0332556995056], [45.4631706647134, 53.0413242766893], [45.4557887749496, 53.0676329884637], [45.4361323475554, 53.0715385231643], [45.4067764603553, 53.0692209531221], [45.3660043947995, 53.0531696346823], [45.3309833363853, 53.050723310749], [45.3066917689068, 53.0525687831899], [45.2714990386376, 53.0566889077092], [45.2263493407801, 53.0659162699139], [45.187637337484, 53.0736844213514], [45.1581956143563, 53.0885769547702], [45.1252346182018, 53.0878902673503], [45.1074665812122, 53.075916155466], [45.1321014924007, 53.053727568211], [45.1716718549716, 53.0313243911372], [45.2090104834279, 53.0251012863944], [45.2495250412013, 53.0190927714704], [45.2861769822377, 53.0128696667277], [45.3122711041934, 53.0051873512177], [45.3294382896905, 52.9638573521333], [45.3481505218824, 52.9418833546969], [45.3646310199597, 52.9651019730819], [45.3678927852042, 52.9873763962644] ] + ] + }, + "properties" : { + "feature::id" : 606, + "id" : 102052, + "pfafstette" : 47933, + "altitude" : 143, + "objectid" : 55455, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_55455", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 607, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [55.3896664988097, 48.744163156931], [55.411983839956, 48.7322319630104], [55.4240867057315, 48.7292706235122], [55.4446014924006, 48.7476824299579], [55.4362754074345, 48.7762657938107], [55.4012543490203, 48.7759653680644], [55.3768769456143, 48.7640341741439], [55.3691517121406, 48.7578110694012], [55.3896664988097, 48.744163156931] ] + ] + }, + "properties" : { + "feature::id" : 607, + "id" : 103427, + "pfafstette" : 655, + "altitude" : 72, + "objectid" : 56378, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_56378", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 608, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.2344064731734, 56.0821478438015], [31.2617022981139, 56.0559678859183], [31.312603003113, 56.0618905649148], [31.3191265336019, 56.0836070545688], [31.2832471159128, 56.0890147180004], [31.2593847280718, 56.0958386742355], [31.2407583318074, 56.1133492034426], [31.234148965391, 56.1291000961362], [31.2287413019594, 56.1406879463468], [31.2168101080388, 56.1511170115363], [31.1951794543124, 56.1587993270463], [31.1541498809742, 56.1716317982055], [31.1320900476103, 56.1733485167552], [31.1202446896173, 56.1596576863212], [31.1320900476103, 56.1448509888299], [31.1659952389672, 56.1195723081853], [31.1922610327779, 56.1062248214613], [31.2196426936459, 56.1038214154917], [31.2344064731734, 56.0821478438015] ] + ] + }, + "properties" : { + "feature::id" : 608, + "id" : 103151, + "pfafstette" : 94421, + "altitude" : 165, + "objectid" : 56440, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_56440", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 609, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.0389695110786, 56.1306022248672], [30.0488406427394, 56.1062248214613], [30.0654069767442, 56.100602568211], [30.0856642556308, 56.1020617789782], [30.1037756363304, 56.1035209897455], [30.1263504852591, 56.103263481963], [30.1560497161692, 56.1127483519502], [30.1533029664897, 56.1284992446438], [30.1304706097784, 56.1219757141549], [30.1043764878228, 56.1186710309467], [30.0776815143747, 56.1380270325948], [30.0538191265336, 56.148670687603], [30.0389695110786, 56.1306022248672] ] + ] + }, + "properties" : { + "feature::id" : 609, + "id" : 103934, + "pfafstette" : 249643, + "lke_type" : "N", + "altitude" : 149, + "objectid" : 57028, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_57028", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 610, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.1689136605017, 56.2592702801685], [31.1753513550632, 56.25], [31.1774114173228, 56.2471244964292], [31.1860808459989, 56.2370816929134], [31.1948361106025, 56.2257084325215], [31.2202435451383, 56.1909448818898], [31.2495135964109, 56.1621040102545], [31.2653932429958, 56.1674258377586], [31.2544062442776, 56.1811166681926], [31.2606722669841, 56.193906221388], [31.2838479674053, 56.2165669062443], [31.2998134499176, 56.2385409036806], [31.3210149240066, 56.238154642007], [31.3381821095038, 56.2400001144479], [31.3391263047061, 56.25], [31.339984663981, 56.2581114951474], [31.3241908533236, 56.2738623878411], [31.3156930965025, 56.2842914530306], [31.2989550906427, 56.2878536440212], [31.2716592657023, 56.287553218275], [31.2614447903315, 56.2816305392785], [31.2439342611243, 56.2762657938107], [31.2217027559055, 56.269699345358], [31.2050505859733, 56.2596565418422], [31.182389901117, 56.2619741118843], [31.1689136605017, 56.2592702801685] ] + ] + }, + "properties" : { + "feature::id" : 610, + "line::hidden" : [ + { "contour" : 0, "segments" : [ { "from" : 18, "to" : 19 } ] } + ], + "id" : 102655, + "pfafstette" : 94413, + "lke_type" : "N", + "altitude" : 162, + "objectid" : 57361, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_57361", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 611, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [57.8032011078557, 47.0318651574803], [57.8257759567845, 47.0333243682476], [57.8398530488922, 47.053281221388], [57.8291235579564, 47.0743968595495], [57.819338262223, 47.1139672221205], [57.798480131844, 47.1592027559055], [57.771098470976, 47.1641812396997], [57.771098470976, 47.1490741164622], [57.786634773851, 47.1222503891229], [57.7932441402674, 47.0833237960081], [57.7939308276873, 47.0494615226149], [57.8032011078557, 47.0318651574803] ] + ] + }, + "properties" : { + "feature::id" : 611, + "id" : 104970, + "pfafstette" : 861, + "altitude" : 96, + "objectid" : 57538, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_57538", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 612, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [50.0004577916133, 50.1313575810291], [49.993161737777, 50.1394261582128], [49.9607157571873, 50.1266366050174], [49.9343641274492, 50.1046196896173], [49.9286131203076, 50.086808734664], [49.9226046053836, 50.0659935222487], [49.9099008881157, 50.0570236678264], [49.8881843984618, 50.0433328373924], [49.8815750320454, 50.0124748214613], [49.8664679088079, 49.9925608862846], [49.8468973173412, 49.9759087163523], [49.8542792071049, 49.9542351446621], [49.8606310657389, 49.9363383537814], [49.8705880333272, 49.90685371269], [49.8938495696759, 49.8840213559788], [49.9026906702069, 49.8923474409449], [49.9092142006958, 49.912862227614], [49.9236346365135, 49.915523141366], [49.9277547610328, 49.8837209302325], [49.935565830434, 49.8463393838125], [49.9523896722212, 49.8349661234206], [49.9636341787218, 49.8468543993774], [49.9755653726424, 49.8504595083318], [49.9859515198682, 49.849257805347], [49.9755653726424, 49.8697725920161], [49.9717027559055, 49.8917465894525], [49.9586556949277, 49.9137635048526], [49.9236346365135, 49.9318748855521], [49.9118751144479, 49.941402673503], [49.8982272019777, 49.9523896722212], [49.8890427577367, 49.96728220564], [49.9179694652994, 49.9708443966306], [49.9450936183849, 49.9538488829885], [49.9685268265885, 49.9464240752609], [49.9910158395898, 49.9616170344259], [49.998998580846, 49.9844923091009], [50.0195133675151, 50.0074534197033], [50.0317879051456, 50.030886627907], [50.0161657663432, 50.0606716947445], [49.9755653726424, 50.0826456921809], [49.9621749679546, 50.0939331166453], [49.9743636696576, 50.1123878410547], [49.9882690899103, 50.1248769685039], [50.0004577916133, 50.1313575810291] ] + ] + }, + "properties" : { + "feature::id" : 612, + "id" : 106691, + "pfafstette" : 75, + "altitude" : 2, + "objectid" : 59007, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_59007", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 613, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [53.7255653726424, 48.53832860282], [53.7330330983336, 48.5398736495147], [53.7512303149606, 48.5440796099615], [53.7781827961912, 48.5547661829335], [53.803246887017, 48.5654527559055], [53.8174956509797, 48.5716758606482], [53.7885689434169, 48.5725771378868], [53.7473676982238, 48.5693582906061], [53.7295138253067, 48.5571266709394], [53.7255653726424, 48.53832860282] ] + ] + }, + "properties" : { + "feature::id" : 613, + "id" : 106591, + "pfafstette" : 43, + "altitude" : 16, + "objectid" : 59040, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_59040", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 614, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [49.8435497161692, 50.2334164988097], [49.856940120857, 50.2125154504669], [49.8730772752243, 50.2021722212049], [49.9128193096503, 50.1935027925288], [49.9404584783007, 50.1932452847464], [49.9457803058048, 50.2065927714704], [49.956767304523, 50.2229015976927], [49.9658659128365, 50.2390387520601], [49.9482695477019, 50.251227453763], [49.9252655191357, 50.2553904962461], [49.9060382713789, 50.2402404550449], [49.8884419062443, 50.2369357718366], [49.8608885735213, 50.2595106207654], [49.8396012635049, 50.2827292391503], [49.820717359458, 50.2970209210767], [49.7880997070134, 50.2955187923457], [49.7666407251419, 50.2762057086614], [49.79333569859, 50.2535879417689], [49.8435497161692, 50.2334164988097] ] + ] + }, + "properties" : { + "feature::id" : 614, + "id" : 106421, + "pfafstette" : 81, + "altitude" : 5, + "objectid" : 59180, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_59180", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 615, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [52.4477259201611, 49.153815120857], [52.460429637429, 49.1333003341879], [52.4840345174876, 49.1329999084417], [52.4863520875297, 49.1517550585973], [52.4687557223952, 49.1627420573155], [52.4521893883904, 49.1787933757553], [52.4272969694195, 49.207891755173], [52.4016320271012, 49.2159603323567], [52.406009659403, 49.2016686504303], [52.4221468137704, 49.1841581212232], [52.4331338124885, 49.1716260758103], [52.4477259201611, 49.153815120857] ] + ] + }, + "properties" : { + "feature::id" : 615, + "id" : 106547, + "pfafstette" : 263, + "altitude" : -6, + "objectid" : 59184, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_59184", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 616, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [49.4014946896173, 50.4162041063908], [49.4226103277788, 50.4126848333638], [49.4371165995239, 50.438864791247], [49.4162584691448, 50.4715682796191], [49.3800357077458, 50.4786497436367], [49.3633835378136, 50.4703236586706], [49.3735121772569, 50.4527702114997], [49.3965162058231, 50.4382210217909], [49.40037882256, 50.4289507416224], [49.4014946896173, 50.4162041063908] ] + ] + }, + "properties" : { + "feature::id" : 616, + "id" : 106349, + "pfafstette" : 83, + "altitude" : 9, + "objectid" : 59301, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_59301", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 617, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [49.4901632027101, 50.0190412699139], [49.5073303882073, 50.0151357352133], [49.5317077916133, 50.0344488188976], [49.5319652993957, 50.0470237822743], [49.5278451748764, 50.0600708432521], [49.5209783006775, 50.0719162012452], [49.5017510529207, 50.0885683711774], [49.4841546877861, 50.0956927531588], [49.4746268998352, 50.0814439891961], [49.4862147500458, 50.0752208844534], [49.5007210217909, 50.0677531587621], [49.4960858817066, 50.0463800128182], [49.4901632027101, 50.0190412699139] ] + ] + }, + "properties" : { + "feature::id" : 617, + "id" : 107352, + "pfafstette" : 0, + "altitude" : 4, + "objectid" : 59679, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_59679", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 618, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.0678618842703, 54.3366313404138], [33.0649434627358, 54.3363309146676], [33.0611666819264, 54.3240992950009], [33.0680335561253, 54.3021252975645], [33.102797106757, 54.2890782365867], [33.1342988921443, 54.2824688701703], [33.1506077183666, 54.2655162744919], [33.166401529024, 54.2548297015199], [33.1928389946896, 54.2432418513093], [33.2115512268815, 54.2227270646402], [33.2309501464933, 54.2081349569676], [33.2427955044864, 54.1977488097418], [33.2579026277239, 54.1778777925288], [33.2807349844351, 54.166504532137], [33.2979021699323, 54.1673628914118], [33.3237387841055, 54.1745731093206], [33.2924945065007, 54.199551364219], [33.2454564182384, 54.2191219556858], [33.2324093572606, 54.2257313221022], [33.2121520783739, 54.2354736998718], [33.2080319538546, 54.2491645303058], [33.1953282365867, 54.2584348104743], [33.1779893792346, 54.2681771882439], [33.1586762955503, 54.2822542803516], [33.1155008240249, 54.290537447354], [33.0854582494049, 54.2982197628639], [33.0680335561253, 54.3092067615821], [33.066746017213, 54.3234984435085], [33.0678618842703, 54.3366313404138] ] + ] + }, + "properties" : { + "feature::id" : 618, + "id" : 108661, + "pfafstette" : 299773, + "lke_type" : "N", + "altitude" : 195, + "objectid" : 60494, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_60494", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 619, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [50.7510071415492, 49.2370759705182], [50.736672541659, 49.2335137795275], [50.7446552829152, 49.2141577778795], [50.7780454587072, 49.1945871864127], [50.818474180553, 49.191540010987], [50.8309203900384, 49.2035141228713], [50.8054271195751, 49.2151019730819], [50.7739253341879, 49.2263035616187], [50.7510071415492, 49.2370759705182] ] + ] + }, + "properties" : { + "feature::id" : 619, + "id" : 108665, + "pfafstette" : 0, + "altitude" : -4, + "objectid" : 60512, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_60512", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 620, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [49.0065635872551, 49.7612330617103], [49.043473036074, 49.7502460629921], [49.0779790789233, 49.7615334874565], [49.0912836476836, 49.7799882118659], [49.0717988921443, 49.7862542345724], [49.0568634407618, 49.7953957608497], [49.0657903772203, 49.8076273805164], [49.0730005951291, 49.8150521882439], [49.0446747390588, 49.8361678264054], [49.001241759751, 49.8537212735763], [48.9825295275591, 49.8498586568394], [48.9924006592199, 49.8382708066288], [49.0033876579381, 49.826382530672], [49.015919703351, 49.8129921259842], [49.0065635872551, 49.7895159998169], [49.0065635872551, 49.7612330617103] ] + ] + }, + "properties" : { + "feature::id" : 620, + "id" : 108849, + "pfafstette" : 743, + "altitude" : 1, + "objectid" : 61110, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_61110", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 621, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [53.4030797930782, 47.4190281084051], [53.3875434902032, 47.4210881706647], [53.3879726698407, 47.4350794268449], [53.4213628456327, 47.443748855521], [53.4562980681194, 47.4398433208204], [53.4944092199231, 47.433233954404], [53.5240226149057, 47.4300151071232], [53.5549235488006, 47.4288563221022], [53.5812751785387, 47.4353798525911], [53.5623912744918, 47.4493281908075], [53.5436790422999, 47.4514311710309], [53.5326062076543, 47.4528903817982], [53.5124347646951, 47.4597143380333], [53.4895165720564, 47.467782915217], [53.464881660868, 47.4698429774767], [53.4511479124702, 47.4597143380333], [53.4404184215345, 47.4504869758286], [53.4259121497894, 47.4517315967772], [53.3977579655741, 47.464778657755], [53.367715390954, 47.4650790835012], [53.3469430965025, 47.4689417002381], [53.3313209577, 47.4858513779528], [53.3205914667643, 47.4873535066838], [53.3132095770005, 47.4748643792346], [53.3149262955503, 47.4570534242813], [53.3022225782824, 47.4484269135689], [53.2847120490752, 47.4597143380333], [53.2722658395898, 47.4686412744919], [53.2644547701886, 47.4773107031679], [53.2409357260575, 47.4989842748581], [53.2086614173228, 47.5028039736312], [53.1827389672221, 47.4986838491119], [53.1494346273576, 47.4968812946347], [53.1237696850393, 47.4713021882439], [53.1268597784288, 47.4511307452848], [53.1332974729903, 47.4433625938473], [53.1146710767259, 47.4385986998718], [53.095615500824, 47.4371394891046], [53.1047141091375, 47.4258520646402], [53.0974180553012, 47.4098007462003], [53.071581441128, 47.4035776414576], [53.0549292711957, 47.4008738097418], [53.0429980772752, 47.388985533785], [53.0322685863395, 47.3797581715803], [53.0278051181102, 47.3690286806446], [53.0522683574437, 47.3625480681194], [53.0678904962461, 47.3544794909357], [53.0419680461454, 47.3414324299579], [53.0210240798388, 47.3267974043216], [53.0305518677898, 47.3191150888116], [53.0444572880425, 47.3057246841238], [53.0589635597876, 47.2929780488921], [53.0854868613807, 47.2857678309833], [53.107460858817, 47.2816047885003], [53.1235121772569, 47.2888150064091], [53.1362158945248, 47.2982998763963], [53.1152719282183, 47.310188152353], [53.0898644936825, 47.3063255356162], [53.0771607764146, 47.3066259613624], [53.1125251785387, 47.3246944240981], [53.1570740249038, 47.3244798342794], [53.1699494140267, 47.3143511948361], [53.1931251144479, 47.3036646218641], [53.1993911371544, 47.2810039370079], [53.1860865683941, 47.2700169382897], [53.1792196941952, 47.2563690258195], [53.1711511170115, 47.2423777696393], [53.1655717817249, 47.2316911966673], [53.1987044497345, 47.221562557224], [53.246858405054, 47.2453820271013], [53.2593904504669, 47.2751670939388], [53.249862662516, 47.3022054110969], [53.2783601904413, 47.3241794085332], [53.3155271470427, 47.3205742995788], [53.3290033876579, 47.3232352133309], [53.3429946438381, 47.3292437282549], [53.3599043215528, 47.3348659815052], [53.3898610602454, 47.3458529802234], [53.4304614539462, 47.349758514924], [53.4511479124702, 47.3557241118843], [53.4702034883721, 47.3625480681194], [53.4942375480681, 47.3595008926936], [53.5077137886834, 47.3607455136422], [53.5314903405969, 47.3678698956235], [53.5514042757736, 47.3776981093206], [53.5766400384545, 47.3842216398096], [53.6000732466581, 47.387826748764], [53.5927771928218, 47.4005304660319], [53.5791292803516, 47.4017321690167], [53.5638504852591, 47.3963674235488], [53.5364688243911, 47.4095003204541], [53.4975851492401, 47.4228478071782], [53.4623924189709, 47.4193285341513], [53.4494311939205, 47.4077406839407], [53.4290022431789, 47.4021184306904], [53.397929637429, 47.4002729582494], [53.3874576542758, 47.4056377037173], [53.4053973631203, 47.4148221479582], [53.4277147042666, 47.423706166453], [53.4247962827321, 47.4356802783373], [53.4143242995788, 47.4309163843618], [53.4030797930782, 47.4190281084051] ], + [ [53.2932098058963, 47.3598871543673], [53.3027375938473, 47.3586425334188], [53.2757851126167, 47.3455954724409], [53.2312362662516, 47.3434924922175], [53.2124381981322, 47.3565824711591], [53.2099489562351, 47.37413591833], [53.2096914484526, 47.3928481505219], [53.2206784471708, 47.4047364264787], [53.2362147500458, 47.4031913797839], [53.2541544588903, 47.399672106757], [53.2697765976927, 47.388985533785], [53.2784460263688, 47.3664106848563], [53.2932098058963, 47.3598871543673] ] + ] + }, + "properties" : { + "feature::id" : 621, + "id" : 110207, + "name" : "North Caspian swamp", + "pfafstette" : 311, + "altitude" : -26, + "objectid" : 61783, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 622, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [57.4697285295734, 45.5872894158579], [57.4755653726424, 45.6033407342977], [57.4702435451383, 45.6247567982055], [57.4667242721113, 45.6538122596594], [57.4480120399194, 45.6734686870536], [57.4134201611427, 45.6826960492584], [57.3688713147775, 45.68776036898], [57.3403737868522, 45.6922238372093], [57.3177989379235, 45.6945843252152], [57.2785719190625, 45.7028674922175], [57.2345380882622, 45.7150991118843], [57.1976286394433, 45.713639901117], [57.169646127083, 45.7195625801135], [57.1489596685589, 45.7317512818165], [57.121234663981, 45.7314508560703], [57.0929946438381, 45.7216226423732], [57.0644971159128, 45.709133514924], [57.0456990477935, 45.6927388527742], [57.0338536898004, 45.6784900888116], [57.0183173869255, 45.6799922175426], [56.9990043032412, 45.6859148965391], [56.9775453213697, 45.6672455823109], [56.9824379692364, 45.6351429454312], [57.0061286852225, 45.6247138802417], [57.0617503662333, 45.6130831120674], [57.1506763871086, 45.5955725828603], [57.2097315052188, 45.6024394570591], [57.2534219923091, 45.6095638390405], [57.2951382530672, 45.5997356253433], [57.335910318623, 45.591452458341], [57.3786566105109, 45.5916670481597], [57.4060382713789, 45.5851435176708], [57.4366816974913, 45.573255241714], [57.453591375206, 45.5744569446988], [57.4697285295734, 45.5872894158579] ] + ] + }, + "properties" : { + "feature::id" : 622, + "id" : 110062, + "pfafstette" : 6551, + "altitude" : 62, + "objectid" : 61873, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_61873", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 623, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [57.1987445065007, 45.9484869987182], [57.2104181926387, 45.9315344030397], [57.2484435085149, 45.9178435726057], [57.290331441128, 45.9149251510712], [57.3201165079656, 45.917628982787], [57.3219190624428, 45.9368991485076], [57.2868980040286, 45.9592164896539], [57.2559112342062, 45.9678430003662], [57.2222635506318, 45.9746669566014], [57.1978861472258, 45.9666412973814], [57.1987445065007, 45.9484869987182] ] + ] + }, + "properties" : { + "feature::id" : 623, + "id" : 109603, + "pfafstette" : 6953, + "altitude" : 69, + "objectid" : 62226, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_62226", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 624, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [56.25, 45.8357415079656], [56.2412447353964, 45.8364281953855], [56.2352362204724, 45.8625652353049], [56.2321461270829, 45.8890456189343], [56.2239058780443, 45.9041956601355], [56.2429614539461, 45.9151826588537], [56.25, 45.9140238738326], [56.268197216627, 45.9110196163706], [56.2860510895441, 45.9190881935543], [56.2869094488189, 45.9419634682293], [56.2646779436001, 45.9454827412562], [56.25, 45.9454827412562], [56.2352362204724, 45.9454827412562], [56.2070820362571, 45.9508904046878], [56.1897431789049, 45.9455685771837], [56.1819321095037, 45.9499462094854], [56.1698292437282, 45.9583152124153], [56.1615031587621, 45.9484869987182], [56.1754085790148, 45.9333369575169], [56.1894856711225, 45.9190881935543], [56.1834771561985, 45.9008909769273], [56.1814170939388, 45.8634235945797], [56.1493144570591, 45.827157915217], [56.1056239699689, 45.811793284197], [56.1088857352133, 45.8004200238052], [56.144335973265, 45.7962569813221], [56.1960950375389, 45.8102482375023], [56.2387554934993, 45.8203768769456], [56.25, 45.8164284242813], [56.274205731551, 45.8078877494964], [56.3029607672588, 45.8075444057865], [56.3315441311115, 45.8155700650064], [56.3561790423, 45.8250978529573], [56.3512005585058, 45.8378874061527], [56.3283682017946, 45.8334239379235], [56.3029607672588, 45.8281450283831], [56.2824459805896, 45.8337672816334], [56.2649354513825, 45.8345827229445], [56.25, 45.8357415079656] ] + ] + }, + "properties" : { + "feature::id" : 624, + "id" : 110725, + "pfafstette" : 73799, + "altitude" : 14, + "objectid" : 62290, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_62290", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 625, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [56.4313713147775, 45.9202469785754], [56.4156633400476, 45.9145388893975], [56.4172083867424, 45.9020926799121], [56.4758343252152, 45.8932086614173], [56.534288591833, 45.9000326176524], [56.5372070133675, 45.9217491073064], [56.52244323384, 45.9466415262772], [56.5096536806446, 45.9666412973814], [56.5001258926937, 45.9702034883721], [56.49205731551, 45.9556542986633], [56.4685382713789, 45.9327361060245], [56.4313713147775, 45.9202469785754] ] + ] + }, + "properties" : { + "feature::id" : 625, + "id" : 110369, + "pfafstette" : 7453, + "altitude" : -2, + "objectid" : 62301, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_62301", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 626, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [48.5698303882073, 49.2296082448269], [48.5944652993957, 49.2082780168467], [48.6294005218824, 49.1992652444607], [48.6433059421351, 49.2111964383812], [48.6389283098334, 49.2296082448269], [48.6391858176158, 49.2540285661967], [48.6362673960813, 49.2712386696576], [48.5996154550449, 49.2769038408716], [48.5550666086797, 49.2926547335653], [48.523478987365, 49.2888350347922], [48.5273416041018, 49.2623546511628], [48.556525819447, 49.2457453991943], [48.5698303882073, 49.2296082448269] ] + ] + }, + "properties" : { + "feature::id" : 626, + "id" : 110652, + "pfafstette" : 4237, + "altitude" : -7, + "objectid" : 62441, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_62441", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 627, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [47.7621143105658, 49.6438095129097], [47.7517281633401, 49.6363417872184], [47.7546465848746, 49.6205908945248], [47.7737021607764, 49.6182304065189], [47.7948177989379, 49.6199900430324], [47.8046889305988, 49.6108055987914], [47.8206544131111, 49.5968143426112], [47.8500961362388, 49.6063421305622], [47.8569630104377, 49.634582150705], [47.8388516297382, 49.6562557223952], [47.8135300311298, 49.6601612570958], [47.7902684947812, 49.6572428355612], [47.773444652994, 49.6512343206372], [47.7621143105658, 49.6438095129097] ] + ] + }, + "properties" : { + "feature::id" : 627, + "id" : 110412, + "pfafstette" : 479, + "altitude" : 7, + "objectid" : 62473, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_62473", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 628, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [48.1137841054752, 49.4648416041018], [48.132839681377, 49.4496486449368], [48.1670023805164, 49.4514082814503], [48.1912081120674, 49.4653995376305], [48.2036543215528, 49.4630390496246], [48.217817249588, 49.4582751556491], [48.2463147775133, 49.4653995376305], [48.2829667185497, 49.4567730269181], [48.293438701703, 49.43776036898], [48.2951554202527, 49.4270737960081], [48.3083741530855, 49.4369020097052], [48.2985030214247, 49.4612364951474], [48.2805633125801, 49.4820517075627], [48.2583318073613, 49.4975450924739], [48.2303492950009, 49.5038111151804], [48.1858004486358, 49.5005064319722], [48.1364447903314, 49.4954421122505], [48.1174750503571, 49.4841546877861], [48.1137841054752, 49.4648416041018] ] + ] + }, + "properties" : { + "feature::id" : 628, + "id" : 110431, + "pfafstette" : 4781, + "altitude" : 0, + "objectid" : 62532, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_62532", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 629, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [56.1189285387292, 46.0531639122871], [56.1279413111152, 46.0477991668193], [56.1599581120674, 46.0409752105841], [56.1826187969236, 46.0436361243362], [56.1633057132393, 46.0632496337667], [56.1245078740157, 46.093249290423], [56.122791155466, 46.1238927165354], [56.1513745193188, 46.1375835469694], [56.1644215802966, 46.146167139718], [56.1337781541842, 46.1580983336385], [56.0990146035524, 46.1420470151987], [56.092748580846, 46.1131632255997], [56.1028772202893, 46.0971548251236], [56.1184135231642, 46.0730778474638], [56.1189285387292, 46.0531639122871] ] + ] + }, + "properties" : { + "feature::id" : 629, + "id" : 110358, + "pfafstette" : 75111, + "altitude" : 92, + "objectid" : 62598, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_62598", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 630, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [39.7211762955503, 52.584462552646], [39.7321632942684, 52.5723167689068], [39.7640084233657, 52.5711579838857], [39.7937076542758, 52.5672524491851], [39.81370742538, 52.5631323246658], [39.8056388481963, 52.5791836431057], [39.7658968137704, 52.6005997070134], [39.7480429408533, 52.6139471937374], [39.7428927852042, 52.62853930141], [39.7155969602637, 52.625535043948], [39.6965413843618, 52.6047627494964], [39.7089875938473, 52.5943766022707], [39.7211762955503, 52.584462552646] ] + ] + }, + "properties" : { + "feature::id" : 630, + "id" : 109379, + "pfafstette" : 96411, + "lke_type" : "N", + "altitude" : 105, + "objectid" : 62615, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_62615", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 631, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [57.6408853689801, 45.8099478117561], [57.6860350668376, 45.7861283418788], [57.7066356894342, 45.7834674281267], [57.7282663431606, 45.7799052371361], [57.7551329884637, 45.7728237731185], [57.7868922816334, 45.7697765976927], [57.8201966214979, 45.7802056628823], [57.8156473173412, 45.8176730452298], [57.7898107031679, 45.8524795138253], [57.7761627906977, 45.8718355154734], [57.7649182841971, 45.8958695751694], [57.7441459897455, 45.9033373008606], [57.7164209851676, 45.9118779756455], [57.692644433254, 45.9169852133309], [57.6775373100165, 45.9068565738876], [57.6359068851859, 45.9056548709028], [57.5948773118477, 45.9107621085882], [57.5847486724043, 45.8902473219191], [57.589812992126, 45.8640244460722], [57.6055209668559, 45.8468143426112], [57.6408853689801, 45.8099478117561] ] + ] + }, + "properties" : { + "feature::id" : 631, + "id" : 109116, + "pfafstette" : 681, + "altitude" : 69, + "objectid" : 62683, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_62683", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 632, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [51.8492778337301, 48.4209479719831], [51.8718526826588, 48.4194458432521], [51.8947708752976, 48.4150252929866], [51.9135689434169, 48.4078579930416], [51.9321095037539, 48.4108193325398], [51.9663580388207, 48.4152828007691], [52.0000057223952, 48.4343383766709], [52.0014649331624, 48.4637371818348], [51.9867869895623, 48.4931789049624], [51.9565727430873, 48.5151958203626], [51.9221525361655, 48.5264832448269], [51.8786337209302, 48.5214189251053], [51.8450718732833, 48.5086722898736], [51.8472177714704, 48.4887154367332], [51.8552005127266, 48.4598316471342], [51.8498786852225, 48.4376430598791], [51.8492778337301, 48.4209479719831] ] + ] + }, + "properties" : { + "feature::id" : 632, + "id" : 109366, + "pfafstette" : 25413, + "altitude" : -27, + "objectid" : 62904, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_62904", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 633, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [55.6103506683757, 45.533684879143], [55.6227968778612, 45.5266034151254], [55.6574745925654, 45.5334702893243], [55.7007359000183, 45.532526094122], [55.7369586614173, 45.535530351584], [55.7688037905145, 45.539693394067], [55.7966146310199, 45.5456589910273], [55.835669978026, 45.5477190532869], [55.8790171214063, 45.5557876304706], [55.8945534242813, 45.5757015656473], [55.8745536531771, 45.5810663111152], [55.8506054294085, 45.5744569446988], [55.8318073612891, 45.5646287310016], [55.8124942776048, 45.5646287310016], [55.7771298754807, 45.5670321369712], [55.7395337392419, 45.5688346914485], [55.7048560245376, 45.5720964566929], [55.6672598882988, 45.5738560932064], [55.6501785387292, 45.5684913477385], [55.6267453305255, 45.5533413065373], [55.6103506683757, 45.533684879143] ] + ] + }, + "properties" : { + "feature::id" : 633, + "id" : 111943, + "pfafstette" : 6471, + "altitude" : 79, + "objectid" : 63091, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_63091", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 634, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [39.1406679179637, 51.5498821186596], [39.1810108038821, 51.5591094808643], [39.2156026826588, 51.5962764374657], [39.2268471891595, 51.6435720335104], [39.2413534609046, 51.6758892602088], [39.2576622871269, 51.7038717725691], [39.2651300128182, 51.7282920939388], [39.2580914667643, 51.7421975141915], [39.2763745193188, 51.7684203900385], [39.2824688701703, 51.7894931102362], [39.2551730452298, 51.7883343252152], [39.2330273759385, 51.762154367332], [39.2336282274309, 51.7312105154734], [39.226589681377, 51.6845586888848], [39.1972337941769, 51.6319841832998], [39.1878776780809, 51.6042591787219], [39.1882210217909, 51.5864482237685], [39.1706246566563, 51.580525544772], [39.1592943142282, 51.573358244827], [39.1486506592199, 51.5603111838491], [39.1406679179637, 51.5498821186596] ] + ] + }, + "properties" : { + "feature::id" : 634, + "id" : 111737, + "pfafstette" : 9613, + "lke_type" : "N", + "altitude" : 90, + "objectid" : 63313, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_63313", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 635, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [54.2081349569676, 46.4922575993408], [54.223928767625, 46.492558025087], [54.2349157663431, 46.5077080662882], [54.2295081029115, 46.522600599707], [54.2271905328694, 46.5374931331258], [54.2245296191174, 46.5481797060978], [54.2150018311664, 46.5704541292804], [54.2012680827687, 46.5942306811939], [54.1950878959897, 46.6031576176524], [54.1828991942867, 46.6124278978209], [54.1626419154001, 46.6129858313496], [54.1804099523897, 46.5859475141915], [54.2060748947079, 46.5466775773668], [54.2063324024904, 46.514918284197], [54.2081349569676, 46.4922575993408] ] + ] + }, + "properties" : { + "feature::id" : 635, + "id" : 111497, + "pfafstette" : 0, + "altitude" : -19, + "objectid" : 63621, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_63621", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 636, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [46.0950947628639, 49.3872030076909], [46.082906061161, 49.3794777742172], [46.070717359458, 49.3637268815235], [46.0588720014649, 49.3637268815235], [46.046683299762, 49.368490775499], [46.0253959897455, 49.3479759888299], [46.0239367789782, 49.3220964566929], [46.0516617835561, 49.3090064777513], [46.0789576084966, 49.3054872047244], [46.1028199963377, 49.3257015656473], [46.1120902765061, 49.357804202527], [46.1057384178722, 49.3789198406885], [46.0950947628639, 49.3872030076909] ] + ] + }, + "properties" : { + "feature::id" : 636, + "id" : 112509, + "pfafstette" : 94, + "altitude" : 12, + "objectid" : 63718, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_63718", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 637, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.8381134407618, 53.4375], [29.8386284563267, 53.4360407892327], [29.8408601904413, 53.4375], [29.8591432429958, 53.4493882759568], [29.8564823292437, 53.4782720655558], [29.8576840322285, 53.4990443600073], [29.8686710309467, 53.5171986586706], [29.8510746658121, 53.5453957608497], [29.8348516755173, 53.5562969236404], [29.8296156839407, 53.5278852316425], [29.8402593389489, 53.5126922724776], [29.8315899102729, 53.501104422267], [29.8256672312763, 53.4865981505219], [29.8298731917231, 53.4687442776048], [29.8328774491851, 53.4517916819264], [29.8381134407618, 53.4375] ] + ] + }, + "properties" : { + "feature::id" : 637, + "id" : 112307, + "pfafstette" : 9233, + "lke_type" : "N", + "altitude" : 139, + "objectid" : 63853, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_63853", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 638, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [55.3370490752609, 45.5414530305805], [55.3494952847464, 45.5468177760483], [55.3754177348471, 45.5515816700238], [55.3906106940121, 45.5673325627174], [55.4055461453946, 45.588448200879], [55.4161898004028, 45.6116239013001], [55.4165331441128, 45.6360013047061], [55.4191940578648, 45.6639408991027], [55.3962758652261, 45.6871595174876], [55.3777353048892, 45.6865157480315], [55.3732718366599, 45.6651855200513], [55.366919978026, 45.6428252609412], [55.3527570499908, 45.6241559467131], [55.3361907159861, 45.6092634132943], [55.3240020142831, 45.6059587300861], [55.3040022431789, 45.5976755630837], [55.2587667093939, 45.5848430919246], [55.1945614356345, 45.5723968824391], [55.1652055484343, 45.5485774125618], [55.1598837209302, 45.5287063953488], [55.1637463376671, 45.5021830937557], [55.1838319446988, 45.4835137795276], [55.1869220380882, 45.4963033327229], [55.1904413111152, 45.5203803103827], [55.2175654642007, 45.5388350347922], [55.2519856711225, 45.5438135185863], [55.2832299487273, 45.5363887108588], [55.3147317341146, 45.5322256683758], [55.3370490752609, 45.5414530305805] ] + ] + }, + "properties" : { + "feature::id" : 638, + "id" : 112239, + "pfafstette" : 6113331, + "altitude" : -62, + "objectid" : 63900, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_63900", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 639, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [48.3920641823842, 49.085704312397], [48.3998752517854, 49.0682367011536], [48.4330937557224, 49.0514986952939], [48.4702607123238, 49.046133949826], [48.5134361838491, 49.0545029527559], [48.5420195477019, 49.075017739425], [48.526139901117, 49.0946312488555], [48.478071781725, 49.0999959943234], [48.4355829976195, 49.1042019547702], [48.4003902673503, 49.1127855475188], [48.3674292711958, 49.1250171671855], [48.3537813587255, 49.1235579564182], [48.3618499359092, 49.1151889534884], [48.3852831441128, 49.105060314045], [48.3920641823842, 49.085704312397] ] + ] + }, + "properties" : { + "feature::id" : 639, + "id" : 111217, + "pfafstette" : 4375, + "altitude" : -6, + "objectid" : 64111, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_64111", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 640, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [53.6830765885369, 46.9438404138436], [53.6783556125252, 46.9233256271745], [53.6806731825673, 46.9159437374107], [53.7009304614539, 46.9305358450833], [53.718784334371, 46.9480463742904], [53.7199860373558, 46.9605784197034], [53.7356940120857, 46.9682607352133], [53.7558654550448, 46.9754280351584], [53.7333764420436, 46.9822519913935], [53.6965528291522, 46.9685611609595], [53.6830765885369, 46.9438404138436] ] + ] + }, + "properties" : { + "feature::id" : 640, + "id" : 111097, + "pfafstette" : 1, + "altitude" : -25, + "objectid" : 64114, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_64114", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 641, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [50.6432830525545, 48.2936962094854], [50.6329827412562, 48.2927949322468], [50.6416521699322, 48.263052783373], [50.6739264786669, 48.24318176616], [50.7025098425197, 48.255370467863], [50.7143552005127, 48.2731814228163], [50.682424235488, 48.2850267808094], [50.6432830525545, 48.2936962094854] ] + ] + }, + "properties" : { + "feature::id" : 641, + "id" : 111107, + "pfafstette" : 521, + "altitude" : -28, + "objectid" : 64134, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_64134", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 642, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [53.0827401117011, 47.1531942409815], [53.0908086888848, 47.1603615409266], [53.1191345449551, 47.1755545000916], [53.1359583867423, 47.1844385185863], [53.129177348471, 47.1992881340414], [53.1252288958066, 47.2135798159678], [53.1396493316242, 47.2355967313679], [53.1351000274675, 47.2519484755539], [53.1235121772569, 47.240918558872], [53.095615500824, 47.2167986632485], [53.0649720747116, 47.1962838765794], [53.0763024171397, 47.1737090276506], [53.0827401117011, 47.1531942409815] ] + ] + }, + "properties" : { + "feature::id" : 642, + "id" : 111119, + "pfafstette" : 1, + "altitude" : -28, + "objectid" : 64180, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_64180", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 643, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [55.6825386833913, 45.9140238738326], [55.723482420802, 45.8973287859366], [55.7645119941402, 45.9023931056583], [55.7767865317707, 45.921148255814], [55.7936962094854, 45.9532508926936], [55.8291464475371, 45.9850531038271], [55.8214212140633, 45.9966409540377], [55.7824517029848, 45.9882719511079], [55.7441688793261, 45.9823492721113], [55.7214223585424, 45.9805896355979], [55.7133537813587, 45.9559547244095], [55.6864013001282, 45.9321352545321], [55.6825386833913, 45.9140238738326] ] + ] + }, + "properties" : { + "feature::id" : 643, + "id" : 111125, + "pfafstette" : 7361, + "altitude" : 14, + "objectid" : 64204, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_64204", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 644, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [56.4810703167918, 45.5230841420985], [56.5033876579381, 45.5183202481231], [56.5200398278704, 45.5152730726973], [56.5390954037722, 45.5138138619301], [56.5911119758286, 45.5102516709394], [56.6517121406336, 45.4980629692364], [56.6992652444607, 45.4905952435451], [56.7335137795276, 45.4948012039919], [56.7426982237686, 45.5153159906611], [56.7296511627907, 45.5405946713056], [56.70372871269, 45.5456589910273], [56.6635574986266, 45.5405946713056], [56.6020989745468, 45.5536417322835], [56.5512841054752, 45.5679334142099], [56.5221857260575, 45.5620107352133], [56.4870788317158, 45.5622682429958], [56.4555770463285, 45.5657875160227], [56.4240752609412, 45.5608090322285], [56.3826165079656, 45.5486632484893], [56.3893117103095, 45.5372899880974], [56.4228735579564, 45.5340711408167], [56.4523152810841, 45.5284059696026], [56.4810703167918, 45.5230841420985] ] + ] + }, + "properties" : { + "feature::id" : 644, + "id" : 111131, + "pfafstette" : 6411, + "altitude" : 66, + "objectid" : 64224, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_64224", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 645, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [48.3703476927303, 49.1372058688885], [48.3995319080754, 49.1329999084417], [48.4015919703351, 49.1434289736312], [48.3825363944333, 49.1535576130745], [48.3462277971068, 49.1514975508149], [48.3196186595862, 49.1544159723494], [48.2979021699322, 49.1689651620582], [48.2672587438198, 49.1716260758103], [48.2409929500092, 49.179694652994], [48.2361003021425, 49.2014111426479], [48.2425379967039, 49.218921671855], [48.2488040194104, 49.2442003524995], [48.2467439571507, 49.2670756271745], [48.2357569584325, 49.2810668833547], [48.2211648507599, 49.2956589910273], [48.1997058688885, 49.3010237364951], [48.1878605108954, 49.2867320545688], [48.1991908533236, 49.2709811618751], [48.2163580388207, 49.2611100302142], [48.2071735945797, 49.2492646722212], [48.199448361106, 49.2260889718], [48.2112937190991, 49.2043724821461], [48.2121520783739, 49.1879778199963], [48.1875171671855, 49.1871194607215], [48.163568943417, 49.1894799487273], [48.1721525361655, 49.1782354422267], [48.1916372917048, 49.1699093572606], [48.2060577275224, 49.1651883812488], [48.2348985991577, 49.1558751831166], [48.2767865317707, 49.1463473951657], [48.3100908716352, 49.141626419154], [48.3344682750412, 49.1395234389306], [48.3703476927303, 49.1372058688885] ] + ] + }, + "properties" : { + "feature::id" : 645, + "id" : 110988, + "pfafstette" : 4377, + "altitude" : -5, + "objectid" : 64405, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_64405", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 646, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [55.6106081761582, 44.7946375434902], [55.6110802737594, 44.8145085607032], [55.5969173457243, 44.836568394067], [55.5814239608131, 44.8540789232741], [55.56957860282, 44.8614608130379], [55.5329695797473, 44.8570831807361], [55.5029270051273, 44.8406885185863], [55.5163603277788, 44.8267401803699], [55.5373472120491, 44.806525819447], [55.5073475553928, 44.7851097555393], [55.4704810245377, 44.7884144387475], [55.4511679408533, 44.7898736495148], [55.4434856253434, 44.7722772843802], [55.4385071415492, 44.7550671809193], [55.4401809421352, 44.7408613349204], [55.4646012635049, 44.7378141594946], [55.4902662058231, 44.7398742217543], [55.50146779436, 44.7449814594397], [55.5107380745285, 44.7512474821461], [55.5312528611976, 44.7381575032046], [55.548720472441, 44.7297885002747], [55.5632267441861, 44.7315910547519], [55.5903508972716, 44.7342519685039], [55.6180329838858, 44.7482861426479], [55.6248998580846, 44.766955456876], [55.6188913431606, 44.7803458615638], [55.6106081761582, 44.7946375434902] ] + ] + }, + "properties" : { + "feature::id" : 646, + "id" : 113839, + "pfafstette" : 2595, + "altitude" : 69, + "objectid" : 64545, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_64545", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 647, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [53.526983954404, 44.9366960034792], [53.4375, 44.8397014054203], [53.4075003433437, 44.8071266709394], [53.3670716214979, 44.7559684581579], [53.3349689846182, 44.7077715848746], [53.2438970655557, 44.5900905282915], [53.2302491530855, 44.56897489013], [53.1997344808643, 44.513052783373], [53.1633400476103, 44.4612937190991], [53.1405076908991, 44.4364013001282], [53.1655288637612, 44.4161440212415], [53.2225239196118, 44.3979468046145], [53.2641543444424, 44.3869598058964], [53.2914930873466, 44.3822817478484], [53.3227802829152, 44.4021527650614], [53.3530374473539, 44.4420235533785], [53.3932086614173, 44.4839114859916], [53.4259121497894, 44.5341684215345], [53.4304185359824, 44.5737387841055], [53.4375, 44.5842536852225], [53.4433797610328, 44.593008949826], [53.477070362571, 44.6224506729537], [53.5044091054752, 44.6501327595679], [53.5273702160777, 44.6801753341879], [53.5456532686321, 44.7533075444058], [53.5642367469328, 44.8073841787219], [53.5870261856803, 44.8252809696027], [53.6123048663249, 44.8576840322285], [53.6543215528292, 44.8891858176158], [53.7003296099616, 44.9215030443142], [53.7365952893243, 44.9483267716536], [53.7645348837209, 44.9539919428676], [53.7912727751328, 44.9456229399378], [53.8376670939389, 44.9361809879143], [53.8962501144479, 44.9370393471892], [53.9617000091559, 44.9542923686138], [54.0329867469328, 44.9757084325215], [54.0768059879143, 44.9884121497894], [54.0898101309284, 45], [54.0897672129646, 45], [54.1035009613624, 45.0122316196667], [54.1213548342794, 45.0384544955136], [54.1383503479216, 45.0473814319722], [54.166504532137, 45.0556645989745], [54.2133709485442, 45.0612868522249], [54.2610098882988, 45.0633469144845], [54.2756878318989, 45.0455359595312], [54.2839280809375, 45.021201474089], [54.3122539370079, 45.018197216627], [54.3464166361472, 45.0134333226515], [54.3931113806995, 45.0092702801685], [54.4522523347372, 45.0221027513276], [54.4941402673503, 45.0374673823476], [54.52589956052, 45.0544628959897], [54.5461568394067, 45.0496990020143], [54.5625515015565, 45.0283258560703], [54.5895898187145, 45.0348493865592], [54.6222933070866, 45.0521453259476], [54.6552543032411, 45.0714154916682], [54.6780008240249, 45.0796986586706], [54.7037516022706, 45.087466810108], [54.7509613623878, 45.1237754074345], [54.7775704999084, 45.1549767670756], [54.7866691082219, 45.1683242537997], [54.8033212781542, 45.1730881477751], [54.8277845174876, 45.1766503387658], [54.8506168741988, 45.190298251236], [54.8792002380516, 45.2081521241531], [54.9186847646951, 45.2435165262772], [54.9097578282366, 45.2661772111335], [54.885981276323, 45.2575936183849], [54.8749942776048, 45.2414564640176], [54.8354239150339, 45.2366925700421], [54.7798022340231, 45.234375], [54.7456395348837, 45.2364779802234], [54.7281290056766, 45.2477654046878], [54.6889878227431, 45.2617137429042], [54.6496749679546, 45.2803830571324], [54.6374862662516, 45.2825289553195], [54.6753399102728, 45.2590528291522], [54.710704312397, 45.2349329335287], [54.7148244369163, 45.2212421030947], [54.719888756638, 45.2081950421168], [54.701691540011, 45.2025298709028], [54.668473036074, 45.208495467863], [54.6445248123054, 45.2105984480864], [54.614053058048, 45.2147185726058], [54.5857272019776, 45.2164782091192], [54.6074436916316, 45.2051907846548], [54.6068428401392, 45.1850193416957], [54.5678733290606, 45.1733885735213], [54.5403199963377, 45.1760494872734], [54.520234389306, 45.181113806995], [54.4953419703351, 45.1942037859366], [54.4756855429408, 45.2153194240982], [54.4638401849478, 45.232872871269], [54.4403211408167, 45.2444607214796], [54.4106219099066, 45.2530443142282], [54.3723390862479, 45.2631729536715], [54.353798525911, 45.2813272523347], [54.3392064182384, 45.2940738875664], [54.3332837392419, 45.3069063587255], [54.3510517762314, 45.3104256317524], [54.3616095953122, 45.3155757874016], [54.362811298297, 45.3348459531221], [54.3452149331624, 45.3446312488555], [54.3163740615272, 45.3529573338216], [54.3015244460721, 45.3746309055118], [54.3088204999084, 45.3847595449551], [54.3356871452115, 45.3835578419703], [54.368648141366, 45.379781061161], [54.3906221388024, 45.3818411234206], [54.4119094488189, 45.3942873329061], [54.4380035707746, 45.3972915903681], [54.4560291155466, 45.4052743316242], [54.4501922724776, 45.4181068027834], [54.3907938106574, 45.4237290560337], [54.3518242995788, 45.4332139260209], [54.3616095953122, 45.4475056079473], [54.3752575077824, 45.4546729078923], [54.3955147866691, 45.4499090139169], [54.4308791887932, 45.4478060336935], [54.4631534975279, 45.4439863349203], [54.4860716901666, 45.4284929500092], [54.5117366324849, 45.4257891182934], [54.5224661234206, 45.4255316105109], [54.5388607855704, 45.4234715482512], [54.5422083867423, 45.4457030534701], [54.5137966947445, 45.4754881203076], [54.4665869346273, 45.4995221800037], [54.4272740798388, 45.520337392419], [54.3889054202527, 45.5361312030764], [54.3428115271928, 45.5531267167186], [54.3017819538546, 45.5628690944882], [54.266160043948, 45.5657875160227], [54.2459027650613, 45.5780191356894], [54.2192077916132, 45.5997356253433], [54.2004097234938, 45.6199499862662], [54.2156026826588, 45.6223104742721], [54.2301089544039, 45.6232546694745], [54.1936286852225, 45.633683734664], [54.1531141274492, 45.6299927897821], [54.1430713239333, 45.6202504120125], [54.1010975553928, 45.6273747939938], [54.0588662790698, 45.6285335790148], [54.0660764969786, 45.6160873695294], [54.0779218549716, 45.6011948361106], [54.0624713880242, 45.5869889901117], [54.0439308276872, 45.5709376716719], [54.0377506409082, 45.5593498214613], [54.0317421259842, 45.5483628227431], [54.0244460721479, 45.5251442043582], [54.0166350027467, 45.5081916086797], [54.0137165812122, 45.4843721388024], [54.0178367057315, 45.4406816517121], [54.0241885643655, 45.4056605932979], [54.0225576817433, 45.3889225874382], [54.0207551272661, 45.3755751007142], [54.0288237044497, 45.3541161188427], [54.0371497894158, 45.337206441128], [54.0750034334371, 45.3045029527559], [54.1153463193554, 45.2539885094305], [54.1228140450467, 45.2227871497894], [54.111569538546, 45.1983668284197], [54.0805827687237, 45.1766503387658], [54.0368922816334, 45.152573361106], [53.9750904138436, 45.1243333409632], [53.93663591833, 45.1121446392602], [53.8899411737777, 45.1014580662882], [53.8177531587621, 45.0812437053653], [53.7595563999267, 45.0645915354331], [53.7125183116645, 45.0506002792529], [53.6798148232924, 45.0393128547885], [53.6349226332173, 45.02270360282], [53.60376419154, 45], [53.5676272660685, 44.9736483702619], [53.526983954404, 44.9366960034792] ] + ] + }, + "properties" : { + "feature::id" : 647, + "id" : 113582, + "pfafstette" : 1, + "altitude" : -29, + "objectid" : 64688, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_64688", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 648, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.769095632668, 51.4164072514192], [37.7219717084783, 51.4219007507783], [37.748065830434, 51.4060211041934], [37.7860053103827, 51.3851200558506], [37.8255756729537, 51.4167076771654], [37.8187087987548, 51.4297976561069], [37.805661737777, 51.4241324848929], [37.7946747390588, 51.4125446346823], [37.769095632668, 51.4164072514192] ] + ] + }, + "properties" : { + "feature::id" : 648, + "id" : 113494, + "pfafstette" : 48939, + "lke_type" : "N", + "altitude" : 133, + "objectid" : 64719, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_64719", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 649, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [55.1013436183849, 44.9798714750046], [55.0991118842703, 44.9658373008607], [55.1140044176891, 44.9616742583776], [55.1291544588903, 44.9605154733565], [55.1408710629922, 44.9593566883355], [55.1603987364952, 44.9641205823109], [55.1854199093573, 44.9673394295917], [55.2073939067936, 44.9635197308185], [55.2358485167552, 44.9697428355613], [55.2483805621681, 45], [55.2511273118476, 45.0066093664164], [55.2288099707013, 45.0285833638528], [55.1869220380882, 45.0200426890679], [55.1595403772203, 45.004506386193], [55.1389397546237, 45], [55.13889683666, 45], [55.1378238875664, 44.9997424922176], [55.1167082494049, 44.9935193874748], [55.1013436183849, 44.9798714750046] ] + ] + }, + "properties" : { + "feature::id" : 649, + "id" : 113816, + "pfafstette" : 2559, + "altitude" : 52, + "objectid" : 64730, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_64730", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 650, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [54.4368018677898, 45.5726543902216], [54.456458295184, 45.565572926204], [54.4834107764146, 45.5726543902216], [54.4856425105292, 45.5896069859], [54.4819515656473, 45.6095638390405], [54.4695053561619, 45.6196495605201], [54.4415228438015, 45.6264735167552], [54.4287332906061, 45.6235550952207], [54.4123386284563, 45.6101646905329], [54.4032400201428, 45.5955725828603], [54.4210080571324, 45.5967313678813], [54.4394627815418, 45.603297816334], [54.4406644845266, 45.5896069859], [54.4368018677898, 45.5726543902216] ] + ] + }, + "properties" : { + "feature::id" : 650, + "id" : 113348, + "pfafstette" : 4253, + "altitude" : -21, + "objectid" : 64863, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_64863", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 651, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [46.6257324665812, 48.7756220243545], [46.6590368064457, 48.7548068119392], [46.6896802325581, 48.7580685771837], [46.7141434718916, 48.7654933849112], [46.7280488921443, 48.7795275590551], [46.7164610419337, 48.8023599157663], [46.6924269822377, 48.8039049624611], [46.6598951657206, 48.7975960217909], [46.6198956235122, 48.7949351080388], [46.6257324665812, 48.7756220243545] ] + ] + }, + "properties" : { + "feature::id" : 651, + "id" : 113378, + "pfafstette" : 83, + "altitude" : -2, + "objectid" : 65007, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_65007", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 652, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.6495490752609, 51.701554202527], [35.6263733748398, 51.6914255630837], [35.6257725233474, 51.6785930919246], [35.6599352224867, 51.6705245147409], [35.7106642556308, 51.6738291979491], [35.7363291979491, 51.686361243362], [35.7137543490203, 51.6937431331258], [35.6772740798388, 51.6994512223036], [35.6495490752609, 51.701554202527] ] + ] + }, + "properties" : { + "feature::id" : 652, + "id" : 114065, + "pfafstette" : 247531, + "lke_type" : "N", + "altitude" : 152, + "objectid" : 65334, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_65334", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 653, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [47.8304397088445, 48.3778154184215], [47.8159334370994, 48.3792746291888], [47.8041739150339, 48.3817209531221], [47.803143883904, 48.3941671626076], [47.7930152444607, 48.408458844534], [47.7784231367881, 48.4239522294451], [47.7658910913752, 48.4295744826955], [47.7294108221937, 48.4304328419703], [47.6894971159128, 48.4397031221388], [47.6591970335103, 48.4545527375938], [47.6179099523897, 48.4688015015565], [47.5761936916316, 48.4869558002197], [47.5602282091192, 48.5089727156198], [47.5441768906794, 48.5264832448269], [47.5117309100897, 48.5422341375206], [47.4715596960264, 48.5615901391686], [47.4510449093573, 48.5806457150705], [47.4272683574437, 48.5906885185863], [47.4074402581945, 48.6026197125069], [47.4006592199231, 48.6236495147409], [47.3925906427394, 48.6454089223585], [47.377311847647, 48.6510740935726], [47.3466684215345, 48.6531341558323], [47.3434924922175, 48.6668249862662], [47.3538786394433, 48.6903011124336], [47.3381706647134, 48.7176398553378], [47.3310462827321, 48.7372962827321], [47.3249519318806, 48.7566093664164], [47.2930209668559, 48.7721027513276], [47.2509613623878, 48.7572102179088], [47.2226355063175, 48.7224037493133], [47.2072708752976, 48.7072966260758], [47.1892453305255, 48.6963096273576], [47.174309879143, 48.6730910089727], [47.1791166910822, 48.6513745193188], [47.1973139077092, 48.6454089223585], [47.2224638344626, 48.6332631386193], [47.2456395348837, 48.6100445202344], [47.2393735121773, 48.5981562442776], [47.2361117469328, 48.5877700970518], [47.2543089635598, 48.5936927760483], [47.2710469694195, 48.5972978850027], [47.2477854330709, 48.5633497756821], [47.2239230452298, 48.532491759751], [47.2343950283831, 48.5348093297931], [47.259287447354, 48.5457963285113], [47.2931926387109, 48.5395732237685], [47.3122482146127, 48.5205176478667], [47.3217760025636, 48.5130499221754], [47.325896127083, 48.5051530168467], [47.3384281724959, 48.4878570774583], [47.3572262406153, 48.4839944607215], [47.3698441219557, 48.4732649697857], [47.401345907343, 48.4569132255997], [47.4350794268449, 48.4450678676067], [47.4450363944333, 48.4176862067387], [47.4350794268449, 48.3944675883538], [47.4344785753525, 48.3844247848379], [47.4460664255631, 48.38708569859], [47.4591993224684, 48.3879440578648], [47.4698429774767, 48.3703476927303], [47.4955937557224, 48.3513779527559], [47.5297564548618, 48.3477728438015], [47.5574814594397, 48.3457127815418], [47.6076954770189, 48.3377300402856], [47.6401414576085, 48.3356270600623], [47.6834027650613, 48.3367858450833], [47.7378227430873, 48.3338674235488], [47.7529298663248, 48.3192323979125], [47.7754188793261, 48.3103054614539], [47.8141308826222, 48.3088462506867], [47.8405683482879, 48.2999193142282], [47.8561046511628, 48.2951554202527], [47.873100164805, 48.3046832082036], [47.9023702160776, 48.3109063129463], [47.9449448361106, 48.3115500824025], [47.9717256454862, 48.3234383583593], [47.9604811389855, 48.335326634316], [47.9209107764146, 48.3593606940121], [47.9003959897455, 48.3882444836111], [47.8784219923091, 48.3935663111152], [47.8474352224867, 48.3822788866508], [47.8304397088445, 48.3778154184215] ] + ] + }, + "properties" : { + "feature::id" : 653, + "id" : 112887, + "pfafstette" : 71, + "altitude" : -16, + "objectid" : 65637, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_65637", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 654, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [56.0737788408716, 45.0078110694012], [56.0859675425746, 45.004506386193], [56.1094007507782, 45.0140341741439], [56.134979857169, 45.0256220243545], [56.1294005218824, 45.0426175379967], [56.0797015198681, 45.0437763230178], [56.0559249679546, 45.0291842153452], [56.0678561618751, 45.0196564273942], [56.0737788408716, 45.0078110694012] ] + ] + }, + "properties" : { + "feature::id" : 654, + "id" : 112790, + "pfafstette" : 6131, + "altitude" : 72, + "objectid" : 65779, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_65779", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 655, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [44.9521893883904, 48.7955359595312], [44.9560520051273, 48.7842485350668], [44.9635197308185, 48.7816305392785], [44.9950215162058, 48.7797850668376], [45, 48.7793988051639], [45.0214589818715, 48.7777250045779], [45.0412870811207, 48.7786262818165], [45.0668661875115, 48.7780254303241], [45.0776815143747, 48.7916733427943], [45.066437007874, 48.8112868522249], [45.0227465207837, 48.8330033418788], [45, 48.8283252838308], [44.966438152353, 48.8214154916682], [44.9521893883904, 48.7955359595312] ] + ] + }, + "properties" : { + "feature::id" : 655, + "id" : 114743, + "pfafstette" : 0, + "altitude" : 14, + "objectid" : 66399, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_66399", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 656, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [53.5882278886651, 45.4799086705732], [53.6262532045413, 45.4572909036806], [53.6752655191357, 45.4376773942501], [53.7009304614539, 45.4487502288958], [53.6658235671122, 45.4694796053836], [53.6514031312946, 45.4793078190808], [53.6259956967588, 45.5045864997253], [53.5841077641457, 45.5239425013734], [53.5609320637246, 45.5236420756272], [53.5537218458158, 45.5060886284563], [53.5882278886651, 45.4799086705732] ] + ] + }, + "properties" : { + "feature::id" : 656, + "id" : 114493, + "pfafstette" : 0, + "altitude" : -28, + "objectid" : 67170, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_67170", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 657, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [44.7916762039919, 48.1352430873466], [44.8106459439663, 48.148032640542], [44.830559879143, 48.170907915217], [44.833907480315, 48.1801352774217], [44.8345083318074, 48.1922810611609], [44.836568394067, 48.2199631477751], [44.8220621223219, 48.2454993362022], [44.8100450924739, 48.2458426799121], [44.78832860282, 48.2398770829518], [44.7610327778795, 48.2348127632302], [44.7536508881157, 48.2199631477751], [44.7582860282, 48.1908218503937], [44.7711614173228, 48.1652856619667], [44.7812900567662, 48.149534769273], [44.7916762039919, 48.1352430873466] ] + ] + }, + "properties" : { + "feature::id" : 657, + "id" : 116513, + "pfafstette" : 0, + "altitude" : 5, + "objectid" : 67871, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_67871", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 658, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [52.1540812122322, 45.1439468503937], [52.1700466947445, 45.1269513367515], [52.1769135689434, 45.1204707242263], [52.1887589269364, 45.1374662378685], [52.1997459256546, 45.1594402353049], [52.1902181377037, 45.1754915537447], [52.1650682109504, 45.1716289370079], [52.1433517212965, 45.1760494872734], [52.1301329884636, 45.1814142327413], [52.1335664255631, 45.1608994460721], [52.1540812122322, 45.1439468503937] ] + ] + }, + "properties" : { + "feature::id" : 658, + "id" : 117181, + "pfafstette" : 0, + "altitude" : -19, + "objectid" : 68421, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_68421", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 659, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [44.6325363944333, 48.3361849935909], [44.6506477751328, 48.2975588262223], [44.6596605475188, 48.2871297610328], [44.6711625618019, 48.2922369987182], [44.6706475462369, 48.3156702069218], [44.6578579930416, 48.3504766755173], [44.6294463010438, 48.3876865500824], [44.6064422724776, 48.4039953763047], [44.6108199047793, 48.3906478895807], [44.6168284197034, 48.3730515244461], [44.6325363944333, 48.3361849935909] ] + ] + }, + "properties" : { + "feature::id" : 659, + "id" : 116250, + "pfafstette" : 119615, + "altitude" : 0, + "objectid" : 68783, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_68783", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 660, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [52.5515444744552, 44.4925809146677], [52.5693554294085, 44.4788900842337], [52.6035181285479, 44.4619374885552], [52.6596977430873, 44.4645984023073], [52.69630676616, 44.4675168238418], [52.7155769318806, 44.4758858267717], [52.7308557269731, 44.5023232924373], [52.7141177211133, 44.5157566150888], [52.6814142327412, 44.5163145486175], [52.6528308688885, 44.5276019730819], [52.6321014924006, 44.5282028245743], [52.6023164255631, 44.5216792940853], [52.5747201748764, 44.5321083592749], [52.5476389397546, 44.5362714017579], [52.5278537584691, 44.5211213605567], [52.536394433254, 44.5014649331624], [52.5515444744552, 44.4925809146677] ] + ] + }, + "properties" : { + "feature::id" : 660, + "id" : 118416, + "pfafstette" : 22455, + "altitude" : -29, + "objectid" : 69263, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_69263", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 661, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.1589681377037, 51.3296700466948], [30.1810279710676, 51.3340476789965], [30.1882381889764, 51.3406570454129], [30.1881523530489, 51.3566225279253], [30.1765645028383, 51.3750772523347], [30.1345048983703, 51.4138750915583], [30.1127025727889, 51.4095403772203], [30.124032915217, 51.3944332539828], [30.1369941402674, 51.3803561618751], [30.1376808276872, 51.3603993087347], [30.1503845449551, 51.3500989974364], [30.1589681377037, 51.3296700466948] ] + ] + }, + "properties" : { + "feature::id" : 661, + "id" : 118347, + "pfafstette" : 43113, + "lke_type" : "N", + "altitude" : 106, + "objectid" : 69400, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_69400", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 662, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [44.7878135872551, 47.6937459943234], [44.7773416041018, 47.6779951016297], [44.7874702435451, 47.6595403772203], [44.8261822468412, 47.6437894845266], [44.8490146035525, 47.64589246475], [44.8406026826588, 47.655420252701], [44.8222337941769, 47.6666218412379], [44.8210320911921, 47.6891966901666], [44.8398301593115, 47.703488372093], [44.8569115088812, 47.7118573750229], [44.8412893700787, 47.7355910089727], [44.8076416865043, 47.7638739470793], [44.7885861106024, 47.7668352865776], [44.7957963285113, 47.7422003753891], [44.7990580937557, 47.7154624839773], [44.7878135872551, 47.6937459943234] ] + ] + }, + "properties" : { + "feature::id" : 662, + "id" : 118070, + "pfafstette" : 677, + "altitude" : -3, + "objectid" : 69517, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_69517", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 663, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [45.0366519410364, 47.5319881889764], [45, 47.5568376899835], [44.9958798754807, 47.5596273576268], [44.9589704266618, 47.5810434215345], [44.942404092657, 47.5864510849661], [44.9291853598242, 47.5810434215345], [44.9163099707013, 47.5938329747299], [44.9034345815785, 47.5991977201978], [44.9054946438381, 47.5837472532503], [44.9680690349753, 47.5548634636514], [45, 47.5415159769273], [45.0291842153452, 47.5292843572606], [45.0387120032961, 47.5052502975646], [45.0515015564915, 47.4832333821644], [45.0749347646951, 47.4644782320088], [45.09081441128, 47.4422038088262], [45.1115867057316, 47.4183843389489], [45.1621440670207, 47.3853804248306], [45.199482695477, 47.3764534883721], [45.1797404321553, 47.3964103415125], [45.1266938289691, 47.428212552646], [45.0948486998718, 47.4564096548251], [45.0746772569127, 47.4787699139352], [45.054419978026, 47.5031902353049], [45.0366519410364, 47.5319881889764] ] + ] + }, + "properties" : { + "feature::id" : 663, + "id" : 118405, + "pfafstette" : 673, + "altitude" : -4, + "objectid" : 69555, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_69555", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 664, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.5975096136239, 49.4360007324666], [37.6344190624428, 49.4538116874199], [37.654075489837, 49.4787470243545], [37.6813713147775, 49.5040257049991], [37.6933883446255, 49.5293473036074], [37.6992251876946, 49.5441969190624], [37.6769078465482, 49.5640250183117], [37.6680667460172, 49.5478020280168], [37.6606848562534, 49.5344116233291], [37.648410318623, 49.5176306995056], [37.6327881798205, 49.5000772523347], [37.6169943691632, 49.4781461728621], [37.5913294268449, 49.4522666407251], [37.5578534151254, 49.4412796420069], [37.5448063541476, 49.4321381157297], [37.5400853781359, 49.4104216260758], [37.53004257462, 49.3768168604651], [37.5413729170482, 49.3447142235854], [37.5546774858084, 49.3280620536532], [37.5644627815418, 49.3170321369712], [37.5558791887932, 49.3051867789782], [37.5161371543673, 49.2899938198132], [37.4902147042666, 49.2742429271196], [37.496824070683, 49.2605520966856], [37.5136479124702, 49.2438999267533], [37.5163946621498, 49.2284065418421], [37.5146779436001, 49.2129989928584], [37.5294417231276, 49.2049733336385], [37.5476389397546, 49.2094368018678], [37.5652353048892, 49.2129989928584], [37.578282365867, 49.2257885460538], [37.5698704449734, 49.2415823567112], [37.5383686595861, 49.2525693554294], [37.5351927302692, 49.2697794588903], [37.5717588353781, 49.2872899880974], [37.6171660410181, 49.3105944424098], [37.6135609320637, 49.3292208386742], [37.5969087621315, 49.3313238188976], [37.5769948269548, 49.3342851583959], [37.5635185863395, 49.3503364768357], [37.5598276414576, 49.3714521149972], [37.5644627815418, 49.3987908579015], [37.5762223036074, 49.4178464338033], [37.5975096136239, 49.4360007324666] ] + ] + }, + "properties" : { + "feature::id" : 664, + "id" : 119107, + "pfafstette" : 481131, + "lke_type" : "N", + "altitude" : 94, + "objectid" : 69774, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_69774", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 665, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [52.1804328419703, 44.4892762314595], [52.2114196117927, 44.4878170206922], [52.2497453534151, 44.4871732512361], [52.2863972944515, 44.4773450375389], [52.3081137841055, 44.473825764512], [52.3276414576085, 44.4732678309833], [52.3600016022706, 44.4898770829518], [52.3734349249222, 44.5100914438748], [52.3555810520051, 44.5219797198315], [52.3406885185863, 44.5312070820363], [52.3266543444424, 44.5397906747849], [52.2991010117194, 44.53893231551], [52.2700455502655, 44.5365718275041], [52.2500028611976, 44.5341684215345], [52.2280288637612, 44.5254989928585], [52.2026643471891, 44.5142974043216], [52.1828791659037, 44.5032245696759], [52.1804328419703, 44.4892762314595] ] + ] + }, + "properties" : { + "feature::id" : 665, + "id" : 118936, + "pfafstette" : 224753, + "altitude" : -26, + "objectid" : 69942, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_69942", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 666, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [53.1906787905145, 44.0403543307087], [53.1696919062443, 44.0340453900385], [53.1799492995788, 44.0138739470793], [53.2144982603918, 44.0097109045962], [53.2486609595312, 44.0108696896173], [53.2597767121406, 44.01709279436], [53.2368156015382, 44.0293244140267], [53.1906787905145, 44.0403543307087] ] + ] + }, + "properties" : { + "feature::id" : 666, + "id" : 119174, + "pfafstette" : 22579, + "altitude" : 5, + "objectid" : 69960, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_69960", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 667, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [52.3452378227431, 44.8463107718367], [52.320216649881, 44.8383280305805], [52.3267830983336, 44.8225771378868], [52.3525338765794, 44.8106888619301], [52.3823189434169, 44.806525819447], [52.41652456052, 44.8136502014283], [52.4450650064091, 44.832405351584], [52.4262669382897, 44.846096182018], [52.3962672816334, 44.8436927760484], [52.3798726194836, 44.8427914988098], [52.3452378227431, 44.8463107718367] ] + ] + }, + "properties" : { + "feature::id" : 667, + "id" : 117836, + "pfafstette" : 931, + "altitude" : -34, + "objectid" : 70210, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_70210", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 668, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.9074745925654, 49.9708443966306], [36.907217084783, 49.992818394067], [36.892367469328, 50.0159940944882], [36.8503937007874, 50.0294274171397], [36.8302222578282, 50.0468091924556], [36.8144284471708, 50.0766800952206], [36.8174327046328, 50.1257353277788], [36.8206944698773, 50.1465076222304], [36.8091066196667, 50.1349626899835], [36.8042139718, 50.1233748397729], [36.7934844808643, 50.1118728254898], [36.7897077000549, 50.0846628364768], [36.7903943874748, 50.0514443325398], [36.8097074711591, 50.0255218824391], [36.8355440853324, 50.0059083730086], [36.8486769822377, 49.9913591832998], [36.8575180827687, 49.9797284151254], [36.8679042299945, 49.9628187374107], [36.889191540011, 49.9488703991943], [36.9055003662333, 49.9348791430141], [36.9274743636696, 49.9200295275591], [36.9343412378685, 49.8919182613074], [36.95545687603, 49.8790428721846], [36.9933963559788, 49.9004160181285], [36.9976023164255, 49.9221325077825], [36.9726240615272, 49.9372825489837], [36.9551135323201, 49.9482695477019], [36.937259659403, 49.9586986128914], [36.9074745925654, 49.9708443966306] ] + ] + }, + "properties" : { + "feature::id" : 668, + "id" : 117806, + "pfafstette" : 49753, + "lke_type" : "N", + "altitude" : 98, + "objectid" : 70407, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_70407", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 669, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.423445797473, 49.1127855475188], [36.4450764511994, 49.106562442776], [36.4682521516206, 49.1107254852591], [36.4918570316792, 49.1080216535433], [36.5024148507599, 49.12025327321], [36.4876510712324, 49.1320986312031], [36.477522431789, 49.1393088491119], [36.4653337300861, 49.1573343938839], [36.4502266068486, 49.1645446117927], [36.4555484343527, 49.1532142693646], [36.4629303241164, 49.1399097006043], [36.4394971159128, 49.1300814869072], [36.423445797473, 49.1127855475188] ] + ] + }, + "properties" : { + "feature::id" : 669, + "id" : 120982, + "pfafstette" : 492663, + "lke_type" : "N", + "altitude" : 128, + "objectid" : 71174, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_71174", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 670, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [53.7835904596228, 43.633320362571], [53.8293410089727, 43.6205308093756], [53.8869798342795, 43.62379257462], [53.8647483290606, 43.6362387841055], [53.8370662424465, 43.6440498535067], [53.8135901162791, 43.6443073612892], [53.7835904596228, 43.633320362571] ] + ] + }, + "properties" : { + "feature::id" : 670, + "id" : 119437, + "pfafstette" : 226933, + "altitude" : -14, + "objectid" : 71857, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_71857", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 671, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [51.8933116645303, 43.3722503891229], [51.8762303149606, 43.395769433254], [51.8694063587255, 43.4234086019044], [51.8745135964109, 43.434996452115], [51.8925820591467, 43.4510477705549], [51.8890627861197, 43.4730217679912], [51.8640416132576, 43.4896739379235], [51.8510803882073, 43.4956824528475], [51.8376470655557, 43.4980429408533], [51.82726091833, 43.4929786211317], [51.810565830434, 43.4718629829702], [51.777003982787, 43.4727642602088], [51.754643723677, 43.4790302829152], [51.7285066837575, 43.4834508331807], [51.6979061756088, 43.4834508331807], [51.6985070271013, 43.4682578740158], [51.7131420527376, 43.4429791933712], [51.7300088124885, 43.4133228804248], [51.7478197674418, 43.392765175792], [51.75915010987, 43.3832373878411], [51.7796648965391, 43.3722503891229], [51.7927548754807, 43.3493751144479], [51.772840940304, 43.3309203900385], [51.7676049487273, 43.3095901620582], [51.7945574299579, 43.2893328831716], [51.8186344076176, 43.2967576908991], [51.8447285295733, 43.2967576908991], [51.8762303149606, 43.2756420527376], [51.9009081441128, 43.274740775499], [51.8915091100531, 43.2889895394616], [51.8641274491851, 43.3053842016114], [51.8647712186413, 43.3246972852957], [51.8896636376121, 43.3402335881707], [51.9051570225233, 43.3555982191906], [51.8933116645303, 43.3722503891229] ] + ] + }, + "properties" : { + "feature::id" : 671, + "id" : 122176, + "pfafstette" : 195, + "altitude" : -134, + "objectid" : 71872, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_71872", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 672, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [51.1711740065922, 43.741816974913], [51.2043495925654, 43.7379114402124], [51.2355938701703, 43.7492847006043], [51.2439199551364, 43.7786835057682], [51.2391560611609, 43.8087260803882], [51.2064525727888, 43.8200564228163], [51.1711740065922, 43.8173955090643], [51.158684879143, 43.8060222486724], [51.1606591054752, 43.7861512314594], [51.1643071323933, 43.7605721250687], [51.1711740065922, 43.741816974913] ] + ] + }, + "properties" : { + "feature::id" : 672, + "id" : 122075, + "pfafstette" : 717, + "altitude" : -33, + "objectid" : 71907, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_71907", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 673, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [52.90797816334, 42.8986935771837], [52.9421408624794, 42.8751316150888], [52.9645011215894, 42.8653463193554], [52.9751018586339, 42.8844018952573], [52.9727842885918, 42.9051741897089], [52.9493510803882, 42.9198092153452], [52.9052743316242, 42.9337146355979], [52.8684078007691, 42.9459462552646], [52.8364339177806, 42.9551306995056], [52.8164341466764, 42.9441007828237], [52.8332579884636, 42.9209250824025], [52.8686653085515, 42.9096805759019], [52.90797816334, 42.8986935771837] ] + ] + }, + "properties" : { + "feature::id" : 673, + "id" : 122330, + "pfafstette" : 21, + "altitude" : -58, + "objectid" : 72100, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_72100", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 674, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [53.4375, 42.7646607764146], [53.4047965116279, 42.7675791979491], [53.3842817249588, 42.760755241714], [53.3985734068852, 42.7458627082952], [53.4277576222303, 42.7377941311115], [53.4375, 42.7372361975829], [53.4638945477019, 42.7357340688519], [53.5002460629921, 42.7359486586706], [53.5246663843619, 42.7490815555759], [53.5371125938473, 42.7690384087164], [53.5293015244461, 42.7808837667094], [53.5100313587255, 42.7707980452298], [53.4931645989746, 42.7583089177806], [53.4550963651346, 42.7630728117561], [53.4375, 42.7646607764146] ] + ] + }, + "properties" : { + "feature::id" : 674, + "line::hidden" : [ + { "contour" : 0, "segments" : [ { "from" : 6, "to" : 7 } ] } + ], + "id" : 122038, + "pfafstette" : 455, + "altitude" : -6, + "objectid" : 72124, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_72124", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 675, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [51.3093269318806, 43.4971416636147], [51.3188547198315, 43.4781719236404], [51.337309444241, 43.4724638344626], [51.3428887795275, 43.4980429408533], [51.3289833592748, 43.5402312992126], [51.299584554111, 43.5746944240982], [51.276365935726, 43.5854668329976], [51.2805289782091, 43.572376854056], [51.2897992583776, 43.5512612158945], [51.2997991439297, 43.5233216214979], [51.3093269318806, 43.4971416636147] ] + ] + }, + "properties" : { + "feature::id" : 675, + "id" : 122572, + "pfafstette" : 1, + "altitude" : -30, + "objectid" : 72830, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_72830", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 676, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [43.4977854330709, 45.990417849295], [43.5355532411646, 45.9880573612891], [43.5595873008606, 45.9847526780809], [43.5749519318806, 45.9913191265336], [43.5705742995788, 46.0070700192272], [43.5506603644021, 46.0150956784472], [43.4852533876579, 46.0281856573888], [43.4438804706098, 46.0391726561069], [43.4065418421534, 46.0477991668193], [43.3583020509064, 46.066210973265], [43.3357272019777, 46.1010174418605], [43.3106631111518, 46.1372831212232], [43.2892899652078, 46.1381843984618], [43.2625949917597, 46.1351801409998], [43.2265439022157, 46.1390427577367], [43.2001064365501, 46.1429482924373], [43.1727247756821, 46.152175654642], [43.1466306537264, 46.1586991851309], [43.1198498443508, 46.1672827778795], [43.0883480589636, 46.1830336705732], [43.0720392327413, 46.2056943554294], [43.0778760758103, 46.2146212918879], [43.0971891594946, 46.2181405649149], [43.0995925654642, 46.227968778612], [43.0565029298663, 46.232131821095], [43.0205376762498, 46.2318313953488], [42.9991645303058, 46.233633949826], [42.9680060886285, 46.2318313953488], [42.9538431605933, 46.2437196713056], [42.9529848013184, 46.2618310520051], [42.9983061710309, 46.2583117789782], [43.0663740615272, 46.2520886742355], [43.0805369895623, 46.259513481963], [43.0466317982055, 46.2678395669291], [42.9846582585607, 46.2749210309467], [42.9480063175243, 46.2874959943234], [42.9424269822377, 46.3020022660685], [42.9364184673137, 46.3135901162791], [42.9219121955686, 46.3350490981505], [42.8950455502655, 46.3659071140817], [42.8720415216993, 46.3795979445157], [42.8370204632851, 46.3870227522432], [42.7865489379234, 46.3932458569859], [42.7556480040286, 46.3983101767076], [42.7371932796191, 46.4111426478667], [42.6895543398645, 46.4134602179088], [42.6340184947812, 46.4111426478667], [42.5945339681377, 46.4387818165171], [42.5668947994873, 46.4718286485992], [42.5561653085515, 46.4883949826039], [42.568611518037, 46.4937597280718], [42.5814010712324, 46.5056050860648], [42.5451783098334, 46.5192959164988], [42.4948784563267, 46.5204976194836], [42.4812305438564, 46.5306262589269], [42.4963376670939, 46.5345317936275], [42.5098139077092, 46.5413986678264], [42.4729044588903, 46.5532440258194], [42.4327332448269, 46.546634659403], [42.402347326497, 46.5362485121773], [42.3566826130745, 46.5389523438931], [42.3088720014649, 46.5440166636147], [42.2514477659769, 46.5597675563084], [42.2190017853873, 46.5832436824757], [42.1982294909357, 46.5903251464933], [42.1614058780443, 46.5811836202161], [42.1322216626991, 46.5722566837576], [42.093509659403, 46.5654327275224], [42.0423514466215, 46.5645314502838], [41.997201748764, 46.567836133492], [41.9680175334188, 46.5710549807728], [41.951451199414, 46.5704541292804], [41.9578888939755, 46.5603684078008], [41.9960000457792, 46.5571495605201], [42.0483599615455, 46.5502826863212], [42.0949688701703, 46.5493814090826], [42.1262131477751, 46.5535444515656], [42.1541956601355, 46.5559049395715], [42.1845815784655, 46.557664576085], [42.2099890130013, 46.5565057910639], [42.2358256271745, 46.5538448773119], [42.259773850943, 46.5434587300861], [42.2822628639443, 46.5344888756638], [42.3080994781176, 46.5329867469328], [42.3343652719282, 46.5261198727339], [42.3795149697858, 46.5116136009888], [42.411360098883, 46.4941030717817], [42.4286131203076, 46.4741462186413], [42.4677543032412, 46.4634596456693], [42.4878399102728, 46.445305347006], [42.4514454770189, 46.4262926890679], [42.4074974821461, 46.4170653268632], [42.3832917505951, 46.4102413706281], [42.3745364859916, 46.400413156931], [42.3679271195752, 46.3917866462186], [42.3598585423915, 46.3771945385461], [42.3735064548617, 46.3573235213331], [42.3878410547519, 46.3590831578465], [42.3797724775682, 46.3712289415858], [42.3847509613624, 46.386722326497], [42.4362525178539, 46.3995547976561], [42.4856081761582, 46.3991685359824], [42.5145348837209, 46.3864219007508], [42.5312728895807, 46.365349180553], [42.5480967313679, 46.3483965848746], [42.5876670939388, 46.3245771149973], [42.6191688793261, 46.3094699917598], [42.6411428767625, 46.3053069492767], [42.6584817341146, 46.3005430553012], [42.6388253067204, 46.3171523072697], [42.6174521607764, 46.3364224729903], [42.6518723676982, 46.3343624107306], [42.7062923457242, 46.3275384544955], [42.7490386376122, 46.3206715802966], [42.7873214612708, 46.3144484755539], [42.8068062168101, 46.3040623283281], [42.8305827687237, 46.2874101583959], [42.8577069218092, 46.2737622459257], [42.8819984892877, 46.2570671580297], [42.9143586339498, 46.2377969923091], [42.9301524446072, 46.2146212918879], [42.9506672312763, 46.1943210950375], [42.9777913843618, 46.1792139718], [43.016331715803, 46.1640639305988], [43.0607088903131, 46.1479696941952], [43.0995925654642, 46.1367251876946], [43.1617377769639, 46.1220901620582], [43.2143552005127, 46.1120044405787], [43.2441402673503, 46.0986569538546], [43.2804488646768, 46.0724340780077], [43.3080880333272, 46.0531209943234], [43.3271436092291, 46.04333569859], [43.3601046053836, 46.0275848058964], [43.4191597234939, 46.0034649102728], [43.4977854330709, 45.990417849295] ] + ] + }, + "properties" : { + "feature::id" : 676, + "id" : 123797, + "name" : "Manych-Gudilo", + "lge_id" : "ru", + "pfafstette" : 239, + "lke_type" : "N", + "altitude" : 11, + "objectid" : 74043, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 677, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.1574517029848, 48.5161400155649], [35.1640610694012, 48.4994020097052], [35.1715287950925, 48.4920201199414], [35.1808849111884, 48.5051530168467], [35.198481276323, 48.5175992263322], [35.2184810474272, 48.5273416041018], [35.2172793444424, 48.5494443554294], [35.2140175791979, 48.5785427348471], [35.1995113074528, 48.5952378227431], [35.1808849111884, 48.582405351584], [35.1634602179088, 48.5559249679546], [35.1492114539462, 48.5333501190258], [35.1574517029848, 48.5161400155649] ] + ] + }, + "properties" : { + "feature::id" : 677, + "id" : 123707, + "pfafstette" : 12115, + "altitude" : 49, + "objectid" : 74128, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_74128", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 678, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [42.4330765885369, 46.3037619025819], [42.4116176066654, 46.2901139901117], [42.4214029023988, 46.2716592657023], [42.4638916865043, 46.2609726927303], [42.5000286119758, 46.2722171992309], [42.5209725782824, 46.2912727751328], [42.5180541567478, 46.3047060977843], [42.4758228804248, 46.3099850073247], [42.4330765885369, 46.3037619025819] ] + ] + }, + "properties" : { + "feature::id" : 678, + "id" : 124541, + "pfafstette" : 24251, + "lke_type" : "N", + "altitude" : 12, + "objectid" : 74287, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_74287", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 679, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [44.6218069034975, 45.4733851400842], [44.6388882530672, 45.4684066562901], [44.6587163523164, 45.4858313495697], [44.6654973905878, 45.5203803103827], [44.6582013367515, 45.5328265198682], [44.6301329884636, 45.5375904138436], [44.6058414209852, 45.5319681605933], [44.5894467588354, 45.5224832906061], [44.5662710584142, 45.5266034151254], [44.5385460538363, 45.5349295000916], [44.5026666361472, 45.5326119300494], [44.4753708112067, 45.5340711408167], [44.4533968137704, 45.5388350347922], [44.4128822559971, 45.55188209577], [44.370650979674, 45.5676329884636], [44.3192352591101, 45.5845855841421], [44.2607809924922, 45.6041990935726], [44.207734389306, 45.6285335790148], [44.1770051272661, 45.6401643471892], [44.2038717725691, 45.6116239013001], [44.265158624794, 45.5831263733748], [44.3066173777696, 45.5676329884636], [44.3322823200879, 45.5584056262589], [44.3699642922542, 45.5498220335104], [44.407217084783, 45.5334702893243], [44.4479891503388, 45.5147151391687], [44.4892762314594, 45.5060886284563], [44.5055850576817, 45.5034277147043], [44.5236964383812, 45.4938999267533], [44.5448120765428, 45.4825695843252], [44.5829232283465, 45.4736426478667], [44.6218069034975, 45.4733851400842] ] + ] + }, + "properties" : { + "feature::id" : 679, + "id" : 124703, + "name" : "Manych Reservoir", + "lge_id" : "ru", + "pfafstette" : 391, + "altitude" : 22, + "objectid" : 74468, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 680, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [51.4636170115363, 43.2385180141], [51.4892819538546, 43.2286468824391], [51.5263630745285, 43.2283893746567], [51.5605686916316, 43.2438398416041], [51.5754612250503, 43.2607495193188], [51.561169543124, 43.2706206509797], [51.5364917139718, 43.2845689891961], [51.5031873741073, 43.3023799441494], [51.4694967725691, 43.3035816471342], [51.4572651529024, 43.2702773072697], [51.4636170115363, 43.2385180141] ] + ] + }, + "properties" : { + "feature::id" : 680, + "id" : 123104, + "pfafstette" : 133, + "altitude" : -41, + "objectid" : 74748, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_74748", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 681, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [41.1120616645303, 47.0696329655741], [41.0886284563267, 47.0782594762864], [41.062534334371, 47.0842250732467], [41.0412470243545, 47.0916927989379], [41.001762497711, 47.1142676478667], [40.9755825398279, 47.1428080937557], [41.0112044497345, 47.1606619666728], [41.050345632668, 47.1823784563267], [41.0263974088995, 47.1817776048343], [40.9859686870536, 47.1644816654459], [40.9521493316242, 47.1496749679546], [40.9066562900568, 47.1433660272844], [40.8686309741806, 47.1531942409815], [40.8332665720564, 47.1540526002564], [40.7939537172679, 47.13976091833], [40.7767865317707, 47.1190315418422], [40.7832242263322, 47.1049973676982], [40.8005630836843, 47.1049973676982], [40.8076016297381, 47.0979159036807], [40.8130092931697, 47.0863280534701], [40.8229662607581, 47.0943107947262], [40.835841649881, 47.109203328145], [40.8433093755722, 47.1264563495697], [40.8948109320637, 47.1237954358176], [40.9515484801318, 47.1041390084234], [40.9755825398279, 47.0949116462186], [41.0024491851309, 47.0854696941952], [41.0270840963194, 47.0738389260209], [41.0488005859733, 47.0610493728255], [41.0776414576085, 47.0479593938839], [41.1195293902216, 47.0434530076909], [41.1472543947995, 47.0419937969236], [41.1724901574803, 47.0247836934627], [41.2048503021425, 47.006371887017], [41.2309444240981, 47.0071873283282], [41.2737765519136, 46.989676799121], [41.3187545779161, 46.9632822514192], [41.3407285753525, 46.9486043078191], [41.3593549716169, 46.9456858862846], [41.3730887200146, 46.9489905694928], [41.3891400384545, 46.9471450970518], [41.4111140358909, 46.9471450970518], [41.4299121040102, 46.934098036074], [41.4453625709577, 46.9215659906611], [41.4645898187145, 46.9043129692364], [41.4833878868339, 46.8829398232924], [41.4995250412012, 46.8636696575719], [41.501241759751, 46.8306228254898], [41.5090528291522, 46.7931554431423], [41.5208981871452, 46.7699797427211], [41.5285375846914, 46.7518254440579], [41.5726572514192, 46.7277484663981], [41.6052749038638, 46.7253450604285], [41.5755756729537, 46.7408384453397], [41.5380653726424, 46.7681771882439], [41.5307693188061, 46.7970180598791], [41.5235591008973, 46.8133698040652], [41.5185806171031, 46.8338845907343], [41.519095632668, 46.8589057635964], [41.5036451657206, 46.8832402490386], [41.4917139718, 46.9001499267533], [41.4624439205274, 46.9299349935909], [41.4140324574254, 46.9602779939572], [41.3870799761948, 46.9637972669841], [41.3491404962461, 46.9679603094671], [41.3100851492401, 46.9947411188427], [41.2812442776048, 47.0146550540194], [41.2328328145028, 47.0289467359458], [41.1930049441494, 47.0432384178722], [41.1760094305072, 47.0488177531588], [41.1522328785937, 47.0607489470793], [41.1242503662333, 47.0648690715986], [41.1120616645303, 47.0696329655741] ] + ] + }, + "properties" : { + "feature::id" : 681, + "id" : 123033, + "name" : "Veselovskoe Reservoir", + "lge_id" : "ru", + "pfafstette" : 21315, + "lke_type" : "R", + "altitude" : 6, + "objectid" : 74879, + "scalerank" : 10, + "featurecla" : "Reservoir", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 682, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.290262772386, 48.0267464750046], [33.2846834370994, 48.0243001510712], [33.2791041018129, 48.00915010987], [33.260391869621, 47.9785066837575], [33.2445980589636, 47.9414255630837], [33.2302634590734, 47.9369620948544], [33.1973024629189, 47.9420264145761], [33.1736117469328, 47.9526271516206], [33.157217084783, 47.9648587712873], [33.1518952572789, 47.9824122184582], [33.1508652261491, 48.0011244506501], [33.142367469328, 47.9826697262406], [33.1530969602637, 47.957391045596], [33.1640839589819, 47.9437431331258], [33.2014225874382, 47.9229708386742], [33.2615077366783, 47.9134430507233], [33.2856276323018, 47.9282926661783], [33.2775590551181, 47.9517687923457], [33.2739539461637, 47.9842147729354], [33.2873443508515, 48.0115535158396], [33.290262772386, 48.0267464750046] ] + ] + }, + "properties" : { + "feature::id" : 682, + "id" : 126220, + "pfafstette" : 1145, + "lke_type" : "N", + "altitude" : 92, + "objectid" : 75954, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_75954", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 683, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [45.09047106757, 45.2566065052188], [45.1035181285479, 45.2450186550082], [45.1162218458158, 45.2346325077825], [45.1344190624428, 45.2346325077825], [45.1416292803516, 45.250726744186], [45.1151059787585, 45.270941105109], [45.0658361563816, 45.2905546145395], [45.0459222212049, 45.2923571690167], [45.0622310474272, 45.2712415308551], [45.09047106757, 45.2566065052188] ] + ] + }, + "properties" : { + "feature::id" : 683, + "id" : 124979, + "pfafstette" : 223, + "altitude" : 11, + "objectid" : 76613, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_76613", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 684, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [38.8859927211133, 45.8958695751694], [38.8685680278337, 45.8845392327413], [38.8834176432888, 45.8598614035891], [38.9128593664164, 45.8509773850943], [38.9294257004212, 45.8705908945248], [38.933631660868, 45.8941099386559], [38.9167219831533, 45.90745742538], [38.9006706647134, 45.9041956601355], [38.8859927211133, 45.8958695751694] ] + ] + }, + "properties" : { + "feature::id" : 684, + "id" : 127744, + "pfafstette" : 17, + "lke_type" : "N", + "altitude" : -2, + "objectid" : 76762, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_76762", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 685, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [41.7163465940304, 45.0494414942318], [41.7148873832631, 45.0274245788317], [41.7383205914668, 45.0099140496246], [41.761152948178, 45.0250211728621], [41.7675906427394, 45.0366090230727], [41.7878479216261, 45.0532182750412], [41.7929980772752, 45.0767802371361], [41.7687923457242, 45.0890118568028], [41.7426982237685, 45.0803424281267], [41.7163465940304, 45.0494414942318] ] + ] + }, + "properties" : { + "feature::id" : 685, + "id" : 127693, + "pfafstette" : 29981, + "lke_type" : "N", + "altitude" : 229, + "objectid" : 76947, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_76947", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 686, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [38.3467714246475, 46.226466649881], [38.4133801043765, 46.1922610327779], [38.4557830525545, 46.1896001190258], [38.4514054202527, 46.2214452481231], [38.4439376945614, 46.2481831395349], [38.4348390862479, 46.2594705639993], [38.4106333546969, 46.2728180507233], [38.3782732100348, 46.2989980086065], [38.3261708020509, 46.3198132210218], [38.2908063999267, 46.3099850073247], [38.2917505951291, 46.2775819446988], [38.3066860465116, 46.2523461820179], [38.3467714246475, 46.226466649881] ] + ] + }, + "properties" : { + "feature::id" : 686, + "id" : 127386, + "name" : "Beysugskiy Liman", + "lge_id" : "ru", + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : -3, + "objectid" : 77093, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 687, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [38.7084840230727, 46.1604588216444], [38.7237628181652, 46.1625618018678], [38.7561229628273, 46.172046671855], [38.7743201794543, 46.1877975645486], [38.761015610694, 46.2053080937557], [38.7397283006775, 46.212775819447], [38.7181834828786, 46.2059518632119], [38.7059089452481, 46.1806731825673], [38.7084840230727, 46.1604588216444] ] + ] + }, + "properties" : { + "feature::id" : 687, + "id" : 127380, + "pfafstette" : 535, + "lke_type" : "N", + "altitude" : -2, + "objectid" : 77123, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_77123", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 688, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [38.6162104010254, 46.1771109915766], [38.6328625709577, 46.175050929317], [38.6633343252152, 46.1854370765428], [38.6784414484527, 46.2038488829885], [38.6601583958982, 46.2195997756821], [38.6262532045413, 46.2193851858634], [38.6098585423915, 46.194406930965], [38.6162104010254, 46.1771109915766] ] + ] + }, + "properties" : { + "feature::id" : 688, + "id" : 127397, + "pfafstette" : 531, + "lke_type" : "N", + "altitude" : -2, + "objectid" : 77133, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_77133", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 689, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.604593938839, 47.5361512314594], [33.6251087255082, 47.5230612525179], [33.6545504486358, 47.5210011902582], [33.665537447354, 47.5233187603003], [33.6597006042849, 47.5459794451566], [33.6365249038638, 47.5655500366233], [33.6118041567479, 47.5626316150888], [33.604593938839, 47.5361512314594] ] + ] + }, + "properties" : { + "feature::id" : 689, + "id" : 127252, + "pfafstette" : 115873, + "lke_type" : "N", + "altitude" : 86, + "objectid" : 77405, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_77405", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 690, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [46.8849998855521, 42.9608387886834], [46.9025962506867, 42.9399377403406], [46.9257719511079, 42.9444441265336], [46.9316517121406, 42.9661176982238], [46.914570362571, 42.984271996887], [46.8947851812855, 42.9946152261491], [46.8757296053836, 42.9798085286578], [46.8849998855521, 42.9608387886834] ] + ] + }, + "properties" : { + "feature::id" : 690, + "id" : 128196, + "pfafstette" : 2591, + "altitude" : 331, + "objectid" : 77543, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_77543", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 691, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.3825993407801, 46.5493814090826], [35.3765908258561, 46.5719562580114], [35.3682647408899, 46.5981362158945], [35.3618270463285, 46.6129858313496], [35.3569343984618, 46.6382645119941], [35.3504967039004, 46.6614402124153], [35.3496383446255, 46.6718692776048], [35.3474066105109, 46.6884785295733], [35.3213124885552, 46.6992080205091], [35.2995959989013, 46.7072765976927], [35.2892098516755, 46.70873580846], [35.2868922816334, 46.6929849157663], [35.2858622505036, 46.6756460584142], [35.2808837667094, 46.6546162561802], [35.2895531953855, 46.6356465162058], [35.2886090001831, 46.6159900888116], [35.2807979307819, 46.5909689159495], [35.2910124061527, 46.5735013047061], [35.2978792803516, 46.5303258331807], [35.3074070683025, 46.4869357718367], [35.3239734023073, 46.4586099157663], [35.3430289782091, 46.4328162195569], [35.3641446163706, 46.4084388161509], [35.3777925288409, 46.3881815372642], [35.395303058048, 46.4078379646585], [35.4217405237136, 46.4399406015382], [35.4565899102728, 46.4536314319722], [35.4868041567478, 46.4637600714155], [35.4975336476836, 46.4780517533419], [35.4910959531221, 46.4913563221022], [35.479765610694, 46.4886954083501], [35.4637142922542, 46.4738887108588], [35.434358405054, 46.4777084096319], [35.4158178447171, 46.5045321369712], [35.3977064640176, 46.5321283876579], [35.3825993407801, 46.5493814090826] ] + ] + }, + "properties" : { + "feature::id" : 691, + "id" : 128011, + "name" : "Molochnyy Liman", + "lge_id" : "ru", + "pfafstette" : 13, + "lke_type" : "N", + "altitude" : 0, + "objectid" : 77598, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 692, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [38.1870307635964, 45.9472852957334], [38.1948418329976, 45.9484869987182], [38.2209359549533, 45.94518231551], [38.2536394433254, 45.9472852957334], [38.2544119666728, 45.9669417231276], [38.2335538362937, 45.9811904870903], [38.2107214795825, 45.9794308505768], [38.1921809192456, 45.9764265931148], [38.1838548342794, 45.9639374656656], [38.1870307635964, 45.9472852957334] ] + ] + }, + "properties" : { + "feature::id" : 692, + "id" : 127927, + "pfafstette" : 5, + "lke_type" : "N", + "altitude" : -3, + "objectid" : 77671, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_77671", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 693, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [38.1726103277788, 45.8212352362205], [38.1847131935543, 45.80162172679], [38.1760437648782, 45.7900338765794], [38.1573315326863, 45.8066431285479], [38.1517521973997, 45.8370290468779], [38.1460870261857, 45.8596468137704], [38.1338983244827, 45.8783161279985], [38.123168833547, 45.9008909769273], [38.1211087712873, 45.913465940304], [38.1161302874931, 45.9267705090643], [38.0976755630837, 45.9180152444607], [38.0932979307819, 45.9019210080571], [38.0889202984801, 45.8893031267167], [38.1029973905878, 45.8658699185131], [38.1041132576451, 45.8625652353049], [38.1205079197949, 45.8643677897821], [38.1382759567845, 45.8444109366416], [38.1372459256546, 45.8144112799854], [38.1395634956967, 45.7908922358542], [38.1538122596594, 45.7733817066471], [38.16505676616, 45.76355349295], [38.1826531312946, 45.7730812809009], [38.1981035982421, 45.7769868156015], [38.2103781358725, 45.7748409174144], [38.231493774034, 45.7751413431606], [38.2579312396997, 45.7799052371361], [38.2673731917231, 45.8069435542941], [38.2596479582494, 45.8334239379235], [38.2394765152902, 45.8501190258194], [38.2429099523897, 45.8661703442593], [38.2581029115547, 45.8780586202161], [38.2361289141183, 45.8804191082219], [38.2011936916316, 45.8893460446805], [38.1797347097601, 45.9101612570958], [38.1635975553928, 45.9229937282549], [38.1502929866325, 45.9327361060245], [38.1376751052921, 45.925311298297], [38.1306365592382, 45.8997321919062], [38.1502929866325, 45.8681874885552], [38.1606791338583, 45.845355131844], [38.1586190715986, 45.8328230864311], [38.1726103277788, 45.8212352362205] ] + ] + }, + "properties" : { + "feature::id" : 693, + "id" : 128078, + "name" : "Liman in Primorsko-Akhtarsk area", + "lge_id" : "ru", + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : -5, + "objectid" : 77868, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 694, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.7439457059147, 45.4951445477019], [37.7527009705182, 45.4707242263322], [37.7753616553745, 45.467419543124], [37.7729582494049, 45.4870759705182], [37.7787950924739, 45.5043289919429], [37.7920138253067, 45.5197794588903], [37.7712415308551, 45.5301656061161], [37.7472933070866, 45.5444572880425], [37.7307269730818, 45.5506803927852], [37.7187957791613, 45.5399938198132], [37.729868613807, 45.5310668833547], [37.7458340963193, 45.5167752014283], [37.7439457059147, 45.4951445477019] ] + ] + }, + "properties" : { + "feature::id" : 694, + "id" : 129225, + "pfafstette" : 0, + "lke_type" : "N", + "altitude" : -3, + "objectid" : 78488, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_78488", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 695, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [42.2299887841055, 44.2181634544955], [42.2575850347922, 44.2133995605201], [42.2954386788134, 44.2187643059879], [42.3159105475188, 44.2312105154734], [42.3161680553012, 44.2520257278887], [42.2732071735946, 44.2656736403589], [42.2287870811207, 44.2440429866325], [42.2299887841055, 44.2181634544955] ] + ] + }, + "properties" : { + "feature::id" : 695, + "id" : 128995, + "pfafstette" : 95225, + "altitude" : 620, + "objectid" : 78830, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_78830", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 696, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [39.493196072148, 45.1439468503937], [39.4822090734298, 45.1178098104743], [39.4999771104193, 45.0964366645303], [39.5187751785387, 45.0928315555759], [39.5681308368431, 45.1397838079106], [39.5961133492034, 45.1834742950009], [39.5732809924922, 45.1896973997436], [39.547616050174, 45.1875515015565], [39.5271012635048, 45.1642041292803], [39.493196072148, 45.1439468503937] ] + ] + }, + "properties" : { + "feature::id" : 696, + "id" : 128812, + "pfafstette" : 195, + "altitude" : 24, + "objectid" : 78833, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_78833", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 697, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [39.375, 44.9764809558689], [39.3684335515473, 44.9851933025087], [39.375, 44.9884121497894], [39.3847852957334, 44.9931760437649], [39.4028537584691, 44.9989270509064], [39.4064588674235, 45], [39.4065017853873, 45], [39.4313942043582, 45.007510643655], [39.4438404138436, 45.0333472578282], [39.4463296557407, 45.0571238097418], [39.4426387108588, 45.0894410364402], [39.4040983794177, 45.0877672358542], [39.3932830525545, 45.0838617011536], [39.375, 45.0806428538729], [39.3546568851859, 45.0770377449185], [39.3227259201611, 45.0589692821828], [39.3047003753891, 45.0426175379967], [39.2786062534334, 45.0357935817616], [39.2636708020509, 45.03038591833], [39.2459027650613, 45.0271241530855], [39.217920252701, 45.0244203213697], [39.1917402948178, 45.0209010483428], [39.1653028291522, 45.0223602591101], [39.1489081670024, 45.0158796465849], [39.130110098883, 45.0081114951474], [39.1231573887566, 45], [39.0942306811939, 44.9664381523531], [39.1110974409449, 44.9527473219191], [39.1162046786303, 44.9385414759202], [39.1355177623146, 44.9311166681927], [39.1533287172679, 44.92455021974], [39.1692083638528, 44.9171254120125], [39.1970192043582, 44.9179837712873], [39.2407526094122, 44.9251081532686], [39.2714818714521, 44.9409448818898], [39.2931125251785, 44.9512881111518], [39.3246143105658, 44.9643780900934], [39.3454724409449, 44.9664810703168], [39.3612233336385, 44.9536915171214], [39.375, 44.9518460446805], [39.3881758148691, 44.950086408167], [39.3992915674785, 44.9587558368431], [39.3791630424831, 44.9709445385461], [39.375, 44.9764809558689] ] + ] + }, + "properties" : { + "feature::id" : 697, + "id" : 129174, + "name" : "Krasnodarsk Reservoir", + "lge_id" : "ru", + "pfafstette" : 1593, + "lke_type" : "N", + "altitude" : 23, + "objectid" : 79047, + "scalerank" : 10, + "featurecla" : "Reservoir", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 698, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.4869529390221, 45.26441757462], [37.5134762406153, 45.2509842519685], [37.5369094488189, 45.2435165262772], [37.5532182750412, 45.2399972532503], [37.5746772569126, 45.2423577412562], [37.5660078282366, 45.259911188427], [37.5283258560703, 45.2833873145944], [37.5014592107673, 45.3045029527559], [37.4797427211133, 45.3223139077092], [37.4416315693096, 45.3164770646402], [37.42455021974, 45.2965202114997], [37.4569103644021, 45.273945362571], [37.4869529390221, 45.26441757462] ] + ] + }, + "properties" : { + "feature::id" : 698, + "id" : 129996, + "pfafstette" : 0, + "lke_type" : "N", + "altitude" : -5, + "objectid" : 79122, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_79122", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 699, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [38.5002460629921, 44.9566528566197], [38.5120914209852, 44.9456229399378], [38.5320053561619, 44.9596141961179], [38.5576273805164, 44.9798714750046], [38.5796013779528, 44.9893992629555], [38.5781421671855, 45], [38.5781850851492, 45], [38.5774983977293, 45.004506386193], [38.5352671214063, 45.0069097921626], [38.4961259384728, 45.0030471754257], [38.4836797289874, 45], [38.4814479948727, 44.9994420664714], [38.4853535295733, 44.978970197766], [38.5002460629921, 44.9566528566197] ] + ] + }, + "properties" : { + "feature::id" : 699, + "id" : 130026, + "pfafstette" : 145, + "altitude" : 8, + "objectid" : 79179, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_79179", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 700, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [38.7911869392053, 45], [38.7906719236404, 44.9997424922176], [38.7865088811573, 44.9913305713239], [38.7865088811573, 44.977468069035], [38.8047060977843, 44.9616742583776], [38.8385254532137, 44.9616742583776], [38.8674521607764, 44.977468069035], [38.8637182979308, 45], [38.863675379967, 45], [38.8613578099249, 45.0142487639626], [38.8453064914851, 45.0128324711591], [38.8162081120674, 45.0110728346457], [38.791229857169, 45], [38.7911869392053, 45] ] + ] + }, + "properties" : { + "feature::id" : 700, + "id" : 129847, + "pfafstette" : 1517, + "lke_type" : "N", + "altitude" : 12, + "objectid" : 79363, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_79363", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 701, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.7399972532503, 45.6009373283282], [37.7527009705182, 45.5988772660685], [37.7776792254166, 45.6253147317341], [37.8019707928951, 45.6639408991027], [37.7925288408716, 45.6800780534701], [37.7800826313862, 45.6865157480315], [37.7807693188061, 45.7020520509064], [37.7587094854422, 45.7123952801685], [37.7354479490936, 45.6939834737228], [37.7263493407801, 45.6851423731917], [37.7093538271379, 45.677245467863], [37.7043753433437, 45.6517521973997], [37.7267785204175, 45.6324391137154], [37.7375938472807, 45.6173319904779], [37.7399972532503, 45.6009373283282] ] + ] + }, + "properties" : { + "feature::id" : 701, + "id" : 128782, + "pfafstette" : 0, + "altitude" : -4, + "objectid" : 79555, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_79555", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 702, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.0922907892327, 45.0847629783922], [36.0949517029848, 45.0654498947079], [36.1194149423183, 45.055922106757], [36.1201016297381, 45.071115065922], [36.1105738417872, 45.1053636009888], [36.1082562717451, 45.1335607031679], [36.0922907892327, 45.1216295092474], [36.0910890862479, 45.0975525315876], [36.0922907892327, 45.0847629783922] ] + ] + }, + "properties" : { + "feature::id" : 702, + "id" : 131347, + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : 50, + "objectid" : 80239, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_80239", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 703, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.2139946896173, 45.0193989196118], [37.2351103277788, 45.0099140496246], [37.2630928401392, 45.0012446209485], [37.2839509705182, 45.0173388573521], [37.3067833272294, 45.0363085973265], [37.3144227247757, 45.048239791247], [37.2981138985534, 45.0628318989196], [37.248758240249, 45.0678962186413], [37.2145955411097, 45.0663511719465], [37.1682441402673, 45.0633469144845], [37.1194034975279, 45.0571238097418], [37.1654973905878, 45.0366090230727], [37.2139946896173, 45.0193989196118] ] + ] + }, + "properties" : { + "feature::id" : 703, + "id" : 130878, + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : -3, + "objectid" : 80500, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_80500", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 704, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.3357214795825, 45.1781524674968], [36.3620731093206, 45.1680238280535], [36.3906564731734, 45.1638178676067], [36.3972658395898, 45.1826159357261], [36.38087117744, 45.19630676616], [36.3620731093206, 45.1954484068852], [36.3276529023988, 45.1960063404138], [36.3134041384362, 45.1882381889764], [36.3357214795825, 45.1781524674968] ] + ] + }, + "properties" : { + "feature::id" : 704, + "id" : 131112, + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : -2, + "objectid" : 80531, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_80531", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 705, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.9704724409449, 46.7039719144845], [29.9629188793261, 46.7019118522249], [29.9500434902033, 46.674186847647], [29.9416315693097, 46.6489510849661], [29.9430907800769, 46.6347023210035], [29.9438633034243, 46.6186510025636], [29.9458375297565, 46.6034580433986], [29.963605566746, 46.5950890404688], [29.9868671030947, 46.6004537859366], [29.9776826588537, 46.6189085103461], [29.9598287859367, 46.6430284059696], [29.9666956601355, 46.6762898278704], [29.9704724409449, 46.7039719144845] ] + ] + }, + "properties" : { + "feature::id" : 705, + "id" : 130916, + "pfafstette" : 12115, + "lke_type" : "N", + "altitude" : 11, + "objectid" : 80659, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_80659", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 706, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.7716077641457, 45.3571203763047], [35.7856848562534, 45.3439874793994], [35.8233668284197, 45.3593950283831], [35.8722933070866, 45.3716695660136], [35.8890313129463, 45.3731287767808], [35.8704049166819, 45.3861758377587], [35.8449974821461, 45.4072914759202], [35.8219076176524, 45.4019267304523], [35.7906633400476, 45.3820127952756], [35.7707494048709, 45.3734721204908], [35.7716077641457, 45.3571203763047] ] + ] + }, + "properties" : { + "feature::id" : 706, + "id" : 130917, + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : -4, + "objectid" : 80692, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_80692", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 707, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.8662218458158, 45.9808900613441], [33.8728312122322, 46.0115334874565], [33.8724878685222, 46.0156965299396], [33.8842473905878, 46.0159969556858], [33.8608141823842, 46.0314474226332], [33.8291407251419, 46.0516617835561], [33.8115443600073, 46.0584857397913], [33.8049349935909, 46.0460395303058], [33.8269948269548, 46.0192158029665], [33.8421877861197, 45.9856539553195], [33.8430461453946, 45.9651391686504], [33.8662218458158, 45.9808900613441] ] + ] + }, + "properties" : { + "feature::id" : 707, + "id" : 130546, + "pfafstette" : 0, + "altitude" : -1, + "objectid" : 81114, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_81114", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 708, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.9806068027834, 45.1575947628639], [36.9745982878594, 45.1486678264054], [36.9580319538546, 45.1260929774767], [36.9621520783739, 45.09849672679], [37.0112502288958, 45.0830033418788], [37.0537390130013, 45.0788832173595], [37.0873866965757, 45.0764798113899], [37.1379440578648, 45.06811080846], [37.1661840780077, 45.0738188976378], [37.1605189067936, 45.0948486998718], [37.1587163523164, 45.1246337667094], [37.1812912012452, 45.1416292803516], [37.1994884178722, 45.149912447354], [37.1926215436733, 45.1618007233107], [37.1491885643655, 45.1757919794909], [37.0969144845266, 45.1861781267167], [37.0593183482878, 45.1858777009705], [37.0269582036257, 45.1721868705365], [37.0141686504303, 45.1763928309833], [36.9690189525728, 45.1977659769273], [36.8919382896905, 45.1879806811939], [36.852797106757, 45.1727877220289], [36.8447285295733, 45.1665646172862], [36.8582047701886, 45.1581956143563], [36.9161440212415, 45.1629595083318], [36.97047816334, 45.1674229765611], [36.9806068027834, 45.1575947628639] ] + ] + }, + "properties" : { + "feature::id" : 708, + "id" : 130707, + "name" : "Kiziltashskiy Liman", + "lge_id" : "ru", + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : -3, + "objectid" : 81160, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 709, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [38.0673754806812, 45.0122316196667], [38.07424235488, 45.0006008514924], [38.1005939846182, 45.0051501556491], [38.1399068394067, 45.0104290651895], [38.1738120307636, 45.0184547244095], [38.201451199414, 45.025879532137], [38.1995628090093, 45.0502998535067], [38.1641984068852, 45.0589692821828], [38.1330399652078, 45.0381111518037], [38.1086625618019, 45.0300854925838], [38.0788774949643, 45.0312442776048], [38.0673754806812, 45.0122316196667] ] + ] + }, + "properties" : { + "feature::id" : 709, + "id" : 130153, + "pfafstette" : 123, + "altitude" : 2, + "objectid" : 81164, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_81164", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 710, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.9022729353598, 45.9865981505219], [33.898066974913, 45.9613194698773], [33.9093973173411, 45.9484869987182], [33.9155775041201, 45.9696026368797], [33.9311996429225, 45.9850531038271], [33.9570362570958, 45.9948813175243], [33.9497402032595, 46.0079283785021], [33.9167792071049, 46.0198595724226], [33.904075489837, 46.0067266755173], [33.9022729353598, 45.9865981505219] ] + ] + }, + "properties" : { + "feature::id" : 710, + "id" : 130611, + "pfafstette" : 483, + "lke_type" : "N", + "altitude" : -2, + "objectid" : 81169, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_81169", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 711, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.4614539461637, 46.8427686092291], [30.4724409448819, 46.8178761902582], [30.4941574345358, 46.7681771882439], [30.5024835195019, 46.7271905328694], [30.5078053470061, 46.6923840642739], [30.49913591833, 46.6694229536715], [30.4709817341146, 46.6846588308002], [30.4556171030947, 46.6899377403406], [30.4599947353965, 46.6735859961546], [30.5095220655558, 46.6549166819264], [30.5610236220473, 46.6519982603919], [30.5817959164988, 46.6441871909907], [30.5967313678814, 46.6153463193554], [30.6174178264054, 46.5921706189343], [30.6463445339681, 46.5755613669658], [30.6567306811939, 46.5597675563084], [30.6677176799121, 46.5517848150522], [30.6913225599707, 46.5603684078008], [30.683597326497, 46.5865483656839], [30.6523530488922, 46.6073635780992], [30.6335549807728, 46.6251745330526], [30.610980131844, 46.6536720609778], [30.571409769273, 46.672513047061], [30.5390496246109, 46.70873580846], [30.5273759384728, 46.7634132942685], [30.5072044955137, 46.8073612891412], [30.4858313495697, 46.8427686092291], [30.4712392418971, 46.8677897820912], [30.4536428767625, 46.8749570820363], [30.4543295641824, 46.8606654001099], [30.4614539461637, 46.8427686092291] ] + ] + }, + "properties" : { + "feature::id" : 711, + "id" : 130182, + "name" : "Liman near Odessa", + "pfafstette" : 2151, + "lke_type" : "N", + "altitude" : 50, + "objectid" : 81275, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 712, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.6035124061527, 46.7708810199597], [30.6008514924007, 46.7444006363303], [30.617160318623, 46.7170618934261], [30.6460011902582, 46.7048302737594], [30.6769879600806, 46.6932424235488], [30.6972452389672, 46.6694229536715], [30.7001636605018, 46.6504532136971], [30.7080605658304, 46.6236724043216], [30.7205067753159, 46.5886084279436], [30.7409357260575, 46.5740592382348], [30.7599913019594, 46.5838874519319], [30.7538969511079, 46.6010975553928], [30.7519227247757, 46.6144879600806], [30.7495193188061, 46.6317409815052], [30.7429099523897, 46.6525132759568], [30.7304637429042, 46.6774915308552], [30.6975027467497, 46.7039719144845], [30.653211408167, 46.719422381432], [30.6294348562534, 46.7328127861198], [30.6199070683025, 46.761653657755], [30.6035124061527, 46.7708810199597] ] + ] + }, + "properties" : { + "feature::id" : 712, + "id" : 130366, + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : 49, + "objectid" : 81318, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_81318", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 713, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.0409837941769, 45.893423251236], [34.0507690899103, 45.8981871452115], [34.0519707928951, 45.9143242995788], [34.0307693188061, 45.9520491897088], [34.0003834004761, 45.978229147592], [33.9985808459989, 45.951190830434], [34.0214990386376, 45.921148255814], [34.0348894433254, 45.9056548709028], [34.0409837941769, 45.893423251236] ] + ] + }, + "properties" : { + "feature::id" : 713, + "id" : 130657, + "pfafstette" : 487, + "altitude" : -4, + "objectid" : 81342, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_81342", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 714, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.0707688610145, 45.9735081715803], [34.0723139077092, 45.9990443600073], [34.0836442501373, 46.0192158029665], [34.0627861197583, 46.0287435909174], [34.0503399102728, 46.0237651071232], [34.046648965391, 45.9996452114997], [34.0354044588903, 45.9802892098517], [34.0399537630471, 45.9532508926936], [34.0600393700787, 45.9267705090643], [34.0815841878777, 45.9122213193554], [34.0892235854239, 45.9250108725508], [34.0964338033327, 45.9449677256913], [34.0927428584508, 45.9547101034609], [34.0707688610145, 45.9735081715803] ] + ] + }, + "properties" : { + "feature::id" : 714, + "id" : 130382, + "pfafstette" : 4891, + "lke_type" : "N", + "altitude" : -4, + "objectid" : 81365, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_81365", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 715, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [43.9882948406885, 41.6154035433071], [44.0075650064091, 41.6112834187878], [44.0293244140267, 41.6160473127632], [44.0531009659403, 41.6166481642556], [44.0812980681194, 41.6220129097235], [44.0888945477019, 41.6360041659037], [44.0622854101813, 41.6436864814137], [44.0313844762864, 41.6407680598791], [44.0105263459074, 41.6341586934627], [43.9909986724043, 41.6267338857352], [43.9882948406885, 41.6154035433071] ] + ] + }, + "properties" : { + "feature::id" : 715, + "id" : 132982, + "pfafstette" : 879, + "altitude" : 1505, + "objectid" : 81601, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_81601", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 716, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [43.7828465482512, 41.4129595083318], [43.8098419474455, 41.4150624885552], [43.8381248855521, 41.4406845129097], [43.8408287172679, 41.4730446575719], [43.8227602545321, 41.4908556125252], [43.7985974409449, 41.4763064228163], [43.7801427165354, 41.4394398919612], [43.7828465482512, 41.4129595083318] ] + ] + }, + "properties" : { + "feature::id" : 716, + "id" : 133297, + "pfafstette" : 98971, + "altitude" : 2077, + "objectid" : 81727, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_81727", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 717, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [48.1894484755539, 40.0606144707929], [48.2011650796557, 40.0477819996338], [48.2167872184582, 40.0528034013917], [48.2343835835927, 40.0488978666911], [48.2500057223952, 40.0332757278887], [48.2636965528291, 40.0195848974547], [48.2783315784655, 40.0213016160044], [48.2929666041018, 40.0371812625893], [48.2910352957334, 40.0519450421168], [48.2656278611976, 40.0586402444607], [48.2324522752243, 40.0782108359275], [48.2050706143563, 40.0762366095953], [48.1894484755539, 40.0606144707929] ] + ] + }, + "properties" : { + "feature::id" : 717, + "id" : 132921, + "pfafstette" : 37, + "altitude" : -14, + "objectid" : 82053, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_82053", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 718, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.4130939846182, 45.2037315738876], [33.450690120857, 45.1906845129097], [33.4712049075261, 45.1778520417506], [33.501762497711, 45.1668650430324], [33.532491759751, 45.16626419154], [33.5549807727523, 45.1790966626991], [33.5712895989746, 45.1989676799121], [33.5733496612342, 45.2233450833181], [33.5541224134774, 45.24205731551], [33.5145520509064, 45.2427010849661], [33.4928355612525, 45.2453619987182], [33.4601320728804, 45.2427010849661], [33.4306903497528, 45.2260059970701], [33.4101755630837, 45.2149760803882], [33.4130939846182, 45.2037315738876] ] + ] + }, + "properties" : { + "feature::id" : 718, + "id" : 132195, + "pfafstette" : 1, + "lke_type" : "N", + "altitude" : -2, + "objectid" : 82645, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_82645", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 719, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [43.3071438381249, 41.0609892876762], [43.3166716260758, 41.0826628593664], [43.294440120857, 41.0841220701337], [43.2872299029482, 41.0903880928401], [43.2810067982055, 41.1070831807361], [43.2283035387292, 41.1023192867607], [43.1652999679546, 41.0897872413477], [43.1397637795276, 41.0838645623512], [43.1462443920528, 41.0669119666728], [43.1698063541476, 41.0487147500458], [43.1897202893243, 41.0439508560703], [43.2087329472624, 41.0377277513276], [43.2329386788134, 41.016955456876], [43.2480458020509, 40.9940372642373], [43.26856058872, 40.9809472852957], [43.2883457700055, 40.9752821140817], [43.2994615226149, 41.0238223310749], [43.2937105154734, 41.041332860282], [43.3071438381249, 41.0609892876762] ] + ] + }, + "properties" : { + "feature::id" : 719, + "id" : 134395, + "name" : "Cildir", + "lge_id" : "tr", + "pfafstette" : 286771, + "altitude" : 1959, + "objectid" : 83661, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 720, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [43.1694630104377, 41.1992280488921], [43.1882610785571, 41.1956229399377], [43.2095913065373, 41.2006872596594], [43.2236254806812, 41.203090665629], [43.2419514511994, 41.2072107901483], [43.2526809421351, 41.2277255768174], [43.2458569859, 41.2435193874748], [43.2155998214613, 41.2420601767076], [43.1936258240249, 41.2268672175426], [43.1804500091558, 41.2089704266618], [43.1694630104377, 41.1992280488921] ] + ] + }, + "properties" : { + "feature::id" : 720, + "id" : 134180, + "pfafstette" : 99183, + "altitude" : 1798, + "objectid" : 84331, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_84331", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 721, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.5331984755539, 41.2735190441311], [35.5312671671855, 41.2907720655558], [35.5398078419703, 41.3046774858085], [35.5644427531588, 41.3086688564365], [35.5879188793261, 41.324290995239], [35.6132833958982, 41.3399131340414], [35.6328110694012, 41.349655511811], [35.6504074345358, 41.3555352728438], [35.6699351080388, 41.3594408075444], [35.710964681377, 41.363346342245], [35.7303636009888, 41.369698200879], [35.7131534975279, 41.3781959577001], [35.6835830205091, 41.3867795504486], [35.6562442776048, 41.3809427073796], [35.6269742263322, 41.3750629463468], [35.5886484847098, 41.3567369758286], [35.5586059100897, 41.3360075993408], [35.5331984755539, 41.3262223036074], [35.5117394936825, 41.3203854605384], [35.4902375938473, 41.3262223036074], [35.4550877815418, 41.3340333730086], [35.4316545733382, 41.3281965299396], [35.4179637429042, 41.3145056995056], [35.4267619254715, 41.3005573612891], [35.462898850943, 41.3027890954038], [35.5017396081304, 41.2842056171031], [35.5213531175609, 41.2752786806446], [35.5331984755539, 41.2735190441311] ] + ] + }, + "properties" : { + "feature::id" : 721, + "id" : 136598, + "pfafstette" : 1513, + "lke_type" : "N", + "altitude" : 171, + "objectid" : 84392, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_84392", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 722, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [45.316176638894, 39.2170618934261], [45.2828293810657, 39.214915995239], [45.2691814685955, 39.196718778612], [45.3108118934261, 39.1625989974364], [45.3242452160776, 39.1319555713239], [45.3554894936825, 39.1114407846548], [45.3873346227797, 39.0916126854056], [45.3969911646219, 39.1236724043216], [45.3735579564182, 39.1599380836843], [45.349395142831, 39.1831137841055], [45.3339875938473, 39.1968046145395], [45.316176638894, 39.2170618934261] ] + ] + }, + "properties" : { + "feature::id" : 722, + "id" : 135922, + "pfafstette" : 2517, + "altitude" : 764, + "objectid" : 84820, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_84820", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 723, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [49.3292208386742, 37.5095277879509], [49.2954014832448, 37.5223602591101], [49.2787063953488, 37.5178967908808], [49.2813673091009, 37.5027038317158], [49.3238560932064, 37.4771676432888], [49.3526540468779, 37.4628759613624], [49.3808511490569, 37.451931880608], [49.4130825398279, 37.4456229399377], [49.4011513459073, 37.4593137703717], [49.3713662790698, 37.4821890450467], [49.3292208386742, 37.5095277879509] ] + ] + }, + "properties" : { + "feature::id" : 723, + "id" : 135945, + "pfafstette" : 23, + "altitude" : -31, + "objectid" : 84915, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_84915", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 724, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [43.5500595129097, 39.7923771973997], [43.5476131889764, 39.7673560245376], [43.5628919840689, 39.7462403863761], [43.5925482970152, 39.7519055575902], [43.5949946209486, 39.7697165125435], [43.5798445797473, 39.7952956189343], [43.5661537493133, 39.8194155145578], [43.5506603644021, 39.8336213605567], [43.5417763459074, 39.8155099798572], [43.5500595129097, 39.7923771973997] ] + ] + }, + "properties" : { + "feature::id" : 724, + "id" : 135952, + "pfafstette" : 2549973, + "altitude" : 2251, + "objectid" : 84964, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_84964", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 725, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.2949179408533, 41.2461803012269], [35.3359475141915, 41.2422747665263], [35.3364196117927, 41.2339486815602], [35.3610974409449, 41.2573389718], [35.3496383446255, 41.2676392830983], [35.3281364447903, 41.2715448177989], [35.3066345449551, 41.2715448177989], [35.2695534242813, 41.2813301135323], [35.2461202160776, 41.2988835607032], [35.2246183162424, 41.3008577870353], [35.2050906427394, 41.3008577870353], [35.1958203625709, 41.2934758972716], [35.2363349203442, 41.2735190441311], [35.2949179408533, 41.2461803012269] ] + ] + }, + "properties" : { + "feature::id" : 725, + "id" : 136741, + "pfafstette" : 1593, + "lke_type" : "N", + "altitude" : 206, + "objectid" : 85183, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_85183", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 726, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.9453282365867, 40.4024131340414], [36.924083844534, 40.401812282549], [36.9152856619667, 40.3934861975829], [36.9309078007691, 40.3818983473723], [36.9961001876946, 40.3555467176341], [37.028074070683, 40.3542591787218], [36.9961001876946, 40.3809112342062], [36.9453282365867, 40.4024131340414] ] + ] + }, + "properties" : { + "feature::id" : 726, + "id" : 137088, + "pfafstette" : 24595, + "lke_type" : "N", + "altitude" : 787, + "objectid" : 85323, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_85323", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 727, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.1528308688885, 40.7229244872734], [30.1629595083318, 40.7199631477751], [30.1845901620582, 40.7167013825307], [30.2178945019227, 40.7122379143014], [30.2580657159861, 40.7063152353049], [30.2883228804248, 40.7030105520967], [30.313344053287, 40.71313919154], [30.3274211453946, 40.7312076542758], [30.3030008240249, 40.7464006134408], [30.2524434627358, 40.7443405511811], [30.1899549075261, 40.7321947674419], [30.1528308688885, 40.7229244872734] ] + ] + }, + "properties" : { + "feature::id" : 727, + "id" : 138295, + "name" : "Sapanca Golu", + "pfafstette" : 1185, + "lke_type" : "N", + "altitude" : 30, + "objectid" : 85734, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 728, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.7790554614539, 39.1381786760667], [33.75, 39.1590797244095], [33.7475536760667, 39.1608393609229], [33.7169102499542, 39.1774915308552], [33.7082837392419, 39.1922553103827], [33.6649365958616, 39.2068045000916], [33.6220615500824, 39.225602568211], [33.597426638894, 39.2472761399011], [33.5744655282915, 39.2656879463468], [33.5581137841055, 39.2788208432522], [33.5444229536715, 39.2892069904779], [33.5224918741989, 39.2805375618019], [33.5207751556491, 39.2626836888848], [33.5212472532503, 39.2428126716719], [33.5090585515473, 39.2282205639993], [33.4980715528292, 39.2038431605933], [33.5144232970152, 39.1696804614539], [33.549186847647, 39.1670195477019], [33.5825341054752, 39.1714400979674], [33.6063535753525, 39.1798091008973], [33.6336923182567, 39.181525819447], [33.6672541659037, 39.1607535249954], [33.6939920573155, 39.143800929317], [33.7139918284197, 39.1437580113532], [33.75, 39.1242303378502], [33.7521888161509, 39.1230715528292], [33.7668667597509, 39.1066768906794], [33.7900424601721, 39.0971920206922], [33.8147202893243, 39.0891234435085], [33.8378959897455, 39.0959473997436], [33.8703848882988, 39.0911835057682], [33.8819727385094, 39.0804969327962], [33.8938180965025, 39.0947886147226], [33.8884533510346, 39.1156038271379], [33.8596124793994, 39.124273255814], [33.8142052737594, 39.1245307635964], [33.7790554614539, 39.1381786760667] ] + ] + }, + "properties" : { + "feature::id" : 728, + "id" : 138674, + "pfafstette" : 77173, + "lke_type" : "N", + "altitude" : 856, + "objectid" : 86320, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_86320", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 729, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.750967084783, 40.0491982924373], [31.7422118201794, 40.0506575032045], [31.6949591420985, 40.0319452710126], [31.6729851446621, 40.04773908167], [31.6679637429042, 40.08580731551], [31.643800929317, 40.100656930965], [31.6298955090643, 40.0958930369896], [31.6411400155649, 40.0863652490386], [31.6553887795276, 40.069112227614], [31.6456464017579, 40.0468378044314], [31.621097326497, 40.0449923319905], [31.6010975553928, 40.043576039187], [31.5739734023073, 40.0483399331624], [31.5418707654276, 40.0510437648782], [31.5168495925655, 40.0426747619484], [31.5039312854788, 40.0469236403589], [31.4714423869255, 40.0503999954221], [31.4746183162424, 40.0332757278887], [31.5214847326497, 40.0254646584875], [31.5468921671855, 40.0273959668559], [31.5957328099249, 40.0284689159495], [31.6289083958982, 40.0195848974547], [31.654315830434, 40.0156793627541], [31.6757748123054, 40.0000572239517], [31.7166756317524, 40.029541865043], [31.750967084783, 40.0491982924373] ] + ] + }, + "properties" : { + "feature::id" : 729, + "id" : 138486, + "pfafstette" : 1793, + "lke_type" : "N", + "altitude" : 467, + "objectid" : 86390, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_86390", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 730, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [34.3868596639809, 39.1938432750412], [34.4011513459073, 39.1950020600623], [34.4204215116279, 39.2092937419887], [34.4112799853507, 39.2295081029116], [34.3868596639809, 39.2493791201245], [34.3666023850943, 39.2380916956601], [34.3684049395715, 39.217576908991], [34.3835549807727, 39.2075341054752], [34.3868596639809, 39.1938432750412] ] + ] + }, + "properties" : { + "feature::id" : 730, + "id" : 138582, + "name" : "Seyfe Golu", + "pfafstette" : 4871, + "lke_type" : "N", + "altitude" : 1115, + "objectid" : 86543, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 731, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.3689085103461, 37.2871698177989], [35.3442306811939, 37.2771270142831], [35.3147031221388, 37.2628353323567], [35.3047032365867, 37.2565263916865], [35.2868922816334, 37.2410759247391], [35.2591672770555, 37.2336511170115], [35.2502403405969, 37.2274280122688], [35.2686950650064, 37.2119346273576], [35.3055615958616, 37.2101320728804], [35.3291235579564, 37.2375137337484], [35.3574494140267, 37.2520200054935], [35.3819555713239, 37.2500028611976], [35.3956464017579, 37.259788156931], [35.4104101812855, 37.2766978346457], [35.3856465162058, 37.2854530992492], [35.3689085103461, 37.2871698177989] ] + ] + }, + "properties" : { + "feature::id" : 731, + "id" : 139603, + "pfafstette" : 39, + "lke_type" : "N", + "altitude" : 137, + "objectid" : 86928, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_86928", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 732, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.8567169474455, 38.3592605520967], [31.8674464383812, 38.3321793169749], [31.8849998855521, 38.3238532320088], [31.8935834783007, 38.3553979353598], [31.8879612250504, 38.3899039782091], [31.8686481413661, 38.3854405099799], [31.8567169474455, 38.3592605520967] ] + ] + }, + "properties" : { + "feature::id" : 732, + "id" : 139553, + "pfafstette" : 9281, + "lke_type" : "N", + "altitude" : 1022, + "objectid" : 87090, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_87090", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 733, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.9116319126534, 38.2739396401758], [29.8822331074895, 38.2614934306904], [29.8613320591467, 38.2501201702985], [29.8430490065922, 38.2362147500458], [29.847426638894, 38.2153566196667], [29.8803876350485, 38.2100347921626], [29.9169966581212, 38.2082751556492], [29.9447216626992, 38.2248414896539], [29.9397002609412, 38.259390450467], [29.9116319126534, 38.2739396401758] ] + ] + }, + "properties" : { + "feature::id" : 733, + "id" : 139900, + "pfafstette" : 939, + "lke_type" : "N", + "altitude" : 815, + "objectid" : 87121, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_87121", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 734, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.2790812122322, 37.0772580571324], [35.3123855520967, 37.064811847647], [35.3347458112067, 37.0642109961545], [35.342041865043, 37.0793610373558], [35.3252180232558, 37.0849832906061], [35.33019650705, 37.0983736952939], [35.3427714704266, 37.1106053149606], [35.3276643471891, 37.1174292711958], [35.310325489837, 37.1174292711958], [35.2906690624428, 37.1079014832448], [35.266592084783, 37.0882450558506], [35.2790812122322, 37.0772580571324] ] + ] + }, + "properties" : { + "feature::id" : 734, + "id" : 139769, + "name" : "Seyhan Baraji", + "pfafstette" : 15, + "lke_type" : "N", + "altitude" : 56, + "objectid" : 87186, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 735, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [33.066402673503, 38.5878845449551], [33.0742137429042, 38.564708844534], [33.1084193600073, 38.5501596548251], [33.1315950604285, 38.5587432475737], [33.1262303149606, 38.5816614402124], [33.1071747390588, 38.6027770783739], [33.0879045733382, 38.6265965482512], [33.0709519776598, 38.6458667139718], [33.0610379280352, 38.6399011170115], [33.0429694652994, 38.6265965482512], [33.0344287905146, 38.6123048663249], [33.0485917185497, 38.6054809100897], [33.064728872917, 38.6018758011353], [33.066402673503, 38.5878845449551] ] + ] + }, + "properties" : { + "feature::id" : 735, + "id" : 139231, + "pfafstette" : 31, + "altitude" : 922, + "objectid" : 87244, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_87244", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 736, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [31.4814422724776, 38.4915766343161], [31.4969785753525, 38.5076279527559], [31.5034162699139, 38.5287006729537], [31.499896996887, 38.5584857397913], [31.5041458752976, 38.5893437557224], [31.5035450238052, 38.602433734664], [31.471184879143, 38.6048800585973], [31.4323870399194, 38.5962106299213], [31.4006277467497, 38.5765971204908], [31.3747482146127, 38.5656101217726], [31.3587827321003, 38.5650092702802], [31.3408430232558, 38.5680135277422], [31.316766045596, 38.5709748672404], [31.2998134499176, 38.5563827595678], [31.3076245193188, 38.5332070591467], [31.3388687969236, 38.4971988875664], [31.3658641961179, 38.4612336339498], [31.4053916407251, 38.4443239562351], [31.4532451702985, 38.4475857214796], [31.4704552737594, 38.4728644021242], [31.4814422724776, 38.4915766343161] ] + ] + }, + "properties" : { + "feature::id" : 736, + "id" : 139482, + "name" : "Aksehir Gl", + "lge_id" : "tr", + "pfafstette" : 9379, + "lke_type" : "N", + "altitude" : 953, + "objectid" : 87455, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 737, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.7177714704267, 37.811670252701], [29.7446381157297, 37.8033012497711], [29.7535650521883, 37.8000394845266], [29.7729639718, 37.7902112708295], [29.8112897134225, 37.7913700558506], [29.8427914988097, 37.7932155282915], [29.8857523805164, 37.8023570545688], [29.9149365958616, 37.8178933574437], [29.9557086614173, 37.8422707608497], [29.9943777467497, 37.8773347372276], [29.9770818073613, 37.8960040514558], [29.9453225141915, 37.9046734801318], [29.9217605520967, 37.8984503753891], [29.8956235121773, 37.8820986312031], [29.8740357764146, 37.8663477385094], [29.8572977705549, 37.8598242080205], [29.839744323384, 37.865746887017], [29.8275127037173, 37.8654035433071], [29.8043370032961, 37.858579587072], [29.7686721754258, 37.8452321003479], [29.7270417505951, 37.8315412699139], [29.7041235579564, 37.8253181651712], [29.7177714704267, 37.811670252701] ] + ] + }, + "properties" : { + "feature::id" : 737, + "id" : 140163, + "pfafstette" : 6811, + "altitude" : 837, + "objectid" : 87585, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_87585", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 738, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.1176810565831, 37.6701268082769], [30.1563930598791, 37.6894398919612], [30.2072937648782, 37.7105984480864], [30.2339029023988, 37.7316282503205], [30.24939628731, 37.7589669932247], [30.2788380104377, 37.7789238463651], [30.3145886742355, 37.7901683528658], [30.3320562854789, 37.8101252060062], [30.3208117789782, 37.8205542711958], [30.2836877403406, 37.8124856940121], [30.237550929317, 37.805661737777], [30.1879806811939, 37.7932155282915], [30.1629595083318, 37.7810268265885], [30.137723745651, 37.7654905237136], [30.0952349615455, 37.7313278245743], [30.0766514832448, 37.6995256134408], [30.0666515976927, 37.6796116782641], [30.0692266755173, 37.6668650430324], [30.0963079106391, 37.6611998718184], [30.1176810565831, 37.6701268082769] ] + ] + }, + "properties" : { + "feature::id" : 738, + "id" : 140164, + "name" : "Burdur Gl", + "lge_id" : "tr", + "pfafstette" : 2373, + "lke_type" : "N", + "altitude" : 843, + "objectid" : 87586, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 739, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [29.6593172038088, 37.5374673823476], [29.6926215436733, 37.5214160639077], [29.7163122596594, 37.5246778291522], [29.7214624153086, 37.5372527925288], [29.7187585835928, 37.555922106757], [29.7026643471892, 37.5826599981688], [29.6640810977843, 37.5900848058964], [29.6417208386742, 37.5669091054752], [29.6593172038088, 37.5374673823476] ] + ] + }, + "properties" : { + "feature::id" : 739, + "id" : 140363, + "name" : "Salda Golu", + "pfafstette" : 265, + "lke_type" : "N", + "altitude" : 1140, + "objectid" : 87627, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 1 + } + }, { + "type" : "Feature", + "id" : 740, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.8544966581212, 37.4283699185131], [30.8321793169749, 37.4450650064091], [30.8286171259843, 37.4155803653177], [30.8637669382897, 37.3876407709211], [30.8759985579564, 37.400172816334], [30.8803761902582, 37.425709004761], [30.8777152765061, 37.4435628776781], [30.8684020783739, 37.4304299807727], [30.860719762864, 37.4165245605201], [30.8544966581212, 37.4283699185131] ] + ] + }, + "properties" : { + "feature::id" : 740, + "id" : 140292, + "pfafstette" : 1391, + "lke_type" : "N", + "altitude" : 254, + "objectid" : 87754, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_87754", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 741, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [30.2458770142831, 39.6380012818165], [30.2390101400842, 39.6486878547885], [30.2104696941952, 39.6600611151804], [30.1870364859916, 39.657958134957], [30.1611569538546, 39.6312202435451], [30.1483244826955, 39.6059844808643], [30.1530883766709, 39.5966712827321], [30.1611569538546, 39.6049973676982], [30.1795687603003, 39.6287739196118], [30.2145898187145, 39.6371000045779], [30.2458770142831, 39.6380012818165] ] + ] + }, + "properties" : { + "feature::id" : 741, + "id" : 138904, + "pfafstette" : 6755, + "lke_type" : "N", + "altitude" : 975, + "objectid" : 87873, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_87873", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 742, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [35.2412275682109, 38.3375440624428], [35.2532016800952, 38.324153657755], [35.2814846182018, 38.3182309787585], [35.304316974913, 38.3307630241714], [35.2902828007691, 38.3497327641458], [35.2690384087163, 38.3720930232558], [35.2565921992309, 38.395268723677], [35.2365924281267, 38.3875005722395], [35.2351332173594, 38.3595609778429], [35.2412275682109, 38.3375440624428] ] + ] + }, + "properties" : { + "feature::id" : 742, + "id" : 138927, + "name" : "Yaygl and Camiz Gl", + "pfafstette" : 8393, + "lke_type" : "N", + "altitude" : 1070, + "objectid" : 87952, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 743, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [45.8051839177806, 35.1815715986083], [45.7914930873466, 35.1753055759018], [45.7522231505219, 35.162258514924], [45.7236397866691, 35.1542328557041], [45.7317083638528, 35.1384390450467], [45.7578024858085, 35.1410999587987], [45.7932098058964, 35.1551770509064], [45.8093469602637, 35.166764901117], [45.8051839177806, 35.1815715986083] ] + ] + }, + "properties" : { + "feature::id" : 743, + "id" : 141672, + "pfafstette" : 2429193, + "altitude" : 450, + "objectid" : 88052, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_88052", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 744, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [42.2505035707746, 38.8792975187695], [42.2160833638528, 38.8683105200513], [42.2285295733382, 38.8575381111518], [42.2570700192273, 38.8489545184032], [42.2778423136788, 38.8495553698956], [42.3010180141, 38.8513150064091], [42.3316614402124, 38.8548771973998], [42.3335069126534, 38.884876854056], [42.3149663523164, 38.9101555347006], [42.2960395303058, 38.8979668329976], [42.2505035707746, 38.8792975187695] ] + ] + }, + "properties" : { + "feature::id" : 744, + "id" : 141179, + "pfafstette" : 421, + "altitude" : 1813, + "objectid" : 88378, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_88378", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 745, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [39.9433625938473, 38.3965562625893], [39.9148221479582, 38.3906765015565], [39.8984274858085, 38.3786594717085], [39.915036737777, 38.369217519685], [39.9397145669291, 38.3711488280535], [39.9694996337667, 38.3720930232558], [40.0016022706464, 38.3493035845083], [40.023705021974, 38.3555266892511], [40.0069670161143, 38.3765135735213], [39.9852505264603, 38.3958695751694], [39.9704867469328, 38.3984875709577], [39.9433625938473, 38.3965562625893] ] + ] + }, + "properties" : { + "feature::id" : 745, + "id" : 141458, + "pfafstette" : 49919, + "lke_type" : "N", + "altitude" : 788, + "objectid" : 88385, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_88385", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 746, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [39.3671889305988, 38.501104422267], [39.3311807590185, 38.4918341420985], [39.3106659723494, 38.4853106116096], [39.3086059100897, 38.4636370399194], [39.3620816929134, 38.4621778291522], [39.375, 38.4663408716352], [39.4096777147043, 38.4775853781359], [39.4349563953488, 38.4856110373558], [39.479505241714, 38.498100164805], [39.5090328007691, 38.5168553149606], [39.5039255630837, 38.5299023759385], [39.4709645669291, 38.5349666956601], [39.4323813175243, 38.5334645669291], [39.4079609961545, 38.5216192089361], [39.375, 38.5050099569676], [39.3671889305988, 38.501104422267] ] + ] + }, + "properties" : { + "feature::id" : 746, + "id" : 141459, + "name" : "Hazar Dagi", + "pfafstette" : 49993, + "lke_type" : "N", + "altitude" : 1239, + "objectid" : 88386, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 747, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.9099209164988, 37.7274652078374], [36.9297060977843, 37.7402976789965], [36.922238372093, 37.7583661417323], [36.8984618201795, 37.7422719053287], [36.8733118934261, 37.729868613807], [36.8513378959898, 37.7158773576268], [36.8730543856437, 37.7031736403589], [36.8840413843618, 37.7132593618385], [36.9099209164988, 37.7274652078374] ] + ] + }, + "properties" : { + "feature::id" : 747, + "id" : 141827, + "pfafstette" : 2515, + "altitude" : 600, + "objectid" : 88395, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_88395", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 748, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [42.9538860785571, 36.6755459164988], [42.9364184673137, 36.6922839223585], [42.9105389351767, 36.7017687923457], [42.9082213651346, 36.7186784700604], [42.8725565372643, 36.7329272340231], [42.8493808368431, 36.7252449185131], [42.8132439113716, 36.7344293627541], [42.7773644936825, 36.7676478666911], [42.742214681377, 36.7832700054935], [42.7055627403406, 36.8087632759568], [42.6870221800037, 36.82691757462], [42.6638464795825, 36.8322823200879], [42.6467222120491, 36.8218961728621], [42.6384390450467, 36.8055444286761], [42.6203705823109, 36.8055444286761], [42.5876670939388, 36.8418530260026], [42.5510151529024, 36.849792849295], [42.5282257141549, 36.8474323612891], [42.5040199826039, 36.8513808139535], [42.5178395669291, 36.8203940441311], [42.5543198361106, 36.8132267441861], [42.5820448406885, 36.7930553012269], [42.6132891182934, 36.7676478666911], [42.6484389305988, 36.7773902444607], [42.6777518998352, 36.7773902444607], [42.7030305804798, 36.7733988738326], [42.7299830617103, 36.7436996429225], [42.7285238509431, 36.7031850851492], [42.7634590734298, 36.6914684810474], [42.8047032365867, 36.7012537767808], [42.8227716993225, 36.6859320637246], [42.8398530488922, 36.6778205685772], [42.833029092657, 36.6654601950192], [42.8231150430324, 36.6559324070683], [42.8635437648782, 36.6211688564366], [42.9223842931698, 36.6253748168834], [42.9477488097418, 36.6464475370811], [42.9538860785571, 36.6755459164988] ] + ] + }, + "properties" : { + "feature::id" : 748, + "id" : 141568, + "pfafstette" : 475135, + "altitude" : 307, + "objectid" : 88427, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_88427", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 749, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [44.9343355154734, 36.0720335103461], [44.9572966260758, 36.0500595129097], [44.971459554111, 36.0473556811939], [44.9732621085882, 36.081561298297], [44.9587558368431, 36.1109601034609], [44.9560520051273, 36.1255522111335], [44.9593566883355, 36.1522901025453], [44.942404092657, 36.1740065921992], [44.9144215802967, 36.1731053149606], [44.8879411966673, 36.1428481505219], [44.8972114768358, 36.1009172999451], [44.9343355154734, 36.0720335103461] ] + ] + }, + "properties" : { + "feature::id" : 749, + "id" : 141521, + "pfafstette" : 443993, + "altitude" : 477, + "objectid" : 88562, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_88562", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 750, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [43.5388150064091, 38.6223905878044], [43.5581280900934, 38.6152232878594], [43.5999731047427, 38.6360385002747], [43.6308740386376, 38.659857970152], [43.6343074757371, 38.6800723310749], [43.6374404870903, 38.7044926524446], [43.6276981093206, 38.7237628181652], [43.5744798342795, 38.7419600347922], [43.536154092657, 38.7365952893243], [43.5283430232558, 38.7100719877312], [43.5339652765061, 38.6622184581579], [43.5388150064091, 38.6223905878044] ] + ] + }, + "properties" : { + "feature::id" : 750, + "id" : 141127, + "name" : "Ercek", + "lge_id" : "tr", + "pfafstette" : 411, + "altitude" : 1803, + "objectid" : 88647, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 751, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [45.6401643471892, 32.1296322788867], [45.6491771195752, 32.1430656015382], [45.6469883034243, 32.1751682384179], [45.6024394570591, 32.2185582997619], [45.55188209577, 32.234910043948], [45.5271184306904, 32.2375709577001], [45.5087924601721, 32.2518197216627], [45.4956166453031, 32.2557252563633], [45.4951445477019, 32.2400172816334], [45.5073332494049, 32.2259401895257], [45.5164747756821, 32.2066700238052], [45.535187007874, 32.1638378959897], [45.5614098837209, 32.1317352591101], [45.6038986678264, 32.1252546465849], [45.6401643471892, 32.1296322788867] ] + ] + }, + "properties" : { + "feature::id" : 751, + "id" : 142612, + "pfafstette" : 123, + "altitude" : 0, + "objectid" : 88948, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_88948", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 752, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [47.6538322880425, 31.639122871269], [47.614519433254, 31.6542299945065], [47.5822880424831, 31.6447022065556], [47.5715585515473, 31.6218269318806], [47.581300929317, 31.6016125709577], [47.5920304202527, 31.5781364447903], [47.6065796099615, 31.5558620216078], [47.6279527559055, 31.5567632988464], [47.6525876670939, 31.5609263413294], [47.6782526094122, 31.5677502975645], [47.6806560153818, 31.6001533601904], [47.6538322880425, 31.639122871269] ] + ] + }, + "properties" : { + "feature::id" : 752, + "id" : 142469, + "pfafstette" : 2435, + "altitude" : 0, + "objectid" : 88970, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_88970", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 753, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.6105995925655, 36.08606768449], [37.5781536119758, 36.0881277467497], [37.5481110373558, 36.0910890862479], [37.5306434261124, 36.0895869575169], [37.5097852957334, 36.0850805713239], [37.4898713605567, 36.0964538317158], [37.4678973631203, 36.0982134682293], [37.4542494506501, 36.0848659815052], [37.4743779756455, 36.0583426799121], [37.5336906015382, 36.0191156610511], [37.5832608496612, 35.9754251739608], [37.5964366645303, 35.9376144479033], [37.5945053561619, 35.9186447079289], [37.5948486998718, 35.9019925379967], [37.6064365500824, 35.8945248123054], [37.6311143792346, 35.9305329838857], [37.6596977430873, 35.9585154962461], [37.6826159357261, 35.9653394524812], [37.6982380745285, 35.9846096182018], [37.6959205044864, 36.002763916865], [37.6967788637612, 36.0268408945248], [37.6967788637612, 36.051518723677], [37.6781095495331, 36.0568834691448], [37.662101149057, 36.0643511948361], [37.64356058872, 36.0812608725508], [37.6254921259843, 36.0833638527742], [37.6105995925655, 36.08606768449] ] + ] + }, + "properties" : { + "feature::id" : 753, + "id" : 142124, + "name" : "Sabkha al Jabbul", + "pfafstette" : 0, + "altitude" : 321, + "objectid" : 89022, + "scalerank" : 10, + "featurecla" : "Alkaline Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 754, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [38.251364791247, 36.5733153268632], [38.2579741576634, 36.5625], [38.2617080205091, 36.5564056491485], [38.2542832127815, 36.5432727522432], [38.23316757462, 36.5275218595495], [38.2297341375206, 36.4992818394067], [38.247201748764, 36.4787670527376], [38.216815830434, 36.4621148828053], [38.1914083958982, 36.4454197949093], [38.1977602545321, 36.4224157663431], [38.2287899423183, 36.4151626304706], [38.2650127037173, 36.4348190578648], [38.289433025087, 36.4517287355796], [38.29359606757, 36.4784666269914], [38.2753988509431, 36.494217519685], [38.2871154550449, 36.5031873741073], [38.3066431285479, 36.5195820362571], [38.2893042711958, 36.5578648599158], [38.28625709577, 36.5625], [38.269562007874, 36.5879503524995], [38.2536823612891, 36.6135723768541], [38.2197342519685, 36.6524131340414], [38.2058288317158, 36.6667048159678], [38.1942409815052, 36.6818119392053], [38.1511513459073, 36.6839149194287], [38.1020531953855, 36.6856745559421], [38.0923108176158, 36.7059318348288], [38.0923108176158, 36.7255453442593], [38.0782766434719, 36.7463605566746], [38.0634699459806, 36.7680770463285], [38.0461740065922, 36.7787636193005], [38.0274617744003, 36.7724546786303], [38.039693394067, 36.7320688747482], [38.0602081807361, 36.6958031953855], [38.0670321369713, 36.6806531541842], [38.0878902673503, 36.6707820225233], [38.1184049395715, 36.6678636009888], [38.1377180232558, 36.665159769273], [38.1628679500092, 36.6547736220472], [38.2026529023988, 36.6372201748764], [38.2317083638528, 36.6021991164622], [38.251364791247, 36.5733153268632] ] + ] + }, + "properties" : { + "feature::id" : 754, + "id" : 141932, + "pfafstette" : 935351, + "altitude" : 397, + "objectid" : 89055, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_89055", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 755, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [42.213379532137, 34.3381477751327], [42.1875, 34.3271178584508], [42.1734658258561, 34.3211522614906], [42.1614058780443, 34.3203368201794], [42.1626075810291, 34.3423108176158], [42.1796889305988, 34.3708083455411], [42.1800751922725, 34.3930827687237], [42.1645818073613, 34.3866021561985], [42.1523501876946, 34.3860013047061], [42.1351400842337, 34.4011084279436], [42.1191316837575, 34.3785335790148], [42.0884024217176, 34.3752718137704], [42.0423514466215, 34.3795636101447], [42.0335961820179, 34.3711087712873], [42.0606774171397, 34.3464309421351], [42.101191974913, 34.3203797381432], [42.1140244460721, 34.3083627082952], [42.1250114447903, 34.2732558139535], [42.1432086614173, 34.2613675379967], [42.1738520875298, 34.2672902169932], [42.1875, 34.2751012863944], [42.1972852957334, 34.2807235396447], [42.2217056171031, 34.2732558139535], [42.2362118888482, 34.2675906427394], [42.2475851492401, 34.2617967176341], [42.2671128227431, 34.2508526368797], [42.2879709531221, 34.2625692409815], [42.3057819080755, 34.3078047747665], [42.3076273805164, 34.3321392602087], [42.3308030809376, 34.3265599249222], [42.3521762268815, 34.2995216077641], [42.3183568714521, 34.2810239653909], [42.3008034242813, 34.2512818165171], [42.2892155740707, 34.2382347555393], [42.3010180141, 34.2207242263322], [42.3186143792346, 34.2039862204724], [42.3476698406885, 34.2102522431789], [42.3757381889764, 34.2245439251053], [42.3894290194104, 34.2358313495697], [42.3971113349204, 34.247462117744], [42.4111455090643, 34.2619683894891], [42.4262955502655, 34.2700369666728], [42.4348362250504, 34.276002563633], [42.4235917185497, 34.297375709577], [42.4095575444058, 34.324414026735], [42.4143214383813, 34.3439846182018], [42.418699070683, 34.3538986678264], [42.4047936504303, 34.351795687603], [42.3926049487274, 34.3481905786486], [42.373806880608, 34.3604221983153], [42.3498586568394, 34.365486518037], [42.3430347006043, 34.3714521149972], [42.3308030809376, 34.3860013047061], [42.3004171626076, 34.3752718137704], [42.2697737364952, 34.365486518037], [42.2519627815419, 34.3607226240615], [42.213379532137, 34.3381477751327] ] + ] + }, + "properties" : { + "feature::id" : 755, + "id" : 142160, + "name" : "Qadisiyah", + "pfafstette" : 0, + "altitude" : 0, + "objectid" : 89064, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 756, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [44.9658373008607, 34.2221834370994], [44.9763092840139, 34.1882353277788], [44.9736483702619, 34.1466049029482], [44.9724037493133, 34.1260901162791], [44.9815881935543, 34.1383217359458], [44.994163156931, 34.1532142693646], [45, 34.1518408945248], [45.0223602591101, 34.1466049029482], [45.0387120032961, 34.1526134178722], [45.0432183894891, 34.1826130745285], [45.0428750457792, 34.2010677989379], [45.0322313907709, 34.2251018586339], [45.0185834783007, 34.2554877769639], [45, 34.2664747756821], [44.9950215162058, 34.2694361151804], [44.9709445385461, 34.2542860739791], [44.9658373008607, 34.2221834370994] ] + ] + }, + "properties" : { + "feature::id" : 756, + "line::hidden" : [ + { "contour" : 0, "segments" : [ { "from" : 9, "to" : 10 } ] } + ], + "id" : 141950, + "pfafstette" : 242737, + "altitude" : 0, + "objectid" : 89079, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_89079", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 757, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [37.6613715436733, 35.8841815830434], [37.6986243362022, 35.8868424967954], [37.7072937648782, 35.9022929637429], [37.6957059146676, 35.9170996612342], [37.6718864447903, 35.9138808139535], [37.6501699551364, 35.9070568577184], [37.639397546237, 35.898430347006], [37.6613715436733, 35.8841815830434] ] + ] + }, + "properties" : { + "feature::id" : 757, + "id" : 142171, + "pfafstette" : 6915, + "altitude" : 311, + "objectid" : 89088, + "scalerank" : 12, + "featurecla" : "Alkaline Lake", + "note" : "_untitled_89088", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 758, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [46.5175791979491, 32.2423348516755], [46.5398107031679, 32.2195024949643], [46.5633726652628, 32.2141377494964], [46.5894667872185, 32.2298457242263], [46.5844883034243, 32.2489013001282], [46.560325489837, 32.2640513413294], [46.5410124061527, 32.2702744460721], [46.5172358542392, 32.2723345083318], [46.4890387520601, 32.2780425975096], [46.469511078557, 32.2688152353049], [46.4812276826589, 32.2584290880791], [46.5175791979491, 32.2423348516755] ] + ] + }, + "properties" : { + "feature::id" : 758, + "id" : 142365, + "pfafstette" : 242333, + "altitude" : 0, + "objectid" : 89162, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_89162", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 759, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [47.3506168741989, 31.8962443920527], [47.3702303836294, 31.8962443920527], [47.3708741530855, 31.9122957104926], [47.3499731047427, 31.9304070911921], [47.3249519318806, 31.9423812030764], [47.3051667505951, 31.9515656473173], [47.2934501464933, 31.9510077137887], [47.2876133034243, 31.9325529893792], [47.3006603644021, 31.9233256271745], [47.3276557635964, 31.9144416086797], [47.3506168741989, 31.8962443920527] ] + ] + }, + "properties" : { + "feature::id" : 759, + "id" : 142371, + "pfafstette" : 24223, + "altitude" : 0, + "objectid" : 89198, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_89198", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 760, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [46.7856447994873, 32.4481264878227], [46.7639283098334, 32.4501865500824], [46.7705376762498, 32.4008308917781], [46.7904086934627, 32.369629532137], [46.7970180598791, 32.4133200192272], [46.7856447994873, 32.4481264878227] ] + ] + }, + "properties" : { + "feature::id" : 760, + "id" : 142261, + "pfafstette" : 2422241, + "altitude" : 0, + "objectid" : 89216, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_89216", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 761, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [47.7243894204358, 31.67834989013], [47.7382948406885, 31.6682212506867], [47.7525865226149, 31.6688221021791], [47.7707837392419, 31.6709250824025], [47.7977362204724, 31.6839721433803], [47.7997962827321, 31.6964612708295], [47.7944315372642, 31.7056886330342], [47.7825861792712, 31.714915995239], [47.7439170939388, 31.7140147180004], [47.7157199917598, 31.7024697857535], [47.7187671671855, 31.6911823612891], [47.7243894204358, 31.67834989013] ] + ] + }, + "properties" : { + "feature::id" : 761, + "id" : 142382, + "pfafstette" : 2435, + "altitude" : 0, + "objectid" : 89231, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_89231", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 762, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [47.3200592840139, 31.9096777147043], [47.2950381111518, 31.9131969877312], [47.2763687969236, 31.9069738829885], [47.2627208844534, 31.9119952847464], [47.2478283510346, 31.9051713285113], [47.251605131844, 31.879334714338], [47.2717336568394, 31.8709657114082], [47.2958964704267, 31.8873174555942], [47.3158104056034, 31.8962443920527], [47.3265398965391, 31.8971456692913], [47.3200592840139, 31.9096777147043] ] + ] + }, + "properties" : { + "feature::id" : 762, + "id" : 142384, + "pfafstette" : 24223, + "altitude" : 0, + "objectid" : 89233, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_89233", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 763, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [45.8723076130745, 32.738552348471], [45.8378874061527, 32.750741050174], [45.8051839177806, 32.7627151620582], [45.7799052371361, 32.7471788591833], [45.787587552646, 32.7189388390405], [45.8232523805164, 32.6981236266252], [45.8640244460722, 32.6960635643655], [45.898444652994, 32.6925013733748], [45.9214057635964, 32.6823727339315], [45.9611907159861, 32.6728449459806], [46.0025636330342, 32.6695831807361], [46.0257822514192, 32.6788534609046], [46.0344516800952, 32.6898404596228], [46.0168553149606, 32.6904413111152], [45.9969413797839, 32.685291155466], [45.9841518265885, 32.7094110510895], [45.9669417231276, 32.7376939891961], [45.9238520875298, 32.7409557544406], [45.8723076130745, 32.738552348471] ] + ] + }, + "properties" : { + "feature::id" : 763, + "id" : 142298, + "name" : "Suwayqiyah", + "pfafstette" : 24251, + "altitude" : 0, + "objectid" : 89308, + "scalerank" : 10, + "featurecla" : "Alkaline Lake", + "note" : "_untitled_89308", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 764, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [45.4817112250504, 32.9207820225233], [45.4754881203076, 32.9249450650064], [45.4522695019227, 32.9234858542391], [45.4301667505951, 32.9345157709211], [45.4104244872734, 32.9416401529024], [45.3814977797107, 32.9362754074345], [45.3672060977843, 32.9157606207654], [45.3735579564182, 32.8985075993408], [45.4145446117927, 32.8946449826039], [45.4480206235122, 32.9070911920894], [45.465574070683, 32.9137005585058], [45.4817112250504, 32.9207820225233] ] + ] + }, + "properties" : { + "feature::id" : 764, + "id" : 142302, + "pfafstette" : 24259, + "altitude" : 0, + "objectid" : 89312, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_89312", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 765, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [46.6917832127815, 30.6838548342794], [46.6567621543673, 30.7099489562351], [46.5948744506501, 30.707631386193], [46.598393723677, 30.6853140450467], [46.6377065784655, 30.6701640038455], [46.6917832127815, 30.6838548342794] ] + ] + }, + "properties" : { + "feature::id" : 765, + "id" : 142969, + "pfafstette" : 238231, + "altitude" : 0, + "objectid" : 89735, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_89735", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 766, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [44.2527124153086, 32.03392521974], [44.2202235167552, 32.0479164759202], [44.2014254486358, 32.0318651574803], [44.2285066837576, 31.997702458341], [44.2666178355613, 31.9887755218824], [44.2844287905146, 32.0039255630837], [44.2734417917964, 32.0193331120674], [44.2527124153086, 32.03392521974] ] + ] + }, + "properties" : { + "feature::id" : 766, + "id" : 142905, + "pfafstette" : 2933, + "altitude" : 0, + "objectid" : 89809, + "scalerank" : 11, + "featurecla" : "Lake", + "note" : "_untitled_89809", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 767, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [36.5268780900934, 34.6502901254349], [36.5200112158945, 34.6306336980406], [36.5552039461637, 34.6289169794909], [36.5625, 34.6319641549167], [36.6040016709394, 34.64943176616], [36.6131861151804, 34.6669422953671], [36.5712981825673, 34.6660410181285], [36.5625, 34.6629080067753], [36.5268780900934, 34.6502901254349] ] + ] + }, + "properties" : { + "feature::id" : 767, + "id" : 142917, + "pfafstette" : 83911, + "altitude" : 0, + "objectid" : 89876, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_89876", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 768, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [48.1584617057315, 30.5890061344076], [48.1616376350485, 30.6065166636147], [48.1611226194836, 30.6101217725691], [48.1697062122322, 30.6436836202161], [48.1367452160776, 30.6778463193554], [48.1048571690167, 30.6463874519319], [48.1037842199231, 30.5981476606849], [48.1054580205091, 30.5800791979491], [48.1120673869255, 30.570250984252], [48.1033979582494, 30.5592639855338], [48.0942564319722, 30.5476761353232], [48.1048571690167, 30.5301656061161], [48.1212089132027, 30.5280626258927], [48.1334405328694, 30.5316248168834], [48.1440412699139, 30.5524400292987], [48.1584617057315, 30.5890061344076] ] + ] + }, + "properties" : { + "feature::id" : 768, + "id" : 142795, + "pfafstette" : 221, + "altitude" : 0, + "objectid" : 89891, + "scalerank" : 10, + "featurecla" : "Lake", + "note" : "_untitled_89891", + "funkyname" : 0 + } + } ], + "numberMatched" : 768, + "numberReturned" : 768, + "links" : [ + { + "rel" : "self", + "type" : "application/geo+json", + "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/items?limit=1000&f=json" + }, + { + "rel" : "alternate", + "type" : "text/html", + "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/items?limit=1000&f=html" + }, + { + "rel" : "collection", + "type" : "application/json", + "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe" + } + ], + "timeStamp" : "2024-07-12T14:15:59Z" +} diff --git a/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_20.http_data b/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_20.http_data deleted file mode 100644 index 2a15ae0f5c5c..000000000000 --- a/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_20.http_data +++ /dev/null @@ -1,258 +0,0 @@ -HTTP/1.1 200 OK -Date: Tue, 20 Jun 2023 10:37:54 GMT -Server: Apache/2.4.52 (Ubuntu) -Expires: Wed, 12 Jun 2024 14:15:05 GMT -Access-Control-Allow-Origin: * -Vary: Accept,Accept-Encoding,Prefer -Content-Crs: -Content-Length: 15561 -Access-Control-Allow-Headers: x-requested-with, Content-Type, origin, authorization, acc$ -Age: 591768 -Keep-Alive: timeout=5, max=100 -Connection: Keep-Alive -Content-Type: application/json; charset=utf-8 - -{ - "type" : "FeatureCollection", - "features" : [ { - "type" : "Feature", - "id" : 1, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-4.6543673319905, 58.1553000824025], [-4.6250972807178, 58.1436693142282], [-4.6081017670756, 58.1342702801685], [-4.5893036989562, 58.1245279023988], [-4.5722223493866, 58.1163305713239], [-4.5518792345724, 58.1083907480315], [-4.5339395257279, 58.101137612159], [-4.5218366599524, 58.0922965116279], [-4.4935108038821, 58.0780048297015], [-4.4530820820363, 58.0534128364768], [-4.4285330067753, 58.0354731276323], [-4.4254429133858, 58.0470180598791], [-4.4260437648782, 58.0616530855155], [-4.4324814594397, 58.0646573429775], [-4.4707642830983, 58.0880047152536], [-4.5038969511079, 58.1081761582128], [-4.5227808551547, 58.1120816929134], [-4.5409780717817, 58.1248712461088], [-4.5504200238052, 58.126330456876], [-4.563467084783, 58.126330456876], [-4.5802050906427, 58.14002128731], [-4.6111918604651, 58.154055461454], [-4.6317924830617, 58.1573601446622], [-4.6504188793261, 58.1622527925289], [-4.6814056491485, 58.1725960217909], [-4.7105898644937, 58.182252563633], [-4.7324780260026, 58.1904928126717], [-4.7421774858085, 58.1910936641641], [-4.7303321278154, 58.179591649881], [-4.6950535616188, 58.1656003937008], [-4.6762554934994, 58.1598064685955], [-4.6543673319905, 58.1553000824025] ] - ] - }, - "properties" : { - "feature::id" : 1, - "id" : 98696, - "name" : "Loch Bhanabhaidh", - "pfafstette" : 57, - "lke_type" : "N", - "altitude" : 92, - "objectid" : 52843, - "scalerank" : 11, - "featurecla" : "Lake", - "funkyname" : 0 - } - }, { - "type" : "Feature", - "id" : 2, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-5.3823418329976, 57.6568508514924], [-5.347063266801, 57.6379669474455], [-5.3269776597693, 57.6345764283098], [-5.3370204632851, 57.6465076222304], [-5.392298800586, 57.6738463651346], [-5.4348734206189, 57.6929448590002], [-5.482598196301, 57.7117858450833], [-5.5333272294452, 57.7340173503021], [-5.5455159311481, 57.7360774125618], [-5.5558162424464, 57.7279229994507], [-5.5528119849844, 57.7191248168834], [-5.5443142281633, 57.7050906427394], [-5.5226835744369, 57.690798960813], [-5.5008812488555, 57.6859921488738], [-5.4810531496063, 57.6883526368797], [-5.4579632851126, 57.690798960813], [-5.4488646767991, 57.6829449734481], [-5.4330708661417, 57.6722584004761], [-5.4098951657206, 57.6668078190808], [-5.3823418329976, 57.6568508514924] ] - ] - }, - "properties" : { - "feature::id" : 2, - "id" : 100550, - "name" : "Loch Maree", - "pfafstette" : 1, - "lke_type" : "N", - "altitude" : 39, - "objectid" : 54265, - "scalerank" : 12, - "featurecla" : "Lake", - "funkyname" : 0 - } - }, { - "type" : "Feature", - "id" : 3, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-5.6786474546786, 56.7646722212049], [-5.6926387108588, 56.7644147134225], [-5.7287756363304, 56.7677193966307], [-5.7285181285479, 56.7613675379967], [-5.6886902581945, 56.7580199368248], [-5.6689479948727, 56.7613675379967], [-5.6553000824025, 56.7631700924739], [-5.6409654825124, 56.7664747756821], [-5.625, 56.7784488875664], [-5.6206223676982, 56.7817535707746], [-5.5902364493683, 56.7938993545138], [-5.5324688701703, 56.8212380974181], [-5.471096182018, 56.8537699139352], [-5.4567615821278, 56.8656152719282], [-5.4643151437466, 56.8656152719282], [-5.4819973448086, 56.8574179408533], [-5.5114390679363, 56.8452292391503], [-5.5415674784838, 56.8270320225234], [-5.5850004577916, 56.8078476927303], [-5.625, 56.7896075581395], [-5.6303218275041, 56.7871612342062], [-5.6616519410365, 56.7719682750412], [-5.6786474546786, 56.7646722212049] ] - ] - }, - "properties" : { - "feature::id" : 3, - "line::hidden" : [ - { "contour" : 0, "segments" : [ { "from" : 2, "to" : 3 } ] } - ], - "id" : 103640, - "pfafstette" : 1, - "lke_type" : "N", - "altitude" : 3, - "objectid" : 56386, - "scalerank" : 12, - "featurecla" : "Lake", - "note" : "_untitled_56386", - "funkyname" : 0 - } - }, { - "type" : "Feature", - "id" : 4, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-4.4452710126351, 56.7525693554294], [-4.4300780534701, 56.7802085240798], [-4.4121383446255, 56.7975044634682], [-4.3905076908991, 56.8154441723128], [-4.3622676707563, 56.8394782320088], [-4.348619758286, 56.8604651162791], [-4.3263882530672, 56.8854004532137], [-4.3102510986999, 56.9020955411097], [-4.3239848470976, 56.8987479399377], [-4.3391778062626, 56.8866021561985], [-4.3531690624428, 56.8725679820546], [-4.366816974913, 56.8576754486358], [-4.4026963926021, 56.82458569859], [-4.4400350210584, 56.7929551593115], [-4.4522237227614, 56.7878050036623], [-4.4626098699872, 56.7699082127816], [-4.4541121131661, 56.7458741530855], [-4.4452710126351, 56.7525693554294] ] - ] - }, - "properties" : { - "feature::id" : 4, - "id" : 103920, - "pfafstette" : 943, - "lke_type" : "N", - "altitude" : 358, - "objectid" : 56990, - "scalerank" : 12, - "featurecla" : "Lake", - "note" : "_untitled_56990", - "funkyname" : 0 - } - }, { - "type" : "Feature", - "id" : 5, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-4.2500801135323, 56.6966472486724], [-4.2175482970152, 56.6969047564549], [-4.1923983702619, 56.7048445797473], [-4.2109389305988, 56.7123981413661], [-4.2664747756821, 56.709737227614], [-4.3239848470976, 56.7020978300678], [-4.3674178264054, 56.6999519318806], [-4.4151426020875, 56.6987502288958], [-4.4378891228713, 56.6926129600806], [-4.4206361014466, 56.6908533235671], [-4.3772031221388, 56.68870742538], [-4.3032983885735, 56.6914112570958], [-4.2500801135323, 56.6966472486724] ] - ] - }, - "properties" : { - "feature::id" : 5, - "id" : 104752, - "name" : "Loch Rannoch", - "pfafstette" : 9153, - "lke_type" : "N", - "altitude" : 205, - "objectid" : 57822, - "scalerank" : 12, - "featurecla" : "Lake", - "funkyname" : 0 - } - }, { - "type" : "Feature", - "id" : 6, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-5.3078362479399, 56.222790010987], [-5.2792528840872, 56.2403434581578], [-5.2729010254532, 56.25], [-5.2704117835561, 56.2537767808094], [-5.2627723860099, 56.2677251190258], [-5.2476652627724, 56.2771670710493], [-5.2273221479583, 56.2926604559605], [-5.2175368522249, 56.3121452114997], [-5.1989962918879, 56.3296986586706], [-5.1554774766526, 56.346822926204], [-5.1269799487273, 56.3562219602637], [-5.1032892327413, 56.3635180141], [-5.0719591192089, 56.3704707242263], [-5.0512726606849, 56.3814577229445], [-5.0443199505585, 56.3933030809376], [-5.0625171671855, 56.396908189892], [-5.0859503753891, 56.389054202527], [-5.113675379967, 56.3714149194287], [-5.1461213605567, 56.3571232375023], [-5.1713571232375, 56.3537756363303], [-5.2005413385827, 56.3419302783373], [-5.2238887108588, 56.3254926982238], [-5.237879967039, 56.3045058139535], [-5.2577080662882, 56.2860081715803], [-5.2798537355796, 56.2732186183849], [-5.2841455319539, 56.2589269364585], [-5.2931583043399, 56.25], [-5.2995101629738, 56.2437768952573], [-5.3324711591284, 56.2246354834279], [-5.3595094762864, 56.2136484847098], [-5.3755607947262, 56.2081979033144], [-5.3865477934444, 56.1990992950009], [-5.3595094762864, 56.2015456189343], [-5.3078362479399, 56.222790010987] ] - ] - }, - "properties" : { - "feature::id" : 6, - "id" : 105653, - "name" : "Loch Awe", - "pfafstette" : 15, - "lke_type" : "N", - "altitude" : 124, - "objectid" : 58413, - "scalerank" : 11, - "featurecla" : "Lake", - "funkyname" : 0 - } - }, { - "type" : "Feature", - "id" : 7, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-4.297204037722, 56.4774652078374], [-4.2798651803699, 56.4799115317707], [-4.2528268632119, 56.4881517808094], [-4.2142006958433, 56.4966066196667], [-4.1719694195202, 56.5033018220106], [-4.1322273850943, 56.5233874290423], [-4.1020131386193, 56.5510265976927], [-4.0838159219923, 56.5665199826039], [-4.0543741988647, 56.5728718412379], [-4.0227865775499, 56.5793095357993], [-4.0139454770189, 56.5869060153818], [-4.0299967954587, 56.5877643746567], [-4.0689663065373, 56.5829575627175], [-4.1214978941586, 56.5546746246109], [-4.1662184123787, 56.520941105109], [-4.1993510803882, 56.5096965986083], [-4.2154023988281, 56.505748145944], [-4.2363463651346, 56.5015851034609], [-4.2777192821828, 56.4923577412562], [-4.3011524903864, 56.4835166407251], [-4.297204037722, 56.4774652078374] ] - ] - }, - "properties" : { - "feature::id" : 7, - "id" : 105409, - "pfafstette" : 6551, - "lke_type" : "N", - "altitude" : 126, - "objectid" : 58448, - "scalerank" : 12, - "featurecla" : "Lake", - "note" : "_untitled_58448", - "funkyname" : 0 - } - }, { - "type" : "Feature", - "id" : 8, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-4.5220941677349, 56.06837117744], [-4.5202916132577, 56.0787573246658], [-4.5297335652811, 56.0863108862846], [-4.5428664621864, 56.094250709577], [-4.5553126716719, 56.1036497436367], [-4.569303927852, 56.1103020280168], [-4.5856985900018, 56.1203877494964], [-4.5993465024721, 56.1324476973082], [-4.6193462735763, 56.1360957242263], [-4.6388310291156, 56.1574259522066], [-4.6628650888116, 56.1872539370079], [-4.6805472898737, 56.2030048297015], [-4.6780580479766, 56.2184982146127], [-4.6808047976561, 56.2467811527193], [-4.6817489928585, 56.25], [-4.6895600622597, 56.2762657938107], [-4.6941093664164, 56.2966518265885], [-4.7050963651346, 56.3078534151254], [-4.705697216627, 56.2984543810657], [-4.7011479124702, 56.2796133949826], [-4.7054397088445, 56.2677680369896], [-4.7017487639627, 56.25], [-4.7008045687603, 56.2455365317707], [-4.7008045687603, 56.2194424098151], [-4.7020062717451, 56.2036056811939], [-4.6826073521333, 56.1854513825307], [-4.6701611426479, 56.1720180598791], [-4.6597749954221, 56.1470827229445], [-4.6421786302875, 56.1181560153818], [-4.6364276231459, 56.0926627449185], [-4.6316208112067, 56.072877563633], [-4.6340242171763, 56.063864791247], [-4.6354834279436, 56.0525773667826], [-4.6281873741073, 56.0400882393335], [-4.6096468137704, 56.0239940029299], [-4.5893036989562, 56.017298800586], [-4.590848745651, 56.0281999633767], [-4.5881019959714, 56.0449379692364], [-4.5622653817982, 56.0589721433803], [-4.5375446346823, 56.063864791247], [-4.5220941677349, 56.06837117744] ], - [ [-4.6041533144113, 56.0573841787218], [-4.5959130653726, 56.063864791247], [-4.6011490569493, 56.0556245422084], [-4.6041533144113, 56.0573841787218] ] - ] - }, - "properties" : { - "feature::id" : 8, - "id" : 106243, - "name" : "Loch Lomond North Basin", - "pfafstette" : 15, - "lke_type" : "N", - "altitude" : 9, - "objectid" : 59258, - "scalerank" : 10, - "featurecla" : "Lake", - "funkyname" : 0 - } - }, { - "type" : "Feature", - "id" : 9, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-7.6527879509248, 54.3903217130562], [-7.6636891137154, 54.4100210584142], [-7.6798262680828, 54.4304070911921], [-7.6992251876946, 54.445943394067], [-7.7226583958982, 54.4659431651712], [-7.730211957517, 54.4884750961362], [-7.7236025911005, 54.4951273805164], [-7.735705456876, 54.5012217313679], [-7.7551902124153, 54.5069727385094], [-7.7514992675334, 54.5167151162791], [-7.7399972532503, 54.5252557910639], [-7.7472933070866, 54.5343114814137], [-7.7671214063358, 54.5377449185131], [-7.7822285295734, 54.5395474729903], [-7.7962197857535, 54.5401483244827], [-7.8105543856437, 54.5395474729903], [-7.8369060153818, 54.5413071095037], [-7.8695236678264, 54.5334531221388], [-7.8938152353049, 54.5213073383996], [-7.9211110602454, 54.5167151162791], [-7.9560462827321, 54.51122161692], [-7.974930186779, 54.4961144936825], [-7.9788786394433, 54.4848270692181], [-7.9873763962644, 54.4875738188976], [-8.0011101446622, 54.48817467039], [-8.0110671122505, 54.4802348470976], [-7.9919257004212, 54.4787756363303], [-7.9092657022523, 54.4817369758286], [-7.8366485075994, 54.476329312397], [-7.8211980406519, 54.4702349615455], [-7.8080651437466, 54.4640976927303], [-7.781627678081, 54.4528961041934], [-7.7506409082586, 54.4389906839407], [-7.7260059970701, 54.4231110373558], [-7.7020577733016, 54.417059604468], [-7.6889248763963, 54.4092056171031], [-7.68128547885, 54.3991198956235], [-7.6691826130745, 54.3857294909357], [-7.654247161692, 54.3735837071965], [-7.6527879509248, 54.3903217130562] ] - ] - }, - "properties" : { - "feature::id" : 9, - "id" : 110629, - "name" : "Lower Lough Erne", - "lge_id" : "en", - "pfafstette" : 1151, - "lke_type" : "N", - "altitude" : 40, - "objectid" : 62367, - "scalerank" : 10, - "featurecla" : "Lake", - "funkyname" : 0 - } - }, { - "type" : "Feature", - "id" : 10, - "geometry" : { - "type" : "Polygon", - "coordinates" : [ - [ [-8.1280614814137, 54.4278749313313], [-8.1031690624428, 54.4169308505768], [-8.0888344625527, 54.4241839864494], [-8.0870319080755, 54.4381752426295], [-8.1194778886651, 54.4549132484893], [-8.1817947720198, 54.4688615867057], [-8.2217084783007, 54.4652564777513], [-8.2064296832082, 54.4549132484893], [-8.1815372642373, 54.4491622413477], [-8.1611083134957, 54.4424670390038], [-8.1280614814137, 54.4278749313313] ] - ] - }, - "properties" : { - "feature::id" : 10, - "id" : 110689, - "name" : "Melvin ( Lough )", - "lge_id" : "en", - "pfafstette" : 1, - "altitude" : 24, - "objectid" : 62564, - "scalerank" : 12, - "featurecla" : "Lake", - "funkyname" : 0 - } - } ], - "numberMatched" : 768, - "numberReturned" : 10, - "links" : [ - { - "rel" : "self", - "type" : "application/geo+json", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/items?limit=10&f=json" - }, - { - "rel" : "alternate", - "type" : "text/html", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/items?limit=10&f=html" - }, - { - "rel" : "next", - "type" : "application/geo+json", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/items?offset=10&limit=10&f=json" - }, - { - "rel" : "collection", - "type" : "application/json", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe" - } - ], - "timeStamp" : "2023-06-13T14:15:05Z" -} diff --git a/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_1000.http_data b/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_20_f_json.http_data similarity index 52% rename from autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_1000.http_data rename to autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_20_f_json.http_data index 2a15ae0f5c5c..79b615f1cbe7 100644 --- a/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_1000.http_data +++ b/autotest/gdrivers/data/ogcapi/request_collections_NaturalEarth_physical_ne_10m_lakes_europe_items.json_limit_20_f_json.http_data @@ -1,13 +1,13 @@ HTTP/1.1 200 OK -Date: Tue, 20 Jun 2023 10:37:54 GMT +Date: Fri, 12 Jul 2024 14:16:47 GMT Server: Apache/2.4.52 (Ubuntu) -Expires: Wed, 12 Jun 2024 14:15:05 GMT +Expires: Sat, 12 Jul 2025 14:15:59 GMT Access-Control-Allow-Origin: * Vary: Accept,Accept-Encoding,Prefer Content-Crs: -Content-Length: 15561 +Content-Length: 29139 Access-Control-Allow-Headers: x-requested-with, Content-Type, origin, authorization, acc$ -Age: 591768 +Age: 48 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: application/json; charset=utf-8 @@ -229,24 +229,238 @@ Content-Type: application/json; charset=utf-8 "featurecla" : "Lake", "funkyname" : 0 } + }, { + "type" : "Feature", + "id" : 11, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-9.4830674327046, 53.570545687603], [-9.4472738509431, 53.5696444103644], [-9.3980040285662, 53.5687431331258], [-9.3548285570408, 53.5687431331258], [-9.3198933345541, 53.5866828419703], [-9.3162882255997, 53.6040216993225], [-9.3107947262406, 53.6103735579564], [-9.2964601263505, 53.6085280855155], [-9.2865031587621, 53.6073263825307], [-9.2958592748581, 53.6176696117927], [-9.3010094305072, 53.6307595907343], [-9.2877048617469, 53.6358668284197], [-9.2940567203809, 53.666038156931], [-9.3210950375389, 53.6963382393335], [-9.3463308002198, 53.6766388939755], [-9.3761158670573, 53.6447079289507], [-9.3934547244095, 53.6292145440396], [-9.4028108405054, 53.6238068806079], [-9.4192913385827, 53.6137211591284], [-9.4524240065922, 53.6040216993225], [-9.4791189800403, 53.5970689891961], [-9.4666727705549, 53.5958243682476], [-9.4307933528658, 53.5982277742172], [-9.4067592931698, 53.58874290423], [-9.4171454403955, 53.5775413156931], [-9.4398919611793, 53.5760391869621], [-9.4676169657572, 53.5762966947445], [-9.4830674327046, 53.570545687603] ] + ] + }, + "properties" : { + "feature::id" : 11, + "id" : 112193, + "name" : "Mask ( Lough )", + "lge_id" : "en", + "pfafstette" : 59, + "lke_type" : "R", + "altitude" : 17, + "objectid" : 63754, + "scalerank" : 10, + "featurecla" : "Reservoir", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 12, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-9.2281347280718, 54.0468921671855], [-9.2238429316975, 54.0580937557224], [-9.2253021424648, 54.0744884178722], [-9.2350874381981, 54.0833295184032], [-9.2463319446988, 54.0891234435085], [-9.2630699505585, 54.1040159769273], [-9.2897649240066, 54.106076039187], [-9.2983485167552, 54.0909689159495], [-9.2983485167552, 54.0742309100897], [-9.2998077275224, 54.0571495605201], [-9.2842714246475, 54.0416132576451], [-9.2673617469328, 54.0291670481597], [-9.2688209577001, 54.0118281908075], [-9.2666750595129, 53.9991673915034], [-9.2435851950192, 53.9993819813221], [-9.2259029939572, 53.9975794268449], [-9.2132851126168, 53.9939743178905], [-9.1906244277605, 53.9997682429958], [-9.1958604193371, 54.0170212644204], [-9.2204094945981, 54.0307120948544], [-9.2311389855338, 54.0365060199597], [-9.2281347280718, 54.0468921671855] ] + ] + }, + "properties" : { + "feature::id" : 12, + "id" : 111227, + "name" : "Conn (Lough)", + "lge_id" : "en", + "pfafstette" : 913, + "lke_type" : "B", + "altitude" : 6, + "objectid" : 64142, + "scalerank" : 11, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 13, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-9.1654745010072, 53.4271138527742], [-9.1353460904596, 53.4192169474455], [-9.121097326497, 53.4052256912653], [-9.1301959348105, 53.4018780900934], [-9.1386936916316, 53.3967279344442], [-9.1298525911005, 53.3873289003846], [-9.1186080845999, 53.3763419016664], [-9.1292517396081, 53.3669428676067], [-9.1435863394983, 53.3602476652628], [-9.1363761215895, 53.3529086934627], [-9.1274491851309, 53.3423079564182], [-9.1125995696759, 53.3286171259843], [-9.0831578465483, 53.3210635643655], [-9.063329747299, 53.3259132942685], [-9.0526860922908, 53.333509773851], [-9.0457333821645, 53.3423079564182], [-9.0502826863212, 53.3569429820546], [-9.0651323017762, 53.3650973951657], [-9.0810119483611, 53.3842388069951], [-9.0690807544406, 53.4079724409449], [-9.0535444515657, 53.4185731779894], [-9.0714841604102, 53.4219636971251], [-9.0957757278887, 53.4273713605567], [-9.1314834737228, 53.4365128868339], [-9.1489940029299, 53.4375], [-9.1700238051639, 53.4386587850211], [-9.1824700146493, 53.4438518586339], [-9.1888218732833, 53.4526500412012], [-9.2022981138986, 53.4544955136422], [-9.2159460263688, 53.4565555759018], [-9.2208386742355, 53.4717914530306], [-9.2202378227431, 53.4924349935909], [-9.2289930873467, 53.511619323384], [-9.2445293902216, 53.5246663843618], [-9.2542288500275, 53.5338079106391], [-9.2639283098334, 53.5377134453397], [-9.2779195660136, 53.5389580662882], [-9.2897649240066, 53.5389580662882], [-9.3198933345541, 53.5328637154367], [-9.3490775498993, 53.5317049304157], [-9.3837552646036, 53.52831441128], [-9.423239791247, 53.5185720335103], [-9.4469305072331, 53.5152673503021], [-9.4641835286578, 53.5048812030764], [-9.4830674327046, 53.4933362708295], [-9.4994620948544, 53.4985293444424], [-9.5092473905878, 53.5077137886834], [-9.5253845449551, 53.5082288042483], [-9.5149983977294, 53.4948813175243], [-9.4785181285479, 53.486083134957], [-9.4505356161875, 53.4915337163523], [-9.4201496978575, 53.4918341420985], [-9.3891629280352, 53.489087392419], [-9.3733691173778, 53.4842805804798], [-9.3581761582128, 53.4736369254715], [-9.338948910456, 53.469388047061], [-9.3280477476653, 53.4626499267533], [-9.3195499908442, 53.4499032915217], [-9.290365775499, 53.4414055347006], [-9.278520417506, 53.4375], [-9.2672759110053, 53.4337661371544], [-9.2548297015199, 53.4307189617286], [-9.23877838308, 53.4279722120491], [-9.2071049258378, 53.4240666773485], [-9.1654745010072, 53.4271138527742] ] + ] + }, + "properties" : { + "feature::id" : 13, + "id" : 112557, + "name" : "Corrib ( Lough )", + "lge_id" : "en", + "pfafstette" : 13, + "lke_type" : "B", + "altitude" : 5, + "objectid" : 65702, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 14, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-6.5310840505402, 53.1141989791247], [-6.5249896996887, 53.1144994048709], [-6.5085092016114, 53.1193920527376], [-6.4769215802967, 53.1312374107306], [-6.4613852774217, 53.148876693829], [-6.4835309467131, 53.1619237548068], [-6.5057624519319, 53.177760483428], [-6.5045607489471, 53.1883612204725], [-6.4860201886102, 53.1917088216444], [-6.4726297839224, 53.1971594030397], [-6.4933162424465, 53.1969018952573], [-6.5152044039553, 53.1838548342794], [-6.5261914026735, 53.1683614493683], [-6.5465345174877, 53.1558723219191], [-6.5607832814503, 53.1452286669108], [-6.5537447353965, 53.1406364447903], [-6.5458478300678, 53.1458295184032], [-6.5361483702619, 53.15037882256], [-6.520097051822, 53.1604216260758], [-6.5078225141916, 53.1649280122688], [-6.5036165537447, 53.1540697674419], [-6.5167494506501, 53.1400355932979], [-6.5315990661051, 53.1251430598792], [-6.5310840505402, 53.1141989791247] ] + ] + }, + "properties" : { + "feature::id" : 14, + "id" : 114569, + "name" : "Pollaphuca Reservoir", + "lge_id" : "en", + "pfafstette" : 7971, + "lke_type" : "B", + "altitude" : 182, + "objectid" : 67053, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 15, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-9.5356848562534, 52.0244260437649], [-9.5137966947446, 52.0198338216444], [-9.5062431331258, 52.026571941952], [-9.5163717725691, 52.032923800586], [-9.5101915857902, 52.0377735304889], [-9.4892476194836, 52.0423657526094], [-9.4880459164988, 52.0503055759019], [-9.5004921259843, 52.0520652124153], [-9.5153417414393, 52.0529664896539], [-9.52658624794, 52.0663998123054], [-9.5378307544406, 52.0760992721113], [-9.5573155099799, 52.0788460217909], [-9.5846113349204, 52.0788460217909], [-9.5970575444058, 52.0709491164622], [-9.5867572331075, 52.0636101446622], [-9.5719076176525, 52.0539106848563], [-9.5561138069951, 52.0438249633767], [-9.5488177531588, 52.0350267808094], [-9.5356848562534, 52.0244260437649] ] + ] + }, + "properties" : { + "feature::id" : 15, + "id" : 116430, + "name" : "Leane ( Lough )", + "lge_id" : "en", + "pfafstette" : 551, + "lke_type" : "B", + "altitude" : 17, + "objectid" : 67929, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 16, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-2.0954266617836, 47.3628055759019], [-2.083838811573, 47.3615609549533], [-2.0784311481414, 47.3710458249405], [-2.0884739516572, 47.3882988463651], [-2.1040102545321, 47.39683952115], [-2.1249542208387, 47.3947365409266], [-2.1416922266984, 47.3971828648599], [-2.1561984984435, 47.40417849295], [-2.1749965665629, 47.4184701748764], [-2.1878719556858, 47.4303155328694], [-2.1845243545138, 47.4184701748764], [-2.1784300036623, 47.3928910684856], [-2.1668421534518, 47.3667540285662], [-2.138258789599, 47.3570545687603], [-2.1243533693463, 47.3640072788867], [-2.1097612616737, 47.3792860739791], [-2.0920790606116, 47.3843933116645], [-2.0945683025087, 47.3716037584691], [-2.0954266617836, 47.3628055759019] ] + ] + }, + "properties" : { + "feature::id" : 16, + "id" : 131773, + "pfafstette" : 3, + "altitude" : 0, + "objectid" : 80857, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_80857", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 17, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-1.7005813953488, 47.1181731825673], [-1.7072765976927, 47.0974867240432], [-1.6914827870353, 47.0810491439297], [-1.6659036806446, 47.0761994140267], [-1.64830731551, 47.0831521241531], [-1.6388653634865, 47.0928945019227], [-1.642298800586, 47.1114779802234], [-1.6705388207288, 47.1272717908808], [-1.7005813953488, 47.1181731825673] ] + ] + }, + "properties" : { + "feature::id" : 17, + "id" : 132438, + "pfafstette" : 1231, + "lke_type" : "N", + "altitude" : -1, + "objectid" : 82683, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_82683", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 18, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-1.1866387795275, 44.3152009705182], [-1.1759951245193, 44.3221536806446], [-1.1623472120491, 44.3333981871452], [-1.1246223219191, 44.3422392876763], [-1.099429477202, 44.3516812396997], [-1.1121761124336, 44.3580330983336], [-1.1417036714887, 44.3662304294085], [-1.1727333592748, 44.3853718412379], [-1.1936344076176, 44.3923245513642], [-1.1996858405054, 44.36498580846], [-1.1933339818714, 44.3291493087347], [-1.1866387795275, 44.3152009705182] ] + ] + }, + "properties" : { + "feature::id" : 18, + "id" : 136391, + "name" : "tang de Biscarrosse", + "pfafstette" : 51, + "lke_type" : "N", + "altitude" : 18, + "objectid" : 84651, + "scalerank" : 12, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 19, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-1.1796860694012, 44.4434827641458], [-1.1596004623695, 44.4486329197949], [-1.1511027055484, 44.4567873329061], [-1.1298153955319, 44.473825764512], [-1.0911892281633, 44.4936109457975], [-1.0905454587072, 44.5039112570958], [-1.1155237136056, 44.5176020875298], [-1.1331629967039, 44.5251985671123], [-1.150501854056, 44.5324946209486], [-1.1723470976012, 44.5322371131661], [-1.1935914896539, 44.5167437282549], [-1.1978832860282, 44.4929671763413], [-1.197239516572, 44.4720661279985], [-1.1954369620948, 44.4559289736312], [-1.1796860694012, 44.4434827641458] ] + ] + }, + "properties" : { + "feature::id" : 19, + "id" : 136281, + "name" : "tang de Cazaux", + "pfafstette" : 191, + "lke_type" : "N", + "altitude" : 20, + "objectid" : 84907, + "scalerank" : 10, + "featurecla" : "Lake", + "funkyname" : 0 + } + }, { + "type" : "Feature", + "id" : 20, + "geometry" : { + "type" : "Polygon", + "coordinates" : [ + [ [-5.0605429408533, 42.9805381340414], [-5.0812723173412, 42.9634997024355], [-5.0770663568943, 42.9557744689617], [-5.0524743636697, 42.9529418833547], [-5.0342771470427, 42.9700232329244], [-5.0190412699139, 42.9679631706647], [-5.0093847280718, 42.9687356940121], [-4.9996423503021, 42.9663322880425], [-4.9853506683758, 42.9665468778612], [-4.9798571690167, 42.9708386742355], [-4.9883978438015, 42.9841861609595], [-4.9999427760483, 43.0033704907526], [-5.0077967634133, 43.0149154229995], [-5.0096422358542, 43.0051301272661], [-5.0261227339315, 42.993284769273], [-5.0439766068486, 42.9854307819081], [-5.0605429408533, 42.9805381340414] ] + ] + }, + "properties" : { + "feature::id" : 20, + "id" : 137030, + "pfafstette" : 49793, + "lke_type" : "N", + "altitude" : 1089, + "objectid" : 85068, + "scalerank" : 12, + "featurecla" : "Lake", + "note" : "_untitled_85068", + "funkyname" : 0 + } } ], "numberMatched" : 768, - "numberReturned" : 10, + "numberReturned" : 20, "links" : [ { "rel" : "self", "type" : "application/geo+json", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/items?limit=10&f=json" + "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/items?limit=20&f=json" }, { "rel" : "alternate", "type" : "text/html", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/items?limit=10&f=html" + "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/items?limit=20&f=html" }, { "rel" : "next", "type" : "application/geo+json", - "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/items?offset=10&limit=10&f=json" + "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe/items?offset=20&limit=20&f=json" }, { "rel" : "collection", @@ -254,5 +468,5 @@ Content-Type: application/json; charset=utf-8 "href" : "http://127.0.0.1:8080/fakeogcapi/collections/NaturalEarth:physical:ne_10m_lakes_europe" } ], - "timeStamp" : "2023-06-13T14:15:05Z" + "timeStamp" : "2024-07-12T14:15:59Z" } diff --git a/autotest/gdrivers/data/ogcapi/request_f_json.http_data b/autotest/gdrivers/data/ogcapi/request_f_json.http_data new file mode 100644 index 000000000000..f0ee88ae3535 --- /dev/null +++ b/autotest/gdrivers/data/ogcapi/request_f_json.http_data @@ -0,0 +1,107 @@ +HTTP/1.1 200 OK +Date: Fri, 12 Jul 2024 14:16:47 GMT +Server: Apache/2.4.52 (Ubuntu) +Expires: Sat, 12 Jul 2025 14:15:59 GMT +Access-Control-Allow-Origin: * +Vary: Accept,Accept-Encoding,Prefer +Content-Length: 4397 +Access-Control-Allow-Headers: x-requested-with, Content-Type, origin, authorization, acc$ +Age: 48 +Keep-Alive: timeout=5, max=100 +Connection: Keep-Alive +Content-Type: application/json + +{ + "links" : [ + { + "rel" : "self", + "type" : "application/json", + "title" : "The JSON representation of the landing page for this OGC (geospatial) API Service providing links to the API definition, the conformance declaration and information about the data collections offered at this endpoint.", + "href" : "http://127.0.0.1:8080/fakeogcapi?f=json" + }, + { + "rel" : "alternate", + "type" : "text/plain", + "title" : "The ECON representation of the landing page for this OGC (geospatial) API Service providing links to the API definition, the conformance declaration and information about the data collections offered at this endpoint.", + "href" : "http://127.0.0.1:8080/fakeogcapi?f=econ" + }, + { + "rel" : "alternate", + "type" : "text/html", + "title" : "The HTML representation of the landing page for this OGC (geospatial) API Service providing links to the API definition, the conformance declaration and information about the data collections offered at this endpoint.", + "href" : "http://127.0.0.1:8080/fakeogcapi?f=html" + }, + { + "rel" : "service-desc", + "type" : "application/vnd.oai.openapi+json;version=3.0", + "title" : "The JSON OpenAPI 3.0 document that describes the API offered at this endpoint", + "href" : "http://127.0.0.1:8080/fakeogcapi/api?f=json" + }, + { + "rel" : "service-doc", + "type" : "text/html", + "title" : "The HTML documentation of the API offered at this endpoint", + "href" : "http://127.0.0.1:8080/fakeogcapi/api?f=html" + }, + { + "rel" : "http://www.opengis.net/def/rel/ogc/1.0/conformance", + "type" : "application/json", + "title" : "The JSON representation of the conformance declaration for this server listing the requirement classes implemented by this server", + "href" : "http://127.0.0.1:8080/fakeogcapi/conformance" + }, + { + "rel" : "conformance", + "type" : "application/json", + "title" : "The JSON representation of the conformance declaration for this server listing the requirement classes implemented by this server", + "href" : "http://127.0.0.1:8080/fakeogcapi/conformance" + }, + { + "rel" : "data", + "type" : "application/json", + "title" : "The JSON representation of the list of all data collections served from this endpoint", + "href" : "http://127.0.0.1:8080/fakeogcapi/collections?f=json" + }, + { + "rel" : "data", + "type" : "text/plain", + "title" : "The ECON representation of the list of all data collections served from this endpoint", + "href" : "http://127.0.0.1:8080/fakeogcapi/collections?f=econ" + }, + { + "rel" : "data", + "type" : "text/html", + "title" : "The HTML representation of the list of all data collections served from this endpoint", + "href" : "http://127.0.0.1:8080/fakeogcapi/collections?f=html" + }, + { + "rel" : "http://www.opengis.net/def/rel/ogc/1.0/processes", + "type" : "application/json", + "title" : "The JSON representation of the list of all processes available from this endpoint", + "href" : "http://127.0.0.1:8080/fakeogcapi/processes" + }, + { + "rel" : "http://www.opengis.net/def/rel/ogc/1.0/routes", + "type" : "application/json", + "title" : "Routing end-point", + "href" : "http://127.0.0.1:8080/fakeogcapi/routes" + }, + { + "rel" : "http://www.opengis.net/def/rel/ogc/1.0/tiling-schemes", + "type" : "application/json", + "title" : "The list of supported tiling schemes (as JSON)", + "href" : "http://127.0.0.1:8080/fakeogcapi/tileMatrixSets?f=json" + }, + { + "rel" : "http://www.opengis.net/def/rel/ogc/1.0/tiling-schemes", + "type" : "text/plain", + "title" : "The list of supported tiling schemes (as ECON)", + "href" : "http://127.0.0.1:8080/fakeogcapi/tileMatrixSets?f=econ" + }, + { + "rel" : "http://www.opengis.net/def/rel/ogc/1.0/tiling-schemes", + "type" : "text/html", + "title" : "The list of supported tiling schemes (as HTML)", + "href" : "http://127.0.0.1:8080/fakeogcapi/tileMatrixSets?f=html" + } + ] +} diff --git a/autotest/gdrivers/ogcapi.py b/autotest/gdrivers/ogcapi.py index 3b32c06fad57..dfc40ea7b357 100644 --- a/autotest/gdrivers/ogcapi.py +++ b/autotest/gdrivers/ogcapi.py @@ -242,9 +242,6 @@ def test_ogr_ogcapi_features(remove_type_application_json): assert lyr is not None feat = lyr.GetNextFeature() - fdef = feat.GetDefnRef() - assert fdef.GetFieldDefn(0).GetName() == "feature::id" - assert fdef.GetFieldDefn(3).GetName() == "name" ogrtest.check_feature_geometry( feat, diff --git a/autotest/ogr/ogr_oapif.py b/autotest/ogr/ogr_oapif.py index d58957482445..fd656210f108 100755 --- a/autotest/ogr/ogr_oapif.py +++ b/autotest/ogr/ogr_oapif.py @@ -201,10 +201,10 @@ def test_ogr_oapif_empty_layer_and_user_query_parameters(): ############################################################################### -def _add_dummy_root_and_api_pages(handler): - handler.add("GET", "/oapif", 404, {}, "{}") - handler.add("GET", "/oapif/api", 404, {}, "{}") - handler.add("GET", "/oapif/api/", 404, {}, "{}") +def _add_dummy_root_and_api_pages(handler, prefix=""): + handler.add("GET", prefix + "/oapif", 404, {}, "{}") + handler.add("GET", prefix + "/oapif/api", 404, {}, "{}") + handler.add("GET", prefix + "/oapif/api/", 404, {}, "{}") ############################################################################### @@ -250,20 +250,22 @@ def test_ogr_oapif_fc_links_next_geojson(): handler = webserver.SequentialHandler() handler.add( "GET", - "/oapif/collections", + "/subdir/oapif/collections", 200, {"Content-Type": "application/json"}, '{ "collections" : [ { "name": "foo" }] }', ) with webserver.install_http_handler(handler): - ds = ogr.Open("OAPIF:http://localhost:%d/oapif" % gdaltest.webserver_port) + ds = ogr.Open( + "OAPIF:http://localhost:%d/subdir/oapif" % gdaltest.webserver_port + ) lyr = ds.GetLayer(0) handler = webserver.SequentialHandler() - _add_dummy_root_and_api_pages(handler) + _add_dummy_root_and_api_pages(handler, "/subdir") handler.add( "GET", - "/oapif/collections/foo/items?limit=20", + "/subdir/oapif/collections/foo/items?limit=20", 200, {"Content-Type": "application/geo+json"}, """{ "type": "FeatureCollection", "features": [ @@ -278,15 +280,16 @@ def test_ogr_oapif_fc_links_next_geojson(): with webserver.install_http_handler(handler): assert lyr.GetLayerDefn().GetFieldCount() == 1 + # Test relative links handler = webserver.SequentialHandler() handler.add( "GET", - "/oapif/collections/foo/items?limit=1000", + "/subdir/oapif/collections/foo/items?limit=1000", 200, {"Content-Type": "application/geo+json"}, """{ "type": "FeatureCollection", "links" : [ - { "rel": "next", "type": "application/geo+json", "href": "http://localhost:%d/oapif/foo_next" } + { "rel": "next", "type": "application/geo+json", "href": "/subdir/oapif/foo_next" } ], "features": [ { @@ -295,22 +298,22 @@ def test_ogr_oapif_fc_links_next_geojson(): "foo": "bar" } } - ] }""" - % gdaltest.webserver_port, + ] }""", ) with webserver.install_http_handler(handler): f = lyr.GetNextFeature() - if f["foo"] != "bar": - f.DumpReadable() - pytest.fail() + assert f["foo"] == "bar" handler = webserver.SequentialHandler() handler.add( "GET", - "/oapif/foo_next", + "/subdir/oapif/foo_next", 200, {"Content-Type": "application/geo+json"}, """{ "type": "FeatureCollection", + "links" : [ + { "rel": "next", "type": "application/geo+json", "href": "./foo_next2" } + ], "features": [ { "type": "Feature", @@ -322,9 +325,73 @@ def test_ogr_oapif_fc_links_next_geojson(): ) with webserver.install_http_handler(handler): f = lyr.GetNextFeature() - if f["foo"] != "baz": - f.DumpReadable() - pytest.fail() + assert f["foo"] == "baz" + + handler = webserver.SequentialHandler() + handler.add( + "GET", + "/subdir/oapif/foo_next2", + 200, + {"Content-Type": "application/geo+json"}, + """{ "type": "FeatureCollection", + "links" : [ + { "rel": "next", "type": "application/geo+json", "href": "../oapif/foo_next3" } + ], + "features": [ + { + "type": "Feature", + "properties": { + "foo": "baz2" + } + } + ] }""", + ) + with webserver.install_http_handler(handler): + f = lyr.GetNextFeature() + assert f["foo"] == "baz2" + + handler = webserver.SequentialHandler() + handler.add( + "GET", + "/subdir/oapif/foo_next3", + 200, + {"Content-Type": "application/geo+json"}, + """{ "type": "FeatureCollection", + "links" : [ + { "rel": "next", "type": "application/geo+json", "href": "foo_next4" } + ], + "features": [ + { + "type": "Feature", + "properties": { + "foo": "baz3" + } + } + ] }""", + ) + with webserver.install_http_handler(handler): + f = lyr.GetNextFeature() + assert f["foo"] == "baz3" + + handler = webserver.SequentialHandler() + handler.add( + "GET", + "/subdir/oapif/foo_next4", + 200, + {"Content-Type": "application/geo+json"}, + """{ "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "foo": "baz4" + } + } + ] }""", + ) + with webserver.install_http_handler(handler): + f = lyr.GetNextFeature() + assert f["foo"] == "baz4" ############################################################################### diff --git a/ogr/ogrsf_frmts/wfs/ogroapifdriver.cpp b/ogr/ogrsf_frmts/wfs/ogroapifdriver.cpp index b46e324c1234..533fabced42c 100644 --- a/ogr/ogrsf_frmts/wfs/ogroapifdriver.cpp +++ b/ogr/ogrsf_frmts/wfs/ogroapifdriver.cpp @@ -80,7 +80,14 @@ class OGROAPIFDataset final : public GDALDataset friend class OGROAPIFLayer; bool m_bMustCleanPersistent = false; + + // Server base URL. Like "https://example.com" + // Relative links are relative to it + CPLString m_osServerBaseURL{}; + + // Service base URL. Like "https://example.com/ogcapi" CPLString m_osRootURL; + CPLString m_osUserQueryParams; CPLString m_osUserPwd; int m_nPageSize = 1000; @@ -111,7 +118,8 @@ class OGROAPIFDataset final : public GDALDataset bool LoadJSONCollection(const CPLJSONObject &oCollection, const CPLJSONArray &oGlobalCRSList); - bool LoadJSONCollections(const CPLString &osResultIn); + bool LoadJSONCollections(const CPLString &osResultIn, + const std::string &osCollectionsURL); /** * Determines the page size by making a call to the API endpoint to get the server's @@ -131,10 +139,11 @@ class OGROAPIFDataset final : public GDALDataset OGRLayer *GetLayer(int idx) override; bool Open(GDALOpenInfo *); - const CPLJSONDocument &GetAPIDoc(); - const CPLJSONDocument &GetLandingPageDoc(); + const CPLJSONDocument &GetAPIDoc(std::string &osURLOut); + const CPLJSONDocument &GetLandingPageDoc(std::string &osURLOut); - CPLString ReinjectAuthInURL(const CPLString &osURL) const; + CPLString ResolveURL(const CPLString &osURL, + const std::string &osRequestURL) const; }; /************************************************************************/ @@ -282,36 +291,74 @@ OGROAPIFDataset::~OGROAPIFDataset() } /************************************************************************/ -/* ReinjectAuthInURL() */ +/* ResolveURL() */ /************************************************************************/ +// Resolve relative links and re-inject authentication elements. // If source URL is https://user:pwd@server.com/bla // and link only contains https://server.com/bla, then insert // into it user:pwd -CPLString OGROAPIFDataset::ReinjectAuthInURL(const CPLString &osURL) const +CPLString OGROAPIFDataset::ResolveURL(const CPLString &osURL, + const std::string &osRequestURL) const { - CPLString osRet(osURL); + const auto CleanURL = [](const std::string &osStr) + { + std::string osRet(osStr); + const auto nPos = osRet.rfind('?'); + if (nPos != std::string::npos) + osRet.resize(nPos); + if (!osRet.empty() && osRet.back() == '/') + osRet.pop_back(); + return osRet; + }; - if (!osRet.empty() && osRet[0] == '/') - osRet = m_osRootURL + osRet; + CPLString osRet(osURL); + // Cf https://datatracker.ietf.org/doc/html/rfc3986#section-5.4 + // Partial implementation for usual cases... + const std::string osRequestURLBase = + CPLGetPath(CleanURL(osRequestURL).c_str()); + if (!osURL.empty() && osURL[0] == '/') + osRet = m_osServerBaseURL + osURL; + else if (osURL.size() > 2 && osURL[0] == '.' && osURL[1] == '/') + osRet = osRequestURLBase + osURL.substr(1); + else if (osURL.size() > 3 && osURL[0] == '.' && osURL[1] == '.' && + osURL[2] == '/') + { + std::string osModifiedRequestURL(osRequestURLBase); + while (osRet.size() > 3 && osRet[0] == '.' && osRet[1] == '.' && + osRet[2] == '/') + { + osModifiedRequestURL = CPLGetPath(osModifiedRequestURL.c_str()); + osRet = osRet.substr(3); + } + osRet = osModifiedRequestURL + "/" + osRet; + } + else if (!STARTS_WITH(osURL.c_str(), "http://") && + !STARTS_WITH(osURL.c_str(), "https://") && + !STARTS_WITH(osURL.c_str(), "file://")) + { + osRet = osRequestURLBase + "/" + osURL; + } - const auto nArobaseInURLPos = m_osRootURL.find('@'); - if (!osRet.empty() && STARTS_WITH(m_osRootURL, "https://") && + const auto nArobaseInURLPos = m_osServerBaseURL.find('@'); + if (!osRet.empty() && STARTS_WITH(m_osServerBaseURL, "https://") && STARTS_WITH(osRet, "https://") && nArobaseInURLPos != std::string::npos && osRet.find('@') == std::string::npos) { - const auto nFirstSlashPos = m_osRootURL.find('/', strlen("https://")); + const auto nFirstSlashPos = + m_osServerBaseURL.find('/', strlen("https://")); if (nFirstSlashPos == std::string::npos || nFirstSlashPos > nArobaseInURLPos) { - auto osUserPwd = m_osRootURL.substr( + auto osUserPwd = m_osServerBaseURL.substr( strlen("https://"), nArobaseInURLPos - strlen("https://")); std::string osServer( nFirstSlashPos == std::string::npos - ? m_osRootURL.substr(nArobaseInURLPos + 1) - : m_osRootURL.substr(nArobaseInURLPos + 1, - nFirstSlashPos - nArobaseInURLPos)); + ? m_osServerBaseURL.substr(nArobaseInURLPos + 1) + : m_osServerBaseURL.substr(nArobaseInURLPos + 1, + nFirstSlashPos - + nArobaseInURLPos)); if (STARTS_WITH(osRet, ("https://" + osServer).c_str())) { osRet = "https://" + osUserPwd + "@" + @@ -505,13 +552,14 @@ bool OGROAPIFDataset::DownloadJSon(const CPLString &osURL, /* GetLandingPageDoc() */ /************************************************************************/ -const CPLJSONDocument &OGROAPIFDataset::GetLandingPageDoc() +const CPLJSONDocument &OGROAPIFDataset::GetLandingPageDoc(std::string &osURLOut) { if (m_bLandingPageDocLoaded) return m_oLandingPageDoc; m_bLandingPageDocLoaded = true; + osURLOut = m_osRootURL; CPL_IGNORE_RET_VAL( - DownloadJSon(m_osRootURL, m_oLandingPageDoc, MEDIA_TYPE_JSON)); + DownloadJSon(osURLOut, m_oLandingPageDoc, MEDIA_TYPE_JSON)); return m_oLandingPageDoc; } @@ -519,7 +567,7 @@ const CPLJSONDocument &OGROAPIFDataset::GetLandingPageDoc() /* GetAPIDoc() */ /************************************************************************/ -const CPLJSONDocument &OGROAPIFDataset::GetAPIDoc() +const CPLJSONDocument &OGROAPIFDataset::GetAPIDoc(std::string &osURLOut) { if (m_bAPIDocLoaded) return m_oAPIDoc; @@ -527,7 +575,8 @@ const CPLJSONDocument &OGROAPIFDataset::GetAPIDoc() // Fetch the /api URL from the links of the landing page CPLString osAPIURL; - const auto &oLandingPage = GetLandingPageDoc(); + std::string osLandingPageURL; + const auto &oLandingPage = GetLandingPageDoc(osLandingPageURL); if (oLandingPage.GetRoot().IsValid()) { const auto oLinks = oLandingPage.GetRoot().GetArray("links"); @@ -552,7 +601,8 @@ const CPLJSONDocument &OGROAPIFDataset::GetAPIDoc() ) { nCountRelAPI++; - osAPIURL = ReinjectAuthInURL(oLink.GetString("href")); + osAPIURL = + ResolveURL(oLink.GetString("href"), osLandingPageURL); if (osType == MEDIA_TYPE_OAPI_3_0 #ifndef REMOVE_SUPPORT_FOR_OLD_VERSIONS // Needed for http://beta.fmi.fi/data/3/wfs/sofp @@ -580,6 +630,7 @@ const CPLJSONDocument &OGROAPIFDataset::GetAPIDoc() if (!osAPIURL.empty()) { + osURLOut = osAPIURL; CPL_IGNORE_RET_VAL(DownloadJSon(osAPIURL, m_oAPIDoc, pszAccept)); return m_oAPIDoc; } @@ -596,7 +647,8 @@ const CPLJSONDocument &OGROAPIFDataset::GetAPIDoc() return m_oAPIDoc; } - if (DownloadJSon(m_osRootURL + "/api/", m_oAPIDoc, pszAccept)) + osURLOut = m_osRootURL + "/api/"; + if (DownloadJSon(osURLOut, m_oAPIDoc, pszAccept)) { return m_oAPIDoc; } @@ -815,8 +867,10 @@ bool OGROAPIFDataset::LoadJSONCollection(const CPLJSONObject &oCollection, /* LoadJSONCollections() */ /************************************************************************/ -bool OGROAPIFDataset::LoadJSONCollections(const CPLString &osResultIn) +bool OGROAPIFDataset::LoadJSONCollections(const CPLString &osResultIn, + const std::string &osCollectionsURL) { + std::string osParentURL(osCollectionsURL); CPLString osResult(osResultIn); while (!osResult.empty()) { @@ -872,7 +926,8 @@ bool OGROAPIFDataset::LoadJSONCollections(const CPLString &osResultIn) if (nCountRelNext == 1 && !osNextURL.empty()) { CPLString osContentType; - osNextURL = ReinjectAuthInURL(osNextURL); + osNextURL = ResolveURL(osNextURL, osParentURL); + osParentURL = osNextURL; if (!Download(osNextURL, MEDIA_TYPE_JSON, osResult, osContentType)) { @@ -891,7 +946,8 @@ void OGROAPIFDataset::DeterminePageSizeFromAPI(const std::string &itemsUrl) int nDefault{-1}; // Not sure if min should be considered //int nMinimum { -1 }; - const CPLJSONDocument &oDoc{GetAPIDoc()}; + std::string osAPIURL; + const CPLJSONDocument &oDoc{GetAPIDoc(osAPIURL)}; const auto &oRoot = oDoc.GetRoot(); bool bFound{false}; @@ -928,7 +984,7 @@ void OGROAPIFDataset::DeterminePageSizeFromAPI(const std::string &itemsUrl) { // Only reinject auth if the URL matches auto limitUrl{ref.find(m_osRootURL) == 0 - ? ReinjectAuthInURL(ref) + ? ResolveURL(ref, osAPIURL) : ref}; std::string fragment; const auto hashPos{limitUrl.find('#')}; @@ -1052,9 +1108,31 @@ bool OGROAPIFDataset::Open(GDALOpenInfo *poOpenInfo) m_osRootURL = m_osRootURL.substr(strlen("OAPIF:")); else if (STARTS_WITH_CI(m_osRootURL, "OAPIF_COLLECTION:")) { + // Used by the OGCAPI driver osCollectionDescURL = m_osRootURL.substr(strlen("OAPIF_COLLECTION:")); m_osRootURL = osCollectionDescURL; - const char *pszStr = m_osRootURL.c_str(); + } + + const auto nPosQuestionMark = m_osRootURL.find('?'); + if (nPosQuestionMark != std::string::npos) + { + m_osUserQueryParams = m_osRootURL.substr(nPosQuestionMark + 1); + m_osRootURL.resize(nPosQuestionMark); + } + + const auto nCollectionsPos = m_osRootURL.find("/collections/"); + if (nCollectionsPos != std::string::npos) + { + if (osCollectionDescURL.empty()) + osCollectionDescURL = m_osRootURL; + m_osRootURL.resize(nCollectionsPos); + } + + // m_osServerBaseURL is just the "https://example.com" part from + // "https://example.com/foo/bar" + m_osServerBaseURL = m_osRootURL; + { + const char *pszStr = m_osServerBaseURL.c_str(); const char *pszPtr = pszStr; if (STARTS_WITH(pszPtr, "http://")) pszPtr += strlen("http://"); @@ -1062,24 +1140,7 @@ bool OGROAPIFDataset::Open(GDALOpenInfo *poOpenInfo) pszPtr += strlen("https://"); pszPtr = strchr(pszPtr, '/'); if (pszPtr) - m_osRootURL.assign(pszStr, pszPtr - pszStr); - } - - if (osCollectionDescURL.empty()) - { - auto nPosQuotationMark = m_osRootURL.find('?'); - if (nPosQuotationMark != std::string::npos) - { - m_osUserQueryParams = m_osRootURL.substr(nPosQuotationMark + 1); - m_osRootURL.resize(nPosQuotationMark); - } - - auto nCollectionsPos = m_osRootURL.find("/collections/"); - if (nCollectionsPos != std::string::npos) - { - osCollectionDescURL = m_osRootURL; - m_osRootURL.resize(nCollectionsPos); - } + m_osServerBaseURL.assign(pszStr, pszPtr - pszStr); } m_bIgnoreSchema = CPLTestBool(CSLFetchNameValueDef( @@ -1167,15 +1228,16 @@ bool OGROAPIFDataset::Open(GDALOpenInfo *poOpenInfo) return LoadJSONCollection(oRoot, CPLJSONArray()); } - if (!Download(ConcatenateURLParts(m_osRootURL, "/collections"), - MEDIA_TYPE_JSON, osResult, osContentType)) + const std::string osCollectionsURL( + ConcatenateURLParts(m_osRootURL, "/collections")); + if (!Download(osCollectionsURL, MEDIA_TYPE_JSON, osResult, osContentType)) { return false; } if (osContentType.find("json") != std::string::npos) { - return LoadJSONCollections(osResult); + return LoadJSONCollections(osResult, osCollectionsURL); } return true; @@ -1309,6 +1371,7 @@ OGROAPIFLayer::OGROAPIFLayer(OGROAPIFDataset *poDS, const CPLString &osName, // later m_osURL = ConcatenateURLParts(m_poDS->m_osRootURL, "/collections/" + osName + "/items"); + const std::string osParentURL(m_osURL); m_osPath = "/collections/" + osName + "/items"; if (oLinks.IsValid()) @@ -1345,20 +1408,21 @@ OGROAPIFLayer::OGROAPIFLayer(OGROAPIFDataset *poDS, const CPLString &osName, { if (type == MEDIA_TYPE_JSON || m_osQueryablesURL.empty()) { - m_osQueryablesURL = m_poDS->ReinjectAuthInURL(osURL); + m_osQueryablesURL = m_poDS->ResolveURL(osURL, osParentURL); } } else if (EQUAL(osRel.c_str(), "items")) { if (type == MEDIA_TYPE_GEOJSON) { - m_osURL = m_poDS->ReinjectAuthInURL(osURL); + m_osURL = m_poDS->ResolveURL(osURL, osParentURL); } } } if (!m_osDescribedByURL.empty()) { - m_osDescribedByURL = m_poDS->ReinjectAuthInURL(m_osDescribedByURL); + m_osDescribedByURL = + m_poDS->ResolveURL(m_osDescribedByURL, osParentURL); } } @@ -1995,7 +2059,7 @@ OGRFeature *OGROAPIFLayer::GetNextRawFeature() m_oCurDoc = CPLJSONDocument(); - CPLString osURL(m_osGetURL); + const CPLString osURL(m_osGetURL); m_osGetURL.clear(); CPLStringList aosHeaders; if (!m_poDS->DownloadJSon(osURL, m_oCurDoc, @@ -2151,7 +2215,7 @@ OGRFeature *OGROAPIFLayer::GetNextRawFeature() if (!m_osGetURL.empty()) { - m_osGetURL = m_poDS->ReinjectAuthInURL(m_osGetURL); + m_osGetURL = m_poDS->ResolveURL(m_osGetURL, osURL); } } } @@ -2262,7 +2326,8 @@ OGRFeature *OGROAPIFLayer::GetNextFeature() bool OGROAPIFLayer::SupportsResultTypeHits() { - CPLJSONDocument oDoc = m_poDS->GetAPIDoc(); + std::string osAPIURL; + CPLJSONDocument oDoc = m_poDS->GetAPIDoc(osAPIURL); if (oDoc.GetRoot().GetString("openapi").empty()) return false; @@ -2957,7 +3022,8 @@ void OGROAPIFLayer::GetQueryableAttributes() if (m_bGotQueryableAttributes) return; m_bGotQueryableAttributes = true; - CPLJSONDocument oAPIDoc = m_poDS->GetAPIDoc(); + std::string osAPIURL; + CPLJSONDocument oAPIDoc = m_poDS->GetAPIDoc(osAPIURL); if (oAPIDoc.GetRoot().GetString("openapi").empty()) return; From b4f992d12d6f9ead74dfae199e585911a9f51da8 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 18 Jul 2024 14:24:20 +0200 Subject: [PATCH 261/301] CI: fix issue with build-linux-ubuntu-focal and setuptools 71.0.1 Fixes following error: ``` Traceback (most recent call last): File "/home/runner/work/gdal/gdal/superbuild/build/gdal/swig/python/setup.py", line 15, in from setuptools.command.build_ext import build_ext File "/home/runner/.local/lib/python3.8/site-packages/setuptools/__init__.py", line 19, in from .dist import Distribution File "/home/runner/.local/lib/python3.8/site-packages/setuptools/dist.py", line 30, in from . import _entry_points File "/home/runner/.local/lib/python3.8/site-packages/setuptools/_entry_points.py", line 44, in def validate(eps: metadata.EntryPoints): AttributeError: module 'importlib_metadata' has no attribute 'EntryPoints' CMake Error at build_ext.cmake:5 (message): setup.py bdist_wheel failed ``` Likely related to similar https://github.com/pypa/setuptools/issues/4482 --- .github/workflows/cmake_builds.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake_builds.yml b/.github/workflows/cmake_builds.yml index 3d8a9860d5c8..29258e93a4c4 100644 --- a/.github/workflows/cmake_builds.yml +++ b/.github/workflows/cmake_builds.yml @@ -94,7 +94,7 @@ jobs: # Workaround bug in ogdi packaging sudo ln -s /usr/lib/ogdi/libvrf.so /usr/lib # - python3 -m pip install -U pip wheel setuptools numpy + python3 -m pip install -U pip wheel setuptools numpy importlib_metadata python3 -m pip install -r $GITHUB_WORKSPACE/autotest/requirements.txt - name: Build libjxl From de3c1494daa2b563a7e1a8d089858c490ef415ba Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 18 Jul 2024 13:19:15 +0200 Subject: [PATCH 262/301] Fix compilation against libarchive-3.3.3-5 as shipped by RHEL 8 Fixes #10428 --- port/cpl_vsil_libarchive.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/port/cpl_vsil_libarchive.cpp b/port/cpl_vsil_libarchive.cpp index 96efb4863fa4..b3b4785c0b5f 100644 --- a/port/cpl_vsil_libarchive.cpp +++ b/port/cpl_vsil_libarchive.cpp @@ -188,7 +188,9 @@ static struct archive *VSICreateArchiveHandle(const std::string &osFSPrefix) else { archive_read_support_format_rar(pArchive); +#ifdef ARCHIVE_FORMAT_RAR_V5 archive_read_support_format_rar5(pArchive); +#endif } return pArchive; From fea698ace06e401fcf89943d687fd8d92f5d0a81 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 23 Jul 2024 15:10:49 +0200 Subject: [PATCH 263/301] LIBKML: fix LIBKML_RESOLVE_STYLE=YES when reading a KML file with dataset-level styles (3.9.1 regression) Fixes https://github.com/qgis/QGIS/issues/58208 --- autotest/ogr/ogr_libkml.py | 22 +++++++++++++++++++ .../libkml/ogrlibkmlfeaturestyle.cpp | 14 ++++-------- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/autotest/ogr/ogr_libkml.py b/autotest/ogr/ogr_libkml.py index f92ba78c1822..91affbfcaba5 100755 --- a/autotest/ogr/ogr_libkml.py +++ b/autotest/ogr/ogr_libkml.py @@ -1405,6 +1405,13 @@ def test_ogr_libkml_read_write_style(tmp_vsimem): "style1_highlight", 'SYMBOL(id:"http://style1_highlight",c:#10325476)' ) ds.SetStyleTable(style_table) + lyr = ds.CreateLayer("test") + feat = ogr.Feature(lyr.GetLayerDefn()) + feat.SetStyleString("@style1_normal") + lyr.CreateFeature(feat) + feat = ogr.Feature(lyr.GetLayerDefn()) + feat.SetStyleString("@unknown_style") + lyr.CreateFeature(feat) ds = None f = gdal.VSIFOpenL(tmp_vsimem / "ogr_libkml_read_write_style_write.kml", "rb") @@ -1448,6 +1455,21 @@ def test_ogr_libkml_read_write_style(tmp_vsimem): print(data) pytest.fail(styles) + ds = ogr.Open(tmp_vsimem / "ogr_libkml_read_write_style_write.kml") + lyr = ds.GetLayer(0) + f = lyr.GetNextFeature() + assert f.GetStyleString() == "@style1_normal" + f = lyr.GetNextFeature() + assert f.GetStyleString() == "@unknown_style" + + with gdaltest.config_option("LIBKML_RESOLVE_STYLE", "YES"): + ds = ogr.Open(tmp_vsimem / "ogr_libkml_read_write_style_write.kml") + lyr = ds.GetLayer(0) + f = lyr.GetNextFeature() + assert f.GetStyleString() == 'SYMBOL(id:"http://style1_normal",c:#67452301)' + f = lyr.GetNextFeature() + assert f.GetStyleString() == "@unknown_style" + ############################################################################### # Test writing Update diff --git a/ogr/ogrsf_frmts/libkml/ogrlibkmlfeaturestyle.cpp b/ogr/ogrsf_frmts/libkml/ogrlibkmlfeaturestyle.cpp index 41afc756ea40..bdd75588d64e 100644 --- a/ogr/ogrsf_frmts/libkml/ogrlibkmlfeaturestyle.cpp +++ b/ogr/ogrsf_frmts/libkml/ogrlibkmlfeaturestyle.cpp @@ -205,16 +205,10 @@ void kml2featurestyle(FeaturePtr poKmlFeature, OGRLIBKMLDataSource *poOgrDS, else { const size_t nPathLen = poOgrDS->GetStylePath().size(); - - if (nPathLen == 0) - { - if (!osUrl.empty() && osUrl[0] == '#') - osStyleString = std::string("@").append(osUrl.c_str() + 1); - } - else if (osUrl.size() > nPathLen && - strncmp(osUrl.c_str(), poOgrDS->GetStylePath().c_str(), - nPathLen) == 0 && - osUrl[nPathLen] == '#') + if (osUrl.size() > nPathLen && osUrl[nPathLen] == '#' && + (nPathLen == 0 || + strncmp(osUrl.c_str(), poOgrDS->GetStylePath().c_str(), + nPathLen) == 0)) { /***** should we resolve the style *****/ const char *pszResolve = From 16fada2197b98d01f060ac211855c8f8d56e4169 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 29 Jul 2024 21:17:46 +0200 Subject: [PATCH 264/301] JPEG: ReadFLIRMetadata(): avoid potential infinite loop --- frmts/jpeg/jpgdataset.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/frmts/jpeg/jpgdataset.cpp b/frmts/jpeg/jpgdataset.cpp index ce0a87be09c2..9ee903afbb53 100644 --- a/frmts/jpeg/jpgdataset.cpp +++ b/frmts/jpeg/jpgdataset.cpp @@ -331,7 +331,7 @@ void JPGDatasetCommon::ReadXMPMetadata() // Not a marker if (abyChunkHeader[0] != 0xFF) - continue; + break; // Stop on Start of Scan if (abyChunkHeader[1] == 0xDA) @@ -406,17 +406,18 @@ void JPGDatasetCommon::ReadFLIRMetadata() 1) break; + const int nMarkerLength = + abyChunkHeader[2] * 256 + abyChunkHeader[3] - 2; + nChunkLoc += 4 + nMarkerLength; + // Not a marker if (abyChunkHeader[0] != 0xFF) - continue; + break; // Stop on Start of Scan if (abyChunkHeader[1] == 0xDA) break; - int nMarkerLength = abyChunkHeader[2] * 256 + abyChunkHeader[3] - 2; - nChunkLoc += 4 + nMarkerLength; - if (abyChunkHeader[1] == 0xe1 && memcmp(abyChunkHeader + 4, "FLIR\0", 5) == 0) { From 2f291530d589e21a9f46603fe00dd049ae924677 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 31 Jul 2024 17:14:18 +0200 Subject: [PATCH 265/301] CI: explicitly install setuptools for Conda based builds --- .github/workflows/cmake_builds.yml | 4 ++-- ci/travis/conda/meta.yaml.patch | 28 ++++++++++++++++++++++++++++ ci/travis/conda/setup.sh | 2 ++ ci/travis/osx/before_install.sh | 2 +- 4 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 ci/travis/conda/meta.yaml.patch diff --git a/.github/workflows/cmake_builds.yml b/.github/workflows/cmake_builds.yml index 29258e93a4c4..949e02c7487d 100644 --- a/.github/workflows/cmake_builds.yml +++ b/.github/workflows/cmake_builds.yml @@ -422,7 +422,7 @@ jobs: - name: Install dependency shell: bash -l {0} run: | - conda install --yes --quiet curl libiconv icu python=3.10 swig numpy pytest pytest-env pytest-benchmark filelock zlib lxml jsonschema + conda install --yes --quiet curl libiconv icu python=3.10 swig numpy pytest pytest-env pytest-benchmark filelock zlib lxml jsonschema setuptools # FIXME: remove libnetcdf=4.9.2=nompi_h5902ca5_107 pinning as soon as https://github.com/conda-forge/libnetcdf-feedstock/issues/182 is resolved conda install --yes --quiet proj geos hdf4 hdf5 kealib \ libnetcdf=4.9.2=nompi_h5902ca5_107 openjpeg poppler libtiff libpng xerces-c expat libxml2 kealib json-c \ @@ -525,7 +525,7 @@ jobs: - name: Install dependency shell: bash -l {0} run: | - conda install --yes --quiet proj pytest pytest-env pytest-benchmark filelock lxml cmake + conda install --yes --quiet proj pytest pytest-env pytest-benchmark filelock lxml cmake setuptools - name: Check CMake version shell: bash -l {0} run: | diff --git a/ci/travis/conda/meta.yaml.patch b/ci/travis/conda/meta.yaml.patch new file mode 100644 index 000000000000..96047817d95b --- /dev/null +++ b/ci/travis/conda/meta.yaml.patch @@ -0,0 +1,28 @@ +diff --git a/recipe/meta.yaml b/recipe/meta.yaml +index f3afcef..eb825ae 100644 +--- a/recipe/meta.yaml ++++ b/recipe/meta.yaml +@@ -31,6 +31,7 @@ requirements: + - {{ stdlib("c") }} + - {{ compiler('cxx') }} + - swig ++ - setuptools + host: + - blosc + - expat +@@ -614,6 +615,7 @@ outputs: + - python # [build_platform != target_platform] + - cross-python_{{ target_platform }} # [build_platform != target_platform] + - numpy # [build_platform != target_platform] ++ - setuptools + - swig + host: + - python +@@ -623,6 +625,7 @@ outputs: + - libkml-devel + - libxml2 + - expat ++ - setuptools + run: + - python + - libgdal-core {{ version }}.* diff --git a/ci/travis/conda/setup.sh b/ci/travis/conda/setup.sh index b4cd637babee..44da66498178 100755 --- a/ci/travis/conda/setup.sh +++ b/ci/travis/conda/setup.sh @@ -19,6 +19,8 @@ git clone https://github.com/conda-forge/gdal-feedstock.git cd gdal-feedstock +patch -p1 < ../ci/travis/conda/meta.yaml.patch + cat > recipe/recipe_clobber.yaml < Date: Thu, 1 Aug 2024 00:00:29 +0200 Subject: [PATCH 266/301] vsicurl.py: skip on osx --- autotest/gcore/vsicurl.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/autotest/gcore/vsicurl.py b/autotest/gcore/vsicurl.py index 1b425be6935d..d5ae2d26df6d 100755 --- a/autotest/gcore/vsicurl.py +++ b/autotest/gcore/vsicurl.py @@ -28,6 +28,7 @@ # DEALINGS IN THE SOFTWARE. ############################################################################### +import os import sys import time @@ -37,7 +38,13 @@ from osgeo import gdal, ogr -pytestmark = pytest.mark.require_curl() +pytestmark = [ + pytest.mark.require_curl(), + pytest.mark.skipif( + os.environ.get("BUILD_NAME", "") == "macos_build_conda", + reason="fail with SIGPIPE", + ), +] ############################################################################### # From a05018a89b7a3bf3aef7891812f8467fe611b45f Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 1 Aug 2024 20:44:05 +0200 Subject: [PATCH 267/301] Skip vsicurl.py on fedora:rawhide --- .github/workflows/linux_build.yml | 4 +++- autotest/gcore/vsicurl.py | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/linux_build.yml b/.github/workflows/linux_build.yml index 30204f559ffb..31f52dd7cb5f 100644 --- a/.github/workflows/linux_build.yml +++ b/.github/workflows/linux_build.yml @@ -76,7 +76,7 @@ jobs: - name: Fedora Rawhide, clang++ id: fedora_rawhide - travis_branch: sanitize + travis_branch: fedora_rawhide container: fedora_rawhide build_script: build.sh os: ubuntu-22.04 @@ -284,6 +284,7 @@ jobs: env: TRAVIS: yes TRAVIS_BRANCH: ${{ matrix.travis_branch }} + BUILD_NAME: ${{ matrix.travis_branch }} run: | if test -f ".github/workflows/${{ matrix.id }}/${{ matrix.test_script }}"; then TEST_CMD="$(pwd)/.github/workflows/${{ matrix.id }}/${{ matrix.test_script }}" @@ -306,6 +307,7 @@ jobs: -e GITHUB_WORKFLOW \ -e TRAVIS \ -e TRAVIS_BRANCH \ + -e BUILD_NAME \ -e "GDAL_SOURCE_DIR=$(pwd)" \ -u $(id -u ${USER}):$(id -g ${USER}) \ --security-opt seccomp=unconfined \ diff --git a/autotest/gcore/vsicurl.py b/autotest/gcore/vsicurl.py index d5ae2d26df6d..2d79c0646d0d 100755 --- a/autotest/gcore/vsicurl.py +++ b/autotest/gcore/vsicurl.py @@ -41,7 +41,7 @@ pytestmark = [ pytest.mark.require_curl(), pytest.mark.skipif( - os.environ.get("BUILD_NAME", "") == "macos_build_conda", + os.environ.get("BUILD_NAME", "") in ("macos_build_conda", "fedora_rawhide"), reason="fail with SIGPIPE", ), ] From 5e40feea1ab7a7fc9d43007955b56e47138e3778 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 2 Aug 2024 11:09:26 +0200 Subject: [PATCH 268/301] autotest/gcore/vsicurl.py Skip with curl >= 8.9.1 --- autotest/gcore/vsicurl.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/autotest/gcore/vsicurl.py b/autotest/gcore/vsicurl.py index 2d79c0646d0d..b567ddd40d47 100755 --- a/autotest/gcore/vsicurl.py +++ b/autotest/gcore/vsicurl.py @@ -28,7 +28,6 @@ # DEALINGS IN THE SOFTWARE. ############################################################################### -import os import sys import time @@ -38,10 +37,21 @@ from osgeo import gdal, ogr + +def curl_version(): + actual_version = [0, 0, 0] + for build_info_item in gdal.VersionInfo("BUILD_INFO").strip().split("\n"): + if build_info_item.startswith("CURL_VERSION="): + actual_version = [ + int(x) for x in build_info_item[len("CURL_VERSION=") :].split(".") + ] + return actual_version + + pytestmark = [ pytest.mark.require_curl(), pytest.mark.skipif( - os.environ.get("BUILD_NAME", "") in ("macos_build_conda", "fedora_rawhide"), + curl_version() >= [8, 9, 1], reason="fail with SIGPIPE", ), ] From 15a849a485f75a5024c447addb9d2c07b3cb5c2b Mon Sep 17 00:00:00 2001 From: AbelPau Date: Fri, 2 Aug 2024 08:55:12 +0200 Subject: [PATCH 269/301] MiraMonVector: fix Issue 70860 in oss-fuzz The minus sign hadn't been taken into account in a particular case when translating numerical fields. --- ogr/ogrsf_frmts/miramon/ogrmiramonlayer.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ogr/ogrsf_frmts/miramon/ogrmiramonlayer.cpp b/ogr/ogrsf_frmts/miramon/ogrmiramonlayer.cpp index 517008cd7d5f..b3b7e4f3e068 100644 --- a/ogr/ogrsf_frmts/miramon/ogrmiramonlayer.cpp +++ b/ogr/ogrsf_frmts/miramon/ogrmiramonlayer.cpp @@ -2216,6 +2216,7 @@ OGRErr OGRMiraMonLayer::TranslateFieldsValuesToMM(OGRFeature *poFeature) MM_EXT_DBF_N_FIELDS nNumFields = m_poFeatureDefn->GetFieldCount(); MM_EXT_DBF_N_MULTIPLE_RECORDS nNumRecords, nRealNumRecords; hMMFeature.nNumMRecords = 0; +#define MAX_SIZE_OF_FIELD_NUMBER_WITH_MINUS 22 for (MM_EXT_DBF_N_FIELDS iField = 0; iField < nNumFields; iField++) { @@ -2427,7 +2428,7 @@ OGRErr OGRMiraMonLayer::TranslateFieldsValuesToMM(OGRFeature *poFeature) hMMFeature.pRecords[nIRecord].nNumField)) return OGRERR_NOT_ENOUGH_MEMORY; - char szChain[21]; + char szChain[MAX_SIZE_OF_FIELD_NUMBER_WITH_MINUS]; MM_SprintfDoubleSignifFigures( szChain, sizeof(szChain), phMiraMonLayer->pLayerDB->pFields[iField].nNumberOfDecimals, @@ -2643,7 +2644,7 @@ OGRErr OGRMiraMonLayer::TranslateFieldsValuesToMM(OGRFeature *poFeature) hMMFeature.pRecords[0].pField[iField].bIsValid = 0; else { - char szChain[21]; + char szChain[MAX_SIZE_OF_FIELD_NUMBER_WITH_MINUS]; MM_SprintfDoubleSignifFigures( szChain, sizeof(szChain), phMiraMonLayer->pLayerDB->pFields[iField].nNumberOfDecimals, From 34fd9922a269ab094bb24b285638165b134211cb Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 2 Aug 2024 14:56:50 +0200 Subject: [PATCH 270/301] JSONFG: fix reading non-FeatureCollection documents larger than 6,000 bytes Fixes #10525 --- autotest/ogr/ogr_jsonfg.py | 26 +++++++++++++++++++++ ogr/ogrsf_frmts/jsonfg/ogrjsonfgdataset.cpp | 12 +++++----- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/autotest/ogr/ogr_jsonfg.py b/autotest/ogr/ogr_jsonfg.py index 55db4212ce79..ec352b545fc7 100755 --- a/autotest/ogr/ogr_jsonfg.py +++ b/autotest/ogr/ogr_jsonfg.py @@ -473,6 +473,32 @@ def test_jsonfg_read_two_features_types(): assert f.GetFID() == 1 +############################################################################### +# Test reading file with a single Feature larger than 6000 bytes + + +def test_jsonfg_read_single_feature_large(tmp_vsimem): + + tmp_file = str(tmp_vsimem / "test.json") + content = """{ + "type": "Feature", + "conformsTo" : [ "[ogc-json-fg-1-0.1:core]" ], + %s + "id": 1, + "geometry": { "type": "Point", "coordinates": [2, 49] }, + "properties": { "foo": 1 }, + "place": null, + "time": null + }""" % ( + " " * 100000 + ) + + gdal.FileFromMemBuffer(tmp_file, content) + + ds = gdal.OpenEx(tmp_file) + assert ds.GetDriver().GetDescription() == "JSONFG" + + ############################################################################### # Test time handling diff --git a/ogr/ogrsf_frmts/jsonfg/ogrjsonfgdataset.cpp b/ogr/ogrsf_frmts/jsonfg/ogrjsonfgdataset.cpp index d5017c07b081..88c30a5e30f5 100644 --- a/ogr/ogrsf_frmts/jsonfg/ogrjsonfgdataset.cpp +++ b/ogr/ogrsf_frmts/jsonfg/ogrjsonfgdataset.cpp @@ -324,13 +324,13 @@ bool OGRJSONFGDataset::Open(GDALOpenInfo *poOpenInfo, } if (!bCanTryWithNonStreamingParserOut) return false; - - // Fallback to in-memory ingestion - CPLAssert(poOpenInfo->fpL == nullptr); - poOpenInfo->fpL = fp.release(); - if (!ReadFromFile(poOpenInfo, pszUnprefixed)) - return false; } + + // Fallback to in-memory ingestion + CPLAssert(poOpenInfo->fpL == nullptr); + poOpenInfo->fpL = fp.release(); + if (!ReadFromFile(poOpenInfo, pszUnprefixed)) + return false; } // In-memory ingestion of the file From cc46b0a5d0197efdc82599e357c800ae7c2bf703 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 29 Jul 2024 19:36:09 +0200 Subject: [PATCH 271/301] EPSGTreatsAsNorthingEasting(): make it work correctly with compound CRS --- autotest/osr/osr_epsg.py | 2 ++ ogr/ogrspatialreference.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/autotest/osr/osr_epsg.py b/autotest/osr/osr_epsg.py index 901b034389a1..034977160f6d 100755 --- a/autotest/osr/osr_epsg.py +++ b/autotest/osr/osr_epsg.py @@ -124,6 +124,8 @@ def test_osr_epsg_6(): (5042, False), # WGS 84 / UPS South (E,N) (3031, False), # WGS 84 / Antarctic Polar Stereographic (5482, True), # RSRGD2000 / RSPS2000 + (3903, True), # ETRS89 / TM35FIN(N,E) + N2000 height + (5698, False), # RGF93 v1 / Lambert-93 + NGF-IGN69 height ], ) def test_osr_epsg_treats_as_northing_easting(epsg_code, is_northing_easting): diff --git a/ogr/ogrspatialreference.cpp b/ogr/ogrspatialreference.cpp index f269cc81c470..5e5596b52890 100644 --- a/ogr/ogrspatialreference.cpp +++ b/ogr/ogrspatialreference.cpp @@ -11927,7 +11927,7 @@ int OGRSpatialReference::EPSGTreatsAsNorthingEasting() const const auto ctxt = d->getPROJContext(); if (d->m_pjType == PJ_TYPE_COMPOUND_CRS) { - projCRS = proj_crs_get_sub_crs(ctxt, d->m_pj_crs, 1); + projCRS = proj_crs_get_sub_crs(ctxt, d->m_pj_crs, 0); if (!projCRS || proj_get_type(projCRS) != PJ_TYPE_PROJECTED_CRS) { d->undoDemoteFromBoundCRS(); From 9485375f10c1b365a85c42dd9c4a406891693b27 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sun, 28 Jul 2024 18:08:01 +0200 Subject: [PATCH 272/301] SRTMHGT: add support for 0.5 deg resolution datasets Fixes #10514 --- autotest/gdrivers/srtmhgt.py | 36 ++++++++++++++++++++++++++++++++ frmts/srtmhgt/srtmhgtdataset.cpp | 22 +++++++++++-------- 2 files changed, 49 insertions(+), 9 deletions(-) diff --git a/autotest/gdrivers/srtmhgt.py b/autotest/gdrivers/srtmhgt.py index 2e29d1e73c43..76acf525a138 100755 --- a/autotest/gdrivers/srtmhgt.py +++ b/autotest/gdrivers/srtmhgt.py @@ -191,3 +191,39 @@ def test_srtmhgt_hgts(): assert min_ == 1.25 assert max_ == 1.25 + + +############################################################################### +# Test reading files of all supported sizes + + +@pytest.mark.parametrize( + "width,height,nb_bytes", + [ + (1201, 1201, 2), + (1801, 3601, 2), + (3601, 3601, 1), + (3601, 3601, 2), + (3601, 3601, 4), + (7201, 7201, 2), + ], +) +def test_srtmhgt_all_supported_sizes(tmp_vsimem, width, height, nb_bytes): + + filename = str(tmp_vsimem / "n00e000.hgt") + f = gdal.VSIFOpenL(filename, "wb") + if f is None: + pytest.skip() + gdal.VSIFTruncateL(f, width * height * nb_bytes) + gdal.VSIFCloseL(f) + + ds = gdal.Open(filename) + assert ds is not None + assert ds.GetGeoTransform()[1] == pytest.approx(1.0 / (width - 1), rel=1e-8) + assert ds.GetRasterBand(1).DataType == ( + gdal.GDT_Byte + if nb_bytes == 1 + else gdal.GDT_Int16 + if nb_bytes == 2 + else gdal.GDT_Float32 + ) diff --git a/frmts/srtmhgt/srtmhgtdataset.cpp b/frmts/srtmhgt/srtmhgtdataset.cpp index 367ef23af841..ff8c8d863ff4 100644 --- a/frmts/srtmhgt/srtmhgtdataset.cpp +++ b/frmts/srtmhgt/srtmhgtdataset.cpp @@ -344,11 +344,12 @@ int SRTMHGTDataset::Identify(GDALOpenInfo *poOpenInfo) if (VSIStatL(poOpenInfo->pszFilename, &fileStat) != 0) return FALSE; - if (fileStat.st_size != 3601 * 3601 && + if (fileStat.st_size != 1201 * 1201 * 2 && + fileStat.st_size != 1801 * 3601 * 2 && + fileStat.st_size != 3601 * 3601 && fileStat.st_size != 3601 * 3601 * 2 && fileStat.st_size != 3601 * 3601 * 4 && // .hgts - fileStat.st_size != 1801 * 3601 * 2 && - fileStat.st_size != 1201 * 1201 * 2) + fileStat.st_size != 7201 * 7201 * 2) return FALSE; return TRUE; @@ -443,6 +444,13 @@ GDALDataset *SRTMHGTDataset::Open(GDALOpenInfo *poOpenInfo) GDALDataType eDT = GDT_Int16; switch (fileStat.st_size) { + case 1201 * 1201 * 2: + numPixels_x = numPixels_y = 1201; + break; + case 1801 * 3601 * 2: + numPixels_x = 1801; + numPixels_y = 3601; + break; case 3601 * 3601: numPixels_x = numPixels_y = 3601; eDT = GDT_Byte; @@ -454,12 +462,8 @@ GDALDataset *SRTMHGTDataset::Open(GDALOpenInfo *poOpenInfo) numPixels_x = numPixels_y = 3601; eDT = GDT_Float32; break; - case 1801 * 3601 * 2: - numPixels_x = 1801; - numPixels_y = 3601; - break; - case 1201 * 1201 * 2: - numPixels_x = numPixels_y = 1201; + case 7201 * 7201 * 2: + numPixels_x = numPixels_y = 7201; break; default: numPixels_x = numPixels_y = 0; From 6dc6b0b9ce76a246361d94d5eabc098c6f581255 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 7 Aug 2024 19:03:19 +0200 Subject: [PATCH 273/301] COG: properly deal with mask bands w.r.t resampling when generating JPEG output, or when input has a mask band Fixes regression introduced in 3.5 per 383f727fc1f Fixes #10536 --- autotest/gcore/cog.py | 29 +++++++++++++++++++++++++++++ frmts/gtiff/cogdriver.cpp | 30 ++++++++++++++++++------------ frmts/gtiff/gt_overview.cpp | 14 +++++++++++--- frmts/gtiff/gt_overview.h | 3 ++- frmts/gtiff/gtiffdataset_write.cpp | 5 +++-- 5 files changed, 63 insertions(+), 18 deletions(-) diff --git a/autotest/gcore/cog.py b/autotest/gcore/cog.py index dc76fa994306..3e97af03937e 100755 --- a/autotest/gcore/cog.py +++ b/autotest/gcore/cog.py @@ -1922,3 +1922,32 @@ def test_cog_stats(tmp_vsimem, nbands, co, src_has_stats, expected_val): if expected_val and ds.RasterCount == 2: assert ds.GetRasterBand(2).GetMetadataItem("STATISTICS_MINIMUM") == "255" ds = None + + +############################################################################### + + +def test_cog_mask_band_overviews(tmp_vsimem): + + """Test bugfix for https://github.com/OSGeo/gdal/issues/10536""" + + filename = str(tmp_vsimem / "out.tif") + with gdal.config_option("COG_DELETE_TEMP_FILES", "NO"): + gdal.Translate( + filename, + "data/stefan_full_rgba.tif", + options="-co RESAMPLING=LANCZOS -co OVERVIEW_COUNT=3 -of COG -outsize 1024 0 -b 1 -b 2 -b 3 -mask 4", + ) + + ds = gdal.Open(filename) + assert [ds.GetRasterBand(i + 1).GetOverview(2).Checksum() for i in range(3)] == [ + 51556, + 39258, + 23928, + ] + + ds = gdal.Open(filename + ".msk.ovr.tmp") + assert ds.GetMetadataItem("INTERNAL_MASK_FLAGS_1") == "2" + assert ds.GetRasterBand(1).IsMaskBand() + assert ds.GetRasterBand(1).GetOverview(0).IsMaskBand() + assert ds.GetRasterBand(1).GetOverview(1).IsMaskBand() diff --git a/frmts/gtiff/cogdriver.cpp b/frmts/gtiff/cogdriver.cpp index 063742b421d5..f5c5045ac212 100644 --- a/frmts/gtiff/cogdriver.cpp +++ b/frmts/gtiff/cogdriver.cpp @@ -737,19 +737,25 @@ GDALCOGCreator::~GDALCOGCreator() // may reference the later m_poRGBMaskDS.reset(); - if (m_poReprojectedDS) + // Config option just for testing purposes + const bool bDeleteTempFiles = + CPLTestBool(CPLGetConfigOption("COG_DELETE_TEMP_FILES", "YES")); + if (bDeleteTempFiles) { - CPLString osProjectedDSName(m_poReprojectedDS->GetDescription()); - m_poReprojectedDS.reset(); - VSIUnlink(osProjectedDSName); - } - if (!m_osTmpOverviewFilename.empty()) - { - VSIUnlink(m_osTmpOverviewFilename); - } - if (!m_osTmpMskOverviewFilename.empty()) - { - VSIUnlink(m_osTmpMskOverviewFilename); + if (m_poReprojectedDS) + { + CPLString osProjectedDSName(m_poReprojectedDS->GetDescription()); + m_poReprojectedDS.reset(); + VSIUnlink(osProjectedDSName); + } + if (!m_osTmpOverviewFilename.empty()) + { + VSIUnlink(m_osTmpOverviewFilename); + } + if (!m_osTmpMskOverviewFilename.empty()) + { + VSIUnlink(m_osTmpMskOverviewFilename); + } } } diff --git a/frmts/gtiff/gt_overview.cpp b/frmts/gtiff/gt_overview.cpp index 38ca89e434c2..c125ab091d63 100644 --- a/frmts/gtiff/gt_overview.cpp +++ b/frmts/gtiff/gt_overview.cpp @@ -203,7 +203,8 @@ toff_t GTIFFWriteDirectory(TIFF *hTIFF, int nSubfileType, int nXSize, /************************************************************************/ void GTIFFBuildOverviewMetadata(const char *pszResampling, - GDALDataset *poBaseDS, CPLString &osMetadata) + GDALDataset *poBaseDS, bool bIsForMaskBand, + CPLString &osMetadata) { osMetadata = ""; @@ -216,7 +217,11 @@ void GTIFFBuildOverviewMetadata(const char *pszResampling, osMetadata += ""; } - if (poBaseDS->GetMetadataItem("INTERNAL_MASK_FLAGS_1")) + if (bIsForMaskBand) + { + osMetadata += "2"; + } + else if (poBaseDS->GetMetadataItem("INTERNAL_MASK_FLAGS_1")) { for (int iBand = 0; iBand < 200; iBand++) { @@ -771,7 +776,10 @@ CPLErr GTIFFBuildOverviewsEx(const char *pszFilename, int nBands, GDALDataset *poBaseDS = papoBandList[0]->GetDataset(); if (poBaseDS) { - GTIFFBuildOverviewMetadata(pszResampling, poBaseDS, osMetadata); + const bool bIsForMaskBand = + nBands == 1 && papoBandList[0]->IsMaskBand(); + GTIFFBuildOverviewMetadata(pszResampling, poBaseDS, bIsForMaskBand, + osMetadata); } if (poBaseDS != nullptr && poBaseDS->GetRasterCount() == nBands) diff --git a/frmts/gtiff/gt_overview.h b/frmts/gtiff/gt_overview.h index 9014662e67c7..5b56f4929ef2 100644 --- a/frmts/gtiff/gt_overview.h +++ b/frmts/gtiff/gt_overview.h @@ -53,7 +53,8 @@ toff_t GTIFFWriteDirectory(TIFF *hTIFF, int nSubfileType, int nXSize, bool bDeferStrileArrayWriting); void GTIFFBuildOverviewMetadata(const char *pszResampling, - GDALDataset *poBaseDS, CPLString &osMetadata); + GDALDataset *poBaseDS, bool bIsForMaskBand, + CPLString &osMetadata); CPLErr GTIFFBuildOverviewsEx(const char *pszFilename, int nBands, GDALRasterBand *const *papoBandList, diff --git a/frmts/gtiff/gtiffdataset_write.cpp b/frmts/gtiff/gtiffdataset_write.cpp index 1a4df6e9d3dd..a79d8ee8f2ac 100644 --- a/frmts/gtiff/gtiffdataset_write.cpp +++ b/frmts/gtiff/gtiffdataset_write.cpp @@ -2799,7 +2799,7 @@ CPLErr GTiffDataset::CreateOverviewsFromSrcOverviews(GDALDataset *poSrcDS, /* -------------------------------------------------------------------- */ CPLString osMetadata; - GTIFFBuildOverviewMetadata("NONE", this, osMetadata); + GTIFFBuildOverviewMetadata("NONE", this, false, osMetadata); int nCompression; uint16_t nPlanarConfig; @@ -3086,7 +3086,8 @@ CPLErr GTiffDataset::IBuildOverviews(const char *pszResampling, int nOverviews, /* -------------------------------------------------------------------- */ CPLString osMetadata; - GTIFFBuildOverviewMetadata(pszResampling, this, osMetadata); + const bool bIsForMaskBand = nBands == 1 && GetRasterBand(1)->IsMaskBand(); + GTIFFBuildOverviewMetadata(pszResampling, this, bIsForMaskBand, osMetadata); int nCompression; uint16_t nPlanarConfig; From 130917873f61e6ef066ce99de15142bf0cebf906 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 8 Aug 2024 16:24:34 +0200 Subject: [PATCH 274/301] Fix -Wnull-dereference warnings of gcc 14.2 --- alg/gdalsievefilter.cpp | 5 +---- frmts/jpegxl/jpegxl.cpp | 3 ++- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/alg/gdalsievefilter.cpp b/alg/gdalsievefilter.cpp index cf20d13d4d15..5d11f97105a7 100644 --- a/alg/gdalsievefilter.cpp +++ b/alg/gdalsievefilter.cpp @@ -369,7 +369,7 @@ CPLErr CPL_STDCALL GDALSieveFilter(GDALRasterBandH hSrcBand, std::vector anBigNeighbour; try { - anBigNeighbour.resize(anPolySizes.size()); + anBigNeighbour.resize(anPolySizes.size(), -1); } catch (const std::exception &) { @@ -378,9 +378,6 @@ CPLErr CPL_STDCALL GDALSieveFilter(GDALRasterBandH hSrcBand, return CE_Failure; } - for (int iPoly = 0; iPoly < static_cast(anPolySizes.size()); iPoly++) - anBigNeighbour[iPoly] = -1; - /* ==================================================================== */ /* Second pass ... identify the largest neighbour for each */ /* polygon. */ diff --git a/frmts/jpegxl/jpegxl.cpp b/frmts/jpegxl/jpegxl.cpp index 6d02817e0e00..c71f8390c678 100644 --- a/frmts/jpegxl/jpegxl.cpp +++ b/frmts/jpegxl/jpegxl.cpp @@ -1838,7 +1838,8 @@ GDALDataset *JPEGXLDataset::CreateCopy(const char *pszFilename, nJPEGXLContent); size_t nInsertPos = 0; - if (abyData[0] == 0xff && abyData[1] == 0x0a) + if (abyData.size() >= 2 && abyData[0] == 0xff && + abyData[1] == 0x0a) { // If we get a "naked" codestream, insert it into a // ISOBMFF-based container From 83c1d2d67b93a6f165dada4636e8c28f0738a58c Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 9 Aug 2024 14:11:53 +0200 Subject: [PATCH 275/301] OSM: avoid creating /vsimem/osm_importer directory Fixes #10566 --- ogr/ogrsf_frmts/osm/ogrosmdatasource.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ogr/ogrsf_frmts/osm/ogrosmdatasource.cpp b/ogr/ogrsf_frmts/osm/ogrosmdatasource.cpp index 53226246e321..baafd12b5248 100644 --- a/ogr/ogrsf_frmts/osm/ogrosmdatasource.cpp +++ b/ogr/ogrsf_frmts/osm/ogrosmdatasource.cpp @@ -2901,8 +2901,7 @@ int OGROSMDataSource::Open(const char *pszFilename, char **papszOpenOptionsIn) } m_bInMemoryNodesFile = true; - m_osNodesFilename.Printf("/vsimem/osm_importer/osm_temp_nodes_%p", - this); + m_osNodesFilename.Printf("/vsimem/osm_temp_nodes_%p", this); m_fpNodes = VSIFOpenL(m_osNodesFilename, "wb+"); if (m_fpNodes == nullptr) { @@ -2988,7 +2987,7 @@ bool OGROSMDataSource::CreateTempDB() } else { - m_osTmpDBName.Printf("/vsimem/osm_importer/osm_temp_%p.sqlite", this); + m_osTmpDBName.Printf("/vsimem/osm_temp_%p.sqlite", this); // On 32 bit, the virtual memory space is scarce, so we need to // reserve it right now. Will not hurt on 64 bit either. From 0d53ada1402f9d381b05502a3773e6ea3bcba9f5 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 15 Jul 2024 15:26:28 +0200 Subject: [PATCH 276/301] OGR SQL: do not make backslash a special character inside single-quoted strings, to improve compliance wih SQL92 The backslash followed by single-quote sequence was dealt as a way of escaping the single-quote character, but this also prevented to use backslash at the end of a single-quoted literal. So no longer make backslash a special character inside single-quoted strings Fixes #10416 --- autotest/ogr/ogr_sql_test.py | 4 ++-- ogr/swq.cpp | 11 +++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/autotest/ogr/ogr_sql_test.py b/autotest/ogr/ogr_sql_test.py index ef67fca17736..b79cd108c1c9 100755 --- a/autotest/ogr/ogr_sql_test.py +++ b/autotest/ogr/ogr_sql_test.py @@ -1219,11 +1219,11 @@ def test_ogr_sql_42(data_ds): def test_ogr_sql_43(data_ds): - sql = "SELECT '\"' as a, '\\'' as b, '''' as c FROM poly" + sql = "SELECT '\"' as a, '\\' as b, '''' as c FROM poly" with data_ds.ExecuteSQL(sql) as sql_lyr: feat = sql_lyr.GetNextFeature() assert feat["a"] == '"' - assert feat["b"] == "'" + assert feat["b"] == "\\" assert feat["c"] == "'" diff --git a/ogr/swq.cpp b/ogr/swq.cpp index 3379ef531db2..0e45e07a9504 100644 --- a/ogr/swq.cpp +++ b/ogr/swq.cpp @@ -118,11 +118,14 @@ int swqlex(YYSTYPE *ppNode, swq_parse_context *context) while (*pszInput != '\0') { - if (chQuote == '"' && *pszInput == '\\' && pszInput[1] == '"') - pszInput++; - else if (chQuote == '\'' && *pszInput == '\\' && - pszInput[1] == '\'') + // Not totally sure we need to preserve this way of escaping for + // strings between double-quotes + if (chQuote == '"' && *pszInput == '\\') + { pszInput++; + if (*pszInput == '\0') + break; + } else if (chQuote == '\'' && *pszInput == '\'' && pszInput[1] == '\'') pszInput++; From ffb5375be7c0f6f5f287b079ec9211d01beba215 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 18 Jul 2024 18:59:55 +0200 Subject: [PATCH 277/301] NITF 12-bit JPEG writer: fix potential crash if raster width > block width Fixes #10441 --- autotest/gdrivers/nitf.py | 26 ++++++++++++++++++++++++++ frmts/nitf/nitfwritejpeg.cpp | 32 ++++++++++++++++++++++++-------- 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/autotest/gdrivers/nitf.py b/autotest/gdrivers/nitf.py index a24070cbdc97..5c98b3e73fcd 100755 --- a/autotest/gdrivers/nitf.py +++ b/autotest/gdrivers/nitf.py @@ -1744,6 +1744,32 @@ def test_nitf_42(not_jpeg_9b): ds = None +############################################################################### +# Check creating a 12-bit JPEG compressed NITF + + +def test_nitf_write_jpeg12(not_jpeg_9b, tmp_path): + # Check if JPEG driver supports 12bit JPEG reading/writing + jpg_drv = gdal.GetDriverByName("JPEG") + md = jpg_drv.GetMetadata() + if md[gdal.DMD_CREATIONDATATYPES].find("UInt16") == -1: + pytest.skip("12bit jpeg not available") + + ds = gdal.GetDriverByName("MEM").Create("", 10000, 1, 3, gdal.GDT_UInt16) + ds.GetRasterBand(1).Fill(4096) + ds.GetRasterBand(2).Fill(0) + ds.GetRasterBand(3).Fill(4096) + out_filename = str(tmp_path / "out.ntf") + with gdal.quiet_errors(): + gdal.GetDriverByName("NITF").CreateCopy(out_filename, ds, options=["IC=C3"]) + + ds = gdal.Open(out_filename) + assert ds.GetRasterBand(1).DataType == gdal.GDT_UInt16 + assert [ + ds.GetRasterBand(i + 1).GetStatistics(0, 1)[2] for i in range(3) + ] == pytest.approx([4095, 0, 4095], abs=1) + + ############################################################################### # Test CreateCopy() in IC=C8 with various JPEG2000 drivers diff --git a/frmts/nitf/nitfwritejpeg.cpp b/frmts/nitf/nitfwritejpeg.cpp index ab4053a4edb0..1b418ad32f1b 100644 --- a/frmts/nitf/nitfwritejpeg.cpp +++ b/frmts/nitf/nitfwritejpeg.cpp @@ -218,7 +218,7 @@ int NITFWriteJPEGBlock(GDALDataset *poSrcDS, VSILFILE *fp, int nBlockXOff, const int nXSize = poSrcDS->GetRasterXSize(); const int nYSize = poSrcDS->GetRasterYSize(); - const double nTotalPixels = static_cast(nXSize * nYSize); + const double nTotalPixels = static_cast(nXSize) * nYSize; int nBlockXSizeToRead = nBlockXSize; if (nBlockXSize * nBlockXOff + nBlockXSize > nXSize) @@ -248,22 +248,38 @@ int NITFWriteJPEGBlock(GDALDataset *poSrcDS, VSILFILE *fp, int nBlockXOff, static_cast(nBands) * nWorkDTSize * nBlockXSize, nWorkDTSize, nullptr); -#if !defined(JPEG_LIB_MK1_OR_12BIT) /* Repeat the last pixel till the end of the line */ /* to minimize discontinuity */ if (nBlockXSizeToRead < nBlockXSize) { for (int iBand = 0; iBand < nBands; iBand++) { - GByte bVal = - pabyScanline[nBands * (nBlockXSizeToRead - 1) + iBand]; - for (int iX = nBlockXSizeToRead; iX < nBlockXSize; iX++) +#if defined(JPEG_LIB_MK1_OR_12BIT) + if (eWorkDT == GDT_UInt16) { - pabyScanline[nBands * iX + iBand] = bVal; + GUInt16 *panScanline = + reinterpret_cast(pabyScanline); + const GUInt16 nVal = + panScanline[nBands * (nBlockXSizeToRead - 1) + + iBand]; + for (int iX = nBlockXSizeToRead; iX < nBlockXSize; iX++) + { + panScanline[nBands * iX + iBand] = nVal; + } + } + else +#endif + { + GByte bVal = + pabyScanline[nBands * (nBlockXSizeToRead - 1) + + iBand]; + for (int iX = nBlockXSizeToRead; iX < nBlockXSize; iX++) + { + pabyScanline[nBands * iX + iBand] = bVal; + } } } } -#endif } #if defined(JPEG_LIB_MK1_OR_12BIT) @@ -272,7 +288,7 @@ int NITFWriteJPEGBlock(GDALDataset *poSrcDS, VSILFILE *fp, int nBlockXOff, { GUInt16 *panScanline = reinterpret_cast(pabyScanline); - for (int iPixel = 0; iPixel < nXSize * nBands; iPixel++) + for (int iPixel = 0; iPixel < nBlockXSize * nBands; iPixel++) { if (panScanline[iPixel] > 4095) { From 1e9508527a4d68cce4b15bee7771d48b1c543b41 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 19 Jul 2024 12:59:47 +0200 Subject: [PATCH 278/301] GMLAS: avoid crash on a OSSFuzz generated xsd Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=70511 --- .../ogr/data/gmlas/test_ossfuzz_70511.xsd | 15 ++++++ autotest/ogr/ogr_gmlas.py | 13 +++++ ogr/ogrsf_frmts/gmlas/ogr_gmlas.h | 2 +- .../gmlas/ogrgmlasschemaanalyzer.cpp | 50 +++++++++++++------ 4 files changed, 65 insertions(+), 15 deletions(-) create mode 100644 autotest/ogr/data/gmlas/test_ossfuzz_70511.xsd diff --git a/autotest/ogr/data/gmlas/test_ossfuzz_70511.xsd b/autotest/ogr/data/gmlas/test_ossfuzz_70511.xsd new file mode 100644 index 000000000000..045587271fa4 --- /dev/null +++ b/autotest/ogr/data/gmlas/test_ossfuzz_70511.xsd @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/autotest/ogr/ogr_gmlas.py b/autotest/ogr/ogr_gmlas.py index 6a90ccd3b281..3f3de62f26c8 100755 --- a/autotest/ogr/ogr_gmlas.py +++ b/autotest/ogr/ogr_gmlas.py @@ -3468,3 +3468,16 @@ def test_ogr_gmlas_bugfix_sf_2371(): ds = gdal.OpenEx("GMLAS:data/gmlas/citygml_empty_lod1.gml") lyr = ds.GetLayerByName("address1") assert lyr.GetFeatureCount() == 0 + + +############################################################################### +# Test we don't crash on a OSSFuzz generated xsd + + +@gdaltest.enable_exceptions() +def test_ogr_gmlas_ossfuzz_70511(): + + with gdal.quiet_errors(), pytest.raises( + Exception, match="Cannot get type definition for attribute y" + ): + gdal.OpenEx("GMLAS:", open_options=["XSD=data/gmlas/test_ossfuzz_70511.xsd"]) diff --git a/ogr/ogrsf_frmts/gmlas/ogr_gmlas.h b/ogr/ogrsf_frmts/gmlas/ogr_gmlas.h index 0ac98a66741f..bbd8ff20a040 100644 --- a/ogr/ogrsf_frmts/gmlas/ogr_gmlas.h +++ b/ogr/ogrsf_frmts/gmlas/ogr_gmlas.h @@ -1161,7 +1161,7 @@ class GMLASSchemaAnalyzer const XSModelGroup *poModelGroup2); XSModelGroupDefinition * GetGroupDefinition(const XSModelGroup *poModelGroup); - void SetFieldFromAttribute(GMLASField &oField, XSAttributeUse *poAttr, + bool SetFieldFromAttribute(GMLASField &oField, XSAttributeUse *poAttr, const CPLString &osXPathPrefix, const CPLString &osNamePrefix = CPLString()); void GetConcreteImplementationTypes( diff --git a/ogr/ogrsf_frmts/gmlas/ogrgmlasschemaanalyzer.cpp b/ogr/ogrsf_frmts/gmlas/ogrgmlasschemaanalyzer.cpp index ad5f3b6d4864..01f80e812693 100644 --- a/ogr/ogrsf_frmts/gmlas/ogrgmlasschemaanalyzer.cpp +++ b/ogr/ogrsf_frmts/gmlas/ogrgmlasschemaanalyzer.cpp @@ -1572,24 +1572,31 @@ static bool IsAnyType(XSComplexTypeDefinition *poType) /* SetFieldFromAttribute() */ /************************************************************************/ -void GMLASSchemaAnalyzer::SetFieldFromAttribute(GMLASField &oField, +bool GMLASSchemaAnalyzer::SetFieldFromAttribute(GMLASField &oField, XSAttributeUse *poAttr, const CPLString &osXPathPrefix, const CPLString &osNamePrefix) { - XSAttributeDeclaration *poAttrDecl = poAttr->getAttrDeclaration(); - XSSimpleTypeDefinition *poAttrType = poAttrDecl->getTypeDefinition(); - - SetFieldTypeAndWidthFromDefinition(poAttrType, oField); - - CPLString osNS(transcode(poAttrDecl->getNamespace())); - CPLString osName(transcode(poAttrDecl->getName())); + const XSAttributeDeclaration *poAttrDecl = poAttr->getAttrDeclaration(); + const CPLString osNS(transcode(poAttrDecl->getNamespace())); + const CPLString osName(transcode(poAttrDecl->getName())); if (osNamePrefix.empty()) oField.SetName(osName); else oField.SetName(osNamePrefix + "_" + osName); + XSSimpleTypeDefinition *poAttrType = poAttrDecl->getTypeDefinition(); + if (!poAttrType) + { + CPLError(CE_Failure, CPLE_AppDefined, + "Cannot get type definition for attribute %s", + oField.GetName().c_str()); + return false; + } + + SetFieldTypeAndWidthFromDefinition(poAttrType, oField); + oField.SetXPath(osXPathPrefix + "/@" + MakeXPath(osNS, osName)); if (poAttr->getRequired()) { @@ -1626,6 +1633,8 @@ void GMLASSchemaAnalyzer::SetFieldFromAttribute(GMLASField &oField, } oField.SetDocumentation(GetAnnotationDoc(poAttrDecl->getAnnotation())); + + return true; } /************************************************************************/ @@ -2276,8 +2285,11 @@ bool GMLASSchemaAnalyzer::FindElementsWithMustBeToLevel( XSAttributeUse *poAttr = poAttrList->elementAt(j); GMLASField oField; - SetFieldFromAttribute(oField, poAttr, - osFullXPath); + if (!SetFieldFromAttribute(oField, poAttr, + osFullXPath)) + { + return false; + } if (!IsIgnoredXPath(oField.GetXPath()) && oField.GetFixedValue().empty()) { @@ -2343,7 +2355,11 @@ bool GMLASSchemaAnalyzer::FindElementsWithMustBeToLevel( { XSAttributeUse *poAttr = poAttrList->elementAt(j); GMLASField oField; - SetFieldFromAttribute(oField, poAttr, osFullXPath); + if (!SetFieldFromAttribute(oField, poAttr, + osFullXPath)) + { + return false; + } if (!IsIgnoredXPath(oField.GetXPath()) && oField.GetFixedValue().empty()) { @@ -2606,7 +2622,10 @@ bool GMLASSchemaAnalyzer::ExploreModelGroup( { GMLASField oField; XSAttributeUse *poAttr = poMainAttrList->elementAt(j); - SetFieldFromAttribute(oField, poAttr, oClass.GetXPath()); + if (!SetFieldFromAttribute(oField, poAttr, oClass.GetXPath())) + { + return false; + } if (IsIgnoredXPath(oField.GetXPath())) { @@ -2989,8 +3008,11 @@ bool GMLASSchemaAnalyzer::ExploreModelGroup( CPLString osNamePrefix(bMoveNestedClassToTop ? osPrefixedEltName : CPLString()); - SetFieldFromAttribute(oField, poAttr, osElementXPath, - osNamePrefix); + if (!SetFieldFromAttribute(oField, poAttr, osElementXPath, + osNamePrefix)) + { + return false; + } if (nMinOccurs == 0 || bIsChoice) { oField.SetMinOccurs(0); From b96d8a25fbd7f90a2966feca889aad8de5cf7379 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sat, 20 Jul 2024 02:32:14 +0200 Subject: [PATCH 279/301] GTFS: fix error when applying an attribute filter on a field whose advertized data type is not string Fixes https://github.com/duckdb/duckdb_spatial/issues/343 --- autotest/ogr/ogr_gtfs.py | 5 +++++ ogr/ogrsf_frmts/gtfs/ogrgtfsdriver.cpp | 16 +++------------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/autotest/ogr/ogr_gtfs.py b/autotest/ogr/ogr_gtfs.py index aaf29eee35aa..51c5c31f0e2a 100755 --- a/autotest/ogr/ogr_gtfs.py +++ b/autotest/ogr/ogr_gtfs.py @@ -99,6 +99,11 @@ def test_ogr_gtfs_content(): f = lyr.GetNextFeature() assert f is None + lyr = ds.GetLayerByName("routes") + assert lyr + lyr.SetAttributeFilter("route_type = 3") + assert lyr.GetFeatureCount() == 30 + lyr = ds.GetLayerByName("stops") assert lyr assert lyr.GetGeomType() == ogr.wkbPoint diff --git a/ogr/ogrsf_frmts/gtfs/ogrgtfsdriver.cpp b/ogr/ogrsf_frmts/gtfs/ogrgtfsdriver.cpp index 899d35cc112a..92ff54721c2a 100644 --- a/ogr/ogrsf_frmts/gtfs/ogrgtfsdriver.cpp +++ b/ogr/ogrsf_frmts/gtfs/ogrgtfsdriver.cpp @@ -96,7 +96,6 @@ class OGRGTFSLayer final : public OGRLayer OGRFeature *GetNextFeature() override; int TestCapability(const char *) override; GIntBig GetFeatureCount(int bForce) override; - OGRErr SetAttributeFilter(const char *) override; OGRFeatureDefn *GetLayerDefn() override { @@ -349,30 +348,21 @@ OGRFeature *OGRGTFSLayer::GetNextFeature() } } } - if (m_poFilterGeom == nullptr || - FilterGeometry(poFeature->GetGeometryRef())) + if ((!m_poFilterGeom || FilterGeometry(poFeature->GetGeometryRef())) && + (!m_poAttrQuery || m_poAttrQuery->Evaluate(poFeature.get()))) { return poFeature.release(); } } } -/***********************************************************************/ -/* SetAttributeFilter() */ -/***********************************************************************/ - -OGRErr OGRGTFSLayer::SetAttributeFilter(const char *pszFilter) -{ - return m_poUnderlyingLayer->SetAttributeFilter(pszFilter); -} - /***********************************************************************/ /* GetFeatureCount() */ /***********************************************************************/ GIntBig OGRGTFSLayer::GetFeatureCount(int bForce) { - if (m_poFilterGeom != nullptr) + if (m_poFilterGeom || m_poAttrQuery) return OGRLayer::GetFeatureCount(bForce); return m_poUnderlyingLayer->GetFeatureCount(bForce); } From 1df99b7315ae7fba33ad53131d41d377716c0d3c Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 22 Jul 2024 14:24:03 +0200 Subject: [PATCH 280/301] GTI: start looking for OVERVIEW__xxxx metadata items at index 0 --- autotest/gdrivers/gti.py | 7 ++++--- doc/source/drivers/raster/gti.rst | 12 ++++++++---- frmts/vrt/gdaltileindexdataset.cpp | 7 ++++++- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/autotest/gdrivers/gti.py b/autotest/gdrivers/gti.py index f968d6254269..bed9df1aa9a3 100755 --- a/autotest/gdrivers/gti.py +++ b/autotest/gdrivers/gti.py @@ -2063,7 +2063,7 @@ def test_gti_ovr_factor(tmp_vsimem): src_ds = gdal.Open(os.path.join(os.getcwd(), "data", "byte.tif")) index_ds, lyr = create_basic_tileindex(index_filename, src_ds) lyr.SetMetadataItem("MASK_BAND", "YES") - lyr.SetMetadataItem("OVERVIEW_1_FACTOR", "2") + lyr.SetMetadataItem("OVERVIEW_0_FACTOR", "2") del index_ds vrt_ds = gdal.Open(index_filename) @@ -2100,6 +2100,7 @@ def test_gti_ovr_factor_invalid(tmp_vsimem): src_ds = gdal.Open(os.path.join(os.getcwd(), "data", "byte.tif")) index_ds, lyr = create_basic_tileindex(index_filename, src_ds) + # Also test GDAL 3.9.0 and 3.9.1 where the idx started at 1 lyr.SetMetadataItem("OVERVIEW_1_FACTOR", "0.5") del index_ds @@ -2114,7 +2115,7 @@ def test_gti_ovr_ds_name(tmp_vsimem): src_ds = gdal.Open(os.path.join(os.getcwd(), "data", "byte.tif")) index_ds, lyr = create_basic_tileindex(index_filename, src_ds) - lyr.SetMetadataItem("OVERVIEW_1_DATASET", "/i/do/not/exist") + lyr.SetMetadataItem("OVERVIEW_0_DATASET", "/i/do/not/exist") del index_ds vrt_ds = gdal.Open(index_filename) @@ -2128,7 +2129,7 @@ def test_gti_ovr_lyr_name(tmp_vsimem): src_ds = gdal.Open(os.path.join(os.getcwd(), "data", "byte.tif")) index_ds, lyr = create_basic_tileindex(index_filename, src_ds) - lyr.SetMetadataItem("OVERVIEW_1_LAYER", "non_existing") + lyr.SetMetadataItem("OVERVIEW_0_LAYER", "non_existing") del index_ds vrt_ds = gdal.Open(index_filename) diff --git a/doc/source/drivers/raster/gti.rst b/doc/source/drivers/raster/gti.rst index 6987e97360fa..b64c7d78c25b 100644 --- a/doc/source/drivers/raster/gti.rst +++ b/doc/source/drivers/raster/gti.rst @@ -188,25 +188,29 @@ PostGIS, ...), the following layer metadata items may be set: Unit of the band. -* ``OVERVIEW__DATASET=`` where idx is an integer index starting at 0. +* ``OVERVIEW__DATASET=`` where idx is an integer index (starting at 0 + since GDAL 3.9.2, starting at 1 in GDAL 3.9.0 and 3.9.1) Name of the dataset to use as the first overview level. This may be a raster dataset (for example a GeoTIFF file, or another GTI dataset). This may also be a vector dataset with a GTI compatible layer, potentially specified with ``OVERVIEW__LAYER``. -* ``OVERVIEW__OPEN_OPTIONS=[,key2=value2]...`` where idx is an integer index starting at 0. +* ``OVERVIEW__OPEN_OPTIONS=[,key2=value2]...`` where idx is an integer index (starting at 0 + since GDAL 3.9.2, starting at 1 in GDAL 3.9.0 and 3.9.1) Open options(s) to use to open ``OVERVIEW__DATASET``. -* ``OVERVIEW__LAYER=`` where idx is an integer index starting at 0. +* ``OVERVIEW__LAYER=`` where idx is an integer index (starting at 0 + since GDAL 3.9.2, starting at 1 in GDAL 3.9.0 and 3.9.1) Name of the vector layer to use as the first overview level, assuming ``OVERVIEW__DATASET`` points to a vector dataset. ``OVERVIEW__DATASET`` may also not be specified, in which case the vector dataset of the full resolution virtual mosaic is used. -* ``OVERVIEW__FACTOR=`` where idx is an integer index starting at 0. +* ``OVERVIEW__FACTOR=`` where idx is an integer index (starting at 0 + since GDAL 3.9.2, starting at 1 in GDAL 3.9.0 and 3.9.1) Sub-sampling factor, strictly greater than 1. If ``OVERVIEW__DATASET`` and ``OVERVIEW__LAYER`` are not specified, then all tiles of the full diff --git a/frmts/vrt/gdaltileindexdataset.cpp b/frmts/vrt/gdaltileindexdataset.cpp index 8b22de4b8546..9d90f2c57880 100644 --- a/frmts/vrt/gdaltileindexdataset.cpp +++ b/frmts/vrt/gdaltileindexdataset.cpp @@ -1738,7 +1738,7 @@ bool GDALTileIndexDataset::Open(GDALOpenInfo *poOpenInfo) } else { - for (int iOvr = 1;; ++iOvr) + for (int iOvr = 0;; ++iOvr) { const char *pszOvrDSName = GetOption(CPLSPrintf("OVERVIEW_%d_DATASET", iOvr)); @@ -1749,7 +1749,12 @@ bool GDALTileIndexDataset::Open(GDALOpenInfo *poOpenInfo) const char *pszOvrFactor = GetOption(CPLSPrintf("OVERVIEW_%d_FACTOR", iOvr)); if (!pszOvrDSName && !pszOvrLayer && !pszOvrFactor) + { + // Before GDAL 3.9.2, we started the iteration at 1. + if (iOvr == 0) + continue; break; + } m_aoOverviewDescriptor.emplace_back( std::string(pszOvrDSName ? pszOvrDSName : ""), pszOpenOptions ? CPLStringList(CSLTokenizeString2( From d839084f67fd27c06bf3d7e78383d65a5b26c862 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 22 Jul 2024 14:54:58 +0200 Subject: [PATCH 281/301] gti.py: more realistic test cases for overviews --- autotest/gdrivers/gti.py | 41 +++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/autotest/gdrivers/gti.py b/autotest/gdrivers/gti.py index bed9df1aa9a3..eeff601b5150 100755 --- a/autotest/gdrivers/gti.py +++ b/autotest/gdrivers/gti.py @@ -48,14 +48,19 @@ def create_basic_tileindex( sort_field_name=None, sort_field_type=None, sort_values=None, + lyr_name="index", + add_to_existing=False, ): if isinstance(src_ds, list): src_ds_list = src_ds else: src_ds_list = [src_ds] - index_ds = ogr.GetDriverByName("GPKG").CreateDataSource(index_filename) + if add_to_existing: + index_ds = ogr.Open(index_filename, update=1) + else: + index_ds = ogr.GetDriverByName("GPKG").CreateDataSource(index_filename) lyr = index_ds.CreateLayer( - "index", srs=(src_ds_list[0].GetSpatialRef() if src_ds_list else None) + lyr_name, srs=(src_ds_list[0].GetSpatialRef() if src_ds_list else None) ) lyr.CreateField(ogr.FieldDefn(location_field_name)) if sort_values: @@ -2306,7 +2311,10 @@ def test_gti_xml(tmp_vsimem): index_filename = str(tmp_vsimem / "index.gti.gpkg") - src_ds = gdal.Open(os.path.join(os.getcwd(), "data", "byte.tif")) + tile_filename = str(tmp_vsimem / "byte.tif") + gdal.Translate(tile_filename, "data/byte.tif") + + src_ds = gdal.Open(tile_filename) index_ds, _ = create_basic_tileindex(index_filename, src_ds) del index_ds @@ -2431,30 +2439,46 @@ def test_gti_xml(tmp_vsimem): assert vrt_ds.GetRasterBand(1).GetOverview(0).XSize == 10 del vrt_ds + tile_ovr_filename = str(tmp_vsimem / "byte_ovr.tif") + gdal.Translate(tile_ovr_filename, "data/byte.tif", width=10) + + index2_filename = str(tmp_vsimem / "index2.gti.gpkg") + create_basic_tileindex(index2_filename, gdal.Open(tile_ovr_filename)) + xml_content = f""" {index_filename} + index - {index_filename} + {index2_filename} """ vrt_ds = gdal.Open(xml_content) assert vrt_ds.GetRasterBand(1).GetOverviewCount() == 1 - assert vrt_ds.GetRasterBand(1).GetOverview(0).XSize == 20 + assert vrt_ds.GetRasterBand(1).GetOverview(0).XSize == 10 del vrt_ds + create_basic_tileindex( + index_filename, + gdal.Open(tile_ovr_filename), + add_to_existing=True, + lyr_name="index_ovr", + ) + xml_content = f""" {index_filename} + index - index + index_ovr """ vrt_ds = gdal.Open(xml_content) assert vrt_ds.GetRasterBand(1).GetOverviewCount() == 1 - assert vrt_ds.GetRasterBand(1).GetOverview(0).XSize == 20 + assert vrt_ds.GetRasterBand(1).GetOverview(0).XSize == 10 del vrt_ds xml_content = f""" {index_filename} + index index @@ -2517,6 +2541,7 @@ def test_gti_xml(tmp_vsimem): xml_content = f""" {index_filename} + index """ @@ -2528,6 +2553,7 @@ def test_gti_xml(tmp_vsimem): xml_content = f""" {index_filename} + index i_do_not_exist @@ -2538,6 +2564,7 @@ def test_gti_xml(tmp_vsimem): xml_content = f""" {index_filename} + index i_do_not_exist From 00ff09452b987a8afa317e2c8dce45479faa26d4 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 22 Jul 2024 15:09:25 +0200 Subject: [PATCH 282/301] GTI: automatically add overviews of overviews, unless the OVERVIEW_LEVEL=NONE open option is specified --- autotest/gdrivers/gti.py | 51 ++++++++++++++++++++++++++++++ doc/source/drivers/raster/gti.rst | 20 ++++++++++-- frmts/vrt/gdaltileindexdataset.cpp | 45 +++++++++++++++++++++++++- 3 files changed, 112 insertions(+), 4 deletions(-) diff --git a/autotest/gdrivers/gti.py b/autotest/gdrivers/gti.py index eeff601b5150..e65a8e6a0ec5 100755 --- a/autotest/gdrivers/gti.py +++ b/autotest/gdrivers/gti.py @@ -2142,6 +2142,57 @@ def test_gti_ovr_lyr_name(tmp_vsimem): vrt_ds.GetRasterBand(1).GetOverviewCount() +def test_gti_ovr_of_ovr(tmp_vsimem): + + index_filename = str(tmp_vsimem / "index.gti.gpkg") + + ovr_filename = str(tmp_vsimem / "byte_ovr.tif") + ovr_ds = gdal.Translate(ovr_filename, "data/byte.tif", width=10) + ovr_ds.BuildOverviews("NEAR", [2]) + ovr_ds = None + + src_ds = gdal.Open(os.path.join(os.getcwd(), "data", "byte.tif")) + index_ds, lyr = create_basic_tileindex(index_filename, src_ds) + lyr.SetMetadataItem("OVERVIEW_0_DATASET", ovr_filename) + del index_ds + + vrt_ds = gdal.Open(index_filename) + ovr_ds = gdal.Open(ovr_filename) + assert vrt_ds.GetRasterBand(1).GetOverviewCount() == 2 + assert ( + vrt_ds.GetRasterBand(1).GetOverview(0).ReadRaster() + == ovr_ds.GetRasterBand(1).ReadRaster() + ) + assert ( + vrt_ds.GetRasterBand(1).GetOverview(1).ReadRaster() + == ovr_ds.GetRasterBand(1).GetOverview(0).ReadRaster() + ) + + +def test_gti_ovr_of_ovr_OVERVIEW_LEVEL_NONE(tmp_vsimem): + + index_filename = str(tmp_vsimem / "index.gti.gpkg") + + ovr_filename = str(tmp_vsimem / "byte_ovr.tif") + ovr_ds = gdal.Translate(ovr_filename, "data/byte.tif", width=10) + ovr_ds.BuildOverviews("NEAR", [2]) + ovr_ds = None + + src_ds = gdal.Open(os.path.join(os.getcwd(), "data", "byte.tif")) + index_ds, lyr = create_basic_tileindex(index_filename, src_ds) + lyr.SetMetadataItem("OVERVIEW_0_DATASET", ovr_filename) + lyr.SetMetadataItem("OVERVIEW_0_OPEN_OPTIONS", "OVERVIEW_LEVEL=NONE") + del index_ds + + vrt_ds = gdal.Open(index_filename) + ovr_ds = gdal.Open(ovr_filename) + assert vrt_ds.GetRasterBand(1).GetOverviewCount() == 1 + assert ( + vrt_ds.GetRasterBand(1).GetOverview(0).ReadRaster() + == ovr_ds.GetRasterBand(1).ReadRaster() + ) + + def test_gti_external_ovr(tmp_vsimem): index_filename = str(tmp_vsimem / "index.gti.gpkg") diff --git a/doc/source/drivers/raster/gti.rst b/doc/source/drivers/raster/gti.rst index b64c7d78c25b..fb1f8ad8d7f7 100644 --- a/doc/source/drivers/raster/gti.rst +++ b/doc/source/drivers/raster/gti.rst @@ -196,6 +196,10 @@ PostGIS, ...), the following layer metadata items may be set: This may also be a vector dataset with a GTI compatible layer, potentially specified with ``OVERVIEW__LAYER``. + Starting with GDAL 3.9.2, overviews of ``OVERVIEW__DATASET=`` + are also automatically added, unless ``OVERVIEW__OPEN_OPTIONS=OVERVIEW_LEVEL=NONE`` + is specified. + * ``OVERVIEW__OPEN_OPTIONS=[,key2=value2]...`` where idx is an integer index (starting at 0 since GDAL 3.9.2, starting at 1 in GDAL 3.9.0 and 3.9.1) @@ -204,6 +208,9 @@ PostGIS, ...), the following layer metadata items may be set: * ``OVERVIEW__LAYER=`` where idx is an integer index (starting at 0 since GDAL 3.9.2, starting at 1 in GDAL 3.9.0 and 3.9.1) + Only taken into account if ``OVERVIEW__DATASET=`` is not specified, + or points to a GTI dataset. + Name of the vector layer to use as the first overview level, assuming ``OVERVIEW__DATASET`` points to a vector dataset. ``OVERVIEW__DATASET`` may also not be specified, in which case the vector dataset of the full @@ -212,8 +219,12 @@ PostGIS, ...), the following layer metadata items may be set: * ``OVERVIEW__FACTOR=`` where idx is an integer index (starting at 0 since GDAL 3.9.2, starting at 1 in GDAL 3.9.0 and 3.9.1) - Sub-sampling factor, strictly greater than 1. If ``OVERVIEW__DATASET`` - and ``OVERVIEW__LAYER`` are not specified, then all tiles of the full + Sub-sampling factor, strictly greater than 1. + + Only taken into account if ``OVERVIEW__DATASET=`` is not specified, + or points to a GTI dataset. + + If ``OVERVIEW__DATASET`` and ``OVERVIEW__LAYER`` are not specified, then all tiles of the full resolution virtual mosaic are used, with the specified sub-sampling factor (it is recommended, but not required, that those tiles do have a corresponding overview). ``OVERVIEW__DATASET`` and/or ``OVERVIEW__LAYER`` may also be @@ -223,6 +234,8 @@ All overviews *must* have exactly the same extent as the full resolution virtual mosaic. The GTI driver does not check that, and if that condition is not met, subsampled pixel request will lead to incorrect result. +They also must be listed by decreasing size with increasing overview index. + In addition to those layer metadata items, the dataset-level metadata item ``TILE_INDEX_LAYER`` may be set to indicate, for dataset with multiple layers, which one should be used as the tile index layer. @@ -311,7 +324,8 @@ mentioned in the previous section. some.tif diff --git a/frmts/vrt/gdaltileindexdataset.cpp b/frmts/vrt/gdaltileindexdataset.cpp index 9d90f2c57880..b1c7f651184a 100644 --- a/frmts/vrt/gdaltileindexdataset.cpp +++ b/frmts/vrt/gdaltileindexdataset.cpp @@ -2180,11 +2180,54 @@ void GDALTileIndexDataset::LoadOverviews() !osDSName.empty() ? osDSName.c_str() : GetDescription(), GDAL_OF_RASTER | GDAL_OF_VERBOSE_ERROR, nullptr, aosNewOpenOptions.List(), nullptr)); - if (poOvrDS) + + const auto IsSmaller = + [](const GDALDataset *a, const GDALDataset *b) + { + return (a->GetRasterXSize() < b->GetRasterXSize() && + a->GetRasterYSize() <= b->GetRasterYSize()) || + (a->GetRasterYSize() < b->GetRasterYSize() && + a->GetRasterXSize() <= b->GetRasterXSize()); + }; + + if (poOvrDS && + ((m_apoOverviews.empty() && IsSmaller(poOvrDS.get(), this)) || + ((!m_apoOverviews.empty() && + IsSmaller(poOvrDS.get(), m_apoOverviews.back().get()))))) { if (poOvrDS->GetRasterCount() == GetRasterCount()) { m_apoOverviews.emplace_back(std::move(poOvrDS)); + // Add the overviews of the overview, unless the OVERVIEW_LEVEL + // option option is specified + if (aosOpenOptions.FetchNameValue("OVERVIEW_LEVEL") == + nullptr) + { + const int nOverviewCount = m_apoOverviews.back() + ->GetRasterBand(1) + ->GetOverviewCount(); + for (int i = 0; i < nOverviewCount; ++i) + { + aosNewOpenOptions.SetNameValue("OVERVIEW_LEVEL", + CPLSPrintf("%d", i)); + std::unique_ptr poOvrOfOvrDS( + GDALDataset::Open( + !osDSName.empty() ? osDSName.c_str() + : GetDescription(), + GDAL_OF_RASTER | GDAL_OF_VERBOSE_ERROR, + nullptr, aosNewOpenOptions.List(), + nullptr)); + if (poOvrOfOvrDS && + poOvrOfOvrDS->GetRasterCount() == + GetRasterCount() && + IsSmaller(poOvrOfOvrDS.get(), + m_apoOverviews.back().get())) + { + m_apoOverviews.emplace_back( + std::move(poOvrOfOvrDS)); + } + } + } } else { From 5b61064559b0edabace4e10898f4ed009658a16a Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sat, 20 Jul 2024 02:20:49 +0200 Subject: [PATCH 283/301] XLSX: support documents whose XML elements have a prefix Fixes https://github.com/duckdb/duckdb_spatial/issues/362 --- autotest/ogr/data/xlsx/with_xml_prefix.xlsx | Bin 0 -> 2457 bytes autotest/ogr/ogr_xlsx.py | 15 +++++++ ogr/ogrsf_frmts/xlsx/ogrxlsxdatasource.cpp | 45 ++++++++++++++------ 3 files changed, 46 insertions(+), 14 deletions(-) create mode 100644 autotest/ogr/data/xlsx/with_xml_prefix.xlsx diff --git a/autotest/ogr/data/xlsx/with_xml_prefix.xlsx b/autotest/ogr/data/xlsx/with_xml_prefix.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..4d23ef8ddf26261784663b877b684c626a460d78 GIT binary patch literal 2457 zcmWIWW@Zs#U|`^2C|~h9;;~b|)q5cCE+YejFoO(3v~zx5Norn6d`M+MYH_SyMQ%=L z2qy#cB%KLqi+{~ZE3M#WU}Sm0%)kI9)=sqbJ7OTvx;|;A>&FyL0VmIG5gCn5+!5z2 zHeRd$WZ`Wg&FcP$t75MP>mtWRQa3-}`yF-?nx@SwrzLF9Tzh^~0!Y(WOikx=j-IfkGnEqww z$>%(FCEr&(O){>IIQ^A1`pq0!y7^$MRDFKWi?}^>S>zxUg4h-wtkShw2{vx z;I!YL_nV^snQ>e>FSU;$02p>$z|dk~*u?uK0?dFCY{0OKFG|fR)&~dI0$@;8GtNd2 zE|7ji*mtOXjNb{=uK^5uZn%CukSXvm|A%Qv?|I+6Lk0q@4^~HPR!^R^ic5n}+AK#< z+~Ax==cEdq+kd{~#D4ME%M{1-YSHQCm7hJ|fB(Jw=H2O$F`7pv&TT4Hbev#(r*~a= zfoECh;dQxvCag-k5EpgVNyN|WH=x36pj@46%sxP;EcB$(u{d43) z&VkjMe)04EDR0`kc%kj=(@uJS8TXqy%qe-Hsd?ack2&AvnUz|bxE@{5vs7Dkp#D${+F9gyrL`qM=$%MoH+F$lNj5^ zDaFEn8$QhJTOj>I>v#Q>mAR$8>Z{b7&1#m|_GulNawq$^Ldwk3SKDHQr_B~e1RW<@ z(D5OBU!0MeS^`agmk5O-JJ6hntiUDTfuZ=72^f+X=75bega_wY>?WQKI-Pe|L152s zZGrDBx7$~3N?K(0x54W#)1wCxM>mM&p-d?Y&Ej=0)wj(~-}U@v-a54n;@3SpkEBb4pEZ3e(B5Tuy(EZxd#j_AeD=Yt zM!8$Y#m!S6iCiu@f6AslDN4h+(ye2?By&EK>w$?I4Fq35U%)NAQ_Vo1RW%|wwJP-q z`>oXqUQ>1-TzXDQ|4j8E*Ka3;6n{IuEIq-0L0qw`eD00d)eQNIS*|Rxi~HZ$|LMHl zBEDrMu}{C3PQAFyo40QdD@W+D`}Hpqe+Axff4TbMq2kgQ#<=&>)8i2lVucnVoREM- zDh%|QW~UheFp)ubN zJ=bX|3CE{3=QSpVK6-RA>nl@$HzSiAGonmHt&b#t0m8rl3=xJcjUX1*+KClXJE4UH z#9&;7HN;>B1_6e@jy6E^VX*}?3siJtH4EWL)Pft?ku`9$pixEGahPQxvg4|NSrc3` z0u2HcXn0(PSuP^GY&*mtTiA*k%_1M>iMUMDaB literal 0 HcmV?d00001 diff --git a/autotest/ogr/ogr_xlsx.py b/autotest/ogr/ogr_xlsx.py index 197563a1c964..632df94bcfab 100755 --- a/autotest/ogr/ogr_xlsx.py +++ b/autotest/ogr/ogr_xlsx.py @@ -650,3 +650,18 @@ def test_ogr_xlsx_write_sheet_without_row(): assert ds.GetLayer(2).GetFeatureCount() == 1 ds = None gdal.Unlink(tmpfilename) + + +############################################################################### +# Test reading a XLSX file with XML element prefixes + + +def test_ogr_xlsx_read_xml_prefix(): + + ds = ogr.Open("data/xlsx/with_xml_prefix.xlsx") + lyr = ds.GetLayer(0) + assert lyr.GetLayerDefn().GetFieldDefn(0).GetName() == "Col1" + assert lyr.GetLayerDefn().GetFieldDefn(1).GetName() == "Col2" + f = lyr.GetNextFeature() + assert f["Col1"] == "foo" + assert f["Col2"] == "bar" diff --git a/ogr/ogrsf_frmts/xlsx/ogrxlsxdatasource.cpp b/ogr/ogrsf_frmts/xlsx/ogrxlsxdatasource.cpp index 265dc6996d62..f7a95d91213b 100644 --- a/ogr/ogrsf_frmts/xlsx/ogrxlsxdatasource.cpp +++ b/ogr/ogrsf_frmts/xlsx/ogrxlsxdatasource.cpp @@ -418,6 +418,18 @@ int OGRXLSXDataSource::Create(const char *pszFilename, return TRUE; } +/************************************************************************/ +/* GetUnprefixed() */ +/************************************************************************/ + +static const char *GetUnprefixed(const char *pszStr) +{ + const char *pszColumn = strchr(pszStr, ':'); + if (pszColumn) + return pszColumn + 1; + return pszStr; +} + /************************************************************************/ /* startElementCbk() */ /************************************************************************/ @@ -434,6 +446,8 @@ void OGRXLSXDataSource::startElementCbk(const char *pszNameIn, if (bStopParsing) return; + pszNameIn = GetUnprefixed(pszNameIn); + nWithoutEventCounter = 0; switch (stateStack[nStackDepth].eVal) { @@ -474,6 +488,8 @@ void OGRXLSXDataSource::endElementCbk(const char *pszNameIn) if (bStopParsing) return; + pszNameIn = GetUnprefixed(pszNameIn); + nWithoutEventCounter = 0; nDepth--; @@ -1346,6 +1362,8 @@ void OGRXLSXDataSource::startElementSSCbk(const char *pszNameIn, if (bStopParsing) return; + pszNameIn = GetUnprefixed(pszNameIn); + nWithoutEventCounter = 0; switch (stateStack[nStackDepth].eVal) { @@ -1381,11 +1399,14 @@ static void XMLCALL endElementSSCbk(void *pUserData, const char *pszNameIn) ((OGRXLSXDataSource *)pUserData)->endElementSSCbk(pszNameIn); } -void OGRXLSXDataSource::endElementSSCbk(CPL_UNUSED const char *pszNameIn) +void OGRXLSXDataSource::endElementSSCbk(const char * /*pszNameIn*/) { if (bStopParsing) return; + // If we were to use pszNameIn, then we need: + // pszNameIn = GetUnprefixed(pszNameIn); + nWithoutEventCounter = 0; nDepth--; @@ -1529,6 +1550,8 @@ void OGRXLSXDataSource::startElementWBRelsCbk(const char *pszNameIn, if (bStopParsing) return; + pszNameIn = GetUnprefixed(pszNameIn); + nWithoutEventCounter = 0; if (strcmp(pszNameIn, "Relationship") == 0) { @@ -1593,18 +1616,6 @@ void OGRXLSXDataSource::AnalyseWorkbookRels(VSILFILE *fpWorkbookRels) VSIFCloseL(fpWorkbookRels); } -/************************************************************************/ -/* GetUnprefixed() */ -/************************************************************************/ - -static const char *GetUnprefixed(const char *pszStr) -{ - const char *pszColumn = strchr(pszStr, ':'); - if (pszColumn) - return pszColumn + 1; - return pszStr; -} - /************************************************************************/ /* startElementWBCbk() */ /************************************************************************/ @@ -1621,8 +1632,10 @@ void OGRXLSXDataSource::startElementWBCbk(const char *pszNameIn, if (bStopParsing) return; + pszNameIn = GetUnprefixed(pszNameIn); + nWithoutEventCounter = 0; - if (strcmp(GetUnprefixed(pszNameIn), "sheet") == 0) + if (strcmp(pszNameIn, "sheet") == 0) { const char *pszSheetName = GetAttributeValue(ppszAttr, "name", nullptr); const char *pszId = GetAttributeValue(ppszAttr, "r:id", nullptr); @@ -1725,6 +1738,8 @@ void OGRXLSXDataSource::startElementStylesCbk(const char *pszNameIn, if (bStopParsing) return; + pszNameIn = GetUnprefixed(pszNameIn); + nWithoutEventCounter = 0; if (strcmp(pszNameIn, "numFmt") == 0) { @@ -1810,6 +1825,8 @@ void OGRXLSXDataSource::endElementStylesCbk(const char *pszNameIn) if (bStopParsing) return; + pszNameIn = GetUnprefixed(pszNameIn); + nWithoutEventCounter = 0; if (strcmp(pszNameIn, "cellXfs") == 0) { From ce032c1324c3de09deb452dbf451cc06bec2cbe2 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 22 Jul 2024 17:00:15 +0200 Subject: [PATCH 284/301] GeoJSON: make sure geometry is reprojected even when it is invalid after coordinate rounding (3.9.0 regression) Fixes https://github.com/qgis/QGIS/issues/58169 --- autotest/ogr/ogr_geojson.py | 1 + .../geojson/ogrgeojsonwritelayer.cpp | 49 ++++++++++++++----- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/autotest/ogr/ogr_geojson.py b/autotest/ogr/ogr_geojson.py index 96a5c106a55f..7f241895d627 100755 --- a/autotest/ogr/ogr_geojson.py +++ b/autotest/ogr/ogr_geojson.py @@ -4487,6 +4487,7 @@ def test_ogr_geojson_write_geometry_validity_fixing_rfc7946(tmp_vsimem): lyr = ds.GetLayer(0) f = lyr.GetNextFeature() assert f.GetGeometryRef().IsValid() + assert "((6.3889058 51.3181847," in f.GetGeometryRef().ExportToWkt() ############################################################################### diff --git a/ogr/ogrsf_frmts/geojson/ogrgeojsonwritelayer.cpp b/ogr/ogrsf_frmts/geojson/ogrgeojsonwritelayer.cpp index 1ddb6922b0b6..d77827fc2ee5 100644 --- a/ogr/ogrsf_frmts/geojson/ogrgeojsonwritelayer.cpp +++ b/ogr/ogrsf_frmts/geojson/ogrgeojsonwritelayer.cpp @@ -256,19 +256,45 @@ OGRErr OGRGeoJSONWriteLayer::ICreateFeature(OGRFeature *poFeature) { const double dfXYResolution = std::pow(10.0, double(-oWriteOptions_.nXYCoordPrecision)); - auto poNewGeom = poFeature == poFeatureToWrite - ? poOrigGeom->clone() - : poFeatureToWrite->GetGeometryRef(); - bool bDeleteNewGeom = (poFeature == poFeatureToWrite); + auto poNewGeom = std::unique_ptr( + poFeatureToWrite->GetGeometryRef()->clone()); OGRGeomCoordinatePrecision sPrecision; sPrecision.dfXYResolution = dfXYResolution; poNewGeom->roundCoordinates(sPrecision); - if (!IsValid(poNewGeom)) + if (!IsValid(poNewGeom.get())) { - CPLDebug("GeoJSON", "Running SetPrecision() to correct an invalid " - "geometry due to reduced precision output"); - auto poValidGeom = - poOrigGeom->SetPrecision(dfXYResolution, /* nFlags = */ 0); + std::unique_ptr poValidGeom; + if (poFeature == poFeatureToWrite) + { + CPLDebug("GeoJSON", + "Running SetPrecision() to correct an invalid " + "geometry due to reduced precision output"); + poValidGeom.reset( + poOrigGeom->SetPrecision(dfXYResolution, /* nFlags = */ 0)); + } + else + { + CPLDebug("GeoJSON", "Running MakeValid() to correct an invalid " + "geometry due to reduced precision output"); + poValidGeom.reset(poNewGeom->MakeValid()); + if (poValidGeom) + { + auto poValidGeomRoundCoordinates = + std::unique_ptr(poValidGeom->clone()); + poValidGeomRoundCoordinates->roundCoordinates(sPrecision); + if (!IsValid(poValidGeomRoundCoordinates.get())) + { + CPLDebug("GeoJSON", + "Running SetPrecision() to correct an invalid " + "geometry due to reduced precision output"); + auto poValidGeom2 = std::unique_ptr( + poValidGeom->SetPrecision(dfXYResolution, + /* nFlags = */ 0)); + if (poValidGeom2) + poValidGeom = std::move(poValidGeom2); + } + } + } if (poValidGeom) { if (poFeature == poFeatureToWrite) @@ -277,12 +303,9 @@ OGRErr OGRGeoJSONWriteLayer::ICreateFeature(OGRFeature *poFeature) poFeatureToWrite->SetFrom(poFeature); poFeatureToWrite->SetFID(poFeature->GetFID()); } - - poFeatureToWrite->SetGeometryDirectly(poValidGeom); + poFeatureToWrite->SetGeometryDirectly(poValidGeom.release()); } } - if (bDeleteNewGeom) - delete poNewGeom; } if (oWriteOptions_.bGenerateID && poFeatureToWrite->GetFID() == OGRNullFID) From ed5029ab434f38168bdbce12333c7672fc18b5ec Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 22 Jul 2024 17:39:53 +0200 Subject: [PATCH 285/301] GDALCopyWords(): Fix double->uint64 when input value > UINT64_MAX that was wrongly converted to 0 --- autotest/cpp/testcopywords.cpp | 145 +++++++++++++++++++++++++++++++++ gcore/gdal_priv_templates.hpp | 80 +++++++++++++----- 2 files changed, 203 insertions(+), 22 deletions(-) diff --git a/autotest/cpp/testcopywords.cpp b/autotest/cpp/testcopywords.cpp index 7e00bf98946d..d145098b0d56 100644 --- a/autotest/cpp/testcopywords.cpp +++ b/autotest/cpp/testcopywords.cpp @@ -32,6 +32,7 @@ #include #include +#include #include "gtest_include.h" @@ -594,6 +595,150 @@ TEST_F(TestCopyWords, GDT_Float32and64) FROM_R(intype, CST_5000000000, GDT_CFloat64, CST_5000000000); FROM_R(intype, -CST_5000000000, GDT_CFloat64, -CST_5000000000); } + + // Float32 to Int64 + { + float in_value = std::numeric_limits::quiet_NaN(); + int64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float32, 0, &out_value, GDT_Int64, 0, 1); + EXPECT_EQ(out_value, 0); + } + + { + float in_value = -std::numeric_limits::infinity(); + int64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float32, 0, &out_value, GDT_Int64, 0, 1); + EXPECT_EQ(out_value, INT64_MIN); + } + + { + float in_value = -std::numeric_limits::max(); + int64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float32, 0, &out_value, GDT_Int64, 0, 1); + EXPECT_EQ(out_value, INT64_MIN); + } + + { + float in_value = std::numeric_limits::max(); + int64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float32, 0, &out_value, GDT_Int64, 0, 1); + EXPECT_EQ(out_value, INT64_MAX); + } + + { + float in_value = std::numeric_limits::infinity(); + int64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float32, 0, &out_value, GDT_Int64, 0, 1); + EXPECT_EQ(out_value, INT64_MAX); + } + + // Float64 to Int64 + { + double in_value = std::numeric_limits::quiet_NaN(); + int64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float64, 0, &out_value, GDT_Int64, 0, 1); + EXPECT_EQ(out_value, 0); + } + + { + double in_value = -std::numeric_limits::infinity(); + int64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float64, 0, &out_value, GDT_Int64, 0, 1); + EXPECT_EQ(out_value, INT64_MIN); + } + + { + double in_value = -std::numeric_limits::max(); + int64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float64, 0, &out_value, GDT_Int64, 0, 1); + EXPECT_EQ(out_value, INT64_MIN); + } + + { + double in_value = std::numeric_limits::max(); + int64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float64, 0, &out_value, GDT_Int64, 0, 1); + EXPECT_EQ(out_value, INT64_MAX); + } + + { + double in_value = std::numeric_limits::infinity(); + int64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float64, 0, &out_value, GDT_Int64, 0, 1); + EXPECT_EQ(out_value, INT64_MAX); + } + + // Float32 to UInt64 + { + float in_value = std::numeric_limits::quiet_NaN(); + uint64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float32, 0, &out_value, GDT_UInt64, 0, 1); + EXPECT_EQ(out_value, 0); + } + + { + float in_value = -std::numeric_limits::infinity(); + uint64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float32, 0, &out_value, GDT_UInt64, 0, 1); + EXPECT_EQ(out_value, 0); + } + + { + float in_value = -std::numeric_limits::max(); + uint64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float32, 0, &out_value, GDT_UInt64, 0, 1); + EXPECT_EQ(out_value, 0); + } + + { + float in_value = std::numeric_limits::max(); + uint64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float32, 0, &out_value, GDT_UInt64, 0, 1); + EXPECT_EQ(out_value, UINT64_MAX); + } + + { + float in_value = std::numeric_limits::infinity(); + uint64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float32, 0, &out_value, GDT_UInt64, 0, 1); + EXPECT_EQ(out_value, UINT64_MAX); + } + + // Float64 to UInt64 + { + double in_value = -std::numeric_limits::quiet_NaN(); + uint64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float64, 0, &out_value, GDT_UInt64, 0, 1); + EXPECT_EQ(out_value, 0); + } + + { + double in_value = -std::numeric_limits::infinity(); + uint64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float64, 0, &out_value, GDT_UInt64, 0, 1); + EXPECT_EQ(out_value, 0); + } + + { + double in_value = -std::numeric_limits::max(); + uint64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float64, 0, &out_value, GDT_UInt64, 0, 1); + EXPECT_EQ(out_value, 0); + } + + { + double in_value = std::numeric_limits::max(); + uint64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float64, 0, &out_value, GDT_UInt64, 0, 1); + EXPECT_EQ(out_value, UINT64_MAX); + } + + { + double in_value = std::numeric_limits::infinity(); + uint64_t out_value = 0; + GDALCopyWords(&in_value, GDT_Float64, 0, &out_value, GDT_UInt64, 0, 1); + EXPECT_EQ(out_value, UINT64_MAX); + } } TEST_F(TestCopyWords, GDT_CInt16) diff --git a/gcore/gdal_priv_templates.hpp b/gcore/gdal_priv_templates.hpp index dcb2ceb9c8c0..dd41417855a3 100644 --- a/gcore/gdal_priv_templates.hpp +++ b/gcore/gdal_priv_templates.hpp @@ -371,16 +371,45 @@ template <> struct sGDALCopyWord { static inline void f(const double dfValueIn, std::int64_t &nValueOut) { - if (CPLIsNan(dfValueIn)) + if (std::isnan(dfValueIn)) { nValueOut = 0; - return; } - double dfMaxVal, dfMinVal; - GDALGetDataLimits(dfMaxVal, dfMinVal); - double dfValue = dfValueIn >= 0.0 ? dfValueIn + 0.5 : dfValueIn - 0.5; - nValueOut = static_cast( - GDALClampValue(dfValue, dfMaxVal, dfMinVal)); + else if (dfValueIn >= + static_cast(std::numeric_limits::max())) + { + nValueOut = std::numeric_limits::max(); + } + else if (dfValueIn <= + static_cast(std::numeric_limits::min())) + { + nValueOut = std::numeric_limits::min(); + } + else + { + nValueOut = static_cast( + dfValueIn > 0.0f ? dfValueIn + 0.5f : dfValueIn - 0.5f); + } + } +}; + +template <> struct sGDALCopyWord +{ + static inline void f(const double dfValueIn, std::uint64_t &nValueOut) + { + if (!(dfValueIn > 0)) + { + nValueOut = 0; + } + else if (dfValueIn > + static_cast(std::numeric_limits::max())) + { + nValueOut = std::numeric_limits::max(); + } + else + { + nValueOut = static_cast(dfValueIn + 0.5); + } } }; @@ -424,7 +453,12 @@ template <> struct sGDALCopyWord { static inline void f(const float fValueIn, int &nValueOut) { - if (fValueIn >= static_cast(std::numeric_limits::max())) + if (std::isnan(fValueIn)) + { + nValueOut = 0; + } + else if (fValueIn >= + static_cast(std::numeric_limits::max())) { nValueOut = std::numeric_limits::max(); } @@ -447,15 +481,14 @@ template <> struct sGDALCopyWord { static inline void f(const float fValueIn, unsigned int &nValueOut) { - if (fValueIn >= - static_cast(std::numeric_limits::max())) + if (!(fValueIn > 0)) { - nValueOut = std::numeric_limits::max(); + nValueOut = 0; } - else if (fValueIn <= - static_cast(std::numeric_limits::min())) + else if (fValueIn >= + static_cast(std::numeric_limits::max())) { - nValueOut = std::numeric_limits::min(); + nValueOut = std::numeric_limits::max(); } else { @@ -470,8 +503,12 @@ template <> struct sGDALCopyWord { static inline void f(const float fValueIn, std::int64_t &nValueOut) { - if (fValueIn >= - static_cast(std::numeric_limits::max())) + if (std::isnan(fValueIn)) + { + nValueOut = 0; + } + else if (fValueIn >= + static_cast(std::numeric_limits::max())) { nValueOut = std::numeric_limits::max(); } @@ -494,15 +531,14 @@ template <> struct sGDALCopyWord { static inline void f(const float fValueIn, std::uint64_t &nValueOut) { - if (fValueIn >= - static_cast(std::numeric_limits::max())) + if (!(fValueIn > 0)) { - nValueOut = std::numeric_limits::max(); + nValueOut = 0; } - else if (fValueIn <= - static_cast(std::numeric_limits::min())) + else if (fValueIn >= + static_cast(std::numeric_limits::max())) { - nValueOut = std::numeric_limits::min(); + nValueOut = std::numeric_limits::max(); } else { From 9fc1df3994c4f5c42810d03a5d691bb36b1f2003 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 24 Jul 2024 13:37:56 +0200 Subject: [PATCH 286/301] =?UTF-8?q?PG:=20fix=20support=20for=20geometry/ge?= =?UTF-8?q?ography=20OID=20in=20range=C2=A0[2147483648,=204294967295]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #10486 --- ogr/ogrsf_frmts/pg/ogrpgdatasource.cpp | 4 ++-- ogr/ogrsf_frmts/pg/ogrpglayer.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ogr/ogrsf_frmts/pg/ogrpgdatasource.cpp b/ogr/ogrsf_frmts/pg/ogrpgdatasource.cpp index 36ca26450eec..30938dfeba1f 100644 --- a/ogr/ogrsf_frmts/pg/ogrpgdatasource.cpp +++ b/ogr/ogrsf_frmts/pg/ogrpgdatasource.cpp @@ -869,12 +869,12 @@ int OGRPGDataSource::Open(const char *pszNewName, int bUpdate, int bTestOpen, if (EQUAL(pszTypname, "geometry")) { bHavePostGIS = TRUE; - nGeometryOID = atoi(pszOid); + nGeometryOID = static_cast(strtoul(pszOid, nullptr, 10)); } else if (CPLTestBool(CPLGetConfigOption("PG_USE_GEOGRAPHY", "YES"))) { bHaveGeography = TRUE; - nGeographyOID = atoi(pszOid); + nGeographyOID = static_cast(strtoul(pszOid, nullptr, 10)); } } } diff --git a/ogr/ogrsf_frmts/pg/ogrpglayer.cpp b/ogr/ogrsf_frmts/pg/ogrpglayer.cpp index a196317b7ce6..8e186860d7d5 100644 --- a/ogr/ogrsf_frmts/pg/ogrpglayer.cpp +++ b/ogr/ogrsf_frmts/pg/ogrpglayer.cpp @@ -564,7 +564,7 @@ OGRFeature *OGRPGLayer::RecordToFeature(PGresult *hResult, for (int iField = 0; iField < PQnfields(hResult); iField++) { #if defined(BINARY_CURSOR_ENABLED) - int nTypeOID = PQftype(hResult, iField); + const Oid nTypeOID = PQftype(hResult, iField); #endif const char *pszFieldName = PQfname(hResult, iField); From 59af799bdf09e7942902532e14b23fb1f4c16a60 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 23 Jul 2024 23:08:47 +0200 Subject: [PATCH 287/301] LIBKML: fix reading/writing style URL in KMZ files Fixes #10478 --- autotest/ogr/ogr_libkml.py | 48 +++++++++++++++++++ .../libkml/ogrlibkmldatasource.cpp | 4 +- .../libkml/ogrlibkmlfeaturestyle.cpp | 12 ++++- 3 files changed, 62 insertions(+), 2 deletions(-) diff --git a/autotest/ogr/ogr_libkml.py b/autotest/ogr/ogr_libkml.py index 91affbfcaba5..4b94dfa31494 100755 --- a/autotest/ogr/ogr_libkml.py +++ b/autotest/ogr/ogr_libkml.py @@ -1471,6 +1471,54 @@ def test_ogr_libkml_read_write_style(tmp_vsimem): assert f.GetStyleString() == "@unknown_style" +############################################################################### +# Test style in KMZ file + + +def test_ogr_libkml_write_style_kmz(tmp_vsimem): + + filename = tmp_vsimem / "ogr_libkml_read_write_style_write.kmz" + # Automatic StyleMap creation testing + ds = ogr.GetDriverByName("LIBKML").CreateDataSource(filename) + style_table = ogr.StyleTable() + style_table.AddStyle( + "style1_normal", 'SYMBOL(id:"http://style1_normal",c:#67452301)' + ) + style_table.AddStyle( + "style1_highlight", 'SYMBOL(id:"http://style1_highlight",c:#10325476)' + ) + ds.SetStyleTable(style_table) + lyr = ds.CreateLayer("test") + feat = ogr.Feature(lyr.GetLayerDefn()) + feat.SetStyleString("@style1_normal") + lyr.CreateFeature(feat) + feat = ogr.Feature(lyr.GetLayerDefn()) + feat.SetStyleString("@unknown_style") + lyr.CreateFeature(feat) + ds = None + + f = gdal.VSIFOpenL(f"/vsizip/{filename}/layers/test.kml", "rb") + assert f + data = gdal.VSIFReadL(1, 10000, f) + gdal.VSIFCloseL(f) + assert b"../style/style.kml#style1_normal" in data + + ds = ogr.Open(filename) + lyr = ds.GetLayer(0) + f = lyr.GetNextFeature() + assert f.GetStyleString() == "@style1_normal" + f = lyr.GetNextFeature() + assert f.GetStyleString() == "@unknown_style" + + with gdaltest.config_option("LIBKML_RESOLVE_STYLE", "YES"): + ds = ogr.Open(filename) + lyr = ds.GetLayer(0) + f = lyr.GetNextFeature() + assert f.GetStyleString() == 'SYMBOL(id:"http://style1_normal",c:#67452301)' + f = lyr.GetNextFeature() + assert f.GetStyleString() == "@unknown_style" + + ############################################################################### # Test writing Update diff --git a/ogr/ogrsf_frmts/libkml/ogrlibkmldatasource.cpp b/ogr/ogrsf_frmts/libkml/ogrlibkmldatasource.cpp index 5cf1c16b394e..b5ba35e54105 100644 --- a/ogr/ogrsf_frmts/libkml/ogrlibkmldatasource.cpp +++ b/ogr/ogrsf_frmts/libkml/ogrlibkmldatasource.cpp @@ -1864,7 +1864,9 @@ int OGRLIBKMLDataSource::CreateKmz(const char * /* pszFilename */, } } - m_osStylePath = "style/style.kml"; + // Layers are written in a layers/ subdirectory, hence ../style + // to access style/style.kml + m_osStylePath = "../style/style.kml"; m_isKmz = true; bUpdated = true; diff --git a/ogr/ogrsf_frmts/libkml/ogrlibkmlfeaturestyle.cpp b/ogr/ogrsf_frmts/libkml/ogrlibkmlfeaturestyle.cpp index bdd75588d64e..401179755b99 100644 --- a/ogr/ogrsf_frmts/libkml/ogrlibkmlfeaturestyle.cpp +++ b/ogr/ogrsf_frmts/libkml/ogrlibkmlfeaturestyle.cpp @@ -171,7 +171,17 @@ void kml2featurestyle(FeaturePtr poKmlFeature, OGRLIBKMLDataSource *poOgrDS, for (int i = 0; i < nStyleURLIterations; ++i) { /***** is the name in the layer style table *****/ - const std::string osUrl(poKmlFeature->get_styleurl()); + std::string osUrl(poKmlFeature->get_styleurl()); + + // Starting with GDAL 3.9.2, style URLs in KMZ files we generate start + // with ../style/style.kml# to reflect the file hierarchy + // Strip the leading ../ for correct resolution. + constexpr const char *DOTDOT_URL = "../style/style.kml#"; + if (osUrl.size() > strlen(DOTDOT_URL) && + memcmp(osUrl.data(), DOTDOT_URL, strlen(DOTDOT_URL)) == 0) + { + osUrl = osUrl.substr(strlen("../")); + } OGRStyleTable *poOgrSTBLLayer = nullptr; const char *pszTest = nullptr; From a7661ea5735d096dc79481cc9633be0901613678 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 24 Jul 2024 22:41:16 +0200 Subject: [PATCH 288/301] CPLFormFilename()/CPLGetDirname()/CPLGetPath(): make it work with 'vsicurl/http://example.com?foo' type of filename, to fix Zarr driver Fixes https://github.com/OSGeo/gdal/issues/9749#issuecomment-2230935288 --- autotest/cpp/test_cpl.cpp | 19 ++++++++++ gcore/gdalmultidim.cpp | 11 ++++++ port/cpl_path.cpp | 76 +++++++++++++++++++++++++++++++++------ 3 files changed, 95 insertions(+), 11 deletions(-) diff --git a/autotest/cpp/test_cpl.cpp b/autotest/cpp/test_cpl.cpp index 67be3132cb68..9701f8922cb2 100644 --- a/autotest/cpp/test_cpl.cpp +++ b/autotest/cpp/test_cpl.cpp @@ -1062,6 +1062,25 @@ TEST_F(test_cpl, CPLFormFilename) EXPECT_TRUE( EQUAL(CPLFormFilename("\\\\$\\c:", "..", nullptr), "\\\\$\\c:/..") || EQUAL(CPLFormFilename("\\\\$\\c:", "..", nullptr), "\\\\$\\c:\\..")); + EXPECT_STREQ( + CPLFormFilename("/vsicurl/http://example.com?foo", "bar", nullptr), + "/vsicurl/http://example.com/bar?foo"); +} + +TEST_F(test_cpl, CPLGetPath) +{ + EXPECT_STREQ(CPLGetPath("/foo/bar/"), "/foo/bar"); + EXPECT_STREQ(CPLGetPath("/foo/bar"), "/foo"); + EXPECT_STREQ(CPLGetPath("/vsicurl/http://example.com/foo/bar?suffix"), + "/vsicurl/http://example.com/foo?suffix"); +} + +TEST_F(test_cpl, CPLGetDirname) +{ + EXPECT_STREQ(CPLGetDirname("/foo/bar/"), "/foo/bar"); + EXPECT_STREQ(CPLGetDirname("/foo/bar"), "/foo"); + EXPECT_STREQ(CPLGetDirname("/vsicurl/http://example.com/foo/bar?suffix"), + "/vsicurl/http://example.com/foo?suffix"); } TEST_F(test_cpl, VSIGetDiskFreeSpace) diff --git a/gcore/gdalmultidim.cpp b/gcore/gdalmultidim.cpp index 3f9aa4275608..1d9760c92dbb 100644 --- a/gcore/gdalmultidim.cpp +++ b/gcore/gdalmultidim.cpp @@ -4097,6 +4097,17 @@ GDALMDArray::GetCacheRootGroup(bool bCanCreate, } osCacheFilenameOut = osFilename + ".gmac"; + if (STARTS_WITH(osFilename.c_str(), "/vsicurl/http")) + { + const auto nPosQuestionMark = osFilename.find('?'); + if (nPosQuestionMark != std::string::npos) + { + osCacheFilenameOut = + osFilename.substr(0, nPosQuestionMark) + .append(".gmac") + .append(osFilename.substr(nPosQuestionMark)); + } + } const char *pszProxy = PamGetProxy(osCacheFilenameOut.c_str()); if (pszProxy != nullptr) osCacheFilenameOut = pszProxy; diff --git a/port/cpl_path.cpp b/port/cpl_path.cpp index f78c77453bef..06088ea2cfb6 100644 --- a/port/cpl_path.cpp +++ b/port/cpl_path.cpp @@ -101,10 +101,10 @@ static char *CPLGetStaticResult() /* CPLFindFilenameStart() */ /************************************************************************/ -static int CPLFindFilenameStart(const char *pszFilename) +static int CPLFindFilenameStart(const char *pszFilename, size_t nStart = 0) { - size_t iFileStart = strlen(pszFilename); + size_t iFileStart = nStart ? nStart : strlen(pszFilename); for (; iFileStart > 0 && pszFilename[iFileStart - 1] != '/' && pszFilename[iFileStart - 1] != '\\'; @@ -144,7 +144,15 @@ static int CPLFindFilenameStart(const char *pszFilename) const char *CPLGetPath(const char *pszFilename) { - const int iFileStart = CPLFindFilenameStart(pszFilename); + size_t nSuffixPos = 0; + if (STARTS_WITH(pszFilename, "/vsicurl/http")) + { + const char *pszQuestionMark = strchr(pszFilename, '?'); + if (pszQuestionMark) + nSuffixPos = static_cast(pszQuestionMark - pszFilename); + } + + const int iFileStart = CPLFindFilenameStart(pszFilename, nSuffixPos); char *pszStaticResult = CPLGetStaticResult(); if (pszStaticResult == nullptr || iFileStart >= CPL_PATH_BUF_SIZE) @@ -166,6 +174,13 @@ const char *CPLGetPath(const char *pszFilename) pszStaticResult[iFileStart - 1] == '\\')) pszStaticResult[iFileStart - 1] = '\0'; + if (nSuffixPos) + { + if (CPLStrlcat(pszStaticResult, pszFilename + nSuffixPos, + CPL_PATH_BUF_SIZE) >= CPL_PATH_BUF_SIZE) + return CPLStaticBufferTooSmall(pszStaticResult); + } + return pszStaticResult; } @@ -198,7 +213,15 @@ const char *CPLGetPath(const char *pszFilename) const char *CPLGetDirname(const char *pszFilename) { - const int iFileStart = CPLFindFilenameStart(pszFilename); + size_t nSuffixPos = 0; + if (STARTS_WITH(pszFilename, "/vsicurl/http")) + { + const char *pszQuestionMark = strchr(pszFilename, '?'); + if (pszQuestionMark) + nSuffixPos = static_cast(pszQuestionMark - pszFilename); + } + + const int iFileStart = CPLFindFilenameStart(pszFilename, nSuffixPos); char *pszStaticResult = CPLGetStaticResult(); if (pszStaticResult == nullptr || iFileStart >= CPL_PATH_BUF_SIZE) @@ -220,6 +243,13 @@ const char *CPLGetDirname(const char *pszFilename) pszStaticResult[iFileStart - 1] == '\\')) pszStaticResult[iFileStart - 1] = '\0'; + if (nSuffixPos) + { + if (CPLStrlcat(pszStaticResult, pszFilename + nSuffixPos, + CPL_PATH_BUF_SIZE) >= CPL_PATH_BUF_SIZE) + return CPLStaticBufferTooSmall(pszStaticResult); + } + return pszStaticResult; } @@ -535,6 +565,19 @@ const char *CPLFormFilename(const char *pszPath, const char *pszBasename, if (pszPath == nullptr) pszPath = ""; size_t nLenPath = strlen(pszPath); + + size_t nSuffixPos = 0; + if (STARTS_WITH_CI(pszPath, "/vsicurl/http")) + { + const char *pszQuestionMark = strchr(pszPath, '?'); + if (pszQuestionMark) + { + nSuffixPos = static_cast(pszQuestionMark - pszPath); + nLenPath = nSuffixPos; + } + pszAddedPathSep = "/"; + } + if (!CPLIsFilenameRelative(pszPath) && strcmp(pszBasename, "..") == 0) { // /a/b + .. --> /a @@ -560,13 +603,15 @@ const char *CPLFormFilename(const char *pszPath, const char *pszBasename, else { nLenPath = nLenPathOri; - pszAddedPathSep = VSIGetDirectorySeparator(pszPath); + if (pszAddedPathSep[0] == 0) + pszAddedPathSep = VSIGetDirectorySeparator(pszPath); } } else if (nLenPath > 0 && pszPath[nLenPath - 1] != '/' && pszPath[nLenPath - 1] != '\\') { - pszAddedPathSep = VSIGetDirectorySeparator(pszPath); + if (pszAddedPathSep[0] == 0) + pszAddedPathSep = VSIGetDirectorySeparator(pszPath); } if (pszExtension == nullptr) @@ -574,11 +619,13 @@ const char *CPLFormFilename(const char *pszPath, const char *pszBasename, else if (pszExtension[0] != '.' && strlen(pszExtension) > 0) pszAddedExtSep = "."; - if (CPLStrlcpy( - pszStaticResult, pszPath, - std::min(nLenPath + 1, static_cast(CPL_PATH_BUF_SIZE))) >= - static_cast(CPL_PATH_BUF_SIZE) || - CPLStrlcat(pszStaticResult, pszAddedPathSep, CPL_PATH_BUF_SIZE) >= + if (nLenPath >= static_cast(CPL_PATH_BUF_SIZE)) + return CPLStaticBufferTooSmall(pszStaticResult); + + memcpy(pszStaticResult, pszPath, nLenPath); + pszStaticResult[nLenPath] = 0; + + if (CPLStrlcat(pszStaticResult, pszAddedPathSep, CPL_PATH_BUF_SIZE) >= static_cast(CPL_PATH_BUF_SIZE) || CPLStrlcat(pszStaticResult, pszBasename, CPL_PATH_BUF_SIZE) >= static_cast(CPL_PATH_BUF_SIZE) || @@ -590,6 +637,13 @@ const char *CPLFormFilename(const char *pszPath, const char *pszBasename, return CPLStaticBufferTooSmall(pszStaticResult); } + if (nSuffixPos && + CPLStrlcat(pszStaticResult, pszPath + nSuffixPos, CPL_PATH_BUF_SIZE) >= + static_cast(CPL_PATH_BUF_SIZE)) + { + return CPLStaticBufferTooSmall(pszStaticResult); + } + return pszStaticResult; } From 5f4a4ecd8cde99208f5407441a536184b85c267c Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 7 Aug 2024 15:47:24 +0200 Subject: [PATCH 289/301] PG/PGDump: make sure spatial index name is unique, even if several tables have a long enough prefix Also truncates too long table name and append part of their MD5 to make them unique. Fixes #10522, #7629 --- autotest/ogr/ogr_pg.py | 19 +++- autotest/ogr/ogr_pgdump.py | 67 +++++++++++-- ogr/ogrsf_frmts/pg/ogrpgdatasource.cpp | 39 +++----- ogr/ogrsf_frmts/pg/ogrpgtablelayer.cpp | 19 +--- ogr/ogrsf_frmts/pgdump/ogr_pgdump.h | 6 ++ .../pgdump/ogrpgdumpdatasource.cpp | 37 ++++---- ogr/ogrsf_frmts/pgdump/ogrpgdumplayer.cpp | 95 +++++++++++++++---- 7 files changed, 190 insertions(+), 92 deletions(-) diff --git a/autotest/ogr/ogr_pg.py b/autotest/ogr/ogr_pg.py index b853827f6773..8abdc81a703e 100755 --- a/autotest/ogr/ogr_pg.py +++ b/autotest/ogr/ogr_pg.py @@ -5901,7 +5901,8 @@ def test_ogr_pg_field_comment(pg_ds): def test_ogr_pg_long_identifiers(pg_ds): long_name = "test_" + ("X" * 64) + "_long_name" - short_name = "test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + short_name = "test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_3ba7c630" + assert len(short_name) == 63 with gdal.quiet_errors(): lyr = pg_ds.CreateLayer(long_name) assert lyr.GetName() == short_name @@ -5909,12 +5910,26 @@ def test_ogr_pg_long_identifiers(pg_ds): assert lyr.CreateFeature(f) == ogr.OGRERR_NONE assert lyr.SyncToDisk() == ogr.OGRERR_NONE + long_name2 = "test_" + ("X" * 64) + "_long_name2" + short_name2 = "test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_bb4afe1c" + assert len(short_name2) == 63 + with gdal.quiet_errors(): + lyr = pg_ds.CreateLayer(long_name2) + assert lyr.GetName() == short_name2 + f = ogr.Feature(lyr.GetLayerDefn()) + assert lyr.CreateFeature(f) == ogr.OGRERR_NONE + assert lyr.SyncToDisk() == ogr.OGRERR_NONE + pg_ds = reconnect(pg_ds, update=1) - got_lyr = pg_ds.GetLayerByName(long_name) + got_lyr = pg_ds.GetLayerByName(short_name) assert got_lyr assert got_lyr.GetName() == short_name + got_lyr = pg_ds.GetLayerByName(short_name2) + assert got_lyr + assert got_lyr.GetName() == short_name2 + ############################################################################### # Test extent 3D diff --git a/autotest/ogr/ogr_pgdump.py b/autotest/ogr/ogr_pgdump.py index 29de4208452a..7be8981c89e2 100755 --- a/autotest/ogr/ogr_pgdump.py +++ b/autotest/ogr/ogr_pgdump.py @@ -1484,17 +1484,72 @@ def check_and_remove(needle): # Test long identifiers -def test_ogr_pgdump_long_identifiers(tmp_vsimem): +@pytest.mark.parametrize( + "launder,long_name,geometry_name,short_name,pk_name,idx_name", + [ + ( + True, + "test_" + ("X" * (63 - len("test_"))), + "wkb_geometry", + "test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_pk", + "test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_a5a5c85f_0_geom_idx", + ), + ( + True, + "test_" + ("X" * (63 - len("test_") - len("wkb_geometry") - 2)), + "wkb_geometry", + "test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_pk", + "test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_0_geom_idx", + ), + ( + True, + "test_" + ("X" * 64) + "_long_name", + "wkb_geometry", + "test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_3ba7c630", + "test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_3ba7c_pk", + "test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_05e1f255_0_geom_idx", + ), + ( + True, + "test_" + ("X" * 64) + "_long_name2", + "wkb_geometry", + "test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_bb4afe1c", + "test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_bb4af_pk", + "test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_950ad059_0_geom_idx", + ), + ( + False, + "test_" + ("X" * 64) + "_long_name2", + "wkb_geometry", + "test_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_bb4afe1c", + "test_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_bb4af_pk", + "test_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_2c8a17fc_0_geom_idx", + ), + ], +) +def test_ogr_pgdump_long_identifiers( + tmp_vsimem, launder, long_name, geometry_name, short_name, pk_name, idx_name +): ds = ogr.GetDriverByName("PGDump").CreateDataSource( tmp_vsimem / "test_ogr_pgdump_long_identifiers.sql", options=["LINEFORMAT=LF"] ) - long_name = "test_" + ("X" * 64) + "_long_name" - short_name = "test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + assert len(short_name) <= 63 + assert len(idx_name) <= 63 + assert len(pk_name) <= 63 with gdal.quiet_errors(): - lyr = ds.CreateLayer(long_name, geom_type=ogr.wkbPoint) + lyr = ds.CreateLayer( + long_name, + geom_type=ogr.wkbPoint, + options=[ + "LAUNDER=" + ("YES" if launder else "NO"), + "GEOMETRY_NAME=" + geometry_name, + ], + ) lyr.CreateField(ogr.FieldDefn("str", ogr.OFTString)) f = ogr.Feature(lyr.GetLayerDefn()) f["str"] = "foo" @@ -1515,10 +1570,10 @@ def check_and_remove(needle): check_and_remove(f"""CREATE TABLE "public"."{short_name}"();""") check_and_remove( - f"""ALTER TABLE "public"."{short_name}" ADD COLUMN "ogc_fid" SERIAL CONSTRAINT "test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_pk" PRIMARY KEY;""" + f"""ALTER TABLE "public"."{short_name}" ADD COLUMN "ogc_fid" SERIAL CONSTRAINT "{pk_name}" PRIMARY KEY;""" ) check_and_remove( - f"""CREATE INDEX "test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_wkb_geometry_geom_idx" ON "public"."{short_name}" USING GIST ("wkb_geometry");""" + f"""CREATE INDEX "{idx_name}" ON "public"."{short_name}" USING GIST ("wkb_geometry");""" ) diff --git a/ogr/ogrsf_frmts/pg/ogrpgdatasource.cpp b/ogr/ogrsf_frmts/pg/ogrpgdatasource.cpp index 36ca26450eec..72dcba55ff41 100644 --- a/ogr/ogrsf_frmts/pg/ogrpgdatasource.cpp +++ b/ogr/ogrsf_frmts/pg/ogrpgdatasource.cpp @@ -1627,7 +1627,9 @@ OGRLayer *OGRPGDataSource::ICreateLayer(const char *pszLayerName, pszTableName = OGRPGCommonLaunderName(pszDotPos + 1, "PG", bUTF8ToASCII); // skip "." else - pszTableName = CPLStrdup(pszDotPos + 1); // skip "." + pszTableName = CPLStrdup( + OGRPGCommonGenerateShortEnoughIdentifier(pszDotPos + 1) + .c_str()); // skip "." } else { @@ -1636,7 +1638,9 @@ OGRLayer *OGRPGDataSource::ICreateLayer(const char *pszLayerName, pszTableName = OGRPGCommonLaunderName(pszLayerName, "PG", bUTF8ToASCII); // skip "." else - pszTableName = CPLStrdup(pszLayerName); // skip "." + pszTableName = + CPLStrdup(OGRPGCommonGenerateShortEnoughIdentifier(pszLayerName) + .c_str()); // skip "." } /* -------------------------------------------------------------------- */ @@ -1974,32 +1978,11 @@ OGRLayer *OGRPGDataSource::ICreateLayer(const char *pszLayerName, if (eType != wkbNone && bHavePostGIS && bCreateSpatialIndex) { - /* -------------------------------------------------------------------- - */ - /* Create the spatial index. */ - /* */ - /* We're doing this before we add geometry and record to the - * table */ - /* so this may not be exactly the best way to do it. */ - /* -------------------------------------------------------------------- - */ - std::string osIndexName(pszTableName); - std::string osSuffix("_"); - osSuffix += pszGFldName; - osSuffix += "_geom_idx"; - if (bLaunder) - { - if (osSuffix.size() >= - static_cast(OGR_PG_NAMEDATALEN - 1)) - { - osSuffix = "_0_geom_idx"; - } - if (osIndexName.size() + osSuffix.size() > - static_cast(OGR_PG_NAMEDATALEN - 1)) - osIndexName.resize(OGR_PG_NAMEDATALEN - 1 - - osSuffix.size()); - } - osIndexName += osSuffix; + // Create the spatial index. + // We're doing this before we add geometry and record to the + // table, so this may not be exactly the best way to do it. + const std::string osIndexName(OGRPGCommonGenerateSpatialIndexName( + pszTableName, pszGFldName, 0)); osCommand.Printf("CREATE INDEX %s ON %s.%s USING %s (%s)", OGRPGEscapeColumnName(osIndexName.c_str()).c_str(), diff --git a/ogr/ogrsf_frmts/pg/ogrpgtablelayer.cpp b/ogr/ogrsf_frmts/pg/ogrpgtablelayer.cpp index f46f8b393c8e..1540576ad9b1 100644 --- a/ogr/ogrsf_frmts/pg/ogrpgtablelayer.cpp +++ b/ogr/ogrsf_frmts/pg/ogrpgtablelayer.cpp @@ -2525,23 +2525,8 @@ OGRPGTableLayer::RunCreateSpatialIndex(const OGRPGGeomFieldDefn *poGeomField, PGconn *hPGConn = poDS->GetPGConn(); CPLString osCommand; - std::string osIndexName(pszTableName); - std::string osSuffix("_"); - osSuffix += poGeomField->GetNameRef(); - osSuffix += "_geom_idx"; - if (bLaunderColumnNames) - { - if (osSuffix.size() >= static_cast(OGR_PG_NAMEDATALEN - 1)) - { - osSuffix = "_"; - osSuffix += CPLSPrintf("%d", nIdx); - osSuffix += "_geom_idx"; - } - if (osIndexName.size() + osSuffix.size() > - static_cast(OGR_PG_NAMEDATALEN - 1)) - osIndexName.resize(OGR_PG_NAMEDATALEN - 1 - osSuffix.size()); - } - osIndexName += osSuffix; + const std::string osIndexName(OGRPGCommonGenerateSpatialIndexName( + pszTableName, poGeomField->GetNameRef(), nIdx)); osCommand.Printf("CREATE INDEX %s ON %s USING %s (%s)", OGRPGEscapeColumnName(osIndexName.c_str()).c_str(), diff --git a/ogr/ogrsf_frmts/pgdump/ogr_pgdump.h b/ogr/ogrsf_frmts/pgdump/ogr_pgdump.h index 910f99404486..0201bff52c4a 100644 --- a/ogr/ogrsf_frmts/pgdump/ogr_pgdump.h +++ b/ogr/ogrsf_frmts/pgdump/ogr_pgdump.h @@ -72,6 +72,12 @@ char CPL_DLL *OGRPGCommonLaunderName(const char *pszSrcName, const char *pszDebugPrefix, bool bUTF8ToASCII); +std::string CPL_DLL +OGRPGCommonGenerateShortEnoughIdentifier(const char *pszIdentifier); + +std::string CPL_DLL OGRPGCommonGenerateSpatialIndexName( + const char *pszTableName, const char *pszGeomFieldName, int nGeomFieldIdx); + /************************************************************************/ /* OGRPGDumpGeomFieldDefn */ /************************************************************************/ diff --git a/ogr/ogrsf_frmts/pgdump/ogrpgdumpdatasource.cpp b/ogr/ogrsf_frmts/pgdump/ogrpgdumpdatasource.cpp index b4edaafd5756..d6dee8170db7 100644 --- a/ogr/ogrsf_frmts/pgdump/ogrpgdumpdatasource.cpp +++ b/ogr/ogrsf_frmts/pgdump/ogrpgdumpdatasource.cpp @@ -30,6 +30,7 @@ #include #include "ogr_pgdump.h" #include "cpl_conv.h" +#include "cpl_md5.h" #include "cpl_string.h" /************************************************************************/ @@ -148,6 +149,16 @@ char *OGRPGCommonLaunderName(const char *pszSrcName, const char *pszDebugPrefix, } } } + + if (i == OGR_PG_NAMEDATALEN - 1 && pszSafeName[i] != '\0' && + pszSafeName[i + 1] != '\0') + { + constexpr int FIRST_8_CHARS_OF_MD5 = 8; + pszSafeName[i - FIRST_8_CHARS_OF_MD5 - 1] = '_'; + memcpy(pszSafeName + i - FIRST_8_CHARS_OF_MD5, CPLMD5String(pszSrcName), + FIRST_8_CHARS_OF_MD5); + } + pszSafeName[i] = '\0'; if (strcmp(pszSrcName, pszSafeName) != 0) @@ -274,7 +285,8 @@ OGRPGDumpDataSource::ICreateLayer(const char *pszLayerName, CPLFree(pszTmp); } else - osTable = pszDotPos + 1; // skip "." + osTable = OGRPGCommonGenerateShortEnoughIdentifier(pszDotPos + + 1); // skip "." } else { @@ -286,7 +298,7 @@ OGRPGDumpDataSource::ICreateLayer(const char *pszLayerName, CPLFree(pszTmp); } else - osTable = pszLayerName; + osTable = OGRPGCommonGenerateShortEnoughIdentifier(pszLayerName); } const std::string osTableEscaped = @@ -498,8 +510,8 @@ OGRPGDumpDataSource::ICreateLayer(const char *pszLayerName, if (bCreateTable && !osFIDColumnName.empty()) { std::string osConstraintName(osTable); - if (bLaunder && osConstraintName.size() + strlen("_pk") > - static_cast(OGR_PG_NAMEDATALEN - 1)) + if (osConstraintName.size() + strlen("_pk") > + static_cast(OGR_PG_NAMEDATALEN - 1)) { osConstraintName.resize(OGR_PG_NAMEDATALEN - 1 - strlen("_pk")); } @@ -592,21 +604,8 @@ OGRPGDumpDataSource::ICreateLayer(const char *pszLayerName, std::vector aosSpatialIndexCreationCommands; if (bCreateTable && bCreateSpatialIndex && pszGFldName && eType != wkbNone) { - std::string osIndexName(osTable); - std::string osSuffix("_"); - osSuffix += pszGFldName; - osSuffix += "_geom_idx"; - if (bLaunder) - { - if (osSuffix.size() >= static_cast(OGR_PG_NAMEDATALEN - 1)) - { - osSuffix = "_0_geom_idx"; - } - if (osIndexName.size() + osSuffix.size() > - static_cast(OGR_PG_NAMEDATALEN - 1)) - osIndexName.resize(OGR_PG_NAMEDATALEN - 1 - osSuffix.size()); - } - osIndexName += osSuffix; + const std::string osIndexName(OGRPGCommonGenerateSpatialIndexName( + osTable.c_str(), pszGFldName, 0)); /* --------------------------------------------------------------- */ /* Create the spatial index. */ diff --git a/ogr/ogrsf_frmts/pgdump/ogrpgdumplayer.cpp b/ogr/ogrsf_frmts/pgdump/ogrpgdumplayer.cpp index e8d07f811445..36053c48709d 100644 --- a/ogr/ogrsf_frmts/pgdump/ogrpgdumplayer.cpp +++ b/ogr/ogrsf_frmts/pgdump/ogrpgdumplayer.cpp @@ -28,6 +28,7 @@ #include "ogr_pgdump.h" #include "cpl_conv.h" +#include "cpl_md5.h" #include "cpl_string.h" #include "ogr_p.h" @@ -1554,6 +1555,77 @@ CPLString OGRPGCommonLayerGetPGDefault(OGRFieldDefn *poFieldDefn) return osRet; } +/************************************************************************/ +/* OGRPGCommonGenerateShortEnoughIdentifier() */ +/************************************************************************/ + +std::string OGRPGCommonGenerateShortEnoughIdentifier(const char *pszIdentifier) +{ + if (strlen(pszIdentifier) <= static_cast(OGR_PG_NAMEDATALEN - 1)) + return pszIdentifier; + + constexpr int FIRST_8_CHARS_OF_MD5 = 8; + std::string osRet(pszIdentifier, + OGR_PG_NAMEDATALEN - 1 - 1 - FIRST_8_CHARS_OF_MD5); + osRet += '_'; + osRet += std::string(CPLMD5String(pszIdentifier), FIRST_8_CHARS_OF_MD5); + return osRet; +} + +/************************************************************************/ +/* OGRPGCommonGenerateSpatialIndexName() */ +/************************************************************************/ + +/** Generates the name of the spatial index on table pszTableName + * using pszGeomFieldName, such that it fits in OGR_PG_NAMEDATALEN - 1 bytes. + * The index of the geometry field may be used if the geometry field name + * is too long. + */ +std::string OGRPGCommonGenerateSpatialIndexName(const char *pszTableName, + const char *pszGeomFieldName, + int nGeomFieldIdx) +{ + // Nominal case: use full table and geometry field name + for (const char *pszSuffix : {"_geom_idx", "_idx"}) + { + if (strlen(pszTableName) + 1 + strlen(pszGeomFieldName) + + strlen(pszSuffix) <= + static_cast(OGR_PG_NAMEDATALEN - 1)) + { + std::string osRet(pszTableName); + osRet += '_'; + osRet += pszGeomFieldName; + osRet += pszSuffix; + return osRet; + } + } + + // Slightly degraded case: use table name and geometry field index + const std::string osGeomFieldIdx(CPLSPrintf("%d", nGeomFieldIdx)); + if (strlen(pszTableName) + 1 + osGeomFieldIdx.size() + + strlen("_geom_idx") <= + static_cast(OGR_PG_NAMEDATALEN - 1)) + { + std::string osRet(pszTableName); + osRet += '_'; + osRet += osGeomFieldIdx; + osRet += "_geom_idx"; + return osRet; + } + + // Fallback case: use first characters of table name, + // first 8 chars of its MD5 and then the geometry field index. + constexpr int FIRST_8_CHARS_OF_MD5 = 8; + std::string osSuffix("_"); + osSuffix += std::string(CPLMD5String(pszTableName), FIRST_8_CHARS_OF_MD5); + osSuffix += '_'; + osSuffix += osGeomFieldIdx; + osSuffix += "_geom_idx"; + std::string osRet(pszTableName, OGR_PG_NAMEDATALEN - 1 - osSuffix.size()); + osRet += osSuffix; + return osRet; +} + /************************************************************************/ /* GetNextFeature() */ /************************************************************************/ @@ -1812,26 +1884,9 @@ OGRErr OGRPGDumpLayer::CreateGeomField(const OGRGeomFieldDefn *poGeomFieldIn, if (m_bCreateSpatialIndexFlag) { - std::string osIndexName(GetName()); - std::string osSuffix("_"); - osSuffix += poGeomField->GetNameRef(); - osSuffix += "_geom_idx"; - if (m_bLaunderColumnNames) - { - if (osSuffix.size() >= - static_cast(OGR_PG_NAMEDATALEN - 1)) - { - osSuffix = "_"; - osSuffix += - CPLSPrintf("%d", m_poFeatureDefn->GetGeomFieldCount()); - osSuffix += "_geom_idx"; - } - if (osIndexName.size() + osSuffix.size() > - static_cast(OGR_PG_NAMEDATALEN - 1)) - osIndexName.resize(OGR_PG_NAMEDATALEN - 1 - - osSuffix.size()); - } - osIndexName += osSuffix; + const std::string osIndexName(OGRPGCommonGenerateSpatialIndexName( + GetName(), poGeomField->GetNameRef(), + m_poFeatureDefn->GetGeomFieldCount())); osCommand.Printf( "CREATE INDEX %s ON %s USING %s (%s)", From c78c3d47bd7ae4c2219b5704cf7cb1253f62b129 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 7 Aug 2024 17:31:13 +0200 Subject: [PATCH 290/301] OGRSQL: return in error when 'Did not find end-of-string character' is emitted Fixes #10515 --- autotest/ogr/ogr_sql_rfc28.py | 7 +++---- ogr/swq.cpp | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/autotest/ogr/ogr_sql_rfc28.py b/autotest/ogr/ogr_sql_rfc28.py index d5aa09bdac81..7bc9a25eb0da 100755 --- a/autotest/ogr/ogr_sql_rfc28.py +++ b/autotest/ogr/ogr_sql_rfc28.py @@ -741,12 +741,11 @@ def test_ogr_rfc28_union_all_three_branch_and(data_ds): # Test lack of end-of-string character +@gdaltest.enable_exceptions() def test_ogr_rfc28_33(data_ds): - with gdal.quiet_errors(): - lyr = data_ds.ExecuteSQL("select * from idlink where name='foo") - - assert lyr is None + with pytest.raises(Exception, match="Did not find end-of-string character"): + data_ds.ExecuteSQL("select * from idlink'") ############################################################################### diff --git a/ogr/swq.cpp b/ogr/swq.cpp index 3379ef531db2..58cee65c2cbf 100644 --- a/ogr/swq.cpp +++ b/ogr/swq.cpp @@ -142,7 +142,7 @@ int swqlex(YYSTYPE *ppNode, swq_parse_context *context) CPLError(CE_Failure, CPLE_AppDefined, "Did not find end-of-string character"); CPLFree(token); - return 0; + return YYerror; } *ppNode = new swq_expr_node(token); From ad9ebc80a67db2d6498019d95e23d7dc0671a17e Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 19 Jul 2024 23:27:57 +0200 Subject: [PATCH 291/301] Shape: fix off-by-one write heap buffer overflow when deleting exactly 128, 232, etc. features and repacking Fixes #10451 --- ogr/ogrsf_frmts/shape/ogrshapelayer.cpp | 78 ++++++++----------------- 1 file changed, 24 insertions(+), 54 deletions(-) diff --git a/ogr/ogrsf_frmts/shape/ogrshapelayer.cpp b/ogr/ogrsf_frmts/shape/ogrshapelayer.cpp index 2a1507cea652..96b296539fdc 100644 --- a/ogr/ogrsf_frmts/shape/ogrshapelayer.cpp +++ b/ogr/ogrsf_frmts/shape/ogrshapelayer.cpp @@ -2803,65 +2803,43 @@ OGRErr OGRShapeLayer::Repack() /* -------------------------------------------------------------------- */ /* Build a list of records to be dropped. */ /* -------------------------------------------------------------------- */ - int *panRecordsToDelete = static_cast(CPLMalloc(sizeof(int) * 128)); - int nDeleteCount = 0; - int nDeleteCountAlloc = 128; + std::vector anRecordsToDelete; OGRErr eErr = OGRERR_NONE; CPLDebug("Shape", "REPACK: Checking if features have been deleted"); if (hDBF != nullptr) { - for (int iShape = 0; iShape < nTotalShapeCount; iShape++) + try { - if (DBFIsRecordDeleted(hDBF, iShape)) + for (int iShape = 0; iShape < nTotalShapeCount; iShape++) { - if (nDeleteCount == nDeleteCountAlloc) + if (DBFIsRecordDeleted(hDBF, iShape)) { - const int nDeleteCountAllocNew = - nDeleteCountAlloc + nDeleteCountAlloc / 3 + 32; - if (nDeleteCountAlloc >= (INT_MAX - 32) / 4 * 3 || - nDeleteCountAllocNew > - INT_MAX / static_cast(sizeof(int))) - { - CPLError(CE_Failure, CPLE_AppDefined, - "Too many features to delete : %d", - nDeleteCount); - CPLFree(panRecordsToDelete); - return OGRERR_FAILURE; - } - nDeleteCountAlloc = nDeleteCountAllocNew; - int *panRecordsToDeleteNew = static_cast( - VSI_REALLOC_VERBOSE(panRecordsToDelete, - nDeleteCountAlloc * sizeof(int))); - if (panRecordsToDeleteNew == nullptr) - { - CPLFree(panRecordsToDelete); - return OGRERR_FAILURE; - } - panRecordsToDelete = panRecordsToDeleteNew; + anRecordsToDelete.push_back(iShape); + } + if (VSIFEofL(VSI_SHP_GetVSIL(hDBF->fp))) + { + return OGRERR_FAILURE; // I/O error. } - panRecordsToDelete[nDeleteCount++] = iShape; - } - if (VSIFEofL(VSI_SHP_GetVSIL(hDBF->fp))) - { - CPLFree(panRecordsToDelete); - return OGRERR_FAILURE; // I/O error. } } + catch (const std::bad_alloc &) + { + CPLError(CE_Failure, CPLE_OutOfMemory, "Out of memory in Repack()"); + return OGRERR_FAILURE; + } } /* -------------------------------------------------------------------- */ /* If there are no records marked for deletion, we take no */ /* action. */ /* -------------------------------------------------------------------- */ - if (nDeleteCount == 0 && !bSHPNeedsRepack) + if (anRecordsToDelete.empty() && !bSHPNeedsRepack) { CPLDebug("Shape", "REPACK: nothing to do"); - CPLFree(panRecordsToDelete); return OGRERR_NONE; } - panRecordsToDelete[nDeleteCount] = -1; /* -------------------------------------------------------------------- */ /* Find existing filenames with exact case (see #3293). */ @@ -2914,7 +2892,6 @@ OGRErr OGRShapeLayer::Repack() "Cannot find the filename of the DBF file, but we managed to " "open it before !"); // Should not happen, really. - CPLFree(panRecordsToDelete); return OGRERR_FAILURE; } @@ -2924,7 +2901,6 @@ OGRErr OGRShapeLayer::Repack() "Cannot find the filename of the SHP file, but we managed to " "open it before !"); // Should not happen, really. - CPLFree(panRecordsToDelete); return OGRERR_FAILURE; } @@ -2934,7 +2910,6 @@ OGRErr OGRShapeLayer::Repack() "Cannot find the filename of the SHX file, but we managed to " "open it before !"); // Should not happen, really. - CPLFree(panRecordsToDelete); return OGRERR_FAILURE; } @@ -2950,9 +2925,10 @@ OGRErr OGRShapeLayer::Repack() /* -------------------------------------------------------------------- */ bool bMustReopenDBF = false; CPLString oTempFileDBF; - const int nNewRecords = nTotalShapeCount - nDeleteCount; + const int nNewRecords = + nTotalShapeCount - static_cast(anRecordsToDelete.size()); - if (hDBF != nullptr && nDeleteCount > 0) + if (hDBF != nullptr && !anRecordsToDelete.empty()) { CPLDebug("Shape", "REPACK: repacking .dbf"); bMustReopenDBF = true; @@ -2963,8 +2939,6 @@ OGRErr OGRShapeLayer::Repack() DBFHandle hNewDBF = DBFCloneEmpty(hDBF, oTempFileDBF); if (hNewDBF == nullptr) { - CPLFree(panRecordsToDelete); - CPLError(CE_Failure, CPLE_OpenFailed, "Failed to create temp file %s.", oTempFileDBF.c_str()); return OGRERR_FAILURE; @@ -2985,12 +2959,13 @@ OGRErr OGRShapeLayer::Repack() /* -------------------------------------------------------------------- */ int iDestShape = 0; - int iNextDeletedShape = 0; + size_t iNextDeletedShape = 0; for (int iShape = 0; iShape < nTotalShapeCount && eErr == OGRERR_NONE; iShape++) { - if (panRecordsToDelete[iNextDeletedShape] == iShape) + if (iNextDeletedShape < anRecordsToDelete.size() && + anRecordsToDelete[iNextDeletedShape] == iShape) { iNextDeletedShape++; } @@ -3011,7 +2986,6 @@ OGRErr OGRShapeLayer::Repack() if (eErr != OGRERR_NONE) { - CPLFree(panRecordsToDelete); VSIUnlink(oTempFileDBF); return eErr; } @@ -3053,7 +3027,6 @@ OGRErr OGRShapeLayer::Repack() SHPHandle hNewSHP = SHPCreate(oTempFileSHP, hSHP->nShapeType); if (hNewSHP == nullptr) { - CPLFree(panRecordsToDelete); if (!oTempFileDBF.empty()) VSIUnlink(oTempFileDBF); return OGRERR_FAILURE; @@ -3064,12 +3037,13 @@ OGRErr OGRShapeLayer::Repack() /* Copy over all records that are not deleted. */ /* -------------------------------------------------------------------- */ - int iNextDeletedShape = 0; + size_t iNextDeletedShape = 0; for (int iShape = 0; iShape < nTotalShapeCount && eErr == OGRERR_NONE; iShape++) { - if (panRecordsToDelete[iNextDeletedShape] == iShape) + if (iNextDeletedShape < anRecordsToDelete.size() && + anRecordsToDelete[iNextDeletedShape] == iShape) { iNextDeletedShape++; } @@ -3119,7 +3093,6 @@ OGRErr OGRShapeLayer::Repack() if (eErr != OGRERR_NONE) { - CPLFree(panRecordsToDelete); VSIUnlink(oTempFileSHP); VSIUnlink(oTempFileSHX); if (!oTempFileDBF.empty()) @@ -3130,9 +3103,6 @@ OGRErr OGRShapeLayer::Repack() } } - CPLFree(panRecordsToDelete); - panRecordsToDelete = nullptr; - // We could also use pack in place for Unix but this involves extra I/O // w.r.t to the delete and rename approach From 8cb2522ddc8d4e25148dfc5a6bcd0b084ede7562 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sun, 11 Aug 2024 15:29:05 +0200 Subject: [PATCH 292/301] typo fix --- autotest/utilities/test_gdal_translate_lib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autotest/utilities/test_gdal_translate_lib.py b/autotest/utilities/test_gdal_translate_lib.py index 180b3c4e9d41..d3e32650feb0 100755 --- a/autotest/utilities/test_gdal_translate_lib.py +++ b/autotest/utilities/test_gdal_translate_lib.py @@ -1155,7 +1155,7 @@ def test_gdal_translate_lib_scale_and_unscale_incompatible(): ############################################################################### -# Test -a_offset -inf (dummy example, but to proove -inf works as a value +# Test -a_offset -inf (dummy example, but to prove -inf works as a value # numeric value) From 30a771e7035d15a4560afbb451daa7e0cc71dbbe Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sun, 11 Aug 2024 17:44:39 +0200 Subject: [PATCH 293/301] Skip test_vsicurl_test_CPL_VSIL_CURL_USE_HEAD_NO() with buggy curl 8.9.1 It turns out that curl 8.9.1 has a bug related to SIGPIPE handling which caused SIGPIPE to no longer being ignored. Cf https://github.com/curl/curl/issues/14344 / https://github.com/curl/curl/pull/14390 Fixes #10540 --- autotest/gcore/vsicurl.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/autotest/gcore/vsicurl.py b/autotest/gcore/vsicurl.py index b567ddd40d47..9b5d5551e4df 100755 --- a/autotest/gcore/vsicurl.py +++ b/autotest/gcore/vsicurl.py @@ -48,13 +48,7 @@ def curl_version(): return actual_version -pytestmark = [ - pytest.mark.require_curl(), - pytest.mark.skipif( - curl_version() >= [8, 9, 1], - reason="fail with SIGPIPE", - ), -] +pytestmark = pytest.mark.require_curl() ############################################################################### # @@ -1058,6 +1052,11 @@ def test_vsicurl_GDAL_HTTP_HEADERS(server): # Test CPL_VSIL_CURL_USE_HEAD=NO +# Cf fix of https://github.com/curl/curl/pull/14390 +@pytest.mark.skipif( + curl_version() == [8, 9, 1], + reason="fail with SIGPIPE with curl 8.9.1", +) def test_vsicurl_test_CPL_VSIL_CURL_USE_HEAD_NO(server): gdal.VSICurlClearCache() From 09e8d8694ebaa0490ed75e1af3a402482cb45e6a Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sun, 11 Aug 2024 18:47:11 +0200 Subject: [PATCH 294/301] Prepare for GDAL 3.9.2 --- CITATION.cff | 4 +- NEWS.md | 155 ++++++++++++++++++ VERSION | 2 +- gcore/gdal_version.h.in | 6 +- swig/python/README.rst | 2 +- .../python/gdal-utils/osgeo_utils/__init__.py | 2 +- 6 files changed, 163 insertions(+), 8 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index e003dd22d379..d52e73d4ee90 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -2,8 +2,8 @@ cff-version: 1.2.0 message: Please cite this software using these metadata or in the CITATION file. type: software title: GDAL -version: 3.9.1 -date-released: 2024-06-22 +version: 3.9.2 +date-released: 2024-08-11 doi: 10.5281/zenodo.5884351 abstract: GDAL is a translator library for raster and vector geospatial data formats that is released under an MIT style Open Source License by the Open diff --git a/NEWS.md b/NEWS.md index 37977e68daf5..0e02b42ecf12 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,158 @@ +# GDAL/OGR 3.9.2 Release Notes + +GDAL 3.9.2 is a bugfix release. + +## Build + +* Fix compilation against openssl-libs-3.2.2-3 of fedora:rawhide +* Fix compilation against libarchive-3.3.3-5 as shipped by RHEL 8 (#10428) +* Fix -Wnull-dereference warnings of gcc 14.2 + +## GDAL 3.9.2 + +### Port + +* CPLFormFilename()/CPLGetDirname()/CPLGetPath(): make it work with + 'vsicurl/http://example.com?foo' type of filename, to fix Zarr driver + +### Core + +* GDALCopyWords(): Fix double->uint64 when input value > UINT64_MAX that was + wrongly converted to 0 + +### Raster utilities + +* gdalinfo_output.schema.json: pin stac-extensions/eo to v1.1.0 +* gdal_translate: fix -a_nodata to accept '-inf' as input (3.9.0 regression) +* gdalwarp: fix -srcnodata/-dstnodata to accept negative value in first position + (3.9.0 regression) +* gdalbuildvrt: -fix -srcnodata/-vrtnodata to accept negative value in first + position (3.9.0 regression) +* gdallocationinfo: avoid extra newline character in -valonly mode if coordinate + is outside raster extent (3.9.0 regression) +* gdal_rasterize: on a int64 band, set nodata value as int64 (#10306) +* gdal_rasterize: restrict to defaulting to Int64 raster data type only if + output driver supports it (and the burned field is Int64) +* gdal_retile: error out with clear message when trying to retile a file with a + geotransform with rotation terms, or several input files with inconsistent SRS + (#10333) +* gdal2tiles: update links in generate_leaflet(), remove OSM Toner (#10304) +* gdal2tiles: uUse correct OpenStreetMap tile url (openstreetmap/operations#737) +* gdal2tiles: fix exception with --nodata-values-pct-threshold but not + --excluded-values on a multi-band raster + +### Raster drivers + +COG driver: + * properly deal with mask bands w.r.t resampling when generating JPEG output, + or when input has a mask band (3.5 regression) (#10536) + +GTI driver: + * start looking for OVERVIEW__xxxx metadata items at index 0 + * automatically add overviews of overviews, unless the OVERVIEW_LEVEL=NONE open + option is specified + +GTiff driver: + * make SetNoDataValue(double) work on a Int64/UInt64 band (#10306) + +KEA driver: + * don't derive from PAM classes (#10355) + +JPEG driver: + * ReadFLIRMetadata(): avoid potential infinite loop + +NITF driver: + * 12-bit JPEG writer: fix crash if raster width > block width (#10441) + +OGCAPI driver: + * do not emit 'Server does not support specified IMAGE_FORMAT: AUTO' when + opening a vector layer with MVT tiles only + * fix reading encodingInfo/dataType for Coverage API + +SRTMHGT driver: + * add support for 0.5 deg resolution datasets (#10514) + +WMTS driver: + * make sure not to request tiles outside of tile matrix / tile matrix limits, + if the dataset extent goes beyond them + * clip layer extent with union of extent of tile matrices (#10348) + +## OGR 3.9.2 + +### Core + +* WKT geometry importer: accept (non conformant) PointZ/PointZM without space as + generated by current QGIS versions +* OGR SQL: do not make backslash a special character inside single-quoted + strings, to improve compliance with SQL92 (#10416) +* OGRSQL: return in error when 'Did not find end-of-string character' is emitted + (#10515) + +### OGRSpatialReference + +* EPSGTreatsAsNorthingEasting(): make it work correctly with compound CRS + +### Vector drivers + +GeoJSON driver: + * writer: make sure geometry is reprojected even when it is invalid after + coordinate rounding (3.9.0 regression) (qgis/QGIS#58169) + +GML driver: + * writer: fix missing SRS in Featurecollection's boundedBy element (3.9.1 + regression) (#10332) + +GMLAS driver: + * avoid crash on a OSSFuzz generated xsd (ossfuzz#70511) + +GTFS: + * fix error when applying an attribute filter on a field whose advertized data + type is not string (duckdb/duckdb_spatial#343) + +JSONFG driver: + * fix reading non-FeatureCollection documents larger than 6,000 bytes (#10525) + +LIBKML driver: + * fix writing a .kmz to cloud storage (#10313) + * fix LIBKML_RESOLVE_STYLE=YES when reading a KML file with dataset-level + styles (3.9.1 regression) (qgis/qgis#58208) + * fix reading/writing style URL in KMZ files (#10478) + +MiraMonVector driver: + * fix oss-fuzz#70860 + +OAPIF driver: + * fix resolving of relative links (#10410) + +OpenFileGDB driver: + * fix attribute filter when an equality comparison is involved with a field + with an index created with a LOWER(field_name) expression (#10345) + +OSM driver: + * avoid creating /vsimem/osm_importer directory (#10566) + +PG driver: + * fix ogr2ogr scenarios to PostgreSQL when there are several input layer names + like schema_name.layer_name (3.9.0 regression) + * fix support for geometry/geography OID in range between 2^31 and 2^32 (#10486) + +PG/PGDump drivers: + * make sure spatial index name is unique, even if several tables have a long + enough prefix (#10522, #7629) + +Shapefile driver: + * fix recognizing an empty string as a NULL date (#10405) + * fix off-by-one write heap buffer overflow when deleting exactly 128, 232, + etc. features and repacking (#10451) + +XLSX driver: + * support documents whose XML elements have a prefix (duckdb +/duckdb_spatial#362) + +## Python bindings + +* fix typos in gdal.Footprint() help message + # GDAL/OGR 3.9.1 Release Notes GDAL 3.9.1 is a bugfix release. diff --git a/VERSION b/VERSION index 6bd10744ae8a..2009c7dfad99 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.9.1 +3.9.2 diff --git a/gcore/gdal_version.h.in b/gcore/gdal_version.h.in index 1c47f229fbc8..a9568971bdff 100644 --- a/gcore/gdal_version.h.in +++ b/gcore/gdal_version.h.in @@ -7,7 +7,7 @@ #ifndef GDAL_VERSION_MAJOR # define GDAL_VERSION_MAJOR 3 # define GDAL_VERSION_MINOR 9 -# define GDAL_VERSION_REV 1 +# define GDAL_VERSION_REV 2 # define GDAL_VERSION_BUILD 0 #endif @@ -24,9 +24,9 @@ #if !defined(DO_NOT_DEFINE_GDAL_DATE_NAME) #ifndef GDAL_RELEASE_DATE -# define GDAL_RELEASE_DATE 20240622 +# define GDAL_RELEASE_DATE 20240811 #endif #ifndef GDAL_RELEASE_NAME -# define GDAL_RELEASE_NAME "3.9.1" +# define GDAL_RELEASE_NAME "3.9.2" #endif #endif diff --git a/swig/python/README.rst b/swig/python/README.rst index bd0f06d80f69..60ea7513c0eb 100644 --- a/swig/python/README.rst +++ b/swig/python/README.rst @@ -13,7 +13,7 @@ reference documentation, but the https://gdal.org/api/python_bindings.html#tutor Dependencies ------------ - * libgdal (3.9.1 or greater) and header files (gdal-devel) + * libgdal (3.9.2 or greater) and header files (gdal-devel) * numpy (1.0.0 or greater) and header files (numpy-devel) (not explicitly required, but many examples and utilities will not work without it) diff --git a/swig/python/gdal-utils/osgeo_utils/__init__.py b/swig/python/gdal-utils/osgeo_utils/__init__.py index 4e7b3455df0b..ae03c975a3dd 100644 --- a/swig/python/gdal-utils/osgeo_utils/__init__.py +++ b/swig/python/gdal-utils/osgeo_utils/__init__.py @@ -1,5 +1,5 @@ __package_name__ = "gdal-utils" -gdal_utils_version = (3, 9, 1, 0) +gdal_utils_version = (3, 9, 2, 0) __version__ = ".".join(str(i) for i in gdal_utils_version) __author__ = "Frank Warmerdam" __author_email__ = "warmerdam@pobox.com" From b15aca75b4401cb5269d261ac77ef96462eb9680 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 12 Aug 2024 11:11:46 +0200 Subject: [PATCH 295/301] Python bindings: make MDArray.Write(array_of_strings) work with a 0-d string variable --- swig/include/MultiDimensional.i | 39 +++++++++++++++++-------------- swig/include/python/gdal_python.i | 6 ++--- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/swig/include/MultiDimensional.i b/swig/include/MultiDimensional.i index 39a38a6f4093..998e1afd8633 100644 --- a/swig/include/MultiDimensional.i +++ b/swig/include/MultiDimensional.i @@ -691,8 +691,8 @@ public: { const int nExpectedDims = (int)GDALMDArrayGetDimensionCount(self); - std::vector count_internal(nExpectedDims); - if( nExpectedDims != 1 ) + std::vector count_internal(nExpectedDims + 1); + if( nExpectedDims > 1 ) { CPLError(CE_Failure, CPLE_AppDefined, "Unsupported number of dimensions"); @@ -707,23 +707,26 @@ public: return CE_Failure; } } - if( nDims1 != 1 ) + if( nExpectedDims == 1 ) { - CPLError(CE_Failure, CPLE_AppDefined, - "Wrong number of values in array_start_idx"); - return CE_Failure; - } - if( nDims2 != 1 ) - { - CPLError(CE_Failure, CPLE_AppDefined, - "Wrong number of values in count"); - return CE_Failure; - } - if( nDims3 != 1 ) - { - CPLError(CE_Failure, CPLE_AppDefined, - "Wrong number of values in array_step"); - return CE_Failure; + if( nDims1 != 1 ) + { + CPLError(CE_Failure, CPLE_AppDefined, + "Wrong number of values in array_start_idx"); + return CE_Failure; + } + if( nDims2 != 1 ) + { + CPLError(CE_Failure, CPLE_AppDefined, + "Wrong number of values in count"); + return CE_Failure; + } + if( nDims3 != 1 ) + { + CPLError(CE_Failure, CPLE_AppDefined, + "Wrong number of values in array_step"); + return CE_Failure; + } } CPLErr eErr = GDALMDArrayWrite(self, diff --git a/swig/include/python/gdal_python.i b/swig/include/python/gdal_python.i index 02dd3b81af0e..35be08997e81 100644 --- a/swig/include/python/gdal_python.i +++ b/swig/include/python/gdal_python.i @@ -1857,13 +1857,13 @@ def GetMDArrayNames(self, options = []) -> "list[str]": if not buffer_datatype: buffer_datatype = self.GetDataType() - is_1d_string = self.GetDataType().GetClass() == GEDTC_STRING and buffer_datatype.GetClass() == GEDTC_STRING and dimCount == 1 + is_0d_or_1d_string = self.GetDataType().GetClass() == GEDTC_STRING and buffer_datatype.GetClass() == GEDTC_STRING and dimCount <= 1 if not array_start_idx: array_start_idx = [0] * dimCount if not count: - if is_1d_string: + if is_0d_or_1d_string: assert type(buffer) == type([]) count = [ len(buffer) ] else: @@ -1882,7 +1882,7 @@ def GetMDArrayNames(self, options = []) -> "list[str]": stride *= cnt buffer_stride.reverse() - if is_1d_string: + if is_0d_or_1d_string: return _gdal.MDArray_WriteStringArray(self, array_start_idx, count, array_step, buffer_datatype, buffer) return _gdal.MDArray_Write(self, array_start_idx, count, array_step, buffer_stride, buffer_datatype, buffer) From 817153c84160617d74a7bdcbd1a7d6cd1d978f55 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 12 Aug 2024 11:12:06 +0200 Subject: [PATCH 296/301] netCDF multidim: fix use-after-free on string variables in ReadOneElement() --- autotest/gdrivers/netcdf_multidim.py | 9 +++++++++ frmts/netcdf/netcdfmultidim.cpp | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/autotest/gdrivers/netcdf_multidim.py b/autotest/gdrivers/netcdf_multidim.py index 7fd4616b1f85..60e8209e70d4 100755 --- a/autotest/gdrivers/netcdf_multidim.py +++ b/autotest/gdrivers/netcdf_multidim.py @@ -1250,6 +1250,15 @@ def dims_from_non_netcdf(rg): assert var assert var.Read() == ["", "0123456789"] + var = rg.CreateMDArray( + "my_var_string_array_zero_dim", [], gdal.ExtendedDataType.CreateString() + ) + assert var + assert var.Write(["foo"]) == gdal.CE_None + var = rg.OpenMDArray("my_var_string_array_zero_dim") + assert var + assert var.Read() == ["foo"] + f() def f2(): diff --git a/frmts/netcdf/netcdfmultidim.cpp b/frmts/netcdf/netcdfmultidim.cpp index d05d1d1bc948..b6f8ad578c05 100644 --- a/frmts/netcdf/netcdfmultidim.cpp +++ b/frmts/netcdf/netcdfmultidim.cpp @@ -3403,9 +3403,9 @@ bool netCDFVariable::ReadOneElement(const GDALExtendedDataType &src_datatype, NCDF_ERR(ret); if (ret != NC_NOERR) return false; - nc_free_string(1, &pszStr); GDALExtendedDataType::CopyValue(&pszStr, src_datatype, pDstBuffer, bufferDataType); + nc_free_string(1, &pszStr); return true; } From 4952bc25429e732217d213c98dc30f64342d5ede Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 12 Aug 2024 16:24:28 +0200 Subject: [PATCH 297/301] VRTProcessedDataset: test overviews --- autotest/gdrivers/vrtprocesseddataset.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/autotest/gdrivers/vrtprocesseddataset.py b/autotest/gdrivers/vrtprocesseddataset.py index 1c353d170732..97579e72e117 100755 --- a/autotest/gdrivers/vrtprocesseddataset.py +++ b/autotest/gdrivers/vrtprocesseddataset.py @@ -676,19 +676,20 @@ def test_vrtprocesseddataset_dehazing_different_resolution(tmp_vsimem): src_ds.GetRasterBand(1).WriteArray( np.array([[1, 1, 2, 2, 3, 3], [1, 1, 2, 2, 3, 3]]) ) - src_ds.SetGeoTransform([0, 0.5, 0, 0, 0, 0.5]) + src_ds.SetGeoTransform([0, 0.5 * 10, 0, 0, 0, 0.5 * 10]) + src_ds.BuildOverviews("NEAR", [2]) src_ds.Close() gain_filename = str(tmp_vsimem / "gain.tif") gain_ds = gdal.GetDriverByName("GTiff").Create(gain_filename, 3, 1, 1) gain_ds.GetRasterBand(1).WriteArray(np.array([[2, 4, 6]])) - gain_ds.SetGeoTransform([0, 1, 0, 0, 0, 1]) + gain_ds.SetGeoTransform([0, 1 * 10, 0, 0, 0, 1 * 10]) gain_ds.Close() offset_filename = str(tmp_vsimem / "offset.tif") offset_ds = gdal.GetDriverByName("GTiff").Create(offset_filename, 3, 1, 1) offset_ds.GetRasterBand(1).WriteArray(np.array([[1, 2, 3]])) - offset_ds.SetGeoTransform([0, 1, 0, 0, 0, 1]) + offset_ds.SetGeoTransform([0, 1 * 10, 0, 0, 0, 1 * 10]) offset_ds.Close() ds = gdal.Open( @@ -712,6 +713,10 @@ def test_vrtprocesseddataset_dehazing_different_resolution(tmp_vsimem): ds.GetRasterBand(1).ReadAsArray(), np.array([[1, 2, 6, 8, 15, 15], [1, 2, 6, 8, 15, 15]]), ) + np.testing.assert_equal( + ds.GetRasterBand(1).GetOverview(0).ReadAsArray(), + np.array([[1, 6, 15]]), + ) ############################################################################### From 4d4a47c5ab46388b44268a50bc3e1df934562ae1 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 11 Jul 2024 13:01:17 +0200 Subject: [PATCH 298/301] [Lint] VRT: remove use of magic constant -1.0 for uinitialized src/dst window --- frmts/vrt/vrtdataset.h | 38 +++++++++++++++++------ frmts/vrt/vrtsources.cpp | 67 ++++++++++++++++++++++------------------ 2 files changed, 66 insertions(+), 39 deletions(-) diff --git a/frmts/vrt/vrtdataset.h b/frmts/vrt/vrtdataset.h index f9df8ac59f47..8e51d1cc6717 100644 --- a/frmts/vrt/vrtdataset.h +++ b/frmts/vrt/vrtdataset.h @@ -1236,15 +1236,21 @@ class CPL_DLL VRTSimpleSource CPL_NON_FINAL : public VRTSource int m_nBand = 0; bool m_bGetMaskBand = false; - double m_dfSrcXOff = 0; - double m_dfSrcYOff = 0; - double m_dfSrcXSize = 0; - double m_dfSrcYSize = 0; - - double m_dfDstXOff = 0; - double m_dfDstYOff = 0; - double m_dfDstXSize = 0; - double m_dfDstYSize = 0; + /* Value for uninitialized source or destination window. It is chosen such + * that SrcToDst() and DstToSrc() are no-ops if both source and destination + * windows are unset. + */ + static constexpr double UNINIT_WINDOW = -1.0; + + double m_dfSrcXOff = UNINIT_WINDOW; + double m_dfSrcYOff = UNINIT_WINDOW; + double m_dfSrcXSize = UNINIT_WINDOW; + double m_dfSrcYSize = UNINIT_WINDOW; + + double m_dfDstXOff = UNINIT_WINDOW; + double m_dfDstYOff = UNINIT_WINDOW; + double m_dfDstXSize = UNINIT_WINDOW; + double m_dfDstYSize = UNINIT_WINDOW; CPLString m_osResampling{}; @@ -1275,6 +1281,20 @@ class CPL_DLL VRTSimpleSource CPL_NON_FINAL : public VRTSource return true; } + /** Returns whether the source window is set */ + bool IsSrcWinSet() const + { + return m_dfSrcXOff != UNINIT_WINDOW || m_dfSrcYOff != UNINIT_WINDOW || + m_dfSrcXSize != UNINIT_WINDOW || m_dfSrcYSize != UNINIT_WINDOW; + } + + /** Returns whether the destination window is set */ + bool IsDstWinSet() const + { + return m_dfDstXOff != UNINIT_WINDOW || m_dfDstYOff != UNINIT_WINDOW || + m_dfDstXSize != UNINIT_WINDOW || m_dfDstYSize != UNINIT_WINDOW; + } + public: VRTSimpleSource(); VRTSimpleSource(const VRTSimpleSource *poSrcSource, double dfXDstRatio, diff --git a/frmts/vrt/vrtsources.cpp b/frmts/vrt/vrtsources.cpp index 3edbd5c649eb..e0200f6ff4e2 100644 --- a/frmts/vrt/vrtsources.cpp +++ b/frmts/vrt/vrtsources.cpp @@ -470,8 +470,7 @@ CPLXMLNode *VRTSimpleSource::SerializeToXML(const char *pszVRTPath) CPLSPrintf("%d", nBlockYSize)); } - if (m_dfSrcXOff != -1 || m_dfSrcYOff != -1 || m_dfSrcXSize != -1 || - m_dfSrcYSize != -1) + if (IsSrcWinSet()) { CPLSetXMLValue(psSrc, "SrcRect.#xOff", CPLSPrintf("%.15g", m_dfSrcXOff)); @@ -483,8 +482,7 @@ CPLXMLNode *VRTSimpleSource::SerializeToXML(const char *pszVRTPath) CPLSPrintf("%.15g", m_dfSrcYSize)); } - if (m_dfDstXOff != -1 || m_dfDstYOff != -1 || m_dfDstXSize != -1 || - m_dfDstYSize != -1) + if (IsDstWinSet()) { CPLSetXMLValue(psSrc, "DstRect.#xOff", CPLSPrintf("%.15g", m_dfDstXOff)); @@ -581,21 +579,30 @@ VRTSimpleSource::XMLInit(const CPLXMLNode *psSrc, const char *pszVRTPath, CPLErr VRTSimpleSource::ParseSrcRectAndDstRect(const CPLXMLNode *psSrc) { + const auto GetAttrValue = [](const CPLXMLNode *psNode, + const char *pszAttrName, double dfDefaultVal) + { + if (const char *pszVal = CPLGetXMLValue(psNode, pszAttrName, nullptr)) + return CPLAtof(pszVal); + else + return dfDefaultVal; + }; + /* -------------------------------------------------------------------- */ /* Set characteristics. */ /* -------------------------------------------------------------------- */ const CPLXMLNode *const psSrcRect = CPLGetXMLNode(psSrc, "SrcRect"); if (psSrcRect) { - double xOff = CPLAtof(CPLGetXMLValue(psSrcRect, "xOff", "-1")); - double yOff = CPLAtof(CPLGetXMLValue(psSrcRect, "yOff", "-1")); - double xSize = CPLAtof(CPLGetXMLValue(psSrcRect, "xSize", "-1")); - double ySize = CPLAtof(CPLGetXMLValue(psSrcRect, "ySize", "-1")); + double xOff = GetAttrValue(psSrcRect, "xOff", UNINIT_WINDOW); + double yOff = GetAttrValue(psSrcRect, "yOff", UNINIT_WINDOW); + double xSize = GetAttrValue(psSrcRect, "xSize", UNINIT_WINDOW); + double ySize = GetAttrValue(psSrcRect, "ySize", UNINIT_WINDOW); // Test written that way to catch NaN values if (!(xOff >= INT_MIN && xOff <= INT_MAX) || !(yOff >= INT_MIN && yOff <= INT_MAX) || - !(xSize > 0 || xSize == -1) || xSize > INT_MAX || - !(ySize > 0 || ySize == -1) || ySize > INT_MAX) + !(xSize > 0 || xSize == UNINIT_WINDOW) || xSize > INT_MAX || + !(ySize > 0 || ySize == UNINIT_WINDOW) || ySize > INT_MAX) { CPLError(CE_Failure, CPLE_AppDefined, "Wrong values in SrcRect"); return CE_Failure; @@ -604,24 +611,26 @@ CPLErr VRTSimpleSource::ParseSrcRectAndDstRect(const CPLXMLNode *psSrc) } else { - m_dfSrcXOff = -1; - m_dfSrcYOff = -1; - m_dfSrcXSize = -1; - m_dfSrcYSize = -1; + m_dfSrcXOff = UNINIT_WINDOW; + m_dfSrcYOff = UNINIT_WINDOW; + m_dfSrcXSize = UNINIT_WINDOW; + m_dfSrcYSize = UNINIT_WINDOW; } const CPLXMLNode *const psDstRect = CPLGetXMLNode(psSrc, "DstRect"); if (psDstRect) { - double xOff = CPLAtof(CPLGetXMLValue(psDstRect, "xOff", "-1")); - double yOff = CPLAtof(CPLGetXMLValue(psDstRect, "yOff", "-1")); - double xSize = CPLAtof(CPLGetXMLValue(psDstRect, "xSize", "-1")); - double ySize = CPLAtof(CPLGetXMLValue(psDstRect, "ySize", "-1")); + double xOff = GetAttrValue(psDstRect, "xOff", UNINIT_WINDOW); + ; + double yOff = GetAttrValue(psDstRect, "yOff", UNINIT_WINDOW); + double xSize = GetAttrValue(psDstRect, "xSize", UNINIT_WINDOW); + ; + double ySize = GetAttrValue(psDstRect, "ySize", UNINIT_WINDOW); // Test written that way to catch NaN values if (!(xOff >= INT_MIN && xOff <= INT_MAX) || !(yOff >= INT_MIN && yOff <= INT_MAX) || - !(xSize > 0 || xSize == -1) || xSize > INT_MAX || - !(ySize > 0 || ySize == -1) || ySize > INT_MAX) + !(xSize > 0 || xSize == UNINIT_WINDOW) || xSize > INT_MAX || + !(ySize > 0 || ySize == UNINIT_WINDOW) || ySize > INT_MAX) { CPLError(CE_Failure, CPLE_AppDefined, "Wrong values in DstRect"); return CE_Failure; @@ -630,10 +639,10 @@ CPLErr VRTSimpleSource::ParseSrcRectAndDstRect(const CPLXMLNode *psSrc) } else { - m_dfDstXOff = -1; - m_dfDstYOff = -1; - m_dfDstXSize = -1; - m_dfDstYSize = -1; + m_dfDstXOff = UNINIT_WINDOW; + m_dfDstYOff = UNINIT_WINDOW; + m_dfDstXSize = UNINIT_WINDOW; + m_dfDstYSize = UNINIT_WINDOW; } return CE_None; @@ -807,7 +816,7 @@ int VRTSimpleSource::IsSameExceptBandNumber(VRTSimpleSource *poOtherSource) /************************************************************************/ /* SrcToDst() */ /* */ -/* Note: this is a no-op if the dst window is -1,-1,-1,-1. */ +/* Note: this is a no-op if the both src and dst windows are unset */ /************************************************************************/ void VRTSimpleSource::SrcToDst(double dfX, double dfY, double &dfXOut, @@ -821,7 +830,7 @@ void VRTSimpleSource::SrcToDst(double dfX, double dfY, double &dfXOut, /************************************************************************/ /* DstToSrc() */ /* */ -/* Note: this is a no-op if the dst window is -1,-1,-1,-1. */ +/* Note: this is a no-op if the both src and dst windows are unset */ /************************************************************************/ void VRTSimpleSource::DstToSrc(double dfX, double dfY, double &dfXOut, @@ -852,12 +861,10 @@ int VRTSimpleSource::GetSrcDstWindow( return FALSE; } - const bool bDstWinSet = m_dfDstXOff != -1 || m_dfDstXSize != -1 || - m_dfDstYOff != -1 || m_dfDstYSize != -1; + const bool bDstWinSet = IsDstWinSet(); #ifdef DEBUG - const bool bSrcWinSet = m_dfSrcXOff != -1 || m_dfSrcXSize != -1 || - m_dfSrcYOff != -1 || m_dfSrcYSize != -1; + const bool bSrcWinSet = IsSrcWinSet(); if (bSrcWinSet != bDstWinSet) { From 61eea4ed9ee50b58387130fb1d0bbf0b93c15a68 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 12 Aug 2024 16:24:53 +0200 Subject: [PATCH 299/301] VRT: fix reading from virtual overviews when SrcRect / DstRect elements are missing --- autotest/gcore/vrt_read.py | 30 ++++++++++++++++++++++++++++++ frmts/vrt/vrtsources.cpp | 27 +++++++++++++++++++++++---- 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/autotest/gcore/vrt_read.py b/autotest/gcore/vrt_read.py index dbb74ac90b46..bc4b35ca2c39 100755 --- a/autotest/gcore/vrt_read.py +++ b/autotest/gcore/vrt_read.py @@ -851,6 +851,36 @@ def test_vrt_read_21(): gdal.Unlink("/vsimem/byte.tif") +############################################################################### +# Test implicit virtual overviews + + +def test_vrt_read_virtual_overview_no_srcrect_dstrect(tmp_vsimem): + + ds = gdal.Open("data/byte.tif") + data = ds.ReadRaster(0, 0, 20, 20, 400, 400) + ds = None + tmp_tif = str(tmp_vsimem / "tmp.tif") + ds = gdal.GetDriverByName("GTiff").Create(tmp_tif, 400, 400) + ds.WriteRaster(0, 0, 400, 400, data) + ds.BuildOverviews("NEAR", [2]) + ref_cs = ds.GetRasterBand(1).GetOverview(0).Checksum() + ds = None + + ds = gdal.Open( + f""" + + + {tmp_tif} + 1 + + +""" + ) + assert ds.GetRasterBand(1).GetOverviewCount() == 1 + assert ds.GetRasterBand(1).GetOverview(0).Checksum() == ref_cs + + ############################################################################### # Test that we honour NBITS with SimpleSource and ComplexSource diff --git a/frmts/vrt/vrtsources.cpp b/frmts/vrt/vrtsources.cpp index e0200f6ff4e2..48a47da46d81 100644 --- a/frmts/vrt/vrtsources.cpp +++ b/frmts/vrt/vrtsources.cpp @@ -114,15 +114,34 @@ VRTSimpleSource::VRTSimpleSource(const VRTSimpleSource *poSrcSource, m_dfSrcYOff(poSrcSource->m_dfSrcYOff), m_dfSrcXSize(poSrcSource->m_dfSrcXSize), m_dfSrcYSize(poSrcSource->m_dfSrcYSize), - m_dfDstXOff(poSrcSource->m_dfDstXOff * dfXDstRatio), - m_dfDstYOff(poSrcSource->m_dfDstYOff * dfYDstRatio), - m_dfDstXSize(poSrcSource->m_dfDstXSize * dfXDstRatio), - m_dfDstYSize(poSrcSource->m_dfDstYSize * dfYDstRatio), m_nMaxValue(poSrcSource->m_nMaxValue), m_bRelativeToVRTOri(-1), m_nExplicitSharedStatus(poSrcSource->m_nExplicitSharedStatus), m_osSrcDSName(poSrcSource->m_osSrcDSName), m_bDropRefOnSrcBand(poSrcSource->m_bDropRefOnSrcBand) { + if (!poSrcSource->IsSrcWinSet() && !poSrcSource->IsDstWinSet() && + (dfXDstRatio != 1.0 || dfYDstRatio != 1.0)) + { + auto l_band = GetRasterBand(); + if (l_band) + { + m_dfSrcXOff = 0; + m_dfSrcYOff = 0; + m_dfSrcXSize = l_band->GetXSize(); + m_dfSrcYSize = l_band->GetYSize(); + m_dfDstXOff = 0; + m_dfDstYOff = 0; + m_dfDstXSize = l_band->GetXSize() * dfXDstRatio; + m_dfDstYSize = l_band->GetYSize() * dfYDstRatio; + } + } + else if (poSrcSource->IsDstWinSet()) + { + m_dfDstXOff = poSrcSource->m_dfDstXOff * dfXDstRatio; + m_dfDstYOff = poSrcSource->m_dfDstYOff * dfYDstRatio; + m_dfDstXSize = poSrcSource->m_dfDstXSize * dfXDstRatio; + m_dfDstYSize = poSrcSource->m_dfDstYSize * dfYDstRatio; + } } /************************************************************************/ From 028f6322942aa45883933cf93886ef55365c1cc1 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 12 Aug 2024 09:57:29 +0200 Subject: [PATCH 300/301] gdallocationinfo: in -E echo mode, always report input coordinates, not pixel,line --- apps/gdallocationinfo.cpp | 4 +++- autotest/utilities/test_gdallocationinfo.py | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/apps/gdallocationinfo.cpp b/apps/gdallocationinfo.cpp index e81b08c5e8b8..ff2bf26ccad9 100644 --- a/apps/gdallocationinfo.cpp +++ b/apps/gdallocationinfo.cpp @@ -342,6 +342,8 @@ MAIN_START(argc, argv) while (inputAvailable) { int iPixel, iLine; + const double dfXIn = dfGeoX; + const double dfYIn = dfGeoY; if (hCT) { @@ -411,7 +413,7 @@ MAIN_START(argc, argv) } else if (bEcho) { - printf("%d%s%d%s", iPixel, osFieldSep.c_str(), iLine, + printf("%.15g%s%.15g%s", dfXIn, osFieldSep.c_str(), dfYIn, osFieldSep.c_str()); } diff --git a/autotest/utilities/test_gdallocationinfo.py b/autotest/utilities/test_gdallocationinfo.py index 0b64f4c19333..a24f8f55c1f7 100755 --- a/autotest/utilities/test_gdallocationinfo.py +++ b/autotest/utilities/test_gdallocationinfo.py @@ -255,6 +255,20 @@ def test_gdallocationinfo_echo(gdallocationinfo_path): ) assert "1,2,132" in ret + ret = gdaltest.runexternal( + gdallocationinfo_path + + ' -geoloc -E -valonly -field_sep "," ../gcore/data/byte.tif', + strin="440780.5 3751200.5", + ) + assert "440780.5,3751200.5,132" in ret + + ret = gdaltest.runexternal( + gdallocationinfo_path + + ' -geoloc -E -valonly -field_sep "," ../gcore/data/byte.tif', + strin="440780.5 3751200.5 extra_content", + ) + assert "440780.5,3751200.5,132,extra_content" in ret + ############################################################################### # Test out of raster coordinates From 3aae5b4cf30c958ab339157b4f8115922e2f2562 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 13 Aug 2024 18:00:49 +0200 Subject: [PATCH 301/301] Prepare for GDAL 3.9.2rc2 --- CITATION.cff | 2 +- NEWS.md | 8 ++++++++ gcore/gdal_version.h.in | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index d52e73d4ee90..e89453ce2119 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -3,7 +3,7 @@ message: Please cite this software using these metadata or in the CITATION file. type: software title: GDAL version: 3.9.2 -date-released: 2024-08-11 +date-released: 2024-08-13 doi: 10.5281/zenodo.5884351 abstract: GDAL is a translator library for raster and vector geospatial data formats that is released under an MIT style Open Source License by the Open diff --git a/NEWS.md b/NEWS.md index 0e02b42ecf12..de02c4ee5ef3 100644 --- a/NEWS.md +++ b/NEWS.md @@ -36,6 +36,7 @@ GDAL 3.9.2 is a bugfix release. * gdal_retile: error out with clear message when trying to retile a file with a geotransform with rotation terms, or several input files with inconsistent SRS (#10333) +* gdallocationinfo: in -E echo mode, always report input coordinates, not pixel,line * gdal2tiles: update links in generate_leaflet(), remove OSM Toner (#10304) * gdal2tiles: uUse correct OpenStreetMap tile url (openstreetmap/operations#737) * gdal2tiles: fix exception with --nodata-values-pct-threshold but not @@ -61,6 +62,9 @@ KEA driver: JPEG driver: * ReadFLIRMetadata(): avoid potential infinite loop +netCDF driver: + * multidim: fix use-after-free on string variables in ReadOneElement() + NITF driver: * 12-bit JPEG writer: fix crash if raster width > block width (#10441) @@ -72,6 +76,9 @@ OGCAPI driver: SRTMHGT driver: * add support for 0.5 deg resolution datasets (#10514) +VRT driver: + * fix reading from virtual overviews when SrcRect / DstRect elements are missing + WMTS driver: * make sure not to request tiles outside of tile matrix / tile matrix limits, if the dataset extent goes beyond them @@ -152,6 +159,7 @@ XLSX driver: ## Python bindings * fix typos in gdal.Footprint() help message +* make MDArray.Write(array_of_strings) work with a 0-d string variable # GDAL/OGR 3.9.1 Release Notes diff --git a/gcore/gdal_version.h.in b/gcore/gdal_version.h.in index a9568971bdff..83feaa18c48d 100644 --- a/gcore/gdal_version.h.in +++ b/gcore/gdal_version.h.in @@ -24,7 +24,7 @@ #if !defined(DO_NOT_DEFINE_GDAL_DATE_NAME) #ifndef GDAL_RELEASE_DATE -# define GDAL_RELEASE_DATE 20240811 +# define GDAL_RELEASE_DATE 20240813 #endif #ifndef GDAL_RELEASE_NAME # define GDAL_RELEASE_NAME "3.9.2"