sqlite: fixup rtree bbox entries to use cumulative extent of multipolygons to avoid contraint errors
This commit is contained in:
parent
bf2c8c4e9f
commit
c0f918114e
1 changed files with 29 additions and 21 deletions
|
@ -242,38 +242,46 @@ public:
|
|||
{
|
||||
boost::ptr_vector<mapnik::geometry_type> paths;
|
||||
mapnik::geometry_utils::from_wkb(paths, data, size, mapnik::wkbAuto);
|
||||
mapnik::box2d<double> bbox;
|
||||
for (unsigned i=0; i<paths.size(); ++i)
|
||||
{
|
||||
mapnik::box2d<double> const& bbox = paths[i].envelope();
|
||||
if (bbox.valid())
|
||||
if (i==0)
|
||||
{
|
||||
|
||||
ps.bind(bbox);
|
||||
|
||||
const int type_oid = rs->column_type(1);
|
||||
if (type_oid != SQLITE_INTEGER)
|
||||
{
|
||||
std::ostringstream error_msg;
|
||||
error_msg << "Sqlite Plugin: invalid type for key field '"
|
||||
<< rs->column_name(1) << "' when creating index '" << index_table
|
||||
<< "' type was: " << type_oid << "";
|
||||
throw mapnik::datasource_exception(error_msg.str());
|
||||
}
|
||||
|
||||
const sqlite_int64 pkid = rs->column_integer64(1);
|
||||
ps.bind(pkid);
|
||||
bbox = paths[i].envelope();
|
||||
}
|
||||
else
|
||||
{
|
||||
bbox.expand_to_include(paths[i].envelope());
|
||||
}
|
||||
}
|
||||
if (bbox.valid())
|
||||
{
|
||||
|
||||
ps.bind(bbox);
|
||||
|
||||
const int type_oid = rs->column_type(1);
|
||||
if (type_oid != SQLITE_INTEGER)
|
||||
{
|
||||
std::ostringstream error_msg;
|
||||
error_msg << "SQLite Plugin: encountered invalid bbox at '"
|
||||
<< rs->column_name(1) << "' == " << rs->column_integer64(1);
|
||||
error_msg << "Sqlite Plugin: invalid type for key field '"
|
||||
<< rs->column_name(1) << "' when creating index '" << index_table
|
||||
<< "' type was: " << type_oid << "";
|
||||
throw mapnik::datasource_exception(error_msg.str());
|
||||
}
|
||||
|
||||
ps.step_next();
|
||||
one_success = true;
|
||||
const sqlite_int64 pkid = rs->column_integer64(1);
|
||||
ps.bind(pkid);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::ostringstream error_msg;
|
||||
error_msg << "SQLite Plugin: encountered invalid bbox at '"
|
||||
<< rs->column_name(1) << "' == " << rs->column_integer64(1);
|
||||
throw mapnik::datasource_exception(error_msg.str());
|
||||
}
|
||||
|
||||
ps.step_next();
|
||||
one_success = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue