Boost logo

Geometry :

Subject: Re: [geometry] Integrating OGR library with Boost.Geometry
From: Menelaos Karavelas (menelaos.karavelas_at_[hidden])
Date: 2015-05-22 10:33:35


Hi Eric.

On 22/05/2015 04:06 μμ, Eric MSP Veith wrote:
> Hi Menelaos,
>
> On Friday 22 May 2015 15:24:32, Menelaos Karavelas
> <menelaos.karavelas_at_[hidden]> 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:

I think the question is whether your mutable iterator is convertible to
your const iterator, or to pose it differently, whether your const
iterator is constructible from your mutable iterator (which should be
the case).

- m.

>
> ---%<---
> OGRPointCollectionIter(): m_currentPointIndex(0)
> {
> }
>
>
> OGRPointCollectionIter(const OGRPointCollectionIter &other):
> m_currentPointIndex(other.m_currentPointIndex),
> m_collection(other.m_collection.get())
> {
> }
> --->%---
>
>
> --- Eric
>
>
> _______________________________________________
> Geometry mailing list
> Geometry_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/geometry



Geometry list run by mateusz at loskot.net