+ use tol in feature_at_point

This commit is contained in:
artemp 2013-05-17 16:24:32 +01:00
parent 9348fffa8d
commit f2132fa7bb
3 changed files with 8 additions and 3 deletions

View file

@ -82,7 +82,7 @@ void ogr_datasource::init(mapnik::parameters const& params)
// initialize ogr formats
OGRRegisterAll();
boost::optional<std::string> file = params.get<std::string>("file");
boost::optional<std::string> string = params.get<std::string>("string");
if (! file && ! string)
@ -525,7 +525,7 @@ featureset_ptr ogr_datasource::features_at_point(coord2d const& pt, double tol)
if (indexed_)
{
filter_at_point filter(pt);
filter_at_point filter(pt, tol);
return featureset_ptr(new ogr_index_featureset<filter_at_point> (ctx,
*layer,

View file

@ -59,7 +59,8 @@ ogr_index_featureset<filterT>::ogr_index_featureset(mapnik::context_ptr const &
layerdef_(layer.GetLayerDefn()),
filter_(filter),
tr_(new transcoder(encoding)),
fidcolumn_(layer_.GetFIDColumn())
fidcolumn_(layer_.GetFIDColumn()),
feature_envelope_()
{
boost::optional<mapnik::mapped_region_ptr> memory = mapnik::mapped_memory_cache::instance().find(index_file, true);
@ -104,6 +105,9 @@ feature_ptr ogr_index_featureset<filterT>::next()
OGRGeometry* geom=poFeature->GetGeometryRef();
if (geom && !geom->IsEmpty())
{
geom->getEnvelope(&feature_envelope_);
if (!filter_.pass(mapnik::box2d<double>(feature_envelope_.MinX,feature_envelope_.MinY,
feature_envelope_.MaxX,feature_envelope_.MaxY))) continue;
ogr_converter::convert_geometry (geom, feature);
}
else

View file

@ -50,6 +50,7 @@ private:
std::vector<int>::iterator itr_;
boost::scoped_ptr<mapnik::transcoder> tr_;
const char* fidcolumn_;
OGREnvelope feature_envelope_;
};
#endif // OGR_INDEX_FEATURESET_HPP