49 lines
1.6 KiB
Java
49 lines
1.6 KiB
Java
package org.example.utils;
|
|
|
|
import java.io.IOException;
|
|
import java.util.Map;
|
|
import org.geotools.api.data.SimpleFeatureSource;
|
|
import org.geotools.api.feature.simple.SimpleFeatureType;
|
|
import org.geotools.api.filter.Filter;
|
|
import org.geotools.api.filter.FilterFactory;
|
|
import org.geotools.factory.CommonFactoryFinder;
|
|
import org.geotools.geometry.jts.JTSFactoryFinder;
|
|
import org.geotools.grid.GridElement;
|
|
import org.geotools.grid.GridFeatureBuilder;
|
|
import org.geotools.grid.PolygonElement;
|
|
import org.locationtech.jts.geom.Coordinate;
|
|
import org.locationtech.jts.geom.Geometry;
|
|
import org.locationtech.jts.geom.GeometryFactory;
|
|
|
|
public class IntersectionBuilder extends GridFeatureBuilder {
|
|
final FilterFactory ff2 = CommonFactoryFinder.getFilterFactory();
|
|
final GeometryFactory gf = JTSFactoryFinder.getGeometryFactory();
|
|
|
|
final SimpleFeatureSource source;
|
|
int id = 0;
|
|
|
|
public IntersectionBuilder(SimpleFeatureType type, SimpleFeatureSource source) {
|
|
super(type);
|
|
this.source = source;
|
|
}
|
|
|
|
public void setAttributes(GridElement el, Map<String, Object> attributes) {
|
|
attributes.put("id", ++id);
|
|
}
|
|
|
|
@Override
|
|
public boolean getCreateFeature(GridElement el) {
|
|
Coordinate c = ((PolygonElement) el).getCenter();
|
|
Geometry p = gf.createPoint(c);
|
|
Filter filter = ff2.intersects(ff2.property("the_geom"), ff2.literal(p));
|
|
boolean result = false;
|
|
|
|
try {
|
|
result = !source.getFeatures(filter).isEmpty();
|
|
} catch (IOException ex) {
|
|
throw new IllegalStateException(ex);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
} |