Mercurial > dive4elements > gnv-client
diff gnv-artifacts/src/main/java/de/intevation/gnv/utils/WKTUtils.java @ 423:2402173a1490
Moved some methods back to old place.
gnv-artifacts/trunk@471 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Mon, 21 Dec 2009 17:03:10 +0000 |
parents | c6a287398379 |
children | eb2ac62e853a |
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/utils/WKTUtils.java Mon Dec 21 16:47:45 2009 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/utils/WKTUtils.java Mon Dec 21 17:03:10 2009 +0000 @@ -6,20 +6,13 @@ import com.vividsolutions.jts.io.ParseException; import com.vividsolutions.jts.io.WKTReader; -import de.intevation.gnv.geobackend.base.DefaultResult; -import de.intevation.gnv.geobackend.base.DefaultResultDescriptor; import de.intevation.gnv.geobackend.base.Result; -import de.intevation.gnv.geobackend.base.ResultDescriptor; import de.intevation.gnv.geobackend.base.query.QueryExecutor; import de.intevation.gnv.geobackend.base.query.QueryExecutorFactory; import de.intevation.gnv.geobackend.base.query.exception.QueryException; -import de.intevation.gnv.math.Interpolation2D; import de.intevation.gnv.math.LinearFunction; -import de.intevation.gnv.math.LinearMetrics; -import de.intevation.gnv.math.Point2d; import de.intevation.gnv.state.InputData; -import java.util.Arrays; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -36,135 +29,10 @@ private static Logger log = Logger.getLogger(WKTUtils.class); - private static final String [] DIFF_COLUMS = { - "GROUP1", - "GROUP2", - "GROUP3" - }; - - private static final String [] COLUMN_BLACKLIST = { - "MEDIAN.MESHPOINT.JPOSITION", - "MEDIAN.MESHPOINT.IPOSITION" - }; - public static final double NAUTICAL_MILE = 1852.216d; public static final double KILOMETER = 1000d; - public static final double EPSILON = 1e-5d; - public static final int INTERPOLATION_STEPS = - Integer.getInteger("interpolation.steps", 500).intValue(); - - - public static final class SectionHandler - implements Interpolation2D.Consumer - { - private ArrayList<Point2d> points; - private List<Coordinate> path; - private Collection<Result> output; - private Result prototyp; - private ResultDescriptor descriptor; - private boolean lastWasSuccess; - - public SectionHandler() { - } - - public SectionHandler( - List<Coordinate> path, - Collection<Result> output, - ResultDescriptor descriptor - ) { - this.path = path; - this.output = output; - this.descriptor = descriptor; - points = new ArrayList<Point2d>(); - lastWasSuccess = true; - } - - public void finish() { - if (!points.isEmpty()) { - double distance = toKM( - DistanceCalculator.calculateDistance(path)); - - if (distance > EPSILON) { - - Interpolation2D.interpolate( - path, - points, - 0d, - distance, - INTERPOLATION_STEPS, - LinearMetrics.INSTANCE, - this); - } - - points.clear(); - } - lastWasSuccess = true; - } - - public void setPrototyp(Result prototyp) { - this.prototyp = prototyp; - } - - public void handle(Result result) { - Coordinate coordinate = - toCoordinate(result.getString("SHAPE")); - double value = result.getDouble("YORDINATE"); - int iPos = result.getInteger("MEDIAN.MESHPOINT.JPOSITION"); - int jPos = result.getInteger("MEDIAN.MESHPOINT.JPOSITION"); - Point2d p = new Point2d( - coordinate.x, - coordinate.y, - value, - iPos, jPos); - points.add(p); - } - - public void interpolated(Coordinate coordinate, boolean success) { - DefaultResult result = new DefaultResult(descriptor); - ResultDescriptor pd = prototyp.getResultDescriptor(); - - int pcolums = pd.getColumnCount(); - for (int i = 0, j = 0; i < pcolums; ++i) { - String colname = pd.getColumnName(i); - if (blacklisted(colname)) { - continue; - } - if (colname.equals("SHAPE")) { - result.addColumnValue(j, OutputUtils.toWKT(coordinate)); - } - else if (colname.equals("YORDINATE")) { - if (success) { - result.addColumnValue(j, Double.valueOf(coordinate.z)); - } - else if (lastWasSuccess) { - // only insert null if last was valid. - // This prevents flooding the result set with nulls - // if interpolating over a large gap. - result.addColumnValue(j, null); - } - } - else { - result.addColumnValue(j, prototyp.getObject(i)); - } - ++j; - } - output.add(result); - lastWasSuccess = success; - } - } - - - private static final boolean blacklisted(String column) { - for (int i = 0; i < COLUMN_BLACKLIST.length; ++i) { - if (COLUMN_BLACKLIST.equals(column)) { - return true; - } - } - return false; - } - - private static boolean different(Result a, Result b, int [] indices) { + public static boolean different(Result a, Result b, int [] indices) { for (int i = 0; i < indices.length; ++i) { String oa = a.getString(indices[i]); String ob = b.getString(indices[i]); @@ -188,66 +56,6 @@ return false; } - public static Collection<Result> process( - List<Coordinate> path, - Collection<Result> input - ) { - log.debug("------ number of points before processing: " + input.size()); - ArrayList<Result> output = new ArrayList<Result>(); - - Result last = null; - - int [] diffColums = null; - - SectionHandler sectionHandler = null; - - for (Result result: input) { - - if (sectionHandler == null) { - - ResultDescriptor rd = result.getResultDescriptor(); - diffColums = rd.getColumnIndices(DIFF_COLUMS); - int columns = rd.getColumnCount(); - - DefaultResultDescriptor resultDescriptor = - new DefaultResultDescriptor(); - - for (int j = 0; j < columns; ++j) { - String columnName = rd.getColumnName(j); - if (!blacklisted(columnName)) { - resultDescriptor.addColumn( - columnName, - rd.getColumnClassName(j)); - } - } - - sectionHandler = new SectionHandler( - path, - output, - resultDescriptor); - - sectionHandler.setPrototyp(result); - } - - if (last != null && different(last, result, diffColums)) { - sectionHandler.finish(); - sectionHandler.setPrototyp(result); - } - - sectionHandler.handle(result); - - last = result; - } - - if (sectionHandler != null) { - sectionHandler.finish(); - } - - log.debug("------ number of points after processing: " + output.size()); - - return output; - } - public static Coordinate toCoordinate(String shape) { try { @@ -275,12 +83,10 @@ } - public static Collection<Result> worldCoordinatesToIndex( + public static String worldCoordinatesToIndex( Collection<Result> result, Map<String, InputData> inputData, - String ijkQueryID, - String queryID, - String[] filterValues + String ijkQueryID ) throws ParseException, QueryException { // 1. IJK Anfragen für Stuetzpunkte im Netz ausführen. @@ -381,16 +187,6 @@ } } // if generate index filter - String[] addedFilterValues = new String[filterValues.length+1]; - System.arraycopy(filterValues, 0, addedFilterValues, 0, filterValues.length); - addedFilterValues[filterValues.length] = additionWhere; - - result = process( - Arrays.asList(coords), - queryExecutor.executeQuery( - queryID, - addedFilterValues)); - - return result; + return additionWhere; } }