[core] Normalize only raster source tile URLs
This commit is contained in:
@@ -109,7 +109,7 @@ void Source::load() {
|
||||
// from the stylesheet. Then merge in the values parsed from the TileJSON we retrieved
|
||||
// via the URL.
|
||||
try {
|
||||
newInfo = StyleParser::parseTileJSON(*res.data, url);
|
||||
newInfo = StyleParser::parseTileJSON(*res.data, url, type);
|
||||
} catch (...) {
|
||||
observer->onSourceError(*this, std::current_exception());
|
||||
return;
|
||||
|
||||
@@ -255,7 +255,7 @@ std::unique_ptr<mapbox::geojsonvt::GeoJSONVT> StyleParser::parseGeoJSON(const JS
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<SourceInfo> StyleParser::parseTileJSON(const std::string& json, const std::string& sourceURL) {
|
||||
std::unique_ptr<SourceInfo> StyleParser::parseTileJSON(const std::string& json, const std::string& sourceURL, SourceType type) {
|
||||
rapidjson::GenericDocument<rapidjson::UTF8<>, rapidjson::CrtAllocator> document;
|
||||
document.Parse<0>(json.c_str());
|
||||
|
||||
@@ -268,7 +268,7 @@ std::unique_ptr<SourceInfo> StyleParser::parseTileJSON(const std::string& json,
|
||||
std::unique_ptr<SourceInfo> result = StyleParser::parseTileJSON(document);
|
||||
|
||||
// TODO: Remove this hack by delivering proper URLs in the TileJSON to begin with.
|
||||
if (util::mapbox::isMapboxURL(sourceURL)) {
|
||||
if (type == SourceType::Raster && util::mapbox::isMapboxURL(sourceURL)) {
|
||||
std::transform(result->tiles.begin(),
|
||||
result->tiles.end(),
|
||||
result->tiles.begin(),
|
||||
|
||||
@@ -28,7 +28,7 @@ public:
|
||||
std::vector<std::unique_ptr<Source>> sources;
|
||||
std::vector<std::unique_ptr<StyleLayer>> layers;
|
||||
|
||||
static std::unique_ptr<SourceInfo> parseTileJSON(const std::string& json, const std::string& sourceURL);
|
||||
static std::unique_ptr<SourceInfo> parseTileJSON(const std::string& json, const std::string& sourceURL, SourceType);
|
||||
static std::unique_ptr<SourceInfo> parseTileJSON(const JSValue&);
|
||||
|
||||
static std::unique_ptr<mapbox::geojsonvt::GeoJSONVT> parseGeoJSON(const JSValue&);
|
||||
|
||||
8
test/fixtures/style_parser/tilejson.raster.json
vendored
Normal file
8
test/fixtures/style_parser/tilejson.raster.json
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"minzoom": 0,
|
||||
"maxzoom": 15,
|
||||
"center": [ 1, 2, 3 ],
|
||||
"bounds": [ 4, 5, 6, 7 ],
|
||||
"attribution": "attribution",
|
||||
"tiles": [ "http://a.tiles.mapbox.com/mapbox.satellite/{z}-{x}-{y}.png?access_token=key" ]
|
||||
}
|
||||
8
test/fixtures/style_parser/tilejson.vector.json
vendored
Normal file
8
test/fixtures/style_parser/tilejson.vector.json
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"minzoom": 0,
|
||||
"maxzoom": 15,
|
||||
"center": [ 1, 2, 3 ],
|
||||
"bounds": [ 4, 5, 6, 7 ],
|
||||
"attribution": "attribution",
|
||||
"tiles": [ "http://a.tiles.mapbox.com/mapbox.streets/{z}-{x}-{y}.vector.pbf?access_token=key" ]
|
||||
}
|
||||
@@ -85,3 +85,31 @@ INSTANTIATE_TEST_CASE_P(StyleParser, StyleParserTest, ::testing::ValuesIn([] {
|
||||
EXPECT_GT(names.size(), 0ul);
|
||||
return names;
|
||||
}()));
|
||||
|
||||
TEST(StyleParser, ParseTileJSONRaster) {
|
||||
auto result = StyleParser::parseTileJSON(
|
||||
util::read_file("test/fixtures/style_parser/tilejson.raster.json"),
|
||||
"mapbox://mapbox.satellite",
|
||||
SourceType::Raster);
|
||||
|
||||
EXPECT_EQ(0, result->minZoom);
|
||||
EXPECT_EQ(15, result->maxZoom);
|
||||
EXPECT_EQ("attribution", result->attribution);
|
||||
#if !defined(__ANDROID__) && !defined(__APPLE__)
|
||||
EXPECT_EQ("http://a.tiles.mapbox.com/mapbox.satellite/{z}-{x}-{y}{ratio}.webp?access_token=key", result->tiles[0]);
|
||||
#else
|
||||
EXPECT_EQ("http://a.tiles.mapbox.com/mapbox.satellite/{z}-{x}-{y}{ratio}.png?access_token=key", result->tiles[0]);
|
||||
#endif
|
||||
}
|
||||
|
||||
TEST(StyleParser, ParseTileJSONVector) {
|
||||
auto result = StyleParser::parseTileJSON(
|
||||
util::read_file("test/fixtures/style_parser/tilejson.vector.json"),
|
||||
"mapbox://mapbox.streets",
|
||||
SourceType::Vector);
|
||||
|
||||
EXPECT_EQ(0, result->minZoom);
|
||||
EXPECT_EQ(15, result->maxZoom);
|
||||
EXPECT_EQ("attribution", result->attribution);
|
||||
EXPECT_EQ("http://a.tiles.mapbox.com/mapbox.streets/{z}-{x}-{y}.vector.pbf?access_token=key", result->tiles[0]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user