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