if (g2 instanceof GeoPoint) {
GeoPoint p2 = (GeoPoint) g2;
return new Point_Polygon(p2, a1).setReverse(true);
} else if (g2 instanceof LineString) {
LineString l2 = (LineString) g2;
return new LineString_Polygon(l2, a1).setReverse(true);
} else if (g2 instanceof Polygon) {
Polygon a2 = (Polygon) g2;
return new Polygon_Polygon(a1, a2);
} else if (g2 instanceof GeometryCollection) {