diff --git a/src/postgis/postgis.cc b/src/postgis/postgis.cc index 8de61ae70..709d350be 100644 --- a/src/postgis/postgis.cc +++ b/src/postgis/postgis.cc @@ -130,7 +130,6 @@ FeaturesetPtr PostgisDatasource::featuresAll(const CoordTransform& t) const return FeaturesetPtr(0); } - FeaturesetPtr PostgisDatasource::featuresInBox(const CoordTransform& t, const mapnik::Envelope& box) const { @@ -150,12 +149,36 @@ FeaturesetPtr PostgisDatasource::featuresInBox(const CoordTransform& t, s << box.maxx() << " " << box.maxy() << ")'::box3d,"< rs=conn->executeQuery(s.str(),1); - fs=new PostgisFeatureset(rs,t); + fs=new PostgisFeatureset(rs); } } return FeaturesetPtr(fs); } +FeaturesetPtr PostgisDatasource::features(const query& q) const +{ + Featureset *fs=0; + const Envelope& box=q.get_bbox(); + ConnectionManager *mgr=ConnectionManager::instance(); + ref_ptr > pool=mgr->getPool(creator_.id()); + if (pool) + { + const ref_ptr& conn = pool->borrowObject(); + if (conn && conn->isOK()) + { + PoolGuard,ref_ptr > > guard(conn,pool); + std::ostringstream s; + s << "select gid,asbinary("< rs=conn->executeQuery(s.str(),1); + fs=new PostgisFeatureset(rs); + } + } + return FeaturesetPtr(fs); +} FeaturesetPtr PostgisDatasource::featuresAtPoint(const CoordTransform& t, const mapnik::coord2d& pt) const @@ -177,7 +200,7 @@ FeaturesetPtr PostgisDatasource::featuresAtPoint(const CoordTransform& t, s << pt.x << " " << pt.y << ")'::box3d,"< rs=conn->executeQuery(s.str(),1); - fs=new PostgisFeatureset(rs,t); + fs=new PostgisFeatureset(rs); } } return FeaturesetPtr(fs); diff --git a/src/postgis/postgis.hh b/src/postgis/postgis.hh index de8246044..e90d36ec5 100644 --- a/src/postgis/postgis.hh +++ b/src/postgis/postgis.hh @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -//$Id: postgis.hh 68 2004-11-23 22:39:58Z artem $ +//$Id$ #ifndef POSTGIS_HH #define POSTGIS_HH @@ -46,6 +46,8 @@ public: FeaturesetPtr featuresAll(const CoordTransform& t) const; FeaturesetPtr featuresInBox(const CoordTransform& t,const mapnik::Envelope& box) const; FeaturesetPtr featuresAtPoint(const CoordTransform& t,const mapnik::coord2d& pt) const; + FeaturesetPtr features(const query& q) const; + const mapnik::Envelope& envelope() const; PostgisDatasource(const Parameters ¶ms); ~PostgisDatasource(); @@ -59,11 +61,10 @@ class PostgisFeatureset : public Featureset { private: ref_ptr rs_; - CoordTransform t_; mutable int totalGeomSize_; mutable int count_; public: - PostgisFeatureset(const ref_ptr& rs,const CoordTransform& t); + PostgisFeatureset(const ref_ptr& rs); void dispose(); Feature* next(); ~PostgisFeatureset(); diff --git a/src/postgis/postgisfs.cc b/src/postgis/postgisfs.cc index 3917db4f1..233d3dc40 100644 --- a/src/postgis/postgisfs.cc +++ b/src/postgis/postgisfs.cc @@ -21,18 +21,14 @@ #include "postgis.hh" -PostgisFeatureset::PostgisFeatureset(const ref_ptr& rs,const CoordTransform& t) +PostgisFeatureset::PostgisFeatureset(const ref_ptr& rs) : rs_(rs), - t_(t), totalGeomSize_(0), - count_(0) -{ -} - + count_(0) {} Feature* PostgisFeatureset::next() { - VectorFeature *feature=0; + Feature *feature=0; if (rs_->next()) { // read gid,srid,geometry and create feature @@ -43,7 +39,7 @@ Feature* PostgisFeatureset::next() if (geom) { - feature=new VectorFeature(id,geom); + feature=new Feature(id,geom); totalGeomSize_+=size; ++count_; }