lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael McCandless <luc...@mikemccandless.com>
Subject Re: "Point in polygon" search with Lucene / Spatial4j / JTS
Date Mon, 06 Jun 2016 09:40:41 GMT
Once 6.1 is out (in a few weeks) the best option Lucene has for polygon
searching is the new LatLonPoint.newPolygonQuery.

It's the fastest option (see our nightly geo benchmarks:
http://home.apache.org/~mikemccand/geobench.html), the API is simple, the
implementation is simple, etc.

It indexes the 2D lat/lon point using Lucene's new (as of 6.0) dimensional
points.

Mike McCandless

http://blog.mikemccandless.com

On Sat, Jun 4, 2016 at 12:34 PM, Randall Tidd <rc@tidd.cc> wrote:

> Hello,
>
> I have what I think is a relatively simple use case that I’d like to use
> Lucene to solve.  We have a database of 100,000’s of data points each of
> which has a latitude and longitude.  I’d like to index these and then be
> able to search for them with an arbitrary polygon.  For example I would
> define an irregular polygon roughly encompassing northern San Francisco and
> search for all points that are within that polygon.
>
> I see some examples that are close to what I need but have some
> questions.  For example there is this:
>
>
> https://github.com/apache/lucene-solr/blob/branch_4x/lucene/spatial/src/test/org/apache/lucene/spatial/SpatialExample.java
> <
> https://github.com/apache/lucene-solr/blob/branch_4x/lucene/spatial/src/test/org/apache/lucene/spatial/SpatialExample.java
> >
>
> But 1) this is based on Lucene 4.x while the latest version is 6.x, and 2)
> it searches for points within a circle, not a polygon.
>
> I would be happy to use Lucene 4.x if that provides the best support but
> that version is getting old now and I wonder if there is better, easier
> support in later versions.
>
> Doing some reading I see that Spatial4j and JTS provide support for
> polygons, but I can’t figure out how to define a polygon that can be used
> with SpatialArgs.  I found
> com.vividsolutions.jts.geom.GeometryFactory.createPolygon() but am not sure
> how to get that into a JTS Shape which can be used with SpatialArgs.
> Basically I’m getting lost in the 3 sets of API’s (Lucene, Spatial4j, and
> JTS) wondering how they go together and can’t find an example.
>
> I have also tried parsing arguments to create a polygon like this:
>
> SpatialArgs args = new
> SpatialArgsParser().parse("IsWithin(POLYGON-122.515193 37.781561,
> -122.472924 37.809958, -122.383509 37.808795))", ctx);
>
> But I get "java.text.ParseException: Unknown Shape definition” from
> com.spatial4j.core.io.WKTReader.parse, evidently it is not correctly using
> JTS to create the polygon.  JTS is on my class path so I’m not sure what is
> wrong there.
>
> I see mention of some Solr and ElasticSearch solutions, which I believe
> would just use this Lucene functionality underneath.  I’d be happy to use
> those if it were easier but seems like I should be able to do this with
> just Lucene.
>
> Here is the combination of toolkits I’m trying to use:
>
> compile group: 'org.apache.lucene', name: 'lucene-core', version: '4.10.4'
> compile group: 'org.apache.lucene', name: 'lucene-analyzers-common',
> version: '4.10.4'
> compile group: 'org.apache.lucene', name: 'lucene-spatial', version:
> '4.10.4'
> compile group: 'com.spatial4j', name: 'spatial4j', version: '0.5'
> compile group: 'com.vividsolutions', name: 'jts', version: ‘1.13'
>
> I’ve spent more time figuring this out than I thought I’d have to and
> think I must be missing something obvious, and am wondering if someone can
> help me out.
>
> Thanks,
> Randy
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message