comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/RiverAxisArtifact.java @ 5477:ae60bb7b8085

Add proper handling of multiple river_axes for datacage and rivermapfile
author Andre Heinecke <aheinecke@intevation.de>
date Wed, 27 Mar 2013 18:31:31 +0100
parents ffa5eaad3a7b
children
comparison
equal deleted inserted replaced
5476:f9eee1909e6e 5477:ae60bb7b8085
9 import de.intevation.artifacts.ArtifactFactory; 9 import de.intevation.artifacts.ArtifactFactory;
10 import de.intevation.artifacts.CallMeta; 10 import de.intevation.artifacts.CallMeta;
11 import de.intevation.flys.artifacts.model.FacetTypes; 11 import de.intevation.flys.artifacts.model.FacetTypes;
12 import de.intevation.flys.artifacts.model.RiverFactory; 12 import de.intevation.flys.artifacts.model.RiverFactory;
13 import de.intevation.flys.model.River; 13 import de.intevation.flys.model.River;
14 import de.intevation.flys.model.RiverAxis;
14 import de.intevation.flys.utils.FLYSUtils; 15 import de.intevation.flys.utils.FLYSUtils;
15 import de.intevation.flys.utils.GeometryUtils; 16 import de.intevation.flys.utils.GeometryUtils;
16 17
17 import java.util.List; 18 import java.util.List;
18 19
78 79
79 public RiverAxisState(){} 80 public RiverAxisState(){}
80 81
81 public RiverAxisState(FLYSArtifact artifact) { 82 public RiverAxisState(FLYSArtifact artifact) {
82 super(artifact); 83 super(artifact);
83 riverId = 0;
84 }
85
86 @Override
87 public int getRiverId() {
88 if (riverId == 0) {
89 String ids = artifact.getDataAsString("ids");
90
91 try {
92 riverId = Integer.parseInt(ids);
93 }
94 catch (NumberFormatException nfe) {
95 logger.error("Cannot parse river id from '" + ids + "'");
96 }
97 }
98
99 return riverId;
100 } 84 }
101 85
102 @Override 86 @Override
103 protected String getFacetType() { 87 protected String getFacetType() {
104 return FLOODMAP_RIVERAXIS; 88 return FLOODMAP_RIVERAXIS;
121 } 105 }
122 106
123 @Override 107 @Override
124 protected Envelope getExtent(boolean reproject) { 108 protected Envelope getExtent(boolean reproject) {
125 River river = RiverFactory.getRiver(getRiverId()); 109 River river = RiverFactory.getRiver(getRiverId());
110 List<RiverAxis> axes;
126 111
127 if (reproject) { 112 String kind = getIdPart(2);
128 logger.debug("Query extent for RiverAxis with Srid: " + getSrid()); 113
129 return GeometryUtils.transform( 114 if (kind != null && kind.equals("1")) {
130 GeometryUtils.getRiverBoundary(river.getName()), 115 axes = RiverAxis.getRiverAxis(river.getName(),
131 getSrid()); 116 Integer.parseInt(kind));
117 } else if (kind != null) {
118 axes = RiverAxis.getRiverAxis(river.getName(),
119 getName(), Integer.parseInt(kind));
120 } else {
121 if (reproject) {
122 logger.debug("Query extent for RiverAxis with Srid: " + getSrid());
123 return GeometryUtils.transform(
124 GeometryUtils.getRiverBoundary(river.getName()),
125 getSrid());
126 } else {
127 return GeometryUtils.transform(
128 GeometryUtils.getRiverBoundary(river.getName()),
129 "31467");
130 }
132 } 131 }
133 else { 132
134 return GeometryUtils.transform( 133 Envelope max = null;
135 GeometryUtils.getRiverBoundary(river.getName()), 134
136 "31467"); 135 for (RiverAxis ax: axes) {
136 Envelope env = ax.getGeom().getEnvelopeInternal();
137
138 if (max == null) {
139 max = env;
140 continue;
141 }
142
143 max.expandToInclude(env);
137 } 144 }
145
146 return max != null && reproject
147 ? GeometryUtils.transform(max, getSrid())
148 : max;
138 } 149 }
139 150
140 @Override 151 @Override
141 protected String getFilter() { 152 protected String getFilter() {
142 return "river_id=" + String.valueOf(getRiverId()); 153 String kind = getIdPart(2);
154 if (kind != null && kind.equals("1")) {
155 return "river_id=" + String.valueOf(getRiverId()) +
156 " AND kind_id=" + kind;
157 } else if (kind != null) {
158 return "river_id=" + String.valueOf(getRiverId()) +
159 " AND kind_id=" + kind +
160 " AND name='" + getName() + "'";
161 } else if (getIdPart(1) != null) {
162 return "river_id=" + String.valueOf(getRiverId()) +
163 " AND name='" + getName() + "'";
164 }
165 return "river_id=" + String.valueOf(getRiverId()) +
166 " AND kind_id=" + kind;
143 } 167 }
144 168
145 @Override 169 @Override
146 protected String getDataString() { 170 protected String getDataString() {
147 if (FLYSUtils.isUsingOracle()) { 171 if (FLYSUtils.isUsingOracle()) {

http://dive4elements.wald.intevation.org