This is an automated email from the git hooks/post-receive script. sebastic-guest pushed a commit to branch upstream-master in repository pktools.
commit 9ede8a0c10cc14232720b29cbabbe3d362a3da51 Author: Pieter Kempeneers <kempe...@gmail.com> Date: Sun Jan 26 12:52:49 2014 +0100 pkcrop corrected bounding box in case of user defined dx dy, support crop for non-georeferenced i mages --- ChangeLog | 4 ++++ src/apps/pkcrop.cc | 25 +++++++++++++++---------- src/apps/pkinfo.cc | 2 +- src/imageclasses/ImgReaderGdal.cc | 12 ++++++------ src/imageclasses/ImgReaderGdal.h | 4 ++-- src/imageclasses/ImgWriterGdal.cc | 28 ++++++++++++++-------------- src/imageclasses/ImgWriterGdal.h | 4 ++-- 7 files changed, 44 insertions(+), 35 deletions(-) diff --git a/ChangeLog b/ChangeLog index 72fd89f..9709d29 100755 --- a/ChangeLog +++ b/ChangeLog @@ -246,8 +246,12 @@ version 2.5 new utility (moved from pklas2ig) version 2.5.1 + - pkinfo + -stats instead of -stat to be conform to gdalinfo - pkextract support sum rule - pkfilter support of density filter debug down option (forgot to adapt xres and yres) + - pkcrop + correct bounding box when dx_opt and dy_opt are set diff --git a/src/apps/pkcrop.cc b/src/apps/pkcrop.cc index 899c415..d27483b 100644 --- a/src/apps/pkcrop.cc +++ b/src/apps/pkcrop.cc @@ -18,6 +18,7 @@ You should have received a copy of the GNU General Public License along with pktools. If not, see <http://www.gnu.org/licenses/>. ***********************************************************************/ #include <assert.h> +#include <cstdlib> #include <string> #include <list> #include <iostream> @@ -144,8 +145,11 @@ int main(int argc, char *argv[]) if(dy_opt.size()) dy=dy_opt[0]; + bool isGeoRef=false; for(int iimg=0;iimg<input_opt.size();++iimg){ imgReader.open(input_opt[iimg]); + if(!isGeoRef) + isGeoRef=imgReader.isGeoRef(); if(dx_opt.empty()){ if(!iimg||imgReader.getDeltaX()<dx) dx=imgReader.getDeltaX(); @@ -200,15 +204,15 @@ int main(int argc, char *argv[]) } else if(cx_opt.size()&&cy_opt.size()&&nx_opt.size()&&ny_opt.size()){ ulx_opt[0]=cx_opt[0]-nx_opt[0]/2.0; - uly_opt[0]=cy_opt[0]+ny_opt[0]/2.0; + uly_opt[0]=(isGeoRef) ? cy_opt[0]+ny_opt[0]/2.0 : cy_opt[0]-ny_opt[0]/2.0; lrx_opt[0]=cx_opt[0]+nx_opt[0]/2.0; - lry_opt[0]=cy_opt[0]-ny_opt[0]/2.0; + lry_opt[0]=(isGeoRef) ? cy_opt[0]-ny_opt[0]/2.0 : cy_opt[0]+ny_opt[0]/2.0; } else if(cx_opt.size()&&cy_opt.size()&&ns_opt.size()&&nl_opt.size()){ ulx_opt[0]=cx_opt[0]-ns_opt[0]*dx/2.0; - uly_opt[0]=cy_opt[0]+nl_opt[0]*dy/2.0; + uly_opt[0]=(isGeoRef) ? cy_opt[0]+nl_opt[0]*dy/2.0 : cy_opt[0]-nl_opt[0]*dy/2.0; lrx_opt[0]=cx_opt[0]+ns_opt[0]*dx/2.0; - lry_opt[0]=cy_opt[0]-nl_opt[0]*dy/2.0; + lry_opt[0]=(isGeoRef) ? cy_opt[0]-nl_opt[0]*dy/2.0 : cy_opt[0]+nl_opt[0]*dy/2.0; } if(ulx_opt[0]<cropulx) cropulx=ulx_opt[0]; @@ -288,8 +292,9 @@ int main(int argc, char *argv[]) } imgReader.geo2image(cropulx+(magicX-1.0)*imgReader.getDeltaX(),cropuly-(magicY-1.0)*imgReader.getDeltaY(),uli,ulj); imgReader.geo2image(croplrx+(magicX-2.0)*imgReader.getDeltaX(),croplry-(magicY-2.0)*imgReader.getDeltaY(),lri,lrj); - // ncropcol=ceil((croplrx-cropulx)/dx); - // ncroprow=ceil((cropuly-croplry)/dy); + //test + ncropcol=abs(static_cast<int>(ceil((croplrx-cropulx)/dx))); + ncroprow=abs(static_cast<int>(ceil((cropuly-croplry)/dy))); } else{ double magicX=1,magicY=1; @@ -309,8 +314,8 @@ int main(int argc, char *argv[]) imgReader.geo2image(cropulx+(magicX-1.0)*imgReader.getDeltaX(),cropuly-(magicY-1.0)*imgReader.getDeltaY(),uli,ulj); imgReader.geo2image(croplrx+(magicX-2.0)*imgReader.getDeltaX(),croplry-(magicY-2.0)*imgReader.getDeltaY(),lri,lrj); - ncropcol=ceil((croplrx-cropulx)/dx); - ncroprow=ceil((cropuly-croplry)/dy); + ncropcol=abs(static_cast<int>(ceil((croplrx-cropulx)/dx))); + ncroprow=abs(static_cast<int>(ceil((cropuly-croplry)/dy))); uli=floor(uli); ulj=floor(ulj); lri=floor(lri); @@ -373,7 +378,7 @@ int main(int argc, char *argv[]) gt[2]=0; gt[3]=cropuly; gt[4]=0; - gt[5]=-dy; + gt[5]=(imgReader.isGeoRef())? -dy : dy; imgWriter.setGeoTransform(gt); if(projection_opt.size()){ if(verbose_opt[0]) @@ -483,7 +488,7 @@ int main(int argc, char *argv[]) imgReader.readData(readBuffer,GDT_Float64,startCol,endCol,readRow,readBand,theResample); // for(int ib=0;ib<ncropcol;++ib){ for(int ib=0;ib<imgWriter.nrOfCol();++ib){ - assert(imgWriter.image2geo(ib,irow,x,y)); + imgWriter.image2geo(ib,irow,x,y); //lookup corresponding row for irow in this file imgReader.geo2image(x,y,readCol,readRow); if(readCol<0||readCol>=imgReader.nrOfCol()){ diff --git a/src/apps/pkinfo.cc b/src/apps/pkinfo.cc index e2d9294..c1dfd41 100644 --- a/src/apps/pkinfo.cc +++ b/src/apps/pkinfo.cc @@ -42,7 +42,7 @@ int main(int argc, char *argv[]) Optionpk<bool> minmax_opt("mm", "minmax", "Shows min and max value of the image ", false,0); Optionpk<bool> min_opt("min", "min", "Shows min value of the image ", false,0); Optionpk<bool> max_opt("max", "max", "Shows max value of the image ", false,0); - Optionpk<bool> stat_opt("stat", "stat", "Shows statistics (min,max, mean and stdDev of the image)", false,0); + Optionpk<bool> stat_opt("stats", "stats", "Shows statistics (min,max, mean and stdDev of the image)", false,0); Optionpk<double> src_min_opt("src_min", "src_min", "Sets minimum for histogram (does not calculate min value: use -mm instead)"); Optionpk<double> src_max_opt("src_max", "src_max", "Sets maximum for histogram (does not calculate min value: use -mm instead)"); Optionpk<bool> relative_opt("rel", "rel", "Calculates relative histogram in percentage", false,0); diff --git a/src/imageclasses/ImgReaderGdal.cc b/src/imageclasses/ImgReaderGdal.cc index 7a7cc76..6bd8093 100644 --- a/src/imageclasses/ImgReaderGdal.cc +++ b/src/imageclasses/ImgReaderGdal.cc @@ -23,7 +23,7 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>. #include <iostream> ImgReaderGdal::ImgReaderGdal(void) - : m_gds(NULL), m_isGeoRef(false), m_ncol(0), m_nrow(0), m_nband(0) + : m_gds(NULL), m_ncol(0), m_nrow(0), m_nband(0) {} void ImgReaderGdal::open(const std::string& filename)//, double magicX, double magicY) @@ -56,7 +56,7 @@ void ImgReaderGdal::setCodec()//double magicX, double magicY) m_ncol= m_gds->GetRasterXSize(); m_nrow= m_gds->GetRasterYSize(); m_nband= m_gds->GetRasterCount(); - m_isGeoRef=( static_cast<std::string>(m_gds->GetProjectionRef()) != "" ); + // m_isGeoRef=( static_cast<std::string>(m_gds->GetProjectionRef()) != "" ); // m_magic_x=magicX; // m_magic_y=magicY; double adfGeoTransform[6]; @@ -242,7 +242,7 @@ bool ImgReaderGdal::getBoundingBox(double& ulx, double& uly, double& lrx, double uly=gt[3]; lrx=gt[0]+nrOfCol()*gt[1]+nrOfRow()*gt[2]; lry=gt[3]+nrOfCol()*gt[4]+nrOfRow()*gt[5]; - if(m_isGeoRef){ + if(isGeoRef()){ // ulx=m_ulx; // uly=m_uly; // lrx=ulx+nrOfCol()*m_delta_x; @@ -272,7 +272,7 @@ bool ImgReaderGdal::getCentrePos(double& x, double& y) const //adfGeotransform[5]: $-cos(\alpha)\cdot\textrm{Yres}$ x=gt[0]+(nrOfCol()/2.0)*gt[1]+(nrOfRow()/2.0)*gt[2]; y=gt[3]+(nrOfCol()/2.0)*gt[4]+(nrOfRow()/2.0)*gt[5]; - if(m_isGeoRef){ + if(isGeoRef()){ // x=m_ulx+(nrOfCol()/2.0)*m_delta_x; // y=m_uly-(nrOfRow()/2.0)*m_delta_y; return true; @@ -304,7 +304,7 @@ bool ImgReaderGdal::geo2image(double x, double y, double& i, double& j) const i=(x-gt[0]-gt[2]/gt[5]*(y-gt[3]))/denom; j=(y-gt[3]-gt[4]*(x-gt[0]-gt[2]/gt[5]*(y-gt[3]))/denom)/gt[5]; } - if(m_isGeoRef){ + if(isGeoRef()){ // double ulx=m_ulx; // double uly=m_uly; // i=(x-ulx)/m_delta_x; @@ -334,7 +334,7 @@ bool ImgReaderGdal::image2geo(double i, double j, double& x, double& y) const x=gt[0]+(0.5+i)*gt[1]+(0.5+j)*gt[2]; y=gt[3]+(0.5+i)*gt[4]+(0.5+j)*gt[5]; - if(m_isGeoRef){ + if(isGeoRef()){ // x=m_ulx+(0.5+i)*m_delta_x; // y=m_uly-(0.5+j)*m_delta_y; return true; diff --git a/src/imageclasses/ImgReaderGdal.h b/src/imageclasses/ImgReaderGdal.h index e32e02b..adf903c 100644 --- a/src/imageclasses/ImgReaderGdal.h +++ b/src/imageclasses/ImgReaderGdal.h @@ -41,7 +41,7 @@ public: int nrOfCol(void) const { return m_ncol;}; int nrOfRow(void) const { return m_nrow;}; int nrOfBand(void) const { return m_nband;}; - bool isGeoRef() const {return m_isGeoRef;}; + bool isGeoRef() const {double gt[6];getGeoTransform(gt);if(gt[5]<0) return true;else return false;}; std::string getProjection(void) const; std::string getProjectionRef(void) const; std::string getGeoTransform() const; @@ -127,7 +127,7 @@ protected: /* double m_uly; */ /* double m_delta_x; */ /* double m_delta_y; */ - bool m_isGeoRef; + /* bool m_isGeoRef; */ std::vector<double> m_noDataValues; std::vector<double> m_scale; std::vector<double> m_offset; diff --git a/src/imageclasses/ImgWriterGdal.cc b/src/imageclasses/ImgWriterGdal.cc index 5569bb3..f5f9bc0 100644 --- a/src/imageclasses/ImgWriterGdal.cc +++ b/src/imageclasses/ImgWriterGdal.cc @@ -29,7 +29,7 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>. //--------------------------------------------------------------------------- ImgWriterGdal::ImgWriterGdal(void) - : m_gds(NULL), m_isGeoRef(false), m_ncol(0), m_nrow(0), m_nband(0) + : m_gds(NULL), m_ncol(0), m_nrow(0), m_nband(0) {} // ImgWriterGdal::ImgWriterGdal(void) @@ -46,7 +46,7 @@ ImgWriterGdal::~ImgWriterGdal(void) //--------------------------------------------------------------------------- void ImgWriterGdal::open(const std::string& filename, const ImgReaderGdal& imgSrc, const std::vector<std::string>& options) { - m_isGeoRef=imgSrc.isGeoRef(); + // m_isGeoRef=imgSrc.isGeoRef(); m_filename=filename; m_ncol=imgSrc.nrOfCol(); m_nrow=imgSrc.nrOfRow(); @@ -76,7 +76,7 @@ void ImgWriterGdal::open(const std::string& filename, const ImgReaderGdal& imgSr void ImgWriterGdal::open(const std::string& filename, int ncol, int nrow, int nband, const GDALDataType& dataType, const std::string& imageType, const std::vector<std::string>& options) { - m_isGeoRef=false; + // m_isGeoRef=false; m_filename = filename; m_ncol = ncol; m_nrow = nrow; @@ -124,12 +124,12 @@ void ImgWriterGdal::setCodec(const ImgReaderGdal& imgSrc){ // interleaveList << "INTERLEAVE=" << m_interleave; // papszOptions = CSLAddString(papszOptions,(interleaveList.str()).c_str()); m_gds=poDriver->Create(m_filename.c_str(),m_ncol,m_nrow,m_nband,m_type,papszOptions); - if(imgSrc.isGeoRef()){ + // if(imgSrc.isGeoRef()){ setProjection(imgSrc.getProjection()); double gt[6]; imgSrc.getGeoTransform(gt); setGeoTransform(gt); - } + // } m_gds->SetMetadata(imgSrc.getMetadata() ); m_gds->SetMetadataItem( "TIFFTAG_DOCUMENTNAME", m_filename.c_str()); std::string versionString="pktools "; @@ -263,7 +263,7 @@ std::string ImgWriterGdal::getProjection(void) const //--------------------------------------------------------------------------- void ImgWriterGdal::setGeoTransform(double* gt){ - m_isGeoRef=true; + // m_isGeoRef=true; m_gt[0]=gt[0]; m_gt[1]=gt[1]; m_gt[2]=gt[2]; @@ -304,8 +304,8 @@ void ImgWriterGdal::copyGeoTransform(const ImgReaderGdal& imgSrc) std::string ImgWriterGdal::setProjectionProj4(const std::string& projection) { - if(!m_isGeoRef) - m_isGeoRef=true; + // if(!m_isGeoRef) + // m_isGeoRef=true; OGRSpatialReference theRef; theRef.SetFromUserInput(projection.c_str()); @@ -339,8 +339,8 @@ std::string ImgWriterGdal::setProjectionProj4(const std::string& projection) void ImgWriterGdal::setProjection(const std::string& projection) { - if(!m_isGeoRef) - m_isGeoRef=true; + // if(!m_isGeoRef) + // m_isGeoRef=true; OGRSpatialReference oSRS; char *pszSRS_WKT = NULL; assert(m_gds); @@ -384,7 +384,7 @@ bool ImgWriterGdal::getBoundingBox(double& ulx, double& uly, double& lrx, double uly=gt[3]; lrx=gt[0]+nrOfCol()*gt[1]+nrOfRow()*gt[2]; lry=gt[3]+nrOfCol()*gt[4]+nrOfRow()*gt[5]; - if(m_isGeoRef){ + if(isGeoRef()){ // ulx=m_ulx; // uly=m_uly; // lrx=ulx+nrOfCol()*m_delta_x; @@ -414,7 +414,7 @@ bool ImgWriterGdal::getCentrePos(double& x, double& y) const //adfGeotransform[5]: $-cos(\alpha)\cdot\textrm{Yres}$ x=gt[0]+(nrOfCol()/2.0)*gt[1]+(nrOfRow()/2.0)*gt[2]; y=gt[3]+(nrOfCol()/2.0)*gt[4]+(nrOfRow()/2.0)*gt[5]; - if(m_isGeoRef){ + if(isGeoRef()){ // x=m_ulx+nrOfCol()/2.0*m_delta_x; // y=m_uly-nrOfRow()/2.0*m_delta_y; return true; @@ -442,7 +442,7 @@ bool ImgWriterGdal::geo2image(double x, double y, double& i, double& j) const i=(x-gt[0]-gt[2]/gt[5]*(y-gt[3]))/denom; j=(y-gt[3]-gt[4]*(x-gt[0]-gt[2]/gt[5]*(y-gt[3]))/denom)/gt[5]; } - if(m_isGeoRef){ + if(isGeoRef()){ // double ulx=m_ulx; // double uly=m_uly; // i=(x-ulx)/m_delta_x; @@ -473,7 +473,7 @@ bool ImgWriterGdal::image2geo(double i, double j, double& x, double& y) const x=gt[0]+(0.5+i)*gt[1]+(0.5+j)*gt[2]; y=gt[3]+(0.5+i)*gt[4]+(0.5+j)*gt[5]; - if(m_isGeoRef){ + if(isGeoRef()){ // x=m_ulx+(0.5+i)*m_delta_x; // y=m_uly-(0.5+j)*m_delta_y; return true; diff --git a/src/imageclasses/ImgWriterGdal.h b/src/imageclasses/ImgWriterGdal.h index 10fc7a5..98da98b 100644 --- a/src/imageclasses/ImgWriterGdal.h +++ b/src/imageclasses/ImgWriterGdal.h @@ -60,7 +60,7 @@ public: bool covers(double ulx, double uly, double lrx, double lry) const; bool geo2image(double x, double y, double& i, double& j) const; bool image2geo(double i, double j, double& x, double& y) const; - bool isGeoRef() const {return m_isGeoRef;}; + bool isGeoRef() const {double gt[6];getGeoTransform(gt);if(gt[5]<0) return true;else return false;}; // void getMagicPixel(double& x, double& y) const {x=m_magic_x;y=m_magic_y;}; double getDeltaX(void) const {double gt[6];getGeoTransform(gt);return gt[1];}; double getDeltaY(void) const {double gt[6];getGeoTransform(gt);return -gt[5];}; @@ -92,7 +92,7 @@ protected: /* double m_uly; */ /* double m_delta_x; */ /* double m_delta_y; */ - bool m_isGeoRef; + /* bool m_isGeoRef; */ // std::string m_interleave; // std::string m_compression; std::vector<std::string> m_options; -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/pktools.git _______________________________________________ Pkg-grass-devel mailing list Pkg-grass-devel@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel