comparison flys-client/src/main/java/de/intevation/flys/client/server/MapPrintServiceImpl.java @ 2510:4861ab2c28d2

map print: add legend flys-client/trunk@4365 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 09 May 2012 16:13:45 +0000
parents 4aa70825bde1
children 532c590beb3e
comparison
equal deleted inserted replaced
2509:3952429cc41b 2510:4861ab2c28d2
13 import de.intevation.artifacts.httpclient.http.HttpClientImpl; 13 import de.intevation.artifacts.httpclient.http.HttpClientImpl;
14 14
15 import de.intevation.artifacts.httpclient.http.response.DocumentResponseHandler; 15 import de.intevation.artifacts.httpclient.http.response.DocumentResponseHandler;
16 16
17 import de.intevation.flys.client.shared.model.MapConfig; 17 import de.intevation.flys.client.shared.model.MapConfig;
18 import de.intevation.flys.client.shared.MapUtils;
18 19
19 import java.io.BufferedInputStream; 20 import java.io.BufferedInputStream;
20 import java.io.BufferedOutputStream; 21 import java.io.BufferedOutputStream;
21 import java.io.File; 22 import java.io.File;
22 import java.io.FileInputStream; 23 import java.io.FileInputStream;
129 spec.put("layout", "A4 portrait"); 130 spec.put("layout", "A4 portrait");
130 spec.put("title", "FLYS Druck"); 131 spec.put("title", "FLYS Druck");
131 spec.put("srs", "EPSG:" + mapConfig.getSrid()); 132 spec.put("srs", "EPSG:" + mapConfig.getSrid());
132 spec.put("dpi", Integer.valueOf(254)); 133 spec.put("dpi", Integer.valueOf(254));
133 spec.put("units", "m"); 134 spec.put("units", "m");
135 spec.put("geodaetic", "true");
134 spec.put("outputFormat", "pdf"); 136 spec.put("outputFormat", "pdf");
135 137
138 String ns = ArtifactNamespaceContext.NAMESPACE_URI;
136 139
137 List<Layer> ls = new ArrayList<Layer>(); 140 List<Layer> ls = new ArrayList<Layer>();
138 Layer l = new Layer(); 141 { Layer l = new Layer();
139 142
140 String ns = ArtifactNamespaceContext.NAMESPACE_URI; 143 NodeList facets = descDocument.getElementsByTagNameNS(ns, "facet");
141 NodeList facets = descDocument.getElementsByTagNameNS(ns, "facet"); 144
142 145 for (int i = 0, N = facets.getLength(); i < N; ++i) {
143 for (int i = 0, N = facets.getLength(); i < N; ++i) { 146 Element element = (Element)facets.item(i);
144 Element element = (Element)facets.item(i); 147 if (l.setup(element)) {
145 if (l.setup(element)) { 148 ls.add(l);
146 ls.add(l); 149 l = new Layer();
147 l = new Layer(); 150 }
148 } 151 }
149 } 152 }
150 153
151 // Establish Z order. 154 // Establish Z order.
152 Collections.sort(ls); 155 Collections.sort(ls);
153 156
154 List<Object> layers = new ArrayList<Object>(ls.size()); 157 List<Object> layers = new ArrayList<Object>(ls.size());
155 158
156 for (Layer layer: ls) { 159 for (int i = ls.size()-1; i >= 0; --i) {
157 layers.add(layer.toMap()); 160 layers.add(ls.get(i).toMap());
158 } 161 }
159 162
160 spec.put("layers", layers); 163 spec.put("layers", layers);
161 spec.put("name", "Name"); 164 spec.put("name", "Name");
162 165
163 List<Object> pages = new ArrayList<Object>(1); 166 List<Object> pages = new ArrayList<Object>(1);
164 167
165 spec.put("pages", pages);
166 168
167 Map<String, Object> page = new LinkedHashMap<String, Object>(); 169 Map<String, Object> page = new LinkedHashMap<String, Object>();
168 170
169 List<Object> bounds = new ArrayList<Object>(4); 171 List<Object> bounds = new ArrayList<Object>(4);
170 bounds.add(Double.valueOf(minX)); 172 bounds.add(minX);
171 bounds.add(Double.valueOf(minY)); 173 bounds.add(minY);
172 bounds.add(Double.valueOf(maxX)); 174 bounds.add(maxX);
173 bounds.add(Double.valueOf(maxY)); 175 bounds.add(maxY);
174
175 page.put("bbox", bounds); 176 page.put("bbox", bounds);
177
178 /*
179 bounds.add(Double.valueOf((minX+maxX)*0.5));
180 bounds.add(Double.valueOf((minY+maxY)*0.5));
181
182 page.put("center", bounds);
183 page.put("scale", Integer.valueOf(50000));
184 */
176 185
177 page.put("mapTitle", "FLYS Karte"); 186 page.put("mapTitle", "FLYS Karte");
178 page.put("comment", "Eine mit FLYS gedruckte Karte."); 187 page.put("comment", "Eine mit FLYS gedruckte Karte.");
179 page.put("rotation", Integer.valueOf(0)); 188 page.put("rotation", Integer.valueOf(0));
180 189
181 pages.add(page); 190 pages.add(page);
191 spec.put("pages", pages);
192
193 List<Object> legends = new ArrayList<Object>(layers.size());
194
195 for (Layer layer: ls) {
196 Map<String, Object> legend = new LinkedHashMap<String, Object>();
197 List<Object> classes = new ArrayList<Object>(1);
198 Map<String, Object> clazz = new LinkedHashMap<String, Object>();
199 String lgu = MapUtils.getLegendGraphicUrl(layer.url, layer.layers);
200 clazz.put("icon", lgu);
201 clazz.put("name", layer.description);
202 classes.add(clazz);
203 legend.put("classes", classes);
204 legend.put("name", layer.description);
205 legends.add(legend);
206 }
207
208 spec.put("legends", legends);
182 209
183 return JSON.toJSONString(spec); 210 return JSON.toJSONString(spec);
184 } 211 }
185 212
186 213
275 } 302 }
276 catch (NumberFormatException nfe) { 303 catch (NumberFormatException nfe) {
277 throw new ServletException(nfe); 304 throw new ServletException(nfe);
278 } 305 }
279 } 306 }
307 if (log.isDebugEnabled()) {
308 log.debug("minX: " + minX);
309 log.debug("maxX: " + maxX);
310 log.debug("minY: " + minY);
311 log.debug("maxY: " + maxY);
312 }
280 313
281 String spec = generateSpec( 314 String spec = generateSpec(
282 descDocument, 315 descDocument,
283 mapConfig, 316 mapConfig,
284 minX, minY, 317 minX, minY,
285 maxX, maxY); 318 maxX, maxY);
286 319
287 if (log.isDebugEnabled()) { 320 if (log.isDebugEnabled()) {
321 log.debug("Generated spec:");
288 log.debug(spec); 322 log.debug(spec);
289 //System.err.println(spec); 323 //System.err.println(spec);
290 } 324 }
291 325
292 producePDF(spec, resp); 326 producePDF(spec, resp);

http://dive4elements.wald.intevation.org