| 67 | /************************************************************************/ |
| 68 | |
| 69 | std::unique_ptr<TileMatrixSet> TileMatrixSet::parse(const char *fileOrDef) |
| 70 | { |
| 71 | CPLJSONDocument oDoc; |
| 72 | std::unique_ptr<TileMatrixSet> poTMS(new TileMatrixSet()); |
| 73 | |
| 74 | constexpr double HALF_CIRCUMFERENCE = 6378137 * M_PI; |
| 75 | |
| 76 | if (EQUAL(fileOrDef, "GoogleMapsCompatible") || |
| 77 | EQUAL(fileOrDef, "WebMercatorQuad") || |
| 78 | EQUAL( |
| 79 | fileOrDef, |
| 80 | "http://www.opengis.net/def/tilematrixset/OGC/1.0/WebMercatorQuad")) |
| 81 | { |
| 82 | /* See http://portal.opengeospatial.org/files/?artifact_id=35326 |
| 83 | * (WMTS 1.0), Annex E.4 */ |
| 84 | // or https://docs.ogc.org/is/17-083r4/17-083r4.html#toc49 |
| 85 | poTMS->mTitle = "GoogleMapsCompatible"; |
| 86 | poTMS->mIdentifier = "GoogleMapsCompatible"; |
| 87 | poTMS->mCrs = "http://www.opengis.net/def/crs/EPSG/0/3857"; |
| 88 | poTMS->mBbox.mCrs = poTMS->mCrs; |
| 89 | poTMS->mBbox.mLowerCornerX = -HALF_CIRCUMFERENCE; |
| 90 | poTMS->mBbox.mLowerCornerY = -HALF_CIRCUMFERENCE; |
| 91 | poTMS->mBbox.mUpperCornerX = HALF_CIRCUMFERENCE; |
| 92 | poTMS->mBbox.mUpperCornerY = HALF_CIRCUMFERENCE; |
| 93 | poTMS->mWellKnownScaleSet = |
| 94 | "http://www.opengis.net/def/wkss/OGC/1.0/GoogleMapsCompatible"; |
| 95 | for (int i = 0; i <= 30; i++) |
| 96 | { |
| 97 | TileMatrix tm; |
| 98 | tm.mId = CPLSPrintf("%d", i); |
| 99 | tm.mResX = 2 * HALF_CIRCUMFERENCE / 256 / (1 << i); |
| 100 | tm.mResY = tm.mResX; |
| 101 | tm.mScaleDenominator = tm.mResX / 0.28e-3; |
| 102 | tm.mTopLeftX = -HALF_CIRCUMFERENCE; |
| 103 | tm.mTopLeftY = HALF_CIRCUMFERENCE; |
| 104 | tm.mTileWidth = 256; |
| 105 | tm.mTileHeight = 256; |
| 106 | tm.mMatrixWidth = 1 << i; |
| 107 | tm.mMatrixHeight = 1 << i; |
| 108 | poTMS->mTileMatrixList.emplace_back(std::move(tm)); |
| 109 | } |
| 110 | return poTMS; |
| 111 | } |
| 112 | |
| 113 | if (EQUAL(fileOrDef, "WorldMercatorWGS84Quad") || |
| 114 | EQUAL(fileOrDef, "http://www.opengis.net/def/tilematrixset/OGC/1.0/" |
| 115 | "WorldMercatorWGS84Quad")) |
| 116 | { |
| 117 | // See https://docs.ogc.org/is/17-083r4/17-083r4.html#toc51 |
| 118 | poTMS->mTitle = "WorldMercatorWGS84Quad"; |
| 119 | poTMS->mIdentifier = "WorldMercatorWGS84Quad"; |
| 120 | poTMS->mCrs = "http://www.opengis.net/def/crs/EPSG/0/3395"; |
| 121 | poTMS->mBbox.mCrs = poTMS->mCrs; |
| 122 | poTMS->mBbox.mLowerCornerX = -HALF_CIRCUMFERENCE; |
| 123 | poTMS->mBbox.mLowerCornerY = -HALF_CIRCUMFERENCE; |
| 124 | poTMS->mBbox.mUpperCornerX = HALF_CIRCUMFERENCE; |
| 125 | poTMS->mBbox.mUpperCornerY = HALF_CIRCUMFERENCE; |
| 126 | poTMS->mWellKnownScaleSet = |
no test coverage detected