# 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 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 getRiverAxisKms(int riverid) { - Session session = SessionHolder.HOLDER.get(); + public static List 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 list = query.list(); + final List list = query.list(); return list; } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : + + public static List 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 list = query.list(); + + return list; + } +} \ No newline at end of file