Hi Michael,
Thanks for your review!
I don't understand some of the problems you have had, so I'll explain
or ask some things.
Some general thoughts:
Integration with Boost.Units should be encouraged. I don't think
is_angle, etc should be in GGL. If I have a vector of quantities,
things should Just Work.
I think you mean is_radian, which is used internally to know if
spherical coordinates are in degree's or in radian's. We didn't thought
it a good idea, just for this one piece, to integrate with another
boost library. Though for some coordinate systems it certainly would
make sense (seeĀ also answer to Brandon's review)
As it is, Barend favors GIS,
Bruno favors gaming, and the resulting library is a mashup of GIS
terms and other arbitrary terminology and it excels in no one
particular area.
Thanks for your namespace suggestion in another thread. This will help
to improve this.
Yes. I spent a few hours trying to get it to with ESRI, a leader in
the GIS domain. Their API is completely COM based however, and it
proved extremely difficult to get working with GGL. I wasn't able to
successfully do this with Boost.Polygon either.
Yes, it would be very cool if this would work nicely, and it is meant
to work. It is not clear to me if you get anything working, or nothing.
However, I'll come back to you because it would be very useful if there
is an example, showing integration between GGL and ESRI.
The Examples link at the bottom of the main page of documentation is
broken (last line),
This was not a hyperlink (could be though, sorry)
and custom_point_example.cpp doesn't compile -
cs::cartesian needs to be ggl::cs::cartesian.
This surprises me. It is declared within a macro, so ggl namespace is
not necessary there. I've not heard of this problem before, and it
seems to compile fine normally for everyone (so I must now say: for
most people). Are you sure?
It was not clear what includes I had to include to register my custom
point type. GEOMETRY_REGISTER_POINT_2D is defined in
ggl/geometries/register/point.hpp, but the following won't compile:
Normally, including <ggl/ggl.hpp> is enough, but indeed this
should also compile, will be add the dependency.
It also doesn't appear that the custom point type can be in its own
namespace when using these registration macros. For instance, the
following doesn't compile:
namespace foo {
struct test {
double x, y;
};
}
GEOMETRY_REGISTER_POINT_2D(foo::test, double, ggl::cs::cartesian, x, y)
[...] I had to have "using namespace math" just to register my point correctly.
Yes, that was a known issue and should have been documented. We didn't
search for the solution yet, it must be simple.
Using the haversine strategy caused compilation errors
because there was no overload of get_as_radian<>() for my point type.
1. It's not documented that the haversine strategy requires
get_as_radian, or at least I didn't see it.
Spherical coordinate systems use get_as_radian internaly (using
is_radian), but it should never be necessary to overload it yourself.
The normal procedure is registering your point as
cs::spherical<degree> coordinate system. That would have been
fine, and that was expected for the haversine function. You probably
used cs::cartesian, and it didn't know if it was degree or radian.
Anyway, I see your problem though, we will correct this and/or document
this better.
I finally got haversine working with my point type by defining
get_as_radius as above, and the result was correct.
I must say, it is a great workaround, nice that you got it working also
like that.
This almost went smoothly, except that I had to specialize
strategy_tag, but didn't see any mention of this requirement in the
docs. Once I did that, my distance strategy worked and returned the
same value as haversine for values along the equator.
To be complete, the vincenty is also part of the gis extension, it was
first not included, but later we wanted to show that 07 graph example,
showing nicely the integration between BGL and GGL (there were not too
many comments on this though).
I understand that you implemented your own strategy, very cool. And
indeed, you should specialize your strategy_tag, if (and only if) you
want to use that one by default. Another way would have beenĀ that you
specified the strategy as additional parameter.
Great you got it all working like this! Of course, everything should
work, but you did use some quite advanced features of GGL, and I like
to see that you did succeed there. We will work on the documentation so
these scenario's will cause less problems.
Thanks again, Barend