I do not have a big experience with NNs, but it seems a very very interesting problem to me! However, I thought that this would be the case (that you do not care about the order, maybe an argument for sorted results or not, would be nice).

The query iterators worked as expected, but what is the difference? I mean, why the iterators return sorted results and the other method doesn't? Is the other method faster than iterators (in datasets with really many points or really high dimensions)?


On Tue, Apr 15, 2014 at 12:38 PM, Adam Wulkiewicz <adam.wulkiewicz@gmail.com> wrote:
Georgios Samaras wrote:
I changed the code to use points, but order the items are returned is not understandable by me.

I request the 5 NNs of the query point (0, 0), in a dataset of points (0, 0), (1, 1), .., (9, 9).

The output I receive is this:
knn query result:
POINT(4 4)
POINT(3 3)
POINT(2 2)
POINT(0 0)
POINT(1 1)


If you need the code, let me know. I remember that I read that the order is not specified, but does that mean that there is no logic in the results? I mean, clearly the 1st NN is (0, 0).


If the kNN query using query() function is performed, the order of returned Values isn't specified. The function returns 5 NNs, not sorted 5NNs. This way we save a call of sort() or sort_heap().
AFAIK the most typical use case would be to perform a kNN query and then to process all of those neighbours so it's not needed to sort them prematurely.

On the other hand in the case of query iterators ( http://www.boost.org/doc/libs/1_55_0/libs/geometry/doc/html/geometry/spatial_indexes/queries.html#geometry.spatial_indexes.queries.breaking_or_pausing_the_query )
you should get closer Values first.


Regards,
Adam
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users