|
Geometry : |
Subject: [ggl] point conversion geographic <-> cartesian
From: Krzysztof Czainski (1czajnik)
Date: 2010-11-05 10:42:54
2010/11/5 Barend Gehrels <barend.gehrels_at_[hidden]>
> hi Kris,
> Welcome to the list.
Using projections, you can transform points from geo to cartesian,
> (forward), and back (inverse).
>
> Besides projections, you can also transform the geo-points using
> translation/scaling (this is actually the most simple projection, plate
> carr?e, http://en.wikipedia.org/wiki/Equirectangular_projection)
>
> Regards, Barend
>
Thanks for the reply, Barend. I followed Your advice, and looked into
projections. Among other things, I found this:
http://geometrylibrary.geodan.nl/art09.html
Here is a sample I am trying to compile (You can see compile error messages
s in comments, I cut out some template bloat from them):
#include <boost/geometry/geometries/point.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/extensions/gis/geographic/core/cs.hpp>
#include <boost/geometry/extensions/gis/geographic/strategies/andoyer.hpp>
#include <boost/geometry/extensions/gis/geographic/strategies/vincenty.hpp>
#include <boost/geometry/extensions/gis/projections/parameters.hpp>
#include <boost/geometry/extensions/gis/projections/projection.hpp>
#include <boost/geometry/extensions/gis/projections/factory.hpp>
#include <boost/geometry/core/cs.hpp>
#include <boost/geometry/algorithms/distance.hpp>
#include <boost/geometry/algorithms/transform.hpp>
#include <iostream>
namespace bg = boost::geometry;
// ( longitude, latitude )
typedef bg::point< double, 2, bg::cs::geographic<bg::degree> > Geo;
typedef bg::point_xy< double > Xy;
int main()
{
// error: no matching function for call to
merc_ellipsoid::merc_ellipsoid(const char [26])
bg::projection::merc_ellipsoid<Geo,Xy> prj2( "+ellps=WGS84 +lon_0=11.6E"
);
// error: no matching function for call to
eqdc_ellipsoid::eqdc_ellipsoid(const char [31])
bg::projection::eqdc_ellipsoid<Geo,Xy> prj( "+lat_ts=20 +lat_0=20
+lon_0=50" );
Geo a( 50, 20 ), b( 51,21 ), c( 50,21);
Xy aa, bb, cc;
prj.forward( a, aa );
prj.forward( b, bb );
prj.forward( c, cc );
cout << aa.x() << ',' << aa.y() << endl;
cout << bb.x() << ',' << bb.y() << endl;
cout << cc.x() << ',' << cc.y() << endl;
}
I can't find any description of how the parameters should be passed to these
projections, so I need some help here.
Cheers
Kris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/ggl/attachments/20101105/2ba6f7c0/attachment.html
Geometry list run by mateusz at loskot.net