You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Grant Ingersoll (JIRA)" <ji...@apache.org> on 2010/12/07 03:23:09 UTC

[jira] Commented: (SOLR-2268) Add support for Point in Polygon searches

    [ https://issues.apache.org/jira/browse/SOLR-2268?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12968545#action_12968545 ] 

Grant Ingersoll commented on SOLR-2268:
---------------------------------------

This is a work in progress.  Here are a few ideas:
I think this can all be accomplished via a few things:

For the case where the field is a polygon and the user supplies a point, we need a new FieldType, PolygonType.

I would propose the following format: vertices are separated by semi-colons, points are separated by commas just as they are for the other capabilities, i.e.: 1.0,1.0;0.0,0.0;3.0,3.0 gives the vertices <1.0,1.0> <0,0>, <3, 3>.  Lines are assumed between each point.  See the java.awt.Polygon class 


Next, I think we can cover everything else through some function queries:
For case one above
{code}
pip(pt, dimension, boost) -- pt can be a PointType or a Vector.  Boost says how much score to give if a point is in a polygon

pipll(latlonPt, boost) -- Use spherical calculations to determine if the lat lon point is in the polygon, as it is laid on a sphere 
//Note, we may just fold this into the one above, but I think the calculations could be different enough that we would want to avoid instanceof checks.  Plus the parsing is simpler
{code}

For case two above, the user would pass in a polygon as defined above for the PolygonType.  In this case, we still need a function query:
{code}
pip(poly, boost) -- poly is the passed in polygon, boost is the value to give if the point is in a polygon
{code}

For PointType, we can just use capabilities of java.awt.Polygon, for lat lon, I'm still investigating.  It could be we still use Polygon, but maybe we can just scale it a little bit bigger and live with some error.  Otherwise, there seems to be some decent algorithms for doing it w/ lat/lon (http://msdn.microsoft.com/en-us/library/cc451895.aspx for one).  Not sure that one is practical at scale, but it could be a start.

While we are at it, it shouldn't be that hard to do the same for lines, i.e. is the point on a line.

> Add support for Point in Polygon searches
> -----------------------------------------
>
>                 Key: SOLR-2268
>                 URL: https://issues.apache.org/jira/browse/SOLR-2268
>             Project: Solr
>          Issue Type: New Feature
>            Reporter: Grant Ingersoll
>            Assignee: Grant Ingersoll
>
> In spatial applications, it is common to ask whether a point is inside of a polygon.  Solr could support two forms of this: 
> # A field contains a polygon and the user supplies a point.  If it does, the doc is returned.  
> # A document contains a point and the user supplies a polygon.  If the point is in the polygon, return the document
> With both of these case, it would be good to support the negative assertion, too.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org