|
Geometry : |
Subject: [ggl] Polygon DP simplification
From: V D (zedxz2)
Date: 2011-10-04 20:25:07
Hi,
Anyone had any luck specifying a distance strategy to DP ?
Thanks,
-v
On Sep 30, 2011, at 11:06 AM, V D wrote:
> *Typo:
> boost::geometry(p1,p2, my_dist_strat);
>
> Should read
> boost::geometry::distance(p1,p2, my_dist_strat);
>
>
> Sorry about that
> -v
>
> On Sep 30, 2011, at 10:56 AM, V D wrote:
>
>> Hi,
>>
>> I'm trying to supply my own strategy to work around the problem for now.
>> Using the same code as before, except now I'm trying:
>>
>>
>> 27 typedef boost::geometry::strategy::distance::pythagoras<point_xy, point_xy, double> dist_strat;
>> 28 typedef boost::geometry::strategy::simplify::douglas_peucker<point_xy, dist_strat > simp_strat;
>>
>> 30 simp_strat my_simplify_strat_test;
>> 31 boost::geometry::simplify(original_1, simplified_1, 1.0 / 2048.0, my_simplify_strat_test);
>>
>>
>> But I cannot get the strategy to compile, I get a pretty nasty compile error :
>>
>>
>> instantiated from ?void boost::geometry::simplify(const Geometry&, Geometry&, const Distance&, const Strategy&) [with Geometry = main()::multi_polygon, Distance = double, Strategy = main()::simp_strat]?
>> simp_test.cpp:31: instantiated from here
>> /opt/local/include/boost/geometry/strategies/concepts/distance_concept.hpp:232: error: no type named ?type? in ?struct boost::geometry::strategy::distance::services::strategy_point_point<boost::geometry::strategy::distance::comparable::pythagoras<boost::geometry::model::d2::point_xy<double, boost::geometry::cs::cartesian>, boost::geometry::model::d2::point_xy<double, boost::geometry::cs::cartesian>, double> >?
>> /opt/local/include/boost/geometry/strategies/concepts/distance_concept.hpp:233: error: no type named ?type? in ?struct boost::geometry::strategy::distance::services::strategy_point_point<boost::geometry::strategy::distance::comparable::pythagoras<boost::geometry::model::d2::point_xy<double, boost::geometry::cs::cartesian>, boost::geometry::model::d2::point_xy<double, boost::geometry::cs::cartesian>, double> >?
>> /opt/local/include/boost/geometry/strategies/concepts/distance_concept.hpp:244: error: no matching function for call to ?boost::geometry::strategy::distance::comparable::pythagoras<boost::geometry::model::d2::point_xy<double, boost::geometry::cs::cartesian>, boost::geometry::model::d2::point_xy<double, boost::geometry::cs::cartesian>, double>::apply(const boost::geometry::model::d2::point_xy<double, boost::geometry::cs::cartesian>&, const boost::geometry::model::d2::point_xy<double, boost::geometry::cs::cartesian>&, const boost::geometry::model::d2::point_xy<double, boost::geometry::cs::cartesian>&)?
>> /opt/local/include/boost/geometry/strategies/cartesian/distance_pythagoras.hpp:92: note: candidates are: static typename boost::geometry::select_calculation_type<S1, S2, CalculationType>::type boost::geometry::strategy::distance::comparable::pythagoras<Point1, Point2, CalculationType>::apply(const Point1&, const Point2&) [with Point1 = boost::geometry::model::d2::point_xy<double, boost::geometry::cs::cartesian>, Point2 = boost::geometry::model::d2::point_xy<double, boost::geometry::cs::cartesian>, CalculationType = double]
>>
>>
>> The dist_strat type works fine, for example:
>>
>> point_xy p1(0.0, 0.0)
>> point_xy p2(5.0, 0.0)
>>
>> dist_strat my_dist_strat;
>> boost::geometry(p1,p2, my_dist_strat);
>>
>> But I can't seem to supply it to my deuglas peucker strategy ?
>>
>> -v
>>
>>
>>
>>
>> On Sep 30, 2011, at 6:04 AM, Mateusz Loskot wrote:
>>
>>> On 30/09/11 03:47, V D wrote:
>>>> Hum, if the problem is with the pythagoras distance, why is the
>>>> following snippet returning the expected value, 5.0.
>>>> Given the current error in the source, shouldn't it return 25 ?
>>>>
>>>> #include <boost/geometry.hpp>
>>>> #include <boost/geometry/strategies/cartesian/distance_pythagoras.hpp>
>>>> #include <boost/geometry/geometries/point_xy.hpp>
>>>> #include <iostream>
>>>>
>>>> int main()
>>>> {
>>>> typedef boost::geometry::model::d2::point_xy<double> point_xy;
>>>>
>>>> point_xy p1(0.0, 0.0);
>>>> point_xy p2(5.0, 0.0);
>>>>
>>>> boost::geometry::strategy::distance::pythagoras<point_xy, point_xy,
>>>> double> my_strategy;
>>>> std::cout << boost::geometry::distance(p1,p2, my_strategy) << std::endl;
>>>>
>>>> return 0;
>>>> }
>>>>
>>>>
>>>> Is it only in the use of DP simplification that the pythagoras strategy
>>>> is problematic ?
>>>
>>> The difference is in the actual strategies that kick in.
>>> I explained it in my last comment:
>>>
>>> https://svn.boost.org/trac/boost/ticket/5954#comment:3
>>>
>>> So, yes, my patch does not fix the problem, but sheds some light where
>>> is the bug. Though, I'm having problems with finding out why the
>>> different strategy is generated for simplify, not having enough time to
>>> dig it now.
>>>
>>> p.s. Please, take care to respond to the mailing list too. I added ggl address to my response here.
>>>
>>> Best regards,
>>> -
>>> Mateusz Loskot, http://mateusz.loskot.net
>>> Charter Member of OSGeo, http://osgeo.org
>>> Member of ACCU, http://accu.org
>>
>
Geometry list run by mateusz at loskot.net