package jeql.exp.function;
import jeql.api.function.FunctionClass;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.prep.PreparedGeometry;
import com.vividsolutions.jts.geom.prep.PreparedGeometryFactory;
public class GeomExpFunction
implements FunctionClass
{
private static Geometry intersectsCacheGeom;
private static PreparedGeometry intersectsCacheGeomPrep;
public static boolean intersectsPrep(Geometry g1, Geometry g2)
{
if (intersectsCacheGeom == null
|| intersectsCacheGeom != g1) {
intersectsCacheGeom = g1;
intersectsCacheGeomPrep = PreparedGeometryFactory.prepare(g1);
}
return intersectsCacheGeomPrep.intersects(g2);
}
private static Geometry containsCacheGeom;
private static PreparedGeometry containsCacheGeomPrep;
static int hitCount = 0;
public static boolean containsPrep(Geometry g1, Geometry g2)
{
if (containsCacheGeom == null
|| containsCacheGeom != g1) {
containsCacheGeom = g1;
containsCacheGeomPrep = PreparedGeometryFactory.prepare(g1);
// System.out.println(hitCount);
hitCount = 0;
}
hitCount++;
return containsCacheGeomPrep.contains(g2);
}
private static Geometry intersectionCacheGeom;
private static PreparedGeometry intersectionCacheGeomPrep;
public static Geometry intersectionPrep(Geometry g1, Geometry g2)
{
if (intersectionCacheGeom == null
|| intersectionCacheGeom != g1) {
intersectionCacheGeom = g1;
intersectionCacheGeomPrep = PreparedGeometryFactory.prepare(g1);
}
hitCount++;
if (! intersectionCacheGeomPrep.intersects(g2))
return g2.getFactory().createGeometryCollection(null);
if (intersectionCacheGeomPrep.contains(g2))
return g2;
return g1.intersection(g2);
}
}