[Proj] False Easting & Northing for LAEA?

Eric Miller EMiller at dfg.ca.gov
Mon Apr 9 08:51:37 PDT 2012


I think you want "x_0" and "y_0".
-- 

Eric G. Miller
Software Developer
CA Dept. of Fish & Game


>>> On 4/9/2012 at  7:07 AM, Bob Fischer <robert.p.fischer-1 at nasa.gov> wrote:
> Hello,
> 
> I'm pretty new to Proj.4.  I'm having a bit of trouble with false 
> easting and northing.  See code below (using a simple C++ wrapper):
> 
>     const double D2R = M_PI / 180.0;
> 
>      double proj_lon_0 = -40;
>      double proj_lat_0 = 74;
>      char sproj[100];
>      sprintf(sproj, "+proj=laea +lon_0=%f +lat_0=%f +x0=1000000 
> +y0=1700000 +ellps=sphere",
>          proj_lon_0, proj_lat_0);
>      printf("Using projection: \"%s\"\n", sproj);
>      Proj proj(sproj);
>      printf("Using full projection: \"%s\"\n", proj.get_def().c_str());
> 
> The output is:
> 
> Using projection: "+proj=laea +lon_0=-40.000000 +lat_0=74.000000 
> +x0=1000000 +y0=1700000 +ellps=sphere"
> Using full projection: " +proj=laea +lon_0=-40.000000 +lat_0=74.000000 
> +ellps=sphere"
> 
> Note that my false easting/northing has been removed from my proj.4 
> string!  The fact that no false easting/northing is being used is 
> confirmed when I try to transform a point:
> 
>      double lon00 = -40;
>      double lat00 = 74;
>      double xp,yp;
>      int err = transform(llproj, proj, lon00*D2R, lat00*D2R, xp, yp);
>      printf("Proj.4 transform 00 -> (%f, %f) (err = %d)\n", xp, yp, err);
> 
> Output is:
> 
>    Proj.4 transform 00 -> (0.000000, -0.000000) (err = 0)
> 
> Any ideas on why I'm not getting a false easting/northing here?  I can 
> certainly work around the problem, but it would be nice if it could work.
> 
> Thanks!
> -- Bob
> 
> (C++ wrapper is included below, for reference)
> 
> 
> 
> /** C++ API for proj.4 Projection Library.
> Copyright (c) 2012 by Robert Fischer: robert.fischer at nasa.gov 
> April 5, 2012
> 
>   Permission is hereby granted, free of charge, to any person obtaining a
>   copy of this software and associated documentation files (the "Software"),
>   to deal in the Software without restriction, including without limitation
>   the rights to use, copy, modify, merge, publish, distribute, sublicense,
>   and/or sell copies of the Software, and to permit persons to whom the
>   Software is furnished to do so, subject to the following conditions:
> 
>   The above copyright notice and this permission notice shall be included
>   in all copies or substantial portions of the Software.
> 
>   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
>   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 
> MERCHANTABILITY,
>   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
>   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
>   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
>   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
>   DEALINGS IN THE SOFTWARE.
> */
> 
> #ifndef PROJPP_HPP
> #define PROJPP_HPP
> 
> #include <proj_api.h>
> 
> 
> #if 0
> class ProjContext;
> 
> class ProjStatic {
> public:
>      ProjContext const defaultContext;
> 
>      ProjStatic();
> };
> extern ProjStatic projStatic;
> 
> 
> class ProjContext {
>      projCtx ctx;
> 
> public :
> 
> 
> };
> 
> #endif
> 
> namespace giss {
> 
> class Proj {
>      projPJ pj;
> 
>      explicit Proj(projPJ _pj) : pj(_pj) {}
> 
> public:
>      friend int transform(Proj const &src, Proj const &dest,
>          long point_count, int point_offset,
>          double *x, double *y, double *z);
> 
> 
>      // ------------------ Five Standard constructors/methods
>      // See: http://www2.research.att.com/~bs/C++0xFAQ.html 
> 
>      explicit Proj(std::string const &definition)
>      {
>          pj = pj_init_plus(definition.c_str());
>          // pj_def = 0;
>      }
> 
>      explicit Proj(char const *definition)
>      {
>          pj = pj_init_plus(definition);
>      }
> 
>      ~Proj()
>      {
>          pj_free(pj);
>          // if (pj_def) pj_dalloc(pj_def);
>      }
> 
>      /** Transfer ownership */
>      Proj(Proj&& h) : pj{h.pj} //, pj_def{h.pj_def}
>      {
>          h.pj = 0;
>          // h.pj_def = 0;
>      }
> 
>      /** Transfer value */
>      Proj& operator=(Proj&& h) = delete;
> 
>      /** Copy constructor */
>      Proj(const Proj &h)
>      {
>          char *pj_def = pj_get_def(h.pj, 0);
>          pj = pj_init_plus(pj_def);
>          pj_dalloc(pj_def);
>      }
> 
>      // no copy with operator=()
>      Proj& operator=(const Proj&) = delete;
> 
>      // --------------------------- Other Stuff
> 
> 
>      /** Returns TRUE if the passed coordinate system is geographic
>      (proj=latlong). */
>      int is_latlong() const
>          { return pj_is_latlong(pj); }
> 
> 
>      /** Returns TRUE if the coordinate system is geocentric
>      (proj=geocent). */
>      int is_geocent() const
>          { return pj_is_geocent(pj); }
> 
>      /** Returns the PROJ.4 initialization string suitable for use with
>      pj_init_plus() that would produce this coordinate system, but with the
>      definition expanded as much as possible (for instance +init= and
>      +datum= definitions).
>      @param options Unused at this point
>      */
>      std::string get_def(int options=0) const
>      {
>          char *pj_def = 0;
>          pj_def = pj_get_def(pj, options);
> 
>          std::string ret = std::string(pj_def);
>          pj_dalloc(pj_def);
>          return ret;
>      }
> 
> 
>      /** Returns a new coordinate system definition which is the geographic
>      coordinate (lat/long) system underlying pj_in. */
>      Proj latlong_from_proj() const
>      {
>          return Proj(pj_latlong_from_proj(pj));
>      }
> 
> };
> 
> 
> inline int transform(Proj const &src, Proj const &dest,
>      long point_count, int point_offset, double *x, double *y, double *z=0)
> {
>      return pj_transform(src.pj, dest.pj,
>          point_count, point_offset, x, y, z);
> }
> 
> inline int transform(Proj const &src, Proj const &dest,
>      double x0, double y0, double &x1, double &y1)
> {
>      x1 = x0;
>      y1 = y0;
>      int ret = transform(src, dest, 1, 1, &x1, &y1);
>      return ret;
> }
> 
> 
> }
> 
> #endif
> 
> _______________________________________________
> Proj mailing list
> Proj at lists.maptools.org 
> http://lists.maptools.org/mailman/listinfo/proj




More information about the Proj mailing list