/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2005-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.filter.function; import java.util.Collection; import com.vividsolutions.jts.operation.polygonize.Polygonizer; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryCollection; import com.vividsolutions.jts.geom.LineString; import com.vividsolutions.jts.geom.LinearRing; import com.vividsolutions.jts.geom.MultiLineString; import com.vividsolutions.jts.geom.MultiPoint; import com.vividsolutions.jts.geom.MultiPolygon; import com.vividsolutions.jts.geom.Point; import com.vividsolutions.jts.geom.Polygon; import com.vividsolutions.jts.io.WKTReader; public class StaticGeometry { // -------------------------------------------------------------------------- // JTS SF SQL functions static public Geometry geomFromWKT(String wkt) { WKTReader wktreader = new WKTReader(); try { return wktreader.read(wkt); } catch (Exception e) { throw new IllegalArgumentException("bad wkt"); } } static public String toWKT(Geometry arg0) { Geometry _this = arg0; return _this.toString(); } static public boolean contains(Geometry arg0, Geometry arg1) { Geometry _this = arg0; return _this.contains(arg1); } static public boolean isEmpty(Geometry arg0) { Geometry _this = arg0; return _this.isEmpty(); } static public double geomLength(Geometry arg0) { Geometry _this = arg0; return _this.getLength(); } static public boolean intersects(Geometry arg0, Geometry arg1) { Geometry _this = arg0; return _this.intersects(arg1); } static public boolean isValid(Geometry arg0) { Geometry _this = arg0; return _this.isValid(); } static public String geometryType(Geometry arg0) { Geometry _this = arg0; return _this.getGeometryType(); } static public int numPoints(Geometry arg0) { Geometry _this = arg0; return _this.getNumPoints(); } static public boolean isSimple(Geometry arg0) { Geometry _this = arg0; return _this.isSimple(); } static public double distance(Geometry arg0, Geometry arg1) { Geometry _this = arg0; return _this.distance(arg1); } static public boolean isWithinDistance(Geometry arg0, Geometry arg1, double arg2) { Geometry _this = arg0; return _this.isWithinDistance(arg1, arg2); } static public double area(Geometry arg0) { Geometry _this = arg0; return _this.getArea(); } static public Geometry centroid(Geometry arg0) { Geometry _this = arg0; return _this.getCentroid(); } static public Geometry interiorPoint(Geometry arg0) { Geometry _this = arg0; return _this.getInteriorPoint(); } static public int dimension(Geometry arg0) { Geometry _this = arg0; return _this.getDimension(); } static public Geometry boundary(Geometry arg0) { Geometry _this = arg0; return _this.getBoundary(); } static public int boundaryDimension(Geometry arg0) { Geometry _this = arg0; return _this.getBoundaryDimension(); } static public Geometry envelope(Geometry arg0) { Geometry _this = arg0; return _this.getEnvelope(); } static public boolean disjoint(Geometry arg0, Geometry arg1) { Geometry _this = arg0; return _this.disjoint(arg1); } static public boolean touches(Geometry arg0, Geometry arg1) { Geometry _this = arg0; return _this.touches(arg1); } static public boolean crosses(Geometry arg0, Geometry arg1) { Geometry _this = arg0; return _this.crosses(arg1); } static public boolean within(Geometry arg0, Geometry arg1) { Geometry _this = arg0; return _this.within(arg1); } static public boolean overlaps(Geometry arg0, Geometry arg1) { Geometry _this = arg0; return _this.overlaps(arg1); } static public boolean relatePattern(Geometry arg0, Geometry arg1, String arg2) { Geometry _this = arg0; return _this.relate(arg1, arg2); } static public String relate(Geometry arg0, Geometry arg1) { Geometry _this = arg0; return _this.relate(arg1).toString(); } static public Geometry bufferWithSegments(Geometry arg0, double arg1, int arg2) { Geometry _this = arg0; return _this.buffer(arg1, arg2); } static public Geometry buffer(Geometry arg0, double arg1) { Geometry _this = arg0; return _this.buffer(arg1); } static public Geometry convexHull(Geometry arg0) { Geometry _this = arg0; return _this.convexHull(); } static public Geometry intersection(Geometry arg0, Geometry arg1) { Geometry _this = arg0; return _this.intersection(arg1); } static public Geometry union(Geometry arg0, Geometry arg1) { Geometry _this = arg0; return _this.union(arg1); } static public Geometry difference(Geometry arg0, Geometry arg1) { Geometry _this = arg0; return _this.difference(arg1); } static public Geometry symDifference(Geometry arg0, Geometry arg1) { Geometry _this = arg0; return _this.symDifference(arg1); } static public boolean equalsExactTolerance(Geometry arg0, Geometry arg1, double arg2) { Geometry _this = arg0; return _this.equalsExact(arg1, arg2); } static public boolean equalsExact(Geometry arg0, Geometry arg1) { Geometry _this = arg0; return _this.equalsExact(arg1); } static public int numGeometries(Geometry arg0) { GeometryCollection _this = (GeometryCollection) arg0; return _this.getNumGeometries(); } static public Geometry getGeometryN(Geometry arg0, int arg1) { GeometryCollection _this = (GeometryCollection) arg0; return _this.getGeometryN(arg1); } static public double getX(Geometry arg0) { Point _this = (Point) arg0; return _this.getX(); } static public double getY(Geometry arg0) { Point _this = (Point) arg0; return _this.getY(); } static public boolean isClosed(Geometry arg0) { LineString _this = (LineString) arg0; return _this.isClosed(); } static public Geometry pointN(Geometry arg0, int arg1) { LineString _this = (LineString) arg0; return _this.getPointN(arg1); } static public Geometry startPoint(Geometry arg0) { LineString _this = (LineString) arg0; return _this.getStartPoint(); } static public Geometry endPoint(Geometry arg0) { LineString _this = (LineString) arg0; return _this.getEndPoint(); } static public boolean isRing(Geometry arg0) { LineString _this = (LineString) arg0; return _this.isRing(); } static public Geometry exteriorRing(Geometry arg0) { Polygon _this = (Polygon) arg0; return _this.getExteriorRing(); } static public int numInteriorRing(Geometry arg0) { Polygon _this = (Polygon) arg0; return _this.getNumInteriorRing(); } static public Geometry interiorRingN(Geometry arg0, int arg1) { Polygon _this = (Polygon) arg0; return _this.getInteriorRingN(arg1); } // -------------------------------------------------------------------------- // JAVA String functions static public String strConcat(String s1, String s2) { return s1 + s2; } static public boolean strEndsWith(String s1, String s2) { return s1.endsWith(s2); } static public boolean strStartsWith(String s1, String s2) { return s1.startsWith(s2); } static public boolean strEqualsIgnoreCase(String s1, String s2) { return s1.equalsIgnoreCase(s2); } static public int strIndexOf(String s1, String s2) { return s1.indexOf(s2); } static public int strLastIndexOf(String s1, String s2) { return s1.lastIndexOf(s2); } static public int strLength(String s1) { return s1.length(); } static public boolean strMatches(String s1, String s2) { return s1.matches(s2); } static public String strSubstring(String s1, int beg, int end) { return s1.substring(beg, end); } static public String strSubstringStart(String s1, int beg) { return s1.substring(beg); } static public String strTrim(String s1) { return s1.trim(); } // -------------------------------------------------------------------------- // data type xform static public double parseDouble(String s) { return Double.parseDouble(s); } static public int parseInt(String s) { try { return Integer.parseInt(s); } catch (NumberFormatException e) // be nice for silly people! { return (int) Math.round(Double.parseDouble(s)); } } static public boolean parseBoolean(String s) { if (s.equalsIgnoreCase("") || s.equalsIgnoreCase("f") || s.equalsIgnoreCase("false") || s.equalsIgnoreCase("0") || s.equalsIgnoreCase("0.0")) return false; return true; } static public int roundDouble(double d) { return (int) Math.round(d); } static public double int2ddouble(int i) { return (double) i; } static public boolean int2bbool(int i) { return i == 0; } static public boolean double2bool(double d) { return d == 0; } static public Object if_then_else(boolean p, Object a, Object b) { if (p) return a; else return b; } // -------------------------------------------------------------------------- // OGC Filter comparisionOP functions static public boolean equalTo(Object o1, Object o2) { if (o1.getClass() == o2.getClass()) return o1.equals(o2); if ((o1 instanceof Number) && (o2 instanceof Number)) { return ((Number) o1).doubleValue() == ((Number) o2).doubleValue(); } return (o1).toString().equals((o2).toString()); } static public boolean notEqualTo(Object o1, Object o2) { return !(equalTo(o1, o2)); } static public boolean lessThan(Object o1, Object o2) { if ((o1 instanceof Integer) && (o2 instanceof Integer)) { return ((Integer) o1).intValue() < ((Integer) o2).intValue(); } if ((o1 instanceof Number) && (o2 instanceof Number)) { return ((Number) o1).doubleValue() < ((Number) o2).doubleValue(); } return (o1).toString().compareTo((o2).toString()) == 0; } static public boolean greaterThan(Object o1, Object o2) { if ((o1 instanceof Integer) && (o2 instanceof Integer)) { return ((Integer) o1).intValue() > ((Integer) o2).intValue(); } if ((o1 instanceof Number) && (o2 instanceof Number)) { return ((Number) o1).doubleValue() > ((Number) o2).doubleValue(); } return (o1).toString().compareTo((o2).toString()) == 2; } static public boolean greaterEqualThan(Object o1, Object o2) { if ((o1 instanceof Integer) && (o2 instanceof Integer)) { return ((Integer) o1).intValue() >= ((Integer) o2).intValue(); } if ((o1 instanceof Number) && (o2 instanceof Number)) { return ((Number) o1).doubleValue() >= ((Number) o2).doubleValue(); } return (((o1).toString().compareTo((o2).toString()) == 2) || ((o1) .toString().compareTo((o2).toString()) == 1)); } static public boolean lessEqualThan(Object o1, Object o2) { if ((o1 instanceof Integer) && (o2 instanceof Integer)) { return ((Integer) o1).intValue() <= ((Integer) o2).intValue(); } if ((o1 instanceof Number) && (o2 instanceof Number)) { return ((Number) o1).doubleValue() <= ((Number) o2).doubleValue(); } return (((o1).toString().compareTo((o2).toString()) == 0) || ((o1) .toString().compareTo((o2).toString()) == 1)); } static public boolean isLike(String s1, String s2) { return s1.matches(s2); // this sucks, but hay... } static public boolean isNull(Object o) { return o == null; } static public boolean between(Object o, Object o_low, Object o_high) { return StaticGeometry.greaterEqualThan(o, o_low) && StaticGeometry.lessEqualThan(o, o_high); } static public boolean not(boolean b) { return !b; } // -------------------------------------------------------------------------- // SQL "var in (list)" static public boolean in2(Object s, Object s1, Object s2) { return (equalTo(s, s1) || equalTo(s, s2)); } static public boolean in3(Object s, Object s1, Object s2, Object s3) { return (equalTo(s, s1) || equalTo(s, s2) || equalTo(s, s3)); } static public boolean in4(Object s, Object s1, Object s2, Object s3, Object s4) { return (equalTo(s, s1) || equalTo(s, s2) || equalTo(s, s3) || equalTo( s, s4)); } static public boolean in5(Object s, Object s1, Object s2, Object s3, Object s4, Object s5) { return (equalTo(s, s1) || equalTo(s, s2) || equalTo(s, s3) || equalTo(s, s4) || equalTo(s, s5)); } static public boolean in6(Object s, Object s1, Object s2, Object s3, Object s4, Object s5, Object s6) { return (equalTo(s, s1) || equalTo(s, s2) || equalTo(s, s3) || equalTo(s, s4) || equalTo(s, s5) || equalTo(s, s6)); } static public boolean in7(Object s, Object s1, Object s2, Object s3, Object s4, Object s5, Object s6, Object s7) { return (equalTo(s, s1) || equalTo(s, s2) || equalTo(s, s3) || equalTo(s, s4) || equalTo(s, s5) || equalTo(s, s6) || equalTo( s, s7)); } static public boolean in8(Object s, Object s1, Object s2, Object s3, Object s4, Object s5, Object s6, Object s7, Object s8) { return (equalTo(s, s1) || equalTo(s, s2) || equalTo(s, s3) || equalTo(s, s4) || equalTo(s, s5) || equalTo(s, s6) || equalTo(s, s7) || equalTo(s, s8)); } static public boolean in9(Object s, Object s1, Object s2, Object s3, Object s4, Object s5, Object s6, Object s7, Object s8, Object s9) { return (equalTo(s, s1) || equalTo(s, s2) || equalTo(s, s3) || equalTo(s, s4) || equalTo(s, s5) || equalTo(s, s6) || equalTo(s, s7) || equalTo(s, s8) || equalTo(s, s9)); } static public boolean in10(Object s, Object s1, Object s2, Object s3, Object s4, Object s5, Object s6, Object s7, Object s8, Object s9, Object s10) { return (equalTo(s, s1) || equalTo(s, s2) || equalTo(s, s3) || equalTo(s, s4) || equalTo(s, s5) || equalTo(s, s6) || equalTo(s, s7) || equalTo(s, s8) || equalTo(s, s9) || equalTo( s, s10)); } }