move loop terminatiion condition to the top and avoid potential infinite loop when if (content_length != shp.read_xdr_integer())
+ Track empty
shapes and don't create *.index when there is no non-empty geometries
(#3184)
This commit is contained in:
parent
7aa97628e0
commit
c32166c71f
1 changed files with 25 additions and 19 deletions
|
@ -162,7 +162,7 @@ int main (int argc,char** argv)
|
||||||
mapnik::quad_tree<int> tree(extent, depth, ratio);
|
mapnik::quad_tree<int> tree(extent, depth, ratio);
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
while (true)
|
while (shx.is_good() && pos <= file_length + 4)
|
||||||
{
|
{
|
||||||
int offset = shx.read_xdr_integer();
|
int offset = shx.read_xdr_integer();
|
||||||
int content_length = shx.read_xdr_integer();
|
int content_length = shx.read_xdr_integer();
|
||||||
|
@ -189,34 +189,40 @@ int main (int argc,char** argv)
|
||||||
{
|
{
|
||||||
shp.read_envelope(item_ext);
|
shp.read_envelope(item_ext);
|
||||||
}
|
}
|
||||||
|
|
||||||
tree.insert(offset * 2,item_ext);
|
|
||||||
|
|
||||||
if (verbose)
|
if (verbose)
|
||||||
{
|
{
|
||||||
std::clog << "record number " << record_number << " box=" << item_ext << std::endl;
|
std::clog << "record number " << record_number << " box=" << item_ext << std::endl;
|
||||||
}
|
}
|
||||||
++count;
|
if (item_ext.valid())
|
||||||
if (pos >= file_length) break;
|
{
|
||||||
|
tree.insert(offset * 2,item_ext);
|
||||||
|
++count;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::clog << " number shapes=" << count << std::endl;
|
if (count > 0)
|
||||||
|
|
||||||
std::fstream file((shapename+".index").c_str(),
|
|
||||||
std::ios::in | std::ios::out | std::ios::trunc | std::ios::binary);
|
|
||||||
if (!file)
|
|
||||||
{
|
{
|
||||||
std::clog << "cannot open index file for writing file \""
|
std::clog << " number shapes=" << count << std::endl;
|
||||||
<< (shapename+".index") << "\"" << std::endl;
|
std::fstream file((shapename+".index").c_str(),
|
||||||
|
std::ios::in | std::ios::out | std::ios::trunc | std::ios::binary);
|
||||||
|
if (!file)
|
||||||
|
{
|
||||||
|
std::clog << "cannot open index file for writing file \""
|
||||||
|
<< (shapename+".index") << "\"" << std::endl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tree.trim();
|
||||||
|
std::clog << " number nodes=" << tree.count() << std::endl;
|
||||||
|
file.exceptions(std::ios::failbit | std::ios::badbit);
|
||||||
|
tree.write(file);
|
||||||
|
file.flush();
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tree.trim();
|
std::clog << "No non-empty geometries in shapefile" << std::endl;
|
||||||
std::clog << " number nodes=" << tree.count() << std::endl;
|
|
||||||
file.exceptions(std::ios::failbit | std::ios::badbit);
|
|
||||||
tree.write(file);
|
|
||||||
file.flush();
|
|
||||||
file.close();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue