[PATCH] Restrict inundation map to selected river range
Wald Commits
scm-commit at wald.intevation.org
Mon Oct 29 17:57:36 CET 2018
# HG changeset patch
# User gernotbelger
# Date 1540832250 -3600
# Node ID 3955ecc1a5168cf6fb1aebfe9b1b65983e2a7d71
# Parent 2b1626fa4a95a6207363c7f9faacae0da8a038e5
Restrict inundation map to selected river range
diff -r 2b1626fa4a95 -r 3955ecc1a516 artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationState.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationState.java Thu Oct 25 17:11:59 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationState.java Mon Oct 29 17:57:30 2018 +0100
@@ -24,6 +24,10 @@
import org.dive4elements.river.artifacts.model.map.WMSLayerFacet;
import org.dive4elements.river.artifacts.uinfo.UINFOArtifact;
import org.dive4elements.river.artifacts.uinfo.inundationduration.InundationDurationCalculationResult.WmsLayer;
+import org.dive4elements.river.model.RiverAxisKm;
+import org.dive4elements.river.utils.GeometryUtils;
+
+import com.vividsolutions.jts.geom.Envelope;
/**
* @author Domenico Nardi Tironi
@@ -121,4 +125,31 @@
return new InundationDurationCalculation(context).calculate(artifact);
}
+
+ /**
+ * The extent is restricted to the selected station range
+ */
+ @Override
+ protected Envelope getExtent(final boolean reproject) {
+
+ final InundationDurationAccess access = new InundationDurationAccess((UINFOArtifact) this.artifact);
+
+ final double lowerKm = access.getLowerKm();
+ final double upperKm = access.getUpperKm();
+
+ final List<RiverAxisKm> axisKms = RiverAxisKm.getRiverAxisKms(getRiverId(), lowerKm, upperKm);
+
+ Envelope max = null;
+
+ for (final RiverAxisKm ax : axisKms) {
+ final Envelope env = ax.getGeom().getEnvelopeInternal();
+
+ if (max == null)
+ max = env;
+ else
+ max.expandToInclude(env);
+ }
+
+ return max != null && reproject ? GeometryUtils.transform(max, getSrid()) : max;
+ }
}
\ No newline at end of file
diff -r 2b1626fa4a95 -r 3955ecc1a516 backend/src/main/java/org/dive4elements/river/model/RiverAxisKm.java
--- a/backend/src/main/java/org/dive4elements/river/model/RiverAxisKm.java Thu Oct 25 17:11:59 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/model/RiverAxisKm.java Mon Oct 29 17:57:30 2018 +0100
@@ -10,6 +10,7 @@
import java.io.Serializable;
import java.math.BigDecimal;
+import java.util.Collections;
import java.util.List;
import javax.persistence.Column;
@@ -19,94 +20,105 @@
import javax.persistence.OneToOne;
import javax.persistence.Table;
+import org.dive4elements.river.backend.SessionHolder;
+import org.hibernate.Query;
import org.hibernate.Session;
-import org.hibernate.Query;
import org.hibernate.annotations.Type;
import com.vividsolutions.jts.geom.Point;
-import org.dive4elements.river.backend.SessionHolder;
-
-
@Entity
@Table(name = "river_axes_km")
-public class RiverAxisKm
-implements Serializable
-{
- private Integer id;
- private River river;
+public class RiverAxisKm implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private Integer id;
+ private River river;
private BigDecimal km;
- private Point geom;
-
+ private Point geom;
public RiverAxisKm() {
}
-
@Id
@Column(name = "id")
public Integer getId() {
- return id;
+ return this.id;
}
-
- public void setId(Integer id) {
+ public void setId(final Integer id) {
this.id = id;
}
-
@OneToOne
@JoinColumn(name = "river_id")
public River getRiver() {
- return river;
+ return this.river;
}
-
- public void setRiver(River river) {
+ public void setRiver(final River river) {
this.river = river;
}
-
@Column(name = "km")
public BigDecimal getKm() {
- return km;
+ return this.km;
}
-
- public void setKm(BigDecimal km) {
+ public void setKm(final BigDecimal km) {
this.km = km;
}
-
@Column(name = "geom")
@Type(type = "org.hibernatespatial.GeometryUserType")
public Point getGeom() {
- return geom;
+ return this.geom;
}
-
- public void setGeom(Point geom) {
+ public void setGeom(final Point geom) {
this.geom = geom;
}
-
/**
* Returns a list of RiverAxisKm objects for a given river.
*
- * @param riverid The ID of a river in the database.
+ * @param riverid
+ * The ID of a river in the database.
*
* @return a list of RiverAxisKm objects.
*/
- public static List<RiverAxisKm> getRiverAxisKms(int riverid) {
- Session session = SessionHolder.HOLDER.get();
+ public static List<RiverAxisKm> getRiverAxisKms(final int riverid) {
+ final Session session = SessionHolder.HOLDER.get();
- Query query = session.createQuery(
- "from RiverAxisKm where river.id =:riverid");
+ final Query query = session.createQuery("from RiverAxisKm where river.id =:riverid");
query.setParameter("riverid", riverid);
- List<RiverAxisKm> list = query.list();
+ final List<RiverAxisKm> list = query.list();
return list;
}
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
+
+ public static List<RiverAxisKm> getRiverAxisKms(final int riverId, final double lowerKm, final double upperKm) {
+ final Session session = SessionHolder.HOLDER.get();
+
+ assert lowerKm <= upperKm;
+
+ if (Double.isNaN(lowerKm) || Double.isInfinite(lowerKm))
+ return Collections.emptyList();
+ if (Double.isNaN(upperKm) || Double.isInfinite(upperKm))
+ return Collections.emptyList();
+
+ final BigDecimal fromKm = BigDecimal.valueOf(lowerKm);
+ final BigDecimal toKm = BigDecimal.valueOf(upperKm);
+
+ final Query query = session.createQuery("from RiverAxisKm where river.id =:riverid AND km >= :fromKm AND km <= :toKm");
+ query.setParameter("riverid", riverId);
+ query.setParameter("fromKm", fromKm);
+ query.setParameter("toKm", toKm);
+
+ final List<RiverAxisKm> list = query.list();
+
+ return list;
+ }
+}
\ No newline at end of file
More information about the Dive4Elements-commits
mailing list