[Boost-users] [Geometry] please help; using buffer() extensions

413 views
Skip to first unread message

John Lilley

unread,
Feb 25, 2013, 2:38:20 PM2/25/13
to Boost...@lists.boost.org

(sorry another post; someone told me to put [library name] in [] in subject… learning something new every day J

 

Something of a repost, but I’ve learned a bit more on the path to being truly confused.  It appears that boost\geometry\extensions\algorithms\buffer\buffer_inserter.hpp contains some specializations for buffering other shape types?  But I’m out of my depth here… is there an example?  What do I need to do in order to buffer:

a point? 

A linestring? 

A vector of polygons? 

A heterogeneous collections of shapes?

 

Is this generalization of buffer also going to work as a “deflate” for polygons?

 

If someone can tell me “include these headers, use these algorithms”, it will help a lot!

 

Thanks

John

 

Barend Gehrels

unread,
Feb 27, 2013, 9:12:12 AM2/27/13
to boost...@lists.boost.org
Hi John,


On 25-2-2013 20:38, John Lilley wrote:

(sorry another post; someone told me to put [library name] in [] in subject… learning something new every day J

 

Something of a repost, but I’ve learned a bit more on the path to being truly confused.  It appears that boost\geometry\extensions\algorithms\buffer\buffer_inserter.hpp contains some specializations for buffering other shape types?  But I’m out of my depth here… is there an example? 


Not in the examples folder or the docs, but the test contains lots of examples. Well, they all do the same thing, so what is done is this:

    join_miter
        <
            point_type,
            typename bg::point_type<GeometryOut>::type
        > join_strategy;

    typedef bg::strategy::buffer::distance_assymetric<double> distance_strategy_type;
    distance_strategy_type distance_strategy(distance_left, distance_right);
    std::vector<GeometryOut> buffered;
    bg::buffer_inserter<GeometryOut>(geometry, std::back_inserter(buffered),
                        distance_strategy,
                        join_strategy);



 


What do I need to do in order to buffer:

a point? 


Not possible yet.

A linestring? 


See above.

A vector of polygons? 


If you mean a multipolygon: see above.



A heterogeneous collections of shapes?


Not possible yet.



 

Is this generalization of buffer also going to work as a “deflate” for polygons?


Yes, the distance may be positive and negative. A negative distance will result in a deflate.


 

If someone can tell me “include these headers, use these algorithms”, it will help a lot!



I'll try to come with a more up to date example, now that the buffer is a hot topic again.

Regards, Barend


John Lilley

unread,
Feb 27, 2013, 4:13:13 PM2/27/13
to boost...@lists.boost.org

>Not in the examples folder or the docs, but the test contains lots of examples. Well, they all do the same thing, so what is done is this:

>    join_miter

>        <

>            point_type,

>            typename bg::point_type<GeometryOut>::type

>        > join_strategy;

> 

>    typedef bg::strategy::buffer::distance_assymetric<double> distance_strategy_type;

>    distance_strategy_type distance_strategy(distance_left, distance_right);

>    std::vector<GeometryOut> buffered;

>    bg::buffer_inserter<GeometryOut>(geometry, std::back_inserter(buffered),

>                        distance_strategy,

>                        join_strategy);

 

Thanks Barend!  I think I am almost there, but there is a kink that I am trying to work out.  If I have coordinates expressed in degrees longitude/latitude, can I operate directly on those coordinates without first transforming them to a “flat” projection like UTM?  It is easy enough to get meters/degree latitude, but longitudinal distortion is another matter.  Does the distance_strategy have anything to do with this?  I can accept a first-order model that assumes meters/degree-longitude is constant over the entire shape.

 

Thanks,

John

 

Barend Gehrels

unread,
Feb 27, 2013, 4:45:11 PM2/27/13
to boost...@lists.boost.org, Boost.Geometry library mailing list
On 27-2-2013 22:13, John Lilley wrote:
Thanks Barend!  I think I am almost there, but there is a kink that I am trying to work out.  If I have coordinates expressed in degrees longitude/latitude, can I operate directly on those coordinates without first transforming them to a “flat” projection like UTM?  It is easy enough to get meters/degree latitude, but longitudinal distortion is another matter.  Does the distance_strategy have anything to do with this?  I can accept a first-order model that assumes meters/degree-longitude is constant over the entire shape.


Hi John, list,

As promised today, below the example. W.r.t. coordinates, the buffer operation uses intersections etc internally, and they are not yet ported to latlong. So you might use it but you will indeed get distortions then. So yes, the best is to transform first to a cartesian system... The distance_strategy cannot fix this.

A few changes has been committed today so please update if necessary.

I mentioned that negative buffers (for deflate) are possible - that is currently not running, I will come back to this.

But it is possible to use assymetric buffers (on linestrings). As join-strategies you can use "join_round" (like below) and "join_miter" (with sharp corners).


Regards, Barend




// Complete example, using Boost.Geometry extension for buffer (not yet released), buffering a polygon:

#include <boost/geometry.hpp>

#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/geometry/multi/geometries/multi_polygon.hpp>

#include <boost/geometry/extensions/algorithms/buffer/buffer_inserter.hpp>
#include <boost/geometry/extensions/strategies/buffer.hpp>


int main()
{
    typedef boost::geometry::model::d2::point_xy<double> point_type;
    typedef boost::geometry::model::polygon<point_type> polygon;

    // Polygon
    {
        polygon my_polygon;
        boost::geometry::read_wkt("POLYGON ((0 0,0 5,4 5,4 4,3 3,2 4,2 1,3 2,4 1,4 0,0 0))", my_polygon);
        boost::geometry::model::multi_polygon<polygon> my_output;
        boost::geometry::buffer_inserter<polygon>
            (
                my_polygon,
                std::back_inserter(my_output),
                boost::geometry::strategy::buffer::distance_assymetric<double>(0.4, 0.4),
                boost::geometry::strategy::buffer::join_round<point_type, point_type>()
            );

        std::cout << "Input polygon, area: " << boost::geometry::area(my_polygon) << std::endl;
        std::cout << "Output, area: " << boost::geometry::area(my_output) << std::endl;

    }

    return 0;
}



The input / output (if converted to SVG) looks as below (green input, orange output):







John Lilley

unread,
Feb 27, 2013, 6:18:31 PM2/27/13
to boost...@lists.boost.org

On 27-2-2013 22:13, John Lilley wrote:
>>Thanks Barend!  I think I am almost there, but there is a kink that I am trying to work out.  If I have coordinates expressed in degrees longitude/latitude, can I operate directly on those coordinates without first transforming >>them to a "flat" projection like UTM?  It is easy enough to get meters/degree latitude, but longitudinal distortion is another matter.  Does the distance_strategy have anything to do with this?  I can accept a first-order >>model that assumes meters/degree-longitude is constant over the entire shape.

>Hi John, list,
>As promised today, below the example. W.r.t. coordinates, the buffer operation uses intersections etc internally, and they are not yet ported to latlong. So you might use it but you will indeed get distortions then. So yes, the >best is to transform first to a cartesian system... The distance_strategy cannot fix this.

Thanks, I think that I can deal with the flattening projections.

However, I am having compiler trouble with linestring and multi_linestring:

// definitions
namespace BGNS = boost::geometry;
namespace BGBUFNS = BGNS::strategy::buffer;
typedef BGNS::model::d2::point_xy<double> BoostPoint;
typedef BGNS::model::multi_point<BoostPoint> BoostMultiPoint;
typedef BGNS::model::polygon<BoostPoint> BoostPolygon;
typedef BGNS::model::linestring<BoostPoint> BoostPolyline;
typedef BGNS::model::multi_polygon<BoostPolygon> BoostMultiPolygon;
typedef BGNS::model::multi_linestring<BoostPolyline> BoostMultiPolyline;
typedef BGBUFNS::join_miter<BoostPoint, BoostPoint> BoostMiterJoinStrategy;
typedef BGBUFNS::join_round<BoostPoint, BoostPoint> BoostRoundJoinStrategy;
typedef BGBUFNS::distance_assymetric<double> BoostDistanceStrategyType;

// polyline:
BoostPolyline bpl;
std::vector<BoostPolygon> boostPolysOut;
BoostDistanceStrategyType ds(amount,amount);
BoostMiterJoinStrategy js;
*** error line *** BGNS::buffer_inserter<BoostPolygon>(bpl, std::back_inserter(boostPolysOut), ds, js);


1>------ Build started: Project: etl6_EngCore, Configuration: Debug x64 ------
1> DL_GeometryBasics.cpp
1>F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp(1124): warning C4267: 'initializing' : conversion from 'size_t' to 'const int', possible loss of data
1> F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp(1123) : while compiling class template member function 'void boost::geometry::detail::buffer::buffered_piece_collection<Ring>::start_new_ring(void)'
1> with
1> [
1> Ring=boost::geometry::model::ring<Acme::BoostPoint,true,true,std::vector,std::allocator>
1> ]
1> F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffer_inserter.hpp(357) : see reference to class template instantiation 'boost::geometry::detail::buffer::buffered_piece_collection<Ring>' being compiled
1> with
1> [
1> Ring=boost::geometry::model::ring<Acme::BoostPoint,true,true,std::vector,std::allocator>
1> ]
1> DL_GeometryBasics.cpp(2218) : see reference to function template instantiation 'void boost::geometry::buffer_inserter<Acme::BoostPolygon,Acme::BoostPolyline,std::back_insert_iterator<_Container>,Acme::BoostDistanceStrategyType,Acme::BoostMiterJoinStrategy>(const GeometryInput &,OutputIterator,const DistanceStrategy &,const JoinStrategy &)' being compiled
1> with
1> [
1> _Container=std::vector<Acme::BoostPolygon>,
1> GeometryInput=Acme::BoostPolyline,
1> OutputIterator=std::back_insert_iterator<std::vector<Acme::BoostPolygon>>,
1> DistanceStrategy=Acme::BoostDistanceStrategyType,
1> JoinStrategy=Acme::BoostMiterJoinStrategy
1> ]
1>F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp(589): warning C4267: 'return' : conversion from 'size_t' to 'int', possible loss of data
1> F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp(579) : while compiling class template member function 'int boost::geometry::detail::buffer::buffered_piece_collection<Ring>::piece_count(const boost::geometry::detail::buffer::buffered_piece_collection<Ring>::buffer_occupation_info &)'
1> with
1> [
1> Ring=boost::geometry::model::ring<Acme::BoostPoint,true,true,std::vector,std::allocator>
1> ]
1>F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp(1142): warning C4267: 'return' : conversion from 'size_t' to 'int', possible loss of data
1> F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp(1134) : while compiling class template member function 'int boost::geometry::detail::buffer::buffered_piece_collection<Ring>::add_point(const boost::geometry::model::d2::point_xy<CoordinateType> &)'
1> with
1> [
1> Ring=boost::geometry::model::ring<Acme::BoostPoint,true,true,std::vector,std::allocator>,
1> CoordinateType=double
1> ]
1>F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp(1153): warning C4267: '=' : conversion from 'size_t' to 'int', possible loss of data
1> F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp(1146) : while compiling class template member function 'boost::geometry::detail::buffer::buffered_piece_collection<Ring>::piece &boost::geometry::detail::buffer::buffered_piece_collection<Ring>::add_piece(boost::geometry::detail::buffer::piece_type,bool)'
1> with
1> [
1> Ring=boost::geometry::model::ring<Acme::BoostPoint,true,true,std::vector,std::allocator>
1> ]
1>F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp(1189): warning C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data
1> F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffer_inserter.hpp(192) : see reference to function template instantiation 'boost::geometry::detail::buffer::buffered_piece_collection<Ring>::piece &boost::geometry::detail::buffer::buffered_piece_collection<Ring>::add_piece<std::vector<_Ty>>(boost::geometry::detail::buffer::piece_type,const Range &)' being compiled
1> with
1> [
1> Ring=boost::geometry::model::ring<Acme::BoostPoint,true,true,std::vector,std::allocator>,
1> _Ty=Acme::BoostPoint,
1> Range=std::vector<Acme::BoostPoint>
1> ]
1> F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffer_inserter.hpp(280) : see reference to function template instantiation 'void boost::geometry::detail::buffer::buffer_range<RingOutput,Tag>::iterate<Collection,std::_Vector_const_iterator<_Myvec>,DistanceStrategy,JoinStrategy>(Collection &,Iterator,Iterator,boost::geometry::buffer_side_selector,const DistanceStrategy &,const JoinStrategy &,bool)' being compiled
1> with
1> [
1> RingOutput=boost::geometry::model::ring<Acme::BoostPoint,true,true,std::vector,std::allocator>,
1> Tag=boost::geometry::linestring_tag,
1> Collection=boost::geometry::detail::buffer::buffered_piece_collection<boost::geometry::model::ring<Acme::BoostPoint,true,true,std::vector,std::allocator>>,
1> _Myvec=std::_Vector_val<Acme::BoostPoint,std::allocator<Acme::BoostPoint>>,
1> DistanceStrategy=Acme::BoostDistanceStrategyType,
1> JoinStrategy=Acme::BoostMiterJoinStrategy,
1> Iterator=std::_Vector_const_iterator<std::_Vector_val<Acme::BoostPoint,std::allocator<Acme::BoostPoint>>>
1> ]
1> F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffer_inserter.hpp(364) : see reference to function template instantiation 'void boost::geometry::dispatch::buffer_inserter<Tag,RingInput,RingOutput>::apply<boost::geometry::detail::buffer::buffered_piece_collection<Ring>,DistanceStrategy,JoinStrategy>(const Linestring &,Collection &,const DistanceStrategy &,const JoinStrategy &)' being compiled
1> with
1> [
1> Tag=boost::geometry::linestring_tag,
1> RingInput=Acme::BoostPolyline,
1> RingOutput=Acme::BoostPolygon,
1> Ring=boost::geometry::model::ring<Acme::BoostPoint,true,true,std::vector,std::allocator>,
1> DistanceStrategy=Acme::BoostDistanceStrategyType,
1> JoinStrategy=Acme::BoostMiterJoinStrategy,
1> Linestring=Acme::BoostPolyline,
1> Collection=boost::geometry::detail::buffer::buffered_piece_collection<boost::geometry::model::ring<Acme::BoostPoint,true,true,std::vector,std::allocator>>
1> ]
1>f:\datamanagement\rpdm\server\engine\dl_eng_core\dl_geometrybasics.cpp(2267): error C4716: 'Acme::ShapeOperator::InflateRound_' : must return a value
1>f:\datamanagement\rpdm\server\engine\dl_eng_core\dl_geometrybasics.cpp(2270): error C4716: 'Acme::ShapeOperator::InflateRound_' : must return a value
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


// multi_polyline:
BoostMultiPolyline boostLines;
std::vector<BoostPolygon> boostPolysOut;
BoostDistanceStrategyType ds(amount,amount);
BoostMiterJoinStrategy js;
*** error line *** BGNS::buffer_inserter<BoostPolygon>(boostLines, std::back_inserter(boostPolysOut), ds, js);

// Compiler output on MSVC++ 2010:
1>------ Build started: Project: etl6_EngCore, Configuration: Debug x64 ------
1> DL_GeometryBasics.cpp
1>F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffer_inserter.hpp(364): error C2039: 'apply' : is not a member of 'boost::geometry::dispatch::buffer_inserter<Tag,RingInput,RingOutput>'
1> with
1> [
1> Tag=boost::geometry::multi_linestring_tag,
1> RingInput=Acme::BoostMultiPolyline,
1> RingOutput=Acme::BoostPolygon
1> ]
1> DL_GeometryBasics.cpp(2218) : see reference to function template instantiation 'void boost::geometry::buffer_inserter<Acme::BoostPolygon,Acme::BoostMultiPolyline,std::back_insert_iterator<_Container>,Acme::BoostDistanceStrategyType,Acme::BoostMiterJoinStrategy>(const GeometryInput &,OutputIterator,const DistanceStrategy &,const JoinStrategy &)' being compiled
1> with
1> [
1> _Container=std::vector<Acme::BoostPolygon>,
1> GeometryInput=Acme::BoostMultiPolyline,
1> OutputIterator=std::back_insert_iterator<std::vector<Acme::BoostPolygon>>,
1> DistanceStrategy=Acme::BoostDistanceStrategyType,
1> JoinStrategy=Acme::BoostMiterJoinStrategy
1> ]
1>F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffer_inserter.hpp(364): error C3861: 'apply': identifier not found
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


_______________________________________________
Boost-users mailing list
Boost...@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users

John Lilley

unread,
Feb 27, 2013, 6:34:56 PM2/27/13
to boost...@lists.boost.org
>int main()
>{
> typedef boost::geometry::model::d2::point_xy<double> point_type;
> typedef boost::geometry::model::polygon<point_type> polygon;
>
> // Polygon
> {
> polygon my_polygon;
> boost::geometry::read_wkt("POLYGON ((0 0,0 5,4 5,4 4,3 3,2 4,2 1,3 2,4 1,4 0,0 0))", my_polygon);
> boost::geometry::model::multi_polygon<polygon> my_output;
> boost::geometry::buffer_inserter<polygon>
> (
> my_polygon,
> std::back_inserter(my_output),
> boost::geometry::strategy::buffer::distance_assymetric<double>(0.4, 0.4),
> boost::geometry::strategy::buffer::join_round<point_type, point_type>()
> );
>
> std::cout << "Input polygon, area: " << boost::geometry::area(my_polygon) << std::endl;
> std::cout << "Output, area: " << boost::geometry::area(my_output) << std::endl;
>
> }
>
> return 0;
>}
>

Barend,
When I compile your example, I get errors from MSVC++ 2010. I have the latest extensions, but I am using them with the 1.52 release; will that cause problems?
John


1>------ Build started: Project: etl6_EngCore, Configuration: Debug x64 ------
1> DL_GeometryBasics.cpp
1>F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp(1112): warning C4267: 'initializing' : conversion from 'size_t' to 'const int', possible loss of data
1> F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp(1111) : while compiling class template member function 'void boost::geometry::detail::buffer::buffered_piece_collection<Ring>::start_new_ring(void)'
1> with
1> [
1> Ring=boost::geometry::model::ring<point_type,true,true,std::vector,std::allocator>
1> ]
1> F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffer_inserter.hpp(357) : see reference to class template instantiation 'boost::geometry::detail::buffer::buffered_piece_collection<Ring>' being compiled
1> with
1> [
1> Ring=boost::geometry::model::ring<point_type,true,true,std::vector,std::allocator>
1> ]
1> DL_GeometryBasics.cpp(34) : see reference to function template instantiation 'void boost::geometry::buffer_inserter<polygon,polygon,std::back_insert_iterator<_Container>,boost::geometry::strategy::buffer::distance_assymetric<CoordinateType>,boost::geometry::strategy::buffer::join_round<PointIn,PointOut>>(const GeometryInput &,OutputIterator,const DistanceStrategy &,const JoinStrategy &)' being compiled
1> with
1> [
1> _Container=boost::geometry::model::multi_polygon<polygon>,
1> CoordinateType=double,
1> PointIn=point_type,
1> PointOut=point_type,
1> GeometryInput=polygon,
1> OutputIterator=std::back_insert_iterator<boost::geometry::model::multi_polygon<polygon>>,
1> DistanceStrategy=boost::geometry::strategy::buffer::distance_assymetric<double>,
1> JoinStrategy=boost::geometry::strategy::buffer::join_round<point_type,point_type>
1> ]
1>F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp(577): warning C4267: 'return' : conversion from 'size_t' to 'int', possible loss of data
1> F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp(567) : while compiling class template member function 'int boost::geometry::detail::buffer::buffered_piece_collection<Ring>::piece_count(const boost::geometry::detail::buffer::buffered_piece_collection<Ring>::buffer_occupation_info &)'
1> with
1> [
1> Ring=boost::geometry::model::ring<point_type,true,true,std::vector,std::allocator>
1> ]
1>F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp(1130): warning C4267: 'return' : conversion from 'size_t' to 'int', possible loss of data
1> F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp(1122) : while compiling class template member function 'int boost::geometry::detail::buffer::buffered_piece_collection<Ring>::add_point(const boost::geometry::model::d2::point_xy<CoordinateType> &)'
1> with
1> [
1> Ring=boost::geometry::model::ring<point_type,true,true,std::vector,std::allocator>,
1> CoordinateType=double
1> ]
1>F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp(1141): warning C4267: '=' : conversion from 'size_t' to 'int', possible loss of data
1> F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp(1134) : while compiling class template member function 'boost::geometry::detail::buffer::buffered_piece_collection<Ring>::piece &boost::geometry::detail::buffer::buffered_piece_collection<Ring>::add_piece(boost::geometry::detail::buffer::piece_type,bool)'
1> with
1> [
1> Ring=boost::geometry::model::ring<point_type,true,true,std::vector,std::allocator>
1> ]
1>F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp(1177): warning C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data
1> F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffer_inserter.hpp(192) : see reference to function template instantiation 'boost::geometry::detail::buffer::buffered_piece_collection<Ring>::piece &boost::geometry::detail::buffer::buffered_piece_collection<Ring>::add_piece<std::vector<_Ty,_Ax>>(boost::geometry::detail::buffer::piece_type,const Range &)' being compiled
1> with
1> [
1> Ring=boost::geometry::model::ring<point_type,true,true,std::vector,std::allocator>,
1> _Ty=point_type,
1> _Ax=std::allocator<point_type>,
1> Range=std::vector<point_type,std::allocator<point_type>>
1> ]
1> F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffer_inserter.hpp(246) : see reference to function template instantiation 'void boost::geometry::detail::buffer::buffer_range<RingOutput,Tag>::iterate<Collection,std::_Vector_const_iterator<_Myvec>,DistanceStrategy,JoinStrategy>(Collection &,Iterator,Iterator,boost::geometry::buffer_side_selector,const DistanceStrategy &,const JoinStrategy &,bool)' being compiled
1> with
1> [
1> RingOutput=output_ring_type,
1> Tag=boost::geometry::ring_tag,
1> Collection=boost::geometry::detail::buffer::buffered_piece_collection<boost::geometry::model::ring<point_type,true,true,std::vector,std::allocator>>,
1> _Myvec=std::_Vector_val<point_type,std::allocator<point_type>>,
1> DistanceStrategy=boost::geometry::strategy::buffer::distance_assymetric<double>,
1> JoinStrategy=boost::geometry::strategy::buffer::join_round<point_type,point_type>,
1> Iterator=std::_Vector_const_iterator<std::_Vector_val<point_type,std::allocator<point_type>>>
1> ]
1> F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffer_inserter.hpp(313) : see reference to function template instantiation 'void boost::geometry::dispatch::buffer_inserter<Tag,RingInput,RingOutput>::apply<Collection,DistanceStrategy,JoinStrategy>(const RingInput &,Collection &,const DistanceStrategy &,const JoinStrategy &)' being compiled
1> with
1> [
1> Tag=boost::geometry::ring_tag,
1> RingInput=input_ring_type,
1> RingOutput=output_ring_type,
1> Collection=boost::geometry::detail::buffer::buffered_piece_collection<boost::geometry::model::ring<point_type,true,true,std::vector,std::allocator>>,
1> DistanceStrategy=boost::geometry::strategy::buffer::distance_assymetric<double>,
1> JoinStrategy=boost::geometry::strategy::buffer::join_round<point_type,point_type>
1> ]
1> F:\DataManagement\RPDM\Server\libraries\boost\boost/geometry/extensions/algorithms/buffer/buffer_inserter.hpp(364) : see reference to function template instantiation 'void boost::geometry::dispatch::buffer_inserter<Tag,RingInput,RingOutput>::apply<boost::geometry::detail::buffer::buffered_piece_collection<Ring>,DistanceStrategy,JoinStrategy>(const PolygonInput &,Collection &,const DistanceStrategy &,const JoinStrategy &)' being compiled
1> with
1> [
1> Tag=boost::geometry::polygon_tag,
1> RingInput=polygon,
1> RingOutput=polygon,
1> Ring=boost::geometry::model::ring<point_type,true,true,std::vector,std::allocator>,
1> DistanceStrategy=boost::geometry::strategy::buffer::distance_assymetric<double>,
1> JoinStrategy=boost::geometry::strategy::buffer::join_round<point_type,point_type>,
1> PolygonInput=polygon,
1> Collection=boost::geometry::detail::buffer::buffered_piece_collection<boost::geometry::model::ring<point_type,true,true,std::vector,std::allocator>>
1> ]
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

Barend Gehrels

unread,
Feb 28, 2013, 2:03:49 AM2/28/13
to boost...@lists.boost.org
Hi John,




Barend,
When I compile your example, I get errors from MSVC++ 2010.  I have the latest extensions, but I am using them with the 1.52 release; will that cause problems?
John


I see:




========== Build: 1 succeeded, 0 failed, 0 up-to-date, 


There are some warnings, but the build seems to succeed :-)

Regards, Barend

Barend Gehrels

unread,
Feb 28, 2013, 2:08:39 AM2/28/13
to boost...@lists.boost.org
Hi again,



Thanks, I think that I can deal with the flattening projections.

However, I am having compiler trouble with linestring and multi_linestring:



I'm afraid multi-linestring is not yet working. I did not include In the list. Will look at that soon.

Also, will give more details about chord length.

Not today though.

Regards, Barend



Sent from iPad.
Barend Gehrels

Reply all
Reply to author
Forward
0 new messages