The problem I'm trying to solve is: given a latitude, longitude, and a radius, get all the countries contained within in an area with that radius. My approach is to first, buffer my point by a radius using the bufferPoint method (https://gis.stackexchange.com/a/311333/176526). Next, I modified the lookup method (https://gis.stackexchange.com/a/182469/176526) work with Geometry coordinates rather than a point:
public List<SimpleFeatureCollection> lookup(Geometry g, SpatialIndexFeatureCollection countries) {
GeometryFactory gf = new GeometryFactory();
Coordinate[] bufferedCoordinates = g.getCoordinates();
Point[] points = new Point[bufferedCoordinates.length];
int i = 0;
for (Coordinate c : bufferedCoordinates) {
points[i] = gf.createPoint(c);
i++;
}
List<SimpleFeatureCollection> simpleFeatures = new ArrayList<>();
for (int j = 0; j < points.length; j++) {
Filter f = ff.contains(ff.property("the_geom"), ff.literal(points[j]));
simpleFeatures.add(countries.subCollection(f));
}
return simpleFeatures;
}
Finally, I iterate over the list of features:
int i = 0;
for (SimpleFeatureCollection simpleFeature : simpleFeaturesList) {
SimpleFeatureIterator itr = simpleFeature.features();
try {
while (itr.hasNext()) {
SimpleFeature f = itr.next();
//System.out.println(f.getAttribute("NAME"));
i++;
}
} finally {
itr.close();
}
}
I do realize this is sloppy, but problem is that it's also wrong - given a large enough radius, none of the Geometry's coordinates will fall into some smaller country contained within the radius.
How do I do this correctly?