shape.input - read shx_file_length in shape_featureset and avoid passing wrong file length by mistake ref #3136
This commit is contained in:
parent
19c1c0afd0
commit
17ace8a3e8
4 changed files with 9 additions and 16 deletions
|
@ -64,7 +64,6 @@ shape_datasource::shape_datasource(parameters const& params)
|
||||||
: datasource (params),
|
: datasource (params),
|
||||||
type_(datasource::Vector),
|
type_(datasource::Vector),
|
||||||
file_length_(0),
|
file_length_(0),
|
||||||
shx_file_length_(0),
|
|
||||||
indexed_(false),
|
indexed_(false),
|
||||||
row_limit_(*params.get<mapnik::value_integer>("row_limit",0)),
|
row_limit_(*params.get<mapnik::value_integer>("row_limit",0)),
|
||||||
desc_(shape_datasource::name(), *params.get<std::string>("encoding","utf-8"))
|
desc_(shape_datasource::name(), *params.get<std::string>("encoding","utf-8"))
|
||||||
|
@ -199,14 +198,6 @@ void shape_datasource::init(shape_io& shape)
|
||||||
const double hiy = header.read_double();
|
const double hiy = header.read_double();
|
||||||
extent_.init(lox, loy, hix, hiy);
|
extent_.init(lox, loy, hix, hiy);
|
||||||
|
|
||||||
if (shape.shx().is_open())
|
|
||||||
{
|
|
||||||
shape_file::record_type shx_header(100);
|
|
||||||
shape.shx().read_record(shx_header);
|
|
||||||
shx_header.skip(6 * 4);
|
|
||||||
shx_file_length_ = shx_header.read_xdr_integer();
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef MAPNIK_LOG
|
#ifdef MAPNIK_LOG
|
||||||
const double zmin = header.read_double();
|
const double zmin = header.read_double();
|
||||||
const double zmax = header.read_double();
|
const double zmax = header.read_double();
|
||||||
|
@ -265,7 +256,6 @@ featureset_ptr shape_datasource::features(query const& q) const
|
||||||
shape_name_,
|
shape_name_,
|
||||||
q.property_names(),
|
q.property_names(),
|
||||||
desc_.get_encoding(),
|
desc_.get_encoding(),
|
||||||
shx_file_length_,
|
|
||||||
row_limit_);
|
row_limit_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -303,7 +293,6 @@ featureset_ptr shape_datasource::features_at_point(coord2d const& pt, double tol
|
||||||
shape_name_,
|
shape_name_,
|
||||||
names,
|
names,
|
||||||
desc_.get_encoding(),
|
desc_.get_encoding(),
|
||||||
shx_file_length_,
|
|
||||||
row_limit_);
|
row_limit_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,6 @@ private:
|
||||||
std::string shape_name_;
|
std::string shape_name_;
|
||||||
shape_io::shapeType shape_type_;
|
shape_io::shapeType shape_type_;
|
||||||
long file_length_;
|
long file_length_;
|
||||||
long shx_file_length_;
|
|
||||||
box2d<double> extent_;
|
box2d<double> extent_;
|
||||||
bool indexed_;
|
bool indexed_;
|
||||||
const int row_limit_;
|
const int row_limit_;
|
||||||
|
|
|
@ -41,19 +41,25 @@ shape_featureset<filterT>::shape_featureset(filterT const& filter,
|
||||||
std::string const& shape_name,
|
std::string const& shape_name,
|
||||||
std::set<std::string> const& attribute_names,
|
std::set<std::string> const& attribute_names,
|
||||||
std::string const& encoding,
|
std::string const& encoding,
|
||||||
long shx_file_length,
|
|
||||||
int row_limit)
|
int row_limit)
|
||||||
: filter_(filter),
|
: filter_(filter),
|
||||||
shape_(shape_name, false),
|
shape_(shape_name, false),
|
||||||
query_ext_(),
|
query_ext_(),
|
||||||
feature_bbox_(),
|
feature_bbox_(),
|
||||||
tr_(new transcoder(encoding)),
|
tr_(new transcoder(encoding)),
|
||||||
shx_file_length_(shx_file_length),
|
shx_file_length_(0),
|
||||||
row_limit_(row_limit),
|
row_limit_(row_limit),
|
||||||
count_(0),
|
count_(0),
|
||||||
ctx_(std::make_shared<mapnik::context_type>())
|
ctx_(std::make_shared<mapnik::context_type>())
|
||||||
{
|
{
|
||||||
shape_.shx().skip(100);
|
if (!shape_.shx().is_open())
|
||||||
|
{
|
||||||
|
throw mapnik::datasource_exception("Shape Plugin: can't open '" + shape_name + ".shx' file");
|
||||||
|
}
|
||||||
|
shape_file::record_type shx_header(100);
|
||||||
|
shape_.shx().read_record(shx_header);
|
||||||
|
shx_header.skip(6 * 4);
|
||||||
|
shx_file_length_ = shx_header.read_xdr_integer();
|
||||||
setup_attributes(ctx_, attribute_names, shape_name, shape_, attr_ids_);
|
setup_attributes(ctx_, attribute_names, shape_name, shape_, attr_ids_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,6 @@ public:
|
||||||
std::string const& shape_file,
|
std::string const& shape_file,
|
||||||
std::set<std::string> const& attribute_names,
|
std::set<std::string> const& attribute_names,
|
||||||
std::string const& encoding,
|
std::string const& encoding,
|
||||||
long shx_file_length,
|
|
||||||
int row_limit);
|
int row_limit);
|
||||||
virtual ~shape_featureset();
|
virtual ~shape_featureset();
|
||||||
feature_ptr next();
|
feature_ptr next();
|
||||||
|
|
Loading…
Add table
Reference in a new issue