[hibernate-dev] [HSEARCH] Geospatial indexing and queries
Emmanuel Bernard
emmanuel at hibernate.org
Wed Dec 21 11:22:55 EST 2011
On 21 déc. 2011, at 15:19, Hardy Ferentschik wrote:
>
> On Dec 21, 2011, at 2:59 PM, Emmanuel Bernard wrote:
>
>> Which one do you prefer (line in bold for each sample)?
>>
>> builder
>> .spatial()
>> .onCoordinates( "location" ) or .forCoordinates("location") or .forLocation("location") or something else
>> .within( 500, Unit.KM )
>> .of().latitude(48.858333d).longitude(2.294444d)
>> .createQuery();
>
> builder
> .spatial()
> .forLocation("location")
> .within( 500, Unit.KM )
> .of().latitude(48.858333d).longitude(2.294444d)
> .createQuery();
>
> On a side node, do we really need 'of()'. Sure it makes it sounds a little more like real English, but then why is there no 'and()' between lat and long.
> The whole DSL part only carries so far when directly hosted in Java. If there is no compelling reason for 'of()' i would argue one can drop it.
There is a reason for the of(). An overloaded form used when the user passes a Coordinates object is like this
builder
.spatial()
.forLocation("location")
.within(500, Unit.KM)
.of(coordinates)
.createQuery();
So you can see there is a symmetry to it.
But we can reduce the number of methods called by doing something like this
builder
.spatial()
.forLocation("location")
.within(500, Unit.KM)
.ofLatitude(48.8d).andLongitude(2.29d)
.createQuery();
Would you like it better?
>
> what's about 'proximity' instead of 'spatial'?
I am somewhat neutral, but I think the industry term is spatial queries. Thoughts?
>
>
>> builder
>> .spatial()
>> .onLatitudeField( "latitude" ).onLongitudeField( "longitude" ) or .forLatitudeField( "latitude" ).forLongitudeField( "longitude" ) or something else
>> .within( 51, Unit.KM )
>> .of().latitude( 24d ).longitude( 31.5d )
>> .createQuery();
>
> builder
> .spatial()
> .onFields(long, lat)
> .within( 51, Unit.KM )
> .of().latitude( 24d ).longitude( 31.5d )
> .createQuery();
As Karel pointed out, a major bug in spatial queries is people using latitude instead of longitude and vice versa. onFields does leave this can of worms open
More information about the hibernate-dev
mailing list