Re: Solr 4.2.1 sorting by distance to polygon centre.

2013-04-16 Thread Smiley, David W.
Guido,

The field type solr.SpatialRecursivePrefixTreeFieldType can only
participate in distance reporting for indexed points, not other shapes.
In fact, I recommend not attempting to get the distance if the field isn't
purely indexed points, as it may get confused if it seems some small
shapes.  For your use-case, you should index an additional
solr.SpatialRecursivePrefixTreeFieldType field just for the points.  You
could do this external to Solr, or you could write a Solr
UpdateRequestProcessor that parses the shape in order to then call
getCenter(), and put those points in the other field.

~ David

On 4/16/13 7:23 AM, Guido Medina guido.med...@temetra.com wrote:

Hi,

I got everything in place, my polygons are indexing properly, I played a
bit with LSP which helped me a lot, now, I have JTS 1.13 inside
solr.war; here is my challenge:

I have big polygon (A) which contains smaller polygons (B and C), B and
C have some intersection, so if I search for a coordinate inside the 3,
I would like to sort by the distance to the centre of the polygons that
match the criteria.

As example, let's say dot B is on the centre of B, dot C is at the
centre of C and dot A is at the intersection of B and C which happens to
be the centre of A, so for dot A should be polygon A first and so on. I
could compute with the distances using the result but since Solr is
doing a heavy load already, why not just include the sort in it.

Here is my field type definition:

 !-- Spatial field type --
 fieldType name=location_rpt
class=solr.SpatialRecursivePrefixTreeFieldType
spatialContextFactory=com.spatial4j.core.context.jts.JtsSpatialContextFac
tory
units=degrees/


Field definition:

 !-- JTS spatial polygon field --
 field name=geopolygon type=location_rpt indexed=true
stored=false required=false multiValued=true/


I'm using the Solr admin UI first to shape my query and then moving to
our web app which uses solrj, here is the XML form of my result which
includes the query I'm making, which scores all distances to 1.0 (Not
what I want):

|?xml version=1.0 encoding=UTF-8?
response

lst  name=responseHeader
   int  name=status0/int
   int  name=QTime9/int
   lst  name=params
 str  name=flid,score/str
 str  name=sortscore asc/str
 str  name=indenttrue/str
 str  name=q*:*/str
 str  name=_136620720/str
 str  name=wtxml/str
 str  name=fq{!score=distance}geopolygon:Intersects(-6.271906
53.379284)/str
   /lst
/lst
result  name=response  numFound=3  start=0  maxScore=1.0
   doc
 str  name=iduid13972/str
 float  name=score1.0/float/doc
   doc
 str  name=iduid13979/str
 float  name=score1.0/float/doc
   doc
 str  name=iduid13974/str
 float  name=score1.0/float/doc
/result
/response|


Thanks for all responses,

Guido.



Re: Solr 4.2.1 sorting by distance to polygon centre.

2013-04-16 Thread Guido Medina

David,

I have been following your stackoverflow posts, I understand what you 
say, we decided to change the criteria and index an extra field (close 
to your suggestion), so the sorting will happen now by polygon area desc 
(Which induced another problem, calculation of polygon area on a 
sphere), finally I got to the point of testing, also due to what you are 
saying, is not a good idea to overload more than just the bare use of 
points (Intersects) inside polygon to get the the list that matches 
specific criteria.


To resume, calculate the area of the polygon, again, for curved 
polygons is not so obvious, do the standard solr search and sort by that 
extra field, I guess solr overhead will be minimal in that case.


The real use case is for utility industry, let's say users have areas 
where they get meter reads, readings are scheduled and assigned to the 
users that contains such meter GPS location, some users might cover big 
areas and possible to have smaller areas for other users inside such big 
areas, so we changed the distance to center for area covered by, seemed 
simpler and easier.


Thanks your response,

Guido.

On 16/04/13 15:06, Smiley, David W. wrote:

Guido,

The field type solr.SpatialRecursivePrefixTreeFieldType can only
participate in distance reporting for indexed points, not other shapes.
In fact, I recommend not attempting to get the distance if the field isn't
purely indexed points, as it may get confused if it seems some small
shapes.  For your use-case, you should index an additional
solr.SpatialRecursivePrefixTreeFieldType field just for the points.  You
could do this external to Solr, or you could write a Solr
UpdateRequestProcessor that parses the shape in order to then call
getCenter(), and put those points in the other field.

~ David

On 4/16/13 7:23 AM, Guido Medina guido.med...@temetra.com wrote:


Hi,

I got everything in place, my polygons are indexing properly, I played a
bit with LSP which helped me a lot, now, I have JTS 1.13 inside
solr.war; here is my challenge:

I have big polygon (A) which contains smaller polygons (B and C), B and
C have some intersection, so if I search for a coordinate inside the 3,
I would like to sort by the distance to the centre of the polygons that
match the criteria.

As example, let's say dot B is on the centre of B, dot C is at the
centre of C and dot A is at the intersection of B and C which happens to
be the centre of A, so for dot A should be polygon A first and so on. I
could compute with the distances using the result but since Solr is
doing a heavy load already, why not just include the sort in it.

Here is my field type definition:

 !-- Spatial field type --
 fieldType name=location_rpt
class=solr.SpatialRecursivePrefixTreeFieldType
spatialContextFactory=com.spatial4j.core.context.jts.JtsSpatialContextFac
tory
units=degrees/


Field definition:

 !-- JTS spatial polygon field --
 field name=geopolygon type=location_rpt indexed=true
stored=false required=false multiValued=true/


I'm using the Solr admin UI first to shape my query and then moving to
our web app which uses solrj, here is the XML form of my result which
includes the query I'm making, which scores all distances to 1.0 (Not
what I want):

|?xml version=1.0 encoding=UTF-8?
response

lst  name=responseHeader
   int  name=status0/int
   int  name=QTime9/int
   lst  name=params
 str  name=flid,score/str
 str  name=sortscore asc/str
 str  name=indenttrue/str
 str  name=q*:*/str
 str  name=_136620720/str
 str  name=wtxml/str
 str  name=fq{!score=distance}geopolygon:Intersects(-6.271906
53.379284)/str
   /lst
/lst
result  name=response  numFound=3  start=0  maxScore=1.0
   doc
 str  name=iduid13972/str
 float  name=score1.0/float/doc
   doc
 str  name=iduid13979/str
 float  name=score1.0/float/doc
   doc
 str  name=iduid13974/str
 float  name=score1.0/float/doc
/result
/response|


Thanks for all responses,

Guido.




Re: Solr 4.2.1 sorting by distance to polygon centre.

2013-04-16 Thread Guido Medina

David,

  I just peak it at github, the method will estimate well for our 
purpose, but depends on JTS which we included in our Solr server only, 
but we don't want LGPL libraries (v3) in our main project, kind of a 
show stopper, I understand is needed for spatial4j, Lucene and Solr in 
general, so we have no issues keeping it at the Solr server. But can't 
put it on main web project for licensing issues. I know JTS is a great 
set of needed functions for spatial projects. Shame I can't use it 
directly, like I had to develop some convex hull by myself.


Guido.

On 16/04/13 16:14, Smiley, David W. wrote:


On 4/16/13 10:57 AM, Guido Medina guido.med...@temetra.com wrote:


David,

I have been following your stackoverflow posts, I understand what you
say, we decided to change the criteria and index an extra field (close
to your suggestion), so the sorting will happen now by polygon area desc
(Which induced another problem, calculation of polygon area on a
sphere), finally I got to the point of testing, also due to what you are
saying, is not a good idea to overload more than just the bare use of
points (Intersects) inside polygon to get the the list that matches
specific criteria.

Glad you've been following what I've been up to and hopefully haven't
gotten too confused :-).  I welcome all feedback.  BTW I'll be doing a 75
minute spatial deep dive session at the Lucene/Solr Revolution
conference in San Diego May 1st  2nd.  Eventually the slides will be
posted and hopefully the audio track.


To resume, calculate the area of the polygon, again, for curved
polygons is not so obvious, do the standard solr search and sort by that
extra field, I guess solr overhead will be minimal in that case.

FYI Spatial4j will do a decent job estimating it by calculating the
geospatial area of the bounding box of a polygon and using the filled %
ratio of the polygons 2D area to its Bbox.  This logic is in Spatial4j's
JtsGeometry.getArea().


So are you storing the area and sorting by it then?  (overhead is
extremely minimal, this would just be an integer sort)


The real use case is for utility industry, let's say users have areas
where they get meter reads, readings are scheduled and assigned to the
users that contains such meter GPS location, some users might cover big
areas and possible to have smaller areas for other users inside such big
areas, so we changed the distance to center for area covered by, seemed
simpler and easier.

You might want to consider doing both -- sort by a function query that
combines both factors in some clever way.

~ David





Re: Solr 4.2.1 sorting by distance to polygon centre.

2013-04-16 Thread Smiley, David W.
Guido,

I encourage you to try to open-source the shape-related code you have to
Spatial4j.  I realize that for some organizations, that can be really
difficult.  

~ David

On 4/16/13 11:55 AM, Guido Medina guido.med...@temetra.com wrote:

David,

   I just peak it at github, the method will estimate well for our
purpose, but depends on JTS which we included in our Solr server only,
but we don't want LGPL libraries (v3) in our main project, kind of a
show stopper, I understand is needed for spatial4j, Lucene and Solr in
general, so we have no issues keeping it at the Solr server. But can't
put it on main web project for licensing issues. I know JTS is a great
set of needed functions for spatial projects. Shame I can't use it
directly, like I had to develop some convex hull by myself.

Guido.