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