improve errors reporting in mapnik-index

This commit is contained in:
Artem Pavlenko 2018-02-21 16:02:12 +01:00
parent ff56c86446
commit 8876d13356
2 changed files with 14 additions and 3 deletions

View file

@ -43,7 +43,8 @@ enum well_known_names
features, features,
geometry, geometry,
coordinates, coordinates,
properties properties,
geometries
}; };
constexpr char const* wkn_to_string(well_known_names val) constexpr char const* wkn_to_string(well_known_names val)
@ -56,6 +57,7 @@ constexpr char const* wkn_to_string(well_known_names val)
case geometry: return "geometry"; case geometry: return "geometry";
case coordinates: return "coordinates"; case coordinates: return "coordinates";
case properties: return "properties"; case properties: return "properties";
case geometries: return "geometries";
default: return "unknown"; default: return "unknown";
} }
} }
@ -73,6 +75,7 @@ inline keys_map get_keys()
("coordinates", well_known_names::coordinates) ("coordinates", well_known_names::coordinates)
("properties", well_known_names::properties) ("properties", well_known_names::properties)
("id", well_known_names::id) ("id", well_known_names::id)
("geometries",well_known_names::geometries)
; ;
return keys; return keys;
} }

View file

@ -51,6 +51,11 @@ constexpr mapnik::json::well_known_names geometry_properties[] = {
mapnik::json::well_known_names::type, mapnik::json::well_known_names::type,
mapnik::json::well_known_names::coordinates}; // sorted mapnik::json::well_known_names::coordinates}; // sorted
constexpr mapnik::json::well_known_names geometry_collection_properties[] = {
mapnik::json::well_known_names::type,
mapnik::json::well_known_names::geometries}; // sorted
template <typename Keys> template <typename Keys>
std::string join(Keys const& keys) std::string join(Keys const& keys)
{ {
@ -117,9 +122,12 @@ bool validate_geojson_feature(mapnik::json::geojson_value & value, Keys const& k
{ {
return std::get<0>(e0) < std::get<0>(e1); return std::get<0>(e0) < std::get<0>(e1);
}); });
if (!has_keys(geometry.begin(), geometry.end(), geometry_properties))
if (!has_keys(geometry.begin(), geometry.end(), geometry_properties)
&& !has_keys(geometry.begin(), geometry.end(), geometry_collection_properties))
{ {
if (verbose) std::clog << "Expecting one of " << join(geometry_properties) << std::endl; if (verbose) std::clog << "\"geometry\": xxx <-- expecting one of " << join(geometry_properties)
<< " or " << join(geometry_collection_properties) << std::endl;
return false; return false;
} }