Hi Menelaos,
On Friday 22 May 2015 15:24:32, Menelaos Karavelas
<menelaos.karavelas@gmail.com> wrote:
Could you please try the attached program with your geometries?
Basically, what I am asking is that you change the typedefs for
point_type and linestring_type to indicate your geometries. Then give it
a try.
I want to make sure that point and segment iterator for your linestrings
work correctly. If they do then we can see what needs to be done next.
I've changed the typedefs and added the required headers:
//...
#include <boost/geometry.hpp>
#include <gdal/ogr_geometry.h>
#include "boost/OGRPointAdapter.h"
#include "boost/OGRLineStringAdapter.h"
#include "boost/OGRPointCollectionIterator.h"
namespace bg = boost::geometry;
typedef OGRPoint point_type;
typedef OGRLineString linestring_type;
typedef bg::point_iterator<linestring_type const> point_iterator_type;
typedef bg::segment_iterator<linestring_type const> segment_iterator_type;
int main()
{ //...
But the code doesn't compile. I'm quoting only the first few lines:
---%<---
In file included from
/usr/include/boost/geometry/algorithms/detail/distance/iterator_selector.hpp:16:0,
from
/usr/include/boost/geometry/algorithms/detail/distance/point_to_geometry.hpp:48,
from
/usr/include/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp:17,
from
/usr/include/boost/geometry/strategies/strategies.hpp:48,
from /usr/include/boost/geometry/geometry.hpp:50,
from /usr/include/boost/geometry.hpp:17,
from t.cpp:3:
/usr/include/boost/geometry/iterators/point_iterator.hpp: In instantiation of
‘boost::geometry::point_iterator<Geometry>::point_iterator(const
boost::geometry::point_iterator<G>&) [w
ith OtherGeometry = OGRLineString; Geometry = const OGRLineString]’:
t.cpp:29:62: required from here
/usr/include/boost/geometry/iterators/point_iterator.hpp:268:57: error: no
matching function for call to
‘boost::iterators::iterator_adaptor<boost::geometry::point_iterator<const OGR
LineString>, Winzent::Simulation::boost::OGRPointCollectionIter<const
OGRLineString, OGRPoint>, boost::iterators::use_default,
boost::iterators::use_default, boost::iterators::use_de
fault, boost::iterators::use_default>::iterator_adaptor(const
Winzent::Simulation::boost::OGRPointCollectionIter<OGRLineString, OGRPoint>&)’
: point_iterator::iterator_adaptor_(other.base())
^
/usr/include/boost/geometry/iterators/point_iterator.hpp:268:57: note:
candidates are:
In file included from /usr/include/boost/iterator/reverse_iterator.hpp:12:0,
from /usr/include/boost/range/reverse_iterator.hpp:21,
from /usr/include/boost/range/rbegin.hpp:19,
from /usr/include/boost/range/functions.hpp:23,
from /usr/include/boost/range/iterator_range_core.hpp:38,
from /usr/include/boost/lexical_cast.hpp:30,
from /usr/include/boost/math/constants/constants.hpp:18,
from /usr/include/boost/geometry/util/math.hpp:28,
from /usr/include/boost/geometry/core/radian_access.hpp:28,
from /usr/include/boost/geometry/geometry.hpp:43,
from /usr/include/boost/geometry.hpp:17,
from t.cpp:3:
/usr/include/boost/iterator/iterator_adaptor.hpp:265:16: note:
boost::iterators::iterator_adaptor<Derived, Base, Value, Traversal, Reference,
Difference>::iterator_adaptor(const Base
&) [with Derived = boost::geometry::point_iterator<const OGRLineString>; Base
= Winzent::Simulation::boost::OGRPointCollectionIter<const OGRLineString,
OGRPoint>; Value = boost::iter
ators::use_default; Traversal = boost::iterators::use_default; Reference =
boost::iterators::use_default; Difference = boost::iterators::use_default]
explicit iterator_adaptor(Base const &iter)
^
/usr/include/boost/iterator/iterator_adaptor.hpp:265:16: note: no known
conversion for argument 1 from ‘const
Winzent::Simulation::boost::OGRPointCollectionIter<OGRLineString, OGRPoint>’
to ‘const Winzent::Simulation::boost::OGRPointCollectionIter<const
OGRLineString, OGRPoint>&’
/usr/include/boost/iterator/iterator_adaptor.hpp:263:7: note:
boost::iterators::iterator_adaptor<Derived, Base, Value, Traversal, Reference,
Difference>::iterator_adaptor() [with Derived =
boost::geometry::point_iterator<const OGRLineString>; Base =
Winzent::Simulation::boost::OGRPointCollectionIter<const OGRLineString,
OGRPoint>; Value = boost::iterators::use_default; Traversal =
boost::iterators::use_default; Reference = boost::iterators::use_default;
Difference = boost::iterators::use_default]
iterator_adaptor() {}
^
/usr/include/boost/iterator/iterator_adaptor.hpp:263:7: note: candidate
expects 0 arguments, 1 provided
--->%---
My OGRPointCollectionIterator is both default and copy constructible: