geojson.input: minor code adjustments
- Avoids making copy of inline string to save memory - Moves duplicated code out of #ifdef to be more readible
This commit is contained in:
parent
fa44f0e247
commit
acd90042fb
2 changed files with 11 additions and 22 deletions
|
@ -113,18 +113,14 @@ geojson_datasource::geojson_datasource(parameters const& params)
|
||||||
desc_(geojson_datasource::name(),
|
desc_(geojson_datasource::name(),
|
||||||
*params.get<std::string>("encoding","utf-8")),
|
*params.get<std::string>("encoding","utf-8")),
|
||||||
filename_(),
|
filename_(),
|
||||||
inline_string_(),
|
from_inline_string_(false),
|
||||||
extent_(),
|
extent_(),
|
||||||
features_(),
|
features_(),
|
||||||
tree_(nullptr),
|
tree_(nullptr),
|
||||||
num_features_to_query_(*params.get<mapnik::value_integer>("num_features_to_query",5))
|
num_features_to_query_(*params.get<mapnik::value_integer>("num_features_to_query",5))
|
||||||
{
|
{
|
||||||
boost::optional<std::string> inline_string = params.get<std::string>("inline");
|
boost::optional<std::string> inline_string = params.get<std::string>("inline");
|
||||||
if (inline_string)
|
if (!inline_string)
|
||||||
{
|
|
||||||
inline_string_ = *inline_string;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
boost::optional<std::string> file = params.get<std::string>("file");
|
boost::optional<std::string> file = params.get<std::string>("file");
|
||||||
if (!file) throw mapnik::datasource_exception("GeoJSON Plugin: missing <file> parameter");
|
if (!file) throw mapnik::datasource_exception("GeoJSON Plugin: missing <file> parameter");
|
||||||
|
@ -137,10 +133,11 @@ geojson_datasource::geojson_datasource(parameters const& params)
|
||||||
has_disk_index_ = mapnik::util::exists(filename_ + ".index");
|
has_disk_index_ = mapnik::util::exists(filename_ + ".index");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!inline_string_.empty())
|
if (inline_string)
|
||||||
{
|
{
|
||||||
char const* start = inline_string_.c_str();
|
from_inline_string_ = true;
|
||||||
char const* end = start + inline_string_.size();
|
char const* start = inline_string->c_str();
|
||||||
|
char const* end = start + inline_string->size();
|
||||||
parse_geojson(start, end);
|
parse_geojson(start, end);
|
||||||
}
|
}
|
||||||
else if (has_disk_index_)
|
else if (has_disk_index_)
|
||||||
|
@ -162,14 +159,6 @@ geojson_datasource::geojson_datasource(parameters const& params)
|
||||||
std::fread(&file_buffer[0], file.size(), 1, file.get());
|
std::fread(&file_buffer[0], file.size(), 1, file.get());
|
||||||
char const* start = file_buffer.c_str();
|
char const* start = file_buffer.c_str();
|
||||||
char const* end = start + file_buffer.length();
|
char const* end = start + file_buffer.length();
|
||||||
if (cache_features_)
|
|
||||||
{
|
|
||||||
parse_geojson(start, end);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
initialise_index(start, end);
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
boost::optional<mapnik::mapped_region_ptr> mapped_region =
|
boost::optional<mapnik::mapped_region_ptr> mapped_region =
|
||||||
mapnik::mapped_memory_cache::instance().find(filename_, false);
|
mapnik::mapped_memory_cache::instance().find(filename_, false);
|
||||||
|
@ -180,6 +169,7 @@ geojson_datasource::geojson_datasource(parameters const& params)
|
||||||
|
|
||||||
char const* start = reinterpret_cast<char const*>((*mapped_region)->get_address());
|
char const* start = reinterpret_cast<char const*>((*mapped_region)->get_address());
|
||||||
char const* end = start + (*mapped_region)->get_size();
|
char const* end = start + (*mapped_region)->get_size();
|
||||||
|
#endif
|
||||||
if (cache_features_)
|
if (cache_features_)
|
||||||
{
|
{
|
||||||
parse_geojson(start, end);
|
parse_geojson(start, end);
|
||||||
|
@ -188,7 +178,6 @@ geojson_datasource::geojson_datasource(parameters const& params)
|
||||||
{
|
{
|
||||||
initialise_index(start, end);
|
initialise_index(start, end);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -276,7 +265,7 @@ void geojson_datasource::initialise_index(Iterator start, Iterator end)
|
||||||
space);
|
space);
|
||||||
if (!result || itr != end)
|
if (!result || itr != end)
|
||||||
{
|
{
|
||||||
if (!inline_string_.empty()) throw mapnik::datasource_exception("geojson_datasource: Failed to parse GeoJSON file from in-memory string");
|
if (from_inline_string_) throw mapnik::datasource_exception("geojson_datasource: Failed to parse GeoJSON file from in-memory string");
|
||||||
else throw mapnik::datasource_exception("geojson_datasource: Failed to parse GeoJSON file '" + filename_ + "'");
|
else throw mapnik::datasource_exception("geojson_datasource: Failed to parse GeoJSON file '" + filename_ + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -368,7 +357,7 @@ void geojson_datasource::parse_geojson(Iterator start, Iterator end)
|
||||||
space);
|
space);
|
||||||
if (!result || itr != end)
|
if (!result || itr != end)
|
||||||
{
|
{
|
||||||
if (!inline_string_.empty()) throw mapnik::datasource_exception("geojson_datasource: Failed parse GeoJSON file from in-memory string");
|
if (from_inline_string_) throw mapnik::datasource_exception("geojson_datasource: Failed parse GeoJSON file from in-memory string");
|
||||||
else throw mapnik::datasource_exception("geojson_datasource: Failed parse GeoJSON file '" + filename_ + "'");
|
else throw mapnik::datasource_exception("geojson_datasource: Failed parse GeoJSON file '" + filename_ + "'");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -382,7 +371,7 @@ void geojson_datasource::parse_geojson(Iterator start, Iterator end)
|
||||||
space);
|
space);
|
||||||
if (!result || itr != end)
|
if (!result || itr != end)
|
||||||
{
|
{
|
||||||
if (!inline_string_.empty()) throw mapnik::datasource_exception("geojson_datasource: Failed parse GeoJSON file from in-memory string");
|
if (from_inline_string_) throw mapnik::datasource_exception("geojson_datasource: Failed parse GeoJSON file from in-memory string");
|
||||||
else throw mapnik::datasource_exception("geojson_datasource: Failed parse GeoJSON file '" + filename_ + "'");
|
else throw mapnik::datasource_exception("geojson_datasource: Failed parse GeoJSON file '" + filename_ + "'");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,7 +98,7 @@ private:
|
||||||
mapnik::datasource::datasource_t type_;
|
mapnik::datasource::datasource_t type_;
|
||||||
mapnik::layer_descriptor desc_;
|
mapnik::layer_descriptor desc_;
|
||||||
std::string filename_;
|
std::string filename_;
|
||||||
std::string inline_string_;
|
bool from_inline_string_;
|
||||||
mapnik::box2d<double> extent_;
|
mapnik::box2d<double> extent_;
|
||||||
std::vector<mapnik::feature_ptr> features_;
|
std::vector<mapnik::feature_ptr> features_;
|
||||||
std::unique_ptr<spatial_index_type> tree_;
|
std::unique_ptr<spatial_index_type> tree_;
|
||||||
|
|
Loading…
Reference in a new issue