Boost logo

Geometry :

Subject: [geometry] Point-wise coordinate transformation?
From: Volker Schöch (vschoech_at_[hidden])
Date: 2013-03-28 13:00:06


I have asked this question before - about a year ago. Just checking if there is any news in this regard: I would like to be able to apply a functor to every point in a multi-polygon, e.g., in order to transform an int-based polygon into a double-base polygon. This seems to be a canonical operation, like boost::adaptors::transform on ranges, and yet as far as I know there is no algorithm for this in geometry. This is how I currently do it:

reserve( polygon.size() ); // vector of polygons
for( std::vector< _TPolygon< S >::polygon_type >::const_iterator itp=polygon.begin(); itp!=polygon.end(); ++itp ) {
       emplace_back( polygon_type() );
       back().outer().reserve( itp->outer().size() ); // vector of points describing polygon outline
       for( _TPolygon< S >::polygon_type::ring_type::const_iterator itouter=itp->outer().begin(); itouter!=itp->outer().end(); ++itouter ) {
             back().outer().emplace_back( _TPoint< T >(*itouter) );
       back().inners().reserve( itp->inners().size() ); // vector of holes
       for( _TPolygon< S >::polygon_type::inner_container_type::const_iterator itinners=itp->inners().begin(); itinners!=itp->inners().end(); ++itinners ) {
             back().inners().emplace_back( polygon_type::ring_type() );
             back().inners().back().reserve( itinners->size() ); // vector of points describing a hole
             for( _TPolygon< S >::polygon_type::ring_type::const_iterator itinner=itinners->begin(); itinner!=itinners->end(); ++itinner ) {
                    back().inners().back().emplace_back( _TPoint< T >(*itinner) );

Is there an algorithm in geometry 1.52.0 that I did not find? Do you plan to add an algorithm for this task at some point?

Volker Schöch | vschoech_at_[hidden]<mailto:vschoech_at_[hidden]>
Senior Software Engineer
think-cell Software GmbH>
Chausseestr. 8/E        phone / fax     +49 30 666473-10 / -19
10115 Berlin, Germany   US phone / fax  +1 800 891 8091 / +1 212 504 3039
Amtsgericht Berlin-Charlottenburg, HRB 85229 | European Union VAT Id DE813474306
Directors: Dr. Markus Hannebauer, Dr. Arno Schödl

Geometry list run by mateusz at