fixes to get compiling
This commit is contained in:
parent
aed2c0124a
commit
6f41e3faf1
@ -558,6 +558,9 @@ else()
|
|||||||
find_package(Osmium REQUIRED COMPONENTS io)
|
find_package(Osmium REQUIRED COMPONENTS io)
|
||||||
include_directories(SYSTEM ${OSMIUM_INCLUDE_DIR})
|
include_directories(SYSTEM ${OSMIUM_INCLUDE_DIR})
|
||||||
|
|
||||||
|
set(RAPIDJSON_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/rapidjson/include")
|
||||||
|
include_directories(SYSTEM ${RAPIDJSON_INCLUDE_DIR})
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# prefix compilation with ccache by default if available and on clang or gcc
|
# prefix compilation with ccache by default if available and on clang or gcc
|
||||||
|
@ -39,7 +39,7 @@ class Timezoner
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void LoadLocalTimesRTree(const std::string &tz_shapes_filename, std::time_t utc_time);
|
void LoadLocalTimesRTree(const std::string &tz_shapes_filename, std::time_t utc_time);
|
||||||
void ValidateFeature(const rapidjson::Value &feature);
|
void ValidateFeature(const rapidjson::Value &feature, const std::string &filename);
|
||||||
|
|
||||||
struct tm default_time;
|
struct tm default_time;
|
||||||
rtree_t rtree;
|
rtree_t rtree;
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include "rapidjson/document.h"
|
#include "rapidjson/document.h"
|
||||||
#include "rapidjson/istreamwrapper.h"
|
#include "rapidjson/istreamwrapper.h"
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
|
||||||
@ -35,53 +36,53 @@ Timezoner::Timezoner(std::string tz_filename, std::time_t utc_time_now)
|
|||||||
LoadLocalTimesRTree(tz_filename, utc_time_now);
|
LoadLocalTimesRTree(tz_filename, utc_time_now);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Timezoner::ValidateFeature(const rapidjson::Value &feature)
|
void Timezoner::ValidateFeature(const rapidjson::Value &feature, const std::string &filename)
|
||||||
{
|
{
|
||||||
if (!feature.HasMember("type"))
|
if (!feature.HasMember("type"))
|
||||||
{
|
{
|
||||||
throw osrm::util::exception("Failed to parse " + tz_shapes_filename +
|
throw osrm::util::exception("Failed to parse " + filename +
|
||||||
". Feature is missing type member.");
|
". Feature is missing type member.");
|
||||||
} else if (!feature["type"].IsString())
|
} else if (!feature["type"].IsString())
|
||||||
{
|
{
|
||||||
throw osrm::util::exception("Failed to parse " + tz_shapes_filename +
|
throw osrm::util::exception("Failed to parse " + filename +
|
||||||
". Feature non-string type member.");
|
". Feature non-string type member.");
|
||||||
}
|
}
|
||||||
if (!feature.HasMember("properties"))
|
if (!feature.HasMember("properties"))
|
||||||
{
|
{
|
||||||
throw osrm::util::exception("Failed to parse " + tz_shapes_filename +
|
throw osrm::util::exception("Failed to parse " + filename +
|
||||||
". Feature is missing properties member.");
|
". Feature is missing properties member.");
|
||||||
}
|
}
|
||||||
else if (!features[i].GetObject()["properties"].IsObject())
|
else if (!feature.GetObject()["properties"].IsObject())
|
||||||
{
|
{
|
||||||
throw osrm::util::exception("Failed to parse " + tz_shapes_filename +
|
throw osrm::util::exception("Failed to parse " + filename +
|
||||||
". Feature has non-object properties member.");
|
". Feature has non-object properties member.");
|
||||||
}
|
}
|
||||||
if (!feature["properties"].GetObject().HasMember("TZID"))
|
if (!feature["properties"].GetObject().HasMember("TZID"))
|
||||||
{
|
{
|
||||||
throw osrm::util::exception("Failed to parse " + tz_shapes_filename +
|
throw osrm::util::exception("Failed to parse " + filename +
|
||||||
". Feature is missing TZID member in properties.");
|
". Feature is missing TZID member in properties.");
|
||||||
}
|
}
|
||||||
else if (!feature["properties"].GetObject()["TZID"].IsString())
|
else if (!feature["properties"].GetObject()["TZID"].IsString())
|
||||||
{
|
{
|
||||||
throw osrm::util::exception("Failed to parse " + tz_shapes_filename +
|
throw osrm::util::exception("Failed to parse " + filename +
|
||||||
". Feature has non-string TZID value.");
|
". Feature has non-string TZID value.");
|
||||||
}
|
}
|
||||||
if (!feature.HasMember("geometry"))
|
if (!feature.HasMember("geometry"))
|
||||||
{
|
{
|
||||||
throw osrm::util::exception("Failed to parse " + tz_shapes_filename +
|
throw osrm::util::exception("Failed to parse " + filename +
|
||||||
". Feature is missing geometry member.");
|
". Feature is missing geometry member.");
|
||||||
}
|
}
|
||||||
else if (!feature.GetObject()["geometry"].IsObject())
|
else if (!feature.GetObject()["geometry"].IsObject())
|
||||||
{
|
{
|
||||||
throw osrm::util::exception("Failed to parse " + tz_shapes_filename +
|
throw osrm::util::exception("Failed to parse " + filename +
|
||||||
". Feature non-object geometry member.");
|
". Feature non-object geometry member.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!feature["geometry"].GetObject().HasMember("type"))
|
if (!feature["geometry"].GetObject().HasMember("type"))
|
||||||
throw osrm::util::exception("Failed to parse " + tz_shapes_filename +
|
throw osrm::util::exception("Failed to parse " + filename +
|
||||||
". Feature geometry is missing type member.");
|
". Feature geometry is missing type member.");
|
||||||
if (!feature["geometry"].GetObject().HasMember("coordinates"))
|
if (!feature["geometry"].GetObject().HasMember("coordinates"))
|
||||||
throw osrm::util::exception("Failed to parse " + tz_shapes_filename +
|
throw osrm::util::exception("Failed to parse " + filename +
|
||||||
". Feature geometry is missing coordinates member.");
|
". Feature geometry is missing coordinates member.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,19 +90,19 @@ void Timezoner::LoadLocalTimesRTree(const std::string &tz_shapes_filename, std::
|
|||||||
{
|
{
|
||||||
if (tz_shapes_filename.empty())
|
if (tz_shapes_filename.empty())
|
||||||
return;
|
return;
|
||||||
std::ifstream file(tz_shapes_filename);
|
std::ifstream file(tz_shapes_filename.data());
|
||||||
if (!file.is_open)
|
if (!file.is_open())
|
||||||
throw osrm::util::exception("failed to open " + tz_shapes_filename);
|
throw osrm::util::exception("failed to open " + tz_shapes_filename);
|
||||||
|
|
||||||
rapidjson::IStreamWrapper isw(file);
|
rapidjson::IStreamWrapper isw(file);
|
||||||
rapidjson::Document geojson;
|
rapidjson::Document geojson;
|
||||||
geojson.ParseStream(isw);
|
geojson.ParseStream(isw);
|
||||||
if (geojson.HasParseError)
|
if (geojson.HasParseError())
|
||||||
{
|
{
|
||||||
auto error_code = geojson.GetParseError();
|
auto error_code = geojson.GetParseError();
|
||||||
auto error_offset = geojson.GetErrorOffset();
|
auto error_offset = geojson.GetErrorOffset();
|
||||||
throw osrm::util::exception("Failed to parse " + tz_shapes_filename + " with error " +
|
throw osrm::util::exception("Failed to parse " + tz_shapes_filename + " with error " +
|
||||||
error_code + ". JSON malformed at " + error_offset);
|
std::to_string(error_code) + ". JSON malformed at " + std::to_string(error_offset));
|
||||||
}
|
}
|
||||||
if (!geojson.HasMember("FeatureCollection"))
|
if (!geojson.HasMember("FeatureCollection"))
|
||||||
throw osrm::util::exception("Failed to parse " + tz_shapes_filename +
|
throw osrm::util::exception("Failed to parse " + tz_shapes_filename +
|
||||||
@ -127,17 +128,17 @@ void Timezoner::LoadLocalTimesRTree(const std::string &tz_shapes_filename, std::
|
|||||||
return it->second;
|
return it->second;
|
||||||
};
|
};
|
||||||
BOOST_ASSERT(geojson["features"].IsArray());
|
BOOST_ASSERT(geojson["features"].IsArray());
|
||||||
rapidjson::Value &features_array = geojson["features"].GetArray();
|
const rapidjson::Value &features_array = geojson["features"].GetArray();
|
||||||
std::vector<rtree_t::value_type> polygons;
|
std::vector<rtree_t::value_type> polygons;
|
||||||
for (rapidjson::SizeType i = 0; i < features_array.Size(); i++)
|
for (rapidjson::SizeType i = 0; i < features_array.Size(); i++)
|
||||||
{
|
{
|
||||||
ValidateFeature(features_array[i]);
|
ValidateFeature(features_array[i], tz_shapes_filename);
|
||||||
std::string feat_type = features[i].GetObject()["geometry"].GetObject()["type"].GetString();
|
const std::string &feat_type = features_array[i].GetObject()["geometry"].GetObject()["type"].GetString();
|
||||||
if (feat_type == "polygon")
|
if (feat_type == "polygon")
|
||||||
{
|
{
|
||||||
polygon_t polygon;
|
polygon_t polygon;
|
||||||
// per geojson spec, the first array of polygon coords is the exterior ring
|
// per geojson spec, the first array of polygon coords is the exterior ring
|
||||||
auto coords_outer_array = features[i]
|
auto coords_outer_array = features_array[i]
|
||||||
.GetObject()["geometry"]
|
.GetObject()["geometry"]
|
||||||
.GetObject()["coordinates"]
|
.GetObject()["coordinates"]
|
||||||
.GetArray()[0]
|
.GetArray()[0]
|
||||||
@ -145,20 +146,20 @@ void Timezoner::LoadLocalTimesRTree(const std::string &tz_shapes_filename, std::
|
|||||||
for (rapidjson::SizeType i = 0; i < coords_outer_array.Size(); ++i)
|
for (rapidjson::SizeType i = 0; i < coords_outer_array.Size(); ++i)
|
||||||
{
|
{
|
||||||
// polygon.outer().emplace_back(object->padfX[vertex], object->padfY[vertex]);
|
// polygon.outer().emplace_back(object->padfX[vertex], object->padfY[vertex]);
|
||||||
rapidjson::Value &coords = coords_outer_array[i].GetArray();
|
const auto &coords = coords_outer_array[i].GetArray();
|
||||||
polygon.emplace_back(coords[0].GetDouble(), coords[1].GetDouble());
|
polygon.outer().emplace_back(coords[0].GetDouble(), coords[1].GetDouble());
|
||||||
}
|
}
|
||||||
polygons.emplace_back(boost::geometry::return_envelope<box_t>(polygon),
|
polygons.emplace_back(boost::geometry::return_envelope<box_t>(polygon),
|
||||||
local_times.size());
|
local_times.size());
|
||||||
|
|
||||||
// Get time zone name and emplace polygon and local time for the UTC input
|
// Get time zone name and emplace polygon and local time for the UTC input
|
||||||
const auto tzname =
|
const auto tzname =
|
||||||
features[i].GetObject()["properties"].GetObject()["TZID"].GetString();
|
features_array[i].GetObject()["properties"].GetObject()["TZID"].GetString();
|
||||||
local_times.push_back(local_time_t{polygon, get_local_time_in_tz(tzname)});
|
local_times.push_back(local_time_t{polygon, get_local_time_in_tz(tzname)});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
util::Log << "Skipping non-polygon shape in timezone file " + tz_shapes_filename;
|
util::Log() << "Skipping non-polygon shape in timezone file " + tz_shapes_filename;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Create R-tree for collected shape polygons
|
// Create R-tree for collected shape polygons
|
||||||
|
Loading…
Reference in New Issue
Block a user