Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/InfoldingColumns.java @ 5818:a4ff4167be1e
Request feature info on all layers and show it as html if
the server does not return valid gml.
Non queryable layers produce an error message when the request
fails. This is good enough
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Wed, 24 Apr 2013 17:33:27 +0200 |
parents | 243f1eb02b95 |
children |
line wrap: on
line source
package de.intevation.flys.artifacts.model; /** A pretty naive pointwise algorithm to find out the columns * of a WSTValueTable which imfold ("umhuellen") a set of WQKMs * in terms of Q. * A better implemention would exploit the fact that the * Qs normally are constant for a while along km. This would * reduce the runtime complexity to only a few Q spans instead * of the pointwise evaluation. */ public class InfoldingColumns { private QRangeTree.QuickQFinder [] qFinders; private boolean [] infoldingColumns; public InfoldingColumns() { } public InfoldingColumns(WstValueTable.Column [] columns) { qFinders = new QRangeTree.QuickQFinder[columns.length]; for (int i = 0; i < qFinders.length; ++i) { qFinders[i] = columns[i].getQRangeTree().new QuickQFinder(); } infoldingColumns = new boolean[columns.length]; } public boolean [] getInfoldingColumns() { return infoldingColumns; } public void markInfoldingColumns(QKms [] qkms) { for (QKms qk: qkms) { markInfoldingColumns(qk); } } public void markInfoldingColumns(QKms qkms) { int N = qkms.size(); int C = qFinders.length-1; for (int i = 0; i < N; ++i) { double km = qkms.getKm(i); double q = qkms.getQ(i); double above = Double.MAX_VALUE; double below = -Double.MAX_VALUE; int aboveIdx = -1; int belowIdx = -1; for (int j = C; j >= 0; --j) { double qc = qFinders[j].findQ(km); if (Double.isNaN(qc)) { continue; } if (qc <= q) { if (qc > below) { below = qc; belowIdx = j; } } else if (qc < above) { // qc > q above = qc; aboveIdx = j; } } if (aboveIdx != -1) { infoldingColumns[aboveIdx] = true; } if (belowIdx != -1) { infoldingColumns[belowIdx] = true; } } } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :