I'm getting what I believe to be strange behavior with lat/lon to x/y for tmerc. If I understand correctly, I can pass a lat/lon in degrees in and get an x/y in meters out. However, when I pass in 0,0 m and then 1,1 m into inv() it appears to jump by 1.57 degrees latitude, which I believe is thousands of meters rather than just 1. Am I using it incorrectly or is this an issue?

Details are below. Thanks!

#include <boost/geometry.hpp>

#include <boost/geometry/geometries/point_xy.hpp>

#include "boost/geometry/extensions/algorithms/parse.hpp"

#include "boost/geometry/extensions/gis/latlong/latlong.hpp"

#include "boost/geometry/extensions/gis/projections/parameters.hpp"

#include "boost/geometry/extensions/gis/projections/proj/tmerc.hpp"

// Construct a transverse mercator projection, using specified point types

// (This delivers a projection without virtual methods. Note that in p02 example

// the projection is created using a factory, which delivers a projection with virtual methods)

typedef boost::geometry::model::ll::point<boost::geometry::degree> point_ll_deg;

typedef boost::geometry::model::d2::point_xy<double> point_xy;

typedef boost::geometry::projections::tmerc_spheroid<point_ll_deg, point_xy> proj_spheroid;

boost::geometry::projections::parameters par = boost::geometry::projections::init("+ellps=WGS84 +units=m");

proj_spheroid prj(par);

double x = 1;

double y = 1;

//double x = 0;

//double y = 0;

double lat;

double lon;

prj.inv(x,y,lat,lon);

result: lat: 1.5708 lon: 4.80877e-65

If I pass x = 0, y = 0, then I get lat: 0 lon: 0 as the result.

Andrew Hundt