[hibernate-dev] [HSEARCH] Geospatial indexing and queries

Sanne Grinovero sanne at hibernate.org
Mon Dec 19 09:24:27 EST 2011


Hi Emmanuel,
I'm not familiar of what kind of API a gis expert would expect so I'm
commenting only as a JPA user who might need to introduce some "close
to" feature.

Assuming we can get the API to support overloading without enforcing
the JTS library as a hard dependency, could we do something like:

SomeType centeredOn(JTSLocation jts); // for the more experts
SomeType centeredOn(long latitude, long longitude); // the simple one

[cut]
>
> To answer your question on "centeredOn", I'd avoid a strong dependency
> on JTS. The "Object" option you propose could be an interface, and we
> create a factory class which returns them; users should then be able
> to use the JTS enabled factory or a dumb one.

How would that look in practice?

Maybe it can't work, I was thinking loud about some in this style:

SomeType centeredOn(LocationInterface obj);

And have an helper class which provides different builder-like constructs:

LocationInterface createLocation(JTSLocation jts);
LocationInterface createLocation(long latitude, long longitude);
LocationInterface createLocation(...);

The idea is that you could have two of these helper classes, one
bundled in the search-gis module having the more expressive JTS
methods as well, and a simpler one included in the search-engine.
Also this would make sure the Query fluent API doesn't get too complex
while adding additional (and possibly custom) implementations for
LocationInterface; as a user I'd likely want to create my own
implementation.
(I wouldn't call it "LocationInterface", just to stress I'm thinking
of an interface)


On 19 December 2011 13:15, Emmanuel Bernard <emmanuel at hibernate.org> wrote:
>
> On 5 déc. 2011, at 17:01, Sanne Grinovero wrote:
>
>> To answer your question on "centeredOn", I'd avoid a strong dependency
>> on JTS. The "Object" option you propose could be an interface, and we
>> create a factory class which returns them; users should then be able
>> to use the JTS enabled factory or a dumb one.
>
> I've been thinking about your approach but I don't find it too appealing
>
> ## Solution 1
> SomeType centeredOn(Object jts);
>
> .centeredOn( location.getPoint() );
>
> ## Solution 2
>
> SomeType centeredOn(LocationFactory factory);
>
> .centeredOn( new JTSLocation( location.getPoint() ) );
>
> To me solution 2 adds verbosity and is not a lot more typesafe. Granted, the user will have to find an impl of LocationFactory that matches its need, so the type system guides him a bit more than raw Object.
>
> Is the extra verbosity worth the extra help here?
>
> Emmanuel

I'm not really understanding solution #2 ..how is this LocationFactory
affecting the query?
#1 seems ok.

Another question; quoting first email again:
"Using a specific interface implemented by the entity:
`o.h.s.spatial.Coordinates`"
but then your Address of the example doesn't implement Coordinates;
did you forget the "implements", or do you intend to just look for the
method signatures of
public double getLatitude()
?

Sanne




More information about the hibernate-dev mailing list