Okay went to merge this and doubled check it was mentioned in the docs.

Turns out there is no collection function for this one. In looking at
implementing I noticed that NearestVisitor was artificially limited to
working against PropertyName expressions. I will prep a fix and issue a
pull request for your review.

Jody Garnett


On Mon, Mar 10, 2014 at 9:43 AM, Jody Garnett <[email protected]>wrote:

> Looks clear to me, thanks for getting the headers correct (sigh!).
>
> I had one general question about the design of JDBCAggregateFunctionTest (
> https://github.com/aaime/geotools/blob/b7f66c845acc3ee456cdc2db174e5f1578ddf41d/modules/library/jdbc/src/test/java/org/geotools/jdbc/JDBCAggregateFunctionTest.java
> ).
>
> Why does the test cases create a subclass to test (i.e. MyNearestVisitor
> extends NearestVisitor)?
>
>
>
> Jody Garnett
>
>
> On Sun, Mar 9, 2014 at 10:27 PM, Andrea Aime <[email protected]
> > wrote:
>
>> Hi,
>> in a GeoServer pull request we have an implementation a NearestVisitor
>> whose objective was to find the closest value to a given reference value
>> in
>> the domain of a feature attribute whose value was a Number, a Date or
>>  String:
>>
>> https://github.com/ilkkarinne/geoserver/blob/master/src/wms/src/main/java/org/geoserver/wms/dimension/NearestVisitorFactory.java
>>
>> In essence, this is similar to a max/min visitor, and not so similar
>> instead to
>> a KNN search (find the N closest features to a given point), in that it
>> searches
>> for the closest value, not for the closest features.
>>
>> I've started backporting that code to Geotools and adding unit tests, a
>> JDBC optimized
>> implementation, and then moved to make it more general, so that it could
>> work
>> against Geometry and generally speaking Comparable objects as well, with a
>> small twist there if you want, that if we are dealing wit a Comparable
>> that's not
>> a Number or a Date, we end up with the two closest values (unless the
>> reference is
>> above or below the domain), and then we basically arbitrarily pick one.
>>
>> I did not add a String based implementation, but if we had one, it would
>> probably  have to
>> use some reliable string distance (e.g. the Levenstein distance for
>> example,
>> http://en.wikipedia.org/wiki/Levenshtein_distance)
>>
>> During the implementation I've also noticed that what we are searching a
>> value in
>> the attribute domain, which is not necessarily of the same type as the
>> reference
>> value (e.g., domain made of integers, with the reference being a double)
>> so
>> had the code make sure to handle that.
>> The overall visitor code is here:
>>
>> https://github.com/aaime/geotools/blob/nearest/modules/library/main/src/main/java/org/geotools/feature/visitor/NearestVisitor.java
>>
>> The JDBC optimized implementation turns the nearest visit into two visits,
>> basically finding the closest value to the reference in the half below
>> the reference (the max in that interval),
>> and then the closest value to the reference in the half above (the min in
>> that interval) and then
>> picks the closest of the two. If the domain is indexed this should be
>> quite a bit
>> faster than scanning the whole domain, if not, it's still going to be
>> faster than loading
>> all the features from the database in the in memory visitor:
>>
>> https://github.com/geotools/geotools/pull/386/files#diff-5e45fc0686088e1fbeea65365775a1fbL678
>>
>> The pull request is here, comments welcomed:
>> https://github.com/geotools/geotools/pull/386
>>
>> Cheers
>> Andrea
>>
>> --
>> == Our support, Your Success! Visit http://opensdi.geo-solutions.it for
>> more information ==
>>
>> Ing. Andrea Aime
>> @geowolf
>> Technical Lead
>>
>> GeoSolutions S.A.S.
>> Via Poggio alle Viti 1187
>> 55054  Massarosa (LU)
>> Italy
>> phone: +39 0584 962313
>> fax: +39 0584 1660272
>> mob: +39  339 8844549
>>
>> http://www.geo-solutions.it
>>  http://twitter.com/geosolutions_it
>>
>> -------------------------------------------------------
>>
>>
>> ------------------------------------------------------------------------------
>> Subversion Kills Productivity. Get off Subversion & Make the Move to
>> Perforce.
>> With Perforce, you get hassle-free workflows. Merge that actually works.
>> Faster operations. Version large binaries.  Built-in WAN optimization and
>> the
>> freedom to use Git, Perforce or both. Make the move to Perforce.
>>
>> http://pubads.g.doubleclick.net/gampad/clk?id=122218951&iu=/4140/ostg.clktrk
>> _______________________________________________
>> GeoTools-Devel mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/geotools-devel
>>
>>
>
------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their
applications. Written by three acclaimed leaders in the field,
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/13534_NeoTech
_______________________________________________
GeoTools-Devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to