Mercurial > dive4elements > gnv-client
comparison gnv-artifacts/src/main/java/de/intevation/gnv/state/layer/LayerOutputState.java @ 1070:7096a2e13676
Added functionality to publish the the mbr of the generated layer to
the client.
gnv-artifacts/trunk@1166 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Tim Englich <tim.englich@intevation.de> |
---|---|
date | Mon, 07 Jun 2010 14:42:42 +0000 |
parents | 04967dc9c83f |
children | faae3fc7b792 |
comparison
equal
deleted
inserted
replaced
1069:0d15e515f88d | 1070:7096a2e13676 |
---|---|
9 | 9 |
10 import org.apache.log4j.Logger; | 10 import org.apache.log4j.Logger; |
11 import org.w3c.dom.Document; | 11 import org.w3c.dom.Document; |
12 import org.w3c.dom.Node; | 12 import org.w3c.dom.Node; |
13 | 13 |
14 import com.vividsolutions.jts.geom.Envelope; | |
14 import com.vividsolutions.jts.geom.Geometry; | 15 import com.vividsolutions.jts.geom.Geometry; |
15 import com.vividsolutions.jts.io.ParseException; | 16 import com.vividsolutions.jts.io.ParseException; |
16 import com.vividsolutions.jts.io.WKTReader; | 17 import com.vividsolutions.jts.io.WKTReader; |
17 | 18 |
18 import de.intevation.artifactdatabase.Config; | 19 import de.intevation.artifactdatabase.Config; |
233 /** | 234 /** |
234 * Fetches the Data from the Databasebackend. | 235 * Fetches the Data from the Databasebackend. |
235 * | 236 * |
236 * @return the resultdata. | 237 * @return the resultdata. |
237 */ | 238 */ |
238 protected Collection<Result> fetchData(LayerMetaData layerMetaData){ | 239 protected Collection<Result> fetchData(LayerMetaData layerMetaData, Envelope mbr){ |
239 log.debug("LayerOutputState.fetchData"); | 240 log.debug("LayerOutputState.fetchData"); |
240 Collection<Result> data = null; | 241 Collection<Result> data = null; |
241 QueryExecutor queryExecutor = QueryExecutorFactory.getInstance() | 242 QueryExecutor queryExecutor = QueryExecutorFactory.getInstance() |
242 .getQueryExecutor(); | 243 .getQueryExecutor(); |
243 try { | 244 try { |
244 data = queryExecutor.executeQuery(dataQueryID, | 245 data = queryExecutor.executeQuery(dataQueryID, |
245 layerMetaData.getQueryValues()); | 246 layerMetaData.getQueryValues()); |
246 if (data != null && layerMetaData.getGeometryWKT() != null){ | 247 if (data != null){ |
247 WKTReader wktReader = new WKTReader(); | 248 WKTReader wktReader = new WKTReader(); |
248 Geometry border = wktReader.read(layerMetaData.getGeometryWKT()); | 249 Geometry border = null; |
250 if (layerMetaData.getGeometryWKT() != null){ | |
251 border = wktReader.read(layerMetaData.getGeometryWKT()); | |
252 } | |
249 Iterator<Result> dataIt = data.iterator(); | 253 Iterator<Result> dataIt = data.iterator(); |
250 while (dataIt.hasNext()){ | 254 while (dataIt.hasNext()){ |
251 // Trim the Geometries using the | 255 // Trim the Geometries using the |
252 // Geometry if one is available. | 256 // Geometry if one is available. |
253 Result current = dataIt.next(); | 257 Result current = dataIt.next(); |
258 } catch (Exception e) { | 262 } catch (Exception e) { |
259 log.error("Error parsing Geometry "+ currentWKT); | 263 log.error("Error parsing Geometry "+ currentWKT); |
260 log.error(e,e); | 264 log.error(e,e); |
261 } | 265 } |
262 if (currentGeometry != null){ | 266 if (currentGeometry != null){ |
263 Geometry newGeometry = currentGeometry.intersection(border); | 267 if (border != null){ |
264 current.addColumnValue(0, newGeometry.toText()); | 268 currentGeometry = currentGeometry.intersection(border); |
269 current.addColumnValue(0, currentGeometry.toText()); | |
270 } | |
271 if (mbr.isNull()){ | |
272 mbr.init(currentGeometry.getEnvelopeInternal()); | |
273 }else{ | |
274 mbr.expandToInclude(currentGeometry.getEnvelopeInternal()); | |
275 } | |
265 } | 276 } |
266 } | 277 } |
267 } | 278 } |
268 } catch (QueryException e) { | 279 } catch (QueryException e) { |
269 log.error(e,e); | 280 log.error(e,e); |
473 if (!this.createShapeDir(baseDir, uuid)){ | 484 if (!this.createShapeDir(baseDir, uuid)){ |
474 return; | 485 return; |
475 } | 486 } |
476 Iterator<LayerMetaData> it = layerMetaData.iterator(); | 487 Iterator<LayerMetaData> it = layerMetaData.iterator(); |
477 int i = 1; | 488 int i = 1; |
489 Envelope mbr = new Envelope(); | |
478 while(it.hasNext()){ | 490 while(it.hasNext()){ |
479 LayerMetaData lmd = it.next(); | 491 LayerMetaData lmd = it.next(); |
480 Collection<Result> data = this.fetchData(lmd); | 492 Collection<Result> data = this.fetchData(lmd, mbr); |
481 p = writeToShapeFile(uuid, data, callContext,lmd.getGeometryType(),i++); | 493 p = writeToShapeFile(uuid, data, callContext,lmd.getGeometryType(),i++); |
482 } | 494 } |
483 if (p != null) { | 495 if (p != null) { |
484 FileUtils.createZipArchive(new File(p), output); | 496 FileUtils.createZipArchive(new File(p), output); |
485 } | 497 } |
629 if (prefix == null) { | 641 if (prefix == null) { |
630 prefix = uuid; | 642 prefix = uuid; |
631 } | 643 } |
632 | 644 |
633 int layerNumber = 0; | 645 int layerNumber = 0; |
646 Envelope mbr = new Envelope(); | |
634 while (it.hasNext()){ | 647 while (it.hasNext()){ |
635 LayerMetaData lmd = it.next(); | 648 LayerMetaData lmd = it.next(); |
636 layerNumber ++; | 649 layerNumber ++; |
637 | 650 |
638 String geometryType = lmd.getGeometryType(); | 651 String geometryType = lmd.getGeometryType(); |
639 String templateId = lmd.getTemplateID(); | 652 String templateId = lmd.getTemplateID(); |
640 | 653 |
641 ExclusiveExec.UniqueKey key = ExclusiveExec.INSTANCE.acquire(uuid); | 654 ExclusiveExec.UniqueKey key = ExclusiveExec.INSTANCE.acquire(uuid); |
642 try{ | 655 try{ |
643 Collection<Result> results = this.fetchData(lmd); | 656 Collection<Result> results = this.fetchData(lmd,mbr); |
644 if (results != null && writeToShapeFile(uuid, results, | 657 if (results != null && writeToShapeFile(uuid, results, |
645 callContext, | 658 callContext, |
646 geometryType, | 659 geometryType, |
647 layerNumber) != null) { | 660 layerNumber) != null) { |
648 String name = getLayerName(uuid, layerNumber); | 661 String name = getLayerName(uuid, layerNumber); |
661 } | 674 } |
662 | 675 |
663 success = true; | 676 success = true; |
664 | 677 |
665 if (meta != null && !it.hasNext()) { | 678 if (meta != null && !it.hasNext()) { |
679 MetaWriter.insertMbr(mbr, "EPSG:4326",meta); | |
666 MetaWriter.writeMetaFile(path, meta); | 680 MetaWriter.writeMetaFile(path, meta); |
667 MapfileGenerator.getInstance().update(); | 681 MapfileGenerator.getInstance().update(); |
668 return meta; | 682 return meta; |
669 } | 683 } |
670 }finally{ | 684 }finally{ |
671 ExclusiveExec.INSTANCE.release(key); | 685 ExclusiveExec.INSTANCE.release(key); |
672 } | 686 } |
673 } | 687 } |
688 | |
674 return document; | 689 return document; |
675 } | 690 } |
676 finally { | 691 finally { |
677 if (!success && createdDir) { | 692 if (!success && createdDir) { |
678 FileUtils.deleteRecursive(shapeDir); | 693 FileUtils.deleteRecursive(shapeDir); |