[Geometry] please help; using buffer() extensions

(sorry another post; someone told me to put [library name] in [] in subject... learning something new every day :) 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

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

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

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):

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 ==========

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 www.barendgehrels.nl

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 ==========

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
participants (2)
-
Barend Gehrels
-
John Lilley