1 #ifndef vpgl_geo_camera_h_ 2 #define vpgl_geo_camera_h_ 18 # include <vcl_msvc_warnings.h> 27 #include <vil/vil_image_resource_sptr.h> 75 std::string
type_name()
const override {
return "vpgl_geo_camera"; }
88 void project(
const double x,
const double y,
const double z,
double& u,
double& v)
const override;
91 void backproject(
const double u,
const double v,
double& x,
double& y,
double& z);
94 void translate(
double tx,
double ty,
double z);
103 std::vector<std::vector<double> > tiepoints,
105 bool scale_tag =
false);
108 virtual std::string
is_a()
const {
return std::string(
"vpgl_geo_camera"); }
111 virtual bool is_class(std::string
const& cls)
const 112 {
return cls==
is_a() || cls==std::string(
"vpgl_geo_camera"); }
126 double& lon,
double& lat)
const;
130 void global_to_img(
const double lon,
const double lat,
const double elev,
131 double& u,
double& v)
const;
136 double& x,
double& y)
const;
141 double& u,
double& v)
const;
144 void local_to_utm(
const double x,
const double y,
const double z,
double& e,
double& n,
int&
utm_zone);
148 bool img_four_corners_in_utm(
const unsigned ni,
const unsigned nj,
double elev,
double& e1,
double& n1,
double& e2,
double& n2);
152 void img_to_wgs(
unsigned i,
unsigned j,
unsigned k,
double& lon,
double& lat,
double& elev);
158 void wgs_to_img(
double lon,
double lat,
159 unsigned& i,
unsigned& j);
182 #endif // vpgl_geo_camera_h_ static bool init_geo_camera_from_filename(const std::string &img_name, unsigned ni, unsigned nj, const vpgl_lvcs_sptr &lvcs, vpgl_geo_camera *&camera)
void img_to_global_utm(const double i, const double j, double &x, double &y) const
returns the corresponding geographical coordinates for a given pixel position (i,j).
double pixel_spacing()
the lidar pixel size in meters assumes square pixels.
A geographic coordinate system.
void set_utm(int utm_zone, unsigned northing)
friend std::ostream & operator<<(std::ostream &s, vpgl_geo_camera const &p)
Write camera to stream.
void set_lvcs(vpgl_lvcs_sptr lvcs)
short version() const
Return IO version number;.
vnl_matrix< double > trans_matrix_
void global_utm_to_img(const double x, const double y, int zone, double elev, double &u, double &v) const
returns the corresponding pixel position for given geographical coordinates.
vnl_matrix< double > trans_matrix()
void img_to_global(const double i, const double j, double &lon, double &lat) const
returns the corresponding geographical coordinates for a given pixel position (i,j).
void save_as_tfw(std::string const &tfw_filename)
save the camera as tfw.
void backproject(const double u, const double v, double &x, double &y, double &z)
backprojects an image point into local coordinates (based on lvcs_).
void b_write(vsl_b_ostream &os) const
Binary save self to stream.
void global_to_img(const double lon, const double lat, const double elev, double &u, double &v) const
returns the corresponding pixel position for given geographical coordinates.
virtual std::string is_a() const
Return a platform independent string identifying the class.
friend std::istream & operator>>(std::istream &s, vpgl_geo_camera &p)
Read camera from stream.
vpgl_lvcs_sptr const lvcs()
void set_scale_format(bool scale_tag)
void translate(double tx, double ty, double z)
void local_to_utm(const double x, const double y, const double z, double &e, double &n, int &utm_zone)
returns the corresponding utm location for the given local position.
static bool init_geo_camera(vil_image_resource_sptr const &geotiff_img, const vpgl_lvcs_sptr &lvcs, vpgl_geo_camera *&camera)
uses lvcs to convert local x-y to global longitude and latitude.
std::string type_name() const override
class identity functions for casting.
bool img_four_corners_in_utm(const unsigned ni, const unsigned nj, double elev, double &e1, double &n1, double &e2, double &n2)
static bool init_geo_camera(vil_image_resource_sptr const geotiff_img, vpgl_geo_camera *&camera)
Assumes geographic coordinates are global.
~vpgl_geo_camera() override=default
vpgl_geo_camera()
creates identity matrix and all zero tiepoints.
static bool comp_trans_matrix(double sx1, double sy1, double sz1, std::vector< std::vector< double > > tiepoints, vnl_matrix< double > &trans_matrix, bool scale_tag=false)
static bool init_geo_camera(std::string tfw_name, int utm_zone, unsigned northing, vpgl_geo_camera *&camera)
init without lvcs. Assumes geographic coordinates are global.
vpgl_geo_camera(vnl_matrix< double > trans_matrix, vpgl_lvcs_sptr lvcs)
if scale tag is false be sure that trans_matrix[0][0] and trans_matrix[1][1] is 1....
vpgl_lvcs_sptr lvcs_
lvcs of world parameters.
void project(const double x, const double y, const double z, double &u, double &v) const override
Implementing the generic camera interface of vpgl_camera.
void b_read(vsl_b_istream &is)
Binary load self from stream.
bool operator==(vpgl_geo_camera const &rhs) const
void img_to_wgs(unsigned i, unsigned j, unsigned k, double &lon, double &lat, double &elev)
returns the corresponding geographical coordinate (lon, lat, elev) for a given pixel position (i,...
virtual bool is_class(std::string const &cls) const
Return true if the argument matches the string identifying the class or any parent class.