[core] Normalize only raster source tile URLs

This commit is contained in:
John Firebaugh
2016-02-01 20:25:55 -08:00
parent 8aa3359ff0
commit 52689796df
6 changed files with 48 additions and 4 deletions

View File

@@ -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;

View File

@@ -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(),

View File

@@ -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&);

View 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" ]
}

View 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" ]
}

View File

@@ -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]);
}